From 0c4c369927529eb7d47f56a3fd329c5e6a98320e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Fri, 19 May 2023 15:31:57 +0200
Subject: [PATCH 01/38] chore: Formater les fichiers CSS et HTML.

---
 .editorconfig                           |  5 +++-
 .metalint/htmlhint.config.js            |  2 +-
 .metalint/prettier_css.config.js        |  9 +++++++
 .metalint/prettier_javascript.config.js |  9 +++++++
 .metalint/prettier_tpl.config.js        |  9 +++++++
 src/engine/script.js                    |  2 +-
 src/engine/style.css                    |  4 +--
 src/extension/background/page.html      |  2 +-
 src/extension/popup/index.html          | 12 ++++-----
 src/module/audio/audio.css              |  3 ++-
 src/module/audio/audio.tpl              |  4 +--
 src/module/icon/icon.tpl                |  2 +-
 src/module/image/image.tpl              |  2 +-
 src/module/list/list.css                |  3 ++-
 src/module/list/list.tpl                |  4 +--
 src/module/podcast/podcast.css          |  3 ++-
 src/module/podcast/podcast.tpl          |  4 +--
 src/module/search/search.tpl            |  6 ++---
 src/module/single/single.css            |  3 ++-
 src/module/single/single.tpl            |  4 +--
 src/module/tools/contrast/contrast.tpl  |  4 +--
 src/module/tools/findrss/findrss.css    |  3 ++-
 src/module/tools/findrss/findrss.js     |  4 +--
 src/module/tools/findrss/findrss.tpl    |  6 ++---
 src/scraper/list/rss/rss.js             |  4 +--
 template/dashboard/3-columns.html       | 31 ++++++++++++++---------
 template/dashboard/4-columns.html       | 33 ++++++++++++++++---------
 27 files changed, 111 insertions(+), 66 deletions(-)
 create mode 100644 .metalint/prettier_css.config.js
 create mode 100644 .metalint/prettier_javascript.config.js
 create mode 100644 .metalint/prettier_tpl.config.js

diff --git a/.editorconfig b/.editorconfig
index 2394693..706a109 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -9,5 +9,8 @@ indent_style = space
 indent_size = 2
 max_line_length = 80
 
-[{*.js,*.ts}]
+[*.js]
+indent_size = 4
+
+[*.css]
 indent_size = 4
diff --git a/.metalint/htmlhint.config.js b/.metalint/htmlhint.config.js
index d370e8e..4e18771 100644
--- a/.metalint/htmlhint.config.js
+++ b/.metalint/htmlhint.config.js
@@ -17,7 +17,7 @@ export default {
     "attr-whitespace": true,
     "doctype-first": true,
     "doctype-html5": true,
-    "empty-tag-not-self-closed": true,
+    "empty-tag-not-self-closed": false,
     "head-script-disabled": true,
     "href-abs-or-rel": false,
     "html-lang-require": false,
diff --git a/.metalint/prettier_css.config.js b/.metalint/prettier_css.config.js
new file mode 100644
index 0000000..449047e
--- /dev/null
+++ b/.metalint/prettier_css.config.js
@@ -0,0 +1,9 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+export default {
+    tabWidth: 4,
+};
diff --git a/.metalint/prettier_javascript.config.js b/.metalint/prettier_javascript.config.js
new file mode 100644
index 0000000..449047e
--- /dev/null
+++ b/.metalint/prettier_javascript.config.js
@@ -0,0 +1,9 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+export default {
+    tabWidth: 4,
+};
diff --git a/.metalint/prettier_tpl.config.js b/.metalint/prettier_tpl.config.js
new file mode 100644
index 0000000..0921006
--- /dev/null
+++ b/.metalint/prettier_tpl.config.js
@@ -0,0 +1,9 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+export default {
+    parser: "html",
+};
diff --git a/src/engine/script.js b/src/engine/script.js
index 2b2b01f..ecb7029 100644
--- a/src/engine/script.js
+++ b/src/engine/script.js
@@ -74,6 +74,6 @@ document.head.append(link);
 
 // Activer les widgets.
 Array.from(
-    document.querySelectorAll(`body script[type="application/json"]`),
+    document.querySelectorAll('body script[type="application/json"]'),
     liven,
 );
diff --git a/src/engine/style.css b/src/engine/style.css
index a31ac5d..1c84e7c 100644
--- a/src/engine/style.css
+++ b/src/engine/style.css
@@ -5,9 +5,9 @@ body {
 .widget {
     border-radius: 2px;
     box-shadow:
-        0 2px 2px 0    rgba(0 0 0 / 14%),
+        0 2px 2px 0 rgba(0 0 0 / 14%),
         0 3px 1px -2px rgba(0 0 0 / 20%),
-        0 1px 5px 0    rgba(0 0 0 / 12%);
+        0 1px 5px 0 rgba(0 0 0 / 12%);
     margin: 4px;
     overflow: hidden;
 }
diff --git a/src/extension/background/page.html b/src/extension/background/page.html
index 202b1d7..732ffaf 100644
--- a/src/extension/background/page.html
+++ b/src/extension/background/page.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <meta charset="utf-8">
+    <meta charset="utf-8" />
     <title>Gout</title>
   </head>
   <body>
diff --git a/src/extension/popup/index.html b/src/extension/popup/index.html
index fe826cf..b02dca9 100644
--- a/src/extension/popup/index.html
+++ b/src/extension/popup/index.html
@@ -1,18 +1,18 @@
-<!DOCTYPE html>
+<!doctype html>
 <html>
   <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>Gout</title>
-    <link href="style.css" rel="stylesheet">
-    <link href="/img/icon.svg" rel="shortcut icon">
+    <link href="style.css" rel="stylesheet" />
+    <link href="/img/icon.svg" rel="shortcut icon" />
   </head>
   <body>
     <template>
       <li>
         <span></span>
         <button class="icon" title="Enlever">
-          <img src="img/remove.svg" alt="remove">
+          <img src="img/remove.svg" alt="remove" />
         </button>
       </li>
     </template>
diff --git a/src/module/audio/audio.css b/src/module/audio/audio.css
index fcd3d1c..8299ca9 100644
--- a/src/module/audio/audio.css
+++ b/src/module/audio/audio.css
@@ -48,7 +48,8 @@ input::-moz-range-thumb {
     height: 12px;
     width: 12px;
 }
-div:hover input, input.active {
+div:hover input,
+input.active {
     opacity: 80%;
 }
 div input:hover {
diff --git a/src/module/audio/audio.tpl b/src/module/audio/audio.tpl
index 352f206..06859f4 100644
--- a/src/module/audio/audio.tpl
+++ b/src/module/audio/audio.tpl
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <a rel="noopener noreferrer"><img></a>
-    <input type="range" value="0">
+    <a rel="noopener noreferrer"><img /></a>
+    <input type="range" value="0" />
   </div>
 </template>
diff --git a/src/module/icon/icon.tpl b/src/module/icon/icon.tpl
index 4b6d7f4..227c95a 100644
--- a/src/module/icon/icon.tpl
+++ b/src/module/icon/icon.tpl
@@ -1,5 +1,5 @@
 <template>
   <div>
-    <a rel="noopener noreferrer"><img></a>
+    <a rel="noopener noreferrer"><img /></a>
   </div>
 </template>
diff --git a/src/module/image/image.tpl b/src/module/image/image.tpl
index 8ad81e1..a6e5f6c 100644
--- a/src/module/image/image.tpl
+++ b/src/module/image/image.tpl
@@ -1,7 +1,7 @@
 <template>
   <template>
     <li>
-      <a rel="noopener noreferrer"><img></a>
+      <a rel="noopener noreferrer"><img /></a>
     </li>
   </template>
 
diff --git a/src/module/list/list.css b/src/module/list/list.css
index 11bc387..cfbcf4a 100644
--- a/src/module/list/list.css
+++ b/src/module/list/list.css
@@ -38,7 +38,8 @@ a {
     text-overflow: ellipsis;
     white-space: nowrap;
 }
-a:visited, li.empty a {
+a:visited,
+li.empty a {
     color: black;
 }
 a[href]:hover {
diff --git a/src/module/list/list.tpl b/src/module/list/list.tpl
index 0c21c2a..1f6da6a 100644
--- a/src/module/list/list.tpl
+++ b/src/module/list/list.tpl
@@ -1,8 +1,6 @@
 <template>
   <template>
-    <li>
-      <img> <a rel="noopener noreferrer"></a>
-    </li>
+    <li><img /> <a rel="noopener noreferrer"></a></li>
   </template>
 
   <ul></ul>
diff --git a/src/module/podcast/podcast.css b/src/module/podcast/podcast.css
index 5ff6bb6..0bb9392 100644
--- a/src/module/podcast/podcast.css
+++ b/src/module/podcast/podcast.css
@@ -40,7 +40,8 @@ a {
     text-overflow: ellipsis;
     white-space: nowrap;
 }
-a:visited, li.empty a {
+a:visited,
+li.empty a {
     color: black;
 }
 a[href]:hover {
diff --git a/src/module/podcast/podcast.tpl b/src/module/podcast/podcast.tpl
index 915616d..b841739 100644
--- a/src/module/podcast/podcast.tpl
+++ b/src/module/podcast/podcast.tpl
@@ -1,9 +1,9 @@
 <template>
   <template>
     <li>
-      <img>
+      <img />
       <a rel="noopener noreferrer"></a>
-      <input type="range" value="0">
+      <input type="range" value="0" />
       <audio></audio>
     </li>
   </template>
diff --git a/src/module/search/search.tpl b/src/module/search/search.tpl
index e77fd73..8e9fed0 100644
--- a/src/module/search/search.tpl
+++ b/src/module/search/search.tpl
@@ -1,15 +1,15 @@
 <template>
   <template>
     <li>
-      <img>
+      <img />
       <span></span>
     </li>
   </template>
 
   <div>
     <form>
-      <img>
-      <input name="" list="suggestions" placeholder="">
+      <img />
+      <input name="" list="suggestions" placeholder="" />
       <datalist id="suggestions" />
     </form>
     <ul></ul>
diff --git a/src/module/single/single.css b/src/module/single/single.css
index dab9e33..8a55dd0 100644
--- a/src/module/single/single.css
+++ b/src/module/single/single.css
@@ -29,7 +29,8 @@ a {
     text-overflow: ellipsis;
     white-space: nowrap;
 }
-a:visited, div.empty a {
+a:visited,
+div.empty a {
     color: black;
 }
 a[href]:hover {
diff --git a/src/module/single/single.tpl b/src/module/single/single.tpl
index 33b65b4..531ad96 100644
--- a/src/module/single/single.tpl
+++ b/src/module/single/single.tpl
@@ -1,5 +1,3 @@
 <template>
-  <div>
-    <img> <a rel="noopener noreferrer"></a>
-  </div>
+  <div><img /> <a rel="noopener noreferrer"></a></div>
 </template>
diff --git a/src/module/tools/contrast/contrast.tpl b/src/module/tools/contrast/contrast.tpl
index c71e265..92884b2 100644
--- a/src/module/tools/contrast/contrast.tpl
+++ b/src/module/tools/contrast/contrast.tpl
@@ -1,5 +1,3 @@
 <template>
-  <div>
-    <input type="color"> <span></span>
-  </div>
+  <div><input type="color" /> <span></span></div>
 </template>
diff --git a/src/module/tools/findrss/findrss.css b/src/module/tools/findrss/findrss.css
index 965c65d..4d413a4 100644
--- a/src/module/tools/findrss/findrss.css
+++ b/src/module/tools/findrss/findrss.css
@@ -67,7 +67,8 @@ a {
     text-overflow: ellipsis;
     white-space: nowrap;
 }
-a:visited, li.empty a {
+a:visited,
+li.empty a {
     color: black;
 }
 a[href]:hover {
diff --git a/src/module/tools/findrss/findrss.js b/src/module/tools/findrss/findrss.js
index bd7df8d..b43520b 100644
--- a/src/module/tools/findrss/findrss.js
+++ b/src/module/tools/findrss/findrss.js
@@ -10,8 +10,8 @@ const extract = async function (url) {
     const doc = new DOMParser().parseFromString(text, "text/html");
 
     const selector =
-        `link[type="application/rss+xml"][href], ` +
-        ` link[type="application/atom+xml"][href]`;
+        'link[type="application/rss+xml"][href],' +
+        ' link[type="application/atom+xml"][href]';
     return Array.from(doc.querySelectorAll(selector), (link) => ({
         icon: import.meta.resolve("./img/rss.svg"),
         link: new URL(link.getAttribute("href"), url).href,
diff --git a/src/module/tools/findrss/findrss.tpl b/src/module/tools/findrss/findrss.tpl
index 93bd2f8..7b5ca29 100644
--- a/src/module/tools/findrss/findrss.tpl
+++ b/src/module/tools/findrss/findrss.tpl
@@ -1,13 +1,11 @@
 <template>
   <template>
-    <li>
-      <img> <a rel="noopener noreferrer"></a>
-    </li>
+    <li><img /> <a rel="noopener noreferrer"></a></li>
   </template>
 
   <div>
     <form>
-      <input type="url">
+      <input type="url" />
     </form>
     <ul></ul>
   </div>
diff --git a/src/scraper/list/rss/rss.js b/src/scraper/list/rss/rss.js
index 41336c8..2c3bd58 100644
--- a/src/scraper/list/rss/rss.js
+++ b/src/scraper/list/rss/rss.js
@@ -18,7 +18,7 @@ export default class RSS {
         // eslint-disable-next-line array-func/from-map
         return Array.from(xml.querySelectorAll("item"), (item) => ({
             audio: item
-                .querySelector(`enclosure[type^="audio/"]`)
+                .querySelector('enclosure[type^="audio/"]')
                 ?.getAttribute("url"),
             date:
                 item.querySelector("pubDate")?.textContent ??
@@ -27,7 +27,7 @@ export default class RSS {
             desc: item.querySelector("description")?.textContent ?? "",
             guid: item.querySelector("guid")?.textContent ?? "",
             img: item
-                .querySelector(`enclosure[type^="image/"]`)
+                .querySelector('enclosure[type^="image/"]')
                 ?.getAttribute("url"),
             link: item.querySelector("link")?.textContent,
             title: item.querySelector("title").textContent,
diff --git a/template/dashboard/3-columns.html b/template/dashboard/3-columns.html
index 51db9a2..2c22ff9 100644
--- a/template/dashboard/3-columns.html
+++ b/template/dashboard/3-columns.html
@@ -1,21 +1,30 @@
-<!DOCTYPE html>
+<!doctype html>
 <html lang="fr-FR">
   <head>
-    <meta charset="utf-8">
-    <link href="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg"
-          rel="shortcut icon">
+    <meta charset="utf-8" />
+    <link
+      href="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg"
+      rel="shortcut icon"
+    />
     <title>Gout</title>
-    <script src="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js"
-            type="module"></script>
+    <script
+      src="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js"
+      type="module"
+    ></script>
     <style>
-        body { display: flex; }
-        div  { display: flex; flex-direction: column; }
+      body {
+        display: flex;
+      }
+      div {
+        display: flex;
+        flex-direction: column;
+      }
     </style>
   </head>
   <body>
     <!-- Les largeurs des colonnes sont modifiables en changeant la valeur de
          la propriété width. -->
-    <div style="width: 33%;">
+    <div style="width: 33%">
       <!--
         Les widgets sont à ajouter dans ce div pour les afficher dans la
         première colonne. Voici un exemple de structure d'un widget :
@@ -27,11 +36,11 @@
           </script>
       -->
     </div>
-    <div style="width: 33%;">
+    <div style="width: 33%">
       <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
            deuxième colonne. -->
     </div>
-    <div style="width: 33%;">
+    <div style="width: 33%">
       <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
            dernière colonne. -->
     </div>
diff --git a/template/dashboard/4-columns.html b/template/dashboard/4-columns.html
index b8ac213..bf75f5b 100644
--- a/template/dashboard/4-columns.html
+++ b/template/dashboard/4-columns.html
@@ -1,21 +1,30 @@
-<!DOCTYPE html>
+<!doctype html>
 <html lang="fr-FR">
   <head>
-    <meta charset="utf-8">
-    <link href="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg"
-          rel="shortcut icon">
+    <meta charset="utf-8" />
+    <link
+      href="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg"
+      rel="shortcut icon"
+    />
     <title>Gout</title>
-    <script src="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js"
-            type="module"></script>
+    <script
+      src="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js"
+      type="module"
+    ></script>
     <style>
-        body { display: flex; }
-        div  { display: flex; flex-direction: column; }
+      body {
+        display: flex;
+      }
+      div {
+        display: flex;
+        flex-direction: column;
+      }
     </style>
   </head>
   <body>
     <!-- Les largeurs des colonnes sont modifiables en changeant la valeur de
          la propriété width. -->
-    <div style="width: 25%;">
+    <div style="width: 25%">
       <!--
         Les widgets sont à ajouter dans ce div pour les afficher dans la
         première colonne. Voici un exemple de structure d'un widget :
@@ -27,15 +36,15 @@
           </script>
       -->
     </div>
-    <div style="width: 25%;">
+    <div style="width: 25%">
       <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
            deuxième colonne. -->
     </div>
-    <div style="width: 25%;">
+    <div style="width: 25%">
       <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
            troisième colonne. -->
     </div>
-    <div style="width: 25%;">
+    <div style="width: 25%">
       <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
            dernière colonne. -->
     </div>

From c91d0fa7befa9582dad35712b2a3fdf630183f31 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sat, 23 Sep 2023 17:19:09 +0200
Subject: [PATCH 02/38] fix: Corriger le nom des classes.

---
 src/engine/script.js                        | 9 ++++++---
 src/module/audio/audio.js                   | 2 +-
 src/module/clock/clock.js                   | 2 +-
 src/module/icon/icon.js                     | 2 +-
 src/module/iframe/iframe.js                 | 2 +-
 src/module/image/image.js                   | 2 +-
 src/module/list/list.js                     | 2 +-
 src/module/notepad/notepad.js               | 2 +-
 src/module/podcast/podcast.js               | 2 +-
 src/module/search/search.js                 | 2 +-
 src/module/single/single.js                 | 2 +-
 src/module/text/text.js                     | 2 +-
 src/module/tools/contrast/contrast.js       | 2 +-
 src/module/tools/findrss/findrss.js         | 2 +-
 src/scraper/icon/ping/ping.js               | 2 +-
 src/scraper/list/jsonfeed/jsonfeed.js       | 2 +-
 src/scraper/list/rss/rss.js                 | 2 +-
 src/scraper/repeater/repeater.js            | 2 +-
 src/scraper/search/opensearch/opensearch.js | 2 +-
 19 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/src/engine/script.js b/src/engine/script.js
index ecb7029..1dbb35d 100644
--- a/src/engine/script.js
+++ b/src/engine/script.js
@@ -44,9 +44,12 @@ const loadWidget = async function (widget) {
 
     // eslint-disable-next-line no-unsanitized/method
     const { default: Module } = await import(widget.module.url);
-    const name = "gout-" + hashCode(widget.module.url);
-    if (undefined === customElements.get(name)) {
-        customElements.define(name, Module);
+    if (null === customElements.getName(Module)) {
+        customElements.define(
+            `gout-${Module.name.toLowerCase()}` +
+                `-${hashCode(widget.module.url)}`,
+            Module,
+        );
     }
     return new Module(widget.module.options ?? {}, scrapers);
 };
diff --git a/src/module/audio/audio.js b/src/module/audio/audio.js
index e9bffa2..a697cbb 100644
--- a/src/module/audio/audio.js
+++ b/src/module/audio/audio.js
@@ -6,7 +6,7 @@
 
 import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
 
-export default class Audio extends HTMLElement {
+export default class AudioModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/clock/clock.js b/src/module/clock/clock.js
index ee26e0a..2fa2252 100644
--- a/src/module/clock/clock.js
+++ b/src/module/clock/clock.js
@@ -19,7 +19,7 @@ const animate = function (time, center) {
     return element;
 };
 
-export default class Clock extends HTMLElement {
+export default class ClockModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/icon/icon.js b/src/module/icon/icon.js
index c4cf498..ddb20c4 100644
--- a/src/module/icon/icon.js
+++ b/src/module/icon/icon.js
@@ -6,7 +6,7 @@
 
 import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
 
-export default class Icon extends HTMLElement {
+export default class IconModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/iframe/iframe.js b/src/module/iframe/iframe.js
index a9fe633..6831349 100644
--- a/src/module/iframe/iframe.js
+++ b/src/module/iframe/iframe.js
@@ -6,7 +6,7 @@
 
 import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
 
-export default class IFrame extends HTMLElement {
+export default class IFrameModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/image/image.js b/src/module/image/image.js
index cd9289b..a0a529e 100644
--- a/src/module/image/image.js
+++ b/src/module/image/image.js
@@ -17,7 +17,7 @@ const hashCode = function (item) {
     ).toString(36);
 };
 
-export default class Image extends HTMLElement {
+export default class ImageModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/list/list.js b/src/module/list/list.js
index f763971..01072eb 100644
--- a/src/module/list/list.js
+++ b/src/module/list/list.js
@@ -17,7 +17,7 @@ const hashCode = function (item) {
     ).toString(36);
 };
 
-export default class List extends HTMLElement {
+export default class ListModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/notepad/notepad.js b/src/module/notepad/notepad.js
index e9d28d0..2132aa3 100644
--- a/src/module/notepad/notepad.js
+++ b/src/module/notepad/notepad.js
@@ -15,7 +15,7 @@ const hashCode = function (item) {
     ).toString(36);
 };
 
-export default class Notepad extends HTMLElement {
+export default class NotepadModule extends HTMLElement {
     #options;
 
     #guid;
diff --git a/src/module/podcast/podcast.js b/src/module/podcast/podcast.js
index 2b68629..72bbcd5 100644
--- a/src/module/podcast/podcast.js
+++ b/src/module/podcast/podcast.js
@@ -49,7 +49,7 @@ const move = function (event) {
     audio.currentTime = li.querySelector("input").valueAsNumber;
 };
 
-export default class Podcast extends HTMLElement {
+export default class PodcastModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/search/search.js b/src/module/search/search.js
index 952d2f1..482d307 100644
--- a/src/module/search/search.js
+++ b/src/module/search/search.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-export default class Search extends HTMLElement {
+export default class SearchModule extends HTMLElement {
     #scrapers;
 
     #scraper;
diff --git a/src/module/single/single.js b/src/module/single/single.js
index 62c85c5..00df8ca 100644
--- a/src/module/single/single.js
+++ b/src/module/single/single.js
@@ -6,7 +6,7 @@
 
 import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
 
-export default class Single extends HTMLElement {
+export default class SingleModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/text/text.js b/src/module/text/text.js
index 4ef71b5..5137bae 100644
--- a/src/module/text/text.js
+++ b/src/module/text/text.js
@@ -6,7 +6,7 @@
 
 import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
 
-export default class Text extends HTMLElement {
+export default class TextModule extends HTMLElement {
     #options;
 
     #scrapers;
diff --git a/src/module/tools/contrast/contrast.js b/src/module/tools/contrast/contrast.js
index 4041dd6..d52bcc1 100644
--- a/src/module/tools/contrast/contrast.js
+++ b/src/module/tools/contrast/contrast.js
@@ -127,7 +127,7 @@ for (let r = 0; 255 > r; r += 1) {
     }
 }
 
-export default class Contrast extends HTMLElement {
+export default class ContrastModule extends HTMLElement {
     #calculate() {
         const input = this.shadowRoot.querySelector("input");
         input.title = input.value;
diff --git a/src/module/tools/findrss/findrss.js b/src/module/tools/findrss/findrss.js
index b43520b..27049a9 100644
--- a/src/module/tools/findrss/findrss.js
+++ b/src/module/tools/findrss/findrss.js
@@ -19,7 +19,7 @@ const extract = async function (url) {
     }));
 };
 
-export default class FindRSS extends HTMLElement {
+export default class FindRSSModule extends HTMLElement {
     #options;
 
     #max;
diff --git a/src/scraper/icon/ping/ping.js b/src/scraper/icon/ping/ping.js
index 0e5036e..cccff66 100644
--- a/src/scraper/icon/ping/ping.js
+++ b/src/scraper/icon/ping/ping.js
@@ -19,7 +19,7 @@ const DEFAULT_COLORS = {
     "...": "#757575",
 };
 
-export default class Ping {
+export default class PingScraper {
     #url;
 
     #colors;
diff --git a/src/scraper/list/jsonfeed/jsonfeed.js b/src/scraper/list/jsonfeed/jsonfeed.js
index 4e16ea1..0972a31 100644
--- a/src/scraper/list/jsonfeed/jsonfeed.js
+++ b/src/scraper/list/jsonfeed/jsonfeed.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-export default class JSONFeed {
+export default class JSONFeedScraper {
     #url;
 
     #complements;
diff --git a/src/scraper/list/rss/rss.js b/src/scraper/list/rss/rss.js
index 2c3bd58..c1f71f8 100644
--- a/src/scraper/list/rss/rss.js
+++ b/src/scraper/list/rss/rss.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-export default class RSS {
+export default class RSSScraper {
     #url;
 
     #complements;
diff --git a/src/scraper/repeater/repeater.js b/src/scraper/repeater/repeater.js
index ac23950..7ae1f59 100644
--- a/src/scraper/repeater/repeater.js
+++ b/src/scraper/repeater/repeater.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-export default class Repeater {
+export default class RepeaterScraper {
     constructor(options) {
         // eslint-disable-next-line no-constructor-return
         return new Proxy(
diff --git a/src/scraper/search/opensearch/opensearch.js b/src/scraper/search/opensearch/opensearch.js
index 93cc406..f70150b 100644
--- a/src/scraper/search/opensearch/opensearch.js
+++ b/src/scraper/search/opensearch/opensearch.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-export default class OpenSearch {
+export default class OpenSearchScraper {
     #url;
 
     #suggestions;

From ecd2315cb169af481a5ebdae7f3327a121e447e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sat, 23 Sep 2023 17:30:11 +0200
Subject: [PATCH 03/38] chore: Remplacer standard-version par release-please.

---
 .github/workflows/release.yml | 17 +++++++++++++++++
 .versionrc.json               | 18 ------------------
 package.json                  |  2 --
 3 files changed, 17 insertions(+), 20 deletions(-)
 create mode 100644 .github/workflows/release.yml
 delete mode 100644 .versionrc.json

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..3ed542e
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,17 @@
+name: Release
+on:
+  push:
+    branches: [main]
+
+jobs:
+  release-please:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: write
+      pull-requests: write
+    steps:
+      - name: Run Release Please
+        uses: google-github-actions/release-please-action@v3
+        with:
+          release-type: node
+          extra-files: src/extension/manifest.json
diff --git a/.versionrc.json b/.versionrc.json
deleted file mode 100644
index 6a254b9..0000000
--- a/.versionrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-  "types": [
-    { "type": "feat", "section": "Features" },
-    { "type": "fix", "section": "Bug Fixes" },
-    { "type": "chore", "hidden": true },
-    { "type": "docs", "hidden": true },
-    { "type": "style", "hidden": true },
-    { "type": "refactor", "hidden": true },
-    { "type": "perf", "section": "Performance Improvements" },
-    { "type": "test", "hidden": true }
-  ],
-  "packageFiles": "package.json",
-  "bumpFiles": [
-    "package.json",
-    "package-lock.json",
-    "src/extension/manifest.json"
-  ]
-}
diff --git a/package.json b/package.json
index 6229f89..f1b5dcc 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,6 @@
     "extension:chromium": "web-ext run -t chromium -s src/extension/",
     "extension:firefox": "web-ext run -t firefox-desktop -s src/extension/",
     "build": "web-ext build -s src/extension/ -a build/ -o",
-    "release": "standard-version",
     "clean": "node .script/clean.js"
   },
   "dependencies": {
@@ -67,7 +66,6 @@
     "npm-package-json-lint": "6.4.0",
     "prettier": "2.8.4",
     "purgecss": "5.0.0",
-    "standard-version": "9.5.0",
     "stylelint": "15.2.0",
     "stylelint-order": "6.0.3",
     "typedoc": "0.23.26",

From ebb3cba7bc03a738ef59055d857b2673dade3e32 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sat, 23 Sep 2023 18:13:07 +0200
Subject: [PATCH 04/38] =?UTF-8?q?fix:=20Corriger=20des=20fautes=20de=20fra?=
 =?UTF-8?q?n=C3=A7ais.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .metalint/eslint.config.js                | 18 +++++++++---------
 .metalint/npm-package-json-lint.config.js | 20 ++++++++++----------
 .metalint/stylelint.config.js             |  2 +-
 src/module/audio/README.md                |  4 ++--
 src/module/icon/README.md                 |  8 ++++----
 src/module/image/README.md                |  4 ++--
 src/module/list/README.md                 |  4 ++--
 src/module/notepad/README.md              |  4 ++--
 src/module/podcast/README.md              |  4 ++--
 src/module/search/README.md               |  2 +-
 src/module/single/README.md               |  4 ++--
 src/module/text/README.md                 |  4 ++--
 src/module/tools/contrast/README.md       |  2 +-
 src/module/tools/contrast/contrast.js     |  2 +-
 14 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/.metalint/eslint.config.js b/.metalint/eslint.config.js
index 77af247..89321d4 100644
--- a/.metalint/eslint.config.js
+++ b/.metalint/eslint.config.js
@@ -466,14 +466,14 @@ export default {
         "import/no-mutable-exports": "error",
         "import/no-named-as-default": "off",
         "import/no-named-as-default-member": "off",
-        // Ne pas appliquer cette règle car elle ne fonctionnne pas quand le nom
+        // Ne pas appliquer cette règle, car elle ne fonctionne pas quand le nom
         // du fichier de configuration de ESLint n'est pas standard.
         // https://github.com/import-js/eslint-plugin-import/issues/2678
         "import/no-unused-modules": "off",
 
         // Module systems.
-        // Désactiver cette règle car no-undef remontera une erreur car les
-        // méthodes define() et require() ne sont pas définies.
+        // Désactiver cette règle et laisser la règle no-undef remonter les
+        // erreurs, car les méthodes define() et require() ne sont pas définies.
         "import/no-amd": "off",
         // Désactiver cette règle et préférer unicorn/prefer-module.
         "import/no-commonjs": "off",
@@ -487,7 +487,7 @@ export default {
         "import/namespace": "error",
         "import/no-absolute-path": "error",
         "import/no-cycle": ["error", { ignoreExternal: true }],
-        // Désactiver cette règle car la méthode require() est déjà interdite.
+        // Désactiver cette règle, car la méthode require() est déjà interdite.
         "import/no-dynamic-require": "off",
         "import/no-internal-modules": "off",
         "import/no-relative-packages": "error",
@@ -515,8 +515,8 @@ export default {
         "import/first": "error",
         "import/group-exports": "off",
         "import/max-dependencies": "off",
-        // Ne pas activer l'option "considerComments" car les commentaires entre
-        // les imports ne sont pas gérés.
+        // Ne pas activer l'option "considerComments", car les commentaires
+        // entre les imports ne sont pas gérés.
         // https://github.com/import-js/eslint-plugin-import/issues/2673
         "import/newline-after-import": ["error", { considerComments: false }],
         "import/no-anonymous-default-export": [
@@ -545,7 +545,7 @@ export default {
         // Plugin eslint-plugin-jsdoc.
         "jsdoc/check-access": "error",
         "jsdoc/check-alignment": "error",
-        // Désactiver cette règle car elle n'est pas pour le moment compatible
+        // Désactiver cette règle, car elle n'est pas pour le moment compatible
         // avec ESLint 8.
         // https://github.com/gajus/eslint-plugin-jsdoc/releases/tag/v37.0.0
         "jsdoc/check-examples": "off",
@@ -753,7 +753,7 @@ export default {
         "unicorn/no-invalid-remove-event-listener": "error",
         "unicorn/no-keyword-prefix": "error",
         "unicorn/no-lonely-if": "error",
-        // Utiliser la règle no-negated-condition d'ESLint car celle d'unicorn
+        // Utiliser la règle no-negated-condition d'ESLint, car celle d'unicorn
         // apporte seulement la correction automatique.
         "unicorn/no-negated-condition": "off",
         "unicorn/no-nested-ternary": "off",
@@ -836,7 +836,7 @@ export default {
         "unicorn/relative-url-style": "error",
         "unicorn/require-array-join-separator": "off",
         "unicorn/require-number-to-fixed-digits-argument": "off",
-        // Désactiver cette règles car il y a des faux-positifs avec la méthode
+        // Désactiver cette règle, car il y a des faux-positifs avec la méthode
         // port.postMessage() des WebExtensions.
         // https://github.com/sindresorhus/eslint-plugin-unicorn/issues/1396
         "unicorn/require-post-message-target-origin": "off",
diff --git a/.metalint/npm-package-json-lint.config.js b/.metalint/npm-package-json-lint.config.js
index c1fd672..07a0d10 100644
--- a/.metalint/npm-package-json-lint.config.js
+++ b/.metalint/npm-package-json-lint.config.js
@@ -79,21 +79,21 @@ export default {
         "no-repeated-dependencies": "error",
 
         "no-absolute-version-dependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-dependencies oblige les versions absolues.
         "no-archive-dependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-dependencies oblige les versions absolues.
         "no-caret-version-dependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-dependencies oblige les versions absolues.
         "no-file-dependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-dependencies oblige les versions absolues.
         "no-git-dependencies": "off",
         "no-restricted-dependencies": "off",
         "no-restricted-pre-release-dependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-dependencies oblige les versions absolues.
         "no-tilde-version-dependencies": "off",
         "prefer-absolute-version-dependencies": "error",
@@ -103,21 +103,21 @@ export default {
         "prefer-tilde-version-dependencies": "off",
 
         "no-absolute-version-devDependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-devDependencies oblige les versions absolues.
         "no-archive-devDependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-devDependencies oblige les versions absolues.
         "no-caret-version-devDependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-devDependencies oblige les versions absolues.
         "no-file-devDependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-devDependencies oblige les versions absolues.
         "no-git-devDependencies": "off",
         "no-restricted-devDependencies": "off",
         "no-restricted-pre-release-devDependencies": "off",
-        // Ne pas activer cette règle car la règle
+        // Ne pas activer cette règle, car la règle
         // prefer-absolute-version-devDependencies oblige les versions absolues.
         "no-tilde-version-devDependencies": "off",
         "prefer-absolute-version-devDependencies": "error",
diff --git a/.metalint/stylelint.config.js b/.metalint/stylelint.config.js
index a90fe54..c65ba44 100644
--- a/.metalint/stylelint.config.js
+++ b/.metalint/stylelint.config.js
@@ -41,7 +41,7 @@ export default {
         "custom-property-no-missing-var-function": true,
         "font-family-no-missing-generic-family-keyword": true,
 
-        // Non-stantard.
+        // Non-standard.
         "function-linear-gradient-no-nonstandard-direction": true,
 
         // Overrides
diff --git a/src/module/audio/README.md b/src/module/audio/README.md
index 79242a0..1df578a 100644
--- a/src/module/audio/README.md
+++ b/src/module/audio/README.md
@@ -156,8 +156,8 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le titre de l'élément affiché dans l'info-bulle. Par défaut, aucune
-        info-bulle n'est affichée.
+        Le titre de l'élément affiché dans l'infobulle. Par défaut, aucune
+        infobulle n'est affichée.
       </p>
       <p>
         Exemple : <code>"La meilleur radio !"</code>.
diff --git a/src/module/icon/README.md b/src/module/icon/README.md
index 8f6a3b3..1f36d80 100644
--- a/src/module/icon/README.md
+++ b/src/module/icon/README.md
@@ -143,8 +143,8 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le titre de l'élément affiché dans l'info-bulle. Par défaut, aucune
-        info-bulle est affichée.
+        Le titre de l'élément affiché dans l'infobulle. Par défaut, aucune
+        infobulle est affichée.
       </p>
       <p>
         Exemple : <code>"Click me!"</code>.
@@ -168,8 +168,8 @@ Ce widget affiche un bouton qui redirige vers [GitHub](https://github.com/).
             "extract": [{
                 "color": "black",
                 "link": "https://github.com/",
-                "target": "_top"
-                "title": "GitHub",
+                "target": "_top",
+                "title": "GitHub"
             }]
         }
     }]
diff --git a/src/module/image/README.md b/src/module/image/README.md
index 639b4cc..e7564b6 100644
--- a/src/module/image/README.md
+++ b/src/module/image/README.md
@@ -156,8 +156,8 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le titre de l'élément affiché dans l'info-bulle. Par défaut, aucune
-        info-bulle n'est affichée.
+        Le titre de l'élément affiché dans l'infobulle. Par défaut, aucune
+        infobulle n'est affichée.
       </p>
       <p>
         Exemple : <code>"Magnifique photo !"</code>.
diff --git a/src/module/list/README.md b/src/module/list/README.md
index 14f35a5..a1895c0 100644
--- a/src/module/list/README.md
+++ b/src/module/list/README.md
@@ -134,8 +134,8 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        La description de l'élément affichée dans l'info-bulle. Par défaut,
-        aucune info-bulle n'est affichée.
+        La description de l'élément affichée dans l'infobulle. Par défaut,
+        aucune infobulle n'est affichée.
       </p>
       <p>
         Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
diff --git a/src/module/notepad/README.md b/src/module/notepad/README.md
index c39fdf3..b8e404f 100644
--- a/src/module/notepad/README.md
+++ b/src/module/notepad/README.md
@@ -52,8 +52,8 @@ propriétés suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        La description du bloc-notes affichée dans l'info-bulle. Par défaut,
-        aucune info-bulle n'est affichée.
+        La description du bloc-notes affichée dans l'infobulle. Par défaut,
+        aucune infobulle n'est affichée.
       </p>
       <p>
         Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
diff --git a/src/module/podcast/README.md b/src/module/podcast/README.md
index 0937083..95e22d3 100644
--- a/src/module/podcast/README.md
+++ b/src/module/podcast/README.md
@@ -146,8 +146,8 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        La description de l'élément affichée dans l'info-bulle. Par défaut,
-        aucune info-bulle n'est affichée.
+        La description de l'élément affichée dans l'infobulle. Par défaut,
+        aucune infobulle n'est affichée.
       </p>
       <p>
         Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
diff --git a/src/module/search/README.md b/src/module/search/README.md
index b532d9e..48c658f 100644
--- a/src/module/search/README.md
+++ b/src/module/search/README.md
@@ -6,7 +6,7 @@ Ce module affiche une zone de saisie pour faire une recherche.
 
 ## Options
 
-Aucune option est nécessaire. Tout le paramètrage se fait avec les scrapers.
+Aucune option n'est nécessaire. Tout le paramétrage se fait avec les scrapers.
 
 ## Scrapers
 
diff --git a/src/module/single/README.md b/src/module/single/README.md
index c63652a..1148901 100644
--- a/src/module/single/README.md
+++ b/src/module/single/README.md
@@ -104,8 +104,8 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        La description de l'élément affichée dans l'info-bulle. Par défaut,
-        aucune info-bulle n'est affichée.
+        La description de l'élément affichée dans l'infobulle. Par défaut,
+        aucune infobulle n'est affichée.
       </p>
       <p>
         Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
diff --git a/src/module/text/README.md b/src/module/text/README.md
index 8d319f5..7873a01 100644
--- a/src/module/text/README.md
+++ b/src/module/text/README.md
@@ -113,8 +113,8 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        La description de l'élément affichée dans l'info-bulle. Par défaut,
-        aucune info-bulle n'est affichée.
+        La description de l'élément affichée dans l'infobulle. Par défaut,
+        aucune infobulle n'est affichée.
       </p>
       <p>
         Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
diff --git a/src/module/tools/contrast/README.md b/src/module/tools/contrast/README.md
index 6d53400..c69985a 100644
--- a/src/module/tools/contrast/README.md
+++ b/src/module/tools/contrast/README.md
@@ -3,7 +3,7 @@
 > Mots-clés : gout, gout-module, gout-module-tools, gout-module-tools-contrast.
 
 Ce module affiche un champ pour saisir une couleur et il retourne la couleur la
-plus proche ayant un rapport de constrate supérieure à 4,5 avec le noir et le
+plus proche ayant un rapport de contraste supérieur à 4,5 avec le noir et le
 blanc.
 
 ## Options
diff --git a/src/module/tools/contrast/contrast.js b/src/module/tools/contrast/contrast.js
index d52bcc1..120fcad 100644
--- a/src/module/tools/contrast/contrast.js
+++ b/src/module/tools/contrast/contrast.js
@@ -101,7 +101,7 @@ const calculateLuminous = function (rgb) {
  *
  * @param {number} l1 La première luminance.
  * @param {number} l2 La deuxième luminance.
- * @returns {number} Le constraste.
+ * @returns {number} Le contraste.
  * @see https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-procedure
  */
 const calculateContrast = function (l1, l2) {

From b017aaade74a678200fa4a8c597463fcd6296c33 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sat, 23 Sep 2023 18:17:08 +0200
Subject: [PATCH 05/38] =?UTF-8?q?fix:=20G=C3=A9rer=20correctement=20les=20?=
 =?UTF-8?q?async=20/=20await.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/module/audio/audio.js     |  6 +++---
 src/module/clock/clock.js     | 10 +++++-----
 src/module/icon/icon.js       |  6 +++---
 src/module/iframe/iframe.js   |  6 +++---
 src/module/image/image.js     |  6 +++---
 src/module/list/list.js       |  6 +++---
 src/module/podcast/podcast.js |  6 +++---
 src/module/single/single.js   |  6 +++---
 src/module/text/text.js       |  6 +++---
 9 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/src/module/audio/audio.js b/src/module/audio/audio.js
index a697cbb..4370265 100644
--- a/src/module/audio/audio.js
+++ b/src/module/audio/audio.js
@@ -90,10 +90,10 @@ export default class AudioModule extends HTMLElement {
         }
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -124,6 +124,6 @@ export default class AudioModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }
diff --git a/src/module/clock/clock.js b/src/module/clock/clock.js
index 2fa2252..3f1f44b 100644
--- a/src/module/clock/clock.js
+++ b/src/module/clock/clock.js
@@ -100,16 +100,16 @@ export default class ClockModule extends HTMLElement {
         const items = results.flat().slice(0, 1);
 
         if (0 === items.length) {
-            this.#display(this.#empty, true);
+            await this.#display(this.#empty, true);
         } else {
-            this.#display(items[0]);
+            await this.#display(items[0]);
         }
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -137,6 +137,6 @@ export default class ClockModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }
diff --git a/src/module/icon/icon.js b/src/module/icon/icon.js
index ddb20c4..037ec16 100644
--- a/src/module/icon/icon.js
+++ b/src/module/icon/icon.js
@@ -67,10 +67,10 @@ export default class IconModule extends HTMLElement {
         }
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -98,6 +98,6 @@ export default class IconModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }
diff --git a/src/module/iframe/iframe.js b/src/module/iframe/iframe.js
index 6831349..0c94760 100644
--- a/src/module/iframe/iframe.js
+++ b/src/module/iframe/iframe.js
@@ -59,10 +59,10 @@ export default class IFrameModule extends HTMLElement {
         }
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -93,6 +93,6 @@ export default class IFrameModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }
diff --git a/src/module/image/image.js b/src/module/image/image.js
index a0a529e..2d49b0b 100644
--- a/src/module/image/image.js
+++ b/src/module/image/image.js
@@ -165,10 +165,10 @@ export default class ImageModule extends HTMLElement {
         this.#refresh();
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -211,6 +211,6 @@ export default class ImageModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }
diff --git a/src/module/list/list.js b/src/module/list/list.js
index 01072eb..aacdf0f 100644
--- a/src/module/list/list.js
+++ b/src/module/list/list.js
@@ -118,10 +118,10 @@ export default class ListModule extends HTMLElement {
         }
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -156,6 +156,6 @@ export default class ListModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }
diff --git a/src/module/podcast/podcast.js b/src/module/podcast/podcast.js
index 72bbcd5..9d5344f 100644
--- a/src/module/podcast/podcast.js
+++ b/src/module/podcast/podcast.js
@@ -158,10 +158,10 @@ export default class PodcastModule extends HTMLElement {
         }
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -196,6 +196,6 @@ export default class PodcastModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }
diff --git a/src/module/single/single.js b/src/module/single/single.js
index 00df8ca..49b8b57 100644
--- a/src/module/single/single.js
+++ b/src/module/single/single.js
@@ -68,10 +68,10 @@ export default class SingleModule extends HTMLElement {
         }
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -99,6 +99,6 @@ export default class SingleModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }
diff --git a/src/module/text/text.js b/src/module/text/text.js
index 5137bae..130b56d 100644
--- a/src/module/text/text.js
+++ b/src/module/text/text.js
@@ -62,10 +62,10 @@ export default class TextModule extends HTMLElement {
         }
     }
 
-    #wake() {
+    async #wake() {
         if (!this.#cron.active) {
             this.#cron.start();
-            this.#update();
+            await this.#update();
         }
     }
 
@@ -93,6 +93,6 @@ export default class TextModule extends HTMLElement {
                 this.#wake.bind(this),
             );
         }
-        this.#update(true);
+        await this.#update(true);
     }
 }

From d84fdd06e26997492926408e71939e325199e239 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sat, 23 Sep 2023 20:44:09 +0200
Subject: [PATCH 06/38] =?UTF-8?q?chore:=20Mettre=20=C3=A0=20jour=20les=20d?=
 =?UTF-8?q?=C3=A9pendances.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitattributes                                |    4 +
 .github/ISSUE_TEMPLATE/bug_report.md          |    4 +-
 .github/ISSUE_TEMPLATE/feature_request.md     |    4 +-
 .github/workflows/ci.yml                      |   21 +-
 .gitignore                                    |   17 +-
 .metalint/addons-linter.config.js             |    4 +-
 .metalint/eslint.config.js                    |   59 +-
 .metalint/eslint_browser.config.js            |    2 +-
 .metalint/eslint_node.config.js               |   23 +-
 .metalint/eslint_test.config.js               |    1 +
 .metalint/metalint.config.js                  |  147 +-
 .metalint/prantlf__jsonlint.config.js         |    9 +
 .metalint/prettier.config.js                  |   10 +-
 .metalint/purgecss_popup.config.js            |    5 +-
 .metalint/stylelint.config.js                 |    6 +
 .metalint/yaml-lint.config.js                 |    7 +
 .script/clean.js                              |   27 +-
 .stryker.config.js                            |    9 +-
 .tsconfig.json                                |   12 +-
 .tsconfig_jsdocs.json                         |    6 +-
 .tsconfig_lint.json                           |    4 +-
 README.md                                     |   10 +-
 package-lock.json                             | 6250 ++++++++---------
 package.json                                  |   46 +-
 src/extension/background/page.html            |    2 +-
 src/extension/img/icon128.png                 |  Bin 2822 -> 3022 bytes
 src/extension/img/icon16.png                  |  Bin 487 -> 479 bytes
 src/extension/img/icon24.png                  |  Bin 724 -> 719 bytes
 src/extension/img/icon32.png                  |  Bin 767 -> 775 bytes
 src/extension/img/icon48.png                  |  Bin 1153 -> 1180 bytes
 src/extension/img/icon64.png                  |  Bin 1375 -> 1451 bytes
 src/extension/img/icon96.png                  |  Bin 2113 -> 2270 bytes
 src/extension/manifest.json                   |    4 +-
 .../polyfill/{script.js => browser.js}        |    1 -
 src/extension/popup/index.html                |    1 -
 src/extension/popup/script.js                 |   60 +-
 src/module/audio/audio.js                     |    2 +-
 src/module/clock/clock.js                     |    2 +-
 src/module/icon/icon.js                       |    2 +-
 src/module/iframe/iframe.js                   |    6 +-
 src/module/image/image.js                     |    2 +-
 src/module/list/list.js                       |    2 +-
 src/module/podcast/podcast.js                 |    2 +-
 src/module/single/single.js                   |    2 +-
 src/module/text/text.js                       |    2 +-
 45 files changed, 3131 insertions(+), 3646 deletions(-)
 create mode 100644 .gitattributes
 create mode 100644 .metalint/prantlf__jsonlint.config.js
 create mode 100644 .metalint/yaml-lint.config.js
 rename src/extension/polyfill/{script.js => browser.js} (64%)

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..bdc80ff
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,4 @@
+# https://git-scm.com/docs/gitattributes
+* text eol=lf
+
+*.png binary
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 427d9b3..0a9e385 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -28,8 +28,8 @@ Steps to reproduce the behavior:
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.9.1 -->:
-- Browser version<!-- e.g. Chrome 110.0.5481.100, Firefox 110.0 -->:
+- Gout extension version<!-- e.g. 0.9.8 -->:
+- Browser version<!-- e.g. Chrome 117.0.5938.88, Firefox 117.0 -->:
 
 ### Additional context
 
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 47993c5..6e3cf0f 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -17,8 +17,8 @@ assignees: ""
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.9.1 -->:
-- Browser version<!-- e.g. Chrome 110.0.5481.100, Firefox 110.0 -->:
+- Gout extension version<!-- e.g. 0.9.8 -->:
+- Browser version<!-- e.g. Chrome 117.0.5938.88, Firefox 117.0 -->:
 
 ### Additional context
 
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3885ddf..cd7a400 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,15 +12,15 @@ jobs:
       - name: Setup Node.js
         uses: actions/setup-node@v3
         with:
-          node-version: 18
+          node-version: 20
 
       - name: Checkout repository
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           persist-credentials: false
 
       - name: Install dependencies
-        run: npm install
+        run: npm ci
 
       - name: Lint files
         run: npm run lint -- --formatter github
@@ -31,15 +31,15 @@ jobs:
       - name: Setup Node.js
         uses: actions/setup-node@v3
         with:
-          node-version: 18
+          node-version: 20
 
       - name: Checkout repository
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           persist-credentials: false
 
       - name: Install dependencies
-        run: npm install
+        run: npm ci
 
       - name: Run unit tests
         run: npm run test:unit
@@ -50,15 +50,15 @@ jobs:
       - name: Setup Node.js
         uses: actions/setup-node@v3
         with:
-          node-version: 18
+          node-version: 20
 
       - name: Checkout repository
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           persist-credentials: false
 
       - name: Install dependencies
-        run: npm install
+        run: npm ci
 
       - name: Run mutation tests and send coverage
         run: npm run test:coverage -- --reporters clear-text,dashboard
@@ -71,10 +71,9 @@ jobs:
       actions: read
       contents: read
       security-events: write
-
     steps:
       - name: Checkout repository
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           persist-credentials: false
 
diff --git a/.gitignore b/.gitignore
index ac3237e..24c4f68 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,19 @@
+# Ignorer les répertoires générés.
+/.stryker/
 /build/
 /jsdocs/
 /node_modules/
-/.stryker/
+
+# Ignorer les fichiers de configuration de Visual Studio Code.
+/.vscode/
+
+# Ignorer les fichiers de configuration de IntelliJ IDEA.
+/.idea/
+
+# Ignorer les fichiers temporaires de Vim.
+*.swp
+
+# Ignorer les autres lockfiles.
+/bun.lockb
+/pnpm-lock.yaml
+/yarn.lock
diff --git a/.metalint/addons-linter.config.js b/.metalint/addons-linter.config.js
index 330df74..5eadf14 100644
--- a/.metalint/addons-linter.config.js
+++ b/.metalint/addons-linter.config.js
@@ -4,6 +4,4 @@
  * @author Sébastien Règne
  */
 
-export default {
-    maxManifestVersion: 3,
-};
+export default {};
diff --git a/.metalint/eslint.config.js b/.metalint/eslint.config.js
index 89321d4..554c27e 100644
--- a/.metalint/eslint.config.js
+++ b/.metalint/eslint.config.js
@@ -24,7 +24,7 @@ export default {
 
     env: {
         "shared-node-browser": true,
-        es2022: true,
+        es2023: true,
     },
 
     rules: {
@@ -222,9 +222,9 @@ export default {
         "no-nested-ternary": "off",
         "no-new": "error",
         "no-new-func": "error",
-        "no-new-object": "error",
         "no-new-wrappers": "error",
         "no-nonoctal-decimal-escape": "error",
+        "no-object-constructor": "error",
         "no-octal": "error",
         "no-octal-escape": "error",
         "no-param-reassign": [
@@ -265,7 +265,6 @@ export default {
             "JSXText",
         ],
         "no-return-assign": "error",
-        "no-return-await": "error",
         "no-script-url": "error",
         "no-sequences": ["error", { allowInParentheses: false }],
         "no-shadow": "error",
@@ -370,7 +369,22 @@ export default {
             },
         ],
         "lines-between-class-members": "error",
-        "max-len": "warn",
+        "max-len": [
+            "warn",
+            {
+                // Ignorer les imports et les déclarations de tests unitaires,
+                // car Prettier n'ajoute pas de retour à la ligne pour ne pas
+                // dépasser les 80 caractères.
+                ignorePattern:
+                    "^import " +
+                    "|^ +\\* @typedef \\{import\\(" +
+                    "|^ +\\* @see " +
+                    '|^ +it\\("',
+                // Ignorer les expressions rationnelles, car il n'est pas
+                // possible de les écrire sur plusieurs lignes.
+                ignoreRegExpLiterals: true,
+            },
+        ],
         "max-statements-per-line": ["error", { max: 2 }],
         "multiline-ternary": "off",
         "new-parens": "off",
@@ -379,7 +393,9 @@ export default {
         "no-mixed-spaces-and-tabs": "off",
         "no-multi-spaces": "off",
         "no-multiple-empty-lines": "off",
-        "no-tabs": "off",
+        // Activer cette règle, car Prettier garde des tabulations (par exemple
+        // dans les chaines de caractères).
+        "no-tabs": "error",
         "no-trailing-spaces": "off",
         "no-whitespace-before-property": "off",
         "nonblock-statement-body-position": "off",
@@ -396,11 +412,7 @@ export default {
                 next: "*",
             },
         ],
-        quotes: [
-            "error",
-            "double",
-            { avoidEscape: true, allowTemplateLiterals: true },
-        ],
+        quotes: ["error", "double", { avoidEscape: true }],
         "rest-spread-spacing": "off",
         semi: "off",
         "semi-spacing": "off",
@@ -460,7 +472,11 @@ export default {
         "import/no-extraneous-dependencies": [
             "error",
             {
-                devDependencies: [".script/**/*.js", "test/**/*.js"],
+                devDependencies: [
+                    ".script/**/*.js",
+                    "test/**/*.js",
+                    "{.,}**/{.,}*.config.js",
+                ],
             },
         ],
         "import/no-mutable-exports": "error",
@@ -532,7 +548,7 @@ export default {
         "import/no-named-default": "error",
         "import/no-named-export": "off",
         "import/no-namespace": "off",
-        "import/no-unassigned-import": "error",
+        "import/no-unassigned-import": ["error", { allow: ["**/polyfill/**"] }],
         "import/order": [
             "error",
             {
@@ -569,17 +585,22 @@ export default {
         "jsdoc/check-values": "error",
         "jsdoc/empty-tags": "error",
         "jsdoc/implements-on-classes": "error",
+        // Désactiver la règle, car elle ne supporte pas la propriété "exports".
+        // https://github.com/gajus/eslint-plugin-jsdoc/issues/1114
+        "jsdoc/imports-as-dependencies": "off",
+        "jsdoc/informative-docs": "error",
         "jsdoc/match-description": ["error", { matchDescription: "[A-ZÉ].*" }],
         "jsdoc/match-name": "off",
         "jsdoc/multiline-blocks": "error",
-        "jsdoc/newline-after-description": "error",
         "jsdoc/no-bad-blocks": "error",
+        "jsdoc/no-blank-block-descriptions": "error",
+        "jsdoc/no-blank-blocks": "error",
         "jsdoc/no-defaults": "error",
         "jsdoc/no-missing-syntax": "off",
         "jsdoc/no-multi-asterisks": "error",
         "jsdoc/no-restricted-syntax": "off",
         "jsdoc/no-types": "off",
-        "jsdoc/no-undefined-types": ["error", { definedTypes: ["Timeout"] }],
+        "jsdoc/no-undefined-types": "error",
         "jsdoc/require-asterisk-prefix": "error",
         "jsdoc/require-description": "error",
         "jsdoc/require-description-complete-sentence": "off",
@@ -611,7 +632,7 @@ export default {
         "jsdoc/require-yields": "error",
         "jsdoc/require-yields-check": "error",
         "jsdoc/sort-tags": "error",
-        "jsdoc/tag-lines": "error",
+        "jsdoc/tag-lines": ["error", "never", { startLines: 1 }],
         "jsdoc/valid-types": "error",
 
         // Plugin eslint-plugin-no-unsanitized.
@@ -734,7 +755,7 @@ export default {
         "unicorn/escape-case": "error",
         "unicorn/expiring-todo-comments": "off",
         "unicorn/explicit-length-check": "off",
-        "unicorn/filename-case": ["error", { case: "kebabCase" }],
+        "unicorn/filename-case": "error",
         "unicorn/import-style": "error",
         "unicorn/new-for-builtins": "error",
         "unicorn/no-abusive-eslint-disable": "error",
@@ -772,10 +793,6 @@ export default {
         "unicorn/no-unnecessary-await": "error",
         "unicorn/no-unreadable-array-destructuring": "error",
         "unicorn/no-unreadable-iife": "error",
-        // Désactiver la règle car il y a des faux-positifs avec les petites
-        // valeurs de quantification.
-        // https://github.com/davisjam/safe-regex/issues/10
-        "unicorn/no-unsafe-regex": "off",
         "unicorn/no-unused-properties": "error",
         "unicorn/no-useless-fallback-in-spread": "error",
         "unicorn/no-useless-length-check": "error",
@@ -794,6 +811,7 @@ export default {
         "unicorn/prefer-array-index-of": "error",
         "unicorn/prefer-array-some": "error",
         "unicorn/prefer-at": "error",
+        "unicorn/prefer-blob-reading-methods": "error",
         "unicorn/prefer-code-point": "error",
         "unicorn/prefer-date-now": "error",
         "unicorn/prefer-default-parameters": "error",
@@ -849,7 +867,6 @@ export default {
 
     settings: {
         jsdoc: {
-            mode: "typescript",
             preferredTypes: {
                 ".<>": "<>",
                 "Array<>": "[]",
diff --git a/.metalint/eslint_browser.config.js b/.metalint/eslint_browser.config.js
index 188cdcb..0938173 100644
--- a/.metalint/eslint_browser.config.js
+++ b/.metalint/eslint_browser.config.js
@@ -13,7 +13,7 @@ export default {
         "import/no-unresolved": [
             "error",
             {
-                ignore: ["^https:\\/\\/cdn\\.jsdelivr\\.net\\/"],
+                ignore: ["^https:\\/\\/esm\\.sh\\/"],
             },
         ],
     },
diff --git a/.metalint/eslint_node.config.js b/.metalint/eslint_node.config.js
index c4680e0..34e868c 100644
--- a/.metalint/eslint_node.config.js
+++ b/.metalint/eslint_node.config.js
@@ -5,10 +5,6 @@
  */
 
 export default {
-    env: {
-        node: true,
-    },
-
     rules: {
         // Suggestions.
         "no-restricted-properties": [
@@ -79,14 +75,17 @@ export default {
         // https://github.com/eslint-community/eslint-plugin-n/issues/59
         "n/no-restricted-import": ["error", ["node:assert"]],
         "n/no-restricted-require": "error",
-        "n/no-sync": ["error", { allowAtRootLevel: true }],
-        "n/prefer-global/buffer": "error",
-        "n/prefer-global/console": "error",
-        "n/prefer-global/process": "error",
-        "n/prefer-global/text-decoder": "error",
-        "n/prefer-global/text-encoder": "error",
-        "n/prefer-global/url-search-params": "error",
-        "n/prefer-global/url": "error",
+        "n/no-sync": "error",
+        // Désactiver les règles n/prefer-global, car aucune variable globale de
+        // Node n'est déclarée, donc si elles sont utilisées : la règle no-undef
+        // remontera une erreur.
+        "n/prefer-global/buffer": "off",
+        "n/prefer-global/console": "off",
+        "n/prefer-global/process": "off",
+        "n/prefer-global/text-decoder": "off",
+        "n/prefer-global/text-encoder": "off",
+        "n/prefer-global/url-search-params": "off",
+        "n/prefer-global/url": "off",
         "n/prefer-promises/dns": "error",
         "n/prefer-promises/fs": "error",
     },
diff --git a/.metalint/eslint_test.config.js b/.metalint/eslint_test.config.js
index f1c2e85..a233a85 100644
--- a/.metalint/eslint_test.config.js
+++ b/.metalint/eslint_test.config.js
@@ -15,6 +15,7 @@ export default {
         // Suggestions.
         complexity: "off",
         "func-names": "off",
+        "max-classes-per-file": "off",
         "max-lines": "off",
         "max-lines-per-function": "off",
         "max-statements": "off",
diff --git a/.metalint/metalint.config.js b/.metalint/metalint.config.js
index 5c34b38..30ff8db 100644
--- a/.metalint/metalint.config.js
+++ b/.metalint/metalint.config.js
@@ -6,110 +6,103 @@
 
 export default {
     patterns: [
+        "**",
+        // Ignorer les répertoires et les fichiers générés.
+        "!/.git/**",
+        "!/.stryker/**",
         "!/CHANGELOG.md",
-        "!/.git/",
-        "!/jsdocs/",
-        "!/node_modules/",
-        "!/src/extension/polyfill/lib/",
-        "!/.stryker/",
+        "!/jsdocs/**",
+        "!/node_modules/**",
+        "!/src/extension/polyfill/lib/**",
+        // Ignorer les fichiers de configuration de Visual Studio Code.
+        "!/.vscode/**",
+        // Ignorer les fichiers de configuration de IntelliJ IDEA.
+        "!/.idea/**",
+        // Ignorer les fichiers temporaires de Vim.
         "!*.swp",
-        "**",
+        // Ignorer les autres lockfiles.
+        "!/bun.lockb",
+        "!/pnpm-lock.yaml",
+        "!/yarn.lock",
     ],
     checkers: [
         {
-            patterns: ["*.json", "*.md", "*.svg", "*.yml"],
-            linters: "prettier",
-        },
-        {
-            patterns: ["*.js", "*.ts"],
-            linters: {
-                prettier: ["prettier.config.js", { tabWidth: 4 }],
-            },
-        },
-        {
-            patterns: ["/build/**/*.zip", "/src/extension/"],
+            patterns: ["/build/*.zip", "/src/extension/"],
             linters: "addons-linter",
         },
         {
-            patterns: "/src/extension/**/*.js",
-            linters: {
-                eslint: ["eslint.config.js", "eslint_webext.config.js"],
-            },
-        },
-        {
-            patterns: [
-                "/src/engine/**/*.js",
-                "/src/module/**/*.js",
-                "/src/scraper/**/*.js",
+            patterns: "*.js",
+            linters: ["prettier", "prettier_javascript", "eslint"],
+            overrides: [
+                {
+                    patterns: "/src/extension/**",
+                    linters: "eslint_webext",
+                },
+                {
+                    patterns: [
+                        "/src/engine/**",
+                        "/src/module/**",
+                        "/src/scraper/**",
+                    ],
+                    linters: "eslint_browser",
+                },
+                {
+                    patterns: "/test/**",
+                    linters: ["eslint_node", "eslint_test"],
+                },
+                {
+                    patterns: "/.script/**",
+                    linters: "eslint_node",
+                },
+                {
+                    patterns: "*.config.js",
+                    linters: ["eslint_node", "eslint_config"],
+                },
             ],
-            linters: {
-                eslint: ["eslint.config.js", "eslint_browser.config.js"],
-            },
-        },
-        {
-            patterns: "/test/**/*.js",
-            linters: {
-                eslint: [
-                    "eslint.config.js",
-                    "eslint_node.config.js",
-                    "eslint_test.config.js",
-                ],
-            },
         },
         {
-            patterns: "/.script/**/*.js",
-            linters: {
-                eslint: ["eslint.config.js", "eslint_node.config.js"],
-            },
-        },
-        {
-            patterns: "*.config.js",
-            linters: {
-                eslint: ["eslint.config.js", "eslint_config.config.js"],
-            },
-        },
-        {
-            patterns: ["!/template/dashboard/", "*.html"],
-            linters: "htmlhint",
-        },
-        {
-            patterns: "/template/dashboard/**/*.html",
-            linters: {
-                htmlhint: [
-                    "htmlhint.config.js",
-                    "htmlhint_dashboard.config.js",
-                ],
-            },
+            patterns: "*.html",
+            linters: ["prettier", "htmlhint"],
+            overrides: [
+                {
+                    patterns: "/template/dashboard/**",
+                    linters: "htmlhint_dashboard",
+                },
+            ],
         },
         {
             patterns: "*.tpl",
-            linters: {
-                htmlhint: ["htmlhint.config.js", "htmlhint_tpl.config.js"],
-            },
+            linters: ["prettier", "prettier_tpl", "htmlhint", "htmlhint_tpl"],
         },
         {
             patterns: "*.css",
-            linters: "stylelint",
-        },
-        {
-            patterns: "/src/extension/popup/*.css",
-            linters: { purgecss: "purgecss_popup.config.js" },
+            linters: ["prettier", "prettier_css", "stylelint"],
+            overrides: [
+                {
+                    patterns: "/src/extension/popup/**",
+                    linters: "purgecss_popup",
+                },
+            ],
         },
         {
             patterns: "*.md",
-            linters: "markdownlint",
+            linters: ["prettier", "markdownlint"],
         },
         {
             patterns: "*.json",
-            linters: { "jsonlint-mod": null },
+            linters: ["prettier", "prantlf__jsonlint"],
+            overrides: {
+                patterns: "/package.json",
+                linters: "npm-package-json-lint",
+            },
         },
         {
-            patterns: "/package.json",
-            linters: "npm-package-json-lint",
+            patterns: "*.yml",
+            linters: ["prettier", "yaml-lint"],
         },
         {
-            patterns: "*.yml",
-            linters: { "yaml-lint": null },
+            patterns: "*.svg",
+            linters: "prettier",
         },
     ],
 };
diff --git a/.metalint/prantlf__jsonlint.config.js b/.metalint/prantlf__jsonlint.config.js
new file mode 100644
index 0000000..82e427f
--- /dev/null
+++ b/.metalint/prantlf__jsonlint.config.js
@@ -0,0 +1,9 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+export default {
+    allowDuplicateObjectKeys: false,
+};
diff --git a/.metalint/prettier.config.js b/.metalint/prettier.config.js
index 346536e..a22cc6f 100644
--- a/.metalint/prettier.config.js
+++ b/.metalint/prettier.config.js
@@ -4,8 +4,12 @@
  * @author Sébastien Règne
  */
 
+// @ts-ignore https://github.com/prettier/plugin-xml/issues/671
+import pluginXML from "@prettier/plugin-xml";
+
 export default {
-    // Enlever cette option lors de passage à Prettier 3.
-    // https://github.com/prettier/prettier/issues/13142
-    trailingComma: "all",
+    plugins: [pluginXML],
+
+    // Options spécifiques du plugin XML.
+    xmlQuoteAttributes: "double",
 };
diff --git a/.metalint/purgecss_popup.config.js b/.metalint/purgecss_popup.config.js
index 0313663..db4058d 100644
--- a/.metalint/purgecss_popup.config.js
+++ b/.metalint/purgecss_popup.config.js
@@ -5,8 +5,5 @@
  */
 
 export default {
-    content: "/src/extension/popup/*.html",
-    safelist: {
-        standard: ["active"],
-    },
+    content: ["/src/extension/popup/*.html", "/src/extension/popup/*.js"],
 };
diff --git a/.metalint/stylelint.config.js b/.metalint/stylelint.config.js
index c65ba44..41eee34 100644
--- a/.metalint/stylelint.config.js
+++ b/.metalint/stylelint.config.js
@@ -29,6 +29,7 @@ export default {
         "color-no-invalid-hex": true,
         "function-calc-no-unspaced-operator": true,
         "keyframe-declaration-no-important": true,
+        "media-query-no-invalid": true,
         "named-grid-areas-no-invalid": true,
         "no-invalid-double-slash-comments": true,
         "no-invalid-position-at-import-rule": true,
@@ -47,13 +48,18 @@ export default {
         // Overrides
         "declaration-block-no-shorthand-property-overrides": true,
 
+        // Unmatchable
+        "selector-anb-no-unmatchable": true,
+
         // Unknown.
         "annotation-no-unknown": true,
         "at-rule-no-unknown": true,
         "declaration-property-value-no-unknown": true,
         "function-no-unknown": true,
         "media-feature-name-no-unknown": true,
+        "media-feature-name-value-no-unknown": true,
         "no-unknown-animations": true,
+        "no-unknown-custom-properties": true,
         "property-no-unknown": true,
         "selector-pseudo-class-no-unknown": true,
         "selector-pseudo-element-no-unknown": true,
diff --git a/.metalint/yaml-lint.config.js b/.metalint/yaml-lint.config.js
new file mode 100644
index 0000000..5eadf14
--- /dev/null
+++ b/.metalint/yaml-lint.config.js
@@ -0,0 +1,7 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+export default {};
diff --git a/.script/clean.js b/.script/clean.js
index 6c2f537..c88a881 100644
--- a/.script/clean.js
+++ b/.script/clean.js
@@ -6,10 +6,23 @@
 
 import fs from "node:fs/promises";
 
-const paths = await fs.readFile(".gitignore", "utf8");
-paths
-    .split("\n")
-    .filter((p) => "" !== p)
-    // Enlever la barre oblique commençant le chemin.
-    .map((p) => p.slice(1))
-    .forEach((p) => fs.rm(p, { force: true, recursive: true }));
+/**
+ * La liste des répertoires et des fichiers à supprimer.
+ *
+ * @type {string[]}
+ */
+const PATHS = [
+    // Supprimer les répertoires générés.
+    ".stryker/",
+    "build/",
+    "jsdocs/",
+    "node_modules/",
+    // Supprimer les autres lockfiles.
+    "bun.lockb",
+    "pnpm-lock.yaml",
+    "yarn.lock",
+];
+
+for (const path of PATHS) {
+    await fs.rm(path, { force: true, recursive: true });
+}
diff --git a/.stryker.config.js b/.stryker.config.js
index 0f73423..93cc264 100644
--- a/.stryker.config.js
+++ b/.stryker.config.js
@@ -8,15 +8,16 @@
  * @type {import("@stryker-mutator/api/core").PartialStrykerOptions}
  */
 export default {
+    disableTypeChecks: false,
     incremental: true,
-    incrementalFile: ".stryker/stryker-incremental.json",
+    incrementalFile: ".stryker/incremental.json",
     ignoreStatic: true,
     mochaOptions: { config: "test/unit/mocharc.json" },
     mutate: [
         "src/**/*.js",
-        "!/src/extension/**",
-        "!/src/module/**",
-        "!/src/scraper/**",
+        "!src/extension/**",
+        "!src/module/**",
+        "!src/scraper/**",
     ],
     reporters: ["dots", "clear-text"],
     tempDirName: ".stryker/tmp/",
diff --git a/.tsconfig.json b/.tsconfig.json
index 233391f..17f6917 100644
--- a/.tsconfig.json
+++ b/.tsconfig.json
@@ -1,21 +1,21 @@
 {
   "compilerOptions": {
-    "module": "ESNext",
-    "moduleResolution": "node",
+    "module": "nodenext",
 
     "allowJs": true,
 
     "esModuleInterop": true,
 
-    "target": "ESNext"
+    "target": "esnext"
   },
   "include": ["**/*", "**/.*", "**/.*/**/*", "**/.*/**/.*"],
   "exclude": [
-    "build/",
     ".git/",
+    ".stryker/",
+    "build/",
     "jsdocs/",
     "node_modules/",
-    "src/extension/polyfill/lib/",
-    ".stryker/"
+    ".vscode/",
+    ".idea/"
   ]
 }
diff --git a/.tsconfig_jsdocs.json b/.tsconfig_jsdocs.json
index 7fd66ff..2f6930b 100644
--- a/.tsconfig_jsdocs.json
+++ b/.tsconfig_jsdocs.json
@@ -3,5 +3,9 @@
   "compilerOptions": {
     "noEmit": true
   },
-  "include": ["src/"]
+
+  "typedocOptions": {
+    "entryPoints": ["src/"],
+    "out": "jsdocs/"
+  }
 }
diff --git a/.tsconfig_lint.json b/.tsconfig_lint.json
index a31130a..0f140b5 100644
--- a/.tsconfig_lint.json
+++ b/.tsconfig_lint.json
@@ -10,8 +10,6 @@
 
     "noEmit": true,
 
-    "checkJs": true,
-
-    "noStrictGenericChecks": true
+    "checkJs": true
   }
 }
diff --git a/README.md b/README.md
index b381bdb..f85b87d 100644
--- a/README.md
+++ b/README.md
@@ -194,13 +194,9 @@ souhaitez dans le code HTML. Ouvrez le fichier avec votre navigateur et ajoutez
 la page dans l'extension (en cliquant sur l'icône de l'extension dans la barre
 d'outils du navigateur). Actualisez la page pour voir apparaitre les widgets.
 
-[img-firefox]: https://img.shields.io/amo/v/gout.svg?label=add-on&logo=firefox-browser&logoColor=white
-[img-build]: https://img.shields.io/github/actions/workflow/status/regseb/gout/ci.yml?branch=main&logo=github&logoColor=white
-
-<!-- Attendre que le logo de Stryker soit accepté.
-     https://github.com/simple-icons/simple-icons/pull/7388 -->
-
-[img-coverage]: https://img.shields.io/endpoint?label=coverage&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fgout%2Fmain
+[img-firefox]: https://img.shields.io/amo/v/gout.svg?label=add-on&logo=firefox-browser&logoColor=whitesmoke
+[img-build]: https://img.shields.io/github/actions/workflow/status/regseb/gout/ci.yml?branch=main&logo=github&logoColor=whitesmoke
+[img-coverage]: https://img.shields.io/endpoint?label=coverage&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fgout%2Fmain&logo=stryker&logoColor=whitesmoke
 [link-firefox]: https://addons.mozilla.org/addon/gout/
 [link-build]: https://github.com/regseb/gout/actions/workflows/ci.yml?query=branch%3Amain
 [link-coverage]: https://dashboard.stryker-mutator.io/reports/github.com/regseb/gout/main
diff --git a/package-lock.json b/package-lock.json
index dd67622..b4542b9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,53 +13,61 @@
         "webextension-polyfill": "0.10.0"
       },
       "devDependencies": {
-        "@prettier/plugin-xml": "2.2.0",
-        "@stryker-mutator/core": "6.4.1",
-        "@stryker-mutator/mocha-runner": "6.4.1",
+        "@prantlf/jsonlint": "14.0.3",
+        "@prettier/plugin-xml": "3.2.1",
+        "@stryker-mutator/core": "7.1.1",
+        "@stryker-mutator/mocha-runner": "7.1.1",
         "@types/mocha": "10.0.1",
-        "addons-linter": "5.31.0",
-        "eslint": "8.35.0",
-        "eslint-plugin-array-func": "3.1.8",
+        "addons-linter": "6.14.0",
+        "eslint": "8.50.0",
+        "eslint-plugin-array-func": "4.0.0",
         "eslint-plugin-eslint-comments": "3.2.0",
-        "eslint-plugin-import": "2.27.5",
-        "eslint-plugin-jsdoc": "40.0.1",
+        "eslint-plugin-import": "2.28.1",
+        "eslint-plugin-jsdoc": "46.8.2",
         "eslint-plugin-mocha": "10.1.0",
-        "eslint-plugin-n": "15.6.1",
+        "eslint-plugin-n": "16.1.0",
         "eslint-plugin-no-unsanitized": "4.0.2",
         "eslint-plugin-promise": "6.1.1",
-        "eslint-plugin-regexp": "1.12.0",
-        "eslint-plugin-unicorn": "46.0.0",
+        "eslint-plugin-regexp": "1.15.0",
+        "eslint-plugin-unicorn": "48.0.1",
         "htmlhint": "1.1.4",
         "http-server": "14.1.1",
-        "jsonlint-mod": "1.7.6",
-        "markdownlint": "0.27.0",
-        "metalint": "0.11.1",
+        "markdownlint": "0.31.1",
+        "metalint": "0.14.1",
         "mocha": "10.2.0",
-        "npm-package-json-lint": "6.4.0",
-        "prettier": "2.8.4",
+        "npm-package-json-lint": "7.0.0",
+        "prettier": "3.0.3",
         "purgecss": "5.0.0",
-        "standard-version": "9.5.0",
-        "stylelint": "15.2.0",
+        "stylelint": "15.10.3",
         "stylelint-order": "6.0.3",
-        "typedoc": "0.23.26",
-        "typescript": "4.9.5",
-        "web-ext": "7.5.0",
+        "typedoc": "0.25.1",
+        "typescript": "5.2.2",
+        "web-ext": "7.7.0",
         "yaml-lint": "1.7.0"
       },
       "engines": {
-        "node": ">=18.12.0"
+        "node": ">=20.0.0"
       },
       "funding": {
         "url": "https://www.paypal.me/sebastienregne"
       }
     },
+    "node_modules/@aashutoshrathi/word-wrap": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/@ampproject/remapping": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
-      "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/gen-mapping": "^0.1.0",
+        "@jridgewell/gen-mapping": "^0.3.0",
         "@jridgewell/trace-mapping": "^0.3.9"
       },
       "engines": {
@@ -67,47 +75,119 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
-      "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+      "version": "7.22.13",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+      "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
       "dev": true,
       "dependencies": {
-        "@babel/highlight": "^7.18.6"
+        "@babel/highlight": "^7.22.13",
+        "chalk": "^2.4.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+      "dev": true
+    },
+    "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/@babel/compat-data": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz",
-      "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==",
+      "version": "7.22.20",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
+      "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.20.12",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz",
-      "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==",
-      "dev": true,
-      "dependencies": {
-        "@ampproject/remapping": "^2.1.0",
-        "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.20.7",
-        "@babel/helper-compilation-targets": "^7.20.7",
-        "@babel/helper-module-transforms": "^7.20.11",
-        "@babel/helpers": "^7.20.7",
-        "@babel/parser": "^7.20.7",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.20.12",
-        "@babel/types": "^7.20.7",
+      "version": "7.22.20",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz",
+      "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==",
+      "dev": true,
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.22.13",
+        "@babel/generator": "^7.22.15",
+        "@babel/helper-compilation-targets": "^7.22.15",
+        "@babel/helper-module-transforms": "^7.22.20",
+        "@babel/helpers": "^7.22.15",
+        "@babel/parser": "^7.22.16",
+        "@babel/template": "^7.22.15",
+        "@babel/traverse": "^7.22.20",
+        "@babel/types": "^7.22.19",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.2",
-        "semver": "^6.3.0"
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -118,96 +198,81 @@
       }
     },
     "node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.20.14",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz",
-      "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==",
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
+      "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.20.7",
+        "@babel/types": "^7.22.15",
         "@jridgewell/gen-mapping": "^0.3.2",
+        "@jridgewell/trace-mapping": "^0.3.17",
         "jsesc": "^2.5.1"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-      "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/set-array": "^1.0.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.9"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-      "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+      "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
-      "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+      "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.20.5",
-        "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.21.3",
+        "@babel/compat-data": "^7.22.9",
+        "@babel/helper-validator-option": "^7.22.15",
+        "browserslist": "^4.21.9",
         "lru-cache": "^5.1.1",
-        "semver": "^6.3.0"
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz",
-      "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==",
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz",
+      "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.18.6",
-        "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.21.0",
-        "@babel/helper-member-expression-to-functions": "^7.21.0",
-        "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-replace-supers": "^7.20.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
-        "@babel/helper-split-export-declaration": "^7.18.6"
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-member-expression-to-functions": "^7.22.15",
+        "@babel/helper-optimise-call-expression": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "semver": "^6.3.1"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -216,206 +281,215 @@
         "@babel/core": "^7.0.0"
       }
     },
+    "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
     "node_modules/@babel/helper-environment-visitor": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
-      "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+      "version": "7.22.20",
+      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-function-name": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
-      "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
+      "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.20.7",
-        "@babel/types": "^7.21.0"
+        "@babel/template": "^7.22.5",
+        "@babel/types": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-hoist-variables": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
-      "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz",
-      "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==",
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz",
+      "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.21.0"
+        "@babel/types": "^7.22.15"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
-      "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.22.15"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.21.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
-      "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
+      "version": "7.22.20",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz",
+      "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-simple-access": "^7.20.2",
-        "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/helper-validator-identifier": "^7.19.1",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.2",
-        "@babel/types": "^7.21.2"
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-simple-access": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/helper-validator-identifier": "^7.22.20"
       },
       "engines": {
         "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
-      "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+      "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.20.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
-      "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+      "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz",
-      "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==",
+      "version": "7.22.20",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
+      "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-member-expression-to-functions": "^7.20.7",
-        "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.20.7",
-        "@babel/types": "^7.20.7"
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-member-expression-to-functions": "^7.22.15",
+        "@babel/helper-optimise-call-expression": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.20.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
-      "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.20.2"
+        "@babel/types": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.20.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
-      "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+      "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.20.0"
+        "@babel/types": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
-      "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+      "version": "7.22.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.19.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
-      "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.19.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
-      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+      "version": "7.22.20",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
-      "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+      "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
-      "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
+      "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.0",
-        "@babel/types": "^7.21.0"
+        "@babel/template": "^7.22.15",
+        "@babel/traverse": "^7.22.15",
+        "@babel/types": "^7.22.15"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
-      "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+      "version": "7.22.20",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+      "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "chalk": "^2.0.0",
+        "@babel/helper-validator-identifier": "^7.22.20",
+        "chalk": "^2.4.2",
         "js-tokens": "^4.0.0"
       },
       "engines": {
@@ -494,9 +568,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.20.15",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz",
-      "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==",
+      "version": "7.22.16",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
+      "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -509,6 +583,7 @@
       "version": "7.18.6",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
       "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
+      "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.",
       "dev": true,
       "dependencies": {
         "@babel/helper-create-class-features-plugin": "^7.18.6",
@@ -522,16 +597,16 @@
       }
     },
     "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.20.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.13.tgz",
-      "integrity": "sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==",
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.15.tgz",
+      "integrity": "sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.20.12",
-        "@babel/helper-plugin-utils": "^7.20.2",
-        "@babel/helper-replace-supers": "^7.20.7",
-        "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/plugin-syntax-decorators": "^7.19.0"
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.9",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/plugin-syntax-decorators": "^7.22.10"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -544,6 +619,7 @@
       "version": "7.18.6",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
       "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
+      "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.",
       "dev": true,
       "dependencies": {
         "@babel/helper-create-class-features-plugin": "^7.18.6",
@@ -557,12 +633,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.21.0.tgz",
-      "integrity": "sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==",
+      "version": "7.22.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz",
+      "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.20.2"
+        "@babel/helper-plugin-utils": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -571,13 +647,13 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.20.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
-      "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
+    "node_modules/@babel/plugin-syntax-jsx": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
+      "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.19.0"
+        "@babel/helper-plugin-utils": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -586,15 +662,13 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz",
-      "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==",
+    "node_modules/@babel/plugin-syntax-typescript": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
+      "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.21.0",
-        "@babel/helper-plugin-utils": "^7.20.2",
-        "@babel/plugin-syntax-typescript": "^7.20.0"
+        "@babel/helper-plugin-utils": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -603,15 +677,15 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/preset-typescript": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
-      "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
+    "node_modules/@babel/plugin-transform-modules-commonjs": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz",
+      "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "@babel/helper-validator-option": "^7.18.6",
-        "@babel/plugin-transform-typescript": "^7.18.6"
+        "@babel/helper-module-transforms": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-simple-access": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -620,102 +694,98 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/runtime": {
-      "version": "7.20.13",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz",
-      "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==",
+    "node_modules/@babel/plugin-transform-typescript": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz",
+      "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==",
       "dev": true,
       "dependencies": {
-        "regenerator-runtime": "^0.13.11"
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-typescript": "^7.22.5"
       },
       "engines": {
         "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/template": {
-      "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
-      "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
+    "node_modules/@babel/preset-typescript": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz",
+      "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "^7.18.6",
-        "@babel/parser": "^7.20.7",
-        "@babel/types": "^7.20.7"
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-option": "^7.22.15",
+        "@babel/plugin-syntax-jsx": "^7.22.5",
+        "@babel/plugin-transform-modules-commonjs": "^7.22.15",
+        "@babel/plugin-transform-typescript": "^7.22.15"
       },
       "engines": {
         "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse": {
-      "version": "7.21.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz",
-      "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.21.1",
-        "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.21.0",
-        "@babel/helper-hoist-variables": "^7.18.6",
-        "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/parser": "^7.21.2",
-        "@babel/types": "^7.21.2",
-        "debug": "^4.1.0",
-        "globals": "^11.1.0"
       },
-      "engines": {
-        "node": ">=6.9.0"
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/@babel/generator": {
-      "version": "7.21.1",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz",
-      "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==",
+    "node_modules/@babel/runtime": {
+      "version": "7.21.0",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz",
+      "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.21.0",
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "@jridgewell/trace-mapping": "^0.3.17",
-        "jsesc": "^2.5.1"
+        "regenerator-runtime": "^0.13.11"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/@babel/parser": {
-      "version": "7.21.2",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz",
-      "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==",
+    "node_modules/@babel/template": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+      "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
       "dev": true,
-      "bin": {
-        "parser": "bin/babel-parser.js"
+      "dependencies": {
+        "@babel/code-frame": "^7.22.13",
+        "@babel/parser": "^7.22.15",
+        "@babel/types": "^7.22.15"
       },
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-      "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/set-array": "^1.0.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.9"
+    "node_modules/@babel/traverse": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz",
+      "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.22.13",
+        "@babel/generator": "^7.22.15",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/parser": "^7.22.16",
+        "@babel/types": "^7.22.19",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0"
       },
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.21.2",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz",
-      "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==",
+      "version": "7.22.19",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz",
+      "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-string-parser": "^7.19.4",
-        "@babel/helper-validator-identifier": "^7.19.1",
+        "@babel/helper-string-parser": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.19",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -723,66 +793,89 @@
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.0.1.tgz",
-      "integrity": "sha512-B9/8PmOtU6nBiibJg0glnNktQDZ3rZnGn/7UmDfrm2vMtrdlXO3p7ErE95N0up80IRk9YEtB5jyj/TmQ1WH3dw==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz",
+      "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/csstools"
-      },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.0.0"
+        "@csstools/css-tokenizer": "^2.2.0"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.1.0.tgz",
-      "integrity": "sha512-dtqFyoJBHUxGi9zPZdpCKP1xk8tq6KPHJ/NY4qWXiYo6IcSGwzk3L8x2XzZbbyOyBs9xQARoGveU2AsgLj6D2A==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz",
+      "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "engines": {
         "node": "^14 || ^16 || >=18"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/csstools"
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.1.tgz",
-      "integrity": "sha512-X2/OuzEbjaxhzm97UJ+95GrMeT29d1Ib+Pu+paGLuRWZnWRK9sI9r3ikmKXPWGA1C4y4JEdBEFpp9jEqCvLeRA==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz",
+      "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/csstools"
-      },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.0.0",
-        "@csstools/css-tokenizer": "^2.0.0"
+        "@csstools/css-parser-algorithms": "^2.3.1",
+        "@csstools/css-tokenizer": "^2.2.0"
       }
     },
     "node_modules/@csstools/selector-specificity": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz",
-      "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz",
+      "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/csstools"
-      },
       "peerDependencies": {
-        "postcss": "^8.4",
-        "postcss-selector-parser": "^6.0.10"
+        "postcss-selector-parser": "^6.0.13"
       }
     },
     "node_modules/@devicefarmer/adbkit": {
@@ -807,9 +900,9 @@
       }
     },
     "node_modules/@devicefarmer/adbkit-logcat": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-2.1.2.tgz",
-      "integrity": "sha512-G4grpEa5s9s9wCRs8YB9LjFSnz0Os3g3RYIwZSxH3JFfV3aejL5xlu4hHMH4JY+d4oCCwImcEZJcFPY9BEP21w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-2.1.3.tgz",
+      "integrity": "sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==",
       "dev": true,
       "engines": {
         "node": ">= 4"
@@ -824,24 +917,33 @@
         "node": ">= 0.10.4"
       }
     },
+    "node_modules/@devicefarmer/adbkit/node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
     "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.36.1",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz",
-      "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==",
+      "version": "0.40.1",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz",
+      "integrity": "sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==",
       "dev": true,
       "dependencies": {
-        "comment-parser": "1.3.1",
-        "esquery": "^1.4.0",
-        "jsdoc-type-pratt-parser": "~3.1.0"
+        "comment-parser": "1.4.0",
+        "esquery": "^1.5.0",
+        "jsdoc-type-pratt-parser": "~4.0.0"
       },
       "engines": {
-        "node": "^14 || ^16 || ^17 || ^18 || ^19"
+        "node": ">=16"
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz",
-      "integrity": "sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA==",
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
       "dev": true,
       "dependencies": {
         "eslint-visitor-keys": "^3.3.0"
@@ -850,18 +952,27 @@
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+      }
+    },
+    "node_modules/@eslint-community/regexpp": {
+      "version": "4.8.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz",
+      "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz",
-      "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
+      "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
       "dev": true,
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.4.0",
+        "espree": "^9.6.0",
         "globals": "^13.19.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
@@ -903,9 +1014,9 @@
       }
     },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.20.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-      "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+      "version": "13.22.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
+      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -948,28 +1059,28 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "8.35.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz",
-      "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==",
+      "version": "8.50.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz",
+      "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
     "node_modules/@fluent/syntax": {
-      "version": "0.18.1",
-      "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.18.1.tgz",
-      "integrity": "sha512-h0dnIoIg1RwUZRKynTizlVCe0v5qAO9d92ugmRi8sVMM15mwwftf7dpEKdDRc/pybbrpDhmvZRykEel0Cs/RYg==",
+      "version": "0.19.0",
+      "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.19.0.tgz",
+      "integrity": "sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==",
       "dev": true,
       "engines": {
-        "node": ">=12.0.0",
+        "node": ">=14.0.0",
         "npm": ">=7.0.0"
       }
     },
     "node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.8",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
-      "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+      "version": "0.11.11",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
+      "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
       "dev": true,
       "dependencies": {
         "@humanwhocodes/object-schema": "^1.2.1",
@@ -1021,66 +1132,163 @@
       "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
       "dev": true
     },
-    "node_modules/@hutson/parse-repository-url": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz",
-      "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
-      "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/set-array": "^1.0.0",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
+        "string-width": "^5.1.2",
+        "string-width-cjs": "npm:string-width@^4.2.0",
+        "strip-ansi": "^7.0.1",
+        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+        "wrap-ansi": "^8.1.0",
+        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
       },
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=12"
       }
     },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-      "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
-      "dev": true,
+    "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "dev": true
+    },
+    "node_modules/@isaacs/cliui/node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "dev": true,
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^6.1.0",
+        "string-width": "^5.0.1",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+      "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+      "dev": true,
       "engines": {
         "node": ">=6.0.0"
       }
     },
     "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.4.14",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-      "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+      "version": "1.4.15",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
       "dev": true
     },
     "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.17",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
-      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+      "version": "0.3.19",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
+      "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/resolve-uri": "3.1.0",
-        "@jridgewell/sourcemap-codec": "1.4.14"
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@ljharb/through": {
+      "version": "2.3.9",
+      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.9.tgz",
+      "integrity": "sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/@mdn/browser-compat-data": {
-      "version": "5.2.39",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.39.tgz",
-      "integrity": "sha512-m8EJuQlHl6GeBkryBfJCl9gOOw/5dCqQVzRWj6hBbDG3NTaJyypa5784lae/uklYildVwiqbP0iGl3LUEhECPg==",
+      "version": "5.3.15",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.15.tgz",
+      "integrity": "sha512-h/luqw9oAmMF1C/GuUY/PAgZlF4wx71q2bdH+ct8vmjcvseCY32au8XmYy7xZ8l5VJiY/3ltFpr5YiO55v0mzg==",
       "dev": true
     },
     "node_modules/@nodelib/fs.scandir": {
@@ -1118,6 +1326,25 @@
         "node": ">= 8"
       }
     },
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+      "dev": true,
+      "optional": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@pnpm/config.env-replace": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+      "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.22.0"
+      }
+    },
     "node_modules/@pnpm/network.ca-file": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
@@ -1130,12 +1357,19 @@
         "node": ">=12.22.0"
       }
     },
+    "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": {
+      "version": "4.2.10",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+      "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+      "dev": true
+    },
     "node_modules/@pnpm/npm-conf": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz",
-      "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==",
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz",
+      "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==",
       "dev": true,
       "dependencies": {
+        "@pnpm/config.env-replace": "^1.1.0",
         "@pnpm/network.ca-file": "^1.0.1",
         "config-chain": "^1.1.11"
       },
@@ -1143,20 +1377,41 @@
         "node": ">=12"
       }
     },
+    "node_modules/@prantlf/jsonlint": {
+      "version": "14.0.3",
+      "resolved": "https://registry.npmjs.org/@prantlf/jsonlint/-/jsonlint-14.0.3.tgz",
+      "integrity": "sha512-Z9FrZd+cqCiqB6r/EHb4evj8HUqMgPvi7RVBQhFHYOJ292K7XmnKprNTngTqiUclCFn5MFqeZv20Jo5ZzlOCqw==",
+      "dev": true,
+      "dependencies": {
+        "ajv": "8.12.0",
+        "ajv-draft-04": "1.0.0",
+        "cosmiconfig": "8.1.3",
+        "diff": "5.1.0",
+        "fast-glob": "3.2.12"
+      },
+      "bin": {
+        "jsonlint": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
     "node_modules/@prettier/plugin-xml": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz",
-      "integrity": "sha512-UWRmygBsyj4bVXvDiqSccwT1kmsorcwQwaIy30yVh8T+Gspx4OlC0shX1y+ZuwXZvgnafmpRYKks0bAu9urJew==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.2.1.tgz",
+      "integrity": "sha512-DvwnQPf8FsczapBVDm54IhR+Pryt3DbPZSNtUb9gOuFtgoUUPbPN69f3nQBMF5BEqh4ZjZjTaHBmsVno3UnAXQ==",
       "dev": true,
       "dependencies": {
-        "@xml-tools/parser": "^1.0.11",
-        "prettier": ">=2.4.0"
+        "@xml-tools/parser": "^1.0.11"
+      },
+      "peerDependencies": {
+        "prettier": "^3.0.0"
       }
     },
     "node_modules/@sindresorhus/is": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz",
-      "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==",
+      "version": "5.6.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
+      "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==",
       "dev": true,
       "engines": {
         "node": ">=14.16"
@@ -1166,132 +1421,107 @@
       }
     },
     "node_modules/@stryker-mutator/api": {
-      "version": "6.4.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-6.4.1.tgz",
-      "integrity": "sha512-xHK5mqTXqMKegfOAhURDqaPNA2vOj79f0/fC3J9Udnol0OkTresSfOG06t2Y80Qr0iH50RQm+Dzgg0Sgt8ODzg==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-7.1.1.tgz",
+      "integrity": "sha512-LqCO/UbMxPmr26LbFHSgKpHh3sKROPwjhiQlB3p962u3Z424xHE6jdkt+1wdTNxM1ycCK+GpHeCo6iiXkEBipw==",
       "dev": true,
       "dependencies": {
-        "mutation-testing-metrics": "1.7.14",
-        "mutation-testing-report-schema": "1.7.14",
-        "tslib": "~2.5.0"
+        "mutation-testing-metrics": "2.0.1",
+        "mutation-testing-report-schema": "2.0.1",
+        "tslib": "~2.6.0",
+        "typed-inject": "~4.0.0"
       },
       "engines": {
-        "node": ">=14.18.0"
+        "node": ">=16.0.0"
       }
     },
     "node_modules/@stryker-mutator/core": {
-      "version": "6.4.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-6.4.1.tgz",
-      "integrity": "sha512-MJJ/332R3oFxvXUSrPU8gves9CdANkjfPoPAuURanjqeTbz6FmEb7fSJun1Gf4HsbvXCiiU1kbbV+Xj+hfid4w==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-7.1.1.tgz",
+      "integrity": "sha512-E+SLgxfZwcx14sce72G+bTFDBN7at4QiRrBVTV8nXILShyAfvWSQu56Yu3VTsbAKJZAJO+LkNYbyO+ZtmsCwow==",
       "dev": true,
       "dependencies": {
-        "@stryker-mutator/api": "6.4.1",
-        "@stryker-mutator/instrumenter": "6.4.1",
-        "@stryker-mutator/util": "6.4.1",
+        "@stryker-mutator/api": "7.1.1",
+        "@stryker-mutator/instrumenter": "7.1.1",
+        "@stryker-mutator/util": "7.1.1",
         "ajv": "~8.12.0",
-        "chalk": "~5.2.0",
-        "commander": "~10.0.0",
+        "chalk": "~5.3.0",
+        "commander": "~11.0.0",
         "diff-match-patch": "1.0.5",
         "emoji-regex": "~10.2.1",
-        "execa": "~7.0.0",
+        "execa": "~7.1.0",
         "file-url": "~4.0.0",
-        "get-port": "~6.1.0",
-        "glob": "~8.1.0",
-        "inquirer": "~9.1.0",
+        "get-port": "~7.0.0",
+        "glob": "~10.3.0",
+        "inquirer": "~9.2.0",
         "lodash.flatmap": "~4.5.0",
         "lodash.groupby": "~4.6.0",
-        "log4js": "~6.7.0",
-        "minimatch": "~5.1.0",
-        "mkdirp": "~2.1.0",
-        "mutation-testing-elements": "1.7.14",
-        "mutation-testing-metrics": "1.7.14",
-        "mutation-testing-report-schema": "1.7.14",
+        "log4js": "~6.9.0",
+        "minimatch": "~9.0.1",
+        "mutation-testing-elements": "2.0.1",
+        "mutation-testing-metrics": "2.0.1",
+        "mutation-testing-report-schema": "2.0.1",
         "npm-run-path": "~5.1.0",
         "progress": "~2.0.0",
-        "rimraf": "~3.0.0",
         "rxjs": "~7.8.0",
         "semver": "^7.3.5",
         "source-map": "~0.7.3",
         "tree-kill": "~1.2.2",
-        "tslib": "~2.5.0",
-        "typed-inject": "~3.0.0",
+        "tslib": "2.6.0",
+        "typed-inject": "~4.0.0",
         "typed-rest-client": "~1.8.0"
       },
       "bin": {
         "stryker": "bin/stryker.js"
       },
       "engines": {
-        "node": ">=14.18.0"
-      }
-    },
-    "node_modules/@stryker-mutator/core/node_modules/commander": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz",
-      "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==",
-      "dev": true,
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@stryker-mutator/core/node_modules/mkdirp": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.4.tgz",
-      "integrity": "sha512-Cy9cV4pRSl1o10i1dURTuRt4T04l0DkS1WZrT+Jir886OqOVkSv4FbOA7pgjhS8kEUrmm4kCRvv5var2iOCxpA==",
-      "dev": true,
-      "bin": {
-        "mkdirp": "dist/cjs/src/bin.js"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "node": ">=16.0.0"
       }
     },
     "node_modules/@stryker-mutator/instrumenter": {
-      "version": "6.4.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-6.4.1.tgz",
-      "integrity": "sha512-2Q5trdgi4Ymq3QTRju5ZpZGgPFq00CAZFv5DiC8XenLtqbBIpjVtawfdXXGEKx7ndB4yr2WFKXQkTs6LKDtCfA==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-7.1.1.tgz",
+      "integrity": "sha512-z1p7HMPvxWH/QVeanLpwt1B+LtwFRdd5GcR8Lx+REBAL8cAjzo8/DOYJ5BJp20ab7ZpbID8fPjIKr/P+Im/qGQ==",
       "dev": true,
       "dependencies": {
-        "@babel/core": "~7.20.0",
-        "@babel/generator": "~7.20.0",
-        "@babel/parser": "~7.20.0",
+        "@babel/core": "~7.22.0",
+        "@babel/generator": "~7.22.0",
+        "@babel/parser": "~7.22.0",
         "@babel/plugin-proposal-class-properties": "~7.18.0",
-        "@babel/plugin-proposal-decorators": "~7.20.0",
+        "@babel/plugin-proposal-decorators": "~7.22.0",
         "@babel/plugin-proposal-private-methods": "~7.18.0",
-        "@babel/preset-typescript": "~7.18.0",
-        "@stryker-mutator/api": "6.4.1",
-        "@stryker-mutator/util": "6.4.1",
+        "@babel/preset-typescript": "~7.22.0",
+        "@stryker-mutator/api": "7.1.1",
+        "@stryker-mutator/util": "7.1.1",
         "angular-html-parser": "~4.0.0",
-        "weapon-regex": "~1.0.2"
+        "weapon-regex": "~1.1.0"
       },
       "engines": {
-        "node": ">=14.18.0"
+        "node": ">=16.0.0"
       }
     },
     "node_modules/@stryker-mutator/mocha-runner": {
-      "version": "6.4.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-6.4.1.tgz",
-      "integrity": "sha512-0PGH3xKbx6ufDT8P4bWBxt5w2aO1VpXqURTeXKyMusBP2wPT5zWVYsgwdZysKCqlS8zn0quCFLxEcsat9W0abw==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-7.1.1.tgz",
+      "integrity": "sha512-IO37Efu3KN7A3gigIp/iI5d6bEMwFwb4ZhjUedtvxEcXxxfmcGvKKR4yan4a+lT1CXvZIZLzOM+oS2zc2hsprw==",
       "dev": true,
       "dependencies": {
-        "@stryker-mutator/api": "6.4.1",
-        "@stryker-mutator/util": "6.4.1",
-        "tslib": "~2.5.0"
+        "@stryker-mutator/api": "7.1.1",
+        "@stryker-mutator/util": "7.1.1",
+        "tslib": "~2.6.0"
       },
       "engines": {
-        "node": ">=14.18.0"
+        "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@stryker-mutator/core": "^6.4.0",
+        "@stryker-mutator/core": "~7.1.0",
         "mocha": ">= 7.2 < 11"
       }
     },
     "node_modules/@stryker-mutator/util": {
-      "version": "6.4.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-6.4.1.tgz",
-      "integrity": "sha512-ziJA9VGSQXtLPpohgeZnEdwAeWfFmYAgqTcVIloCzR0ERBdh2Vvq27zRG2xAEJ5bTD7/5DDaXX9B0nidTCHlcg==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-7.1.1.tgz",
+      "integrity": "sha512-LIV7vVrC7dT04BDYZEYkYmetN7WQqD9xiQJRpkrYgACPGdu3eAAfk8UwRSoXAgMqAfZnYC2c+0BuliS8jDdBoQ==",
       "dev": true,
       "dependencies": {
         "lodash.flatmap": "~4.5.0"
@@ -1310,9 +1540,9 @@
       }
     },
     "node_modules/@types/http-cache-semantics": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
-      "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz",
+      "integrity": "sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==",
       "dev": true
     },
     "node_modules/@types/json5": {
@@ -1340,9 +1570,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "18.11.18",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
-      "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
+      "version": "20.6.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz",
+      "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==",
       "dev": true
     },
     "node_modules/@types/normalize-package-data": {
@@ -1382,9 +1612,9 @@
       }
     },
     "node_modules/acorn": {
-      "version": "8.8.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
-      "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
+      "version": "8.10.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
       "dev": true,
       "bin": {
         "acorn": "bin/acorn"
@@ -1402,56 +1632,69 @@
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "node_modules/add-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
-      "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==",
-      "dev": true
-    },
     "node_modules/addons-linter": {
-      "version": "5.31.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-5.31.0.tgz",
-      "integrity": "sha512-7JhDrrzsggWHrwIJTxiP/9NOzXjqaZF9dbZQ5J+AXeF613a1XHHh9cUQQTlkJETELMai5kULqYNVImjyxoF6vA==",
+      "version": "6.14.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.14.0.tgz",
+      "integrity": "sha512-dgYdML/EoxLhJKt9KL7KTWbb43r2ZDRYQGIv9V1Mf69pBIKhrWr1IIxVDVWrl0b3GuWsFtSBs0iHMsmJxAdvng==",
       "dev": true,
       "dependencies": {
-        "@fluent/syntax": "0.18.1",
-        "@mdn/browser-compat-data": "5.2.39",
+        "@fluent/syntax": "0.19.0",
+        "@mdn/browser-compat-data": "5.3.15",
         "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "8.5.0",
+        "addons-scanner-utils": "9.4.0",
         "ajv": "8.12.0",
         "chalk": "4.1.2",
         "cheerio": "1.0.0-rc.12",
         "columnify": "1.6.0",
         "common-tags": "1.8.2",
-        "deepmerge": "4.3.0",
-        "eslint": "8.35.0",
+        "deepmerge": "4.3.1",
+        "eslint": "8.49.0",
         "eslint-plugin-no-unsanitized": "4.0.2",
-        "eslint-visitor-keys": "3.3.0",
-        "espree": "9.4.1",
+        "eslint-visitor-keys": "3.4.3",
+        "espree": "9.6.1",
         "esprima": "4.0.1",
         "fast-json-patch": "3.1.1",
-        "glob": "8.1.0",
+        "glob": "10.3.4",
         "image-size": "1.0.2",
         "is-mergeable-object": "1.1.1",
         "jed": "1.1.1",
         "json-merge-patch": "1.0.2",
         "os-locale": "5.0.0",
-        "pino": "8.11.0",
-        "postcss": "8.4.21",
+        "pino": "8.15.1",
+        "postcss": "8.4.29",
         "relaxed-json": "1.0.3",
-        "semver": "7.3.8",
+        "semver": "7.5.4",
         "sha.js": "2.4.11",
         "source-map-support": "0.5.21",
         "tosource": "1.0.0",
         "upath": "2.0.1",
-        "yargs": "17.7.1",
+        "yargs": "17.7.2",
         "yauzl": "2.10.0"
       },
       "bin": {
         "addons-linter": "bin/addons-linter"
       },
       "engines": {
-        "node": ">=12.21.0"
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/addons-linter/node_modules/@eslint/js": {
+      "version": "8.49.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz",
+      "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==",
+      "dev": true,
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/addons-linter/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
     "node_modules/addons-linter/node_modules/chalk": {
@@ -1470,63 +1713,153 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/addons-linter/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/addons-linter/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+    "node_modules/addons-linter/node_modules/eslint": {
+      "version": "8.49.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz",
+      "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==",
       "dev": true,
       "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.2",
+        "@eslint/js": "8.49.0",
+        "@humanwhocodes/config-array": "^0.11.11",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@nodelib/fs.walk": "^1.2.8",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
+        "esquery": "^1.4.2",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "globals": "^13.19.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3",
+        "strip-ansi": "^6.0.1",
+        "text-table": "^0.2.0"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/addons-linter/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+    "node_modules/addons-linter/node_modules/eslint/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
       "dependencies": {
-        "has-flag": "^4.0.0"
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       },
-      "engines": {
-        "node": ">=8"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/addons-linter/node_modules/yargs": {
-      "version": "17.7.1",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
-      "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
+    "node_modules/addons-linter/node_modules/eslint/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
       "dependencies": {
-        "cliui": "^8.0.1",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.3",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^21.1.1"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">=12"
+        "node": "*"
       }
     },
-    "node_modules/addons-linter/node_modules/yargs-parser": {
-      "version": "21.1.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
-      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+    "node_modules/addons-linter/node_modules/glob": {
+      "version": "10.3.4",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz",
+      "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==",
       "dev": true,
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^2.0.3",
+        "minimatch": "^9.0.1",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+        "path-scurry": "^1.10.1"
+      },
+      "bin": {
+        "glob": "dist/cjs/src/bin.js"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/addons-linter/node_modules/globals": {
+      "version": "13.22.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
+      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+      "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/addons-linter/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true
+    },
+    "node_modules/addons-linter/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/addons-linter/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/addons-moz-compare": {
@@ -1536,9 +1869,9 @@
       "dev": true
     },
     "node_modules/addons-scanner-utils": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-8.5.0.tgz",
-      "integrity": "sha512-X35SYZRdSnxx7UZuAk+DizKihQp2Ze2c5GV+5nnRr/FFyx/fOgE3Zo8jdhzSne57PENE9w1ZVocBLJTN6UDB3g==",
+      "version": "9.4.0",
+      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.4.0.tgz",
+      "integrity": "sha512-XJpygYD1mYIDJ9BRnPK1FRfBiIybuzG2R8SHzPeuG76Uy78UR4+W28g1ifKBmy+nlI9yQ/AwooqbIuPxAlnAew==",
       "dev": true,
       "dependencies": {
         "@types/yauzl": "2.10.0",
@@ -1551,7 +1884,7 @@
       "peerDependencies": {
         "body-parser": "1.20.2",
         "express": "4.18.2",
-        "node-fetch": "2.6.7",
+        "node-fetch": "2.6.11",
         "safe-compare": "1.1.4"
       },
       "peerDependenciesMeta": {
@@ -1594,6 +1927,20 @@
         "url": "https://github.com/sponsors/epoberezkin"
       }
     },
+    "node_modules/ajv-draft-04": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
+      "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
+      "dev": true,
+      "peerDependencies": {
+        "ajv": "^8.5.0"
+      },
+      "peerDependenciesMeta": {
+        "ajv": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/ajv-errors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
@@ -1624,26 +1971,6 @@
         "string-width": "^4.1.0"
       }
     },
-    "node_modules/ansi-align/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/ansi-align/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/ansi-colors": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
@@ -1654,15 +1981,15 @@
       }
     },
     "node_modules/ansi-escapes": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.0.0.tgz",
-      "integrity": "sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw==",
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
       "dev": true,
       "dependencies": {
-        "type-fest": "^3.0.0"
+        "type-fest": "^0.21.3"
       },
       "engines": {
-        "node": ">=14.16"
+        "node": ">=8"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -1678,9 +2005,9 @@
       }
     },
     "node_modules/ansi-sequence-parser": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz",
-      "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz",
+      "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==",
       "dev": true
     },
     "node_modules/ansi-styles": {
@@ -1717,12 +2044,34 @@
         "node": ">= 8"
       }
     },
+    "node_modules/are-docs-informative": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
+      "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
     "node_modules/argparse": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "dev": true
     },
+    "node_modules/array-buffer-byte-length": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+      "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "is-array-buffer": "^3.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/array-differ": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
@@ -1735,22 +2084,16 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/array-ify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
-      "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==",
-      "dev": true
-    },
     "node_modules/array-includes": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
-      "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
+      "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
-        "get-intrinsic": "^1.1.3",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "get-intrinsic": "^1.2.1",
         "is-string": "^1.0.7"
       },
       "engines": {
@@ -1769,15 +2112,34 @@
         "node": ">=8"
       }
     },
+    "node_modules/array.prototype.findlastindex": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
+      "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0",
+        "get-intrinsic": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/array.prototype.flat": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
-      "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
         "es-shim-unscopables": "^1.0.0"
       },
       "engines": {
@@ -1788,14 +2150,14 @@
       }
     },
     "node_modules/array.prototype.flatmap": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
-      "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
         "es-shim-unscopables": "^1.0.0"
       },
       "engines": {
@@ -1805,6 +2167,27 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/arraybuffer.prototype.slice": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
+      "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+      "dev": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.0",
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "get-intrinsic": "^1.2.1",
+        "is-array-buffer": "^3.0.2",
+        "is-shared-array-buffer": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/arrify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
@@ -1955,12 +2338,12 @@
       }
     },
     "node_modules/bl": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
-      "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
       "dev": true,
       "dependencies": {
-        "buffer": "^6.0.3",
+        "buffer": "^5.5.0",
         "inherits": "^2.0.4",
         "readable-stream": "^3.4.0"
       }
@@ -1978,19 +2361,19 @@
       "dev": true
     },
     "node_modules/boxen": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.1.tgz",
-      "integrity": "sha512-8k2eH6SRAK00NDl1iX5q17RJ8rfl53TajdYxE3ssMLehbg487dEVgsad4pIsZb/QqBgYWIl6JOauMTLGX2Kpkw==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz",
+      "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==",
       "dev": true,
       "dependencies": {
         "ansi-align": "^3.0.1",
-        "camelcase": "^7.0.0",
-        "chalk": "^5.0.1",
+        "camelcase": "^7.0.1",
+        "chalk": "^5.2.0",
         "cli-boxes": "^3.0.0",
         "string-width": "^5.1.2",
         "type-fest": "^2.13.0",
         "widest-line": "^4.0.1",
-        "wrap-ansi": "^8.0.1"
+        "wrap-ansi": "^8.1.0"
       },
       "engines": {
         "node": ">=14.16"
@@ -1999,6 +2382,30 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/boxen/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/boxen/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
     "node_modules/boxen/node_modules/camelcase": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
@@ -2011,6 +2418,44 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/boxen/node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "dev": true
+    },
+    "node_modules/boxen/node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "dev": true,
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/boxen/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
     "node_modules/boxen/node_modules/type-fest": {
       "version": "2.19.0",
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
@@ -2023,6 +2468,23 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/boxen/node_modules/wrap-ansi": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^6.1.0",
+        "string-width": "^5.0.1",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
     "node_modules/brace-expansion": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -2051,9 +2513,9 @@
       "dev": true
     },
     "node_modules/browserslist": {
-      "version": "4.21.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
-      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+      "version": "4.21.11",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz",
+      "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==",
       "dev": true,
       "funding": [
         {
@@ -2063,13 +2525,17 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001449",
-        "electron-to-chromium": "^1.4.284",
-        "node-releases": "^2.0.8",
-        "update-browserslist-db": "^1.0.10"
+        "caniuse-lite": "^1.0.30001538",
+        "electron-to-chromium": "^1.4.526",
+        "node-releases": "^2.0.13",
+        "update-browserslist-db": "^1.0.13"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -2079,9 +2545,9 @@
       }
     },
     "node_modules/buffer": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
-      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
       "dev": true,
       "funding": [
         {
@@ -2099,7 +2565,7 @@
       ],
       "dependencies": {
         "base64-js": "^1.3.1",
-        "ieee754": "^1.2.1"
+        "ieee754": "^1.1.13"
       }
     },
     "node_modules/buffer-crc32": {
@@ -2172,15 +2638,15 @@
       }
     },
     "node_modules/cacheable-request": {
-      "version": "10.2.5",
-      "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.5.tgz",
-      "integrity": "sha512-5RwYYCfzjNPsyJxb/QpaM0bfzx+kw5/YpDhZPm9oMIDntHFQ9YXeyV47ZvzlTE0XrrrbyO2UITJH4GF9eRLdXQ==",
+      "version": "10.2.13",
+      "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.13.tgz",
+      "integrity": "sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==",
       "dev": true,
       "dependencies": {
         "@types/http-cache-semantics": "^4.0.1",
         "get-stream": "^6.0.1",
-        "http-cache-semantics": "^4.1.0",
-        "keyv": "^4.5.2",
+        "http-cache-semantics": "^4.1.1",
+        "keyv": "^4.5.3",
         "mimic-response": "^4.0.0",
         "normalize-url": "^8.0.0",
         "responselike": "^3.0.0"
@@ -2238,9 +2704,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001458",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz",
-      "integrity": "sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w==",
+      "version": "1.0.30001538",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz",
+      "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==",
       "dev": true,
       "funding": [
         {
@@ -2250,6 +2716,10 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ]
     },
@@ -2260,9 +2730,9 @@
       "dev": true
     },
     "node_modules/chalk": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
-      "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+      "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
       "dev": true,
       "engines": {
         "node": "^12.17.0 || ^14.13 || >=16.0.0"
@@ -2382,9 +2852,9 @@
       }
     },
     "node_modules/ci-info": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz",
-      "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==",
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
+      "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
       "dev": true,
       "funding": [
         {
@@ -2430,24 +2900,21 @@
       }
     },
     "node_modules/cli-cursor": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
-      "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
       "dev": true,
       "dependencies": {
-        "restore-cursor": "^4.0.0"
+        "restore-cursor": "^3.1.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
     "node_modules/cli-spinners": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz",
-      "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==",
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz",
+      "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==",
       "dev": true,
       "engines": {
         "node": ">=6"
@@ -2457,9 +2924,9 @@
       }
     },
     "node_modules/cli-width": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz",
-      "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+      "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
       "dev": true,
       "engines": {
         "node": ">= 12"
@@ -2479,26 +2946,6 @@
         "node": ">=12"
       }
     },
-    "node_modules/cliui/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/cliui/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/cliui/node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -2575,18 +3022,18 @@
       }
     },
     "node_modules/commander": {
-      "version": "9.4.1",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz",
-      "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==",
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz",
+      "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==",
       "dev": true,
       "engines": {
-        "node": "^12.20.0 || >=14"
+        "node": ">=16"
       }
     },
     "node_modules/comment-parser": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz",
-      "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz",
+      "integrity": "sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==",
       "dev": true,
       "engines": {
         "node": ">= 12.0.0"
@@ -2601,16 +3048,6 @@
         "node": ">=4.0.0"
       }
     },
-    "node_modules/compare-func": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
-      "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==",
-      "dev": true,
-      "dependencies": {
-        "array-ify": "^1.0.0",
-        "dot-prop": "^5.1.0"
-      }
-    },
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2618,596 +3055,97 @@
       "dev": true
     },
     "node_modules/concat-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
-      "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
       "dev": true,
       "engines": [
-        "node >= 6.0"
+        "node >= 0.8"
       ],
       "dependencies": {
         "buffer-from": "^1.0.0",
         "inherits": "^2.0.3",
-        "readable-stream": "^3.0.2",
+        "readable-stream": "^2.2.2",
         "typedarray": "^0.0.6"
       }
     },
-    "node_modules/config-chain": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
-      "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
-      "dev": true,
-      "dependencies": {
-        "ini": "^1.3.4",
-        "proto-list": "~1.2.1"
-      }
-    },
-    "node_modules/configstore": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz",
-      "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==",
-      "dev": true,
-      "dependencies": {
-        "dot-prop": "^6.0.1",
-        "graceful-fs": "^4.2.6",
-        "unique-string": "^3.0.0",
-        "write-file-atomic": "^3.0.3",
-        "xdg-basedir": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/yeoman/configstore?sponsor=1"
-      }
-    },
-    "node_modules/configstore/node_modules/dot-prop": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
-      "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
-      "dev": true,
-      "dependencies": {
-        "is-obj": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/configstore/node_modules/write-file-atomic": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
-      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
-      "dev": true,
-      "dependencies": {
-        "imurmurhash": "^0.1.4",
-        "is-typedarray": "^1.0.0",
-        "signal-exit": "^3.0.2",
-        "typedarray-to-buffer": "^3.1.5"
-      }
-    },
-    "node_modules/consola": {
-      "version": "2.15.3",
-      "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
-      "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
-      "dev": true
-    },
-    "node_modules/conventional-changelog": {
-      "version": "3.1.25",
-      "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz",
-      "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==",
-      "dev": true,
-      "dependencies": {
-        "conventional-changelog-angular": "^5.0.12",
-        "conventional-changelog-atom": "^2.0.8",
-        "conventional-changelog-codemirror": "^2.0.8",
-        "conventional-changelog-conventionalcommits": "^4.5.0",
-        "conventional-changelog-core": "^4.2.1",
-        "conventional-changelog-ember": "^2.0.9",
-        "conventional-changelog-eslint": "^3.0.9",
-        "conventional-changelog-express": "^2.0.6",
-        "conventional-changelog-jquery": "^3.0.11",
-        "conventional-changelog-jshint": "^2.0.9",
-        "conventional-changelog-preset-loader": "^2.3.4"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-angular": {
-      "version": "5.0.13",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz",
-      "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==",
-      "dev": true,
-      "dependencies": {
-        "compare-func": "^2.0.0",
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-atom": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz",
-      "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==",
-      "dev": true,
-      "dependencies": {
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-codemirror": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz",
-      "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==",
-      "dev": true,
-      "dependencies": {
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-config-spec": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz",
-      "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==",
-      "dev": true
-    },
-    "node_modules/conventional-changelog-conventionalcommits": {
-      "version": "4.6.3",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz",
-      "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==",
-      "dev": true,
-      "dependencies": {
-        "compare-func": "^2.0.0",
-        "lodash": "^4.17.15",
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-core": {
-      "version": "4.2.4",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz",
-      "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==",
-      "dev": true,
-      "dependencies": {
-        "add-stream": "^1.0.0",
-        "conventional-changelog-writer": "^5.0.0",
-        "conventional-commits-parser": "^3.2.0",
-        "dateformat": "^3.0.0",
-        "get-pkg-repo": "^4.0.0",
-        "git-raw-commits": "^2.0.8",
-        "git-remote-origin-url": "^2.0.0",
-        "git-semver-tags": "^4.1.1",
-        "lodash": "^4.17.15",
-        "normalize-package-data": "^3.0.0",
-        "q": "^1.5.1",
-        "read-pkg": "^3.0.0",
-        "read-pkg-up": "^3.0.0",
-        "through2": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-      "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/hosted-git-info": {
-      "version": "2.8.9",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-      "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-      "dev": true
-    },
-    "node_modules/conventional-changelog-core/node_modules/locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-      "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-      "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-      "dev": true,
-      "dependencies": {
-        "pify": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/read-pkg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
-      "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
-      "dev": true,
-      "dependencies": {
-        "load-json-file": "^4.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/read-pkg-up": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
-      "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^2.0.0",
-        "read-pkg": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
-      "dev": true,
-      "dependencies": {
-        "hosted-git-info": "^2.1.4",
-        "resolve": "^1.10.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      }
-    },
-    "node_modules/conventional-changelog-core/node_modules/semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
-    "node_modules/conventional-changelog-ember": {
-      "version": "2.0.9",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz",
-      "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==",
-      "dev": true,
-      "dependencies": {
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-eslint": {
-      "version": "3.0.9",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz",
-      "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==",
-      "dev": true,
-      "dependencies": {
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-express": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz",
-      "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==",
-      "dev": true,
-      "dependencies": {
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-jquery": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz",
-      "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==",
-      "dev": true,
-      "dependencies": {
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-jshint": {
-      "version": "2.0.9",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz",
-      "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==",
-      "dev": true,
-      "dependencies": {
-        "compare-func": "^2.0.0",
-        "q": "^1.5.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-preset-loader": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz",
-      "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-writer": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz",
-      "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==",
-      "dev": true,
-      "dependencies": {
-        "conventional-commits-filter": "^2.0.7",
-        "dateformat": "^3.0.0",
-        "handlebars": "^4.7.7",
-        "json-stringify-safe": "^5.0.1",
-        "lodash": "^4.17.15",
-        "meow": "^8.0.0",
-        "semver": "^6.0.0",
-        "split": "^1.0.0",
-        "through2": "^4.0.0"
-      },
-      "bin": {
-        "conventional-changelog-writer": "cli.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-changelog-writer/node_modules/meow": {
-      "version": "8.1.2",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
-      "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
-      "dev": true,
-      "dependencies": {
-        "@types/minimist": "^1.2.0",
-        "camelcase-keys": "^6.2.2",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.0",
-        "read-pkg-up": "^7.0.1",
-        "redent": "^3.0.0",
-        "trim-newlines": "^3.0.0",
-        "type-fest": "^0.18.0",
-        "yargs-parser": "^20.2.3"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/conventional-changelog-writer/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/conventional-changelog-writer/node_modules/type-fest": {
-      "version": "0.18.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
-      "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/conventional-commits-filter": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz",
-      "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==",
-      "dev": true,
-      "dependencies": {
-        "lodash.ismatch": "^4.4.0",
-        "modify-values": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-commits-parser": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz",
-      "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==",
-      "dev": true,
-      "dependencies": {
-        "is-text-path": "^1.0.1",
-        "JSONStream": "^1.0.4",
-        "lodash": "^4.17.15",
-        "meow": "^8.0.0",
-        "split2": "^3.0.0",
-        "through2": "^4.0.0"
-      },
-      "bin": {
-        "conventional-commits-parser": "cli.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/conventional-commits-parser/node_modules/meow": {
-      "version": "8.1.2",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
-      "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
-      "dev": true,
-      "dependencies": {
-        "@types/minimist": "^1.2.0",
-        "camelcase-keys": "^6.2.2",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.0",
-        "read-pkg-up": "^7.0.1",
-        "redent": "^3.0.0",
-        "trim-newlines": "^3.0.0",
-        "type-fest": "^0.18.0",
-        "yargs-parser": "^20.2.3"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
+    "node_modules/concat-stream/node_modules/isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+      "dev": true
     },
-    "node_modules/conventional-commits-parser/node_modules/split2": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
-      "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
+    "node_modules/concat-stream/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
       "dev": true,
       "dependencies": {
-        "readable-stream": "^3.0.0"
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
       }
     },
-    "node_modules/conventional-commits-parser/node_modules/type-fest": {
-      "version": "0.18.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
-      "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+    "node_modules/concat-stream/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
       "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
       }
     },
-    "node_modules/conventional-recommended-bump": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz",
-      "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==",
+    "node_modules/config-chain": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+      "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
       "dev": true,
       "dependencies": {
-        "concat-stream": "^2.0.0",
-        "conventional-changelog-preset-loader": "^2.3.4",
-        "conventional-commits-filter": "^2.0.7",
-        "conventional-commits-parser": "^3.2.0",
-        "git-raw-commits": "^2.0.8",
-        "git-semver-tags": "^4.1.1",
-        "meow": "^8.0.0",
-        "q": "^1.5.1"
-      },
-      "bin": {
-        "conventional-recommended-bump": "cli.js"
-      },
-      "engines": {
-        "node": ">=10"
+        "ini": "^1.3.4",
+        "proto-list": "~1.2.1"
       }
     },
-    "node_modules/conventional-recommended-bump/node_modules/meow": {
-      "version": "8.1.2",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
-      "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
+    "node_modules/configstore": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz",
+      "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==",
       "dev": true,
       "dependencies": {
-        "@types/minimist": "^1.2.0",
-        "camelcase-keys": "^6.2.2",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.0",
-        "read-pkg-up": "^7.0.1",
-        "redent": "^3.0.0",
-        "trim-newlines": "^3.0.0",
-        "type-fest": "^0.18.0",
-        "yargs-parser": "^20.2.3"
+        "dot-prop": "^6.0.1",
+        "graceful-fs": "^4.2.6",
+        "unique-string": "^3.0.0",
+        "write-file-atomic": "^3.0.3",
+        "xdg-basedir": "^5.0.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://github.com/yeoman/configstore?sponsor=1"
       }
     },
-    "node_modules/conventional-recommended-bump/node_modules/type-fest": {
-      "version": "0.18.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
-      "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+    "node_modules/configstore/node_modules/write-file-atomic": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
       "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "dependencies": {
+        "imurmurhash": "^0.1.4",
+        "is-typedarray": "^1.0.0",
+        "signal-exit": "^3.0.2",
+        "typedarray-to-buffer": "^3.1.5"
       }
     },
+    "node_modules/consola": {
+      "version": "2.15.3",
+      "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
+      "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
+      "dev": true
+    },
     "node_modules/convert-source-map": {
       "version": "1.9.0",
       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
@@ -3215,9 +3153,9 @@
       "dev": true
     },
     "node_modules/core-js": {
-      "version": "3.27.1",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz",
-      "integrity": "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==",
+      "version": "3.29.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz",
+      "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==",
       "dev": true,
       "hasInstallScript": true,
       "funding": {
@@ -3241,9 +3179,9 @@
       }
     },
     "node_modules/cosmiconfig": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz",
-      "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==",
+      "version": "8.1.3",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz",
+      "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==",
       "dev": true,
       "dependencies": {
         "import-fresh": "^3.2.1",
@@ -3253,6 +3191,9 @@
       },
       "engines": {
         "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/d-fischer"
       }
     },
     "node_modules/cross-spawn": {
@@ -3297,9 +3238,9 @@
       }
     },
     "node_modules/css-functions-list": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz",
-      "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz",
+      "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==",
       "dev": true,
       "engines": {
         "node": ">=12.22"
@@ -3358,15 +3299,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/dargs": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
-      "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -3397,15 +3329,6 @@
         "node": ">=4.0"
       }
     },
-    "node_modules/dateformat": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
-      "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/debounce": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
@@ -3515,9 +3438,9 @@
       }
     },
     "node_modules/deepmerge": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
-      "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+      "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -3544,6 +3467,20 @@
         "node": ">=10"
       }
     },
+    "node_modules/define-data-property": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz",
+      "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.2.1",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/define-lazy-prop": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -3554,11 +3491,12 @@
       }
     },
     "node_modules/define-properties": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
-      "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
       "dev": true,
       "dependencies": {
+        "define-data-property": "^1.0.1",
         "has-property-descriptors": "^1.0.0",
         "object-keys": "^1.1.1"
       },
@@ -3578,28 +3516,10 @@
         "node": ">=0.4.0"
       }
     },
-    "node_modules/detect-indent": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
-      "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/detect-newline": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
-      "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/diff": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
-      "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
+      "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
       "dev": true,
       "engines": {
         "node": ">=0.3.1"
@@ -3677,136 +3597,34 @@
       }
     },
     "node_modules/domutils": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
-      "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+      "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
       "dev": true,
       "dependencies": {
         "dom-serializer": "^2.0.0",
         "domelementtype": "^2.3.0",
-        "domhandler": "^5.0.1"
+        "domhandler": "^5.0.3"
       },
       "funding": {
         "url": "https://github.com/fb55/domutils?sponsor=1"
       }
     },
     "node_modules/dot-prop": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
-      "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
+      "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
       "dev": true,
       "dependencies": {
         "is-obj": "^2.0.0"
       },
       "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/dotgitignore": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz",
-      "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^3.0.0",
-        "minimatch": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/dotgitignore/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/dotgitignore/node_modules/find-up": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/dotgitignore/node_modules/locate-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^3.0.0",
-        "path-exists": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/dotgitignore/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/dotgitignore/node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/dotgitignore/node_modules/p-locate": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/dotgitignore/node_modules/p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/dotgitignore/node_modules/path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/dtrace-provider": {
       "version": "0.8.8",
       "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
@@ -3847,9 +3665,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.316",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.316.tgz",
-      "integrity": "sha512-9urqVpdeJYAwVL/sBjsX2pSlgYI/b4nOqC6UaNa0xlq1VUbXLRhERWlxcQ4FWfUOQQxSSxN/taFtapEcwg5tVA==",
+      "version": "1.4.528",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.528.tgz",
+      "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==",
       "dev": true
     },
     "node_modules/emoji-regex": {
@@ -3868,9 +3686,9 @@
       }
     },
     "node_modules/entities": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
-      "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
       "dev": true,
       "engines": {
         "node": ">=0.12"
@@ -3889,18 +3707,19 @@
       }
     },
     "node_modules/es-abstract": {
-      "version": "1.21.1",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz",
-      "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==",
+      "version": "1.22.2",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz",
+      "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==",
       "dev": true,
       "dependencies": {
+        "array-buffer-byte-length": "^1.0.0",
+        "arraybuffer.prototype.slice": "^1.0.2",
         "available-typed-arrays": "^1.0.5",
         "call-bind": "^1.0.2",
         "es-set-tostringtag": "^2.0.1",
         "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "function.prototype.name": "^1.1.5",
-        "get-intrinsic": "^1.1.3",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.1",
         "get-symbol-description": "^1.0.0",
         "globalthis": "^1.0.3",
         "gopd": "^1.0.1",
@@ -3908,25 +3727,30 @@
         "has-property-descriptors": "^1.0.0",
         "has-proto": "^1.0.1",
         "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.4",
-        "is-array-buffer": "^3.0.1",
+        "internal-slot": "^1.0.5",
+        "is-array-buffer": "^3.0.2",
         "is-callable": "^1.2.7",
         "is-negative-zero": "^2.0.2",
         "is-regex": "^1.1.4",
         "is-shared-array-buffer": "^1.0.2",
         "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.10",
+        "is-typed-array": "^1.1.12",
         "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.2",
+        "object-inspect": "^1.12.3",
         "object-keys": "^1.1.1",
         "object.assign": "^4.1.4",
-        "regexp.prototype.flags": "^1.4.3",
+        "regexp.prototype.flags": "^1.5.1",
+        "safe-array-concat": "^1.0.1",
         "safe-regex-test": "^1.0.0",
-        "string.prototype.trimend": "^1.0.6",
-        "string.prototype.trimstart": "^1.0.6",
+        "string.prototype.trim": "^1.2.8",
+        "string.prototype.trimend": "^1.0.7",
+        "string.prototype.trimstart": "^1.0.7",
+        "typed-array-buffer": "^1.0.0",
+        "typed-array-byte-length": "^1.0.0",
+        "typed-array-byte-offset": "^1.0.0",
         "typed-array-length": "^1.0.4",
         "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.9"
+        "which-typed-array": "^1.1.11"
       },
       "engines": {
         "node": ">= 0.4"
@@ -4024,26 +3848,27 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.35.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz",
-      "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==",
+      "version": "8.50.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz",
+      "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==",
       "dev": true,
       "dependencies": {
-        "@eslint/eslintrc": "^2.0.0",
-        "@eslint/js": "8.35.0",
-        "@humanwhocodes/config-array": "^0.11.8",
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.2",
+        "@eslint/js": "8.50.0",
+        "@humanwhocodes/config-array": "^0.11.11",
         "@humanwhocodes/module-importer": "^1.0.1",
         "@nodelib/fs.walk": "^1.2.8",
-        "ajv": "^6.10.0",
+        "ajv": "^6.12.4",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
         "debug": "^4.3.2",
         "doctrine": "^3.0.0",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.1.1",
-        "eslint-utils": "^3.0.0",
-        "eslint-visitor-keys": "^3.3.0",
-        "espree": "^9.4.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
         "esquery": "^1.4.2",
         "esutils": "^2.0.2",
         "fast-deep-equal": "^3.1.3",
@@ -4051,23 +3876,19 @@
         "find-up": "^5.0.0",
         "glob-parent": "^6.0.2",
         "globals": "^13.19.0",
-        "grapheme-splitter": "^1.0.4",
+        "graphemer": "^1.4.0",
         "ignore": "^5.2.0",
-        "import-fresh": "^3.0.0",
         "imurmurhash": "^0.1.4",
         "is-glob": "^4.0.0",
         "is-path-inside": "^3.0.3",
-        "js-sdsl": "^4.1.4",
         "js-yaml": "^4.1.0",
         "json-stable-stringify-without-jsonify": "^1.0.1",
         "levn": "^0.4.1",
         "lodash.merge": "^4.6.2",
         "minimatch": "^3.1.2",
         "natural-compare": "^1.4.0",
-        "optionator": "^0.9.1",
-        "regexpp": "^3.2.0",
+        "optionator": "^0.9.3",
         "strip-ansi": "^6.0.1",
-        "strip-json-comments": "^3.1.0",
         "text-table": "^0.2.0"
       },
       "bin": {
@@ -4081,14 +3902,14 @@
       }
     },
     "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.7",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
-      "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+      "version": "0.3.9",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
       "dev": true,
       "dependencies": {
         "debug": "^3.2.7",
-        "is-core-module": "^2.11.0",
-        "resolve": "^1.22.1"
+        "is-core-module": "^2.13.0",
+        "resolve": "^1.22.4"
       }
     },
     "node_modules/eslint-import-resolver-node/node_modules/debug": {
@@ -4101,9 +3922,9 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
-      "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+      "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
       "dev": true,
       "dependencies": {
         "debug": "^3.2.7"
@@ -4127,58 +3948,34 @@
       }
     },
     "node_modules/eslint-plugin-array-func": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-3.1.8.tgz",
-      "integrity": "sha512-BjnbJvw+knaHgVddIL3q5xYcoqAZoK8wOdT7QF+mkvSAjXdZCdhL0z71Y7oRtgXA8BpN9QLJ2uHgD3I6ymlbOw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6.8.0"
-      },
-      "peerDependencies": {
-        "eslint": ">=3.0.0"
-      }
-    },
-    "node_modules/eslint-plugin-es": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
-      "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-4.0.0.tgz",
+      "integrity": "sha512-p3NY2idNIvgmQLF2/62ZskYt8gOuUgQ51smRc3Lh7FtSozpNc2sg+lniz9VaCagLZHEZTl8qGJKqE7xy8O/D/g==",
       "dev": true,
-      "dependencies": {
-        "eslint-utils": "^2.0.0",
-        "regexpp": "^3.0.0"
-      },
       "engines": {
-        "node": ">=8.10.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "peerDependencies": {
-        "eslint": ">=4.19.1"
+        "eslint": ">=8.40.0"
       }
     },
-    "node_modules/eslint-plugin-es/node_modules/eslint-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-      "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+    "node_modules/eslint-plugin-es-x": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz",
+      "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==",
       "dev": true,
       "dependencies": {
-        "eslint-visitor-keys": "^1.1.0"
+        "@eslint-community/eslint-utils": "^4.1.2",
+        "@eslint-community/regexpp": "^4.6.0"
       },
       "engines": {
-        "node": ">=6"
+        "node": "^14.18.0 || >=16.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
-    "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
+        "url": "https://github.com/sponsors/ota-meshi"
+      },
+      "peerDependencies": {
+        "eslint": ">=8"
       }
     },
     "node_modules/eslint-plugin-eslint-comments": {
@@ -4210,26 +4007,28 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.27.5",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
-      "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
+      "version": "2.28.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz",
+      "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==",
       "dev": true,
       "dependencies": {
         "array-includes": "^3.1.6",
+        "array.prototype.findlastindex": "^1.2.2",
         "array.prototype.flat": "^1.3.1",
         "array.prototype.flatmap": "^1.3.1",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.7",
-        "eslint-module-utils": "^2.7.4",
+        "eslint-module-utils": "^2.8.0",
         "has": "^1.0.3",
-        "is-core-module": "^2.11.0",
+        "is-core-module": "^2.13.0",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.6",
+        "object.groupby": "^1.0.0",
         "object.values": "^1.1.6",
-        "resolve": "^1.22.1",
-        "semver": "^6.3.0",
-        "tsconfig-paths": "^3.14.1"
+        "semver": "^6.3.1",
+        "tsconfig-paths": "^3.14.2"
       },
       "engines": {
         "node": ">=4"
@@ -4282,30 +4081,32 @@
       }
     },
     "node_modules/eslint-plugin-import/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
-      "version": "40.0.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-40.0.1.tgz",
-      "integrity": "sha512-KkiRInury7YrjjV5aCHDxwsPy6XFt5p2b2CnpDMITnWs8patNPf5kj24+VXIWw45kP6z/B0GOKfrYczB56OjQQ==",
+      "version": "46.8.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.8.2.tgz",
+      "integrity": "sha512-5TSnD018f3tUJNne4s4gDWQflbsgOycIKEUBoCLn6XtBMgNHxQFmV8vVxUtiPxAQq8lrX85OaSG/2gnctxw9uQ==",
       "dev": true,
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.36.1",
-        "comment-parser": "1.3.1",
+        "@es-joy/jsdoccomment": "~0.40.1",
+        "are-docs-informative": "^0.0.2",
+        "comment-parser": "1.4.0",
         "debug": "^4.3.4",
         "escape-string-regexp": "^4.0.0",
-        "esquery": "^1.4.0",
-        "semver": "^7.3.8",
+        "esquery": "^1.5.0",
+        "is-builtin-module": "^3.2.1",
+        "semver": "^7.5.4",
         "spdx-expression-parse": "^3.0.1"
       },
       "engines": {
-        "node": "^14 || ^16 || ^17 || ^18 || ^19"
+        "node": ">=16"
       },
       "peerDependencies": {
         "eslint": "^7.0.0 || ^8.0.0"
@@ -4328,22 +4129,23 @@
       }
     },
     "node_modules/eslint-plugin-n": {
-      "version": "15.6.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz",
-      "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==",
+      "version": "16.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.1.0.tgz",
+      "integrity": "sha512-3wv/TooBst0N4ND+pnvffHuz9gNPmk/NkLwAxOt2JykTl/hcuECe6yhTtLJcZjIxtZwN+GX92ACp/QTLpHA3Hg==",
       "dev": true,
       "dependencies": {
+        "@eslint-community/eslint-utils": "^4.4.0",
         "builtins": "^5.0.1",
-        "eslint-plugin-es": "^4.1.0",
-        "eslint-utils": "^3.0.0",
-        "ignore": "^5.1.1",
-        "is-core-module": "^2.11.0",
+        "eslint-plugin-es-x": "^7.1.0",
+        "get-tsconfig": "^4.7.0",
+        "ignore": "^5.2.4",
+        "is-core-module": "^2.12.1",
         "minimatch": "^3.1.2",
-        "resolve": "^1.22.1",
-        "semver": "^7.3.8"
+        "resolve": "^1.22.2",
+        "semver": "^7.5.3"
       },
       "engines": {
-        "node": ">=12.22.0"
+        "node": ">=16.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/mysticatea"
@@ -4396,19 +4198,19 @@
       }
     },
     "node_modules/eslint-plugin-regexp": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.12.0.tgz",
-      "integrity": "sha512-A1lnzOqHC22Ve8PZJgcw5pDHk5Sxp7J/pY86u027lVEGpUwe7dhZVVsy3SCm/cN438Zts8e9c09KGIVK4IixuA==",
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz",
+      "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==",
       "dev": true,
       "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.4.0",
         "comment-parser": "^1.1.2",
-        "eslint-utils": "^3.0.0",
         "grapheme-splitter": "^1.0.4",
         "jsdoctypeparser": "^9.0.0",
-        "refa": "^0.9.0",
-        "regexp-ast-analysis": "^0.5.1",
-        "regexpp": "^3.2.0",
-        "scslre": "^0.1.6"
+        "refa": "^0.11.0",
+        "regexp-ast-analysis": "^0.6.0",
+        "scslre": "^0.2.0"
       },
       "engines": {
         "node": "^12 || >=14"
@@ -4418,36 +4220,35 @@
       }
     },
     "node_modules/eslint-plugin-unicorn": {
-      "version": "46.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-46.0.0.tgz",
-      "integrity": "sha512-j07WkC+PFZwk8J33LYp6JMoHa1lXc1u6R45pbSAipjpfpb7KIGr17VE2D685zCxR5VL4cjrl65kTJflziQWMDA==",
+      "version": "48.0.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz",
+      "integrity": "sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.19.1",
-        "@eslint-community/eslint-utils": "^4.1.2",
-        "ci-info": "^3.6.1",
+        "@babel/helper-validator-identifier": "^7.22.5",
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "ci-info": "^3.8.0",
         "clean-regexp": "^1.0.0",
-        "esquery": "^1.4.0",
+        "esquery": "^1.5.0",
         "indent-string": "^4.0.0",
-        "is-builtin-module": "^3.2.0",
+        "is-builtin-module": "^3.2.1",
         "jsesc": "^3.0.2",
         "lodash": "^4.17.21",
         "pluralize": "^8.0.0",
         "read-pkg-up": "^7.0.1",
-        "regexp-tree": "^0.1.24",
-        "regjsparser": "^0.9.1",
-        "safe-regex": "^2.1.1",
-        "semver": "^7.3.8",
+        "regexp-tree": "^0.1.27",
+        "regjsparser": "^0.10.0",
+        "semver": "^7.5.4",
         "strip-indent": "^3.0.0"
       },
       "engines": {
-        "node": ">=14.18"
+        "node": ">=16"
       },
       "funding": {
         "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
       },
       "peerDependencies": {
-        "eslint": ">=8.28.0"
+        "eslint": ">=8.44.0"
       }
     },
     "node_modules/eslint-plugin-unicorn/node_modules/jsesc": {
@@ -4463,9 +4264,9 @@
       }
     },
     "node_modules/eslint-scope": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-      "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
       "dev": true,
       "dependencies": {
         "esrecurse": "^4.3.0",
@@ -4473,6 +4274,9 @@
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/eslint-utils": {
@@ -4503,12 +4307,15 @@
       }
     },
     "node_modules/eslint-visitor-keys": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-      "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/eslint/node_modules/ajv": {
@@ -4554,9 +4361,9 @@
       }
     },
     "node_modules/eslint/node_modules/globals": {
-      "version": "13.19.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
-      "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
+      "version": "13.22.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
+      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -4611,14 +4418,14 @@
       }
     },
     "node_modules/espree": {
-      "version": "9.4.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
-      "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
       "dev": true,
       "dependencies": {
-        "acorn": "^8.8.0",
+        "acorn": "^8.9.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.3.0"
+        "eslint-visitor-keys": "^3.4.1"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4707,9 +4514,9 @@
       }
     },
     "node_modules/execa": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-7.0.0.tgz",
-      "integrity": "sha512-tQbH0pH/8LHTnwTrsKWideqi6rFB/QNUawEwrn+WHyz7PX1Tuz2u7wfTvbaNBdP5JD5LVWxNo8/A8CHNZ3bV6g==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
+      "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
       "dev": true,
       "dependencies": {
         "cross-spawn": "^7.0.3",
@@ -4811,9 +4618,9 @@
       "dev": true
     },
     "node_modules/fast-redact": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz",
-      "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz",
+      "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==",
       "dev": true,
       "engines": {
         "node": ">=6"
@@ -4950,16 +4757,16 @@
       }
     },
     "node_modules/firefox-profile": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.2.2.tgz",
-      "integrity": "sha512-3kI17Xl9dL9AeRkpV1yahsJ+UbekkPtlQswKrIsTY1NLgxtEOR4R19rjGGz5+7/rP8Jt6fvxHk+Bai9R6Eai3w==",
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.3.2.tgz",
+      "integrity": "sha512-/C+Eqa0YgIsQT2p66p7Ygzqe7NlE/GNTbhw2SBCm5V3OsWDPITNdTPEcH2Q2fe7eMpYYNPKdUcuVioZBZiR6kA==",
       "dev": true,
       "dependencies": {
         "adm-zip": "~0.5.x",
         "fs-extra": "~9.0.1",
         "ini": "~2.0.0",
         "minimist": "^1.2.5",
-        "xml2js": "~0.4.23"
+        "xml2js": "^0.5.0"
       },
       "bin": {
         "firefox-profile": "lib/cli.js"
@@ -5038,38 +4845,29 @@
       }
     },
     "node_modules/flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz",
+      "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==",
       "dev": true,
       "dependencies": {
-        "flatted": "^3.1.0",
+        "flatted": "^3.2.7",
+        "keyv": "^4.5.3",
         "rimraf": "^3.0.2"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": ">=12.0.0"
       }
     },
     "node_modules/flatted": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
-      "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+      "version": "3.2.9",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
+      "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
       "dev": true
     },
-    "node_modules/fluent-syntax": {
-      "version": "0.14.0",
-      "resolved": "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.14.0.tgz",
-      "integrity": "sha512-+k8uXWfRpSrE33764RbpjIKMzIX6R9EnSjFBgaA1s0Mboc3KnW9sYe0c6vjIoZQY1C4Gst1VFvAOP6YGJjTJuA==",
-      "deprecated": "Renamed to @fluent/syntax 0.14.0",
-      "dev": true,
-      "engines": {
-        "node": ">=8.9.0"
-      }
-    },
     "node_modules/follow-redirects": {
-      "version": "1.15.2",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
-      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+      "version": "1.15.3",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
+      "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
       "dev": true,
       "funding": [
         {
@@ -5095,6 +4893,34 @@
         "is-callable": "^1.1.3"
       }
     },
+    "node_modules/foreground-child": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
+      "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+      "dev": true,
+      "dependencies": {
+        "cross-spawn": "^7.0.0",
+        "signal-exit": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/foreground-child/node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/forever-agent": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -5160,9 +4986,9 @@
       "dev": true
     },
     "node_modules/fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
       "dev": true,
       "hasInstallScript": true,
       "optional": true,
@@ -5180,15 +5006,15 @@
       "dev": true
     },
     "node_modules/function.prototype.name": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0",
-        "functions-have-names": "^1.2.2"
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
       },
       "engines": {
         "node": ">= 0.4"
@@ -5273,144 +5099,27 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
-      "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+      "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
       "dev": true,
       "dependencies": {
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
+        "has-proto": "^1.0.1",
         "has-symbols": "^1.0.3"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/get-pkg-repo": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz",
-      "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==",
-      "dev": true,
-      "dependencies": {
-        "@hutson/parse-repository-url": "^3.0.0",
-        "hosted-git-info": "^4.0.0",
-        "through2": "^2.0.0",
-        "yargs": "^16.2.0"
-      },
-      "bin": {
-        "get-pkg-repo": "src/cli.js"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/get-pkg-repo/node_modules/cliui": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0",
-        "wrap-ansi": "^7.0.0"
-      }
-    },
-    "node_modules/get-pkg-repo/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/get-pkg-repo/node_modules/readable-stream": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-      "dev": true,
-      "dependencies": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "node_modules/get-pkg-repo/node_modules/string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "node_modules/get-pkg-repo/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/get-pkg-repo/node_modules/through2": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-      "dev": true,
-      "dependencies": {
-        "readable-stream": "~2.3.6",
-        "xtend": "~4.0.1"
-      }
-    },
-    "node_modules/get-pkg-repo/node_modules/wrap-ansi": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/get-pkg-repo/node_modules/yargs": {
-      "version": "16.2.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^7.0.2",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.0",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^20.2.2"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/get-port": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz",
-      "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.0.0.tgz",
+      "integrity": "sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==",
       "dev": true,
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -5432,190 +5141,56 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
       "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
-      "dev": true,
-      "dependencies": {
-        "assert-plus": "^1.0.0"
-      }
-    },
-    "node_modules/git-raw-commits": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
-      "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
-      "dev": true,
-      "dependencies": {
-        "dargs": "^7.0.0",
-        "lodash": "^4.17.15",
-        "meow": "^8.0.0",
-        "split2": "^3.0.0",
-        "through2": "^4.0.0"
-      },
-      "bin": {
-        "git-raw-commits": "cli.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/git-raw-commits/node_modules/meow": {
-      "version": "8.1.2",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
-      "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
-      "dev": true,
-      "dependencies": {
-        "@types/minimist": "^1.2.0",
-        "camelcase-keys": "^6.2.2",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.0",
-        "read-pkg-up": "^7.0.1",
-        "redent": "^3.0.0",
-        "trim-newlines": "^3.0.0",
-        "type-fest": "^0.18.0",
-        "yargs-parser": "^20.2.3"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/git-raw-commits/node_modules/split2": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
-      "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
-      "dev": true,
-      "dependencies": {
-        "readable-stream": "^3.0.0"
-      }
-    },
-    "node_modules/git-raw-commits/node_modules/type-fest": {
-      "version": "0.18.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
-      "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/git-remote-origin-url": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
-      "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==",
-      "dev": true,
-      "dependencies": {
-        "gitconfiglocal": "^1.0.0",
-        "pify": "^2.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/git-semver-tags": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz",
-      "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==",
-      "dev": true,
-      "dependencies": {
-        "meow": "^8.0.0",
-        "semver": "^6.0.0"
-      },
-      "bin": {
-        "git-semver-tags": "cli.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/git-semver-tags/node_modules/meow": {
-      "version": "8.1.2",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
-      "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
-      "dev": true,
-      "dependencies": {
-        "@types/minimist": "^1.2.0",
-        "camelcase-keys": "^6.2.2",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.0",
-        "read-pkg-up": "^7.0.1",
-        "redent": "^3.0.0",
-        "trim-newlines": "^3.0.0",
-        "type-fest": "^0.18.0",
-        "yargs-parser": "^20.2.3"
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/git-semver-tags/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/git-semver-tags/node_modules/type-fest": {
-      "version": "0.18.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
-      "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+    "node_modules/get-tsconfig": {
+      "version": "4.7.2",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
+      "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
       "dev": true,
-      "engines": {
-        "node": ">=10"
+      "dependencies": {
+        "resolve-pkg-maps": "^1.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
       }
     },
-    "node_modules/gitconfiglocal": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
-      "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==",
+    "node_modules/getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
       "dev": true,
       "dependencies": {
-        "ini": "^1.3.2"
+        "assert-plus": "^1.0.0"
       }
     },
     "node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+      "version": "10.3.6",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.6.tgz",
+      "integrity": "sha512-mEfImdc/fiYHEcF6pHFfD2b/KrdFB1qH9mRe5vI5HROF8G51SWxQJ2V56Ezl6ZL9y86gsxQ1Lgo2S746KGUPSQ==",
       "dev": true,
       "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^2.0.3",
+        "minimatch": "^9.0.1",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+        "path-scurry": "^1.10.1"
+      },
+      "bin": {
+        "glob": "dist/cjs/src/bin.js"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=16 || 14 >=14.17"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -5764,15 +5339,15 @@
       }
     },
     "node_modules/got": {
-      "version": "12.5.3",
-      "resolved": "https://registry.npmjs.org/got/-/got-12.5.3.tgz",
-      "integrity": "sha512-8wKnb9MGU8IPGRIo+/ukTy9XLJBwDiCpIf5TVzQ9Cpol50eMTpBq2GAuDsuDIz7hTYmZgMgC1e9ydr6kSDWs3w==",
+      "version": "12.6.1",
+      "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz",
+      "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==",
       "dev": true,
       "dependencies": {
         "@sindresorhus/is": "^5.2.0",
         "@szmarczak/http-timer": "^5.0.1",
         "cacheable-lookup": "^7.0.0",
-        "cacheable-request": "^10.2.1",
+        "cacheable-request": "^10.2.8",
         "decompress-response": "^6.0.0",
         "form-data-encoder": "^2.1.2",
         "get-stream": "^6.0.1",
@@ -5789,9 +5364,9 @@
       }
     },
     "node_modules/graceful-fs": {
-      "version": "4.2.10",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
-      "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
       "dev": true
     },
     "node_modules/graceful-readlink": {
@@ -5806,42 +5381,18 @@
       "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
       "dev": true
     },
+    "node_modules/graphemer": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+      "dev": true
+    },
     "node_modules/growly": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
       "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
       "dev": true
     },
-    "node_modules/handlebars": {
-      "version": "4.7.7",
-      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
-      "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.5",
-        "neo-async": "^2.6.0",
-        "source-map": "^0.6.1",
-        "wordwrap": "^1.0.0"
-      },
-      "bin": {
-        "handlebars": "bin/handlebars"
-      },
-      "engines": {
-        "node": ">=0.4.7"
-      },
-      "optionalDependencies": {
-        "uglify-js": "^3.1.4"
-      }
-    },
-    "node_modules/handlebars/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/har-schema": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -6041,9 +5592,9 @@
       }
     },
     "node_modules/html-tags": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz",
-      "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==",
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
+      "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
       "dev": true,
       "engines": {
         "node": ">=8"
@@ -6097,6 +5648,15 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
+    "node_modules/htmlhint/node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
     "node_modules/htmlhint/node_modules/glob": {
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -6151,9 +5711,9 @@
       }
     },
     "node_modules/htmlparser2": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
-      "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+      "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
       "dev": true,
       "funding": [
         "https://github.com/fb55/htmlparser2?sponsor=1",
@@ -6164,15 +5724,15 @@
       ],
       "dependencies": {
         "domelementtype": "^2.3.0",
-        "domhandler": "^5.0.2",
+        "domhandler": "^5.0.3",
         "domutils": "^3.0.1",
-        "entities": "^4.3.0"
+        "entities": "^4.4.0"
       }
     },
     "node_modules/http-cache-semantics": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
-      "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+      "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
       "dev": true
     },
     "node_modules/http-proxy": {
@@ -6285,9 +5845,9 @@
       }
     },
     "node_modules/human-signals": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.0.tgz",
-      "integrity": "sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ==",
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+      "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
       "dev": true,
       "engines": {
         "node": ">=14.18.0"
@@ -6421,65 +5981,38 @@
       "dev": true
     },
     "node_modules/inquirer": {
-      "version": "9.1.4",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.1.4.tgz",
-      "integrity": "sha512-9hiJxE5gkK/cM2d1mTEnuurGTAoHebbkX0BYl3h7iEg7FYfuNIom+nDfBCSWtvSnoSrWCeBxqqBZu26xdlJlXA==",
+      "version": "9.2.11",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.11.tgz",
+      "integrity": "sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==",
       "dev": true,
       "dependencies": {
-        "ansi-escapes": "^6.0.0",
-        "chalk": "^5.1.2",
-        "cli-cursor": "^4.0.0",
-        "cli-width": "^4.0.0",
-        "external-editor": "^3.0.3",
+        "@ljharb/through": "^2.3.9",
+        "ansi-escapes": "^4.3.2",
+        "chalk": "^5.3.0",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^4.1.0",
+        "external-editor": "^3.1.0",
         "figures": "^5.0.0",
         "lodash": "^4.17.21",
-        "mute-stream": "0.0.8",
-        "ora": "^6.1.2",
-        "run-async": "^2.4.0",
-        "rxjs": "^7.5.7",
-        "string-width": "^5.1.2",
-        "strip-ansi": "^7.0.1",
-        "through": "^2.3.6",
-        "wrap-ansi": "^8.0.1"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      }
-    },
-    "node_modules/inquirer/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
-    "node_modules/inquirer/node_modules/strip-ansi": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
-      "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
+        "mute-stream": "1.0.0",
+        "ora": "^5.4.1",
+        "run-async": "^3.0.0",
+        "rxjs": "^7.8.1",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^6.2.0"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "node": ">=14.18.0"
       }
     },
     "node_modules/internal-slot": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
-      "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
       "dev": true,
       "dependencies": {
-        "get-intrinsic": "^1.1.3",
+        "get-intrinsic": "^1.2.0",
         "has": "^1.0.3",
         "side-channel": "^1.0.4"
       },
@@ -6500,9 +6033,9 @@
       }
     },
     "node_modules/irregular-plurals": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz",
-      "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz",
+      "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==",
       "dev": true,
       "engines": {
         "node": ">=8"
@@ -6521,13 +6054,13 @@
       }
     },
     "node_modules/is-array-buffer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz",
-      "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+      "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
+        "get-intrinsic": "^1.2.0",
         "is-typed-array": "^1.1.10"
       },
       "funding": {
@@ -6581,9 +6114,9 @@
       }
     },
     "node_modules/is-builtin-module": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz",
-      "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+      "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
       "dev": true,
       "dependencies": {
         "builtin-modules": "^3.3.0"
@@ -6620,9 +6153,9 @@
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.11.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
-      "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+      "version": "2.13.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+      "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
       "dev": true,
       "dependencies": {
         "has": "^1.0.3"
@@ -6708,15 +6241,12 @@
       }
     },
     "node_modules/is-interactive": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
-      "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
       "dev": true,
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
     "node_modules/is-mergeable-object": {
@@ -6891,29 +6421,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-text-path": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
-      "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==",
-      "dev": true,
-      "dependencies": {
-        "text-extensions": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/is-typed-array": {
-      "version": "1.1.10",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
-      "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+      "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
       "dev": true,
       "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
+        "which-typed-array": "^1.1.11"
       },
       "engines": {
         "node": ">= 0.4"
@@ -6980,9 +6494,9 @@
       }
     },
     "node_modules/isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
       "dev": true
     },
     "node_modules/isexe": {
@@ -6997,6 +6511,24 @@
       "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
       "dev": true
     },
+    "node_modules/jackspeak": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz",
+      "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==",
+      "dev": true,
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
     "node_modules/jed": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz",
@@ -7004,24 +6536,14 @@
       "dev": true
     },
     "node_modules/jose": {
-      "version": "4.11.2",
-      "resolved": "https://registry.npmjs.org/jose/-/jose-4.11.2.tgz",
-      "integrity": "sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==",
+      "version": "4.13.1",
+      "resolved": "https://registry.npmjs.org/jose/-/jose-4.13.1.tgz",
+      "integrity": "sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==",
       "dev": true,
       "funding": {
         "url": "https://github.com/sponsors/panva"
       }
     },
-    "node_modules/js-sdsl": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
-      "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
-      "dev": true,
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/js-sdsl"
-      }
-    },
     "node_modules/js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -7047,9 +6569,9 @@
       "dev": true
     },
     "node_modules/jsdoc-type-pratt-parser": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz",
-      "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
+      "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
       "dev": true,
       "engines": {
         "node": ">=12.0.0"
@@ -7094,12 +6616,6 @@
         "fast-deep-equal": "^3.1.3"
       }
     },
-    "node_modules/json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-      "dev": true
-    },
     "node_modules/json-parse-even-better-errors": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -7108,166 +6624,53 @@
     },
     "node_modules/json-schema": {
       "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
-      "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
-      "dev": true
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-      "dev": true
-    },
-    "node_modules/json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
-      "dev": true
-    },
-    "node_modules/json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-      "dev": true,
-      "bin": {
-        "json5": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jsonc-parser": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
-      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
-      "dev": true
-    },
-    "node_modules/jsonfile": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
-      "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
-      "dev": true,
-      "optionalDependencies": {
-        "graceful-fs": "^4.1.6"
-      }
-    },
-    "node_modules/jsonlint-mod": {
-      "version": "1.7.6",
-      "resolved": "https://registry.npmjs.org/jsonlint-mod/-/jsonlint-mod-1.7.6.tgz",
-      "integrity": "sha512-oGuk6E1ehmIpw0w9ttgb2KsDQQgGXBzZczREW8OfxEm9eCQYL9/LCexSnh++0z3AiYGcXpBgqDSx9AAgzl/Bvg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "JSV": "^4.0.2",
-        "underscore": "^1.9.1"
-      },
-      "bin": {
-        "jsonlint": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/jsonlint-mod/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/jsonlint-mod/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/jsonlint-mod/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+      "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+      "dev": true
     },
-    "node_modules/jsonlint-mod/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+    "node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
       "dev": true
     },
-    "node_modules/jsonlint-mod/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
+    "node_modules/json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+      "dev": true
     },
-    "node_modules/jsonlint-mod/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
+    "node_modules/json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+      "dev": true
     },
-    "node_modules/jsonlint-mod/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
       "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
+      "bin": {
+        "json5": "lib/cli.js"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
-    "node_modules/jsonparse": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
-      "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
-      "dev": true,
-      "engines": [
-        "node >= 0.2.0"
-      ]
+    "node_modules/jsonc-parser": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+      "dev": true
     },
-    "node_modules/JSONStream": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
-      "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+    "node_modules/jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
       "dev": true,
-      "dependencies": {
-        "jsonparse": "^1.2.0",
-        "through": ">=2.2.7 <3"
-      },
-      "bin": {
-        "JSONStream": "bin.js"
-      },
-      "engines": {
-        "node": "*"
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
       }
     },
     "node_modules/jsonwebtoken": {
@@ -7301,15 +6704,6 @@
         "node": ">=0.6.0"
       }
     },
-    "node_modules/JSV": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz",
-      "integrity": "sha512-ZJ6wx9xaKJ3yFUhq5/sk82PJMuUyLk277I8mQeyDgCTjGdjWJIvPfaU5LIXaMuaN2UO1X3kZH4+lgphublZUHw==",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/jszip": {
       "version": "3.10.1",
       "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
@@ -7322,10 +6716,16 @@
         "setimmediate": "^1.0.5"
       }
     },
+    "node_modules/jszip/node_modules/isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+      "dev": true
+    },
     "node_modules/jszip/node_modules/readable-stream": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
       "dev": true,
       "dependencies": {
         "core-util-is": "~1.0.0",
@@ -7368,9 +6768,9 @@
       }
     },
     "node_modules/keyv": {
-      "version": "4.5.2",
-      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
-      "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
+      "version": "4.5.3",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
+      "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
       "dev": true,
       "dependencies": {
         "json-buffer": "3.0.1"
@@ -7386,9 +6786,9 @@
       }
     },
     "node_modules/known-css-properties": {
-      "version": "0.26.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
-      "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
+      "version": "0.28.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz",
+      "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==",
       "dev": true
     },
     "node_modules/latest-version": {
@@ -7441,9 +6841,9 @@
       }
     },
     "node_modules/lighthouse-logger": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz",
-      "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==",
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz",
+      "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==",
       "dev": true,
       "dependencies": {
         "debug": "^2.6.9",
@@ -7480,43 +6880,6 @@
         "uc.micro": "^1.0.1"
       }
     },
-    "node_modules/load-json-file": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
-      "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^4.0.0",
-        "pify": "^3.0.0",
-        "strip-bom": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/load-json-file/node_modules/parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-      "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.3.1",
-        "json-parse-better-errors": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/load-json-file/node_modules/pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/locate-path": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -7550,12 +6913,6 @@
       "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==",
       "dev": true
     },
-    "node_modules/lodash.ismatch": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
-      "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==",
-      "dev": true
-    },
     "node_modules/lodash.merge": {
       "version": "4.6.2",
       "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -7625,16 +6982,16 @@
       }
     },
     "node_modules/log4js": {
-      "version": "6.7.1",
-      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz",
-      "integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==",
+      "version": "6.9.1",
+      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz",
+      "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
       "dev": true,
       "dependencies": {
         "date-format": "^4.0.14",
         "debug": "^4.3.4",
         "flatted": "^3.2.7",
         "rfdc": "^1.3.0",
-        "streamroller": "^3.1.3"
+        "streamroller": "^3.1.5"
       },
       "engines": {
         "node": ">=8.0"
@@ -7726,21 +7083,31 @@
       }
     },
     "node_modules/markdownlint": {
-      "version": "0.27.0",
-      "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.27.0.tgz",
-      "integrity": "sha512-HtfVr/hzJJmE0C198F99JLaeada+646B5SaG2pVoEakLFI6iRGsvMqrnnrflq8hm1zQgwskEgqSnhDW11JBp0w==",
+      "version": "0.31.1",
+      "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.31.1.tgz",
+      "integrity": "sha512-CKMR2hgcIBrYlIUccDCOvi966PZ0kJExDrUi1R+oF9PvqQmCrTqjOsgIvf2403OmJ+CWomuzDoylr6KbuMyvHA==",
       "dev": true,
       "dependencies": {
-        "markdown-it": "13.0.1"
+        "markdown-it": "13.0.1",
+        "markdownlint-micromark": "0.1.7"
       },
       "engines": {
-        "node": ">=14.18.0"
+        "node": ">=16"
+      }
+    },
+    "node_modules/markdownlint-micromark": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.7.tgz",
+      "integrity": "sha512-BbRPTC72fl5vlSKv37v/xIENSRDYL/7X/XoFzZ740FGEbs9vZerLrIkFRY0rv7slQKxDczToYuMmqQFN61fi4Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=16"
       }
     },
     "node_modules/marked": {
-      "version": "4.2.12",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz",
-      "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
+      "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
       "dev": true,
       "bin": {
         "marked": "bin/marked.js"
@@ -7854,71 +7221,24 @@
       }
     },
     "node_modules/metalint": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/metalint/-/metalint-0.11.1.tgz",
-      "integrity": "sha512-7n33d/m6ZAqz3eu+BVVW/e+3QjP/JOg8gnI2gIb7Rv1J3H5pEd890P7RzdTpFel1vru8ZiZqYlu4VXQJekrGPQ==",
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/metalint/-/metalint-0.14.1.tgz",
+      "integrity": "sha512-lQDYpfmhsLuMFJhBrlacyML0iQaRFitjl3kecUzly7X7M49UMuOZGV4bNTqMMTYEN8wtUPvEitjZEkXzgVejlQ==",
       "dev": true,
       "dependencies": {
-        "chalk": "5.2.0",
-        "yargs": "17.7.1"
+        "chalk": "5.3.0",
+        "yargs": "17.7.2"
       },
       "bin": {
         "metalint": "src/bin/index.js"
       },
       "engines": {
-        "node": ">=18.12.0"
+        "node": ">=20.0.0"
       },
       "funding": {
         "url": "https://www.paypal.me/sebastienregne"
       }
     },
-    "node_modules/metalint/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/metalint/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/metalint/node_modules/yargs": {
-      "version": "17.7.1",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
-      "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^8.0.1",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.3",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^21.1.1"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/metalint/node_modules/yargs-parser": {
-      "version": "21.1.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
-      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/micromatch": {
       "version": "4.0.5",
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -7999,21 +7319,24 @@
       }
     },
     "node_modules/minimatch": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+      "version": "9.0.3",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+      "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
       "dev": true,
       "dependencies": {
         "brace-expansion": "^2.0.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/minimist": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
-      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "dev": true,
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -8042,16 +7365,25 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/minipass": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz",
+      "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==",
+      "dev": true,
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
     "node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "version": "0.5.6",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
       "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.6"
+      },
       "bin": {
         "mkdirp": "bin/cmd.js"
-      },
-      "engines": {
-        "node": ">=10"
       }
     },
     "node_modules/mocha": {
@@ -8105,11 +7437,14 @@
         "wrap-ansi": "^7.0.0"
       }
     },
-    "node_modules/mocha/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
+    "node_modules/mocha/node_modules/diff": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+      "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.3.1"
+      }
     },
     "node_modules/mocha/node_modules/glob": {
       "version": "7.2.0",
@@ -8171,20 +7506,6 @@
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true
     },
-    "node_modules/mocha/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/mocha/node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -8220,15 +7541,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/modify-values": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
-      "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/moment": {
       "version": "2.29.4",
       "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
@@ -8298,31 +7610,34 @@
       }
     },
     "node_modules/mutation-testing-elements": {
-      "version": "1.7.14",
-      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-1.7.14.tgz",
-      "integrity": "sha512-/klVQtO0W9Y3zRUf3Xaf4hvzjCpLMKWetg6/bnLDPBrGTySt7JeW+muh2JQcBessDJMFFZyFYKdCTJOL5AhlBw==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-2.0.1.tgz",
+      "integrity": "sha512-4piLXKUp3iyQ8O+n7tshESwTJI18Olj8ZwW8G9vMpuODKmc8MvQG63zbsiPb9KFJ8yEiiMNodQUSSdgLXpYxPA==",
       "dev": true
     },
     "node_modules/mutation-testing-metrics": {
-      "version": "1.7.14",
-      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-1.7.14.tgz",
-      "integrity": "sha512-Y5I6p2gZy7sXYfWn9yR863vd3NA9IhjKccUdbybmHASRy5b7zit6B03DczuYU+cQDqZ7WX38gzQ9IFs/JdbHqQ==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-2.0.1.tgz",
+      "integrity": "sha512-YuxxOxg7mFdxL8DQFyU4ueip/8PL7+2/4FPR+xEetBII/c7p2Gt4FqN23US+wdQhNxsos4PCdYJjL8ddqo6/2g==",
       "dev": true,
       "dependencies": {
-        "mutation-testing-report-schema": "1.7.14"
+        "mutation-testing-report-schema": "2.0.1"
       }
     },
     "node_modules/mutation-testing-report-schema": {
-      "version": "1.7.14",
-      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-1.7.14.tgz",
-      "integrity": "sha512-vN2Gw5dXWp1I7fj9PSzyBPy7KqNG4wN5qMdHwTV339fbW2pH19qlSU5Qg6VJlAZtlfgUiDJ1NYYgIEjpoqrRZA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-2.0.1.tgz",
+      "integrity": "sha512-el8j0dzhhxICQZ3vbXGlb9iIDrouOvJo28bKSl3/2sPhpAPZccfvbuwcvlG7+vZv87wJkFaj5zTDQ4TFQoXXNA==",
       "dev": true
     },
     "node_modules/mute-stream": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
-      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
-      "dev": true
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
+      "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
+      "dev": true,
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
     },
     "node_modules/mv": {
       "version": "2.1.1",
@@ -8380,19 +7695,6 @@
         "node": "*"
       }
     },
-    "node_modules/mv/node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "minimist": "^1.2.6"
-      },
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      }
-    },
     "node_modules/mv/node_modules/rimraf": {
       "version": "2.4.5",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
@@ -8418,9 +7720,9 @@
       }
     },
     "node_modules/nan": {
-      "version": "2.17.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
-      "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+      "version": "2.18.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
+      "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==",
       "dev": true,
       "optional": true
     },
@@ -8468,33 +7770,13 @@
         "wrap-ansi": "^7.0.0"
       }
     },
-    "node_modules/nconf/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
     "node_modules/nconf/node_modules/ini": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
       "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/nconf/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
+      "dev": true,
       "engines": {
-        "node": ">=8"
+        "node": ">=10"
       }
     },
     "node_modules/nconf/node_modules/wrap-ansi": {
@@ -8542,12 +7824,6 @@
         "ncp": "bin/ncp"
       }
     },
-    "node_modules/neo-async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-      "dev": true
-    },
     "node_modules/node-domexception": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
@@ -8568,9 +7844,9 @@
       }
     },
     "node_modules/node-fetch": {
-      "version": "2.6.7",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
-      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+      "version": "2.6.11",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
+      "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
       "dev": true,
       "dependencies": {
         "whatwg-url": "^5.0.0"
@@ -8611,9 +7887,9 @@
       }
     },
     "node_modules/node-releases": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
-      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
+      "version": "2.0.13",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+      "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
       "dev": true
     },
     "node_modules/normalize-package-data": {
@@ -8653,35 +7929,35 @@
       }
     },
     "node_modules/npm-package-json-lint": {
-      "version": "6.4.0",
-      "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-6.4.0.tgz",
-      "integrity": "sha512-cuXAJJB1Rdqz0UO6w524matlBqDBjcNt7Ru+RDIu4y6RI1gVqiWBnylrK8sPRk81gGBA0X8hJbDXolVOoTc+sA==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-7.0.0.tgz",
+      "integrity": "sha512-Yn8flnPx/7hTxwejWL5urm8sbEahq8ic3R80d7nlBvS6C58JEmJpUqvO7Ksy8izRzpbrHq0Anwlv/nQg5OYf8Q==",
       "dev": true,
       "dependencies": {
         "ajv": "^6.12.6",
         "ajv-errors": "^1.0.1",
         "chalk": "^4.1.2",
-        "cosmiconfig": "^8.0.0",
+        "cosmiconfig": "^8.2.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
-        "ignore": "^5.2.0",
+        "ignore": "^5.2.4",
         "is-plain-obj": "^3.0.0",
         "jsonc-parser": "^3.2.0",
         "log-symbols": "^4.1.0",
         "meow": "^9.0.0",
         "plur": "^4.0.0",
-        "semver": "^7.3.8",
+        "semver": "^7.5.3",
         "slash": "^3.0.0",
         "strip-json-comments": "^3.1.1",
-        "type-fest": "^3.2.0",
+        "type-fest": "^3.12.0",
         "validate-npm-package-name": "^5.0.0"
       },
       "bin": {
         "npmPkgJsonLint": "dist/cli.js"
       },
       "engines": {
-        "node": ">=14.0.0",
-        "npm": ">=6.0.0"
+        "node": ">=16.0.0",
+        "npm": ">=8.0.0"
       }
     },
     "node_modules/npm-package-json-lint/node_modules/ajv": {
@@ -8716,6 +7992,32 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
+    "node_modules/npm-package-json-lint/node_modules/cosmiconfig": {
+      "version": "8.3.6",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+      "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+      "dev": true,
+      "dependencies": {
+        "import-fresh": "^3.3.0",
+        "js-yaml": "^4.1.0",
+        "parse-json": "^5.2.0",
+        "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/d-fischer"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.9.5"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/npm-package-json-lint/node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -8734,6 +8036,18 @@
         "node": ">=8"
       }
     },
+    "node_modules/npm-package-json-lint/node_modules/type-fest": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+      "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+      "dev": true,
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/npm-run-path": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
@@ -8827,15 +8141,44 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/object.fromentries": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
+      "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object.groupby": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
+      "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "get-intrinsic": "^1.2.1"
+      }
+    },
     "node_modules/object.values": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
-      "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
+      "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -8875,9 +8218,9 @@
       }
     },
     "node_modules/open": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
-      "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+      "version": "8.4.2",
+      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
       "dev": true,
       "dependencies": {
         "define-lazy-prop": "^2.0.0",
@@ -8901,86 +8244,83 @@
       }
     },
     "node_modules/optionator": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+      "version": "0.9.3",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
       "dev": true,
       "dependencies": {
+        "@aashutoshrathi/word-wrap": "^1.2.3",
         "deep-is": "^0.1.3",
         "fast-levenshtein": "^2.0.6",
         "levn": "^0.4.1",
         "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0",
-        "word-wrap": "^1.2.3"
+        "type-check": "^0.4.0"
       },
       "engines": {
         "node": ">= 0.8.0"
       }
     },
     "node_modules/ora": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz",
-      "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==",
-      "dev": true,
-      "dependencies": {
-        "bl": "^5.0.0",
-        "chalk": "^5.0.0",
-        "cli-cursor": "^4.0.0",
-        "cli-spinners": "^2.6.1",
-        "is-interactive": "^2.0.0",
-        "is-unicode-supported": "^1.1.0",
-        "log-symbols": "^5.1.0",
-        "strip-ansi": "^7.0.1",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+      "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+      "dev": true,
+      "dependencies": {
+        "bl": "^4.1.0",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-spinners": "^2.5.0",
+        "is-interactive": "^1.0.0",
+        "is-unicode-supported": "^0.1.0",
+        "log-symbols": "^4.1.0",
+        "strip-ansi": "^6.0.0",
         "wcwidth": "^1.0.1"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/ora/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+    "node_modules/ora/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/ora/node_modules/log-symbols": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz",
-      "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==",
+    "node_modules/ora/node_modules/is-unicode-supported": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
       "dev": true,
-      "dependencies": {
-        "chalk": "^5.0.0",
-        "is-unicode-supported": "^1.1.0"
-      },
       "engines": {
-        "node": ">=12"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/ora/node_modules/strip-ansi": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
-      "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+    "node_modules/ora/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
       "dependencies": {
-        "ansi-regex": "^6.0.1"
+        "has-flag": "^4.0.0"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "node": ">=8"
       }
     },
     "node_modules/os-locale": {
@@ -9180,18 +8520,18 @@
       }
     },
     "node_modules/p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-      "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
       "dev": true,
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
     "node_modules/package-json": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.0.tgz",
-      "integrity": "sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==",
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz",
+      "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==",
       "dev": true,
       "dependencies": {
         "got": "^12.1.0",
@@ -9300,6 +8640,31 @@
       "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
       "dev": true
     },
+    "node_modules/path-scurry": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
+      "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^9.1.1 || ^10.0.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/path-scurry/node_modules/lru-cache": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
+      "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
+      "dev": true,
+      "engines": {
+        "node": "14 || >=16.14"
+      }
+    },
     "node_modules/path-type": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -9339,25 +8704,16 @@
         "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/pino": {
-      "version": "8.11.0",
-      "resolved": "https://registry.npmjs.org/pino/-/pino-8.11.0.tgz",
-      "integrity": "sha512-Z2eKSvlrl2rH8p5eveNUnTdd4AjJk8tAsLkHYZQKGHP4WTh2Gi1cOSOs3eWPqaj+niS3gj4UkoreoaWgF3ZWYg==",
+      "version": "8.15.1",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-8.15.1.tgz",
+      "integrity": "sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA==",
       "dev": true,
       "dependencies": {
         "atomic-sleep": "^1.0.0",
         "fast-redact": "^3.1.1",
         "on-exit-leak-free": "^2.1.0",
-        "pino-abstract-transport": "v1.0.0",
+        "pino-abstract-transport": "v1.1.0",
         "pino-std-serializers": "^6.0.0",
         "process-warning": "^2.0.0",
         "quick-format-unescaped": "^4.0.3",
@@ -9371,34 +8727,59 @@
       }
     },
     "node_modules/pino-abstract-transport": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz",
-      "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz",
+      "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==",
       "dev": true,
       "dependencies": {
         "readable-stream": "^4.0.0",
         "split2": "^4.0.0"
       }
     },
+    "node_modules/pino-abstract-transport/node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
     "node_modules/pino-abstract-transport/node_modules/readable-stream": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.3.0.tgz",
-      "integrity": "sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==",
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz",
+      "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==",
       "dev": true,
       "dependencies": {
         "abort-controller": "^3.0.0",
         "buffer": "^6.0.3",
         "events": "^3.3.0",
-        "process": "^0.11.10"
+        "process": "^0.11.10",
+        "string_decoder": "^1.3.0"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
     "node_modules/pino-std-serializers": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.1.0.tgz",
-      "integrity": "sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g==",
+      "version": "6.2.2",
+      "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz",
+      "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==",
       "dev": true
     },
     "node_modules/plur": {
@@ -9457,22 +8838,10 @@
         "ms": "^2.1.1"
       }
     },
-    "node_modules/portfinder/node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.6"
-      },
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      }
-    },
     "node_modules/postcss": {
-      "version": "8.4.21",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
-      "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+      "version": "8.4.29",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz",
+      "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==",
       "dev": true,
       "funding": [
         {
@@ -9482,10 +8851,14 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
       "dependencies": {
-        "nanoid": "^3.3.4",
+        "nanoid": "^3.3.6",
         "picocolors": "^1.0.0",
         "source-map-js": "^1.0.2"
       },
@@ -9493,12 +8866,6 @@
         "node": "^10 || ^12 || >=14"
       }
     },
-    "node_modules/postcss-media-query-parser": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
-      "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
-      "dev": true
-    },
     "node_modules/postcss-resolve-nested-selector": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
@@ -9522,9 +8889,9 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.0.11",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
-      "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
+      "version": "6.0.13",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+      "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
       "dev": true,
       "dependencies": {
         "cssesc": "^3.0.0",
@@ -9550,10 +8917,16 @@
       "dev": true
     },
     "node_modules/postcss/node_modules/nanoid": {
-      "version": "3.3.4",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
-      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
       "bin": {
         "nanoid": "bin/nanoid.cjs"
       },
@@ -9571,15 +8944,15 @@
       }
     },
     "node_modules/prettier": {
-      "version": "2.8.4",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz",
-      "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
+      "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
       "dev": true,
       "bin": {
-        "prettier": "bin-prettier.js"
+        "prettier": "bin/prettier.cjs"
       },
       "engines": {
-        "node": ">=10.13.0"
+        "node": ">=14"
       },
       "funding": {
         "url": "https://github.com/prettier/prettier?sponsor=1"
@@ -9601,9 +8974,9 @@
       "dev": true
     },
     "node_modules/process-warning": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.1.0.tgz",
-      "integrity": "sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz",
+      "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==",
       "dev": true
     },
     "node_modules/progress": {
@@ -9650,9 +9023,9 @@
       }
     },
     "node_modules/punycode": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz",
-      "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
       "dev": true,
       "engines": {
         "node": ">=6"
@@ -9688,20 +9061,50 @@
         "purgecss": "bin/purgecss.js"
       }
     },
-    "node_modules/q": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
-      "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
+    "node_modules/purgecss/node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
+    "node_modules/purgecss/node_modules/glob": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/purgecss/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
       "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
       "engines": {
-        "node": ">=0.6.0",
-        "teleport": ">=0.2.0"
+        "node": ">=10"
       }
     },
     "node_modules/qs": {
-      "version": "6.11.0",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
-      "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+      "version": "6.11.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+      "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
       "dev": true,
       "dependencies": {
         "side-channel": "^1.0.4"
@@ -9758,9 +9161,9 @@
       }
     },
     "node_modules/rambda": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.4.0.tgz",
-      "integrity": "sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==",
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz",
+      "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==",
       "dev": true
     },
     "node_modules/randombytes": {
@@ -9880,15 +9283,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/read-pkg-up/node_modules/p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/read-pkg-up/node_modules/type-fest": {
       "version": "0.8.1",
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
@@ -9917,9 +9311,9 @@
       }
     },
     "node_modules/read-pkg/node_modules/semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
       "dev": true,
       "bin": {
         "semver": "bin/semver"
@@ -9935,9 +9329,9 @@
       }
     },
     "node_modules/readable-stream": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
       "dev": true,
       "dependencies": {
         "inherits": "^2.0.3",
@@ -9983,12 +9377,15 @@
       }
     },
     "node_modules/refa": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/refa/-/refa-0.9.1.tgz",
-      "integrity": "sha512-egU8LgFq2VXlAfUi8Jcbr5X38wEOadMFf8tCbshgcpVCYlE7k84pJOSlnvXF+muDB4igkdVMq7Z/kiNPqDT9TA==",
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz",
+      "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==",
       "dev": true,
       "dependencies": {
-        "regexpp": "^3.2.0"
+        "@eslint-community/regexpp": "^4.5.0"
+      },
+      "engines": {
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
     "node_modules/regenerator-runtime": {
@@ -9998,13 +9395,16 @@
       "dev": true
     },
     "node_modules/regexp-ast-analysis": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.5.1.tgz",
-      "integrity": "sha512-Ca/g9gaTNuMewLuu+mBIq4vCrGRSO8AE9bP32NMQjJ/wBTdWq0g96qLkBb0NbGwEbp7S/q+NQF3o7veeuRfg0g==",
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz",
+      "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==",
       "dev": true,
       "dependencies": {
-        "refa": "^0.9.0",
-        "regexpp": "^3.2.0"
+        "@eslint-community/regexpp": "^4.5.0",
+        "refa": "^0.11.0"
+      },
+      "engines": {
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
     "node_modules/regexp-to-ast": {
@@ -10014,23 +9414,23 @@
       "dev": true
     },
     "node_modules/regexp-tree": {
-      "version": "0.1.24",
-      "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz",
-      "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
+      "version": "0.1.27",
+      "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz",
+      "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==",
       "dev": true,
       "bin": {
         "regexp-tree": "bin/regexp-tree"
       }
     },
     "node_modules/regexp.prototype.flags": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
-      "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+      "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "functions-have-names": "^1.2.2"
+        "define-properties": "^1.2.0",
+        "set-function-name": "^2.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -10039,25 +9439,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
     "node_modules/registry-auth-token": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz",
-      "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==",
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz",
+      "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==",
       "dev": true,
       "dependencies": {
-        "@pnpm/npm-conf": "^1.0.4"
+        "@pnpm/npm-conf": "^2.1.0"
       },
       "engines": {
         "node": ">=14"
@@ -10079,9 +9467,9 @@
       }
     },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz",
+      "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==",
       "dev": true,
       "dependencies": {
         "jsesc": "~0.5.0"
@@ -10268,12 +9656,12 @@
       "dev": true
     },
     "node_modules/resolve": {
-      "version": "1.22.1",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
-      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+      "version": "1.22.6",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+      "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
       "dev": true,
       "dependencies": {
-        "is-core-module": "^2.9.0",
+        "is-core-module": "^2.13.0",
         "path-parse": "^1.0.7",
         "supports-preserve-symlinks-flag": "^1.0.0"
       },
@@ -10299,6 +9687,15 @@
         "node": ">=4"
       }
     },
+    "node_modules/resolve-pkg-maps": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+      }
+    },
     "node_modules/responselike": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
@@ -10315,19 +9712,16 @@
       }
     },
     "node_modules/restore-cursor": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
-      "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
       "dev": true,
       "dependencies": {
         "onetime": "^5.1.0",
         "signal-exit": "^3.0.2"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
     "node_modules/restore-cursor/node_modules/mimic-fn": {
@@ -10428,9 +9822,9 @@
       }
     },
     "node_modules/run-async": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
-      "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
+      "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
       "dev": true,
       "engines": {
         "node": ">=0.12.0"
@@ -10460,14 +9854,32 @@
       }
     },
     "node_modules/rxjs": {
-      "version": "7.8.0",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz",
-      "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
+      "version": "7.8.1",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+      "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
       "dev": true,
       "dependencies": {
         "tslib": "^2.1.0"
       }
     },
+    "node_modules/safe-array-concat": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
+      "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.2.1",
+        "has-symbols": "^1.0.3",
+        "isarray": "^2.0.5"
+      },
+      "engines": {
+        "node": ">=0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -10481,15 +9893,6 @@
       "dev": true,
       "optional": true
     },
-    "node_modules/safe-regex": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz",
-      "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==",
-      "dev": true,
-      "dependencies": {
-        "regexp-tree": "~0.1.1"
-      }
-    },
     "node_modules/safe-regex-test": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
@@ -10505,9 +9908,9 @@
       }
     },
     "node_modules/safe-stable-stringify": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz",
-      "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==",
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
+      "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -10526,24 +9929,14 @@
       "dev": true
     },
     "node_modules/scslre": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.1.6.tgz",
-      "integrity": "sha512-JORxVRlQTfjvlOAaiQKebgFElyAm5/W8b50lgaZ0OkEnKnagJW2ufDh3xRfU75UD9z3FGIu1gL1IyR3Poa6Qmw==",
-      "dev": true,
-      "dependencies": {
-        "refa": "^0.9.0",
-        "regexp-ast-analysis": "^0.2.3",
-        "regexpp": "^3.2.0"
-      }
-    },
-    "node_modules/scslre/node_modules/regexp-ast-analysis": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.2.4.tgz",
-      "integrity": "sha512-8L7kOZQaKPxKKAwGuUZxTQtlO3WZ+tiXy4s6G6PKL6trbOXcZoumwC3AOHHFtI/xoSbNxt7jgLvCnP1UADLWqg==",
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz",
+      "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==",
       "dev": true,
       "dependencies": {
-        "refa": "^0.9.0",
-        "regexpp": "^3.2.0"
+        "@eslint-community/regexpp": "^4.5.0",
+        "refa": "^0.11.0",
+        "regexp-ast-analysis": "^0.6.0"
       }
     },
     "node_modules/secure-compare": {
@@ -10559,9 +9952,9 @@
       "dev": true
     },
     "node_modules/semver": {
-      "version": "7.3.8",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
-      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^6.0.0"
@@ -10615,6 +10008,20 @@
         "randombytes": "^2.1.0"
       }
     },
+    "node_modules/set-function-name": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
+      "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+      "dev": true,
+      "dependencies": {
+        "define-data-property": "^1.0.1",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/setimmediate": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -10668,9 +10075,9 @@
       "dev": true
     },
     "node_modules/shiki": {
-      "version": "0.14.1",
-      "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.1.tgz",
-      "integrity": "sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==",
+      "version": "0.14.4",
+      "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz",
+      "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==",
       "dev": true,
       "dependencies": {
         "ansi-sequence-parser": "^1.1.0",
@@ -10694,13 +10101,13 @@
       }
     },
     "node_modules/sign-addon": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-5.2.0.tgz",
-      "integrity": "sha512-t5CZ4MSKAd3uJBUfjgWfSyKYC1pQS6BMUbgI5OytzMkTOQ9NkdkFE8bB0AJLQIGqDrNS2b1+/ghAP56iuCUE+g==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-5.3.0.tgz",
+      "integrity": "sha512-7nHlCzhQgVMLBNiXVEgbG/raq48awOW0lYMN5uo1BaB3mp0+k8M8pvDwbfTlr3apcxZJsk9HQsAW1POwoJugpQ==",
       "dev": true,
       "dependencies": {
         "common-tags": "1.8.2",
-        "core-js": "3.27.1",
+        "core-js": "3.29.0",
         "deepcopy": "2.1.0",
         "es6-error": "4.1.1",
         "es6-promisify": "7.0.0",
@@ -10744,9 +10151,9 @@
       }
     },
     "node_modules/sonic-boom": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.2.1.tgz",
-      "integrity": "sha512-iITeTHxy3B9FGu8aVdiDXUVAcHMF9Ss0cCsAOo2HfCrmVGT3/DT5oYaeu0M/YKZDlKTvChEyPq0zI9Hf33EX6A==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz",
+      "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==",
       "dev": true,
       "dependencies": {
         "atomic-sleep": "^1.0.0"
@@ -10800,49 +10207,10 @@
         "os-shim": "^0.1.2"
       }
     },
-    "node_modules/spawn-sync/node_modules/concat-stream": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
-      "dev": true,
-      "engines": [
-        "node >= 0.8"
-      ],
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.2.2",
-        "typedarray": "^0.0.6"
-      }
-    },
-    "node_modules/spawn-sync/node_modules/readable-stream": {
-      "version": "2.3.7",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-      "dev": true,
-      "dependencies": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "node_modules/spawn-sync/node_modules/string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
     "node_modules/spdx-correct": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
-      "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
       "dev": true,
       "dependencies": {
         "spdx-expression-parse": "^3.0.0",
@@ -10866,9 +10234,9 @@
       }
     },
     "node_modules/spdx-license-ids": {
-      "version": "3.0.12",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
-      "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
+      "version": "3.0.15",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz",
+      "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==",
       "dev": true
     },
     "node_modules/split": {
@@ -10884,9 +10252,9 @@
       }
     },
     "node_modules/split2": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
-      "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+      "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
       "dev": true,
       "engines": {
         "node": ">= 10.x"
@@ -10914,220 +10282,7 @@
         "sshpk-verify": "bin/sshpk-verify"
       },
       "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/standard-version": {
-      "version": "9.5.0",
-      "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz",
-      "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.4.2",
-        "conventional-changelog": "3.1.25",
-        "conventional-changelog-config-spec": "2.1.0",
-        "conventional-changelog-conventionalcommits": "4.6.3",
-        "conventional-recommended-bump": "6.1.0",
-        "detect-indent": "^6.0.0",
-        "detect-newline": "^3.1.0",
-        "dotgitignore": "^2.1.0",
-        "figures": "^3.1.0",
-        "find-up": "^5.0.0",
-        "git-semver-tags": "^4.0.0",
-        "semver": "^7.1.1",
-        "stringify-package": "^1.0.1",
-        "yargs": "^16.0.0"
-      },
-      "bin": {
-        "standard-version": "bin/cli.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/standard-version/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/standard-version/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/standard-version/node_modules/cliui": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0",
-        "wrap-ansi": "^7.0.0"
-      }
-    },
-    "node_modules/standard-version/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/standard-version/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true
-    },
-    "node_modules/standard-version/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/standard-version/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/standard-version/node_modules/figures": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
-      "dev": true,
-      "dependencies": {
-        "escape-string-regexp": "^1.0.5"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/standard-version/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/standard-version/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/standard-version/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/standard-version/node_modules/wrap-ansi": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/standard-version/node_modules/wrap-ansi/node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/standard-version/node_modules/wrap-ansi/node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/standard-version/node_modules/wrap-ansi/node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "node_modules/standard-version/node_modules/yargs": {
-      "version": "16.2.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^7.0.2",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.0",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^20.2.2"
-      },
-      "engines": {
-        "node": ">=10"
+        "node": ">=0.10.0"
       }
     },
     "node_modules/stream-to-array": {
@@ -11154,9 +10309,9 @@
       }
     },
     "node_modules/streamroller": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.4.tgz",
-      "integrity": "sha512-Ha1Ccw2/N5C/IF8Do6zgNe8F3jQo8MPBnMBGvX0QjNv/I97BcNRzK6/mzOpZHHK7DjMLTI3c7Xw7Y1KvdChkvw==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
+      "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
       "dev": true,
       "dependencies": {
         "date-format": "^4.0.14",
@@ -11197,90 +10352,91 @@
       ]
     },
     "node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
       "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
-    "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
       },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      "engines": {
+        "node": ">=8"
       }
     },
+    "node_modules/string-width-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
     "node_modules/string-width/node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true
     },
-    "node_modules/string-width/node_modules/strip-ansi": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
-      "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+    "node_modules/string.prototype.trim": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
+      "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
       "dev": true,
       "dependencies": {
-        "ansi-regex": "^6.0.1"
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/string.prototype.trimend": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
-      "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
+      "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/string.prototype.trimstart": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
-      "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+      "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
       "dev": true,
       "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/stringify-package": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz",
-      "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==",
-      "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json",
-      "dev": true
-    },
     "node_modules/strip-ansi": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -11293,6 +10449,19 @@
         "node": ">=8"
       }
     },
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/strip-bom": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
@@ -11363,97 +10532,286 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/style-search": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
-      "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
-      "dev": true
-    },
-    "node_modules/stylelint": {
-      "version": "15.2.0",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.2.0.tgz",
-      "integrity": "sha512-wjg5OLn8zQwjlj5cYUgyQpMWKzct42AG5dYlqkHRJQJqsystFFn3onqEc263KH4xfEI0W3lZCnlIhFfS64uwSA==",
+    "node_modules/style-search": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
+      "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
+      "dev": true
+    },
+    "node_modules/stylelint": {
+      "version": "15.10.3",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz",
+      "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==",
+      "dev": true,
+      "dependencies": {
+        "@csstools/css-parser-algorithms": "^2.3.1",
+        "@csstools/css-tokenizer": "^2.2.0",
+        "@csstools/media-query-list-parser": "^2.1.4",
+        "@csstools/selector-specificity": "^3.0.0",
+        "balanced-match": "^2.0.0",
+        "colord": "^2.9.3",
+        "cosmiconfig": "^8.2.0",
+        "css-functions-list": "^3.2.0",
+        "css-tree": "^2.3.1",
+        "debug": "^4.3.4",
+        "fast-glob": "^3.3.1",
+        "fastest-levenshtein": "^1.0.16",
+        "file-entry-cache": "^6.0.1",
+        "global-modules": "^2.0.0",
+        "globby": "^11.1.0",
+        "globjoin": "^0.1.4",
+        "html-tags": "^3.3.1",
+        "ignore": "^5.2.4",
+        "import-lazy": "^4.0.0",
+        "imurmurhash": "^0.1.4",
+        "is-plain-object": "^5.0.0",
+        "known-css-properties": "^0.28.0",
+        "mathml-tag-names": "^2.1.3",
+        "meow": "^10.1.5",
+        "micromatch": "^4.0.5",
+        "normalize-path": "^3.0.0",
+        "picocolors": "^1.0.0",
+        "postcss": "^8.4.27",
+        "postcss-resolve-nested-selector": "^0.1.1",
+        "postcss-safe-parser": "^6.0.0",
+        "postcss-selector-parser": "^6.0.13",
+        "postcss-value-parser": "^4.2.0",
+        "resolve-from": "^5.0.0",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1",
+        "style-search": "^0.1.0",
+        "supports-hyperlinks": "^3.0.0",
+        "svg-tags": "^1.0.0",
+        "table": "^6.8.1",
+        "write-file-atomic": "^5.0.1"
+      },
+      "bin": {
+        "stylelint": "bin/stylelint.mjs"
+      },
+      "engines": {
+        "node": "^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/stylelint"
+      }
+    },
+    "node_modules/stylelint-order": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.3.tgz",
+      "integrity": "sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==",
+      "dev": true,
+      "dependencies": {
+        "postcss": "^8.4.21",
+        "postcss-sorting": "^8.0.2"
+      },
+      "peerDependencies": {
+        "stylelint": "^14.0.0 || ^15.0.0"
+      }
+    },
+    "node_modules/stylelint/node_modules/balanced-match": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+      "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+      "dev": true
+    },
+    "node_modules/stylelint/node_modules/camelcase": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/camelcase-keys": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
+      "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+      "dev": true,
+      "dependencies": {
+        "camelcase": "^6.3.0",
+        "map-obj": "^4.1.0",
+        "quick-lru": "^5.1.1",
+        "type-fest": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/cosmiconfig": {
+      "version": "8.3.6",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+      "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+      "dev": true,
+      "dependencies": {
+        "import-fresh": "^3.3.0",
+        "js-yaml": "^4.1.0",
+        "parse-json": "^5.2.0",
+        "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/d-fischer"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.9.5"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/stylelint/node_modules/decamelize": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
+      "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/fast-glob": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/stylelint/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/stylelint/node_modules/indent-string": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
+      "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/meow": {
+      "version": "10.1.5",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
+      "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
+      "dev": true,
+      "dependencies": {
+        "@types/minimist": "^1.2.2",
+        "camelcase-keys": "^7.0.0",
+        "decamelize": "^5.0.0",
+        "decamelize-keys": "^1.1.0",
+        "hard-rejection": "^2.1.0",
+        "minimist-options": "4.1.0",
+        "normalize-package-data": "^3.0.2",
+        "read-pkg-up": "^8.0.0",
+        "redent": "^4.0.0",
+        "trim-newlines": "^4.0.2",
+        "type-fest": "^1.2.2",
+        "yargs-parser": "^20.2.9"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/quick-lru": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/read-pkg": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
+      "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
+      "dev": true,
+      "dependencies": {
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^3.0.2",
+        "parse-json": "^5.2.0",
+        "type-fest": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/read-pkg-up": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
+      "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
       "dev": true,
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.0.1",
-        "@csstools/css-tokenizer": "^2.0.1",
-        "@csstools/media-query-list-parser": "^2.0.1",
-        "@csstools/selector-specificity": "^2.1.1",
-        "balanced-match": "^2.0.0",
-        "colord": "^2.9.3",
-        "cosmiconfig": "^8.0.0",
-        "css-functions-list": "^3.1.0",
-        "css-tree": "^2.3.1",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.2.12",
-        "fastest-levenshtein": "^1.0.16",
-        "file-entry-cache": "^6.0.1",
-        "global-modules": "^2.0.0",
-        "globby": "^11.1.0",
-        "globjoin": "^0.1.4",
-        "html-tags": "^3.2.0",
-        "ignore": "^5.2.4",
-        "import-lazy": "^4.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.26.0",
-        "mathml-tag-names": "^2.1.3",
-        "meow": "^9.0.0",
-        "micromatch": "^4.0.5",
-        "normalize-path": "^3.0.0",
-        "picocolors": "^1.0.0",
-        "postcss": "^8.4.21",
-        "postcss-media-query-parser": "^0.2.3",
-        "postcss-resolve-nested-selector": "^0.1.1",
-        "postcss-safe-parser": "^6.0.0",
-        "postcss-selector-parser": "^6.0.11",
-        "postcss-value-parser": "^4.2.0",
-        "resolve-from": "^5.0.0",
-        "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1",
-        "style-search": "^0.1.0",
-        "supports-hyperlinks": "^2.3.0",
-        "svg-tags": "^1.0.0",
-        "table": "^6.8.1",
-        "v8-compile-cache": "^2.3.0",
-        "write-file-atomic": "^5.0.0"
-      },
-      "bin": {
-        "stylelint": "bin/stylelint.js"
+        "find-up": "^5.0.0",
+        "read-pkg": "^6.0.0",
+        "type-fest": "^1.0.1"
       },
       "engines": {
-        "node": "^14.13.1 || >=16.0.0"
+        "node": ">=12"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/stylelint"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/stylelint-order": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.3.tgz",
-      "integrity": "sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==",
+    "node_modules/stylelint/node_modules/redent": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
+      "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
       "dev": true,
       "dependencies": {
-        "postcss": "^8.4.21",
-        "postcss-sorting": "^8.0.2"
+        "indent-string": "^5.0.0",
+        "strip-indent": "^4.0.0"
       },
-      "peerDependencies": {
-        "stylelint": "^14.0.0 || ^15.0.0"
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/stylelint/node_modules/balanced-match": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
-      "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-      "dev": true
-    },
-    "node_modules/stylelint/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
     "node_modules/stylelint/node_modules/resolve-from": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -11463,18 +10821,52 @@
         "node": ">=8"
       }
     },
-    "node_modules/stylelint/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+    "node_modules/stylelint/node_modules/strip-indent": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
+      "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
       "dev": true,
       "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
+        "min-indent": "^1.0.1"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/trim-newlines": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
+      "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/type-fest": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
+      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stylelint/node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
       }
     },
     "node_modules/supports-color": {
@@ -11493,16 +10885,16 @@
       }
     },
     "node_modules/supports-hyperlinks": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
-      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
+      "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
       "dev": true,
       "dependencies": {
         "has-flag": "^4.0.0",
         "supports-color": "^7.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=14.18"
       }
     },
     "node_modules/supports-hyperlinks/node_modules/supports-color": {
@@ -11551,35 +10943,6 @@
         "node": ">=10.0.0"
       }
     },
-    "node_modules/table/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/table/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/text-extensions": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
-      "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -11608,9 +10971,9 @@
       }
     },
     "node_modules/thread-stream": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz",
-      "integrity": "sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.0.tgz",
+      "integrity": "sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==",
       "dev": true,
       "dependencies": {
         "real-require": "^0.2.0"
@@ -11622,15 +10985,6 @@
       "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
       "dev": true
     },
-    "node_modules/through2": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
-      "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
-      "dev": true,
-      "dependencies": {
-        "readable-stream": "3"
-      }
-    },
     "node_modules/tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -11711,13 +11065,13 @@
       }
     },
     "node_modules/tsconfig-paths": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
-      "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+      "version": "3.14.2",
+      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
+      "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
       "dev": true,
       "dependencies": {
         "@types/json5": "^0.0.29",
-        "json5": "^1.0.1",
+        "json5": "^1.0.2",
         "minimist": "^1.2.6",
         "strip-bom": "^3.0.0"
       }
@@ -11735,9 +11089,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
-      "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
+      "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==",
       "dev": true
     },
     "node_modules/tunnel": {
@@ -11789,17 +11143,68 @@
       }
     },
     "node_modules/type-fest": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.5.2.tgz",
-      "integrity": "sha512-Ph7S4EhXzWy0sbljEuZo0tTNoLl+K2tPauGrQpcwUWrOVneLePTuhVzcuzVJJ6RU5DsNwQZka+8YtkXXU4z9cA==",
+      "version": "0.21.3",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
       "dev": true,
       "engines": {
-        "node": ">=14.16"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/typed-array-buffer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
+      "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.2.1",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/typed-array-byte-length": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
+      "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "has-proto": "^1.0.1",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/typed-array-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+      "dev": true,
+      "dependencies": {
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "has-proto": "^1.0.1",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/typed-array-length": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
@@ -11815,18 +11220,18 @@
       }
     },
     "node_modules/typed-inject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/typed-inject/-/typed-inject-3.0.1.tgz",
-      "integrity": "sha512-5yr8inrNos7uo/irp5PZ7WNwmYGfoa0w1NiDdCWW6hhIxYH2NCqYwX9BUOXpZgxk964rb1ElEfvBtftuvIPpvw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/typed-inject/-/typed-inject-4.0.0.tgz",
+      "integrity": "sha512-OuBL3G8CJlS/kjbGV/cN8Ni32+ktyyi6ADDZpKvksbX0fYBV5WcukhRCYa7WqLce7dY/Br2dwtmJ9diiadLFpg==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=16"
       }
     },
     "node_modules/typed-rest-client": {
-      "version": "1.8.9",
-      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
-      "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
+      "version": "1.8.11",
+      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+      "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
       "dev": true,
       "dependencies": {
         "qs": "^6.9.1",
@@ -11850,52 +11255,37 @@
       }
     },
     "node_modules/typedoc": {
-      "version": "0.23.26",
-      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.26.tgz",
-      "integrity": "sha512-5m4KwR5tOLnk0OtMaRn9IdbeRM32uPemN9kur7YK9wFqx8U0CYrvO9aVq6ysdZSV1c824BTm+BuQl2Ze/k1HtA==",
+      "version": "0.25.1",
+      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.1.tgz",
+      "integrity": "sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==",
       "dev": true,
       "dependencies": {
         "lunr": "^2.3.9",
-        "marked": "^4.2.12",
-        "minimatch": "^7.1.3",
+        "marked": "^4.3.0",
+        "minimatch": "^9.0.3",
         "shiki": "^0.14.1"
       },
       "bin": {
         "typedoc": "bin/typedoc"
       },
       "engines": {
-        "node": ">= 14.14"
+        "node": ">= 16"
       },
       "peerDependencies": {
-        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x"
-      }
-    },
-    "node_modules/typedoc/node_modules/minimatch": {
-      "version": "7.4.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.2.tgz",
-      "integrity": "sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x"
       }
     },
     "node_modules/typescript": {
-      "version": "4.9.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
-      "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+      "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
       },
       "engines": {
-        "node": ">=4.2.0"
+        "node": ">=14.17"
       }
     },
     "node_modules/uc.micro": {
@@ -11904,19 +11294,6 @@
       "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
       "dev": true
     },
-    "node_modules/uglify-js": {
-      "version": "3.17.4",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
-      "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
-      "dev": true,
-      "optional": true,
-      "bin": {
-        "uglifyjs": "bin/uglifyjs"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
     "node_modules/unbox-primitive": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -11985,9 +11362,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
-      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+      "version": "1.0.13",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
       "dev": true,
       "funding": [
         {
@@ -11997,6 +11374,10 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
       "dependencies": {
@@ -12004,7 +11385,7 @@
         "picocolors": "^1.0.0"
       },
       "bin": {
-        "browserslist-lint": "cli.js"
+        "update-browserslist-db": "cli.js"
       },
       "peerDependencies": {
         "browserslist": ">= 4.21.0"
@@ -12068,12 +11449,6 @@
         "uuid": "dist/bin/uuid"
       }
     },
-    "node_modules/v8-compile-cache": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
-      "dev": true
-    },
     "node_modules/validate-npm-package-license": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -12145,48 +11520,48 @@
       }
     },
     "node_modules/weapon-regex": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/weapon-regex/-/weapon-regex-1.0.3.tgz",
-      "integrity": "sha512-V8X6hPIzY1juvrSVREmtRhK9AHn/8c2z8XxaibESU+jyG/RinZ9x9x6aw8qEuFAi7R6Kl/EWGbU2Yq/9u6TTjw==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/weapon-regex/-/weapon-regex-1.1.1.tgz",
+      "integrity": "sha512-b0RmqduiSUKyKFamrpU+UK78Jm65/6CgKq1zoWFaS9PM7vwNK4RWrjmX1jREs3pLmG7botsgMLVOltxDR7RGRw==",
       "dev": true
     },
     "node_modules/web-ext": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.5.0.tgz",
-      "integrity": "sha512-Ymflj7Aq/LOD+zGoyvwRbAPx/yMJeig2OEb/rRXYrWl6NWRI5E0c2iWGqlBcnL45iKrOzz70H438dVeJk0w2ug==",
+      "version": "7.7.0",
+      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.7.0.tgz",
+      "integrity": "sha512-/jc0kbSLfw/ANra6v70I6QADrVYL0Wo98T0Cigt39EjVpXbiwES8zww/9QL7aE0L1tK0ISWYq45KNisDV+GKVA==",
       "dev": true,
       "dependencies": {
-        "@babel/runtime": "7.20.13",
+        "@babel/runtime": "7.21.0",
         "@devicefarmer/adbkit": "3.2.3",
-        "addons-linter": "5.27.0",
+        "addons-linter": "6.13.0",
         "bunyan": "1.8.15",
         "camelcase": "7.0.1",
         "chrome-launcher": "0.15.1",
         "debounce": "1.2.1",
         "decamelize": "6.0.0",
         "es6-error": "4.1.1",
-        "firefox-profile": "4.2.2",
+        "firefox-profile": "4.3.2",
         "fs-extra": "11.1.0",
         "fx-runner": "1.3.0",
         "import-fresh": "3.3.0",
-        "jose": "4.11.2",
+        "jose": "4.13.1",
         "mkdirp": "1.0.4",
         "multimatch": "6.0.0",
         "mz": "2.7.0",
-        "node-fetch": "3.3.0",
+        "node-fetch": "3.3.1",
         "node-notifier": "10.0.1",
-        "open": "8.4.0",
+        "open": "8.4.2",
         "parse-json": "6.0.2",
         "promise-toolbox": "0.21.0",
-        "sign-addon": "5.2.0",
+        "sign-addon": "5.3.0",
         "source-map-support": "0.5.21",
         "strip-bom": "5.0.0",
         "strip-json-comments": "5.0.0",
         "tmp": "0.2.1",
         "update-notifier": "6.0.2",
         "watchpack": "2.4.0",
-        "ws": "8.12.0",
-        "yargs": "17.6.2",
+        "ws": "8.13.0",
+        "yargs": "17.7.1",
         "zip-dir": "2.0.0"
       },
       "bin": {
@@ -12197,113 +11572,71 @@
         "npm": ">=6.9.0"
       }
     },
-    "node_modules/web-ext/node_modules/@eslint/eslintrc": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
-      "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.4.0",
-        "globals": "^13.19.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/web-ext/node_modules/@eslint/eslintrc/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/web-ext/node_modules/@eslint/eslintrc/node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+    "node_modules/web-ext/node_modules/@eslint/js": {
+      "version": "8.48.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz",
+      "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==",
       "dev": true,
       "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
     "node_modules/web-ext/node_modules/@mdn/browser-compat-data": {
-      "version": "5.2.29",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.29.tgz",
-      "integrity": "sha512-bEBrkTWbDAs/PB4IdRg4CtU750oBRytXHK/wC2oIDkgKZqnt76nACSooQQuHF11mK5k43f/IgFUMO5t5quRPVA==",
+      "version": "5.3.14",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.14.tgz",
+      "integrity": "sha512-Y9XQrphVcE6u9xMm+gIqN86opbU/5s2W1pdPyKRyFV5B7+2jWM2gLI5JpfhZncaoDKvhy6FYwK04aCz5UM/bTQ==",
       "dev": true
     },
     "node_modules/web-ext/node_modules/addons-linter": {
-      "version": "5.27.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-5.27.0.tgz",
-      "integrity": "sha512-gDgl0FcmhZ5cs3St0qAaO9J1BoektwnY+p4dVgcvPu8WaBqH9MG2fk0gL/evCpoHSXeSw15GA87n8Y7zy7raVQ==",
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.13.0.tgz",
+      "integrity": "sha512-vYgDXl8aLmN1zU4HmsQdG6tUFByg499mHnTEMWDUbSkoYDq3koTne08EsqU6sD+o814u8FxclQP7580L0g/tPQ==",
       "dev": true,
       "dependencies": {
-        "@mdn/browser-compat-data": "5.2.29",
+        "@fluent/syntax": "0.19.0",
+        "@mdn/browser-compat-data": "5.3.14",
         "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "8.3.0",
+        "addons-scanner-utils": "9.3.0",
         "ajv": "8.12.0",
         "chalk": "4.1.2",
         "cheerio": "1.0.0-rc.12",
         "columnify": "1.6.0",
         "common-tags": "1.8.2",
-        "deepmerge": "4.2.2",
-        "eslint": "8.32.0",
+        "deepmerge": "4.3.1",
+        "eslint": "8.48.0",
         "eslint-plugin-no-unsanitized": "4.0.2",
-        "eslint-visitor-keys": "3.3.0",
-        "espree": "9.4.1",
+        "eslint-visitor-keys": "3.4.3",
+        "espree": "9.6.1",
         "esprima": "4.0.1",
         "fast-json-patch": "3.1.1",
-        "fluent-syntax": "0.14.0",
-        "glob": "8.1.0",
+        "glob": "10.3.4",
         "image-size": "1.0.2",
         "is-mergeable-object": "1.1.1",
         "jed": "1.1.1",
         "json-merge-patch": "1.0.2",
         "os-locale": "5.0.0",
-        "pino": "8.8.0",
-        "postcss": "8.4.21",
+        "pino": "8.15.0",
+        "postcss": "8.4.29",
         "relaxed-json": "1.0.3",
-        "semver": "7.3.8",
+        "semver": "7.5.4",
         "sha.js": "2.4.11",
         "source-map-support": "0.5.21",
         "tosource": "1.0.0",
         "upath": "2.0.1",
-        "yargs": "17.6.2",
+        "yargs": "17.7.2",
         "yauzl": "2.10.0"
       },
       "bin": {
         "addons-linter": "bin/addons-linter"
       },
       "engines": {
-        "node": ">=12.21.0"
+        "node": ">=16.0.0"
       }
     },
     "node_modules/web-ext/node_modules/addons-linter/node_modules/addons-scanner-utils": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-8.3.0.tgz",
-      "integrity": "sha512-XP+2kxhZxlxiVFXVJ7lyJEuxpUS8ryrolUDqnUEnvOZ/3p8qt9hWCYSliXhI2W+Swf/hZ3F4CLAG6tBnqdxDYA==",
+      "version": "9.3.0",
+      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.3.0.tgz",
+      "integrity": "sha512-YZWzNpP+em650XlZNH7NbTUcHJXqC0ihLEgwn17GGTqervyChqQffd9sm/QXNur0dmj7Ks1mD77iTg9XcJw64A==",
       "dev": true,
       "dependencies": {
         "@types/yauzl": "2.10.0",
@@ -12314,9 +11647,9 @@
         "yauzl": "2.10.0"
       },
       "peerDependencies": {
-        "body-parser": "1.20.1",
+        "body-parser": "1.20.2",
         "express": "4.18.2",
-        "node-fetch": "2.6.7",
+        "node-fetch": "2.6.11",
         "safe-compare": "1.1.4"
       },
       "peerDependenciesMeta": {
@@ -12335,9 +11668,9 @@
       }
     },
     "node_modules/web-ext/node_modules/addons-linter/node_modules/node-fetch": {
-      "version": "2.6.7",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
-      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+      "version": "2.6.11",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
+      "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
       "dev": true,
       "optional": true,
       "peer": true,
@@ -12356,6 +11689,24 @@
         }
       }
     },
+    "node_modules/web-ext/node_modules/addons-linter/node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dev": true,
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/web-ext/node_modules/brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -12366,6 +11717,30 @@
         "concat-map": "0.0.1"
       }
     },
+    "node_modules/web-ext/node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
     "node_modules/web-ext/node_modules/camelcase": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
@@ -12406,59 +11781,48 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/deepmerge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
-      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/web-ext/node_modules/eslint": {
-      "version": "8.32.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz",
-      "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==",
+      "version": "8.48.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz",
+      "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==",
       "dev": true,
       "dependencies": {
-        "@eslint/eslintrc": "^1.4.1",
-        "@humanwhocodes/config-array": "^0.11.8",
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.2",
+        "@eslint/js": "8.48.0",
+        "@humanwhocodes/config-array": "^0.11.10",
         "@humanwhocodes/module-importer": "^1.0.1",
         "@nodelib/fs.walk": "^1.2.8",
-        "ajv": "^6.10.0",
+        "ajv": "^6.12.4",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
         "debug": "^4.3.2",
         "doctrine": "^3.0.0",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.1.1",
-        "eslint-utils": "^3.0.0",
-        "eslint-visitor-keys": "^3.3.0",
-        "espree": "^9.4.0",
-        "esquery": "^1.4.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
+        "esquery": "^1.4.2",
         "esutils": "^2.0.2",
         "fast-deep-equal": "^3.1.3",
         "file-entry-cache": "^6.0.1",
         "find-up": "^5.0.0",
         "glob-parent": "^6.0.2",
         "globals": "^13.19.0",
-        "grapheme-splitter": "^1.0.4",
+        "graphemer": "^1.4.0",
         "ignore": "^5.2.0",
-        "import-fresh": "^3.0.0",
         "imurmurhash": "^0.1.4",
         "is-glob": "^4.0.0",
         "is-path-inside": "^3.0.3",
-        "js-sdsl": "^4.1.4",
         "js-yaml": "^4.1.0",
         "json-stable-stringify-without-jsonify": "^1.0.1",
         "levn": "^0.4.1",
         "lodash.merge": "^4.6.2",
         "minimatch": "^3.1.2",
         "natural-compare": "^1.4.0",
-        "optionator": "^0.9.1",
-        "regexpp": "^3.2.0",
+        "optionator": "^0.9.3",
         "strip-ansi": "^6.0.1",
-        "strip-json-comments": "^3.1.0",
         "text-table": "^0.2.0"
       },
       "bin": {
@@ -12487,16 +11851,16 @@
         "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/web-ext/node_modules/eslint/node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+    "node_modules/web-ext/node_modules/eslint/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
-      "engines": {
-        "node": ">=8"
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": "*"
       }
     },
     "node_modules/web-ext/node_modules/fs-extra": {
@@ -12513,10 +11877,32 @@
         "node": ">=14.14"
       }
     },
+    "node_modules/web-ext/node_modules/glob": {
+      "version": "10.3.4",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz",
+      "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==",
+      "dev": true,
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^2.0.3",
+        "minimatch": "^9.0.1",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+        "path-scurry": "^1.10.1"
+      },
+      "bin": {
+        "glob": "dist/cjs/src/bin.js"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/web-ext/node_modules/globals": {
-      "version": "13.20.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-      "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+      "version": "13.22.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
+      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -12555,22 +11941,22 @@
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       }
     },
-    "node_modules/web-ext/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/web-ext/node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
       "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
+      "bin": {
+        "mkdirp": "bin/cmd.js"
       },
       "engines": {
-        "node": "*"
+        "node": ">=10"
       }
     },
     "node_modules/web-ext/node_modules/node-fetch": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz",
-      "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==",
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz",
+      "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==",
       "dev": true,
       "dependencies": {
         "data-uri-to-buffer": "^4.0.0",
@@ -12604,9 +11990,9 @@
       }
     },
     "node_modules/web-ext/node_modules/pino": {
-      "version": "8.8.0",
-      "resolved": "https://registry.npmjs.org/pino/-/pino-8.8.0.tgz",
-      "integrity": "sha512-cF8iGYeu2ODg2gIwgAHcPrtR63ILJz3f7gkogaHC/TXVVXxZgInmNYiIpDYEwgEkxZti2Se6P2W2DxlBIZe6eQ==",
+      "version": "8.15.0",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-8.15.0.tgz",
+      "integrity": "sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==",
       "dev": true,
       "dependencies": {
         "atomic-sleep": "^1.0.0",
@@ -12625,6 +12011,32 @@
         "pino": "bin.js"
       }
     },
+    "node_modules/web-ext/node_modules/pino-abstract-transport": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz",
+      "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==",
+      "dev": true,
+      "dependencies": {
+        "readable-stream": "^4.0.0",
+        "split2": "^4.0.0"
+      }
+    },
+    "node_modules/web-ext/node_modules/readable-stream": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz",
+      "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==",
+      "dev": true,
+      "dependencies": {
+        "abort-controller": "^3.0.0",
+        "buffer": "^6.0.3",
+        "events": "^3.3.0",
+        "process": "^0.11.10",
+        "string_decoder": "^1.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
     "node_modules/web-ext/node_modules/strip-bom": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz",
@@ -12694,6 +12106,33 @@
         "node": ">= 10.0.0"
       }
     },
+    "node_modules/web-ext/node_modules/yargs": {
+      "version": "17.7.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
+      "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
+      "dev": true,
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/web-ext/node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/web-streams-polyfill": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
@@ -12786,17 +12225,16 @@
       }
     },
     "node_modules/which-typed-array": {
-      "version": "1.1.9",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
-      "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
+      "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
       "dev": true,
       "dependencies": {
         "available-typed-arrays": "^1.0.5",
         "call-bind": "^1.0.2",
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0",
-        "is-typed-array": "^1.1.10"
+        "has-tostringtag": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -12820,87 +12258,98 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/winreg": {
-      "version": "0.0.12",
-      "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz",
-      "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==",
-      "dev": true
-    },
-    "node_modules/word-wrap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+    "node_modules/widest-line/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
-    "node_modules/wordwrap": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-      "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
-      "dev": true
-    },
-    "node_modules/workerpool": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
-      "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+    "node_modules/widest-line/node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
       "dev": true
     },
-    "node_modules/wrap-ansi": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz",
-      "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==",
+    "node_modules/widest-line/node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
       "dev": true,
       "dependencies": {
-        "ansi-styles": "^6.1.0",
-        "string-width": "^5.0.1",
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
         "strip-ansi": "^7.0.1"
       },
       "engines": {
         "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/wrap-ansi/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+    "node_modules/widest-line/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
       "engines": {
         "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "node_modules/wrap-ansi/node_modules/ansi-styles": {
+    "node_modules/winreg": {
+      "version": "0.0.12",
+      "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz",
+      "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==",
+      "dev": true
+    },
+    "node_modules/workerpool": {
       "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+      "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+      "dev": true
+    },
+    "node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
       "dev": true,
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
       },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "node_modules/wrap-ansi/node_modules/strip-ansi": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
-      "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+    "node_modules/wrap-ansi-cjs": {
+      "name": "wrap-ansi",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
       "dev": true,
       "dependencies": {
-        "ansi-regex": "^6.0.1"
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
     "node_modules/wrappy": {
@@ -12910,22 +12359,34 @@
       "dev": true
     },
     "node_modules/write-file-atomic": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz",
-      "integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+      "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
       "dev": true,
       "dependencies": {
         "imurmurhash": "^0.1.4",
-        "signal-exit": "^3.0.7"
+        "signal-exit": "^4.0.1"
       },
       "engines": {
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
+    "node_modules/write-file-atomic/node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/ws": {
-      "version": "8.12.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
-      "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
+      "version": "8.13.0",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+      "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
       "dev": true,
       "engines": {
         "node": ">=10.0.0"
@@ -12962,9 +12423,9 @@
       "dev": true
     },
     "node_modules/xml2js": {
-      "version": "0.4.23",
-      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
-      "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+      "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
       "dev": true,
       "dependencies": {
         "sax": ">=0.6.0",
@@ -12983,15 +12444,6 @@
         "node": ">=4.0"
       }
     },
-    "node_modules/xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4"
-      }
-    },
     "node_modules/y18n": {
       "version": "5.0.8",
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -13023,9 +12475,9 @@
       }
     },
     "node_modules/yargs": {
-      "version": "17.6.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz",
-      "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==",
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
       "dev": true,
       "dependencies": {
         "cliui": "^8.0.1",
@@ -13097,26 +12549,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/yargs/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/yargs/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/yargs/node_modules/yargs-parser": {
       "version": "21.1.1",
       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
diff --git a/package.json b/package.json
index f1b5dcc..61f824e 100644
--- a/package.json
+++ b/package.json
@@ -30,8 +30,8 @@
     "test": "npm run test:unit",
     "test:unit": "mocha --config test/unit/mocharc.json",
     "test:coverage": "stryker run .stryker.config.js",
-    "jsdocs": "typedoc --tsconfig .tsconfig_jsdocs.json --out jsdocs/ src/",
-    "server": "http-server -p6007 -c-1 --cors",
+    "jsdocs": "typedoc --tsconfig .tsconfig_jsdocs.json",
+    "serve": "http-server -p6007 -c-1 --cors",
     "extension:chromium": "web-ext run -t chromium -s src/extension/",
     "extension:firefox": "web-ext run -t firefox-desktop -s src/extension/",
     "build": "web-ext build -s src/extension/ -a build/ -o",
@@ -41,40 +41,40 @@
     "webextension-polyfill": "0.10.0"
   },
   "devDependencies": {
-    "@prettier/plugin-xml": "2.2.0",
-    "@stryker-mutator/core": "6.4.1",
-    "@stryker-mutator/mocha-runner": "6.4.1",
+    "@prantlf/jsonlint": "14.0.3",
+    "@prettier/plugin-xml": "3.2.1",
+    "@stryker-mutator/core": "7.1.1",
+    "@stryker-mutator/mocha-runner": "7.1.1",
     "@types/mocha": "10.0.1",
-    "addons-linter": "5.31.0",
-    "eslint": "8.35.0",
-    "eslint-plugin-array-func": "3.1.8",
+    "addons-linter": "6.14.0",
+    "eslint": "8.50.0",
+    "eslint-plugin-array-func": "4.0.0",
     "eslint-plugin-eslint-comments": "3.2.0",
-    "eslint-plugin-import": "2.27.5",
-    "eslint-plugin-jsdoc": "40.0.1",
+    "eslint-plugin-import": "2.28.1",
+    "eslint-plugin-jsdoc": "46.8.2",
     "eslint-plugin-mocha": "10.1.0",
-    "eslint-plugin-n": "15.6.1",
+    "eslint-plugin-n": "16.1.0",
     "eslint-plugin-no-unsanitized": "4.0.2",
     "eslint-plugin-promise": "6.1.1",
-    "eslint-plugin-regexp": "1.12.0",
-    "eslint-plugin-unicorn": "46.0.0",
+    "eslint-plugin-regexp": "1.15.0",
+    "eslint-plugin-unicorn": "48.0.1",
     "htmlhint": "1.1.4",
     "http-server": "14.1.1",
-    "jsonlint-mod": "1.7.6",
-    "markdownlint": "0.27.0",
-    "metalint": "0.11.1",
+    "markdownlint": "0.31.1",
+    "metalint": "0.14.1",
     "mocha": "10.2.0",
-    "npm-package-json-lint": "6.4.0",
-    "prettier": "2.8.4",
+    "npm-package-json-lint": "7.0.0",
+    "prettier": "3.0.3",
     "purgecss": "5.0.0",
-    "stylelint": "15.2.0",
+    "stylelint": "15.10.3",
     "stylelint-order": "6.0.3",
-    "typedoc": "0.23.26",
-    "typescript": "4.9.5",
-    "web-ext": "7.5.0",
+    "typedoc": "0.25.1",
+    "typescript": "5.2.2",
+    "web-ext": "7.7.0",
     "yaml-lint": "1.7.0"
   },
   "engines": {
-    "node": ">=18.12.0"
+    "node": ">=20.6.0"
   },
   "private": true
 }
diff --git a/src/extension/background/page.html b/src/extension/background/page.html
index 732ffaf..ac1c6d6 100644
--- a/src/extension/background/page.html
+++ b/src/extension/background/page.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html>
+<!doctype html>
 <html>
   <head>
     <meta charset="utf-8" />
diff --git a/src/extension/img/icon128.png b/src/extension/img/icon128.png
index 09e55109eebbe9ca3fdf430a1d4fd1ab917fbe77..728804abe2fc361135314f34fe3380e4f86b6894 100644
GIT binary patch
delta 2962
zcmV;D3vKj<7S0!tB#|^Ze+yelL_t(|ob8=|Y@JmZ$3N#STh|V7+LRwMM$sDiRnaJ0
z%qFC61{5lSC=sIk;UCSqn3xz7|1xSK8wyoyTw;tNHZodBh7%%GrAB3uu{mR*WiX)A
zAq=uP*yuI}?c*QkZMnU>ZSOtr`El=k&nJ1ZwY~S8=RME&p8MYKe|z3@m55MJD5Vr|
zA#h3hZyT@zXzl9iYT34JTZ>X^39uMgnm%m;I4L40Zo28FLtD3QJp{Z4><9J%F9Od1
z<5Fh>rfU6olv3vbtJAmwxC}U>_;Ky+?d;sSlV!`6&D-A5qeoe}awU8A>?!$Y;3;4y
zupQVgA}?n<g20GKe@z9j1h@vc8+aCwg`%mcNp|nvE#)#YG9t~*%?q}h#vb4&z|}xw
z=<%s|JVPf?X3-Y|*8%;&8)X(|ChocCp0bNS&As>DTTvfrybk;txE5Fxdfdty+t3Lt
zQ1}l4n}7ob#SlPxdU`4@{xs{?uQ%#5jRWZ{b!q5voOg^ve<x5fDOdwM1WaWpfUH`z
zN=}?OVOD(+IeGG=tX{o3iwLIUaiELzoU585cmf4QSHKOxKP?Qnw6wIy`1rVS@u%6p
zf4{W0w%QPZ0RI54uO=Y`Pe63>KMU-#G{}-9i3|-5Wi0)>3=a=WLqmft5eWKI#MPn4
zT|x^0_%QIWf5m|nKsIjNn7!&n+<yD*R&z|_kHBR?YY?PUXa?>A-nKocU0q!=H8o|Y
z>IF<qP05Wn-snOECxJVFrXaQO-XW|5UT`pw(%#-KhYugNR`g<y962HvU38HP5eTps
z__X(Wc<V?TIGcb;7Xw(S*<(tDCQ+p^1^fbN_Er}!f1SWbfTtY|ngG(@-*36pbJO47
z@9a3z7{QZ&;G_6o0p4^uU|Gx_Q!<)F<-{@Iwyfj7P`E671KJ~ZI#5~79#bruL<_~8
zKw_gNrNUM57XyQ?2gjD#V~S;yXujAAELmvWO~OU-PX~rv4~lKG#}o%9(OfYMoGH~T
z0N`x2f8FVPKwOwTrZ_T*O2sbVEU88TpjY1P^)V2x%pOx5nnb1IIiO9dNdQ1AdSQg~
z0dQ^hnBv$ZDvsxYbEFys0Gx@ZY2TOGV~S&ws5t%wER&D|K%edZ!P5bIHG53)U=kI^
zFd3JjWhs6F-0$mPH*DD8rGPf*>FMz)f(L;He+eJ}=O)i|gfe?f@n{lF#~tER0KhH2
z4lcCWV~R(UNYEFNt`{EyKwsFI@Nr<(V)mHg(IgV!AaK686ae~??uf5fe>Issrg$`o
z1bBi9m!nrIfIeRbQ*CCCDV|Lt0XB&X0iaj%WLl<OZd9w;V~S^!XbQMWYzhFqhVOYF
ze+N+QW{)YJO`=iCd@Cqd0C#yx+~_v0TEXykGt>CC*bo44F?!{y^Q3FZ>@mfoNi+dm
zAQlAhh>wJ8&FnG7vq|)TWDx-RjveQT)~eZKif5B(t(XV^eXrh=t`n?vv&R&VCed~=
z6u=EW6j~2vk0~BaqECr|0Ib}lJ73g`f7xS-N0VqsDiHwM^l_S0y_r3xcr=NwkO~Cg
z^vu6r%^p)cnM4mtIRZd$%i`4Xt!J~x6b~lR6!1YQLjZTUOe7Cxk0~BZq94k90ss~P
zueeGeFJ_M^9!#QFD7r>aEPyUoo#)N$F~x&Pbd40$JYhCp#sNu^uw}~@+S=M&e>7iL
zEMLBy!NEZq8X8=6ar3O7<lR^Q5)3wBEGP18_L$<(BsvT%mg2Vn^!BUPJIuS;V~S&w
zXq}W0z}>bxie^tX9GXOTN(lixXS0)N_Sj)$WJH!OU20nZqf#gU;5^$ZtA*RRY6VBP
zo1H5K0=U^`<I(J~j{}qFi&7u}e{1jm(d==91Cyv%3VeVous};o3j+fKG&VNcXf9H~
zqD6}s7#N_nwbfRWD?zXNNzkAFPq)=_H6eP2Ge&;}QC;!|@ZJRY0CigY$h^D<SdpNY
zeMj=iB?<bg)gt+%EdeeFokb)V7bfU0RgC153liY0&{;%+(V74)p|gktf1@P<-WNKH
zNHAIw^u7O)eA1ktH+zialg223eA8IGC^V8Y67=pLk$m!26hOXtD?#ri6UiqN3GhFk
zJ$7_-(AU?;*w`2o6B7&WQIs{Z;yS;Hi3!HW#^~$oqobq4!U$KyA%H()f5G7?(b(81
zn>TNk$;nCEtEK9O$;nCCf4q6KG&VLmuSXhx0(ihj@rQ?pLyvFGFg!f$O9X=n@Siy+
z2ut+#_R`te>AIV`p|i7--rimxUF`$-1`bu$(a{m7eFG*ZC#9pK!}ScXJ^{upt7;bA
z-Q6Tf^qVRrNfNrdyIprPo&aMmdx%rNIUdGtRH2uKzmER;H|rcbe|C(frY09n*FDFN
zAE&w5*~MDDEL=ncc-mDjvH0dV9=oSRM5f=Ice?B;QkCogW^N7J9x#ze7`8(cK%V(K
zqyi9;m(d$UMDoF?h#UZB?GpA#pkyNcnW=RYKt6eN`aeq2OQuSxM&MQSU8B|z3zuZ`
zjDy?LUkA<>k&{p`e*=ifTfjEky=6ryl__eye+O)xE<SL|PNDaEPA1}?!NMO@;S{Zu
zIt_h!_*`4PWqk|C`YOtM|3w@CR*1;k)4!NC1Bl2wK)=l%BUQz(3X2a#GXQ{6svYeK
zSdm`nS3utTFF=5H5qYujm#18)7m??Q9|`M`hl`63B?ORif0yHABL4Ytsb7{9fQSqO
zyPc*J@yQMm`CF+!%(qtS2ab}7_-D>qo^ld6>yJw9Al*^Yl+Y(ZdG8;+)?<~-k;p=;
zHNTs+_egNQGgt9p0Rf1}5b%5JDMfrSn4Ztg$-Hj?Fyjl1Vz`k+=qWJA{T~G`7LotX
z_n-wA?5DoKe@{)bhy>$%3l$&Am;nHkQcb`J&|Ya4IerC(?0*#aSh4L}in4Cm5s~9S
zH`-2&R5w$=`f`d7WeNah%%Pu|W)+G$yq>=ho8~foN>SEZz|4d7s-Ydg<>fvn^b{N#
z&&U4+aAmo#eyCsufSFZ8w-UFNsYVV0U#g_|P@w<-e?(*y_$u*ypqdci>mu?}rB5`v
zZ(Bqj1ib8E5GjjIBJw+vCsuS0Fzbm*CBPPnzm2+xcn;wF_y>SnMP$mT{VWM8r4|7X
z0awrUm?!|J$3F~wE<HChYu`eGXP|c)`*^9pM*%oH{#`()h`gDl{mgr}h{#d&SI<A2
zwXI0mf4l%(m$mp{K>z?Eau6+oy*Ap5%*$S2t%$s8qcLl{H;KqT;FD-GBI1T!z#0+x
zx2*=PZr>#$hk(xjLpIxu0Q!V)t%$s4vr+5&x25k(pGSW@iP&K)aIJ_OvE8tf4gAuZ
z4{rs2M05<ZAizen#e2d<2bn(xmccsUH^A8@e^1Ww$H0TYZ8%<%=R*Jh%YplVHI+Uw
zrvi8q?Xd2%noJ3N?cw?o&<T7Wy<j0y8bPnQSc8Y+gTEP|kgI^71DBTb;2g~WPXQZ%
zvKMpMAjB@te*r!Ud=tHLHSZil&y1hIbMYa}3{c4XflcW31tqET8Q@{`tKRu{Hq1rn
ze|_9v2EK;=q~Kls0eJ#g3v>~%_z+$I(>w-Ti9SE5XBY8F;99h0KJOhnz6kvmFc+5t
z-vVw?N;QN|CJX6(d5@vb?jH)A&M8!@0H!%#DRm3b1FQ(0OohAx^oz(Z(U)(ll4=(K
zFtdBvI<z_R1z=g&jOOGp@LTj&Y>%aze{NMZH6egPlv0b)=L*-PaY@*W7)5Wr`Y7<%
z!c7=!ftnLQF-oa(fYoWN1TMq!cDDt*fi`S*0*?dRZ7s|QMa>JK6iTT!;9}rHpbdTg
za2C*#Ml*04a7Ox+qrf|8Q|3?_uLAqg->NnaJY#bqMz!#N%T)7^Gh&5g000002uVdw
IM6N<$f|dPokN^Mx

delta 2758
zcmV;%3OV)87lsy)Bn<>}LP=Bz2nYy#2xN$nAv}KygGod|RCt{2on35PM-|6^dmU$E
zr!5~Vw@sR+4oyX9>sEkhK<S6v1U3CIRYPb62=Ty!6-S6C1W%|!A|E0#4VEnN01=iF
z*+p`crlK`Pi$oh}NE(ERUD~8|Akdo9G>sGItMwipW;fl~Ywz8;Gjn(M&QCguWAEOX
zd(MB^xp)8f%uI^<BLyr2Zq5JO3M>U$IyyQsd-v|mq*AE`z<gj~{ymexB@wx>e*OBB
zgM))7fp>rtz;WPB;8kD@5QpdD3Be7(<G>E!Prw8!NLSeM<;&&NsZ&ypiHQkWv0}xH
z_vdW_*bh7fd<|Ia_*^}}0$?pF;IC0SP*;CgQ&W>1K76=r@CytN4@+}%bJ^qO?H|C;
zfCqrIGcP2J`M@JUA8?v*fw^ouckT=w`~tgn?W(AayuA<n8h99Jbl{h|=N4cKFiz#c
z5J0-Rx+)HSfejlrXtkNQanvYvn{_YMA$J4&fE@Y(kd-S}%7qITv=iXcrAxAE)vA9e
zNl>ttfDY6Rs%I8bz+=E)iSBU8WHK@~Hl`i?0w+$Kkd~Gf6G<SzE5M`pM3}*Yz#+^y
zS%M&tp`oG3!7q@_W~HH_!Bi3ma1eFVn0P)7Jc~KU3Lu*|Z#EYE0-H8%GTO(yy#U;9
z$+uNaGq4@_0K-o0=;)AKE@wOea=Cw;tXsFvMiN{CwgOF7JY9vX0p7s8BSVWlx|9)#
zqS{g5ek&fY5*DDo(oJE(ft89qx>P6<Rcbll7pM`kuDAm@f*q#`Abov()`MT5udmPA
zdE{-FI?@lm4xGiJ!=i{ix<nL-!q_?B+s32ekOq`SZq-py#U5P@ibUmX8xVgOj*WHZ
z0|Qugjw!K67sDdaTsDZhhpGv#0*0{c6w_jlE*3<h*(?iOV>njExeg_FT6c&Iu}2q6
zB2g(j1YB!0Vg_kNeV4WF2wP&0E*3?iQucb@*HuLesxZR318j>ux>y#8rrR;#dZQ7H
zz%@7;_FaiRx>y#8rrY0uj~joDqz3bW-{Izjor*oWI1q`7ElZ4LXaVqanGPDWjT<+{
z9ox`!b#=K+f;}kB#W~hRo`S_C_UPhJBr4ceqmd24Hw<;Wti>(%=;BZ$64XPaM~y~!
z4(>orq_BQs)gt!j;!q?K;9cNGqmeGb0@RZ#Cnr@+VvjBkMIr%S#&Ul-dXKA<sW!1k
z7sn!zplU9xu!e|b+F`9)#U5Q8i$po#KBJLGRj3?uaRSvY_UPhRBpSi+rC__Gj%!Wh
zsueV+o9Wv3O$GlmsLECAovtOZM;C`8(Ijw_i3E7gMTcum?9s)sNc5Yi!GF+2M{8B=
z(Z#Vyv|2a#Dc~=*J6M0~VvjBkMWX$>3GkSM&eet3ql-h4=pLN}FfvPbE~^)@M;C`8
z(NLwqUt_yd^(OY{;!q^|LL~`c_0GRu#U5Q8i9~zC2LBc;OTP6i_UPh3B+3Cdhe?2~
zHan68u}2pNBGFIE1-}t^+g1mXBKGLwKqPvbGS3J)Y&D)Vu}6Ow2O`nh;($+|bolsO
z*`Z4i1nl0uo7UD=8;7qemMmGqz`y_v4c6*BpP20r3(#1EF^nZy?9s)dNOTHS&Od{-
zHX2O2*rSVOk!Ve+1lVD^Ausks!=gyEtyBWMZn6<C_LyOKcvu!LTxdE0My3b<2Gdzq
z3)8r21xwS-78QRdz!N49?!_MSSP+T6TATpJuK!-_v4aJXs2e`g0V;Y@G#i;rhW`G3
z(rLeMf@vBX8|m-wr=_LE)FJNzRrM2~zW-lk>d4iEh(vmSDpj`&d!GhA5dfc}PJ{26
zlaB#Q160|!Cz;$Dpte@?B$L(vLz4$QHOaC7wW*>fncROAP{j)mdaTnD0GYUZ;fak*
z0DLm;UU*_76Hte{Q+Ptt9573Dh$j)GeF7w#bj|HV;W0~qTK&V5OfLEaNH!M()LJs0
zWHK25@40NTt*wooo*qU=N12?QL`1AwRBZQea&nT<(NTJOdT48FGvMKhI0^6v%oiNa
zuyi^ty}f_EGBq`2yj-eYn3|fB-rinGr_<Ksk+<K2T1m=!@Uz)$-2SZ@ve~SwBp3*Q
zf6Y2T7^1tooA&m0+s)Js?d|P!cXzvJ>Nvo6v6y9TZEb$o*I;UDO4{1mY>xmN0$|K=
zR$W17XD316^`=S*f`HD>PTS3l1;D7y7W~k!j{|?-jigYe;qPN<Thepq&e7D=WaH3v
z&-wG`X>PXmu=a9UxBy3Nwc>-Xk7eKe9gxDs`Jl~~JXOg7_-JaF_Ik3Onq@zz>p#F^
z;6FB65d(5;lCd~7Z4oeD7y;fwEfC>J1|z^YT)9fvbMf@W69boH?GqrGJYV>s_yUs#
z{)>N_HEIlh4-gFt_W<t$*O4y-DjoqY0((uj7L`;g70GJ7eG3dyR0TF&q<`9NUpz4|
zQ2d|iDLN1Jcz6+ph<XW#`YB3!`_mXlO$Pp;@Qdjqz=uGe$re3T#V;ueKFk~e0G6XP
z0VAmw_a`9f?H3`a*uGi(%Tf>OkKw-()+2w<GA;N}IsriK73`@mep>36bB!;r0H2H6
zYTQF$(%a8-0Qh35Kg?CD^<xt)d#Zw2V_7b}4v=3_QkS?t0ZDHkRqL@5brU#)a@CqY
zirTs-c7Dh#!H4n*Fa-S8Xm>m=833|#y&%l^vK;mNSZg7PxQD<5w|@q;3hbPPK4E_f
z_KyKi>Gr}C8&49V$}4PoH37q@(V!v{{0WS+{Sn}^Op|>}5q8SXd7zUyZYDfcLk`$L
zh~Pu`1ORn2@pGLX#Yr7L&o9Ro;Ki^nuJjDkC~e@*uy2Ta2#y=a=l?QrFCjnup!dY@
zHdGQU4D({20M5?;UDS2|-<2F+XWD=62=FcZ{XjJ#z;~!H_@I{n0DH*qI_0SfwgAuQ
zyfMo78UVYQV>fE>mjDOn-w%8fb@yNS@pax*L?f^dcwn{{_yn+e{#oE5R7JPm@pa!=
z#MP*k#y(%_k3Ipco&O=A9XK21_$JnFIfL4I{xt)~@`U3J;1MDQAIu~GsIPw@Yk{MN
zj^~-3qrhs^EUw6yT)pWy@FkQO;jzOZ;BMfbrVeO&`L2_|mr->D9<yXopZs@B9@NJA
zZD)b6puV1X%rFQ%3{1q`kxB@Fts;_(vS1?imrJ#35y=6Yu=7E6gNUpVk#U~@74tt4
zdB}W3Vn9Teh{%gR0YY;?L|T812O>^HWS)pTDIygu9847iF^W}4PDFNyNTc}(R0$$-
zpNJgs2{40U5xK{_$Ey%gqrvw?WWpzaOo|#Alec}Jh%6S7z62-0J`wS|w~NSX5&2_+
z65!7wa=&>`);J<^uZTQf#|dyi>gB7QO+@5QQJ01fse&LzF;RE+FNl9ghj~xcIU;f+
z@B`GtkJy7*p}hrc5s{nCdnS3zLp^TZ37jJS;Lc|60lz|3NX@h22@ms8PaL<SDwN|6
z`Vn9ou!b7kiM_V#trXV-tMYaia65*VyDj20YNw5Zz)Pq#_l*>0#6>+MKq*>LQ=^yV
ze_je)3uN-vj2fb^&c81H3~G(UbEukzlc>O+K<%nF2E2;FLX2wR|B%(>@VnHSsQ>@~
M07*qoM6N<$f)`#GCIA2c

diff --git a/src/extension/img/icon16.png b/src/extension/img/icon16.png
index c8d4653af4364857525ab796bc02debb1ba9985e..6a97843da8c0b17dc46bc99208cd659b02471a5d 100644
GIT binary patch
delta 417
zcmV;S0bc&+1K$IXBoYa5NLh0L00&_J00&_KmBYBUkwz$gY)M2xR5*==lg&!QP!NT`
z$h8(K-R2$CblpvNy6CeA*>>G!7mCH-H^?It{L4D4LXFZF$P-iuEtTWKOu45192m%D
z=A4-`_XbJ$0Yt#K)oSH=p1;rM^Y?bUodXxZ(N?`j+yica4?szh$dDw700C>@3TS*2
zsL0P%k>WUiRvmF1n}~oX6ET5XOLn_mEtktJfz@iIUa#kiTvl8n8#@d`6-BW{HWWpn
zFbsV=hX7+h&N-!N`YYLxrm38BCUWk8V}K}%$g+$q%P<TE0{}*&5k8_QVmh4yoCLrE
z*yjhB#~=uPN&_rhH3|UzexFXKvsGo20L*4HCX>m3rU$^QZMH1Se|J!prGFDIJHUg<
zHJi<iXWzGfwwem}07raX$)<~S_~*O^4xFSs2!cD{wC;U49R9XEfNM!_w&@1&SnpU5
zFaH4Ss`fKABwb2c{~@rJG&b@#0WS`LbKr%qH?pX{&m<kx>puZT2(<So4d*KW0000<
LMNUKnu0mjfAwRhB

delta 424
zcmV;Z0ayOt1Lp&fBq9WJLP=Bz2nYy#2xN!=000SaNLh0L00&|K00&|LIC`1ekv1rQ
zWJyFpR5*==l09z1KoEsLq76YJqV*j@Oie?V6r3fJTWU&*pdj*h10Mk?f39625hvmT
zJ^@G;$mpfOYdOXwPg-e5`{vEOnT12Rz@*u1Mo|>4m&@h4)oMk+9dKE}&v6Dk0y{vy
z@5{pXeE|Ye;2x+~C4Xcjd7h^-JkPU#A_CsaB2V_Q+wE$z*&GOLw_Ejky`spp=y?ao
zaU8{Qe2{Dr$FUs8DcWfROaK{U6a>N1WQ!mOWQ?&QV*^|PxUNeWhJ<05`x*=e0E|YX
z-)nMR=JPqgbq!bn=T&Qw1VF7;tKJ)|Ox6kj{eGWLr*puvod7Hr3ud!fUIXBJ%T6{)
zl7DBABuQ}-pC`bpm1{H_x#yzqVr)4XUSR({)4k<AY=wW~6u2-z1Uv&bW$(k`@YwJG
z9)NEf)Pc8h#que<zXGRa#k!=ar1TGgRMMm>IftY+Fa|!^|B+R8zm;@R=Klc7(N$F4
SEu9Sj0000<MNUMnLSTa89JY4=

diff --git a/src/extension/img/icon24.png b/src/extension/img/icon24.png
index 15dc868c86c7fc91c376ab7102472aabbe682781..7322dcabc360cb02c03e74ba84ceebbee2213a30 100644
GIT binary patch
delta 658
zcmV;D0&V@&1<wVLBoYa5NLh0L01FZT01FZU(%pXikwz$gTuDShR7i=fmN9SBKp2J}
z8)qx&gcJx=kflR^ggev{5>g8bWMJqH6oj&4W~PJ*A&^Bjlm$X**Gl;h7$I4eD5Vlp
zjW?%#8Dd9{V<#=}NGI8!zkA=i&v$1diLwSP0gr&)<>h5R48tgjqG)Ah#RqnQhrqR&
z8YRMY;1w``1XQh7<@>%;eBW2KS`{GR1b7czKa&A)8~B}cmSGs`^?J(F>-A(9MrtA;
z1lDI70FRRqjXSnltts)8R;!gYNN2NEXpoG2LVR^~RdF1b8VrX+IgV3gvOZw|T+NmR
zP_0(e;o)Jac*@byk?Qq&-XsLBWDVYC6DpO827|$WT=A5_V4zB+k~evsXtR{Amb7&`
zoimH4wA<~x!7!-|TiFNAX7k+QDa~dxZ}PwZc7U4zi;IhRp2xz%0(lyZ28~7ofFKA6
zf?z5qiXt{QH#t5&PD7sozU5pCo9nvck-DxsH$Q2<3Dl;B^8ct?MbT_Iva#&-+S=O0
z^OCZEodSF%GcDV;XKt=C;y9LV+xZfGF@XtN+qSW+!imkqvMg-d&W8gF*d|#;0H$dc
zPP=RsW#iet37<^h1Ecd}if*@y<2X2uL$}+V8_zKW`lh7sfLE6F54@3dkQVzHa2L2(
zmc75f&)(kN_<9Z@@EpJbko3bajC(*IxKPw}!}B~m&pXS=Pl5ZAegcf&iliOjX_D}_
zoB~fI_0zz_YnRjk?lAf`oR<*Tko0mQs^Y(aOOo2I>&DDKqfR8flXSUAt87R8V)T7}
s0c-%bfEy&|J8-~ggKh&Kllwyc01@F9uraz8(*OVf07*qoM6N<$g8JGtoB#j-

delta 663
zcmV;I0%-lu1=IzQBq9WJLP=Bz2nYy#2xN!=000SaNLh0L01FcU01FcV0GgZ_kv1rQ
zQAtEWR7i=fmOXFNP!xurYn-j56H*{hAWMe)2zRI@CO#I(fKc~Bi%@pVPe_;$0$F53
zSx|v=t(5<O5t3C2Xd^MjcypS=5Z}o0N8AFBbS3Nf-1j}_<mM)@nhoFyaL{Zvy&wp}
zFbu<1tK|U)z+>QAiAFAU;1w_hq*|?iisyNv@jOqe)v5pjoC5EG8)p^23;d2Zi&9Dk
zgMp+O3<jc<(k21~!0j^ey||*q#!jb`5!ZA&ouq;8W_MNPOX8cGn-WD)p}}-I72CG+
zOfsEZO^yYSTCFC>$H#@@n(=rn^?E&R5&&0{25*xIl}bfMqfx22W;7Z}rBX?Mo4nTI
z8^otYuU@ZrW^qlo+f5rx<H@j_e9>;V&n>QLx7%rx9R&=5TLA0p>$tAV+S*#?1T-2A
z8jS`3zVGAvekLajL$<fKnM@`+^cmn=$~AX6j<cxLah%fpczFg;%aro}sGE7w<T#SC
z<nz|n*3$cevCRO!l4#4atd(DXt|Fo+63epEBl=<hOSYC}VVb#(t;94<EXzuVeG~XZ
ze2M@J!^myB=oBU6$-OZj4d4Uw`y)fY-^aFXY}=;a@0Z3?Oo4p^_zt*5S^vNr;D;Xe
zbKpL3u_*iK=!nC^!^Lw60q_Dq8~g+w0Q<m&ydAFV;=1lxDxU!lffImg<fk$Op2Z1&
z%M5rL7fRXypa<Mz{@ZX~0^kntvNTgfE{RCjah!<qJL*(K-igTNJgv;Z1yD-;QcCRs
xH<|x683G;<#>-=VQ|<uQl~RwCQYU#@e*h{MSz4sIa=!oo002ovPDHLkV1lAyHIx7V

diff --git a/src/extension/img/icon32.png b/src/extension/img/icon32.png
index dc67de703889237c82275aac5e6575f772fc1de0..ba6fb23b0be9631955f904353abcf55684950529 100644
GIT binary patch
delta 715
zcmV;+0yO>q1&0QZBoYa5NLh0L01m?d01m?e$8V@)kwz$glu1NER9J<@m(ObxK^TUg
z3DmUMlw5>JDAYo|rD*>H$<f@^obqq9w_ZF*5ibo??Nz+y;!Q;;EiDBr9(o8Uv{{fq
z!5;}FY2fv+yO5+ao6R=W7v_?0=6j#b&b~W~B;pKU4tN5*0uIXMa#K=QQnym6G=T%)
zCGZ%?#O@n^!}u<+4YUCPDijK8x7!MJetxc%l@*2cVD4*RDKP*r18e{neT|jLWORId
ztYOvbb!D^Jeh2|w;2AJI767mWd>v{gV~lFG+9mT)wOUQam|+M3d%*2j0Kk2qX=$Rh
zwKb=CsMXa~8-RdQU^x;XxN@s`u~<~E*Bc4Y>-AKBEEc06a#jFf8aT2ooS&apv)LSJ
z9_sAuObZJOE{H>5#s;uqTQD^>rJbFf*yf@3_xF`fr(F>10|3FJc43=btyaf254E|u
z=>qr@-ii=l+cvRWE+;k*RjE{55Y@n&x&DxGg-udfLMj|BAOn894isHslT?n767UH8
zY>yp(Hc90OsV(qdBCh-79K%Y|1K3Lecldu=G(ZQqG44tQJ2;dvCJ8_%m1NZ<l>&a-
z3Z+sB&-0>Q*8_6R^E{7IspRti1&&SFXf!7F1T-3r$W3@;L(Av$@&CsWis<zv1$>y8
z)A)LCfLY)NaI?QMYL{QNjvxQIl%y8$c0BNZiRg`_R{u$;%NR*_#d-%=ltc=Db{%-}
z53l~Yq;CY~{YSFBxK}u8M6BNh(vtm9ngdR*5x@iT1D?8^aLd5yH2|Cdg-d?JKLilB
zBz>A7z%E0_@koGRq$RCOYFz=KBk5_-E7`}Xq@1KG{uwSVKugk=q{UJFjVy0An~X6o
xv%o{(0dNohAd?NsKY{PSXW%37PJY0R)L&fe&*VX-cbWhI002ovPDHLkV1g5gNc;c*

delta 707
zcmV;!0zCbP2LA<+Bq9WJLP=Bz2nYy#2xN!=000SaNLh0L01m_e01m_fl`9S#kv1rQ
zd`Uz>R9J<*mQ8CDQ5c1v3Di_<N;X2I6l$T}rD*?wWNG%=tnxS7T{kYIh?@keb}MeP
zai=1bmK4E?i!K5RZ3ZL|@FO8429Ar#)i9l#`AF&mcawMSd(O?=d*(uP7J)6`IdD=c
zm0FSpk_P2+xdog6&wz(OCPv>-)`0_mpbH34KA%^&+m)f$>uGayQ>H$8_64vujqr6~
z5BNRSSeZ;lXJ=>f(`Yo5&1T0<2p9m5f%&-NYrtn;GdYf<TCH|T+)%64<T#Gsgn(n<
zR#fr3Kr5h$c6N5G;)d<*?H~gJE`W_FD-RSe6bc#+hoJ_B!=Va=!Xy(poA^9`a2hmm
zd3jl_Rx4E8&~CT2va(_`@d0mtU1Be2!ra`P4i66_iyP|oy3*;i&BU%>d>!9zH=|mu
z#uhhJDixc7U;bBd5cFWFR7xyvD3{AN6ICO=$XLjj;SZan1ca0s9Y%?{<uBU8CMlMX
z67T@LY>yl^NwI{~K6oDy+k3Kq4nIkH0LLldw*N@{M^+u64_u2o(_8dE9LGswpr1-I
zYnG&dpFxFUv54!sND3T&Y|pu_OR-qA>Hh%BCTupFGdlszW^>{uJPoq8w6qlce+*$l
zuTLr9?aY+o^Tq)dfN#K!@k-b(pSF${|G5-iCcld1dp5irX#?I(Xh4jAq?@wd2Ufv5
zh5!xV>D4d#FHe9k{vYS@Zm%=R`U&%ofV9n74miI;11=DHzBho2D==^l<io@bHzmEF
zp@AbNT*m{El$NwBsWXLvzNANztnWOEk({I|-kFVRpd)Et(rQ@$I3Mu^;688<xPy0*
p$&PB@fv><v;2rRqv5=V-#2>3S6^_CL?)?A&002ovPDHLkV1n30L3#iH

diff --git a/src/extension/img/icon48.png b/src/extension/img/icon48.png
index 9a1779800fe78b7ea7a210758faef4442a58e333..e4c1f5ddb8775794f93881a263a019e04c2b9eec 100644
GIT binary patch
delta 1105
zcmV-X1g`sm37iR#B#|^Ze*`H>L_t(&fz_J9YaCS^$3L^#R(7LM8de(;5Fxd>6$wV!
zocsrt6c0sD9>khx+KUj64U#|(t<{s@A*bAPlI<aQ$f2!n)@4tY2;vgaDs5;cfe^!f
zJ<LqqCi7<A%xpIC3%|?EZ{P3xoj3cwzxQ^LMAiT<0Ph1|0e1_9f5Jw+UVkEKU($ZF
z*?dwg7B_&qe$IQqg|5`jKzabU4*UqHGnST?bQsIa%Q~C~`~b`V13eP}3<Gz7-4H^W
zo}NBJKETw}RG0_>JHVH~(6I>s&Hy(6*FZw!<Kx=f+cOH--{057#DqzN{D*QAc%iET
zfJ;ClqOeM(l3J~nf02BER;#5_sT3tbz)!&IT@e7h8}-xy<#IVytJPTY0ajO6)z{Y-
zCt@48l1TvY0q{>uAuTK{Sd$MhKR+KQK)?a;aVi18HH!kOR4Qt>+ld9V+ig`U6&n!(
zW)cbTUz>xtfk#G0w6(RBn0$ck?QM;Yj@r(|q?G_*1b7-Ze`ujl(E9p%YVrY^&8CXQ
zqKya_7>yJFoQ+#;f(SFKv@n=lSk!?tQ35`<87RuE(jvm-4##Jq0)QbrM~oaG&aBeH
z!sI$%rNJ-(cj7*5YgTDtX>tN?JtqLKF$?W&f=FssX<=z{JNOM?AmDnO>NIAR7M3RW
zNvD7#Epcb0e>JPLur#>`K6eIzwka{IS*3-A$+dx3z}rcMCKZcCH5!eclMm2nG~!I|
zY94qC1IEV2s8*{~t5s7<C}wA8L$5C`E+!f$;IOu~X1e`0c>7da6R`>tx?KnOE{E6q
z{9kb~2b?=;78!6Z2fTRFEHdDw+(|RYiaeezpN~r%e;yuYa&nUX{{Ga(Osi8Tc6WDK
zSy^FobJJ!>7vL9SzU}35S+48$Z2fm#SLJfqW)<21i)FM{tM!b0fLg6)y^Q`GH&2%@
zU$&XfuEMhB!yIrwE-RnUXC{;smNoA=cn#4XfMd#%-}Utxj$@<*-YYbim-NVSoEq?E
z(gLR5e<o=!WV1Sj;DMw^!PA|gi@nWp=ld}&2}cr+;|u`50ilb$=@l|f@p0$lZGT^t
z^f>1a@EG{klzj^EjnCPe0RYEwhJc5J%)%*~0T=J+{ZD{ry^y5efiFTwI$f9x$b;7l
zb>cQ~6?h|4g}J#bACE#E`1-jkvN+sLxk_|<e+TCRmyYl~e8CrSg^uI(Qy|~~sDyG2
zyXcGf=#&U(10NcBnr^7$C#Dk=Z~$D3<QR3+7cnVm`ve3$HN7^81o&}LQoV-))+LSD
zaI+PFq`agXowIQa0(K?clyugXR}uk13`)8!DfY*Z1Oj#>-IA2}4<Km-1Tg@7ink#$
zM;;DGL>st=cT9dhEstltP!>3j^D^)b-dW`+@ETC!zcZ&D;BVkpye;f~;Co4bWv%@$
XHu?I`EZ?Z_00000NkvXXu0mjfy5s%^

delta 1076
zcmV-41k3xJ34sZaBn<>}LP=Bz2nYy#2xN$nAv}Kr{z*hZRA_<Kn$K$^Wf;dlP2);Z
zg~bxJv>-xPb1PD;lAinrLY6%&dfJ1i?dtADsK+hRLJzyHo&*m)_1=?Y55+?dyQ^so
zIk{92L&ab0md!L!vL#;+lVP*zyqR}q(j<Q1y(G`P@AsQ`=6T-toj`wh75D)78n}~6
zrS^Zz<?<s*O-apawfZQXPVWPE+A;69uNf+nz%}3}K%H%Kb5q@HZEdML4)_uHtlihZ
zm;r7B4Ie>TUS2*W-eYNL$<Ks<Bj77w`YeS%2V4gng9t4wEa>?7*l3{HY-(|F(PTpH
zALRz{e80uN2~>IvtV|}OTCHXj?@_DOl*xZ&dYKULGw?>g#9yMvuMQ}YNT^sW28#FC
z+1b(f_;`?sI&d+r_$$DZfPu8WzHTkvV{L6M$bf(o;FGB0KeiY^`FvijRx7lDR;#6a
zK5t_}xS1*xm)h=oc04;ftHZ;?(BeJn^}4dztnEw`Y{kz4kApf*rBd44+lwsTqgsEh
zDxFT-m~en>koa>1WE-#f6|1Niikx37<EC>XU)Xfit5`*)N0IAppPR%_<5t9;9RwAt
zs8|%a&Rc29&%o`Vi*1WlR4j{}fScXoCo!yTycV`tMa8nn9nrM_ycXm-O0kNHWs$qu
zY2eh7xU)qqR#CAma`!#)Q$WiU7`J~|Ma81XwSZT^-AVZdrPFCuDwTnY_o!4VK}GIz
z5_qTkiT0SEpQl(XQY;otA-=4vtoVMuv9S@VA5X*X?yl+UcfsAK+7=P3W}@HY0N*EY
z*FOJOE+l~S!&VW4^9kUEVXKJ2i-}<?h)WW;EWZ>KI5RUtp-^CAVj}WjrtE*zNu$wV
zdwZLMg9Do`9e`g6c-nKhoE*m)SpIh$N4Z?iCJXI@MH(%YN&^$`Q7V<J)95cj^E5X%
zXEU9B#d6FC3E*B(R5F>2EhsFOW8NLZT@d{VjG3Y&^+{GZ#>R}2z`cd0lEB|U33xl~
z0H(D~*tL*NcJkpqu6DpZIO>1f+UBg|+ie-1-ZqoK?|^TTH{C*}DL(6X-0kmcz(cPR
zKLoxrMUNog;%a{8!JP&k;4=#&HUkds(feNjook^#fG>S}8ZB07iwAct)X6R2GVoTc
z5mr~@T;7W^@J&$Asl(lfS)$)NI0yGlkrfx|I9?wC11CV<R=meYBVvD`1$-D*yvG&b
z$q)^k;Jzt}ML|-12nHS#;kNNb(gjK70UFqo)Zfz*Nl8i9J7?nz3^XL&kaVuE;=7DY
zNxCH|@MTB{14oi>N*dfBKqO59pW<$ajEBQLS_`-fT$L1fs9>V!jv)ju1MlIURc3+L
ufecU2oQ{Bhf!}bqu=gB*AAo=24*VZ$44mnU5<Efx0000<MNUMnLSTX^Z3zzm

diff --git a/src/extension/img/icon64.png b/src/extension/img/icon64.png
index 6f0d9561a0f09f00b0801e518572a64d87834f5a..7a92b4c7db1714ae6b2ce06e63b25c5c3e3918fc 100644
GIT binary patch
delta 1378
zcmV-o1)cie3abl{B#|^Ze+4*6L_t(|oaLKMj1)x}hM(%Nd)gl`h-A4aXm51%K-BAo
z1AF&BqlfXJ@oFS2@dEzb2oc@&Y>XkS2QmqXdeRFkhQvVpS=k7QBwolY!T`gZT(Yl+
z>Xv4inXan&>0Nk|FWJm=b$#Ev)!lDZ*C2_02Cxly1^58?8aP)jf0r*ws!RGeiF&0{
zxdfa8=7B@N%fPn2=hvsAp9hWti@++NG$tn})o3)dmS(f5QmLfuu}RxS;1l4vbu9oe
z2J8ox))eu7jEszEX=&-6;!`eOyr}W<@s@3qIG^+}x^4sj9s)iB>Kzi7F-9j&oM>Bo
z%E^-_WsK=0f|9;Ie+0G^CIDc73UDPSSphn5;6QHiDKj%Ox#vsb8t^U<4O9T&ao{J%
zB(-PH9<8jbI16z5_H9j1PrHgB;54vnAOZj{0@q!Wo0ynTtyXg`KBZQxX<}l+M}!7Y
z?wbHW1bpg|kcNhaw6L(?U3|)!GiNkBJnSQauulx<OTxAIe_`zN*(;g3xw+utQ)Xvp
zeFYG392n|}07>!R`6f{=m%A=LrBbPci14k82rhT}uY5Z%l}c(hn>`btjY)Ee`Mk>^
zPXMoL9`emjC=Mp6T^tD#0C?56Ggq?{ila$t6|Z{<0PF&8_;%!Dc0%zmN!hpo>~s<!
zx$d1!P8z;ue<zdxla$5+U|a-v+xO(#w{O?w%a{9Je9H3jvUcp)5hB8y9R<KnZ2s{%
zX}4x4lt7cT3~cTsz{kF-_QLFh5@?bRwG;q5pYJ%OT^qeLJD~)aq-$i>6S4yA_c>9!
zm7PHoXp;7+g#e4LC+L^i2_?WJomW->>>8d^<9?f+e^3HU(r#r0IO^JP5N0P7Pm^>+
z83F!qX*4La6N;xv`bD;Owy|dEx>ba(><k)@m84Z*E7+G79S<(b?1bWBl3v;bJWUQO
zD=SP*P30Ztgpy&`4r5GD`f;Qb0h5F5ah)+40Z$a2MS;W-$&KIvWorbC7M(?bj7Gpn
z(ODG8e`r*621OGA&7zYikXsRO%ePe=$5g9T8jXh2o26{z;d{PDqd~P=C641D0RYb8
zF_(_xSoL~+V6M)UdcCeVj(sLW0)7V1cYf7swdh*gQms~f1vnM~7ktLd-o1N$4j(81
zxm}2`Q(<Su#>RX*85jY%oj2I&a1HxHBo{f{f5?i&V=}c0JQ7K|g57=fpz)ietEmzC
zzR*;P;Rmor2<(%fCm3ToM!(y8Fb|0UlFs6JGu+@TN%|G;i~z7ZK^_#oNdGYDUELTn
z3j7Uh>C`gsDUdfzi*Ap7{r9M(TaXz6$p@e3wZ0GdEG-@~BLKh{vjyu6A8yyW=>K4s
zf9;onNl7=;5AIqIkaQh*zhe&@o0)9!z`fH?tRp;4n+Zf7?b@w__NQpEMdq$cAjKH7
z3;XMh@wMOe;3m`+f&JeAo|SZI?H4VV#3cQN-79pz@K&qhfzB&1*p0_M9m3s4K>vq3
z)|exJ0lwV80vxBCt+I&-Lu58fZy*7_f1%sW(isspVeR8a5#X3h@y-J1&gF1qoeQuE
z9HzzNu4@4@@q+A+9@m=yHzmF1TTh4pNZKi><&KGh1UMz>v5;Cq1wfLKRFSk?pa9n-
zy_4h;R7W=gq_J7jp(L3>32;@?K}qA?=HCke(ioAn562y6fw3s*y`-<6<lS;ESkNuT
znBBk|z%=j-Z7jC~tHAHrMca8L%UHdnF9O`vfiYWwDc~vKNg&2<%iqkMy$Mb1gr$yM
kkN6Y2RR5!-tNqOHKa5K@!53IIegFUf07*qoM6N<$f_ZC@6951J

delta 1299
zcmV+u1?>8(3*QQmBn<>}LP=Bz2nYy#2xN$nAv}Ks+(|@1RCt`_n@emPRTPH5v6`&%
zY86V9Y@mgSz$}Q=Zlf%cJ(P#c#%vH<MAbxW2#+09EhMZFs;ZVnWGND`f=vS`60{;H
zB%)bVViVbrIIZIqPV=)E4|QDIGxyq_vD;5NQk2Y{d;XId=fC%!K>Ilfyb62(d=1=6
zrBZ))B;_UjTaJ7>oxTIy0<Ht|z$@jkUCCMCGO!LD0`g;gd|ZV>LDdwCMJ1C-RbE>j
zyAE6e&cvd`fC1nFu*p#o|3_b6pEfr)9}@4gwY8<e!NHni%dt_Oqd#(W4LAXO1mvlo
zxE#mP($Z30@jlDT%W@p2Q4v(0>qFppv{HYM;s9yjZyF~nKy!0*f#Q8;XJ-TNSB_oa
z9Uu{*ZUCMEeh!(WrlzJ;DwRSP;NajuGcz+`iy+`9;B-{tUk3KVCO0}ds%$nJTD(s-
zo7L#(s7VnDK&qX>6ToK%38|;2M=L8U#^QZeS69{B+iOw;;r+#E`76<j_xIT-nZ<v_
zMQias3kwUT1rTrz=xL?+?@W_OrBY3c_erPIHbwZh6-97>E2fhtlSvhe#g-MIj!6m=
z*J<)~FnZ@9*zDL6!X(v;i?-rlGo37~*|8<0NvaiZn2J9Q+%=uZ#O&B&V3I21E^sQW
zcn1TM<A<r)vBkn9`LR;g7RXzsHy?i)8PWFkcH71K<Z?NUjg8q9;msiNCxCxUZrZHb
zvBlCP<$$3^1^C#ss;w|Pwpf~^`Fi392w2iqM=Q;aEfywempc0i7ffzcZ)YcJEKSn+
zS_N1SdxLhF9a}6+(nhuTvtb9f+w9n4VUi{)3vfB?z$na)ErurPh(-P*%%Fd$%#JOF
zCh0d{{7I^|u4{$u&Q8=A>?9om!{8lSG`u)2vtx^aNji57c!2;)r4o~qlR=k-LQ=z@
zJ5DIO-YSv_U_8nhJB;xJ@NC>!#E6@q{6X-TGMu2p&e<ZSKLPZ`okfiFM}DT(X(WJR
z+)2d9egfDx9p$<%nM{U4p@4rRqX@$EeuYATOeTZtx>f}MxQW49+I3y!^ZCeJU0Cw@
zyj<5cSqusI1q{#pGMP-=TI-U@WK0WiH38f<d1j`kr%f)86pP$$C-9cSp&1w$Fr6ea
zEOOg$@Rq|_LLM3@#0OcN7%Zj^fhQAqJw6ZZkv#_d4(#|w==(S`iHUz7;K5^m2KY71
zsGwIM=n;&2d<7H0n*Rjc#PGwg%h?3h;Ar>6m3VTAg)jXtDxa5r;4cEYFXMiMTks0x
zfu|_j;L0apANV3@^drFMRIGoh%XJ*j89q^OblkteCdcRS_CW9X->BXX*aO~cI74?c
zONID)IC#CcH5U*;)Ej@-0po8F((OWnCaGoxG#i%l?_tm+<x}&-s7niQ&Q!e5rAMFu
zpV*2A@16Ooiwkg#7IcpHP|+;iMFseV7Iusu!?TawQh=+i6z}5z7dyNFhj{ON`;M3;
zy(I6S9y_f7_awdEHsMu8I3=lO$3#p8xFPB3NW}X{awMfC<zjm*z^<gXB}Lj*aRf<2
zlIF|FL{)$tN$*P<j816)lKLc_CuGN&WvokjS5n8HXiwnv;jIDpu@`(Fubu5v;Kg<%
z8pXRa3`_#g1J402UR(YU4|)@dc#E$*-hRZNcw6;90z2(Y?mv>!iPNdYZKMDI002ov
JPDHLkV1l&RZaV+~

diff --git a/src/extension/img/icon96.png b/src/extension/img/icon96.png
index f952d758187abf753895e2aaf38b6c2315d54a5b..641ce897baeb54b0caabff869978ba4295d21506 100644
GIT binary patch
delta 2223
zcmV;g2vGOI5Z)1xBoYa5NLh0L04z!X04z!YcY1V9kwzzf2y011K~#90?VbH^97h?)
zKXbJ?k*l4QzF3$dwLjoQ5y+sXRjM{ZDwQaN))j6PDx(yd*8KsT{0#^pg*X+^Ul2kd
za6!04C=>+ZwF!lQNt5W>25{2wA`&YiB*MhGBsR%?`C<0ljeF<Yot?eC^W8^!B){y=
zJo|iiX7`zYo!K>#Xhw`NtAPPvEwC>5`Q1Z9Lxp|&_7#jVHvxrU^OB_hY~8xGw0G~`
z5^xGQ0ZaqOffJJc+xVl1fTX4{;6~s<U>9&0xCSU}0|Nt^ot;%J=H}+Ke*Jna-7m1e
z0$&5R05@fQyo<-3anRQQqrl6+)f#~lphBUbW5<qv)eL@x>FH_p_V(5+C$Ou)Z-A$P
zHEksTkOMXYF94V81ZvSHCMN0zzry6?WTY|!yBzrPQ6RTs1qcHFFmNPBa0F=Q&Yh8i
zUt!0N9kJ>N>=>{O=vpxX0A0XSz)6RIXye9>nxCJKEx^LUf;Mg1<RXHAH-PPp5F+j1
zZvb9@aSVd``ucSG^y%2auW;tf8TI$~yNV#72;A3l0s!v-zCx8dnW)y))ujUm4mbzD
z!oh<F)!p5lM1(Rh0o>LS0sxN!=Mx;T0F952Ck}pv-Me=u@+Giyz);f)fbHvd1!qj6
zgB>0oR=HgECP2Ad*6{GK4-v{i%YIu^2>{%G2^{ipfOV5CSL!5baqW-59Zews_CkBs
z$ALvnwp@vrq(!y!z`dCY06YL(@N_`2k}X$aCTaETBJfZq0stQeuJ}3_mt@No$0V(m
z%>$1+$I)pgc$@^cm`lwy*>WXel2*;G0iSS+r9<#P<nzq$>+93Z%uK_AUtwluMtyyM
zeLh8406rW$p0PHDyMZ}hPWwu>T=9^kEwvIcFU)a*e<$#7kIs5cwp{U)q=oG)F>X<#
z2EQBly-!DnhK9T*TdtJLWo_BA#kUBDh?uNJ72wN09ZW0Pa>a9!R<UR0Ljd4oco<%&
zSlY>!E1r`y1u=V6Ndy3H#lyf_*cy?4Y`Nk&NfUMe?-nHx;F~@jYGktIisvLvz}Mv>
z0C1nruBXw-mMbYGX*F+6YX!dx`!vXl6G@+JH5w03(w5q5)OfsEOMs_+Ri1US<w^=k
z+LMYR0B{3#R+*QI_w3n|SrC&lK0fYKfRoi)K{WwJd{x>k$(AcABx!FMHC-Bid;`4h
zqq1g8wp{U?r2UB{lfRY<u-QjN&6;ev;yFqCh?WuH`#vgZ=48tik4f71R80V2HE=0u
z1+9>5x#B5FyG&?8a9Dt6k`~@7$(Ab~leF!sBEZW@3T?Gy%N0*a+J1!v2)dtT=jShH
zt(t7P;vq@<AJD6i0FNY5w3U;8Emu4wX`2-i;7hIr`JP7DDtMUgxJMxYUUeyCr6gOf
zBuvtd%Eq46I1D?lv}DVb1WDR8pvM6BU?-b4H44s_s2F2X^293}a@cja9kO9<M}TbU
z2#_&rbHKZ@_M(lsJqPq=?L`~Ylf%BFp+h$G<ba;6y=Y@PEg)lha#?$S(C*~03(Y!Y
z!(0x#;-y12%z1AC`Fx(Su`#BmrYMz4b*H~awYd1Iw^S-IH8sW9*ckbI-e;&FIQhM;
zeChA+SFu=3b@VYyip8SuIitS=*z2RPd_KRTgI}RoEGnPR`x0O>hkdJHVn#<t85|t+
zQB+eiI5^1Y=%}yaj(Zb-U}R*(M=>pd$74P2?SV|GRASYtRmojy0WMv-M4?cqzhQkg
z80=u&EOuh9Gjh07X=OY-aVrCBa*{4!XGC{sEU!wMs|-cFl&LH2$*;i<MF8y2(2;g!
zKY)=`c~SOx?D8ZhI@f?$Tm^2HbRh>I`)2WjJ{;>1iQfj-Uc$qF(cf*P2gaCK)@<b`
z<U5OgR=SR$8#)8L-KE61T~OSEZuRm*TmjxGX%<2)An1mE>{@Dv$o#Mpe7L>~0{C`=
zooPoV!oQes(=)bRy#~BDZmF%_MKq`j`ZMr8N#)8Pu4@6ZUhHxyxkDsA9}Ye&X#oJn
zm>Yn<0Pl%Ya;u+zp$%vOCxLa6u7&^jmRS+O249R@dWX7vVQKK8N(+F+R&W@2f7H@j
z{R~aH{G-4<)dZ+IFDTgX8SId0hh&t2&sGaQ)DQqb(jnkmDLK_nd_&S7YW=fn7qs|K
zV{XBIjqc`pwX}E_kyiQVuovF*wKiCGYNDibz!TUf_?gmw<YPP45b)G;!G}5m07&`?
z_QkCo;_<Ac7wc`bY!|e+kulxaPygLpYnuiRW~G8>{|^D1BrVh}Cu+sUm^*@kZ>{$K
zjsT0C1@4yg&nV?Yo}Mo0AK33Lb|&-IW)AyCtVqF!7y<xDI*k2J*nCXK+JOb&F-b?`
z>=b)}hNPE&fKSm$(!!L1ZIXTwcSolcGLj~-A4b07vi}NW0T_|=g3Hd4FTz!KHs%3f
zAC;F6#oO1p-ZXIZ|01^A`MGPoi3A87xeNHIq}yWdm#ALfI0*1B>`Rx9B&j#?BE7(Y
z4cLVq?ZPYAH=-vBK6nrSK+-ATgTUul*%xO4&jI&;OZvNy0uy&ZRd@vZ;fG}h@LI47
zItM(7=b0mEtP}nb_HpKOtc=zm;CWy@DNNf*qXmSy3-~Jb18~<@+!`&Q2z-VVuWxCu
zls|$Uz}pVIk#b!=IRSi{M%-M;(|XznmXq|bq$9!fm!`6S*ClO}RP}QsX;|7_P&Ewj
zkTK?e3G4;iX)dZqE(0%0ngD)AgC9O+A;6oJ+X=ys0iOi!$9_Dh5nRPCl71fef$Y54
zOvqG#Fvgey_ImMPU?0HmHR^A`uLAp}LK9@Oq-g|LiZP}K`$EA1U|sO@?b!Dl-3YAV
x&37GL#IE$b7}zQ7g>)Lb4*G<orhJa^f4+qh^B|KjIm7?}002ovPDHLkV1mWiF^K>G

delta 2064
zcmV+r2=Dja5y23UBq9WJLP=Bz2nYy#2xN!=000SaNLh0L04z%Y04z%Zr9GCZkv1oP
z2fj%}K~#90?VaCm9Mu)aKfAVBHH%}yuN5vx@PLCNkc&uB3d##bDj@_TOcYQgKmp84
zo%{<(Ri!pgTX;kWL@f}8JOqhHekA-b7!zP20i2Ll2x0|7q9!=&U=#1@!<`MA&8}zW
z&Y54{`AA2yz3X$&oHM_^ckbMqBf0c{0DZtp;5z5$s|E%Jio160D&}&z6+qGXZbd}?
zw`tR+%FdlTE5LWaL0}3v;QV|t@-0Xi7Xr5fe*^Xc3xL#HUtgb`IB`N+F*7qGt5&U&
z#{YBdKfu$#MqowcTbEES0)~KhfHO2toB&cR7G?kb{VkJUV`^$jmM>r4(vM?*XMneX
z$DA12iaf9$co{g&;)yzIqobp)$*(asHs;BvW2c>1?sQ^XvgCmcz{hw`jsUW4+cwY1
zud#LOR$py6wjX#9=!_&I5zz@e3LL_JLS)UFH8M9h=eq#&^YgNH?OK~62=F!V2uq+4
ztAUTOOM;Y2B{_Wfu<zv8ICA8Fi1haM+7>~8GH`1Ic~a+M;3=Bi$#}KS&Q960XODIA
zYmASNOIKG{kRnupQQ-2>v!=v7z;Wz1SO6Ir83~;H8r!#T4-|`I$AE#5a~FtC%sqUS
zfEznFI4IR>RjmNkYE=dY2Q`XN#T?legqleUt^p<qzJab{%N7@r=GQ)d1g;J<p?+8m
z97SQnyoxPbJc=~0b{zOasG0S^ZNN|HY>+RpWs6Ud=4PjWJ3`FwqTCDo>=K}7vk_ai
zSc<e(HU~TqVxF7w00C|>8_ia1*%DBsHM0fa{t)wh4u3>(&o7lqGCe&VS@LU4Pfts!
zRMITMJn*Lw^A5o8ff=oTptZ!7Eeay7(JF*^VZH|VQ88Fmv1N;rNUOJ_gm8=61-!2r
z=)k~$s@SrnTCK{)jT^O#Fp08Qdr~vNu*8-v$|9|1|IkYQT_|)f)GTbVWs9;%6DMc)
z1Wo>BD0HmVTNGl;7G;qpm=3&4gB0L7&48j5Tec{RGy$HmP5!NaD4u$v7F)K2B+`7}
zns#EI2B`!Q^vPD#C_G7Pw9oPRc=Iu>#^V-SwuB(kws=i`2WBLhO2a#L?1(#;){Kmd
zXcpiQ9*=^}T8$<}Y}pcmNOSEq%>nx~8cUkkvPD^>eSyp1uk{)YB~@(MqAb$ZEmnY6
zG#W{=*s?`Yq`lOCD)~LYY|sYMAhv8#5^1MtF(CNypw81Gwro)pX^%83z&k;lrcG?w
zq9oFGHzvOam+|?FSz5)GEeay-7hrjP0qzb`(KL%KTNFgv`uYO=%hr+hFv7H;Fx+uR
zeE~kRak5mzmMsBA+9$Q-_h8ZOywt>&EdfN@0??fUZpI9MHcd1l;_LglTrQ+YR9T(J
zyoZ|+4=b|*#7kCym|2+zej9fbZOoN<8WdSZq;%&ob2MbcLw6qNjysArCOZORrh7?G
zPLT%km>115;$bF_dE+G`9%j^!fI^|b@bEAb6BAS_6+}eE{G!!vrBY#HVuIn}VG4zU
zW~#v1`PJTkeCh4&m2$ZpYVTv5l*?u9F{AGR?9^~pC=`}-@@tgKWhoR2S_K%(V`dc$
z%+Syf{r&wKt`bdue?LP*Lt5?*s1;!I=FJ*zQi0;O9#DHAQ>j!~wrpAOkW#?x>@3A%
z(fy0=tj=LN<4#}(=2{~bcPeQ{;fY%nxG0aA?POnn;D|E(@)?c}0C+3TNZOP);n%V1
zyJHNbUD*x4p7(n&?*n((ddsc>zBmJ10{m1v0!{+sL4(Th%)6Lt?>Vo_yclH!xm?bd
zCCz_8UN{?P-5+~^BfxKLJo-Ha`Q7NW`>*3?;0nyG|2ap%N#HeGuNj_s6({*{{u_J$
zjy9Hmwq&&am&W5Lhk333dcR)Neu{|b6!ax<14ab{=N|!rnSMAU9R5OG@}YVEPY3W7
zaIGKDY2QO5I06n~79(1y|6{XJ5evZI{d&)E<*zg(A6oZ-c3@UA`khzrY2QOb_Wuc{
z+yA@*v>F$*fO&7Y+T!yJ?^J<5(<J$@_{0%^lfd&K1k`Rk3w+S(L$~ATQp{>}m$<c(
z@>4`u{*PfUyvJL8!EI>bG2kK0?P;teyl<x&f>}MPW%B*-Ph5sr_{Gg%)D}YgBVH2g
zbyw-aEdAGV_P+=_vqC{R{z+ghW=8eJ{rG6}YRB<q%|6TuaF(N(S?0g>;>XYM^lvbK
z>n&!3d0R7snGwrV^1=V&m3uMsA<y~zzjk0AxR1Ii2*Tuk8kR6=^Na8Tuql*GFT%al
zEl1nN1(+kk^<x^j4f7<eT?;Tn1nb7QaTD-E8y4VuXWJ9ORU$IpMg^F}tf`Y6M5I$h
zo)D3RC0u~2h&&}CiCfI`EFyBZh#Xsgf(7_dL^gz*JtahBg|nx$JQ_$q((BD-uOAhW
zrab_OMnrBBk;xPn;8PK~CEP59jEHoI$QBVfn4$t45Rr#P#CouD;t-L%h-?s%j}u&g
zeIoLpi1=D=Bvpt=PDIuLV<=1(u3)pkOCqvPM3U7-8v#9-iL7^Hrt^&|>AyH*ZEkU5
zh>avwyoh<=bGu_V;=i|cG5!m@;n?fc4UmnKBo&~MZp?&&eV7N^D}gI9^BY}=nS;MJ
u*U>3VLQgsN9cCe-Da?D&2TAC2jQ<1R#W9@MVl=P-0000<MNUMnLSTXc#n=x3

diff --git a/src/extension/manifest.json b/src/extension/manifest.json
index d9d0cb8..717b7f5 100644
--- a/src/extension/manifest.json
+++ b/src/extension/manifest.json
@@ -2,7 +2,7 @@
   "browser_specific_settings": {
     "gecko": {
       "id": "gout@regseb.github.io",
-      "strict_min_version": "110.0"
+      "strict_min_version": "117.0"
     }
   },
   "manifest_version": 2,
@@ -31,7 +31,7 @@
     "persistent": true
   },
   "homepage_url": "https://github.com/regseb/gout",
-  "minimum_chrome_version": "110",
+  "minimum_chrome_version": "117",
   "permissions": [
     "<all_urls>",
     "activeTab",
diff --git a/src/extension/polyfill/script.js b/src/extension/polyfill/browser.js
similarity index 64%
rename from src/extension/polyfill/script.js
rename to src/extension/polyfill/browser.js
index 3f03e02..861caaa 100644
--- a/src/extension/polyfill/script.js
+++ b/src/extension/polyfill/browser.js
@@ -4,5 +4,4 @@
  * @author Sébastien Règne
  */
 
-// eslint-disable-next-line import/no-unassigned-import
 import "./lib/browser-polyfill.js";
diff --git a/src/extension/popup/index.html b/src/extension/popup/index.html
index b02dca9..781ff63 100644
--- a/src/extension/popup/index.html
+++ b/src/extension/popup/index.html
@@ -23,7 +23,6 @@
 
     <ul></ul>
 
-    <script src="/polyfill/script.js" type="module"></script>
     <script src="script.js" type="module"></script>
   </body>
 </html>
diff --git a/src/extension/popup/script.js b/src/extension/popup/script.js
index 76a43f0..ab75c43 100644
--- a/src/extension/popup/script.js
+++ b/src/extension/popup/script.js
@@ -4,6 +4,8 @@
  * @author Sébastien Règne
  */
 
+import "../polyfill/browser.js";
+
 const check = function (href) {
     try {
         const url = new URL(href);
@@ -76,38 +78,30 @@ const set = async function () {
     button.textContent = "Mettre à jour";
 };
 
-const init = async function () {
-    const { dashboards } = await browser.storage.sync.get("dashboards");
-    // Récupérer le titre et l'URL de l'onglet courant.
-    // Attention avec Chromium ! Quand la popup est ouverte dans un onglet : la
-    // méthode retourne un élément, mais sans titre, ni URL.
-    const [{ title, url }] = await browser.tabs.query({
-        active: true,
-        currentWindow: true,
-    });
-
-    const button = document.querySelector("#set");
-    if (check(url)) {
-        if (dashboards.some((d) => url === d.url)) {
-            button.textContent = "Mettre à jour";
-        }
-
-        button.dataset.title = title;
-        button.dataset.url = url;
-        button.addEventListener("click", set);
-        button.disabled = false;
-    } else {
-        button.textContent = "(Impossible pour cette page)";
-    }
-
-    const ul = document.querySelector("ul");
-    for (const dashboard of dashboards) {
-        ul.append(create(dashboard, url === dashboard.url));
+const { dashboards } = await browser.storage.sync.get("dashboards");
+// Récupérer le titre et l'URL de l'onglet courant.
+// Attention avec Chromium ! Quand la popup est ouverte dans un onglet : la
+// méthode retourne un élément, mais sans titre, ni URL.
+const [{ title, url }] = await browser.tabs.query({
+    active: true,
+    currentWindow: true,
+});
+
+const button = document.querySelector("#set");
+if (check(url)) {
+    if (dashboards.some((d) => url === d.url)) {
+        button.textContent = "Mettre à jour";
     }
-};
 
-// Ne pas ajouter d'await car addons-linter échoue à analyser les fichiers sans
-// import / export et avec un await dans le scope global.
-// https://github.com/mozilla/addons-linter/issues/4020
-// eslint-disable-next-line unicorn/prefer-top-level-await
-init();
+    button.dataset.title = title;
+    button.dataset.url = url;
+    button.addEventListener("click", set);
+    button.disabled = false;
+} else {
+    button.textContent = "(Impossible pour cette page)";
+}
+
+const ul = document.querySelector("ul");
+for (const dashboard of dashboards) {
+    ul.append(create(dashboard, url === dashboard.url));
+}
diff --git a/src/module/audio/audio.js b/src/module/audio/audio.js
index 4370265..a96d321 100644
--- a/src/module/audio/audio.js
+++ b/src/module/audio/audio.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 export default class AudioModule extends HTMLElement {
     #options;
diff --git a/src/module/clock/clock.js b/src/module/clock/clock.js
index 3f1f44b..6c3115d 100644
--- a/src/module/clock/clock.js
+++ b/src/module/clock/clock.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 const animate = function (time, center) {
     const element = document.createElementNS(
diff --git a/src/module/icon/icon.js b/src/module/icon/icon.js
index 037ec16..ddf408e 100644
--- a/src/module/icon/icon.js
+++ b/src/module/icon/icon.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 export default class IconModule extends HTMLElement {
     #options;
diff --git a/src/module/iframe/iframe.js b/src/module/iframe/iframe.js
index 0c94760..ce3e02a 100644
--- a/src/module/iframe/iframe.js
+++ b/src/module/iframe/iframe.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 export default class IFrameModule extends HTMLElement {
     #options;
@@ -24,7 +24,7 @@ export default class IFrameModule extends HTMLElement {
     #display(item, empty = false) {
         const iframe = this.shadowRoot.querySelector("iframe");
         if (item.link === iframe.src) {
-            iframe.contentWindow.location.reload(true);
+            iframe.contentWindow.location.reload();
         } else {
             iframe.src = item.link;
         }
@@ -84,7 +84,7 @@ export default class IFrameModule extends HTMLElement {
         this.#empty = this.#options.empty ?? {};
 
         const iframe = this.shadowRoot.querySelector("iframe");
-        iframe.height = this.#options.height ?? 150;
+        iframe.height = (this.#options.height ?? 150).toString();
 
         if (undefined !== this.#options.cron) {
             this.#cron = new Cron(this.#options.cron, this.#update.bind(this));
diff --git a/src/module/image/image.js b/src/module/image/image.js
index 2d49b0b..cdc4a52 100644
--- a/src/module/image/image.js
+++ b/src/module/image/image.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 const hashCode = function (item) {
     return Math.abs(
diff --git a/src/module/list/list.js b/src/module/list/list.js
index aacdf0f..335ca5c 100644
--- a/src/module/list/list.js
+++ b/src/module/list/list.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 const hashCode = function (item) {
     return Math.abs(
diff --git a/src/module/podcast/podcast.js b/src/module/podcast/podcast.js
index 9d5344f..2f02b09 100644
--- a/src/module/podcast/podcast.js
+++ b/src/module/podcast/podcast.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 const hashCode = function (item) {
     return Math.abs(
diff --git a/src/module/single/single.js b/src/module/single/single.js
index 49b8b57..422fd06 100644
--- a/src/module/single/single.js
+++ b/src/module/single/single.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 export default class SingleModule extends HTMLElement {
     #options;
diff --git a/src/module/text/text.js b/src/module/text/text.js
index 130b56d..8c46e03 100644
--- a/src/module/text/text.js
+++ b/src/module/text/text.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2/+esm";
+import Cron from "https://esm.sh/cronnor@2";
 
 export default class TextModule extends HTMLElement {
     #options;

From 2bd2fc6edddce4462fb28f0f502ce2ef45d3f4a9 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 24 Sep 2023 14:27:21 +0200
Subject: [PATCH 07/38] chore(main): release 0.9.8 (#11)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* chore(main): release 0.9.8

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Sébastien Règne <regseb@gmail.com>
---
 CHANGELOG.md                | 9 +++++++++
 package-lock.json           | 4 ++--
 package.json                | 2 +-
 src/extension/manifest.json | 2 +-
 4 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6ad4c6b..cd3031c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,15 @@
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
+## [0.9.8](https://github.com/regseb/gout/compare/v0.9.7...v0.9.8) (2023-09-24)
+
+
+### Bug Fixes
+
+* Corriger des fautes de français. ([ebb3cba](https://github.com/regseb/gout/commit/ebb3cba7bc03a738ef59055d857b2673dade3e32))
+* Corriger le nom des classes. ([c91d0fa](https://github.com/regseb/gout/commit/c91d0fa7befa9582dad35712b2a3fdf630183f31))
+* Gérer correctement les async / await. ([b017aaa](https://github.com/regseb/gout/commit/b017aaade74a678200fa4a8c597463fcd6296c33))
+
 ### [0.9.7](https://github.com/regseb/gout/compare/v0.9.6...v0.9.7) (2023-03-10)
 
 
diff --git a/package-lock.json b/package-lock.json
index b4542b9..0cd3276 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "gout",
-  "version": "0.9.7",
+  "version": "0.9.8",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "gout",
-      "version": "0.9.7",
+      "version": "0.9.8",
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
diff --git a/package.json b/package.json
index 61f824e..73cb791 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "gout",
-  "version": "0.9.7",
+  "version": "0.9.8",
   "description": "Agrégateur d'Internet (flux RSS et tout le reste).",
   "keywords": [
     "gout",
diff --git a/src/extension/manifest.json b/src/extension/manifest.json
index 717b7f5..51d2e0e 100644
--- a/src/extension/manifest.json
+++ b/src/extension/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 2,
   "name": "Gout",
-  "version": "0.9.7",
+  "version": "0.9.8",
   "browser_action": {
     "default_icon": {
       "16": "img/icon16.png",

From 402e2b400f16b92b6e9e193a7ae70f1dacc5ff9b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 8 Nov 2023 19:47:56 +0100
Subject: [PATCH 08/38] fix(scraper/icon/ping): Remplacer les points par des
 "x".

---
 src/scraper/icon/ping/README.md | 12 ++++++------
 src/scraper/icon/ping/ping.js   | 16 ++++++++--------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/scraper/icon/ping/README.md b/src/scraper/icon/ping/README.md
index 3f75603..751f260 100644
--- a/src/scraper/icon/ping/README.md
+++ b/src/scraper/icon/ping/README.md
@@ -41,16 +41,16 @@ propriétés suivantes :
         reçu du serveur. Voici les couleurs par défaut :
       </p>
       <ul>
-        <li><code>1..</code> : bleu ;</li>
-        <li><code>2..</code> : vert ;</li>
-        <li><code>3..</code> : orange ;</li>
-        <li><code>4..</code> : rouge ;</li>
-        <li><code>5..</code> : violet ;</li>
+        <li><code>1xx</code> : bleu ;</li>
+        <li><code>2xx</code> : vert ;</li>
+        <li><code>3xx</code> : orange ;</li>
+        <li><code>4xx</code> : rouge ;</li>
+        <li><code>5xx</code> : violet ;</li>
         <li>autre : gris.</li>
       </ul>
       <p>
         Exemple :
-        <code>{ "1..": "blue", "200": "green", "2..": "darkgreen", "...":
+        <code>{ "1xx": "blue", "200": "green", "2xx": "darkgreen", "xxx":
               "gray" }</code>.
       </p>
     </td>
diff --git a/src/scraper/icon/ping/ping.js b/src/scraper/icon/ping/ping.js
index cccff66..42869f7 100644
--- a/src/scraper/icon/ping/ping.js
+++ b/src/scraper/icon/ping/ping.js
@@ -6,17 +6,17 @@
 
 const DEFAULT_COLORS = {
     // Bleu.
-    "1..": "#4975b6",
+    "1xx": "#4975b6",
     // Vert.
-    "2..": "#148a00",
+    "2xx": "#148a00",
     // Orange.
-    "3..": "#c75300",
+    "3xx": "#c75300",
     // Rouge.
-    "4..": "#e12712",
+    "4xx": "#e12712",
     // Violet.
-    "5..": "#8d6794",
+    "5xx": "#8d6794",
     // Gris.
-    "...": "#757575",
+    xxx: "#757575",
 };
 
 export default class PingScraper {
@@ -32,11 +32,11 @@ export default class PingScraper {
         this.#url = url;
         this.#colors = new Map(
             Object.entries({ ...colors, ...DEFAULT_COLORS })
-                .filter(([p]) => "..." !== p)
+                .filter(([p]) => "xxx" !== p)
                 .map(([p, c]) => [new RegExp(p, "u"), c]),
         );
-        this.#defaultColor = colors?.["..."] ?? DEFAULT_COLORS["..."];
         this.#complements = { desc: url, link: url, ...complements };
+        this.#defaultColor = colors?.xxx ?? DEFAULT_COLORS.xxx;
     }
 
     async extract(max = Number.MAX_SAFE_INTEGER) {

From da4af6fbf59a68223468b52abb401c2e683e5630 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Mon, 8 Jan 2024 17:50:05 +0100
Subject: [PATCH 09/38] =?UTF-8?q?fix:=20D=C3=A9placer=20le=20scraper=20Rep?=
 =?UTF-8?q?eater=20dans=20tools.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/module/audio/README.md                   | 2 +-
 src/module/clock/README.md                   | 2 +-
 src/module/icon/README.md                    | 2 +-
 src/module/iframe/README.md                  | 2 +-
 src/module/text/README.md                    | 2 +-
 src/scraper/{ => tools}/repeater/README.md   | 6 +++---
 src/scraper/{ => tools}/repeater/repeater.js | 0
 7 files changed, 8 insertions(+), 8 deletions(-)
 rename src/scraper/{ => tools}/repeater/README.md (89%)
 rename src/scraper/{ => tools}/repeater/repeater.js (100%)

diff --git a/src/module/audio/README.md b/src/module/audio/README.md
index 1df578a..288b8e5 100644
--- a/src/module/audio/README.md
+++ b/src/module/audio/README.md
@@ -176,7 +176,7 @@ Ce widget affiche un cadre pour écouter la radio [Fip](https://www.fip.fr/).
         "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/audio/audio.js"
     },
     "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/repeater/repeater.js",
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
         "options": {
             "extract": [{
                 "audio": "https://direct.radiofrance.fr/live/fip-hifi.aac",
diff --git a/src/module/clock/README.md b/src/module/clock/README.md
index 6706857..59ff6cb 100644
--- a/src/module/clock/README.md
+++ b/src/module/clock/README.md
@@ -125,7 +125,7 @@ Ce widget affiche une horloge avec l'heure courante.
         "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/clock/clock.js"
     },
     "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/repeater/repeater.js",
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
         "options": {
             "extract": [{
                 "color": "#795548"
diff --git a/src/module/icon/README.md b/src/module/icon/README.md
index 1f36d80..cecf796 100644
--- a/src/module/icon/README.md
+++ b/src/module/icon/README.md
@@ -163,7 +163,7 @@ Ce widget affiche un bouton qui redirige vers [GitHub](https://github.com/).
         "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js"
     },
     "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/repeater/repeater.js",
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
         "options": {
             "extract": [{
                 "color": "black",
diff --git a/src/module/iframe/README.md b/src/module/iframe/README.md
index 1706728..b556cab 100644
--- a/src/module/iframe/README.md
+++ b/src/module/iframe/README.md
@@ -117,7 +117,7 @@ Ce widget affiche [Wikipédia](https://fr.wikipedia.org/) dans un `iframe`.
         "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/iframe/iframe.js"
     },
     "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/repeater/repeater.js",
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
         "options": {
             "extract": [{
                 "link": "https://fr.wikipedia.org/wiki/Wikipédia:Accueil_principal"
diff --git a/src/module/text/README.md b/src/module/text/README.md
index 7873a01..3216dc8 100644
--- a/src/module/text/README.md
+++ b/src/module/text/README.md
@@ -159,7 +159,7 @@ Ce widget affiche le texte _Carpe diem_.
         "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/text/text.js"
     },
     "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/repeater/repeater.js",
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
         "options": {
             "extract": [{
                 "title": "Carpe diem"
diff --git a/src/scraper/repeater/README.md b/src/scraper/tools/repeater/README.md
similarity index 89%
rename from src/scraper/repeater/README.md
rename to src/scraper/tools/repeater/README.md
index eb6cb08..2993d85 100644
--- a/src/scraper/repeater/README.md
+++ b/src/scraper/tools/repeater/README.md
@@ -1,6 +1,6 @@
-# Scraper _repeater_
+# Scraper _tools/repeater_
 
-> Mots-clés : gout, gout-scraper, gout-scraper-repeater.
+> Mots-clés : gout, gout-scraper, gout-scraper-tools-repeater.
 
 Ce scraper permet de simuler un scraper spécifique retournant des données
 statiques pour un module.
@@ -28,7 +28,7 @@ Ce widget affiche une liste avec deux liens allant vers
         }
     },
     "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/repeater/repeater.js",
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
         "options": {
             "extract": [{
                 "title": "Facebook",
diff --git a/src/scraper/repeater/repeater.js b/src/scraper/tools/repeater/repeater.js
similarity index 100%
rename from src/scraper/repeater/repeater.js
rename to src/scraper/tools/repeater/repeater.js

From 04c094b9f08b7ed980e27c57fd922d7e3f86e1fb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Mon, 8 Jan 2024 17:52:57 +0100
Subject: [PATCH 10/38] feat: Chainer les scrapers.

---
 src/scraper/icon/ping/ping.js                |  24 ++-
 src/scraper/list/jsonfeed/jsonfeed.js        |  25 ++-
 src/scraper/list/rss/rss.js                  |  28 ++--
 src/scraper/tools/complements/README.md      |  81 ++++++++++
 src/scraper/tools/complements/complements.js |  26 +++
 src/scraper/tools/filter/README.md           |  90 +++++++++++
 src/scraper/tools/filter/filter.js           |  94 +++++++++++
 src/utils/scraper/chain.js                   |  51 ++++++
 test/unit/scraper/tools/filter.js            | 157 +++++++++++++++++++
 9 files changed, 550 insertions(+), 26 deletions(-)
 create mode 100644 src/scraper/tools/complements/README.md
 create mode 100644 src/scraper/tools/complements/complements.js
 create mode 100644 src/scraper/tools/filter/README.md
 create mode 100644 src/scraper/tools/filter/filter.js
 create mode 100644 src/utils/scraper/chain.js
 create mode 100644 test/unit/scraper/tools/filter.js

diff --git a/src/scraper/icon/ping/ping.js b/src/scraper/icon/ping/ping.js
index 42869f7..ef12c2c 100644
--- a/src/scraper/icon/ping/ping.js
+++ b/src/scraper/icon/ping/ping.js
@@ -4,6 +4,10 @@
  * @author Sébastien Règne
  */
 
+import chain from "../../../utils/scraper/chain.js";
+import ComplementsScraper from "../../tools/complements/complements.js";
+import FilterScraper from "../../tools/filter/filter.js";
+
 const DEFAULT_COLORS = {
     // Bleu.
     "1xx": "#4975b6",
@@ -19,23 +23,20 @@ const DEFAULT_COLORS = {
     xxx: "#757575",
 };
 
-export default class PingScraper {
+const PingScraper = class {
     #url;
 
     #colors;
 
     #defaultColor;
 
-    #complements;
-
-    constructor({ url, colors, complements }) {
+    constructor({ url, colors }) {
         this.#url = url;
         this.#colors = new Map(
             Object.entries({ ...colors, ...DEFAULT_COLORS })
                 .filter(([p]) => "xxx" !== p)
                 .map(([p, c]) => [new RegExp(p, "u"), c]),
         );
-        this.#complements = { desc: url, link: url, ...complements };
         this.#defaultColor = colors?.xxx ?? DEFAULT_COLORS.xxx;
     }
 
@@ -51,7 +52,6 @@ export default class PingScraper {
                 if (prefix.test(response.status.toString())) {
                     return [
                         {
-                            ...this.#complements,
                             color: this.#colors.get(prefix),
                             date: Date.now(),
                         },
@@ -64,10 +64,18 @@ export default class PingScraper {
 
         return [
             {
-                ...this.#complements,
                 color: this.#defaultColor,
                 date: Date.now(),
             },
         ];
     }
-}
+};
+
+// eslint-disable-next-line import/no-anonymous-default-export
+export default chain(FilterScraper, ComplementsScraper, PingScraper, {
+    dispatch: ({ filter, complements, url, ...others }) => [
+        { filter },
+        { complements: { desc: url, link: url, ...complements } },
+        { url, ...others },
+    ],
+});
diff --git a/src/scraper/list/jsonfeed/jsonfeed.js b/src/scraper/list/jsonfeed/jsonfeed.js
index 0972a31..80629ce 100644
--- a/src/scraper/list/jsonfeed/jsonfeed.js
+++ b/src/scraper/list/jsonfeed/jsonfeed.js
@@ -4,14 +4,15 @@
  * @author Sébastien Règne
  */
 
-export default class JSONFeedScraper {
-    #url;
+import chain from "../../../utils/scraper/chain.js";
+import ComplementsScraper from "../../tools/complements/complements.js";
+import FilterScraper from "../../tools/filter/filter.js";
 
-    #complements;
+const JSONFeedScraper = class {
+    #url;
 
-    constructor({ url, complements }) {
+    constructor({ url }) {
         this.#url = url;
-        this.#complements = complements;
     }
 
     async extract(max = Number.MAX_SAFE_INTEGER) {
@@ -28,7 +29,15 @@ export default class JSONFeedScraper {
                 title: item.title,
             }))
             .sort((i1, i2) => i2.date - i1.date)
-            .slice(0, max)
-            .map((i) => ({ ...this.#complements, ...i }));
+            .slice(0, max);
     }
-}
+};
+
+// eslint-disable-next-line import/no-anonymous-default-export
+export default chain(FilterScraper, ComplementsScraper, JSONFeedScraper, {
+    dispatch: ({ filter, complements, ...others }) => [
+        { filter },
+        { complements },
+        others,
+    ],
+});
diff --git a/src/scraper/list/rss/rss.js b/src/scraper/list/rss/rss.js
index c1f71f8..d8ec5d1 100644
--- a/src/scraper/list/rss/rss.js
+++ b/src/scraper/list/rss/rss.js
@@ -4,14 +4,15 @@
  * @author Sébastien Règne
  */
 
-export default class RSSScraper {
-    #url;
+import chain from "../../../utils/scraper/chain.js";
+import ComplementsScraper from "../../tools/complements/complements.js";
+import FilterScraper from "../../tools/filter/filter.js";
 
-    #complements;
+const RSSScraper = class {
+    #url;
 
-    constructor({ url, complements }) {
+    constructor({ url }) {
         this.#url = url;
-        this.#complements = complements;
     }
 
     #extractRSS(xml, max) {
@@ -47,8 +48,7 @@ export default class RSSScraper {
                 title: item.title,
             }))
             .sort((i1, i2) => i2.date - i1.date)
-            .slice(0, max)
-            .map((i) => ({ ...this.#complements, ...i }));
+            .slice(0, max);
     }
 
     #extractAtom(xml, max) {
@@ -75,8 +75,7 @@ export default class RSSScraper {
                 guid: this.#url + item.guid,
                 link: item.link,
                 title: item.title,
-            }))
-            .map((i) => ({ ...this.#complements, ...i }));
+            }));
     }
 
     async extract(max = Number.MAX_SAFE_INTEGER) {
@@ -93,4 +92,13 @@ export default class RSSScraper {
                 throw new Error("Unknown format");
         }
     }
-}
+};
+
+// eslint-disable-next-line import/no-anonymous-default-export
+export default chain(FilterScraper, ComplementsScraper, RSSScraper, {
+    dispatch: ({ filter, complements, ...others }) => [
+        { filter },
+        { complements },
+        others,
+    ],
+});
diff --git a/src/scraper/tools/complements/README.md b/src/scraper/tools/complements/README.md
new file mode 100644
index 0000000..d9349ad
--- /dev/null
+++ b/src/scraper/tools/complements/README.md
@@ -0,0 +1,81 @@
+# Scraper _tools/complements_
+
+> Mots-clés : gout, gout-scraper, gout-scraper-tools-complements.
+
+Ce scraper ajoute des propriétés dans les résultats d'un autre scraper. Il est
+rare d'utiliser ce scraper directement dans un widget. Il peut être utiliser
+pour ajouer la fonctionnalité dans un scraper :
+
+```JavaScript
+import chain from "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/utils/scraper/chain.js";
+import ComplementsScraper from "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/tools/complements/complements.js";
+
+const MyAwesomeScraper = class { /* ... */ };
+
+export default chain(ComplementsScraper, MyAwesomeScraper, {
+    dispatch: ({ complements, ...others }) => [{ complements }, others],
+});
+```
+
+## Options
+
+Les options sont dans un objet
+[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec la
+propriété suivante :
+
+<table>
+  <tr>
+    <th>Nom</th>
+    <th>Type</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td><code>"complements"</code></td>
+    <td><code>object</code></td>
+    <td>
+      <p>
+        Des propriétés qui seront ajoutées dans les éléments retournés. Par
+        défaut aucune propriété n'est ajoutée.
+      </p>
+      <p>
+        Exemple : <code>{ "icon": "https://example.com/foo/bar.svg" }</code>.
+      </p>
+    </td>
+  </tr>
+</table>
+
+## Scrapers
+
+Ce scraper accepte un seul sous-scraper. Le sous-scraper doit définir une
+méthode `extract()` qui prend en paramètre un entier indiquant le nombre maximum
+d'éléments à retourner. La méthode doit retourner une
+[promesse](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Promise)
+contenant un tableau d'objet. Les propriétés seront ajoutées dans chaque élément
+du tableau.
+
+## Example
+
+Ce widget affiche les dernières vidéos de la chaine YouTube de
+[FIP](https://www.youtube.com/@FipradioFr) en ajoutant le logo de FIP à chaque
+élément. L'option `"complements"` est passée au scraper `list/rss` car ce
+scraper utilise `ComplementsScraper`.
+
+```JSON
+{
+    "module": {
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+        "options": {
+            "color": "#757575",
+            "cron": "*/10 * * * *",
+            "max": 5
+        }
+    },
+    "scrapers": [{
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+        "options": {
+            "url": "https://www.youtube.com/feeds/videos.xml?user=arte"
+            "complements": { "icon": "https://example.com/fip.svg" },
+        }
+    }]
+}
+```
diff --git a/src/scraper/tools/complements/complements.js b/src/scraper/tools/complements/complements.js
new file mode 100644
index 0000000..15c8d05
--- /dev/null
+++ b/src/scraper/tools/complements/complements.js
@@ -0,0 +1,26 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+export default class ComplementsScraper {
+    #complements;
+
+    /**
+     * Le sous-scraper.
+     *
+     * @type {Object}
+     */
+    #scraper;
+
+    constructor({ complements }, scrapers) {
+        this.#complements = complements;
+        this.#scraper = scrapers[0];
+    }
+
+    async extract(max = Number.MAX_SAFE_INTEGER) {
+        const items = await this.#scraper.extract(max);
+        return items.map((i) => ({ ...this.#complements, ...i }));
+    }
+}
diff --git a/src/scraper/tools/filter/README.md b/src/scraper/tools/filter/README.md
new file mode 100644
index 0000000..99045db
--- /dev/null
+++ b/src/scraper/tools/filter/README.md
@@ -0,0 +1,90 @@
+# Scraper _tools/filter_
+
+> Mots-clés : gout, gout-scraper, gout-scraper-tools-filter.
+
+Ce scraper filtre les résultats d'un autre scraper. Il est rare d'utiliser ce
+scraper directement dans un widget. Il peut être utiliser pour ajouer la
+fonctionnalité dans un scraper :
+
+```JavaScript
+import chain from "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/utils/scraper/chain.js";
+import FilterScraper from "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/tools/filter/filter.js";
+
+const MyAwesomeScraper = class { /* ... */ };
+
+export default chain(FilterScraper, MyAwesomeScraper, {
+    dispatch: ({ filter, ...others }) => [{ filter }, others],
+});
+```
+
+## Options
+
+Les options sont dans un objet
+[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec la
+propriété suivante :
+
+<table>
+  <tr>
+    <th>Nom</th>
+    <th>Type</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td><code>"filter"</code></td>
+    <td><code>string</code></td>
+    <td>
+      <p>
+        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
+        aucun filtre n'est appliqué.
+      </p>
+      <p>
+        Exemple : <code>"title != 'foo'"</code>.
+      </p>
+    </td>
+  </tr>
+</table>
+
+## Filtre
+
+Les filtres sont composés de trois éléments :
+
+- la propriété récupérée dans un élément des résultats ;
+- le type de comparaison :
+  - générique :
+    - `==`, `!=`, `<`, `<=`, `>`, `>=` ;
+  - chaine de caractères :
+    - `*=` : garder les éléments dont la propriété contient la valeur
+      (`.includes()` sous le capot) ;
+    - `^=` : garder les éléments dont la propriété commence par la valeur
+      (`.startsWith()` sous le capot) ;
+    - `^=` : garder les éléments dont la propriété finit par la valeur
+      (`.endsWith()` sous le capot) ;
+- la valeur comparée :
+  - un nombre : `42` ;
+  - une chaine de caractères (entourée par des apostrophes) : `'foo'`.
+
+## Example
+
+Ce widget affiche les dernières reportages de la chaine YouTube de
+[Arte](https://www.youtube.com/@arte). L'option `"filter"` est passée au scraper
+`list/rss` car ce scraper utilise `FilterScraper`.
+
+```JSON
+{
+    "module": {
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+        "options": {
+            "color": "#757575",
+            "cron": "*/10 * * * *",
+            "max": 5
+        }
+    },
+    "scrapers": [{
+        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+        "options": {
+            "url": "https://www.youtube.com/feeds/videos.xml?user=arte"
+            "filter": "title $= 'ARTE Reportage'",
+        }
+    }]
+}
+```
diff --git a/src/scraper/tools/filter/filter.js b/src/scraper/tools/filter/filter.js
new file mode 100644
index 0000000..9ff8c65
--- /dev/null
+++ b/src/scraper/tools/filter/filter.js
@@ -0,0 +1,94 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+/**
+ * Protège les caractères spéciaux d'une chaine de caractères pour les
+ * expressions rationnelles.
+ *
+ * @param {string} pattern La chaine de caractères.
+ * @returns {string} La chaine de caractères avec les caractères spéciaux
+ *                   protégés.
+ * @see https://developer.mozilla.org/Web/JavaScript/Guide/Regular_expressions
+ */
+const quote = function (pattern) {
+    return pattern.replaceAll(/[$()*+.?[\\\]^{|}]/gu, "\\$&");
+};
+
+const GENERIC_OP = {
+    "==": (a, b) => a === b,
+    "!=": (a, b) => a !== b,
+    "<": (a, b) => a < b,
+    "<=": (a, b) => a <= b,
+    ">": (a, b) => a > b,
+    ">=": (a, b) => a >= b,
+};
+
+const STRING_OP = {
+    ...GENERIC_OP,
+    "*=": (a, b) => "string" === typeof a && a.includes(b),
+    "^=": (a, b) => "string" === typeof a && a.startsWith(b),
+    "$=": (a, b) => "string" === typeof a && a.endsWith(b),
+};
+
+const NUMBER_OP = {
+    ...GENERIC_OP,
+};
+
+const STRING_PATTERN = new RegExp(
+    "^\\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\\s*" +
+        "(?<op>(?:" +
+        Object.keys(STRING_OP).map(quote).join("|") +
+        "))\\s*" +
+        "'(?<val>.*)'\\s*$",
+    "u",
+);
+
+const NUMBER_PATTERN = new RegExp(
+    "^\\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\\s*" +
+        "(?<op>(?:" +
+        Object.keys(NUMBER_OP).map(quote).join("|") +
+        "))\\s*" +
+        "(?<val>[0-9]+)\\s*$",
+    "u",
+);
+
+const compile = (filter) => {
+    if (undefined === filter) {
+        return (_item) => true;
+    }
+    let result = STRING_PATTERN.exec(filter);
+    if (null !== result) {
+        const { prop, op, val } = result.groups;
+        return (item) => STRING_OP[op](item[prop], val);
+    }
+    result = NUMBER_PATTERN.exec(filter);
+    if (null !== result) {
+        const { prop, op, val } = result.groups;
+        return (item) => NUMBER_OP[op](item[prop], Number(val));
+    }
+    throw new Error(`Invalid filter: "${filter}"`);
+};
+
+export default class FilterScraper {
+    #filter;
+
+    /**
+     * Le sous-scraper.
+     *
+     * @type {Object}
+     */
+    #scraper;
+
+    constructor({ filter }, scrapers) {
+        this.#filter = compile(filter);
+        this.#scraper = scrapers[0];
+    }
+
+    async extract(max = Number.MAX_SAFE_INTEGER) {
+        const items = await this.#scraper.extract(Number.MAX_SAFE_INTEGER);
+        return items.filter(this.#filter).slice(0, max);
+    }
+}
diff --git a/src/utils/scraper/chain.js b/src/utils/scraper/chain.js
new file mode 100644
index 0000000..787e8a6
--- /dev/null
+++ b/src/utils/scraper/chain.js
@@ -0,0 +1,51 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+/**
+ * Envoie les options à tous les scrapers.
+ *
+ * @param {any} options Les options des scrapers.
+ * @returns {Object} Une simulation d'un tableau dont la méthode
+ *                   <code>pop()</code> retourne toujours les options.
+ */
+const DEFAULT_DISPATCH = (options) => ({ pop: () => options });
+
+/**
+ * Chaine des scrapers pour combiner leurs fonctionnalités.
+ *
+ * @param {Function}             FirstScraper Le premier scraper.
+ * @param {...(Function|Object)} others       Les autres scrapers et/ou les
+ *                                            options.
+ */
+export default function chain(FirstScraper, ...others) {
+    const AllScraperss = [];
+    let dispatch = DEFAULT_DISPATCH;
+    for (const other of others) {
+        if ("function" === typeof other) {
+            AllScraperss.unshift([other]);
+        } else if (Array.isArray(other)) {
+            AllScraperss.unshift(other.reverse());
+        } else {
+            dispatch = other.dispatch;
+        }
+    }
+
+    return class ChainScraper {
+        constructor(options, scrapers) {
+            const allOptions = dispatch(options);
+            const subScrapers = AllScraperss.reduce(
+                (dependancies, Scrapers) => {
+                    return Scrapers.map(
+                        (S) => new S(allOptions.pop(), dependancies),
+                    );
+                },
+                scrapers,
+            );
+            // eslint-disable-next-line no-constructor-return
+            return new FirstScraper(allOptions.pop(), subScrapers);
+        }
+    };
+}
diff --git a/test/unit/scraper/tools/filter.js b/test/unit/scraper/tools/filter.js
new file mode 100644
index 0000000..1893fd6
--- /dev/null
+++ b/test/unit/scraper/tools/filter.js
@@ -0,0 +1,157 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+import assert from "node:assert/strict";
+import FilterScraper from "../../../../src/scraper/tools/filter/filter.js";
+
+const check = async (value, filter, expected) => {
+    const subScraper = {
+        extract(_max) {
+            return value;
+        },
+    };
+
+    const scraper = new FilterScraper({ filter }, [subScraper]);
+
+    const items = await scraper.extract();
+    assert.deepEqual(items, expected);
+};
+
+describe("scraper/tools/filter/filter.js", function () {
+    describe("extract()", function () {
+        it("should support '==' with string", async function () {
+            await check(
+                [{ foo: "bar" }, { foo: "baz" }, { foo: 42 }],
+                "foo == 'bar'",
+                [{ foo: "bar" }],
+            );
+        });
+
+        it("should support '!=' with string", async function () {
+            await check(
+                [{ foo: "bar" }, { foo: "baz" }, { foo: 42 }],
+                "foo != 'bar'",
+                [{ foo: "baz" }, { foo: 42 }],
+            );
+        });
+
+        it("should support '*=' with string", async function () {
+            await check(
+                [
+                    { foo: "bar" },
+                    { foo: "42bar" },
+                    { foo: "bar42" },
+                    { foo: "42bar42" },
+                    { foo: "baz" },
+                    { foo: 42 },
+                ],
+                "foo *= 'bar'",
+                [
+                    { foo: "bar" },
+                    { foo: "42bar" },
+                    { foo: "bar42" },
+                    { foo: "42bar42" },
+                ],
+            );
+        });
+
+        it("should support '^=' with string", async function () {
+            await check(
+                [
+                    { foo: "bar" },
+                    { foo: "42bar" },
+                    { foo: "bar42" },
+                    { foo: "42bar42" },
+                    { foo: "baz" },
+                    { foo: 42 },
+                ],
+                "foo ^= 'bar'",
+                [{ foo: "bar" }, { foo: "bar42" }],
+            );
+        });
+
+        it("should support '$=' with string", async function () {
+            await check(
+                [
+                    { foo: "bar" },
+                    { foo: "42bar" },
+                    { foo: "bar42" },
+                    { foo: "42bar42" },
+                    { foo: "baz" },
+                    { foo: 42 },
+                ],
+                "foo $= 'bar'",
+                [{ foo: "bar" }, { foo: "42bar" }],
+            );
+        });
+
+        it("should support '==' with number", async function () {
+            await check([{ foo: 1 }, { foo: 2 }, { foo: "bar" }], "foo == 1", [
+                { foo: 1 },
+            ]);
+        });
+
+        it("should support '!=' with number", async function () {
+            await check([{ foo: 1 }, { foo: 2 }, { foo: "bar" }], "foo != 1", [
+                { foo: 2 },
+                { foo: "bar" },
+            ]);
+        });
+
+        it("should support '<' with number", async function () {
+            await check(
+                [{ foo: 1 }, { foo: 2 }, { foo: 3 }, { foo: "bar" }],
+                "foo < 2",
+                [{ foo: 1 }],
+            );
+        });
+
+        it("should support '<=' with number", async function () {
+            await check(
+                [{ foo: 1 }, { foo: 2 }, { foo: 3 }, { foo: "bar" }],
+                "foo <= 2",
+                [{ foo: 1 }, { foo: 2 }],
+            );
+        });
+
+        it("should support '>' with number", async function () {
+            await check(
+                [{ foo: 1 }, { foo: 2 }, { foo: 3 }, { foo: "bar" }],
+                "foo > 2",
+                [{ foo: 3 }],
+            );
+        });
+
+        it("should support '>=' with number", async function () {
+            await check(
+                [{ foo: 1 }, { foo: 2 }, { foo: 3 }, { foo: "bar" }],
+                "foo >= 2",
+                [{ foo: 2 }, { foo: 3 }],
+            );
+        });
+
+        it("should reject invalid filter", async function () {
+            await assert.rejects(
+                check([{ foo: 1 }], "foo == true", [{ foo: 2 }, { foo: 3 }]),
+                { name: "Error", message: 'Invalid filter: "foo == true"' },
+            );
+        });
+
+        it("should limit items", async function () {
+            const subScraper = {
+                extract(_max) {
+                    return [{ foo: 1 }, { foo: 2 }, { foo: 3 }, { foo: 4 }];
+                },
+            };
+            const filter = "foo > 1";
+
+            const scraper = new FilterScraper({ filter }, [subScraper]);
+
+            const items = await scraper.extract(2);
+            assert.deepEqual(items, [{ foo: 2 }, { foo: 3 }]);
+        });
+    });
+});

From 1b14b3abf6f4b88ded0f354e2620c7d21ba45632 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Mon, 8 Jan 2024 18:24:17 +0100
Subject: [PATCH 11/38] =?UTF-8?q?chore:=20Mettre=20=C3=A0=20jour=20les=20d?=
 =?UTF-8?q?=C3=A9pendances.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/CODE_OF_CONDUCT.md                |    2 +-
 .github/ISSUE_TEMPLATE/bug_report.md      |    4 +-
 .github/ISSUE_TEMPLATE/feature_request.md |    4 +-
 .github/dependabot.yml                    |    8 +-
 .github/workflows/ci.yml                  |   36 +-
 .github/workflows/release.yml             |    3 +-
 .metalint/eslint.config.js                |  129 +-
 .metalint/markdownlint.config.js          |    5 +
 .metalint/npm-package-json-lint.config.js |    3 +
 .metalint/stylelint.config.js             |    1 +
 .stryker.config.js                        |    7 +-
 LICENSE                                   |    2 +-
 package-lock.json                         | 2397 +++++++++------------
 package.json                              |   44 +-
 src/extension/manifest.json               |    4 +-
 15 files changed, 1078 insertions(+), 1571 deletions(-)

diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
index 8ef718b..c2b2b62 100644
--- a/.github/CODE_OF_CONDUCT.md
+++ b/.github/CODE_OF_CONDUCT.md
@@ -52,7 +52,7 @@ decisions when appropriate.
 
 This Code of Conduct applies within all community spaces, and also applies when
 an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
+Examples of representing our community include using an official email address,
 posting via an official social media account, or acting as an appointed
 representative at an online or offline event.
 
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 0a9e385..127c9df 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -28,8 +28,8 @@ Steps to reproduce the behavior:
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.9.8 -->:
-- Browser version<!-- e.g. Chrome 117.0.5938.88, Firefox 117.0 -->:
+- Gout extension version<!-- e.g. 0.10.0 -->:
+- Browser version<!-- e.g. Chrome 120.0.6099.199, Firefox 121.0 -->:
 
 ### Additional context
 
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 6e3cf0f..3fe52d2 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -17,8 +17,8 @@ assignees: ""
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.9.8 -->:
-- Browser version<!-- e.g. Chrome 117.0.5938.88, Firefox 117.0 -->:
+- Gout extension version<!-- e.g. 0.10.0 -->:
+- Browser version<!-- e.g. Chrome 120.0.6099.199, Firefox 121.0 -->:
 
 ### Additional context
 
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index c9e3328..f9898ca 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,13 +1,13 @@
 version: 2
 updates:
-  - package-ecosystem: "npm"
+  - package-ecosystem: npm
     directory: "/"
     schedule:
-      interval: "weekly"
+      interval: weekly
     allow:
       - dependency-type: production
 
-  - package-ecosystem: "github-actions"
+  - package-ecosystem: github-actions
     directory: "/"
     schedule:
-      interval: "weekly"
+      interval: weekly
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index cd7a400..d39b059 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -9,16 +9,16 @@ jobs:
   lint:
     runs-on: ubuntu-latest
     steps:
-      - name: Setup Node.js
-        uses: actions/setup-node@v3
-        with:
-          node-version: 20
-
       - name: Checkout repository
         uses: actions/checkout@v4
         with:
           persist-credentials: false
 
+      - name: Setup Node.js
+        uses: actions/setup-node@v4
+        with:
+          node-version: 20
+
       - name: Install dependencies
         run: npm ci
 
@@ -28,16 +28,16 @@ jobs:
   test:
     runs-on: ubuntu-latest
     steps:
-      - name: Setup Node.js
-        uses: actions/setup-node@v3
-        with:
-          node-version: 20
-
       - name: Checkout repository
         uses: actions/checkout@v4
         with:
           persist-credentials: false
 
+      - name: Setup Node.js
+        uses: actions/setup-node@v4
+        with:
+          node-version: 20
+
       - name: Install dependencies
         run: npm ci
 
@@ -47,16 +47,16 @@ jobs:
   coverage:
     runs-on: ubuntu-latest
     steps:
-      - name: Setup Node.js
-        uses: actions/setup-node@v3
-        with:
-          node-version: 20
-
       - name: Checkout repository
         uses: actions/checkout@v4
         with:
           persist-credentials: false
 
+      - name: Setup Node.js
+        uses: actions/setup-node@v4
+        with:
+          node-version: 20
+
       - name: Install dependencies
         run: npm ci
 
@@ -78,9 +78,9 @@ jobs:
           persist-credentials: false
 
       - name: Initialize CodeQL
-        uses: github/codeql-action/init@v2
+        uses: github/codeql-action/init@v3
         with:
-          languages: "javascript"
+          languages: javascript
 
       - name: Perform CodeQL Analysis
-        uses: github/codeql-action/analyze@v2
+        uses: github/codeql-action/analyze@v3
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3ed542e..4d725af 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -11,7 +11,6 @@ jobs:
       pull-requests: write
     steps:
       - name: Run Release Please
-        uses: google-github-actions/release-please-action@v3
+        uses: google-github-actions/release-please-action@v4
         with:
           release-type: node
-          extra-files: src/extension/manifest.json
diff --git a/.metalint/eslint.config.js b/.metalint/eslint.config.js
index 554c27e..6aabe56 100644
--- a/.metalint/eslint.config.js
+++ b/.metalint/eslint.config.js
@@ -182,8 +182,6 @@ export default {
         "no-bitwise": "off",
         "no-caller": "error",
         "no-case-declarations": "error",
-        // Laisser Prettier gérer cette règle.
-        "no-confusing-arrow": "off",
         "no-console": "error",
         "no-continue": "off",
         "no-delete-var": "error",
@@ -198,10 +196,6 @@ export default {
         "no-extra-bind": "error",
         "no-extra-boolean-cast": "error",
         "no-extra-label": "error",
-        // Laisser Prettier gérer cette règle.
-        "no-extra-semi": "off",
-        // Laisser Prettier gérer cette règle.
-        "no-floating-decimal": "off",
         "no-global-assign": "error",
         "no-implicit-coercion": ["error", { disallowTemplateShorthand: true }],
         "no-implicit-globals": "error",
@@ -215,7 +209,6 @@ export default {
         "no-lonely-if": "error",
         "no-loop-func": "error",
         "no-magic-numbers": "off",
-        "no-mixed-operators": "off",
         "no-multi-assign": "error",
         "no-multi-str": "error",
         "no-negated-condition": "error",
@@ -291,8 +284,6 @@ export default {
         "no-with": "error",
         "object-shorthand": "error",
         "one-var": ["error", "never"],
-        // Laisser Prettier gérer cette règle.
-        "one-var-declaration-per-line": "off",
         "operator-assignment": "error",
         // Désactiver cette règle qui peut avoir des conflits avec Prettier.
         // https://github.com/prettier/eslint-plugin-prettier/issues/65
@@ -310,8 +301,6 @@ export default {
         "prefer-rest-params": "error",
         "prefer-spread": "error",
         "prefer-template": "off",
-        // Laisser Prettier gérer cette règle.
-        "quote-props": "off",
         radix: "error",
         "require-await": "error",
         "require-unicode-regexp": "error",
@@ -326,109 +315,14 @@ export default {
         ],
         "sort-keys": "off",
         "sort-vars": "off",
-        "spaced-comment": "error",
         strict: ["error", "never"],
         "symbol-description": "error",
         "vars-on-top": "off",
         yoda: ["error", "always"],
 
         // Layout & Formatting.
-        // Laisser Prettier gérer la majorité des règles de cette section.
-        // https://github.com/prettier/eslint-config-prettier
-        "array-bracket-newline": "off",
-        "array-bracket-spacing": "off",
-        "array-element-newline": "off",
-        "arrow-parens": "off",
-        "arrow-spacing": "off",
-        "block-spacing": "off",
-        "brace-style": "off",
-        "comma-dangle": "off",
-        "comma-spacing": "off",
-        "comma-style": "off",
-        "computed-property-spacing": "off",
-        "dot-location": "off",
-        "eol-last": "off",
-        "func-call-spacing": "off",
-        "function-call-argument-newline": "off",
-        "function-paren-newline": "off",
-        "generator-star-spacing": "off",
-        "implicit-arrow-linebreak": "off",
-        indent: "off",
-        "jsx-quotes": "off",
-        "key-spacing": "off",
-        "keyword-spacing": "off",
         "line-comment-position": "error",
-        "linebreak-style": "off",
-        "lines-around-comment": [
-            "error",
-            {
-                allowBlockStart: true,
-                allowObjectStart: true,
-                allowArrayStart: true,
-                afterHashbangComment: true,
-            },
-        ],
-        "lines-between-class-members": "error",
-        "max-len": [
-            "warn",
-            {
-                // Ignorer les imports et les déclarations de tests unitaires,
-                // car Prettier n'ajoute pas de retour à la ligne pour ne pas
-                // dépasser les 80 caractères.
-                ignorePattern:
-                    "^import " +
-                    "|^ +\\* @typedef \\{import\\(" +
-                    "|^ +\\* @see " +
-                    '|^ +it\\("',
-                // Ignorer les expressions rationnelles, car il n'est pas
-                // possible de les écrire sur plusieurs lignes.
-                ignoreRegExpLiterals: true,
-            },
-        ],
-        "max-statements-per-line": ["error", { max: 2 }],
-        "multiline-ternary": "off",
-        "new-parens": "off",
-        "newline-per-chained-call": "off",
-        "no-extra-parens": "off",
-        "no-mixed-spaces-and-tabs": "off",
-        "no-multi-spaces": "off",
-        "no-multiple-empty-lines": "off",
-        // Activer cette règle, car Prettier garde des tabulations (par exemple
-        // dans les chaines de caractères).
-        "no-tabs": "error",
-        "no-trailing-spaces": "off",
-        "no-whitespace-before-property": "off",
-        "nonblock-statement-body-position": "off",
-        "object-curly-newline": "off",
-        "object-curly-spacing": "off",
-        "object-property-newline": "off",
-        "operator-linebreak": "off",
-        "padded-blocks": "off",
-        "padding-line-between-statements": [
-            "error",
-            {
-                blankLine: "always",
-                prev: "directive",
-                next: "*",
-            },
-        ],
-        quotes: ["error", "double", { avoidEscape: true }],
-        "rest-spread-spacing": "off",
-        semi: "off",
-        "semi-spacing": "off",
-        "semi-style": "off",
-        "space-before-blocks": "off",
-        "space-before-function-paren": "off",
-        "space-in-parens": "off",
-        "space-infix-ops": "off",
-        "space-unary-ops": "off",
-        "switch-colon-spacing": "off",
-        "template-curly-spacing": "off",
-        "template-tag-spacing": "off",
-        "unicode-bom": "off",
-        "wrap-iife": "off",
-        "wrap-regex": "off",
-        "yield-star-spacing": "off",
+        "unicode-bom": "error",
 
         // Plugin eslint-plugin-array-func.
         "array-func/from-map": "error",
@@ -531,10 +425,16 @@ export default {
         "import/first": "error",
         "import/group-exports": "off",
         "import/max-dependencies": "off",
-        // Ne pas activer l'option "considerComments", car les commentaires
-        // entre les imports ne sont pas gérés.
-        // https://github.com/import-js/eslint-plugin-import/issues/2673
-        "import/newline-after-import": ["error", { considerComments: false }],
+        "import/newline-after-import": [
+            "error",
+            {
+                // Ne pas activer ces options, car les commentaires entre les
+                // imports ne sont pas gérés.
+                // https://github.com/import-js/eslint-plugin-import/issues/2673
+                exactCount: false,
+                considerComments: false,
+            },
+        ],
         "import/no-anonymous-default-export": [
             "error",
             {
@@ -686,6 +586,7 @@ export default {
         "regexp/control-character-escape": "error",
         "regexp/negation": "error",
         "regexp/no-dupe-characters-character-class": "error",
+        "regexp/no-empty-string-literal": "error",
         "regexp/no-extra-lookaround-assertions": "error",
         "regexp/no-invisible-character": "error",
         "regexp/no-legacy-features": "error",
@@ -701,6 +602,8 @@ export default {
         "regexp/no-useless-lazy": "error",
         "regexp/no-useless-quantifier": "error",
         "regexp/no-useless-range": "error",
+        "regexp/no-useless-set-operand": "error",
+        "regexp/no-useless-string-literal": "error",
         "regexp/no-useless-two-nums-quantifier": "error",
         "regexp/no-zero-quantifier": "error",
         "regexp/optimal-lookaround-quantifier": "error",
@@ -711,11 +614,14 @@ export default {
         "regexp/prefer-range": "error",
         "regexp/prefer-regexp-exec": "error",
         "regexp/prefer-regexp-test": "error",
+        "regexp/prefer-set-operation": "error",
         "regexp/require-unicode-regexp": "error",
+        "regexp/simplify-set-operations": "error",
         "regexp/sort-alternatives": "error",
         "regexp/use-ignore-case": "error",
 
         // Stylistic Issues.
+        "regexp/grapheme-string-literal": "error",
         "regexp/hexadecimal-escape": "off",
         "regexp/letter-case": [
             "error",
@@ -791,6 +697,7 @@ export default {
             { checkGlobalVariables: true },
         ],
         "unicorn/no-unnecessary-await": "error",
+        "unicorn/no-unnecessary-polyfills": "error",
         "unicorn/no-unreadable-array-destructuring": "error",
         "unicorn/no-unreadable-iife": "error",
         "unicorn/no-unused-properties": "error",
diff --git a/.metalint/markdownlint.config.js b/.metalint/markdownlint.config.js
index 39fd2a6..a28fe1d 100644
--- a/.metalint/markdownlint.config.js
+++ b/.metalint/markdownlint.config.js
@@ -52,6 +52,7 @@ export default {
             "JSON",
             "Markdown",
             "Shell",
+            "YAML",
         ],
         // eslint-disable-next-line camelcase
         language_only: true,
@@ -69,4 +70,8 @@ export default {
     "link-fragments": true,
     "reference-links-images": true,
     "link-image-reference-definitions": true,
+    // eslint-disable-next-line camelcase
+    "link-image-style": { shortcut: false, url_inline: false },
+    "table-pipe-style": { style: "leading_and_trailing" },
+    "table-column-count": true,
 };
diff --git a/.metalint/npm-package-json-lint.config.js b/.metalint/npm-package-json-lint.config.js
index 07a0d10..58bbef8 100644
--- a/.metalint/npm-package-json-lint.config.js
+++ b/.metalint/npm-package-json-lint.config.js
@@ -37,6 +37,7 @@ export default {
         "require-repository-directory": "off",
         "require-repository": "error",
         "require-scripts": "error",
+        "require-type": "error",
         "require-types": "off",
         "require-typings": "off",
         "require-version": "error",
@@ -65,6 +66,7 @@ export default {
         "private-type": "error",
         "repository-type": "error",
         "scripts-type": "error",
+        "type-type": "error",
         "version-type": "error",
 
         // Valid value rules.
@@ -74,6 +76,7 @@ export default {
         "valid-values-name-scope": "off",
         "valid-values-private": "off",
         "valid-values-publishConfig": "off",
+        "valid-values-type": ["error", ["module"]],
 
         // Dependency rules.
         "no-repeated-dependencies": "error",
diff --git a/.metalint/stylelint.config.js b/.metalint/stylelint.config.js
index 41eee34..4486a97 100644
--- a/.metalint/stylelint.config.js
+++ b/.metalint/stylelint.config.js
@@ -186,6 +186,7 @@ export default {
         "hue-degree-notation": "angle",
         "import-notation": "string",
         "keyframe-selector-notation": "keyword",
+        "lightness-notation": "percentage",
         "media-feature-range-notation": "context",
         "selector-not-notation": "complex",
         "selector-pseudo-element-colon-notation": "double",
diff --git a/.stryker.config.js b/.stryker.config.js
index 93cc264..7a156e2 100644
--- a/.stryker.config.js
+++ b/.stryker.config.js
@@ -13,12 +13,7 @@ export default {
     incrementalFile: ".stryker/incremental.json",
     ignoreStatic: true,
     mochaOptions: { config: "test/unit/mocharc.json" },
-    mutate: [
-        "src/**/*.js",
-        "!src/extension/**",
-        "!src/module/**",
-        "!src/scraper/**",
-    ],
+    mutate: ["src/**/*.js", "!src/extension/**", "!src/module/**"],
     reporters: ["dots", "clear-text"],
     tempDirName: ".stryker/tmp/",
     testRunner: "mocha",
diff --git a/LICENSE b/LICENSE
index 15b9c1b..c8564f6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2013-2023 Sébastien Règne
+Copyright (c) 2013-2024 Sébastien Règne
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/package-lock.json b/package-lock.json
index 0cd3276..dce630f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,39 +14,39 @@
       },
       "devDependencies": {
         "@prantlf/jsonlint": "14.0.3",
-        "@prettier/plugin-xml": "3.2.1",
-        "@stryker-mutator/core": "7.1.1",
-        "@stryker-mutator/mocha-runner": "7.1.1",
-        "@types/mocha": "10.0.1",
-        "addons-linter": "6.14.0",
-        "eslint": "8.50.0",
+        "@prettier/plugin-xml": "3.2.2",
+        "@stryker-mutator/core": "8.0.0",
+        "@stryker-mutator/mocha-runner": "8.0.0",
+        "@types/mocha": "10.0.6",
+        "addons-linter": "6.19.0",
+        "eslint": "8.56.0",
         "eslint-plugin-array-func": "4.0.0",
         "eslint-plugin-eslint-comments": "3.2.0",
-        "eslint-plugin-import": "2.28.1",
-        "eslint-plugin-jsdoc": "46.8.2",
-        "eslint-plugin-mocha": "10.1.0",
-        "eslint-plugin-n": "16.1.0",
+        "eslint-plugin-import": "2.29.1",
+        "eslint-plugin-jsdoc": "48.0.2",
+        "eslint-plugin-mocha": "10.2.0",
+        "eslint-plugin-n": "16.6.1",
         "eslint-plugin-no-unsanitized": "4.0.2",
         "eslint-plugin-promise": "6.1.1",
-        "eslint-plugin-regexp": "1.15.0",
-        "eslint-plugin-unicorn": "48.0.1",
+        "eslint-plugin-regexp": "2.2.0",
+        "eslint-plugin-unicorn": "50.0.1",
         "htmlhint": "1.1.4",
         "http-server": "14.1.1",
-        "markdownlint": "0.31.1",
-        "metalint": "0.14.1",
+        "markdownlint": "0.33.0",
+        "metalint": "0.15.0",
         "mocha": "10.2.0",
-        "npm-package-json-lint": "7.0.0",
-        "prettier": "3.0.3",
+        "npm-package-json-lint": "7.1.0",
+        "prettier": "3.1.1",
         "purgecss": "5.0.0",
-        "stylelint": "15.10.3",
-        "stylelint-order": "6.0.3",
-        "typedoc": "0.25.1",
-        "typescript": "5.2.2",
-        "web-ext": "7.7.0",
+        "stylelint": "16.1.0",
+        "stylelint-order": "6.0.4",
+        "typedoc": "0.25.7",
+        "typescript": "5.3.3",
+        "web-ext": "7.9.0",
         "yaml-lint": "1.7.0"
       },
       "engines": {
-        "node": ">=20.0.0"
+        "node": ">=20.6.0"
       },
       "funding": {
         "url": "https://www.paypal.me/sebastienregne"
@@ -75,12 +75,12 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.22.13",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
-      "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+      "version": "7.23.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+      "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
       "dev": true,
       "dependencies": {
-        "@babel/highlight": "^7.22.13",
+        "@babel/highlight": "^7.23.4",
         "chalk": "^2.4.2"
       },
       "engines": {
@@ -159,31 +159,31 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
-      "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
+      "version": "7.23.5",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
+      "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz",
-      "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==",
+      "version": "7.23.7",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
+      "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.22.13",
-        "@babel/generator": "^7.22.15",
-        "@babel/helper-compilation-targets": "^7.22.15",
-        "@babel/helper-module-transforms": "^7.22.20",
-        "@babel/helpers": "^7.22.15",
-        "@babel/parser": "^7.22.16",
+        "@babel/code-frame": "^7.23.5",
+        "@babel/generator": "^7.23.6",
+        "@babel/helper-compilation-targets": "^7.23.6",
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helpers": "^7.23.7",
+        "@babel/parser": "^7.23.6",
         "@babel/template": "^7.22.15",
-        "@babel/traverse": "^7.22.20",
-        "@babel/types": "^7.22.19",
-        "convert-source-map": "^1.7.0",
+        "@babel/traverse": "^7.23.7",
+        "@babel/types": "^7.23.6",
+        "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
         "json5": "^2.2.3",
@@ -207,12 +207,12 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
-      "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
+      "version": "7.23.6",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+      "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.15",
+        "@babel/types": "^7.23.6",
         "@jridgewell/gen-mapping": "^0.3.2",
         "@jridgewell/trace-mapping": "^0.3.17",
         "jsesc": "^2.5.1"
@@ -234,14 +234,14 @@
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
-      "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
+      "version": "7.23.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+      "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.22.9",
-        "@babel/helper-validator-option": "^7.22.15",
-        "browserslist": "^4.21.9",
+        "@babel/compat-data": "^7.23.5",
+        "@babel/helper-validator-option": "^7.23.5",
+        "browserslist": "^4.22.2",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -259,17 +259,17 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz",
-      "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==",
+      "version": "7.23.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz",
+      "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-environment-visitor": "^7.22.5",
-        "@babel/helper-function-name": "^7.22.5",
-        "@babel/helper-member-expression-to-functions": "^7.22.15",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-member-expression-to-functions": "^7.23.0",
         "@babel/helper-optimise-call-expression": "^7.22.5",
-        "@babel/helper-replace-supers": "^7.22.9",
+        "@babel/helper-replace-supers": "^7.22.20",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
         "@babel/helper-split-export-declaration": "^7.22.6",
         "semver": "^6.3.1"
@@ -300,13 +300,13 @@
       }
     },
     "node_modules/@babel/helper-function-name": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
-      "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+      "version": "7.23.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.22.5",
-        "@babel/types": "^7.22.5"
+        "@babel/template": "^7.22.15",
+        "@babel/types": "^7.23.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -325,12 +325,12 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz",
-      "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==",
+      "version": "7.23.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
+      "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.22.15"
+        "@babel/types": "^7.23.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -349,9 +349,9 @@
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz",
-      "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==",
+      "version": "7.23.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+      "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
       "dev": true,
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.22.20",
@@ -442,9 +442,9 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
-      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+      "version": "7.23.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+      "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -460,32 +460,32 @@
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
-      "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
+      "version": "7.23.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+      "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
-      "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
+      "version": "7.23.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz",
+      "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==",
       "dev": true,
       "dependencies": {
         "@babel/template": "^7.22.15",
-        "@babel/traverse": "^7.22.15",
-        "@babel/types": "^7.22.15"
+        "@babel/traverse": "^7.23.7",
+        "@babel/types": "^7.23.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
-      "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+      "version": "7.23.4",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+      "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
       "dev": true,
       "dependencies": {
         "@babel/helper-validator-identifier": "^7.22.20",
@@ -568,9 +568,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.22.16",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
-      "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
+      "version": "7.23.6",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+      "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -579,51 +579,15 @@
         "node": ">=6.0.0"
       }
     },
-    "node_modules/@babel/plugin-proposal-class-properties": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
-      "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
-      "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.15.tgz",
-      "integrity": "sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg==",
+      "version": "7.23.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz",
+      "integrity": "sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-create-class-features-plugin": "^7.23.7",
         "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/helper-replace-supers": "^7.22.9",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/plugin-syntax-decorators": "^7.22.10"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-proposal-private-methods": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
-      "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
-      "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/plugin-syntax-decorators": "^7.23.3"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -633,9 +597,9 @@
       }
     },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.22.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz",
-      "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==",
+      "version": "7.23.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz",
+      "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==",
       "dev": true,
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.22.5"
@@ -648,9 +612,9 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
-      "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
+      "version": "7.23.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
+      "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
       "dev": true,
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.22.5"
@@ -663,9 +627,9 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
-      "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
+      "version": "7.23.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
+      "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
       "dev": true,
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.22.5"
@@ -678,12 +642,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz",
-      "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==",
+      "version": "7.23.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
+      "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.22.15",
+        "@babel/helper-module-transforms": "^7.23.3",
         "@babel/helper-plugin-utils": "^7.22.5",
         "@babel/helper-simple-access": "^7.22.5"
       },
@@ -695,15 +659,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz",
-      "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==",
+      "version": "7.23.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz",
+      "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-create-class-features-plugin": "^7.23.6",
         "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/plugin-syntax-typescript": "^7.22.5"
+        "@babel/plugin-syntax-typescript": "^7.23.3"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -713,16 +677,16 @@
       }
     },
     "node_modules/@babel/preset-typescript": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz",
-      "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==",
+      "version": "7.23.3",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz",
+      "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==",
       "dev": true,
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.22.5",
         "@babel/helper-validator-option": "^7.22.15",
-        "@babel/plugin-syntax-jsx": "^7.22.5",
-        "@babel/plugin-transform-modules-commonjs": "^7.22.15",
-        "@babel/plugin-transform-typescript": "^7.22.15"
+        "@babel/plugin-syntax-jsx": "^7.23.3",
+        "@babel/plugin-transform-modules-commonjs": "^7.23.3",
+        "@babel/plugin-transform-typescript": "^7.23.3"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -758,20 +722,20 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz",
-      "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==",
+      "version": "7.23.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
+      "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "^7.22.13",
-        "@babel/generator": "^7.22.15",
+        "@babel/code-frame": "^7.23.5",
+        "@babel/generator": "^7.23.6",
         "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-function-name": "^7.23.0",
         "@babel/helper-hoist-variables": "^7.22.5",
         "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/parser": "^7.22.16",
-        "@babel/types": "^7.22.19",
-        "debug": "^4.1.0",
+        "@babel/parser": "^7.23.6",
+        "@babel/types": "^7.23.6",
+        "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -779,13 +743,13 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.22.19",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz",
-      "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==",
+      "version": "7.23.6",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+      "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-string-parser": "^7.22.5",
-        "@babel/helper-validator-identifier": "^7.22.19",
+        "@babel/helper-string-parser": "^7.23.4",
+        "@babel/helper-validator-identifier": "^7.22.20",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -793,9 +757,9 @@
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz",
-      "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==",
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz",
+      "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==",
       "dev": true,
       "funding": [
         {
@@ -811,13 +775,13 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.2.0"
+        "@csstools/css-tokenizer": "^2.2.3"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz",
-      "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==",
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz",
+      "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==",
       "dev": true,
       "funding": [
         {
@@ -834,9 +798,9 @@
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz",
-      "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==",
+      "version": "2.1.7",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.7.tgz",
+      "integrity": "sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==",
       "dev": true,
       "funding": [
         {
@@ -852,14 +816,14 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.3.1",
-        "@csstools/css-tokenizer": "^2.2.0"
+        "@csstools/css-parser-algorithms": "^2.5.0",
+        "@csstools/css-tokenizer": "^2.2.3"
       }
     },
     "node_modules/@csstools/selector-specificity": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz",
-      "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz",
+      "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==",
       "dev": true,
       "funding": [
         {
@@ -927,12 +891,12 @@
       }
     },
     "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.40.1",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz",
-      "integrity": "sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==",
+      "version": "0.41.0",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz",
+      "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==",
       "dev": true,
       "dependencies": {
-        "comment-parser": "1.4.0",
+        "comment-parser": "1.4.1",
         "esquery": "^1.5.0",
         "jsdoc-type-pratt-parser": "~4.0.0"
       },
@@ -956,18 +920,18 @@
       }
     },
     "node_modules/@eslint-community/regexpp": {
-      "version": "4.8.1",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz",
-      "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==",
+      "version": "4.10.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+      "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
       "dev": true,
       "engines": {
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
-      "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
       "dev": true,
       "dependencies": {
         "ajv": "^6.12.4",
@@ -1014,9 +978,9 @@
       }
     },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.22.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
-      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -1059,9 +1023,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "8.50.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz",
-      "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==",
+      "version": "8.56.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
+      "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1078,12 +1042,12 @@
       }
     },
     "node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.11",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
-      "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
+      "version": "0.11.13",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+      "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
       "dev": true,
       "dependencies": {
-        "@humanwhocodes/object-schema": "^1.2.1",
+        "@humanwhocodes/object-schema": "^2.0.1",
         "debug": "^4.1.1",
         "minimatch": "^3.0.5"
       },
@@ -1127,9 +1091,9 @@
       }
     },
     "node_modules/@humanwhocodes/object-schema": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+      "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
       "dev": true
     },
     "node_modules/@isaacs/cliui": {
@@ -1267,9 +1231,9 @@
       "dev": true
     },
     "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.19",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
-      "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+      "version": "0.3.20",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+      "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
       "dev": true,
       "dependencies": {
         "@jridgewell/resolve-uri": "^3.1.0",
@@ -1277,18 +1241,21 @@
       }
     },
     "node_modules/@ljharb/through": {
-      "version": "2.3.9",
-      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.9.tgz",
-      "integrity": "sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==",
+      "version": "2.3.11",
+      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz",
+      "integrity": "sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==",
       "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
       "engines": {
         "node": ">= 0.4"
       }
     },
     "node_modules/@mdn/browser-compat-data": {
-      "version": "5.3.15",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.15.tgz",
-      "integrity": "sha512-h/luqw9oAmMF1C/GuUY/PAgZlF4wx71q2bdH+ct8vmjcvseCY32au8XmYy7xZ8l5VJiY/3ltFpr5YiO55v0mzg==",
+      "version": "5.4.3",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.4.3.tgz",
+      "integrity": "sha512-+VnaO5zYUwFQVuRqp2qLPGR5GwhhJ/lrp0yEmamJ/nI15P2GKwGBEWRDiITZR8i6AYxeiQSu2rOi/gqxehnPuA==",
       "dev": true
     },
     "node_modules/@nodelib/fs.scandir": {
@@ -1397,9 +1364,9 @@
       }
     },
     "node_modules/@prettier/plugin-xml": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.2.1.tgz",
-      "integrity": "sha512-DvwnQPf8FsczapBVDm54IhR+Pryt3DbPZSNtUb9gOuFtgoUUPbPN69f3nQBMF5BEqh4ZjZjTaHBmsVno3UnAXQ==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.2.2.tgz",
+      "integrity": "sha512-SoE70SQF1AKIvK7LVK80JcdAe6wrDcbodFFjcoqb1FkOqV0G0oSlgAFDwoRXPqkUE5p/YF2nGsnUbnfm6471sw==",
       "dev": true,
       "dependencies": {
         "@xml-tools/parser": "^1.0.11"
@@ -1421,53 +1388,52 @@
       }
     },
     "node_modules/@stryker-mutator/api": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-7.1.1.tgz",
-      "integrity": "sha512-LqCO/UbMxPmr26LbFHSgKpHh3sKROPwjhiQlB3p962u3Z424xHE6jdkt+1wdTNxM1ycCK+GpHeCo6iiXkEBipw==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-8.0.0.tgz",
+      "integrity": "sha512-4R8yieczpgOrOBQYq1d1aRJLcgenltpMH9ugtIYPPVmENFUo+mWm9HmaahLe+TVHnJSb4OZ4lvI7dVIhoBaiSQ==",
       "dev": true,
       "dependencies": {
-        "mutation-testing-metrics": "2.0.1",
-        "mutation-testing-report-schema": "2.0.1",
+        "mutation-testing-metrics": "3.0.0",
+        "mutation-testing-report-schema": "3.0.0",
         "tslib": "~2.6.0",
         "typed-inject": "~4.0.0"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=18.0.0"
       }
     },
     "node_modules/@stryker-mutator/core": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-7.1.1.tgz",
-      "integrity": "sha512-E+SLgxfZwcx14sce72G+bTFDBN7at4QiRrBVTV8nXILShyAfvWSQu56Yu3VTsbAKJZAJO+LkNYbyO+ZtmsCwow==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-8.0.0.tgz",
+      "integrity": "sha512-dyPs60wtLS9vgghgL5a49k/7KOovOnavXzm5SIBBsBJuxoO+5rvGXRohZaqSoZdb0yWIvp+LFdu6qWcdlJPkoQ==",
       "dev": true,
       "dependencies": {
-        "@stryker-mutator/api": "7.1.1",
-        "@stryker-mutator/instrumenter": "7.1.1",
-        "@stryker-mutator/util": "7.1.1",
+        "@stryker-mutator/api": "8.0.0",
+        "@stryker-mutator/instrumenter": "8.0.0",
+        "@stryker-mutator/util": "8.0.0",
         "ajv": "~8.12.0",
         "chalk": "~5.3.0",
-        "commander": "~11.0.0",
+        "commander": "~11.1.0",
         "diff-match-patch": "1.0.5",
-        "emoji-regex": "~10.2.1",
-        "execa": "~7.1.0",
+        "emoji-regex": "~10.3.0",
+        "execa": "~8.0.0",
         "file-url": "~4.0.0",
         "get-port": "~7.0.0",
         "glob": "~10.3.0",
         "inquirer": "~9.2.0",
-        "lodash.flatmap": "~4.5.0",
         "lodash.groupby": "~4.6.0",
         "log4js": "~6.9.0",
         "minimatch": "~9.0.1",
-        "mutation-testing-elements": "2.0.1",
-        "mutation-testing-metrics": "2.0.1",
-        "mutation-testing-report-schema": "2.0.1",
+        "mutation-testing-elements": "3.0.1",
+        "mutation-testing-metrics": "3.0.0",
+        "mutation-testing-report-schema": "3.0.0",
         "npm-run-path": "~5.1.0",
         "progress": "~2.0.0",
         "rxjs": "~7.8.0",
         "semver": "^7.3.5",
         "source-map": "~0.7.3",
         "tree-kill": "~1.2.2",
-        "tslib": "2.6.0",
+        "tslib": "2.6.2",
         "typed-inject": "~4.0.0",
         "typed-rest-client": "~1.8.0"
       },
@@ -1475,57 +1441,53 @@
         "stryker": "bin/stryker.js"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=18.0.0"
       }
     },
     "node_modules/@stryker-mutator/instrumenter": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-7.1.1.tgz",
-      "integrity": "sha512-z1p7HMPvxWH/QVeanLpwt1B+LtwFRdd5GcR8Lx+REBAL8cAjzo8/DOYJ5BJp20ab7ZpbID8fPjIKr/P+Im/qGQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "~7.22.0",
-        "@babel/generator": "~7.22.0",
-        "@babel/parser": "~7.22.0",
-        "@babel/plugin-proposal-class-properties": "~7.18.0",
-        "@babel/plugin-proposal-decorators": "~7.22.0",
-        "@babel/plugin-proposal-private-methods": "~7.18.0",
-        "@babel/preset-typescript": "~7.22.0",
-        "@stryker-mutator/api": "7.1.1",
-        "@stryker-mutator/util": "7.1.1",
-        "angular-html-parser": "~4.0.0",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-8.0.0.tgz",
+      "integrity": "sha512-kS3BdpqDuJeRBDBw2eP68rhUrgtlT5EGERNOwCwUGpfTtUan7y2zX9ZGEblOtMI5yTtyBArFZMtwhPGi+waJ/Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/core": "~7.23.0",
+        "@babel/generator": "~7.23.0",
+        "@babel/parser": "~7.23.0",
+        "@babel/plugin-proposal-decorators": "~7.23.0",
+        "@babel/preset-typescript": "~7.23.0",
+        "@stryker-mutator/api": "8.0.0",
+        "@stryker-mutator/util": "8.0.0",
+        "angular-html-parser": "~5.0.0",
+        "semver": "~7.5.4",
         "weapon-regex": "~1.1.0"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=18.0.0"
       }
     },
     "node_modules/@stryker-mutator/mocha-runner": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-7.1.1.tgz",
-      "integrity": "sha512-IO37Efu3KN7A3gigIp/iI5d6bEMwFwb4ZhjUedtvxEcXxxfmcGvKKR4yan4a+lT1CXvZIZLzOM+oS2zc2hsprw==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-8.0.0.tgz",
+      "integrity": "sha512-23qNT78l68d/OBrq64UDCKBoYDc+PMbmvTTYrQcCDRKaRn97wEG44ADR+ebqxdEUnV1iiqUXkVMki3jRuYk8gw==",
       "dev": true,
       "dependencies": {
-        "@stryker-mutator/api": "7.1.1",
-        "@stryker-mutator/util": "7.1.1",
+        "@stryker-mutator/api": "8.0.0",
+        "@stryker-mutator/util": "8.0.0",
         "tslib": "~2.6.0"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=18.0.0"
       },
       "peerDependencies": {
-        "@stryker-mutator/core": "~7.1.0",
+        "@stryker-mutator/core": "~8.0.0",
         "mocha": ">= 7.2 < 11"
       }
     },
     "node_modules/@stryker-mutator/util": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-7.1.1.tgz",
-      "integrity": "sha512-LIV7vVrC7dT04BDYZEYkYmetN7WQqD9xiQJRpkrYgACPGdu3eAAfk8UwRSoXAgMqAfZnYC2c+0BuliS8jDdBoQ==",
-      "dev": true,
-      "dependencies": {
-        "lodash.flatmap": "~4.5.0"
-      }
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-8.0.0.tgz",
+      "integrity": "sha512-geb2JvbYXDs6vOjGV9514PK+L6NiYFQIYhkpKvzfZQWYijNYnLhxXKz/X264a9StTYbGb/ZBADOkzsVde/5zig==",
+      "dev": true
     },
     "node_modules/@szmarczak/http-timer": {
       "version": "5.0.1",
@@ -1540,9 +1502,9 @@
       }
     },
     "node_modules/@types/http-cache-semantics": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz",
-      "integrity": "sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==",
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+      "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
       "dev": true
     },
     "node_modules/@types/json5": {
@@ -1558,38 +1520,47 @@
       "dev": true
     },
     "node_modules/@types/minimist": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
-      "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
       "dev": true
     },
     "node_modules/@types/mocha": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz",
-      "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==",
+      "version": "10.0.6",
+      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz",
+      "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==",
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "20.6.3",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz",
-      "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==",
-      "dev": true
+      "version": "20.10.7",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz",
+      "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==",
+      "dev": true,
+      "dependencies": {
+        "undici-types": "~5.26.4"
+      }
     },
     "node_modules/@types/normalize-package-data": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-      "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+      "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
       "dev": true
     },
     "node_modules/@types/yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
+      "version": "2.10.3",
+      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+      "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
       "dev": true,
       "dependencies": {
         "@types/node": "*"
       }
     },
+    "node_modules/@ungap/structured-clone": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+      "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+      "dev": true
+    },
     "node_modules/@xml-tools/parser": {
       "version": "1.0.11",
       "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz",
@@ -1612,9 +1583,9 @@
       }
     },
     "node_modules/acorn": {
-      "version": "8.10.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
-      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+      "version": "8.11.3",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
       "dev": true,
       "bin": {
         "acorn": "bin/acorn"
@@ -1633,35 +1604,35 @@
       }
     },
     "node_modules/addons-linter": {
-      "version": "6.14.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.14.0.tgz",
-      "integrity": "sha512-dgYdML/EoxLhJKt9KL7KTWbb43r2ZDRYQGIv9V1Mf69pBIKhrWr1IIxVDVWrl0b3GuWsFtSBs0iHMsmJxAdvng==",
+      "version": "6.19.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.19.0.tgz",
+      "integrity": "sha512-Yz5YRfIQ12dIqXKmEoHNwoS/L1xIve2hdm9UEesOEsov5W0zeWMOWCnqdvJNVNy7f1FnPu1lnqzylelkTBS7dA==",
       "dev": true,
       "dependencies": {
         "@fluent/syntax": "0.19.0",
-        "@mdn/browser-compat-data": "5.3.15",
+        "@mdn/browser-compat-data": "5.4.3",
         "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "9.4.0",
+        "addons-scanner-utils": "9.8.0",
         "ajv": "8.12.0",
         "chalk": "4.1.2",
         "cheerio": "1.0.0-rc.12",
         "columnify": "1.6.0",
         "common-tags": "1.8.2",
         "deepmerge": "4.3.1",
-        "eslint": "8.49.0",
+        "eslint": "8.55.0",
         "eslint-plugin-no-unsanitized": "4.0.2",
         "eslint-visitor-keys": "3.4.3",
         "espree": "9.6.1",
         "esprima": "4.0.1",
         "fast-json-patch": "3.1.1",
-        "glob": "10.3.4",
+        "glob": "10.3.10",
         "image-size": "1.0.2",
         "is-mergeable-object": "1.1.1",
         "jed": "1.1.1",
         "json-merge-patch": "1.0.2",
         "os-locale": "5.0.0",
-        "pino": "8.15.1",
-        "postcss": "8.4.29",
+        "pino": "8.16.2",
+        "postcss": "8.4.32",
         "relaxed-json": "1.0.3",
         "semver": "7.5.4",
         "sha.js": "2.4.11",
@@ -1679,9 +1650,9 @@
       }
     },
     "node_modules/addons-linter/node_modules/@eslint/js": {
-      "version": "8.49.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz",
-      "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==",
+      "version": "8.55.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz",
+      "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1714,18 +1685,19 @@
       }
     },
     "node_modules/addons-linter/node_modules/eslint": {
-      "version": "8.49.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz",
-      "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==",
+      "version": "8.55.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz",
+      "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.2",
-        "@eslint/js": "8.49.0",
-        "@humanwhocodes/config-array": "^0.11.11",
+        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/js": "8.55.0",
+        "@humanwhocodes/config-array": "^0.11.13",
         "@humanwhocodes/module-importer": "^1.0.1",
         "@nodelib/fs.walk": "^1.2.8",
+        "@ungap/structured-clone": "^1.2.0",
         "ajv": "^6.12.4",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
@@ -1783,44 +1755,10 @@
         "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/addons-linter/node_modules/eslint/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/addons-linter/node_modules/glob": {
-      "version": "10.3.4",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz",
-      "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==",
-      "dev": true,
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^2.0.3",
-        "minimatch": "^9.0.1",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
-        "path-scurry": "^1.10.1"
-      },
-      "bin": {
-        "glob": "dist/cjs/src/bin.js"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
     "node_modules/addons-linter/node_modules/globals": {
-      "version": "13.22.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
-      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -1838,6 +1776,18 @@
       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
       "dev": true
     },
+    "node_modules/addons-linter/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/addons-linter/node_modules/supports-color": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -1869,12 +1819,12 @@
       "dev": true
     },
     "node_modules/addons-scanner-utils": {
-      "version": "9.4.0",
-      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.4.0.tgz",
-      "integrity": "sha512-XJpygYD1mYIDJ9BRnPK1FRfBiIybuzG2R8SHzPeuG76Uy78UR4+W28g1ifKBmy+nlI9yQ/AwooqbIuPxAlnAew==",
+      "version": "9.8.0",
+      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.8.0.tgz",
+      "integrity": "sha512-nJJ4QazrtMImyb2OK9SGZlNtinNu25dzOR0lhWthhJQN2iDOf3yqHdSiVBEeZvCwuT/sS1cU6me4O4kgEATjFQ==",
       "dev": true,
       "dependencies": {
-        "@types/yauzl": "2.10.0",
+        "@types/yauzl": "2.10.3",
         "common-tags": "1.8.2",
         "first-chunk-stream": "3.0.0",
         "strip-bom-stream": "4.0.0",
@@ -1951,12 +1901,12 @@
       }
     },
     "node_modules/angular-html-parser": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/angular-html-parser/-/angular-html-parser-4.0.1.tgz",
-      "integrity": "sha512-x9SLf2jNNh3nG+haVIwKX/GVW8PcvSRmkeT9WqTDYSAVuwT9IzwEyVm09FCZpOo/dtFRxE9vaNXqcAf/MIxphg==",
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/angular-html-parser/-/angular-html-parser-5.0.2.tgz",
+      "integrity": "sha512-fov2PwgZDgDsvZXPRa0+lbJyakOZOlFb5eiACR2i6RSn9ad5A+84/SwVfj/dUCbUAHH1ta2uvaoAKEijG93Sfg==",
       "dev": true,
       "dependencies": {
-        "tslib": "^2.5.0"
+        "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">= 14"
@@ -2513,9 +2463,9 @@
       "dev": true
     },
     "node_modules/browserslist": {
-      "version": "4.21.11",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz",
-      "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==",
+      "version": "4.22.2",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+      "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
       "dev": true,
       "funding": [
         {
@@ -2532,9 +2482,9 @@
         }
       ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001538",
-        "electron-to-chromium": "^1.4.526",
-        "node-releases": "^2.0.13",
+        "caniuse-lite": "^1.0.30001565",
+        "electron-to-chromium": "^1.4.601",
+        "node-releases": "^2.0.14",
         "update-browserslist-db": "^1.0.13"
       },
       "bin": {
@@ -2638,12 +2588,12 @@
       }
     },
     "node_modules/cacheable-request": {
-      "version": "10.2.13",
-      "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.13.tgz",
-      "integrity": "sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==",
+      "version": "10.2.14",
+      "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
+      "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
       "dev": true,
       "dependencies": {
-        "@types/http-cache-semantics": "^4.0.1",
+        "@types/http-cache-semantics": "^4.0.2",
         "get-stream": "^6.0.1",
         "http-cache-semantics": "^4.1.1",
         "keyv": "^4.5.3",
@@ -2655,14 +2605,27 @@
         "node": ">=14.16"
       }
     },
+    "node_modules/cacheable-request/node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+      "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
       "dev": true,
       "dependencies": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.1",
+        "set-function-length": "^1.1.1"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -2704,9 +2667,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001538",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz",
-      "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==",
+      "version": "1.0.30001576",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz",
+      "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==",
       "dev": true,
       "funding": [
         {
@@ -2852,9 +2815,9 @@
       }
     },
     "node_modules/ci-info": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
-      "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
+      "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
       "dev": true,
       "funding": [
         {
@@ -2912,9 +2875,9 @@
       }
     },
     "node_modules/cli-spinners": {
-      "version": "2.9.1",
-      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz",
-      "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==",
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+      "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
       "dev": true,
       "engines": {
         "node": ">=6"
@@ -3022,18 +2985,18 @@
       }
     },
     "node_modules/commander": {
-      "version": "11.0.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz",
-      "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==",
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+      "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
       "dev": true,
       "engines": {
         "node": ">=16"
       }
     },
     "node_modules/comment-parser": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz",
-      "integrity": "sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
+      "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
       "dev": true,
       "engines": {
         "node": ">= 12.0.0"
@@ -3128,6 +3091,12 @@
         "url": "https://github.com/yeoman/configstore?sponsor=1"
       }
     },
+    "node_modules/configstore/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true
+    },
     "node_modules/configstore/node_modules/write-file-atomic": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
@@ -3147,9 +3116,9 @@
       "dev": true
     },
     "node_modules/convert-source-map": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
       "dev": true
     },
     "node_modules/core-js": {
@@ -3163,6 +3132,19 @@
         "url": "https://opencollective.com/core-js"
       }
     },
+    "node_modules/core-js-compat": {
+      "version": "3.35.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz",
+      "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==",
+      "dev": true,
+      "dependencies": {
+        "browserslist": "^4.22.2"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
     "node_modules/core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@@ -3238,12 +3220,12 @@
       }
     },
     "node_modules/css-functions-list": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz",
-      "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz",
+      "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==",
       "dev": true,
       "engines": {
-        "node": ">=12.22"
+        "node": ">=12 || >=16"
       }
     },
     "node_modules/css-select": {
@@ -3468,9 +3450,9 @@
       }
     },
     "node_modules/define-data-property": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz",
-      "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+      "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
       "dev": true,
       "dependencies": {
         "get-intrinsic": "^1.2.1",
@@ -3665,15 +3647,15 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.528",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.528.tgz",
-      "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==",
+      "version": "1.4.623",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz",
+      "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==",
       "dev": true
     },
     "node_modules/emoji-regex": {
-      "version": "10.2.1",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
-      "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==",
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+      "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
       "dev": true
     },
     "node_modules/end-of-stream": {
@@ -3697,6 +3679,15 @@
         "url": "https://github.com/fb55/entities?sponsor=1"
       }
     },
+    "node_modules/env-paths": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+      "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/error-ex": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -3707,26 +3698,26 @@
       }
     },
     "node_modules/es-abstract": {
-      "version": "1.22.2",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz",
-      "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==",
+      "version": "1.22.3",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
+      "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
       "dev": true,
       "dependencies": {
         "array-buffer-byte-length": "^1.0.0",
         "arraybuffer.prototype.slice": "^1.0.2",
         "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
+        "call-bind": "^1.0.5",
         "es-set-tostringtag": "^2.0.1",
         "es-to-primitive": "^1.2.1",
         "function.prototype.name": "^1.1.6",
-        "get-intrinsic": "^1.2.1",
+        "get-intrinsic": "^1.2.2",
         "get-symbol-description": "^1.0.0",
         "globalthis": "^1.0.3",
         "gopd": "^1.0.1",
-        "has": "^1.0.3",
         "has-property-descriptors": "^1.0.0",
         "has-proto": "^1.0.1",
         "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0",
         "internal-slot": "^1.0.5",
         "is-array-buffer": "^3.0.2",
         "is-callable": "^1.2.7",
@@ -3736,7 +3727,7 @@
         "is-string": "^1.0.7",
         "is-typed-array": "^1.1.12",
         "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.3",
+        "object-inspect": "^1.13.1",
         "object-keys": "^1.1.1",
         "object.assign": "^4.1.4",
         "regexp.prototype.flags": "^1.5.1",
@@ -3750,7 +3741,7 @@
         "typed-array-byte-offset": "^1.0.0",
         "typed-array-length": "^1.0.4",
         "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.11"
+        "which-typed-array": "^1.1.13"
       },
       "engines": {
         "node": ">= 0.4"
@@ -3760,26 +3751,26 @@
       }
     },
     "node_modules/es-set-tostringtag": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
-      "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
+      "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
       "dev": true,
       "dependencies": {
-        "get-intrinsic": "^1.1.3",
-        "has": "^1.0.3",
-        "has-tostringtag": "^1.0.0"
+        "get-intrinsic": "^1.2.2",
+        "has-tostringtag": "^1.0.0",
+        "hasown": "^2.0.0"
       },
       "engines": {
         "node": ">= 0.4"
       }
     },
     "node_modules/es-shim-unscopables": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
-      "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
       "dev": true,
       "dependencies": {
-        "has": "^1.0.3"
+        "hasown": "^2.0.0"
       }
     },
     "node_modules/es-to-primitive": {
@@ -3848,18 +3839,19 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.50.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz",
-      "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==",
+      "version": "8.56.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
+      "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.2",
-        "@eslint/js": "8.50.0",
-        "@humanwhocodes/config-array": "^0.11.11",
+        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/js": "8.56.0",
+        "@humanwhocodes/config-array": "^0.11.13",
         "@humanwhocodes/module-importer": "^1.0.1",
         "@nodelib/fs.walk": "^1.2.8",
+        "@ungap/structured-clone": "^1.2.0",
         "ajv": "^6.12.4",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
@@ -3901,6 +3893,18 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/eslint-compat-utils": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz",
+      "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "eslint": ">=6.0.0"
+      }
+    },
     "node_modules/eslint-import-resolver-node": {
       "version": "0.3.9",
       "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
@@ -3960,13 +3964,14 @@
       }
     },
     "node_modules/eslint-plugin-es-x": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz",
-      "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==",
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz",
+      "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.1.2",
-        "@eslint-community/regexpp": "^4.6.0"
+        "@eslint-community/regexpp": "^4.6.0",
+        "eslint-compat-utils": "^0.1.2"
       },
       "engines": {
         "node": "^14.18.0 || >=16.0.0"
@@ -4007,28 +4012,28 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.28.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz",
-      "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==",
+      "version": "2.29.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
       "dev": true,
       "dependencies": {
-        "array-includes": "^3.1.6",
-        "array.prototype.findlastindex": "^1.2.2",
-        "array.prototype.flat": "^1.3.1",
-        "array.prototype.flatmap": "^1.3.1",
+        "array-includes": "^3.1.7",
+        "array.prototype.findlastindex": "^1.2.3",
+        "array.prototype.flat": "^1.3.2",
+        "array.prototype.flatmap": "^1.3.2",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.7",
+        "eslint-import-resolver-node": "^0.3.9",
         "eslint-module-utils": "^2.8.0",
-        "has": "^1.0.3",
-        "is-core-module": "^2.13.0",
+        "hasown": "^2.0.0",
+        "is-core-module": "^2.13.1",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.6",
-        "object.groupby": "^1.0.0",
-        "object.values": "^1.1.6",
+        "object.fromentries": "^2.0.7",
+        "object.groupby": "^1.0.1",
+        "object.values": "^1.1.7",
         "semver": "^6.3.1",
-        "tsconfig-paths": "^3.14.2"
+        "tsconfig-paths": "^3.15.0"
       },
       "engines": {
         "node": ">=4"
@@ -4090,36 +4095,36 @@
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
-      "version": "46.8.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.8.2.tgz",
-      "integrity": "sha512-5TSnD018f3tUJNne4s4gDWQflbsgOycIKEUBoCLn6XtBMgNHxQFmV8vVxUtiPxAQq8lrX85OaSG/2gnctxw9uQ==",
+      "version": "48.0.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.0.2.tgz",
+      "integrity": "sha512-CBFl5Jc7+jlV36RwDm+PQ8Uw5r28pn2/uW/OaB+Gw5bFwn4Py/1eYMZ3hGf9S4meUFZ/sRvS+hVif2mRAp6WqQ==",
       "dev": true,
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.40.1",
+        "@es-joy/jsdoccomment": "~0.41.0",
         "are-docs-informative": "^0.0.2",
-        "comment-parser": "1.4.0",
+        "comment-parser": "1.4.1",
         "debug": "^4.3.4",
         "escape-string-regexp": "^4.0.0",
         "esquery": "^1.5.0",
         "is-builtin-module": "^3.2.1",
         "semver": "^7.5.4",
-        "spdx-expression-parse": "^3.0.1"
+        "spdx-expression-parse": "^4.0.0"
       },
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       },
       "peerDependencies": {
-        "eslint": "^7.0.0 || ^8.0.0"
+        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
       }
     },
     "node_modules/eslint-plugin-mocha": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.1.0.tgz",
-      "integrity": "sha512-xLqqWUF17llsogVOC+8C6/jvQ+4IoOREbN7ZCHuOHuD6cT5cDD4h7f2LgsZuzMAiwswWE21tO7ExaknHVDrSkw==",
+      "version": "10.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz",
+      "integrity": "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==",
       "dev": true,
       "dependencies": {
         "eslint-utils": "^3.0.0",
-        "rambda": "^7.1.0"
+        "rambda": "^7.4.0"
       },
       "engines": {
         "node": ">=14.0.0"
@@ -4129,16 +4134,18 @@
       }
     },
     "node_modules/eslint-plugin-n": {
-      "version": "16.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.1.0.tgz",
-      "integrity": "sha512-3wv/TooBst0N4ND+pnvffHuz9gNPmk/NkLwAxOt2JykTl/hcuECe6yhTtLJcZjIxtZwN+GX92ACp/QTLpHA3Hg==",
+      "version": "16.6.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.1.tgz",
+      "integrity": "sha512-M1kE5bVQRLBMDYRZwDhWzlzbp370SRRRC1MHqq4I3L2Tatey+9/2csc5mwLDPlmhJaDvkojbrNUME5/llpRyDg==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
         "builtins": "^5.0.1",
-        "eslint-plugin-es-x": "^7.1.0",
+        "eslint-plugin-es-x": "^7.5.0",
         "get-tsconfig": "^4.7.0",
+        "globals": "^13.24.0",
         "ignore": "^5.2.4",
+        "is-builtin-module": "^3.2.1",
         "is-core-module": "^2.12.1",
         "minimatch": "^3.1.2",
         "resolve": "^1.22.2",
@@ -4164,6 +4171,21 @@
         "concat-map": "0.0.1"
       }
     },
+    "node_modules/eslint-plugin-n/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/eslint-plugin-n/node_modules/minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -4176,6 +4198,18 @@
         "node": "*"
       }
     },
+    "node_modules/eslint-plugin-n/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/eslint-plugin-no-unsanitized": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz",
@@ -4198,42 +4232,42 @@
       }
     },
     "node_modules/eslint-plugin-regexp": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz",
-      "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.2.0.tgz",
+      "integrity": "sha512-0kwpiWiLRVBkVr3oIRQLl196sXP/NF6DQFefv9jtR4ZOgQR+6WID2pIZ0I+wIt54qgBPwBB7Gm2a+ueh8/WsFQ==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.4.0",
-        "comment-parser": "^1.1.2",
-        "grapheme-splitter": "^1.0.4",
-        "jsdoctypeparser": "^9.0.0",
-        "refa": "^0.11.0",
-        "regexp-ast-analysis": "^0.6.0",
-        "scslre": "^0.2.0"
+        "@eslint-community/regexpp": "^4.9.1",
+        "comment-parser": "^1.4.0",
+        "jsdoc-type-pratt-parser": "^4.0.0",
+        "refa": "^0.12.1",
+        "regexp-ast-analysis": "^0.7.1",
+        "scslre": "^0.3.0"
       },
       "engines": {
-        "node": "^12 || >=14"
+        "node": "^18 || >=20"
       },
       "peerDependencies": {
-        "eslint": ">=6.0.0"
+        "eslint": ">=8.44.0"
       }
     },
     "node_modules/eslint-plugin-unicorn": {
-      "version": "48.0.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz",
-      "integrity": "sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==",
+      "version": "50.0.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz",
+      "integrity": "sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.20",
         "@eslint-community/eslint-utils": "^4.4.0",
-        "ci-info": "^3.8.0",
+        "@eslint/eslintrc": "^2.1.4",
+        "ci-info": "^4.0.0",
         "clean-regexp": "^1.0.0",
+        "core-js-compat": "^3.34.0",
         "esquery": "^1.5.0",
         "indent-string": "^4.0.0",
         "is-builtin-module": "^3.2.1",
         "jsesc": "^3.0.2",
-        "lodash": "^4.17.21",
         "pluralize": "^8.0.0",
         "read-pkg-up": "^7.0.1",
         "regexp-tree": "^0.1.27",
@@ -4248,7 +4282,7 @@
         "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
       },
       "peerDependencies": {
-        "eslint": ">=8.44.0"
+        "eslint": ">=8.56.0"
       }
     },
     "node_modules/eslint-plugin-unicorn/node_modules/jsesc": {
@@ -4361,9 +4395,9 @@
       }
     },
     "node_modules/eslint/node_modules/globals": {
-      "version": "13.22.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
-      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -4514,23 +4548,23 @@
       }
     },
     "node_modules/execa": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
-      "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+      "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
       "dev": true,
       "dependencies": {
         "cross-spawn": "^7.0.3",
-        "get-stream": "^6.0.1",
-        "human-signals": "^4.3.0",
+        "get-stream": "^8.0.1",
+        "human-signals": "^5.0.0",
         "is-stream": "^3.0.0",
         "merge-stream": "^2.0.0",
         "npm-run-path": "^5.1.0",
         "onetime": "^6.0.0",
-        "signal-exit": "^3.0.7",
+        "signal-exit": "^4.1.0",
         "strip-final-newline": "^3.0.0"
       },
       "engines": {
-        "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
+        "node": ">=16.17"
       },
       "funding": {
         "url": "https://github.com/sindresorhus/execa?sponsor=1"
@@ -4636,9 +4670,9 @@
       }
     },
     "node_modules/fastq": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
-      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+      "version": "1.16.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
+      "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
       "dev": true,
       "dependencies": {
         "reusify": "^1.0.4"
@@ -4809,9 +4843,9 @@
       }
     },
     "node_modules/firefox-profile/node_modules/jsonfile/node_modules/universalify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-      "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
       "dev": true,
       "engines": {
         "node": ">= 10.0.0"
@@ -4845,17 +4879,17 @@
       }
     },
     "node_modules/flat-cache": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz",
-      "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
       "dev": true,
       "dependencies": {
-        "flatted": "^3.2.7",
+        "flatted": "^3.2.9",
         "keyv": "^4.5.3",
         "rimraf": "^3.0.2"
       },
       "engines": {
-        "node": ">=12.0.0"
+        "node": "^10.12.0 || >=12.0.0"
       }
     },
     "node_modules/flatted": {
@@ -4865,9 +4899,9 @@
       "dev": true
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.3",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
-      "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
+      "version": "1.15.4",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
+      "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
       "dev": true,
       "funding": [
         {
@@ -4909,18 +4943,6 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/foreground-child/node_modules/signal-exit": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
-      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
-      "dev": true,
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
     "node_modules/forever-agent": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -5000,10 +5022,13 @@
       }
     },
     "node_modules/function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
     "node_modules/function.prototype.name": {
       "version": "1.1.6",
@@ -5099,15 +5124,15 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
-      "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+      "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
       "dev": true,
       "dependencies": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
+        "function-bind": "^1.1.2",
         "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3"
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -5126,12 +5151,12 @@
       }
     },
     "node_modules/get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+      "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -5175,19 +5200,19 @@
       }
     },
     "node_modules/glob": {
-      "version": "10.3.6",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.6.tgz",
-      "integrity": "sha512-mEfImdc/fiYHEcF6pHFfD2b/KrdFB1qH9mRe5vI5HROF8G51SWxQJ2V56Ezl6ZL9y86gsxQ1Lgo2S746KGUPSQ==",
+      "version": "10.3.10",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+      "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
       "dev": true,
       "dependencies": {
         "foreground-child": "^3.1.0",
-        "jackspeak": "^2.0.3",
+        "jackspeak": "^2.3.5",
         "minimatch": "^9.0.1",
         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
         "path-scurry": "^1.10.1"
       },
       "bin": {
-        "glob": "dist/cjs/src/bin.js"
+        "glob": "dist/esm/bin.mjs"
       },
       "engines": {
         "node": ">=16 || 14 >=14.17"
@@ -5363,6 +5388,18 @@
         "url": "https://github.com/sindresorhus/got?sponsor=1"
       }
     },
+    "node_modules/got/node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/graceful-fs": {
       "version": "4.2.11",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -5375,12 +5412,6 @@
       "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==",
       "dev": true
     },
-    "node_modules/grapheme-splitter": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
-      "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
-      "dev": true
-    },
     "node_modules/graphemer": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -5447,18 +5478,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
     "node_modules/has-bigints": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -5478,12 +5497,12 @@
       }
     },
     "node_modules/has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+      "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
       "dev": true,
       "dependencies": {
-        "get-intrinsic": "^1.1.1"
+        "get-intrinsic": "^1.2.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -5540,6 +5559,18 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/hasown": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/he": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -5820,9 +5851,9 @@
       }
     },
     "node_modules/http2-wrapper": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz",
-      "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
+      "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
       "dev": true,
       "dependencies": {
         "quick-lru": "^5.1.1",
@@ -5845,12 +5876,12 @@
       }
     },
     "node_modules/human-signals": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
-      "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+      "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
       "dev": true,
       "engines": {
-        "node": ">=14.18.0"
+        "node": ">=16.17.0"
       }
     },
     "node_modules/iconv-lite": {
@@ -5886,9 +5917,9 @@
       ]
     },
     "node_modules/ignore": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
-      "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+      "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
       "dev": true,
       "engines": {
         "node": ">= 4"
@@ -5981,12 +6012,12 @@
       "dev": true
     },
     "node_modules/inquirer": {
-      "version": "9.2.11",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.11.tgz",
-      "integrity": "sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==",
+      "version": "9.2.12",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz",
+      "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==",
       "dev": true,
       "dependencies": {
-        "@ljharb/through": "^2.3.9",
+        "@ljharb/through": "^2.3.11",
         "ansi-escapes": "^4.3.2",
         "chalk": "^5.3.0",
         "cli-cursor": "^3.1.0",
@@ -6007,13 +6038,13 @@
       }
     },
     "node_modules/internal-slot": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
-      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
+      "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
       "dev": true,
       "dependencies": {
-        "get-intrinsic": "^1.2.0",
-        "has": "^1.0.3",
+        "get-intrinsic": "^1.2.2",
+        "hasown": "^2.0.0",
         "side-channel": "^1.0.4"
       },
       "engines": {
@@ -6152,13 +6183,28 @@
         "is-ci": "bin.js"
       }
     },
+    "node_modules/is-ci/node_modules/ci-info": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+      "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/sibiraj-s"
+        }
+      ],
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/is-core-module": {
-      "version": "2.13.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
-      "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+      "version": "2.13.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
       "dev": true,
       "dependencies": {
-        "has": "^1.0.3"
+        "hasown": "^2.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -6512,9 +6558,9 @@
       "dev": true
     },
     "node_modules/jackspeak": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz",
-      "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==",
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+      "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
       "dev": true,
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
@@ -6577,18 +6623,6 @@
         "node": ">=12.0.0"
       }
     },
-    "node_modules/jsdoctypeparser": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz",
-      "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==",
-      "dev": true,
-      "bin": {
-        "jsdoctypeparser": "bin/jsdoctypeparser"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/jsesc": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -6768,9 +6802,9 @@
       }
     },
     "node_modules/keyv": {
-      "version": "4.5.3",
-      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
-      "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
+      "version": "4.5.4",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
       "dev": true,
       "dependencies": {
         "json-buffer": "3.0.1"
@@ -6786,9 +6820,9 @@
       }
     },
     "node_modules/known-css-properties": {
-      "version": "0.28.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz",
-      "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==",
+      "version": "0.29.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
+      "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
       "dev": true
     },
     "node_modules/latest-version": {
@@ -6872,12 +6906,12 @@
       "dev": true
     },
     "node_modules/linkify-it": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz",
-      "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+      "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
       "dev": true,
       "dependencies": {
-        "uc.micro": "^1.0.1"
+        "uc.micro": "^2.0.0"
       }
     },
     "node_modules/locate-path": {
@@ -6901,12 +6935,6 @@
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
       "dev": true
     },
-    "node_modules/lodash.flatmap": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz",
-      "integrity": "sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==",
-      "dev": true
-    },
     "node_modules/lodash.groupby": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
@@ -7055,53 +7083,48 @@
       }
     },
     "node_modules/markdown-it": {
-      "version": "13.0.1",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz",
-      "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz",
+      "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==",
       "dev": true,
       "dependencies": {
         "argparse": "^2.0.1",
-        "entities": "~3.0.1",
-        "linkify-it": "^4.0.1",
-        "mdurl": "^1.0.1",
-        "uc.micro": "^1.0.5"
+        "entities": "^4.4.0",
+        "linkify-it": "^5.0.0",
+        "mdurl": "^2.0.0",
+        "punycode.js": "^2.3.1",
+        "uc.micro": "^2.0.0"
       },
       "bin": {
-        "markdown-it": "bin/markdown-it.js"
-      }
-    },
-    "node_modules/markdown-it/node_modules/entities": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
-      "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
+        "markdown-it": "bin/markdown-it.mjs"
       }
     },
     "node_modules/markdownlint": {
-      "version": "0.31.1",
-      "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.31.1.tgz",
-      "integrity": "sha512-CKMR2hgcIBrYlIUccDCOvi966PZ0kJExDrUi1R+oF9PvqQmCrTqjOsgIvf2403OmJ+CWomuzDoylr6KbuMyvHA==",
+      "version": "0.33.0",
+      "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.33.0.tgz",
+      "integrity": "sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==",
       "dev": true,
       "dependencies": {
-        "markdown-it": "13.0.1",
-        "markdownlint-micromark": "0.1.7"
+        "markdown-it": "14.0.0",
+        "markdownlint-micromark": "0.1.8"
       },
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/DavidAnson"
       }
     },
     "node_modules/markdownlint-micromark": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.7.tgz",
-      "integrity": "sha512-BbRPTC72fl5vlSKv37v/xIENSRDYL/7X/XoFzZ740FGEbs9vZerLrIkFRY0rv7slQKxDczToYuMmqQFN61fi4Q==",
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.8.tgz",
+      "integrity": "sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==",
       "dev": true,
       "engines": {
         "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/DavidAnson"
       }
     },
     "node_modules/marked": {
@@ -7139,9 +7162,9 @@
       "dev": true
     },
     "node_modules/mdurl": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
-      "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+      "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
       "dev": true
     },
     "node_modules/mem": {
@@ -7221,9 +7244,9 @@
       }
     },
     "node_modules/metalint": {
-      "version": "0.14.1",
-      "resolved": "https://registry.npmjs.org/metalint/-/metalint-0.14.1.tgz",
-      "integrity": "sha512-lQDYpfmhsLuMFJhBrlacyML0iQaRFitjl3kecUzly7X7M49UMuOZGV4bNTqMMTYEN8wtUPvEitjZEkXzgVejlQ==",
+      "version": "0.15.0",
+      "resolved": "https://registry.npmjs.org/metalint/-/metalint-0.15.0.tgz",
+      "integrity": "sha512-U4RTfBedIIP1gJp+BLyg+gkwqfRLTFFi9El/2tkKqBgi5dLlUr9FFrj47JrTHNBqSru7DuJYth+PZS/g6zIoRA==",
       "dev": true,
       "dependencies": {
         "chalk": "5.3.0",
@@ -7233,7 +7256,7 @@
         "metalint": "src/bin/index.js"
       },
       "engines": {
-        "node": ">=20.0.0"
+        "node": ">=20.6.0"
       },
       "funding": {
         "url": "https://www.paypal.me/sebastienregne"
@@ -7366,9 +7389,9 @@
       }
     },
     "node_modules/minipass": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz",
-      "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==",
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+      "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
       "dev": true,
       "engines": {
         "node": ">=16 || 14 >=14.17"
@@ -7542,9 +7565,9 @@
       }
     },
     "node_modules/moment": {
-      "version": "2.29.4",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
-      "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+      "version": "2.30.1",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7610,24 +7633,24 @@
       }
     },
     "node_modules/mutation-testing-elements": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-2.0.1.tgz",
-      "integrity": "sha512-4piLXKUp3iyQ8O+n7tshESwTJI18Olj8ZwW8G9vMpuODKmc8MvQG63zbsiPb9KFJ8yEiiMNodQUSSdgLXpYxPA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.0.1.tgz",
+      "integrity": "sha512-hsBKkabjD2sjyR2vhdEFPDxZfYLw71geIWjEh4rcZSSQAtyWRfjGf6UbdMjleuyw1ZZTgGt6CImtwRY7s3lrVg==",
       "dev": true
     },
     "node_modules/mutation-testing-metrics": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-2.0.1.tgz",
-      "integrity": "sha512-YuxxOxg7mFdxL8DQFyU4ueip/8PL7+2/4FPR+xEetBII/c7p2Gt4FqN23US+wdQhNxsos4PCdYJjL8ddqo6/2g==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.0.0.tgz",
+      "integrity": "sha512-WslGuCdpqT+6SpeIahMhLrJl5+YbutlOCFKxuULIkAkaHfsWBK8UCq6euE7PiDEx+R1pYZo//kqRbFIOFmdQug==",
       "dev": true,
       "dependencies": {
-        "mutation-testing-report-schema": "2.0.1"
+        "mutation-testing-report-schema": "3.0.0"
       }
     },
     "node_modules/mutation-testing-report-schema": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-2.0.1.tgz",
-      "integrity": "sha512-el8j0dzhhxICQZ3vbXGlb9iIDrouOvJo28bKSl3/2sPhpAPZccfvbuwcvlG7+vZv87wJkFaj5zTDQ4TFQoXXNA==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.0.0.tgz",
+      "integrity": "sha512-70+ZPYoyedruSGiEcXQnFiTtIusBYlsL/2EMwfR+/HOqBGxBpmI798spqc86ZVYXPVCL5mt2rWjE1dTQwcjpmQ==",
       "dev": true
     },
     "node_modules/mute-stream": {
@@ -7745,9 +7768,9 @@
       "dev": true
     },
     "node_modules/nconf": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz",
-      "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==",
+      "version": "0.12.1",
+      "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.1.tgz",
+      "integrity": "sha512-p2cfF+B3XXacQdswUYWZ0w6Vld0832A/tuqjLBu3H1sfUcby4N2oVbGhyuCkZv+t3iY3aiFEj7gZGqax9Q2c1w==",
       "dev": true,
       "dependencies": {
         "async": "^3.0.0",
@@ -7887,9 +7910,9 @@
       }
     },
     "node_modules/node-releases": {
-      "version": "2.0.13",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
-      "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+      "version": "2.0.14",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+      "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
       "dev": true
     },
     "node_modules/normalize-package-data": {
@@ -7929,9 +7952,9 @@
       }
     },
     "node_modules/npm-package-json-lint": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-7.0.0.tgz",
-      "integrity": "sha512-Yn8flnPx/7hTxwejWL5urm8sbEahq8ic3R80d7nlBvS6C58JEmJpUqvO7Ksy8izRzpbrHq0Anwlv/nQg5OYf8Q==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-7.1.0.tgz",
+      "integrity": "sha512-ypcMpag32TCP89zzLSS+7vjeR2QY613WzmO2upcJgKNWlcswDz8cdb80urbBNHkhSPI40ex3nsKrRDH/WhMYOg==",
       "dev": true,
       "dependencies": {
         "ajv": "^6.12.6",
@@ -7946,10 +7969,10 @@
         "log-symbols": "^4.1.0",
         "meow": "^9.0.0",
         "plur": "^4.0.0",
-        "semver": "^7.5.3",
+        "semver": "^7.5.4",
         "slash": "^3.0.0",
         "strip-json-comments": "^3.1.1",
-        "type-fest": "^3.12.0",
+        "type-fest": "^4.3.3",
         "validate-npm-package-name": "^5.0.0"
       },
       "bin": {
@@ -8037,12 +8060,12 @@
       }
     },
     "node_modules/npm-package-json-lint/node_modules/type-fest": {
-      "version": "3.13.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
-      "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+      "version": "4.9.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.9.0.tgz",
+      "integrity": "sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==",
       "dev": true,
       "engines": {
-        "node": ">=14.16"
+        "node": ">=16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -8106,9 +8129,9 @@
       }
     },
     "node_modules/object-inspect": {
-      "version": "1.12.3",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
-      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
       "dev": true,
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -8124,13 +8147,13 @@
       }
     },
     "node_modules/object.assign": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+      "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
         "has-symbols": "^1.0.3",
         "object-keys": "^1.1.1"
       },
@@ -8188,10 +8211,13 @@
       }
     },
     "node_modules/on-exit-leak-free": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz",
-      "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==",
-      "dev": true
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+      "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+      "dev": true,
+      "engines": {
+        "node": ">=14.0.0"
+      }
     },
     "node_modules/once": {
       "version": "1.4.0",
@@ -8435,6 +8461,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/os-locale/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true
+    },
     "node_modules/os-locale/node_modules/strip-final-newline": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -8657,9 +8689,9 @@
       }
     },
     "node_modules/path-scurry/node_modules/lru-cache": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
-      "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
+      "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
       "dev": true,
       "engines": {
         "node": "14 || >=16.14"
@@ -8705,9 +8737,9 @@
       }
     },
     "node_modules/pino": {
-      "version": "8.15.1",
-      "resolved": "https://registry.npmjs.org/pino/-/pino-8.15.1.tgz",
-      "integrity": "sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA==",
+      "version": "8.16.2",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-8.16.2.tgz",
+      "integrity": "sha512-2advCDGVEvkKu9TTVSa/kWW7Z3htI/sBKEZpqiHk6ive0i/7f5b1rsU8jn0aimxqfnSz5bj/nOYkwhBUn5xxvg==",
       "dev": true,
       "dependencies": {
         "atomic-sleep": "^1.0.0",
@@ -8719,7 +8751,7 @@
         "quick-format-unescaped": "^4.0.3",
         "real-require": "^0.2.0",
         "safe-stable-stringify": "^2.3.1",
-        "sonic-boom": "^3.1.0",
+        "sonic-boom": "^3.7.0",
         "thread-stream": "^2.0.0"
       },
       "bin": {
@@ -8761,9 +8793,9 @@
       }
     },
     "node_modules/pino-abstract-transport/node_modules/readable-stream": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz",
-      "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==",
+      "version": "4.5.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+      "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
       "dev": true,
       "dependencies": {
         "abort-controller": "^3.0.0",
@@ -8839,9 +8871,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.29",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz",
-      "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==",
+      "version": "8.4.32",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+      "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
       "dev": true,
       "funding": [
         {
@@ -8858,7 +8890,7 @@
         }
       ],
       "dependencies": {
-        "nanoid": "^3.3.6",
+        "nanoid": "^3.3.7",
         "picocolors": "^1.0.0",
         "source-map-js": "^1.0.2"
       },
@@ -8873,25 +8905,35 @@
       "dev": true
     },
     "node_modules/postcss-safe-parser": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
-      "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz",
+      "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==",
       "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
       "engines": {
-        "node": ">=12.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
+        "node": ">=18.0"
       },
       "peerDependencies": {
-        "postcss": "^8.3.3"
+        "postcss": "^8.4.31"
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.0.13",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
-      "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+      "version": "6.0.15",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+      "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
       "dev": true,
       "dependencies": {
         "cssesc": "^3.0.0",
@@ -8917,9 +8959,9 @@
       "dev": true
     },
     "node_modules/postcss/node_modules/nanoid": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
-      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
       "dev": true,
       "funding": [
         {
@@ -8944,9 +8986,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
-      "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
+      "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
       "dev": true,
       "bin": {
         "prettier": "bin/prettier.cjs"
@@ -8974,9 +9016,9 @@
       "dev": true
     },
     "node_modules/process-warning": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz",
-      "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==",
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz",
+      "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==",
       "dev": true
     },
     "node_modules/progress": {
@@ -9023,9 +9065,18 @@
       }
     },
     "node_modules/punycode": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-      "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/punycode.js": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+      "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
       "dev": true,
       "engines": {
         "node": ">=6"
@@ -9377,12 +9428,12 @@
       }
     },
     "node_modules/refa": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz",
-      "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==",
+      "version": "0.12.1",
+      "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz",
+      "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==",
       "dev": true,
       "dependencies": {
-        "@eslint-community/regexpp": "^4.5.0"
+        "@eslint-community/regexpp": "^4.8.0"
       },
       "engines": {
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -9395,13 +9446,13 @@
       "dev": true
     },
     "node_modules/regexp-ast-analysis": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz",
-      "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz",
+      "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==",
       "dev": true,
       "dependencies": {
-        "@eslint-community/regexpp": "^4.5.0",
-        "refa": "^0.11.0"
+        "@eslint-community/regexpp": "^4.8.0",
+        "refa": "^0.12.1"
       },
       "engines": {
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -9656,9 +9707,9 @@
       "dev": true
     },
     "node_modules/resolve": {
-      "version": "1.22.6",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
-      "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
       "dev": true,
       "dependencies": {
         "is-core-module": "^2.13.0",
@@ -9748,6 +9799,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/restore-cursor/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true
+    },
     "node_modules/reusify": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -9923,20 +9980,23 @@
       "dev": true
     },
     "node_modules/sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
+      "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==",
       "dev": true
     },
     "node_modules/scslre": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz",
-      "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==",
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz",
+      "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==",
       "dev": true,
       "dependencies": {
-        "@eslint-community/regexpp": "^4.5.0",
-        "refa": "^0.11.0",
-        "regexp-ast-analysis": "^0.6.0"
+        "@eslint-community/regexpp": "^4.8.0",
+        "refa": "^0.12.0",
+        "regexp-ast-analysis": "^0.7.0"
+      },
+      "engines": {
+        "node": "^14.0.0 || >=16.0.0"
       }
     },
     "node_modules/secure-compare": {
@@ -10008,6 +10068,21 @@
         "randombytes": "^2.1.0"
       }
     },
+    "node_modules/set-function-length": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+      "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+      "dev": true,
+      "dependencies": {
+        "define-data-property": "^1.1.1",
+        "get-intrinsic": "^1.2.1",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/set-function-name": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
@@ -10075,9 +10150,9 @@
       "dev": true
     },
     "node_modules/shiki": {
-      "version": "0.14.4",
-      "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz",
-      "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==",
+      "version": "0.14.7",
+      "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz",
+      "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==",
       "dev": true,
       "dependencies": {
         "ansi-sequence-parser": "^1.1.0",
@@ -10119,10 +10194,16 @@
       }
     },
     "node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
     },
     "node_modules/slash": {
       "version": "3.0.0",
@@ -10151,9 +10232,9 @@
       }
     },
     "node_modules/sonic-boom": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz",
-      "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==",
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.0.tgz",
+      "integrity": "sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==",
       "dev": true,
       "dependencies": {
         "atomic-sleep": "^1.0.0"
@@ -10217,6 +10298,16 @@
         "spdx-license-ids": "^3.0.0"
       }
     },
+    "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+      "dev": true,
+      "dependencies": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
     "node_modules/spdx-exceptions": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
@@ -10224,9 +10315,9 @@
       "dev": true
     },
     "node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
+      "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
       "dev": true,
       "dependencies": {
         "spdx-exceptions": "^2.1.0",
@@ -10234,9 +10325,9 @@
       }
     },
     "node_modules/spdx-license-ids": {
-      "version": "3.0.15",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz",
-      "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==",
+      "version": "3.0.16",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
+      "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
       "dev": true
     },
     "node_modules/split": {
@@ -10261,9 +10352,9 @@
       }
     },
     "node_modules/sshpk": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
-      "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+      "version": "1.18.0",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+      "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
       "dev": true,
       "dependencies": {
         "asn1": "~0.2.3",
@@ -10532,54 +10623,46 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/style-search": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
-      "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
-      "dev": true
-    },
     "node_modules/stylelint": {
-      "version": "15.10.3",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz",
-      "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==",
+      "version": "16.1.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.1.0.tgz",
+      "integrity": "sha512-Sh1rRV0lN1qxz/QsuuooLWsIZ/ona7NKw/fRZd6y6PyXYdD2W0EAzJ8yJcwSx4Iw/muz0CF09VZ+z4EiTAcKmg==",
       "dev": true,
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.3.1",
-        "@csstools/css-tokenizer": "^2.2.0",
-        "@csstools/media-query-list-parser": "^2.1.4",
-        "@csstools/selector-specificity": "^3.0.0",
+        "@csstools/css-parser-algorithms": "^2.4.0",
+        "@csstools/css-tokenizer": "^2.2.2",
+        "@csstools/media-query-list-parser": "^2.1.6",
+        "@csstools/selector-specificity": "^3.0.1",
         "balanced-match": "^2.0.0",
         "colord": "^2.9.3",
-        "cosmiconfig": "^8.2.0",
-        "css-functions-list": "^3.2.0",
+        "cosmiconfig": "^9.0.0",
+        "css-functions-list": "^3.2.1",
         "css-tree": "^2.3.1",
         "debug": "^4.3.4",
-        "fast-glob": "^3.3.1",
+        "fast-glob": "^3.3.2",
         "fastest-levenshtein": "^1.0.16",
-        "file-entry-cache": "^6.0.1",
+        "file-entry-cache": "^8.0.0",
         "global-modules": "^2.0.0",
         "globby": "^11.1.0",
         "globjoin": "^0.1.4",
         "html-tags": "^3.3.1",
-        "ignore": "^5.2.4",
-        "import-lazy": "^4.0.0",
+        "ignore": "^5.3.0",
         "imurmurhash": "^0.1.4",
         "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.28.0",
+        "known-css-properties": "^0.29.0",
         "mathml-tag-names": "^2.1.3",
-        "meow": "^10.1.5",
+        "meow": "^13.0.0",
         "micromatch": "^4.0.5",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.0.0",
-        "postcss": "^8.4.27",
+        "postcss": "^8.4.32",
         "postcss-resolve-nested-selector": "^0.1.1",
-        "postcss-safe-parser": "^6.0.0",
+        "postcss-safe-parser": "^7.0.0",
         "postcss-selector-parser": "^6.0.13",
         "postcss-value-parser": "^4.2.0",
         "resolve-from": "^5.0.0",
         "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1",
-        "style-search": "^0.1.0",
+        "strip-ansi": "^7.1.0",
         "supports-hyperlinks": "^3.0.0",
         "svg-tags": "^1.0.0",
         "table": "^6.8.1",
@@ -10589,7 +10672,7 @@
         "stylelint": "bin/stylelint.mjs"
       },
       "engines": {
-        "node": "^14.13.1 || >=16.0.0"
+        "node": ">=18.12.0"
       },
       "funding": {
         "type": "opencollective",
@@ -10597,67 +10680,49 @@
       }
     },
     "node_modules/stylelint-order": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.3.tgz",
-      "integrity": "sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==",
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz",
+      "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==",
       "dev": true,
       "dependencies": {
-        "postcss": "^8.4.21",
+        "postcss": "^8.4.32",
         "postcss-sorting": "^8.0.2"
       },
       "peerDependencies": {
-        "stylelint": "^14.0.0 || ^15.0.0"
+        "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1"
       }
     },
-    "node_modules/stylelint/node_modules/balanced-match": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
-      "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-      "dev": true
-    },
-    "node_modules/stylelint/node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+    "node_modules/stylelint/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
-    "node_modules/stylelint/node_modules/camelcase-keys": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
-      "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+    "node_modules/stylelint/node_modules/balanced-match": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
+      "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
+      "dev": true
+    },
+    "node_modules/stylelint/node_modules/cosmiconfig": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+      "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
       "dev": true,
       "dependencies": {
-        "camelcase": "^6.3.0",
-        "map-obj": "^4.1.0",
-        "quick-lru": "^5.1.1",
-        "type-fest": "^1.2.1"
+        "env-paths": "^2.2.1",
+        "import-fresh": "^3.3.0",
+        "js-yaml": "^4.1.0",
+        "parse-json": "^5.2.0"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/stylelint/node_modules/cosmiconfig": {
-      "version": "8.3.6",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
-      "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
-      "dev": true,
-      "dependencies": {
-        "import-fresh": "^3.3.0",
-        "js-yaml": "^4.1.0",
-        "parse-json": "^5.2.0",
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=14"
+        "node": ">=14"
       },
       "funding": {
         "url": "https://github.com/sponsors/d-fischer"
@@ -10671,22 +10736,10 @@
         }
       }
     },
-    "node_modules/stylelint/node_modules/decamelize": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
-      "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/stylelint/node_modules/fast-glob": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
-      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
       "dev": true,
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -10699,114 +10752,51 @@
         "node": ">=8.6.0"
       }
     },
-    "node_modules/stylelint/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/stylelint/node_modules/indent-string": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
-      "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/stylelint/node_modules/meow": {
-      "version": "10.1.5",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
-      "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
+    "node_modules/stylelint/node_modules/file-entry-cache": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
       "dev": true,
       "dependencies": {
-        "@types/minimist": "^1.2.2",
-        "camelcase-keys": "^7.0.0",
-        "decamelize": "^5.0.0",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.2",
-        "read-pkg-up": "^8.0.0",
-        "redent": "^4.0.0",
-        "trim-newlines": "^4.0.2",
-        "type-fest": "^1.2.2",
-        "yargs-parser": "^20.2.9"
+        "flat-cache": "^4.0.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/stylelint/node_modules/quick-lru": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=16.0.0"
       }
     },
-    "node_modules/stylelint/node_modules/read-pkg": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
-      "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
+    "node_modules/stylelint/node_modules/flat-cache": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.0.tgz",
+      "integrity": "sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==",
       "dev": true,
       "dependencies": {
-        "@types/normalize-package-data": "^2.4.0",
-        "normalize-package-data": "^3.0.2",
-        "parse-json": "^5.2.0",
-        "type-fest": "^1.0.1"
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.4",
+        "rimraf": "^5.0.5"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=16"
       }
     },
-    "node_modules/stylelint/node_modules/read-pkg-up": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
-      "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
+    "node_modules/stylelint/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
       "dependencies": {
-        "find-up": "^5.0.0",
-        "read-pkg": "^6.0.0",
-        "type-fest": "^1.0.1"
+        "is-glob": "^4.0.1"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">= 6"
       }
     },
-    "node_modules/stylelint/node_modules/redent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
-      "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
+    "node_modules/stylelint/node_modules/meow": {
+      "version": "13.1.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-13.1.0.tgz",
+      "integrity": "sha512-o5R/R3Tzxq0PJ3v3qcQJtSvSE9nKOLSAaDuuoMzDVuGTwHdccMWcYomh9Xolng2tjT6O/Y83d+0coVGof6tqmA==",
       "dev": true,
-      "dependencies": {
-        "indent-string": "^5.0.0",
-        "strip-indent": "^4.0.0"
-      },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -10821,52 +10811,37 @@
         "node": ">=8"
       }
     },
-    "node_modules/stylelint/node_modules/strip-indent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
-      "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
+    "node_modules/stylelint/node_modules/rimraf": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz",
+      "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==",
       "dev": true,
       "dependencies": {
-        "min-indent": "^1.0.1"
+        "glob": "^10.3.7"
       },
-      "engines": {
-        "node": ">=12"
+      "bin": {
+        "rimraf": "dist/esm/bin.mjs"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/stylelint/node_modules/trim-newlines": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
-      "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
-      "dev": true,
       "engines": {
-        "node": ">=12"
+        "node": ">=14"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/stylelint/node_modules/type-fest": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+    "node_modules/stylelint/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/stylelint/node_modules/yargs-parser": {
-      "version": "20.2.9",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
     "node_modules/supports-color": {
@@ -10971,9 +10946,9 @@
       }
     },
     "node_modules/thread-stream": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.0.tgz",
-      "integrity": "sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz",
+      "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==",
       "dev": true,
       "dependencies": {
         "real-require": "^0.2.0"
@@ -11065,9 +11040,9 @@
       }
     },
     "node_modules/tsconfig-paths": {
-      "version": "3.14.2",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
-      "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+      "version": "3.15.0",
+      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
       "dev": true,
       "dependencies": {
         "@types/json5": "^0.0.29",
@@ -11089,9 +11064,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
-      "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
       "dev": true
     },
     "node_modules/tunnel": {
@@ -11255,15 +11230,15 @@
       }
     },
     "node_modules/typedoc": {
-      "version": "0.25.1",
-      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.1.tgz",
-      "integrity": "sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==",
+      "version": "0.25.7",
+      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.7.tgz",
+      "integrity": "sha512-m6A6JjQRg39p2ZVRIN3NKXgrN8vzlHhOS+r9ymUYtcUP/TIQPvWSq7YgE5ZjASfv5Vd5BW5xrir6Gm2XNNcOow==",
       "dev": true,
       "dependencies": {
         "lunr": "^2.3.9",
         "marked": "^4.3.0",
         "minimatch": "^9.0.3",
-        "shiki": "^0.14.1"
+        "shiki": "^0.14.7"
       },
       "bin": {
         "typedoc": "bin/typedoc"
@@ -11272,13 +11247,13 @@
         "node": ">= 16"
       },
       "peerDependencies": {
-        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x"
+        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x"
       }
     },
     "node_modules/typescript": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
-      "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+      "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -11289,9 +11264,9 @@
       }
     },
     "node_modules/uc.micro": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
-      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.0.0.tgz",
+      "integrity": "sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==",
       "dev": true
     },
     "node_modules/unbox-primitive": {
@@ -11315,6 +11290,12 @@
       "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
       "dev": true
     },
+    "node_modules/undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+      "dev": true
+    },
     "node_modules/union": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
@@ -11459,6 +11440,16 @@
         "spdx-expression-parse": "^3.0.0"
       }
     },
+    "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+      "dev": true,
+      "dependencies": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
     "node_modules/validate-npm-package-name": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz",
@@ -11526,14 +11517,14 @@
       "dev": true
     },
     "node_modules/web-ext": {
-      "version": "7.7.0",
-      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.7.0.tgz",
-      "integrity": "sha512-/jc0kbSLfw/ANra6v70I6QADrVYL0Wo98T0Cigt39EjVpXbiwES8zww/9QL7aE0L1tK0ISWYq45KNisDV+GKVA==",
+      "version": "7.9.0",
+      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.9.0.tgz",
+      "integrity": "sha512-oWMiM3e+u5E8X7aUMgQ0BCGjlbZt4XwF6ExAXsXx9Btdz3nLmUY/4eKEZA1J+2T7WhCdRwN7Pdh2VKMej/pthQ==",
       "dev": true,
       "dependencies": {
         "@babel/runtime": "7.21.0",
         "@devicefarmer/adbkit": "3.2.3",
-        "addons-linter": "6.13.0",
+        "addons-linter": "6.19.0",
         "bunyan": "1.8.15",
         "camelcase": "7.0.1",
         "chrome-launcher": "0.15.1",
@@ -11572,175 +11563,6 @@
         "npm": ">=6.9.0"
       }
     },
-    "node_modules/web-ext/node_modules/@eslint/js": {
-      "version": "8.48.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz",
-      "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/web-ext/node_modules/@mdn/browser-compat-data": {
-      "version": "5.3.14",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.14.tgz",
-      "integrity": "sha512-Y9XQrphVcE6u9xMm+gIqN86opbU/5s2W1pdPyKRyFV5B7+2jWM2gLI5JpfhZncaoDKvhy6FYwK04aCz5UM/bTQ==",
-      "dev": true
-    },
-    "node_modules/web-ext/node_modules/addons-linter": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.13.0.tgz",
-      "integrity": "sha512-vYgDXl8aLmN1zU4HmsQdG6tUFByg499mHnTEMWDUbSkoYDq3koTne08EsqU6sD+o814u8FxclQP7580L0g/tPQ==",
-      "dev": true,
-      "dependencies": {
-        "@fluent/syntax": "0.19.0",
-        "@mdn/browser-compat-data": "5.3.14",
-        "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "9.3.0",
-        "ajv": "8.12.0",
-        "chalk": "4.1.2",
-        "cheerio": "1.0.0-rc.12",
-        "columnify": "1.6.0",
-        "common-tags": "1.8.2",
-        "deepmerge": "4.3.1",
-        "eslint": "8.48.0",
-        "eslint-plugin-no-unsanitized": "4.0.2",
-        "eslint-visitor-keys": "3.4.3",
-        "espree": "9.6.1",
-        "esprima": "4.0.1",
-        "fast-json-patch": "3.1.1",
-        "glob": "10.3.4",
-        "image-size": "1.0.2",
-        "is-mergeable-object": "1.1.1",
-        "jed": "1.1.1",
-        "json-merge-patch": "1.0.2",
-        "os-locale": "5.0.0",
-        "pino": "8.15.0",
-        "postcss": "8.4.29",
-        "relaxed-json": "1.0.3",
-        "semver": "7.5.4",
-        "sha.js": "2.4.11",
-        "source-map-support": "0.5.21",
-        "tosource": "1.0.0",
-        "upath": "2.0.1",
-        "yargs": "17.7.2",
-        "yauzl": "2.10.0"
-      },
-      "bin": {
-        "addons-linter": "bin/addons-linter"
-      },
-      "engines": {
-        "node": ">=16.0.0"
-      }
-    },
-    "node_modules/web-ext/node_modules/addons-linter/node_modules/addons-scanner-utils": {
-      "version": "9.3.0",
-      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.3.0.tgz",
-      "integrity": "sha512-YZWzNpP+em650XlZNH7NbTUcHJXqC0ihLEgwn17GGTqervyChqQffd9sm/QXNur0dmj7Ks1mD77iTg9XcJw64A==",
-      "dev": true,
-      "dependencies": {
-        "@types/yauzl": "2.10.0",
-        "common-tags": "1.8.2",
-        "first-chunk-stream": "3.0.0",
-        "strip-bom-stream": "4.0.0",
-        "upath": "2.0.1",
-        "yauzl": "2.10.0"
-      },
-      "peerDependencies": {
-        "body-parser": "1.20.2",
-        "express": "4.18.2",
-        "node-fetch": "2.6.11",
-        "safe-compare": "1.1.4"
-      },
-      "peerDependenciesMeta": {
-        "body-parser": {
-          "optional": true
-        },
-        "express": {
-          "optional": true
-        },
-        "node-fetch": {
-          "optional": true
-        },
-        "safe-compare": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/web-ext/node_modules/addons-linter/node_modules/node-fetch": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
-      "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "whatwg-url": "^5.0.0"
-      },
-      "engines": {
-        "node": "4.x || >=6.0.0"
-      },
-      "peerDependencies": {
-        "encoding": "^0.1.0"
-      },
-      "peerDependenciesMeta": {
-        "encoding": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/web-ext/node_modules/addons-linter/node_modules/yargs": {
-      "version": "17.7.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
-      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^8.0.1",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.3",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^21.1.1"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/web-ext/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/web-ext/node_modules/buffer": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
-      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "base64-js": "^1.3.1",
-        "ieee754": "^1.2.1"
-      }
-    },
     "node_modules/web-ext/node_modules/camelcase": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
@@ -11753,22 +11575,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
     "node_modules/web-ext/node_modules/decamelize": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz",
@@ -11781,88 +11587,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/eslint": {
-      "version": "8.48.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz",
-      "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==",
-      "dev": true,
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.2",
-        "@eslint/js": "8.48.0",
-        "@humanwhocodes/config-array": "^0.11.10",
-        "@humanwhocodes/module-importer": "^1.0.1",
-        "@nodelib/fs.walk": "^1.2.8",
-        "ajv": "^6.12.4",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.2.2",
-        "eslint-visitor-keys": "^3.4.3",
-        "espree": "^9.6.1",
-        "esquery": "^1.4.2",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "find-up": "^5.0.0",
-        "glob-parent": "^6.0.2",
-        "globals": "^13.19.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^5.2.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "is-path-inside": "^3.0.3",
-        "js-yaml": "^4.1.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.3",
-        "strip-ansi": "^6.0.1",
-        "text-table": "^0.2.0"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/web-ext/node_modules/eslint/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/web-ext/node_modules/eslint/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/web-ext/node_modules/fs-extra": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
@@ -11877,49 +11601,6 @@
         "node": ">=14.14"
       }
     },
-    "node_modules/web-ext/node_modules/glob": {
-      "version": "10.3.4",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz",
-      "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==",
-      "dev": true,
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^2.0.3",
-        "minimatch": "^9.0.1",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
-        "path-scurry": "^1.10.1"
-      },
-      "bin": {
-        "glob": "dist/cjs/src/bin.js"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/web-ext/node_modules/globals": {
-      "version": "13.22.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
-      "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
-      "dev": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/web-ext/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
     "node_modules/web-ext/node_modules/jsonfile": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -11933,9 +11614,9 @@
       }
     },
     "node_modules/web-ext/node_modules/lines-and-columns": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz",
-      "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz",
+      "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==",
       "dev": true,
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
@@ -11989,54 +11670,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/pino": {
-      "version": "8.15.0",
-      "resolved": "https://registry.npmjs.org/pino/-/pino-8.15.0.tgz",
-      "integrity": "sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==",
-      "dev": true,
-      "dependencies": {
-        "atomic-sleep": "^1.0.0",
-        "fast-redact": "^3.1.1",
-        "on-exit-leak-free": "^2.1.0",
-        "pino-abstract-transport": "v1.0.0",
-        "pino-std-serializers": "^6.0.0",
-        "process-warning": "^2.0.0",
-        "quick-format-unescaped": "^4.0.3",
-        "real-require": "^0.2.0",
-        "safe-stable-stringify": "^2.3.1",
-        "sonic-boom": "^3.1.0",
-        "thread-stream": "^2.0.0"
-      },
-      "bin": {
-        "pino": "bin.js"
-      }
-    },
-    "node_modules/web-ext/node_modules/pino-abstract-transport": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz",
-      "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==",
-      "dev": true,
-      "dependencies": {
-        "readable-stream": "^4.0.0",
-        "split2": "^4.0.0"
-      }
-    },
-    "node_modules/web-ext/node_modules/readable-stream": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz",
-      "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==",
-      "dev": true,
-      "dependencies": {
-        "abort-controller": "^3.0.0",
-        "buffer": "^6.0.3",
-        "events": "^3.3.0",
-        "process": "^0.11.10",
-        "string_decoder": "^1.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
     "node_modules/web-ext/node_modules/strip-bom": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz",
@@ -12061,18 +11694,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/web-ext/node_modules/tmp": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
@@ -12085,22 +11706,10 @@
         "node": ">=8.17.0"
       }
     },
-    "node_modules/web-ext/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/web-ext/node_modules/universalify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-      "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
       "dev": true,
       "engines": {
         "node": ">= 10.0.0"
@@ -12134,9 +11743,9 @@
       }
     },
     "node_modules/web-streams-polyfill": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
-      "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz",
+      "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==",
       "dev": true,
       "engines": {
         "node": ">= 8"
@@ -12225,13 +11834,13 @@
       }
     },
     "node_modules/which-typed-array": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
-      "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
+      "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
       "dev": true,
       "dependencies": {
         "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
+        "call-bind": "^1.0.4",
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
         "has-tostringtag": "^1.0.0"
@@ -12371,18 +11980,6 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/write-file-atomic/node_modules/signal-exit": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
-      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
-      "dev": true,
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
     "node_modules/ws": {
       "version": "8.13.0",
       "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
diff --git a/package.json b/package.json
index 73cb791..66faa97 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,7 @@
     "lint:types": "tsc --project .tsconfig_lint.json",
     "test": "npm run test:unit",
     "test:unit": "mocha --config test/unit/mocharc.json",
-    "test:coverage": "stryker run .stryker.config.js",
+    "test:coverage": "stryker run",
     "jsdocs": "typedoc --tsconfig .tsconfig_jsdocs.json",
     "serve": "http-server -p6007 -c-1 --cors",
     "extension:chromium": "web-ext run -t chromium -s src/extension/",
@@ -42,35 +42,35 @@
   },
   "devDependencies": {
     "@prantlf/jsonlint": "14.0.3",
-    "@prettier/plugin-xml": "3.2.1",
-    "@stryker-mutator/core": "7.1.1",
-    "@stryker-mutator/mocha-runner": "7.1.1",
-    "@types/mocha": "10.0.1",
-    "addons-linter": "6.14.0",
-    "eslint": "8.50.0",
+    "@prettier/plugin-xml": "3.2.2",
+    "@stryker-mutator/core": "8.0.0",
+    "@stryker-mutator/mocha-runner": "8.0.0",
+    "@types/mocha": "10.0.6",
+    "addons-linter": "6.19.0",
+    "eslint": "8.56.0",
     "eslint-plugin-array-func": "4.0.0",
     "eslint-plugin-eslint-comments": "3.2.0",
-    "eslint-plugin-import": "2.28.1",
-    "eslint-plugin-jsdoc": "46.8.2",
-    "eslint-plugin-mocha": "10.1.0",
-    "eslint-plugin-n": "16.1.0",
+    "eslint-plugin-import": "2.29.1",
+    "eslint-plugin-jsdoc": "48.0.2",
+    "eslint-plugin-mocha": "10.2.0",
+    "eslint-plugin-n": "16.6.1",
     "eslint-plugin-no-unsanitized": "4.0.2",
     "eslint-plugin-promise": "6.1.1",
-    "eslint-plugin-regexp": "1.15.0",
-    "eslint-plugin-unicorn": "48.0.1",
+    "eslint-plugin-regexp": "2.2.0",
+    "eslint-plugin-unicorn": "50.0.1",
     "htmlhint": "1.1.4",
     "http-server": "14.1.1",
-    "markdownlint": "0.31.1",
-    "metalint": "0.14.1",
+    "markdownlint": "0.33.0",
+    "metalint": "0.15.0",
     "mocha": "10.2.0",
-    "npm-package-json-lint": "7.0.0",
-    "prettier": "3.0.3",
+    "npm-package-json-lint": "7.1.0",
+    "prettier": "3.1.1",
     "purgecss": "5.0.0",
-    "stylelint": "15.10.3",
-    "stylelint-order": "6.0.3",
-    "typedoc": "0.25.1",
-    "typescript": "5.2.2",
-    "web-ext": "7.7.0",
+    "stylelint": "16.1.0",
+    "stylelint-order": "6.0.4",
+    "typedoc": "0.25.7",
+    "typescript": "5.3.3",
+    "web-ext": "7.9.0",
     "yaml-lint": "1.7.0"
   },
   "engines": {
diff --git a/src/extension/manifest.json b/src/extension/manifest.json
index 51d2e0e..5967880 100644
--- a/src/extension/manifest.json
+++ b/src/extension/manifest.json
@@ -2,7 +2,7 @@
   "browser_specific_settings": {
     "gecko": {
       "id": "gout@regseb.github.io",
-      "strict_min_version": "117.0"
+      "strict_min_version": "121.0"
     }
   },
   "manifest_version": 2,
@@ -31,7 +31,7 @@
     "persistent": true
   },
   "homepage_url": "https://github.com/regseb/gout",
-  "minimum_chrome_version": "117",
+  "minimum_chrome_version": "120",
   "permissions": [
     "<all_urls>",
     "activeTab",

From 891a7b971f046eaac71afdc33cb9cd2e78bf0971 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 8 Jan 2024 18:31:12 +0100
Subject: [PATCH 12/38] chore(main): release 0.10.0 (#14)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* chore(main): release 0.10.0

* Mettre à jour la version du manifest.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Sébastien Règne <regseb@gmail.com>
---
 CHANGELOG.md                | 13 +++++++++++++
 package-lock.json           |  4 ++--
 package.json                |  2 +-
 src/extension/manifest.json |  2 +-
 4 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index cd3031c..03bfd59 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,19 @@
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
+## [0.10.0](https://github.com/regseb/gout/compare/v0.9.8...v0.10.0) (2024-01-08)
+
+
+### Features
+
+* Chainer les scrapers. ([04c094b](https://github.com/regseb/gout/commit/04c094b9f08b7ed980e27c57fd922d7e3f86e1fb))
+
+
+### Bug Fixes
+
+* Déplacer le scraper Repeater dans tools. ([da4af6f](https://github.com/regseb/gout/commit/da4af6fbf59a68223468b52abb401c2e683e5630))
+* **scraper/icon/ping:** Remplacer les points par des "x". ([402e2b4](https://github.com/regseb/gout/commit/402e2b400f16b92b6e9e193a7ae70f1dacc5ff9b))
+
 ## [0.9.8](https://github.com/regseb/gout/compare/v0.9.7...v0.9.8) (2023-09-24)
 
 
diff --git a/package-lock.json b/package-lock.json
index dce630f..420fcf6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "gout",
-  "version": "0.9.8",
+  "version": "0.10.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "gout",
-      "version": "0.9.8",
+      "version": "0.10.0",
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
diff --git a/package.json b/package.json
index 66faa97..80f32a5 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "gout",
-  "version": "0.9.8",
+  "version": "0.10.0",
   "description": "Agrégateur d'Internet (flux RSS et tout le reste).",
   "keywords": [
     "gout",
diff --git a/src/extension/manifest.json b/src/extension/manifest.json
index 5967880..3658079 100644
--- a/src/extension/manifest.json
+++ b/src/extension/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 2,
   "name": "Gout",
-  "version": "0.9.8",
+  "version": "0.10.0",
   "browser_action": {
     "default_icon": {
       "16": "img/icon16.png",

From de49cd609b73e35acba3ab511dffe3618412fa80 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sat, 3 Feb 2024 08:08:21 +0100
Subject: [PATCH 13/38] =?UTF-8?q?chore:=20Formater=20les=20fichiers=20modi?=
 =?UTF-8?q?fi=C3=A9s=20lors=20de=20la=20release.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/workflows/release.yml              | 45 +++++++++++++++++++++-
 .metalint/markdownlint_changelog.config.js | 14 +++++++
 .metalint/metalint.config.js               |  7 +++-
 .release-please/config.json                |  8 ++++
 .release-please/manifest.json              |  1 +
 CHANGELOG.md                               | 34 +++++++---------
 6 files changed, 86 insertions(+), 23 deletions(-)
 create mode 100644 .metalint/markdownlint_changelog.config.js
 create mode 100644 .release-please/config.json
 create mode 100644 .release-please/manifest.json

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4d725af..71bbddd 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -12,5 +12,48 @@ jobs:
     steps:
       - name: Run Release Please
         uses: google-github-actions/release-please-action@v4
+        id: release
         with:
-          release-type: node
+          config-file: .release-please/config.json
+          manifest-file: .release-please/manifest.json
+
+      # Formatter les fichiers modifiés par release-please, car ils ne
+      # respectent plus le formatage de Prettier (via Metalint).
+      # https://github.com/googleapis/release-please/issues/1802
+      - name: Checkout repository
+        if: ${{ steps.release.outputs.pr }}
+        uses: actions/checkout@v4
+        with:
+          ref: ${{ fromJson(steps.release.outputs.pr).headBranchName }}
+
+      - name: Configure Git user
+        if: ${{ steps.release.outputs.pr }}
+        run: |
+          git config user.email "github-actions[bot]@users.noreply.github.com"
+          git config user.name "github-actions[bot]"
+
+      - name: Setup Node.js
+        if: ${{ steps.release.outputs.pr }}
+        uses: actions/setup-node@v4
+        with:
+          node-version: 20
+
+      - name: Install dependencies
+        if: ${{ steps.release.outputs.pr }}
+        run: npm ci
+
+      - name: Format files
+        if: ${{ steps.release.outputs.pr }}
+        run: >
+          npm run lint:fix --
+          .release-please/manifest.json
+          CHANGELOG.md
+          package.json
+          package-lock.json
+          src/extension/manifest.json
+
+      - name: Commit and push
+        if: ${{ steps.release.outputs.pr }}
+        run: |
+          git commit --all --message 'chore: format files'
+          git push
diff --git a/.metalint/markdownlint_changelog.config.js b/.metalint/markdownlint_changelog.config.js
new file mode 100644
index 0000000..8f3edb1
--- /dev/null
+++ b/.metalint/markdownlint_changelog.config.js
@@ -0,0 +1,14 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+/**
+ * @type {import("markdownlint").Configuration}
+ */
+export default {
+    // Ne pas vérifier la longueur des lignes du CHANGELOG, car celui-ci est
+    // généré par release-please et il peut avoir de longues lignes.
+    "line-length": false,
+};
diff --git a/.metalint/metalint.config.js b/.metalint/metalint.config.js
index 30ff8db..3185c54 100644
--- a/.metalint/metalint.config.js
+++ b/.metalint/metalint.config.js
@@ -7,10 +7,9 @@
 export default {
     patterns: [
         "**",
-        // Ignorer les répertoires et les fichiers générés.
+        // Ignorer les répertoires générés.
         "!/.git/**",
         "!/.stryker/**",
-        "!/CHANGELOG.md",
         "!/jsdocs/**",
         "!/node_modules/**",
         "!/src/extension/polyfill/lib/**",
@@ -87,6 +86,10 @@ export default {
         {
             patterns: "*.md",
             linters: ["prettier", "markdownlint"],
+            overrides: {
+                patterns: "/CHANGELOG.md",
+                linters: "markdownlint_changelog",
+            },
         },
         {
             patterns: "*.json",
diff --git a/.release-please/config.json b/.release-please/config.json
new file mode 100644
index 0000000..9656e8b
--- /dev/null
+++ b/.release-please/config.json
@@ -0,0 +1,8 @@
+{
+  "release-type": "node",
+  "include-component-in-tag": false,
+  "extra-files": ["src/extension/manifest.json"],
+  "packages": {
+    ".": {}
+  }
+}
diff --git a/.release-please/manifest.json b/.release-please/manifest.json
new file mode 100644
index 0000000..15cc783
--- /dev/null
+++ b/.release-please/manifest.json
@@ -0,0 +1 @@
+{ ".": "0.10.0" }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 03bfd59..da68f2a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,45 +4,39 @@ All notable changes to this project will be documented in this file. See [standa
 
 ## [0.10.0](https://github.com/regseb/gout/compare/v0.9.8...v0.10.0) (2024-01-08)
 
-
 ### Features
 
-* Chainer les scrapers. ([04c094b](https://github.com/regseb/gout/commit/04c094b9f08b7ed980e27c57fd922d7e3f86e1fb))
-
+- Chainer les scrapers. ([04c094b](https://github.com/regseb/gout/commit/04c094b9f08b7ed980e27c57fd922d7e3f86e1fb))
 
 ### Bug Fixes
 
-* Déplacer le scraper Repeater dans tools. ([da4af6f](https://github.com/regseb/gout/commit/da4af6fbf59a68223468b52abb401c2e683e5630))
-* **scraper/icon/ping:** Remplacer les points par des "x". ([402e2b4](https://github.com/regseb/gout/commit/402e2b400f16b92b6e9e193a7ae70f1dacc5ff9b))
+- Déplacer le scraper Repeater dans tools. ([da4af6f](https://github.com/regseb/gout/commit/da4af6fbf59a68223468b52abb401c2e683e5630))
+- **scraper/icon/ping:** Remplacer les points par des "x". ([402e2b4](https://github.com/regseb/gout/commit/402e2b400f16b92b6e9e193a7ae70f1dacc5ff9b))
 
 ## [0.9.8](https://github.com/regseb/gout/compare/v0.9.7...v0.9.8) (2023-09-24)
 
-
 ### Bug Fixes
 
-* Corriger des fautes de français. ([ebb3cba](https://github.com/regseb/gout/commit/ebb3cba7bc03a738ef59055d857b2673dade3e32))
-* Corriger le nom des classes. ([c91d0fa](https://github.com/regseb/gout/commit/c91d0fa7befa9582dad35712b2a3fdf630183f31))
-* Gérer correctement les async / await. ([b017aaa](https://github.com/regseb/gout/commit/b017aaade74a678200fa4a8c597463fcd6296c33))
-
-### [0.9.7](https://github.com/regseb/gout/compare/v0.9.6...v0.9.7) (2023-03-10)
+- Corriger des fautes de français. ([ebb3cba](https://github.com/regseb/gout/commit/ebb3cba7bc03a738ef59055d857b2673dade3e32))
+- Corriger le nom des classes. ([c91d0fa](https://github.com/regseb/gout/commit/c91d0fa7befa9582dad35712b2a3fdf630183f31))
+- Gérer correctement les async / await. ([b017aaa](https://github.com/regseb/gout/commit/b017aaade74a678200fa4a8c597463fcd6296c33))
 
+## [0.9.7](https://github.com/regseb/gout/compare/v0.9.6...v0.9.7) (2023-03-10)
 
 ### Bug Fixes
 
-* **extension:** Modifier la requête HTTP. ([d0de0f9](https://github.com/regseb/gout/commit/d0de0f947c53fb594cdd61956952b297dd226114))
-* Renommer "Configuration" en "Options". ([eb0a0ad](https://github.com/regseb/gout/commit/eb0a0adcffdb07559a5853b630701cdfc197ddca))
-
-### [0.9.6](https://github.com/regseb/gout/compare/v0.9.5...v0.9.6) (2022-12-11)
+- **extension:** Modifier la requête HTTP. ([d0de0f9](https://github.com/regseb/gout/commit/d0de0f947c53fb594cdd61956952b297dd226114))
+- Renommer "Configuration" en "Options". ([eb0a0ad](https://github.com/regseb/gout/commit/eb0a0adcffdb07559a5853b630701cdfc197ddca))
 
-### [0.9.5](https://github.com/regseb/gout/compare/v0.9.4...v0.9.5) (2022-10-23)
+## [0.9.6](https://github.com/regseb/gout/compare/v0.9.5...v0.9.6) (2022-12-11)
 
+## [0.9.5](https://github.com/regseb/gout/compare/v0.9.4...v0.9.5) (2022-10-23)
 
 ### Features
 
-* Améliorer l'héritage de widgets. ([1c25ad3](https://github.com/regseb/gout/commit/1c25ad37d0063bed18f4065d980d78ef2250e7eb))
-* **module/findrss:** Ajouter un module pour extraire les flux RSS. ([e7b88a7](https://github.com/regseb/gout/commit/e7b88a7e534ae6b335b5bffa4341e35f0d17a995))
-
+- Améliorer l'héritage de widgets. ([1c25ad3](https://github.com/regseb/gout/commit/1c25ad37d0063bed18f4065d980d78ef2250e7eb))
+- **module/findrss:** Ajouter un module pour extraire les flux RSS. ([e7b88a7](https://github.com/regseb/gout/commit/e7b88a7e534ae6b335b5bffa4341e35f0d17a995))
 
 ### Bug Fixes
 
-* **scraper/ping:** Gérer correctement les codes. ([b03035c](https://github.com/regseb/gout/commit/b03035ca4d5779653cbf0ab1811341a7c163d658))
+- **scraper/ping:** Gérer correctement les codes. ([b03035c](https://github.com/regseb/gout/commit/b03035ca4d5779653cbf0ab1811341a7c163d658))

From 3750c46efca760baee983d035f60bc64cd5e4f6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 6 Mar 2024 15:56:01 +0100
Subject: [PATCH 14/38] =?UTF-8?q?docs:=20Am=C3=A9liorer=20la=20documentati?=
 =?UTF-8?q?on.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md                               | 112 +++++++++++-------------
 src/module/audio/README.md              |  32 ++++---
 src/module/clock/README.md              |  26 +++---
 src/module/icon/README.md               |  32 ++++---
 src/module/iframe/README.md             |  29 +++---
 src/module/image/README.md              |  24 ++---
 src/module/list/README.md               |  32 ++++---
 src/module/notepad/README.md            |  18 ++--
 src/module/podcast/README.md            |  32 ++++---
 src/module/search/README.md             |  32 ++++---
 src/module/single/README.md             |  22 +++--
 src/module/text/README.md               |  26 +++---
 src/module/tools/contrast/README.md     |   6 +-
 src/module/tools/findrss/README.md      |   6 +-
 src/scraper/icon/ping/README.md         |  42 ++++++---
 src/scraper/list/jsonfeed/README.md     |  46 ++++++----
 src/scraper/list/rss/README.md          |  45 ++++++----
 src/scraper/search/opensearch/README.md |  50 +++++------
 src/scraper/tools/complements/README.md |  44 +++++-----
 src/scraper/tools/filter/README.md      |  70 +++++++++------
 src/scraper/tools/repeater/README.md    |  38 ++++----
 21 files changed, 433 insertions(+), 331 deletions(-)

diff --git a/README.md b/README.md
index f85b87d..8f160b4 100644
--- a/README.md
+++ b/README.md
@@ -39,18 +39,18 @@ Voici un exemple de dashboard ayant quatre colonnes de widgets.
     </style>
   </head>
   <body>
-    <div style="width: 25%;">
+    <div style="width: 30%;">
       <script type="application/json">{ "...": "..." }</script>
       <script type="application/json">{ "...": "..." }</script>
       <!-- ... -->
     </div>
-    <div style="width: 25%;">
+    <div style="width: 30%;">
       <script type="application/json">{ "...": "..." }</script>
     </div>
-    <div style="width: 25%;">
+    <div style="width: 20%;">
       <script type="application/json">{ "...": "..." }</script>
     </div>
-    <div style="width: 25%;">
+    <div style="width: 20%;">
       <script type="application/json">{ "...": "..." }</script>
       <script type="application/json">{ "...": "..." }</script>
     </div>
@@ -61,7 +61,8 @@ Voici un exemple de dashboard ayant quatre colonnes de widgets.
 ### Widget
 
 Un widget est un bloc du dashboard. C'est un élément `<script>` (avec le
-`type="application/json"`) qui contient un objet
+`type="application/json"`). Le widget sera ajouté dans le DOM de la page au même
+endroit que l'élément `<script>`. Le contenu du `<script>` est un objet
 [JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") ayant
 deux propriétés :
 
@@ -75,30 +76,27 @@ liens.
 
 ```HTML
 <script type="application/json">
-    {
-        "module": {
-            "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-            "options": {
-                "color": "#ffc107",
-                "cron": "*/10 * * * *",
-                "max": 5
-            }
-        },
-        "scrapers": [{
-            "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-            "options": {
-                "url": "https://linuxfr.org/news.atom"
-            }
-        }]
-    }
+  {
+    "module": {
+      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+      "options": {
+        "max": 5,
+        "color": "#ffc107",
+        "cron": "*/10 * * * *"
+      }
+    },
+    "scrapers": [{
+      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+      "options": {
+        "url": "https://linuxfr.org/news.atom"
+      }
+    }]
+  }
 </script>
 ```
 
-<!-- Une description détaillée des widgets est disponible sur le site de
-     Gout. -->
-
 Si vous voulez des widgets, vous pouvez chercher
-[_gout-widget_](https://github.com/search?q=%22gout-widget%22&type=Code&l=Markdown)
+[_gout-widget_](https://github.com/search?q=%22+gout-widget%22+language%3AMarkdown&type=Code&l=Markdown)
 dans GitHub.
 
 ### Module
@@ -119,25 +117,22 @@ affichée dans un bloc bleu `#2196f3` et actualisée toutes les dix minutes
 
 ```HTML
 <script type="application/json">
-    {
-        "module": {
-            "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-            "options": {
-                "color": "#2196f3",
-                "cron": "*/10 * * * *",
-                "max": 5
-            }
-        },
-        "scrapers": [{ "...": "..." }]
-    }
+  {
+    "module": {
+      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+      "options": {
+        "color": "#2196f3",
+        "cron": "*/10 * * * *",
+        "max": 5
+      }
+    },
+    "scrapers": [{ "...": "..." }]
+  }
 </script>
 ```
 
-<!-- Une description détaillée des modules est disponible sur le site de
-     Gout. -->
-
 Si vous voulez des modules, vous pouvez chercher
-[_gout-module_](https://github.com/search?q=%22gout-module%22&type=Code&l=Markdown)
+[_gout-module_](https://github.com/search?q=%22+gout-module%22+language%3AMarkdown&type=Code&l=Markdown)
 dans GitHub.
 
 ### Scraper
@@ -155,33 +150,30 @@ propriétés :
   spécifiques pour chaque scraper).
 
 Dans cet exemple, deux scrapers sont définis pour récupérer les dernières vidéos
-des chaines YouTube [ARTE Cinema](https://www.youtube.com/c/ARTECinemafrance) et
-[ARTE Séries](https://www.youtube.com/c/ARTES%C3%A9ries).
+des chaines YouTube [ARTE Cinema](https://www.youtube.com/@artecinemafr) et
+[ARTE Séries](https://www.youtube.com/@arteseries).
 
 ```HTML
 <script type="application/json">
-    {
-        "module": { "...": "..." },
-        "scrapers": [{
-            "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-            "options": {
-                "url": "https://www.youtube.com/feeds/videos.xml?channel_id=UClo03hULFynpoX3w1Jv7fhw",
-            }
-        }, {
-            "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-            "options": {
-                "url": "https://www.youtube.com/feeds/videos.xml?channel_id=UCzaf-8cAEiXfynukcmV5MXw"
-            }
-        }]
-    }
+  {
+    "module": { "...": "..." },
+    "scrapers": [{
+      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+      "options": {
+        "url": "https://www.youtube.com/feeds/videos.xml?channel_id=UClo03hULFynpoX3w1Jv7fhw",
+      }
+    }, {
+      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+      "options": {
+        "url": "https://www.youtube.com/feeds/videos.xml?channel_id=UCzaf-8cAEiXfynukcmV5MXw"
+      }
+    }]
+  }
 </script>
 ```
 
-<!-- Une description détaillée des scrapers est disponible sur le site de
-     Gout. -->
-
 Si vous voulez des scrapers, vous pouvez chercher
-[_gout-scraper_](https://github.com/search?q=%22gout-scraper%22&type=Code&l=Markdown)
+[_gout-scraper_](https://github.com/search?q=%22+gout-scraper%22+language%3AMarkdown&type=Code&l=Markdown)
 dans GitHub.
 
 ## Installation
diff --git a/src/module/audio/README.md b/src/module/audio/README.md
index 288b8e5..4eb74c0 100644
--- a/src/module/audio/README.md
+++ b/src/module/audio/README.md
@@ -50,6 +50,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 prend en paramètre un entier indiquant le nombre maximum d'éléments à retourner
 (pour ce module la valeur passée sera toujours `1`). La méthode doit retourner
@@ -172,19 +176,19 @@ Ce widget affiche un cadre pour écouter la radio [Fip](https://www.fip.fr/).
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/audio/audio.js"
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-        "options": {
-            "extract": [{
-                "audio": "https://direct.radiofrance.fr/live/fip-hifi.aac",
-                "color": "#e2007a",
-                "link": "https://www.radiofrance.fr/fip",
-                "title": "Fip"
-            }]
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/audio/audio.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
+    "options": {
+      "extract": [{
+        "audio": "https://direct.radiofrance.fr/live/fip-hifi.aac",
+        "color": "#e2007a",
+        "link": "https://www.radiofrance.fr/fip",
+        "title": "Fip"
+      }]
+    }
+  }]
 }
 ```
diff --git a/src/module/clock/README.md b/src/module/clock/README.md
index 59ff6cb..b446f8b 100644
--- a/src/module/clock/README.md
+++ b/src/module/clock/README.md
@@ -50,6 +50,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 prend en paramètre un entier indiquant le nombre maximum d'éléments à retourner
 (pour ce module la valeur passée sera toujours `1`). La méthode doit retourner
@@ -121,16 +125,16 @@ Ce widget affiche une horloge avec l'heure courante.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/clock/clock.js"
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-        "options": {
-            "extract": [{
-                "color": "#795548"
-            }]
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/clock/clock.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
+    "options": {
+      "extract": [{
+        "color": "#795548"
+      }]
+    }
+  }]
 }
 ```
diff --git a/src/module/icon/README.md b/src/module/icon/README.md
index cecf796..b7bc2d7 100644
--- a/src/module/icon/README.md
+++ b/src/module/icon/README.md
@@ -50,6 +50,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 prend en paramètre un entier indiquant le nombre maximum d'éléments à retourner
 (pour ce module la valeur passée sera toujours `1`). La méthode doit retourner
@@ -159,19 +163,19 @@ Ce widget affiche un bouton qui redirige vers [GitHub](https://github.com/).
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js"
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-        "options": {
-            "extract": [{
-                "color": "black",
-                "link": "https://github.com/",
-                "target": "_top",
-                "title": "GitHub"
-            }]
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
+    "options": {
+      "extract": [{
+        "color": "black",
+        "link": "https://github.com/",
+        "target": "_top",
+        "title": "GitHub"
+      }]
+    }
+  }]
 }
 ```
diff --git a/src/module/iframe/README.md b/src/module/iframe/README.md
index b556cab..174b16e 100644
--- a/src/module/iframe/README.md
+++ b/src/module/iframe/README.md
@@ -63,6 +63,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 prend en paramètre un entier indiquant le nombre maximum d'éléments à retourner
 (pour ce module la valeur passée sera toujours `1`). La méthode doit retourner
@@ -109,20 +113,21 @@ suivantes :
 
 ## Exemple
 
-Ce widget affiche [Wikipédia](https://fr.wikipedia.org/) dans un `iframe`.
+Ce widget affiche la [Lofi Girl](https://youtu.be/jfKfPfyJRdk) de YouTube dans
+un `iframe`.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/iframe/iframe.js"
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-        "options": {
-            "extract": [{
-                "link": "https://fr.wikipedia.org/wiki/Wikipédia:Accueil_principal"
-            }]
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/iframe/iframe.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
+    "options": {
+      "extract": [{
+        "link": "https://www.youtube-nocookie.com/embed/jfKfPfyJRdk"
+      }]
+    }
+  }]
 }
 ```
diff --git a/src/module/image/README.md b/src/module/image/README.md
index e7564b6..3ad1c51 100644
--- a/src/module/image/README.md
+++ b/src/module/image/README.md
@@ -68,6 +68,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 prend en paramètre un entier indiquant le nombre maximum d'éléments à retourner.
 La méthode doit retourner une
@@ -174,15 +178,15 @@ Ce widget affiche les `3` dernières images du site
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/image/image.js",
-        "options": {
-            "cron": "@daily",
-            "max": 3
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/image/commitstrip/commitstrip.js"
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/image/image.js",
+    "options": {
+      "cron": "@daily",
+      "max": 3
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/image/commitstrip/commitstrip.js"
+  }]
 }
 ```
diff --git a/src/module/list/README.md b/src/module/list/README.md
index a1895c0..cb589e3 100644
--- a/src/module/list/README.md
+++ b/src/module/list/README.md
@@ -100,6 +100,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 prend en paramètre un entier indiquant le nombre maximum d'éléments à retourner.
 La méthode doit retourner une
@@ -218,19 +222,19 @@ Ce widget affiche les cinq dernières actualités du site
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-        "options": {
-            "color": "#ffc107",
-            "cron": "*/10 * * * *",
-            "max": 5
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-        "options": {
-            "url": "https://linuxfr.org/news.atom"
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+    "options": {
+      "color": "#ffc107",
+      "cron": "*/10 * * * *",
+      "max": 5
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+    "options": {
+      "url": "https://linuxfr.org/news.atom"
+    }
+  }]
 }
 ```
diff --git a/src/module/notepad/README.md b/src/module/notepad/README.md
index b8e404f..35e9ad5 100644
--- a/src/module/notepad/README.md
+++ b/src/module/notepad/README.md
@@ -6,6 +6,10 @@ Ce module affiche un bloc-notes.
 
 ## Options
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les options sont dans un objet
 [JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
 propriétés suivantes :
@@ -99,13 +103,13 @@ Ce widget affiche un bloc-notes pour une liste de courses.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/notepad/notepad.js",
-        "options": {
-            "color": "#607d8b",
-            "desc": "Liste de courses",
-            "title": "..."
-        }
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/notepad/notepad.js",
+    "options": {
+      "color": "#607d8b",
+      "desc": "Liste de courses",
+      "title": "..."
     }
+  }
 }
 ```
diff --git a/src/module/podcast/README.md b/src/module/podcast/README.md
index 95e22d3..267358b 100644
--- a/src/module/podcast/README.md
+++ b/src/module/podcast/README.md
@@ -100,6 +100,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 prend en paramètre un entier indiquant le nombre maximum d'éléments à retourner.
 La méthode doit retourner une
@@ -230,19 +234,19 @@ Podcast](https://lescastcodeurs.com/).
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/podcast/podcast.js",
-        "options": {
-            "color": "black",
-            "cron": "@daily",
-            "max": 2
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-        "options": {
-            "url": "https://lescastcodeurs.com/podcast-rss"
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/podcast/podcast.js",
+    "options": {
+      "color": "black",
+      "cron": "@daily",
+      "max": 2
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+    "options": {
+      "url": "https://lescastcodeurs.com/podcast-rss"
+    }
+  }]
 }
 ```
diff --git a/src/module/search/README.md b/src/module/search/README.md
index 48c658f..bce6b16 100644
--- a/src/module/search/README.md
+++ b/src/module/search/README.md
@@ -10,6 +10,10 @@ Aucune option n'est nécessaire. Tout le paramétrage se fait avec les scrapers.
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir trois méthodes :
 
 - `info()` qui retourne une promesse contenant les informations du moteur de
@@ -30,19 +34,19 @@ Ce widget fourni un champ pour faire une recherche avec
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/search/search.js"
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
-        "options": {
-            "url": "https://duckduckgo.com/?q={searchTerms}",
-            "suggestions": "https://ac.duckduckgo.com/ac/?q={searchTerms}&type=list",
-            "complements": {
-                "title": "DuckDuckGo",
-                "color": "#f44336"
-            },
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/search/search.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
+    "options": {
+      "url": "https://duckduckgo.com/?q={searchTerms}",
+      "suggestions": "https://ac.duckduckgo.com/ac/?q={searchTerms}&type=list",
+      "complements": {
+        "title": "DuckDuckGo",
+        "color": "#f44336"
+      },
+    }
+  }]
 }
 ```
diff --git a/src/module/single/README.md b/src/module/single/README.md
index 1148901..86b37e4 100644
--- a/src/module/single/README.md
+++ b/src/module/single/README.md
@@ -55,6 +55,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 recevra en paramètre le nombre `1` indiquant le nombre maximum d'éléments à
 retourner. La méthode doit retourner une
@@ -173,14 +177,14 @@ Ce widget affiche un lien vers un article au hasard de
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js",
-        "options": {
-            "cron": "*/5 * * * *"
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/single/articleauhasard/articleauhasard.js"
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js",
+    "options": {
+      "cron": "*/5 * * * *"
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/single/articleauhasard/articleauhasard.js"
+  }]
 }
 ```
diff --git a/src/module/text/README.md b/src/module/text/README.md
index 3216dc8..807df97 100644
--- a/src/module/text/README.md
+++ b/src/module/text/README.md
@@ -51,6 +51,10 @@ propriétés suivantes :
 
 ## Scrapers
 
+> [!NOTE]
+> Ce chapitre est utile principalement pour le développement de scrapers
+> compatibles avec ce module.
+
 Les scrapers associés à ce module doivent définir une méthode `extract()` qui
 recevra en paramètre le nombre `1` indiquant le nombre maximum d'éléments à
 retourner. La méthode doit retourner une
@@ -155,16 +159,16 @@ Ce widget affiche le texte _Carpe diem_.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/text/text.js"
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-        "options": {
-            "extract": [{
-                "title": "Carpe diem"
-            }]
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/text/text.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
+    "options": {
+      "extract": [{
+        "title": "Carpe diem"
+      }]
+    }
+  }]
 }
 ```
diff --git a/src/module/tools/contrast/README.md b/src/module/tools/contrast/README.md
index c69985a..f860267 100644
--- a/src/module/tools/contrast/README.md
+++ b/src/module/tools/contrast/README.md
@@ -20,8 +20,8 @@ Ce widget affiche le module.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/tools/conntrast/contrast.js"
-    }
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/tools/conntrast/contrast.js"
+  }
 }
 ```
diff --git a/src/module/tools/findrss/README.md b/src/module/tools/findrss/README.md
index 171084a..89e0e8e 100644
--- a/src/module/tools/findrss/README.md
+++ b/src/module/tools/findrss/README.md
@@ -73,8 +73,8 @@ la liste des flux RSS est affichée en dessous.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/tools/findrss/findress.js"
-    }
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/tools/findrss/findrss.js"
+  }
 }
 ```
diff --git a/src/scraper/icon/ping/README.md b/src/scraper/icon/ping/README.md
index 751f260..8a1762f 100644
--- a/src/scraper/icon/ping/README.md
+++ b/src/scraper/icon/ping/README.md
@@ -61,13 +61,29 @@ propriétés suivantes :
     <td>
       <p>
         Des propriétés qui seront ajoutées dans les éléments retournés. Par
-        défaut aucune propriété n'est ajoutée.
+        défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
+        scraper
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
         Exemple : <code>{ "target": "_top" }</code>.
       </p>
     </td>
   </tr>
+  <tr>
+    <td><code>"filter"</code></td>
+    <td><code>string</code></td>
+    <td>
+      <p>
+        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
+        aucun filtre n'est appliqué. Pour plus de détails, voir le scraper
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
+      </p>
+      <p>
+        Exemple : <code>"color != 'green'"</code>.
+      </p>
+    </td>
+  </tr>
 </table>
 
 ## Exemple
@@ -76,17 +92,17 @@ Ce widget teste le site _localhost_ toutes les heures.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js",
-        "options": {
-            "cron": "@hourly"
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/icon/ping/ping.js",
-        "options": {
-            "url": "http://localhost"
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js",
+    "options": {
+      "cron": "@hourly"
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/icon/ping/ping.js",
+    "options": {
+      "url": "http://localhost"
+    }
+  }]
 }
 ```
diff --git a/src/scraper/list/jsonfeed/README.md b/src/scraper/list/jsonfeed/README.md
index 8538086..c73b7cf 100644
--- a/src/scraper/list/jsonfeed/README.md
+++ b/src/scraper/list/jsonfeed/README.md
@@ -42,13 +42,29 @@ propriétés suivantes :
     <td>
       <p>
         Des propriétés qui seront ajoutées dans les éléments retournés. Par
-        défaut aucune propriété n'est ajoutée.
+        défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
+        scraper
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
         Exemple : <code>{ "icon": "https://example.com/foo/bar.svg" }</code>.
       </p>
     </td>
   </tr>
+  <tr>
+    <td><code>"filter"</code></td>
+    <td><code>string</code></td>
+    <td>
+      <p>
+        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
+        aucun filtre n'est appliqué. Pour plus de détails, voir le scraper
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
+      </p>
+      <p>
+        Exemple : <code>"title != 'foo'"</code>.
+      </p>
+    </td>
+  </tr>
 </table>
 
 ## Exemple
@@ -58,19 +74,19 @@ Ce widget affiche les cinq dernières actualités scientifiques du site
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-        "options": {
-            "color": "#2196f3",
-            "cron": "*/10 * * * *",
-            "max": 5
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/jsonfeed/jsonfeed.js",
-        "options": {
-            "url": "https://refind.com/science.json"
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+    "options": {
+      "color": "#2196f3",
+      "cron": "*/10 * * * *",
+      "max": 5
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/jsonfeed/jsonfeed.js",
+    "options": {
+      "url": "https://refind.com/science.json"
+    }
+  }]
 }
 ```
diff --git a/src/scraper/list/rss/README.md b/src/scraper/list/rss/README.md
index 774d47f..5eef21e 100644
--- a/src/scraper/list/rss/README.md
+++ b/src/scraper/list/rss/README.md
@@ -45,13 +45,29 @@ propriétés suivantes :
     <td>
       <p>
         Des propriétés qui seront ajoutées dans les éléments retournés. Par
-        défaut aucune propriété n'est ajoutée.
+        défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
+        scraper
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
         Exemple : <code>{ "icon": "https://example.com/foo/bar.svg" }</code>.
       </p>
     </td>
   </tr>
+  <tr>
+    <td><code>"filter"</code></td>
+    <td><code>string</code></td>
+    <td>
+      <p>
+        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
+        aucun filtre n'est appliqué. Pour plus de détails, voir le scraper
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
+      </p>
+      <p>
+        Exemple : <code>"title != 'foo'"</code>.
+      </p>
+    </td>
+  </tr>
 </table>
 
 ## Exemple
@@ -61,19 +77,18 @@ Monde.fr](https://www.lemonde.fr/).
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-        "options": {
-            "color": "#757575",
-            "cron": "*/10 * * * *",
-            "max": 5
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-        "options": {
-            "url": "https://www.lemonde.fr/rss/une.xml"
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+    "options": {
+      "cron": "*/10 * * * *",
+      "max": 5
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+    "options": {
+      "url": "https://www.lemonde.fr/rss/une.xml"
+    }
+  }]
 }
 ```
diff --git a/src/scraper/search/opensearch/README.md b/src/scraper/search/opensearch/README.md
index 54fee0e..9f4b120 100644
--- a/src/scraper/search/opensearch/README.md
+++ b/src/scraper/search/opensearch/README.md
@@ -55,7 +55,7 @@ propriétés suivantes :
     <td>
       <p>
         Des propriétés qui seront retournées par la méthode
-        <a href="../../module/search#scrapers"><code>info()</code></a>.
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/module/search#scrapers"><code>info()</code></a>.
       </p>
       <p>
         Exemple : <code>{ "title": "Google", "color": "#2196f3" }</code>.
@@ -71,29 +71,29 @@ Ce widget fourni un champ pour faire une recherche avec
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/search/search.js"
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
-        "options": {
-            "url": "https://www.google.com/search?q={searchTerms}",
-            "suggestions": "https://www.google.com/complete/search?client=firefox&q={searchTerms}",
-            "complements": {
-                "title": "Google",
-                "color": "#2196f3"
-            }
-        }
-    }, {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
-         "options": {
-            "url": "https://www.bing.com/search?q={searchTerms}",
-            "suggestions": "https://www.bing.com/osjson.aspx?query={searchTerms}",
-            "complements": {
-                "title": "Bing",
-                "color": "#ffc107"
-            }
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/search/search.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
+    "options": {
+      "url": "https://www.google.com/search?q={searchTerms}",
+      "suggestions": "https://www.google.com/complete/search?client=firefox&q={searchTerms}",
+      "complements": {
+        "title": "Google",
+        "color": "#2196f3"
+      }
+    }
+  }, {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
+    "options": {
+      "url": "https://www.bing.com/search?q={searchTerms}",
+      "suggestions": "https://www.bing.com/osjson.aspx?query={searchTerms}",
+      "complements": {
+        "title": "Bing",
+        "color": "#ffc107"
+      }
+    }
+  }]
 }
 ```
diff --git a/src/scraper/tools/complements/README.md b/src/scraper/tools/complements/README.md
index d9349ad..e9a24fb 100644
--- a/src/scraper/tools/complements/README.md
+++ b/src/scraper/tools/complements/README.md
@@ -3,12 +3,12 @@
 > Mots-clés : gout, gout-scraper, gout-scraper-tools-complements.
 
 Ce scraper ajoute des propriétés dans les résultats d'un autre scraper. Il est
-rare d'utiliser ce scraper directement dans un widget. Il peut être utiliser
-pour ajouer la fonctionnalité dans un scraper :
+rare d'utiliser ce scraper directement dans un widget. Il peut être utilisé
+pour ajouter la fonctionnalité dans un autre scraper :
 
 ```JavaScript
-import chain from "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/utils/scraper/chain.js";
-import ComplementsScraper from "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/tools/complements/complements.js";
+import chain from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/utils/scraper/chain.js";
+import ComplementsScraper from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/complements/complements.js";
 
 const MyAwesomeScraper = class { /* ... */ };
 
@@ -53,29 +53,29 @@ d'éléments à retourner. La méthode doit retourner une
 contenant un tableau d'objet. Les propriétés seront ajoutées dans chaque élément
 du tableau.
 
-## Example
+## Exemple
 
 Ce widget affiche les dernières vidéos de la chaine YouTube de
 [FIP](https://www.youtube.com/@FipradioFr) en ajoutant le logo de FIP à chaque
-élément. L'option `"complements"` est passée au scraper `list/rss` car ce
-scraper utilise `ComplementsScraper`.
+élément. L'option `"complements"` est passée au scraper _list/rss_ car ce
+scraper utilise _tools/complements_.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-        "options": {
-            "color": "#757575",
-            "cron": "*/10 * * * *",
-            "max": 5
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-        "options": {
-            "url": "https://www.youtube.com/feeds/videos.xml?user=arte"
-            "complements": { "icon": "https://example.com/fip.svg" },
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+    "options": {
+      "color": "#757575",
+      "cron": "*/10 * * * *",
+      "max": 5
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+    "options": {
+      "url": "https://www.youtube.com/feeds/videos.xml?user=arte",
+      "complements": { "icon": "https://example.com/fip.svg" },
+    }
+  }]
 }
 ```
diff --git a/src/scraper/tools/filter/README.md b/src/scraper/tools/filter/README.md
index 99045db..f4d699c 100644
--- a/src/scraper/tools/filter/README.md
+++ b/src/scraper/tools/filter/README.md
@@ -3,12 +3,12 @@
 > Mots-clés : gout, gout-scraper, gout-scraper-tools-filter.
 
 Ce scraper filtre les résultats d'un autre scraper. Il est rare d'utiliser ce
-scraper directement dans un widget. Il peut être utiliser pour ajouer la
-fonctionnalité dans un scraper :
+scraper directement dans un widget. Il peut être utilisé pour ajouter la
+fonctionnalité dans un autre scraper :
 
 ```JavaScript
-import chain from "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/utils/scraper/chain.js";
-import FilterScraper from "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/tools/filter/filter.js";
+import chain from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/utils/scraper/chain.js";
+import FilterScraper from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/filter/filter.js";
 
 const MyAwesomeScraper = class { /* ... */ };
 
@@ -44,47 +44,65 @@ propriété suivante :
   </tr>
 </table>
 
-## Filtre
+### Filtre
 
 Les filtres sont composés de trois éléments :
 
 - la propriété récupérée dans un élément des résultats ;
 - le type de comparaison :
   - générique :
-    - `==`, `!=`, `<`, `<=`, `>`, `>=` ;
+    - [`==`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Strict_equality),
+      [`!=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Strict_inequality),
+      [`<`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Less_than),
+      [`<=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Less_than_or_equal),
+      [`>`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Greater_than),
+      [`>=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Greater_than_or_equal)
+      ;
   - chaine de caractères :
     - `*=` : garder les éléments dont la propriété contient la valeur
-      (`.includes()` sous le capot) ;
+      ([`.includes()`](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String/includes)
+      sous le capot) ;
     - `^=` : garder les éléments dont la propriété commence par la valeur
-      (`.startsWith()` sous le capot) ;
+      ([`.startsWith()`](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String/startsWith)
+      sous le capot) ;
     - `^=` : garder les éléments dont la propriété finit par la valeur
-      (`.endsWith()` sous le capot) ;
+      ([`.endsWith()`](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String/endsWith)
+      sous le capot) ;
 - la valeur comparée :
   - un nombre : `42` ;
   - une chaine de caractères (entourée par des apostrophes) : `'foo'`.
 
-## Example
+## Scrapers
+
+Ce scraper accepte un seul sous-scraper. Le sous-scraper doit définir une
+méthode `extract()` qui prend en paramètre un entier indiquant le nombre maximum
+d'éléments à retourner. La méthode doit retourner une
+[promesse](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Promise)
+contenant un tableau d'objet. Le filtre sera appliqué sur chaque élément du
+tableau.
+
+## Exemple
 
 Ce widget affiche les dernières reportages de la chaine YouTube de
 [Arte](https://www.youtube.com/@arte). L'option `"filter"` est passée au scraper
-`list/rss` car ce scraper utilise `FilterScraper`.
+_list/rss_ car ce scraper utilise _tools/filter_.
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-        "options": {
-            "color": "#757575",
-            "cron": "*/10 * * * *",
-            "max": 5
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-        "options": {
-            "url": "https://www.youtube.com/feeds/videos.xml?user=arte"
-            "filter": "title $= 'ARTE Reportage'",
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+    "options": {
+      "color": "#757575",
+      "cron": "*/10 * * * *",
+      "max": 5
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
+    "options": {
+      "url": "https://www.youtube.com/feeds/videos.xml?user=arte",
+      "filter": "title $= 'ARTE Reportage'",
+    }
+  }]
 }
 ```
diff --git a/src/scraper/tools/repeater/README.md b/src/scraper/tools/repeater/README.md
index 2993d85..3893520 100644
--- a/src/scraper/tools/repeater/README.md
+++ b/src/scraper/tools/repeater/README.md
@@ -17,27 +17,27 @@ clés correspondent aux méthodes simulées et les valeurs aux données retourn
 
 Ce widget affiche une liste avec deux liens allant vers
 [Facebook](https://www.facebook.com/) et
-[Twitter](https://www.twitter.com/).
+[Instagram](https://www.instagram.com/).
 
 ```JSON
 {
-    "module": {
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-        "options": {
-            "color": "#f0a30a"
-        }
-    },
-    "scrapers": [{
-        "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-        "options": {
-            "extract": [{
-                "title": "Facebook",
-                "link": "https://www.facebook.com/"
-            }, {
-                "title": "Twitter",
-                "link": "https://www.twitter.com/"
-            }]
-        }
-    }]
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+    "options": {
+      "color": "#f0a30a"
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
+    "options": {
+      "extract": [{
+        "title": "Facebook",
+        "link": "https://www.facebook.com/"
+      }, {
+        "title": "Instagram",
+        "link": "https://www.instagram.com/"
+      }]
+    }
+  }]
 }
 ```

From e84592f29543e54ac754a630766e9bc9f8ebb783 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 6 Mar 2024 15:57:24 +0100
Subject: [PATCH 15/38] =?UTF-8?q?feat:=20R=C3=A9cup=C3=A9rer=20les=20donn?=
 =?UTF-8?q?=C3=A9es=20dans=20le=20group=20(Atom).?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/scraper/list/rss/rss.js | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/src/scraper/list/rss/rss.js b/src/scraper/list/rss/rss.js
index d8ec5d1..546be17 100644
--- a/src/scraper/list/rss/rss.js
+++ b/src/scraper/list/rss/rss.js
@@ -59,20 +59,33 @@ const RSSScraper = class {
                 date: entry.querySelector("published").textContent,
                 guid: entry.querySelector("id").textContent,
                 link: entry.querySelector("link").getAttribute("href"),
-                summary: entry.querySelector("summary")?.textContent ?? "",
-                title: entry.querySelector("title").textContent,
+                summary:
+                    entry.querySelector("summary")?.textContent ??
+                    // Essayer la description dans "media:group
+                    // media:description".
+                    entry.querySelector("group description")?.textContent ??
+                    "",
+                title:
+                    entry.querySelector("title").textContent ??
+                    // Essayer le titre dans "media:group media:title".
+                    entry.querySelector("group title")?.textContent,
+                thumbnail: entry
+                    // Essayer la miniature dans "media:group media:thumbnail".
+                    .querySelector("group thumbnail")
+                    ?.getAttribute("url"),
             }))
             .map((item) => ({
                 date: new Date(item.date).getTime(),
                 desc: new DOMParser()
                     .parseFromString(
-                        0 === item.summary.trim().length
-                            ? item.content.trim()
-                            : item.summary.trim(),
+                        /^\s*$/u.test(item.summary)
+                            ? item.content
+                            : item.summary,
                         "text/html",
                     )
                     .body.textContent.trim(),
                 guid: this.#url + item.guid,
+                img: item.thumbnail,
                 link: item.link,
                 title: item.title,
             }));

From d3b7a178e2f76f248cea43aa3f8877e535df948a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 6 Mar 2024 16:11:22 +0100
Subject: [PATCH 16/38] docs: Ajouter des exemles.

---
 src/module/examples/minimal/README.md         |  28 +++
 src/module/examples/minimal/minimal.js        |  11 ++
 .../examples/preact/helloworld/README.md      |  28 +++
 .../examples/preact/helloworld/helloworld.js  |  54 ++++++
 src/module/examples/react/tictactoe/README.md |  28 +++
 .../examples/react/tictactoe/tictactoe.css    |  37 ++++
 .../examples/react/tictactoe/tictactoe.js     | 172 ++++++++++++++++++
 src/scraper/examples/README.md                |  12 ++
 src/scraper/examples/days/README.md           |  78 ++++++++
 src/scraper/examples/days/days.js             | 140 ++++++++++++++
 src/scraper/examples/helloworld/README.md     |  70 +++++++
 src/scraper/examples/helloworld/helloworld.js |  70 +++++++
 .../examples/jsonplaceholder/README.md        |  95 ++++++++++
 .../jsonplaceholder/jsonplaceholder.js        | 100 ++++++++++
 14 files changed, 923 insertions(+)
 create mode 100644 src/module/examples/minimal/README.md
 create mode 100644 src/module/examples/minimal/minimal.js
 create mode 100644 src/module/examples/preact/helloworld/README.md
 create mode 100644 src/module/examples/preact/helloworld/helloworld.js
 create mode 100644 src/module/examples/react/tictactoe/README.md
 create mode 100644 src/module/examples/react/tictactoe/tictactoe.css
 create mode 100644 src/module/examples/react/tictactoe/tictactoe.js
 create mode 100644 src/scraper/examples/README.md
 create mode 100644 src/scraper/examples/days/README.md
 create mode 100644 src/scraper/examples/days/days.js
 create mode 100644 src/scraper/examples/helloworld/README.md
 create mode 100644 src/scraper/examples/helloworld/helloworld.js
 create mode 100644 src/scraper/examples/jsonplaceholder/README.md
 create mode 100644 src/scraper/examples/jsonplaceholder/jsonplaceholder.js

diff --git a/src/module/examples/minimal/README.md b/src/module/examples/minimal/README.md
new file mode 100644
index 0000000..8569c9e
--- /dev/null
+++ b/src/module/examples/minimal/README.md
@@ -0,0 +1,28 @@
+# Module _examples/minimal_
+
+> Mots-clés : gout, gout-module, gout-module-examples,
+> gout-module-examples-minimal.
+
+Ce module est un exemple pour montrer le code minimal nécessaire pour ne pas
+avoir d'erreur lors de son utilisation. Le module ne fait rien et n'affiche
+rien.
+
+## Options
+
+Ce module n'a pas d'option.
+
+## Scrapers
+
+Ce module n'utilise pas de scraper.
+
+## Exemple
+
+Ce widget ne fait rien et n'affiche rien.
+
+```JSON
+{
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/minimal/minimal.js"
+  }
+}
+```
diff --git a/src/module/examples/minimal/minimal.js b/src/module/examples/minimal/minimal.js
new file mode 100644
index 0000000..04a6815
--- /dev/null
+++ b/src/module/examples/minimal/minimal.js
@@ -0,0 +1,11 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+// Écrire le code minimal d'un module qui ne fait rien, mais qui ne provoque pas
+// d'erreur. Il faut exporter par défaut une classe qui hérite de HTMLElement.
+// La sera utilisée pour créer un élément personnalisé
+// (https://developer.mozilla.org/Web/API/Web_components/Using_custom_elements).
+export default class MinimalModule extends HTMLElement {}
diff --git a/src/module/examples/preact/helloworld/README.md b/src/module/examples/preact/helloworld/README.md
new file mode 100644
index 0000000..94a464f
--- /dev/null
+++ b/src/module/examples/preact/helloworld/README.md
@@ -0,0 +1,28 @@
+# Module _examples/preact/helloworld_
+
+> Mots-clés : gout, gout-module, gout-module-examples,
+> gout-module-examples-preact, gout-module-examples-preact-helloworld.
+
+Ce module est un exemple utilisant **[Preact](https://preactjs.com/)**. Il
+implémente un _hello world_ récupéré du tutoriel [_Interactive Hello
+World_](https://preactjs.com/guide/v10/tutorial/#interactive-hello-world).
+
+## Options
+
+Ce module n'a pas d'option.
+
+## Scrapers
+
+Ce module n'utilise pas de scraper.
+
+## Exemple
+
+Ce widget affiche un hello world développé avec Preact.
+
+```JSON
+{
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/preact/helloworld/helloworld.js"
+  }
+}
+```
diff --git a/src/module/examples/preact/helloworld/helloworld.js b/src/module/examples/preact/helloworld/helloworld.js
new file mode 100644
index 0000000..24ffd23
--- /dev/null
+++ b/src/module/examples/preact/helloworld/helloworld.js
@@ -0,0 +1,54 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+/* eslint-disable max-classes-per-file, no-restricted-syntax */
+
+import htm from "https://esm.sh/htm@3.1.1";
+import { Component, h, render } from "https://esm.sh/preact@10.19.6";
+
+// Initialize htm with Preact
+const html = htm.bind(h);
+
+const App = class extends Component {
+    // Add `name` to the initial state
+    state = { value: "", name: "world" };
+
+    onInput = (ev) => {
+        this.setState({ value: ev.currentTarget.value });
+    };
+
+    // Add a submit handler that updates the `name` with the latest input value
+    onSubmit = (ev) => {
+        // Prevent default browser behavior (aka don't submit the form here)
+        ev.preventDefault();
+
+        this.setState({ name: this.state.value });
+    };
+
+    render() {
+        return html`
+            <div>
+                <h1>Hello, ${this.state.name}!</h1>
+                <form onSubmit=${this.onSubmit}>
+                    <input
+                        type="text"
+                        value=${this.state.value}
+                        onInput=${this.onInput}
+                    />
+                    <button type="submit">Update</button>
+                </form>
+            </div>
+        `;
+    }
+};
+
+export default class HelloWorldModule extends HTMLElement {
+    connectedCallback() {
+        this.attachShadow({ mode: "open" });
+
+        render(html`<${App} />`, this.shadowRoot);
+    }
+}
diff --git a/src/module/examples/react/tictactoe/README.md b/src/module/examples/react/tictactoe/README.md
new file mode 100644
index 0000000..aadadf7
--- /dev/null
+++ b/src/module/examples/react/tictactoe/README.md
@@ -0,0 +1,28 @@
+# Module _examples/react/tictactoe_
+
+> Mots-clés : gout, gout-module, gout-module-examples,
+> gout-module-examples-react, gout-module-examples-react-tictactoe.
+
+Ce module est un exemple utilisant **[React](https://react.dev/)**. Il
+implémente un jeu de morpion récupéré du tutoriel
+[_Tic-Tac-Toe_](https://react.dev/learn/tutorial-tic-tac-toe).
+
+## Options
+
+Ce module n'a pas d'option.
+
+## Scrapers
+
+Ce module n'utilise pas de scraper.
+
+## Exemple
+
+Ce widget affiche un morpion dévéloppé avec React.
+
+```JSON
+{
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/react/tictactoe/tictactoe.js"
+  }
+}
+```
diff --git a/src/module/examples/react/tictactoe/tictactoe.css b/src/module/examples/react/tictactoe/tictactoe.css
new file mode 100644
index 0000000..9ee4fc7
--- /dev/null
+++ b/src/module/examples/react/tictactoe/tictactoe.css
@@ -0,0 +1,37 @@
+* {
+    box-sizing: border-box;
+}
+
+.square {
+    background: white;
+    border: 1px solid #999999;
+    float: left;
+    font-size: 24px;
+    font-weight: bold;
+    height: 34px;
+    line-height: 34px;
+    margin-right: -1px;
+    margin-top: -1px;
+    padding: 0;
+    text-align: center;
+    width: 34px;
+}
+
+.board-row::after {
+    clear: both;
+    content: "";
+    display: table;
+}
+
+.status {
+    margin-bottom: 10px;
+}
+
+.game {
+    display: flex;
+    flex-direction: row;
+}
+
+.game-info {
+    margin-left: 20px;
+}
diff --git a/src/module/examples/react/tictactoe/tictactoe.js b/src/module/examples/react/tictactoe/tictactoe.js
new file mode 100644
index 0000000..4475b54
--- /dev/null
+++ b/src/module/examples/react/tictactoe/tictactoe.js
@@ -0,0 +1,172 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+/* eslint-disable no-restricted-syntax */
+
+import { html } from "https://esm.sh/htm@3.1.1/react";
+import { createRoot } from "https://esm.sh/react-dom@18.2.0";
+import { useState } from "https://esm.sh/react@18.2.0";
+
+const calculateWinner = (squares) => {
+    const lines = [
+        [0, 1, 2],
+        [3, 4, 5],
+        [6, 7, 8],
+        [0, 3, 6],
+        [1, 4, 7],
+        [2, 5, 8],
+        [0, 4, 8],
+        [2, 4, 6],
+    ];
+    for (const [a, b, c] of lines) {
+        if (
+            squares[a] &&
+            squares[a] === squares[b] &&
+            squares[a] === squares[c]
+        ) {
+            return squares[a];
+        }
+    }
+    return undefined;
+};
+
+const Square = ({ value, onSquareClick }) => {
+    return html`
+        <button className="square" onClick=${onSquareClick}>${value}</button>
+    `;
+};
+
+const Board = ({ xIsNext, squares, onPlay }) => {
+    const handleClick = (i) => {
+        if (calculateWinner(squares) || squares[i]) {
+            return;
+        }
+        const nextSquares = squares.slice();
+        if (xIsNext) {
+            nextSquares[i] = "X";
+        } else {
+            nextSquares[i] = "O";
+        }
+        onPlay(nextSquares);
+    };
+
+    const winner = calculateWinner(squares);
+    let status;
+    if (winner) {
+        status = `Winner: ${winner}`;
+    } else {
+        status = "Next player: " + (xIsNext ? "X" : "O");
+    }
+
+    return html`
+        <div className="status">${status}</div>
+        <div className="board-row">
+            <${Square}
+                value=${squares[0]}
+                onSquareClick=${() => handleClick(0)}
+            />
+            <${Square}
+                value=${squares[1]}
+                onSquareClick=${() => handleClick(1)}
+            />
+            <${Square}
+                value=${squares[2]}
+                onSquareClick=${() => handleClick(2)}
+            />
+        </div>
+        <div className="board-row">
+            <${Square}
+                value=${squares[3]}
+                onSquareClick=${() => handleClick(3)}
+            />
+            <${Square}
+                value=${squares[4]}
+                onSquareClick=${() => handleClick(4)}
+            />
+            <${Square}
+                value=${squares[5]}
+                onSquareClick=${() => handleClick(5)}
+            />
+        </div>
+        <div className="board-row">
+            <${Square}
+                value=${squares[6]}
+                onSquareClick=${() => handleClick(6)}
+            />
+            <${Square}
+                value=${squares[7]}
+                onSquareClick=${() => handleClick(7)}
+            />
+            <${Square}
+                value=${squares[8]}
+                onSquareClick=${() => handleClick(8)}
+            />
+        </div>
+    `;
+};
+
+const Game = () => {
+    const [history, setHistory] = useState([
+        Array.from({ length: 9 }).fill(undefined),
+    ]);
+    const [currentMove, setCurrentMove] = useState(0);
+    const xIsNext = 0 === currentMove % 2;
+    const currentSquares = history[currentMove];
+
+    const handlePlay = (nextSquares) => {
+        const nextHistory = [...history.slice(0, currentMove + 1), nextSquares];
+        setHistory(nextHistory);
+        setCurrentMove(nextHistory.length - 1);
+    };
+
+    const jumpTo = (nextMove) => {
+        setCurrentMove(nextMove);
+    };
+
+    const moves = history.map((_square, move) => {
+        let description;
+        if (0 < move) {
+            description = `Go to move #${move}`;
+        } else {
+            description = "Go to game start";
+        }
+        return html`
+            <li key=${move}>
+                <button onClick=${() => jumpTo(move)}>${description}</button>
+            </li>
+        `;
+    });
+
+    return html`
+        <div className="game">
+            <div className="game-board">
+                <${Board}
+                    xIsNext=${xIsNext}
+                    squares=${currentSquares}
+                    onPlay=${handlePlay}
+                />
+            </div>
+            <div className="game-info">
+                <ol>
+                    ${moves}
+                </ol>
+            </div>
+        </div>
+    `;
+};
+
+export default class TicTacToeModule extends HTMLElement {
+    connectedCallback() {
+        this.attachShadow({ mode: "open" });
+
+        const link = document.createElement("link");
+        link.rel = "stylesheet";
+        link.href = import.meta.resolve("./tictactoe.css");
+        this.shadowRoot.append(link);
+
+        createRoot(this.shadowRoot).render(html`<${Game} />`);
+    }
+}
diff --git a/src/scraper/examples/README.md b/src/scraper/examples/README.md
new file mode 100644
index 0000000..2ef8323
--- /dev/null
+++ b/src/scraper/examples/README.md
@@ -0,0 +1,12 @@
+# Scrapers _examples_
+
+Ce répertoire regroupe des scrapers d'exemples pour comprendre le fonctionnement
+d'un scraper et servir de base pour développer votre propre scraper. Ces
+scrapers n'ont aucune utilité dans un vrai dashboard.
+
+- [_examples/helloworld_](https://github.com/regseb/gout/tree/HEAD/src/scraper/examples/helloworld#readme)
+  : un scraper montrant le minimum pour retourner un élément.
+- [_examples/days_](https://github.com/regseb/gout/tree/HEAD/src/scraper/examples/days#readme)
+  : un scraper retournant plusieurs éléments.
+- [_examples/jsonplaceholder_](https://github.com/regseb/gout/tree/HEAD/src/scraper/examples/jsonplaceholder#readme)
+  : un scraper appelant une API REST (avec `fetch()`).
diff --git a/src/scraper/examples/days/README.md b/src/scraper/examples/days/README.md
new file mode 100644
index 0000000..a8a5dae
--- /dev/null
+++ b/src/scraper/examples/days/README.md
@@ -0,0 +1,78 @@
+# Scraper _examples/days_
+
+> Mots-clés : gout, gout-scraper, gout-scraper-examples-days.
+
+Ce scraper d'exemple d'exemple retourne les noms des prochains jours de la
+semaine. La langue des noms est paramétrable dans les options du scraper.
+
+Il peut être utilisé avec les modules :
+
+- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) ;
+- [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
+  pour afficher seulement le dernier élément.
+
+## Options
+
+Les options sont dans un objet
+[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
+propriétés suivantes :
+
+<table>
+  <tr>
+    <th>Nom</th>
+    <th>Type</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td><code>"lang"</code></td>
+    <td><code>string</code></td>
+    <td>
+      <p>
+        Le code ISO 639-1 de la langue. Par défaut, c'est le français qui est
+        utilisé.
+      </p>
+      <p>
+        Exemple : <code>"en"</code>.
+      </p>
+    </td>
+  </tr>
+  <tr>
+    TODO Ajouter les propriétés des scrapers FilterScraper et ComplementScraper.
+  </tr>
+</table>
+
+## Exemples
+
+Ce widget affiche le nom du lendemain en français.
+
+```JSON
+{
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js"
+  }]
+}
+```
+
+Ce widget affiche les noms des trois prochains jours (sauf le dimanche) en
+anglais.
+
+```JSON
+{
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
+    "options": {
+      "max": 3
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js",
+    "options": {
+      "lang": "en",
+      "filter": "title != 'Sunday'"
+    }
+  }]
+}
+```
diff --git a/src/scraper/examples/days/days.js b/src/scraper/examples/days/days.js
new file mode 100644
index 0000000..5f95593
--- /dev/null
+++ b/src/scraper/examples/days/days.js
@@ -0,0 +1,140 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+// Importer l'utilitaire pour chaîner les scrapers.
+import chain from "../../../utils/scraper/chain.js";
+// Importer le scraper pour compléter les informations.
+import ComplementsScraper from "../../tools/complements/complements.js";
+// Importer le scraper pour filtrer les éléments.
+import FilterScraper from "../../tools/filter/filter.js";
+
+/**
+ * Mettre la première lettre d'une chaîne de caractères en majuscule.
+ *
+ * @param {string} input La chaîne de caractères à modifier.
+ * @returns {string} La chaîne de caractères avec la première lettre en
+ *                   majuscule.
+ */
+const capitalize = function (input) {
+    return input.charAt(0).toUpperCase() + input.slice(1);
+};
+
+/**
+ * Scraper d'exemple qui retourne les noms des prochains jours de la semaine.
+ * Cette classe n'est pas exportée directement, car elle est chaînée avec
+ * d'autres scrapers puis exporter (voir à la fin du fichier).
+ */
+const DaysScraper = class {
+    /**
+     * Le code ISO 639-1 de la langue.
+     *
+     * @type {string}
+     */
+    #lang;
+
+    /**
+     * Crée une instance du scraper.
+     *
+     * @param {Object} options        Les options du scraper (qui ont été
+     *                                définies dans la configuration du widget).
+     * @param {string} [options.lang] Le code ISO 639-1 de la langue (qui a été
+     *                                renseigné dans la propriété "lang" dans la
+     *                                configuration du widget).
+     */
+    constructor({ lang }) {
+        // Récupérer le code ISO 639-1 de la langue dans les options du scraper.
+        // Si la langue n'est pas définie, utiliser le français par défaut.
+        this.#lang = lang ?? "fr";
+    }
+
+    /**
+     * Extraire les éléments pour les fournir au module (qui a été défini dans
+     * la configuration du widget).
+     *
+     * @param {number} max Le nombre maximum d'éléments à retourner.
+     * @returns {Promise<Object[]>} Une promesse contenant un tableau avec les
+     *                              prochains jours de la semaine.
+     */
+    extract(max = Number.MAX_SAFE_INTEGER) {
+        // Retourner une promesse pour être compatible avec les autres scrapers.
+        return Promise.resolve(
+            // Pour les sept prochains jours, déterminer le nom du jour de la
+            // semaine ("Lundi", "Mardi"...).
+            [1, 2, 3, 4, 5, 6, 7]
+                .map((i) => {
+                    const day = new Date();
+                    day.setDate(day.getDate() + i);
+                    const title = capitalize(
+                        day.toLocaleDateString(this.#lang, { weekday: "long" }),
+                    );
+
+                    // Regrouper les informations dans un objet.
+                    return {
+                        // Définir le nom du jour dans la propriété "title".
+                        title,
+                        // Ajouter un lien vers l'article Wikipédia du jour.
+                        link: `https://${this.#lang}.wikipedia.org/wiki/${title}`,
+                        // Renseigner la date en utilisant son timestamp (ce
+                        // format est plus facile à manipuler). Cette propriété
+                        // est utilisée pour trier les éléments du plus récent
+                        // au plus ancien.
+                        date: day.getTime(),
+                    };
+                })
+                // Limiter le nombre d'éléments à retourner (dans le cas où le
+                // maximum est inférieure à sept).
+                .slice(0, max),
+        );
+    }
+};
+
+// Chainer les scrapers pour ajouter les fonctionnalités de filtrage et de
+// complétion dans DaysScraper.
+// eslint-disable-next-line import/no-anonymous-default-export
+export default chain(FilterScraper, ComplementsScraper, DaysScraper, {
+    // Définir comment répartir les options entre les scrapers.
+    dispatch: ({ filter, complements, ...others }) => [
+        // Envoyer la propriété "filter" des options à FilterScraper.
+        { filter },
+        // Envoyer la propriété "complements" des options à ComplementsScraper.
+        { complements },
+        // Envoyer les autres propriétés des options à DaysScraper.
+        others,
+    ],
+});
+
+// Grâce à la chaine de scrapers, la configuration du widget est simplifiée. Par
+// exemple, la configuration suivante :
+//
+// ```JSON
+// {
+//   "module": "...",
+//   "scrapers": [{
+//     "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/filter/filter.js",
+//     "options": { "filter": "..." },
+//     "scrapers": [{
+//       "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/complements/complements.js",
+//       "options": { "complements": "..." },
+//       "scrapers": [{
+//         "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js",
+//         "options": { "lang": "..." }
+//       }]
+//     }]
+//   }]
+// }
+// ```
+//
+// peut être simplifiée en :
+//
+// ```JSON
+// {
+//   "module": "...",
+//   "scrapers": [{
+//     "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js",
+//     "options": { "filter": "...", "complements": "...", "lang": "..." }
+//   }]
+// }
+// ```
diff --git a/src/scraper/examples/helloworld/README.md b/src/scraper/examples/helloworld/README.md
new file mode 100644
index 0000000..bc86ffb
--- /dev/null
+++ b/src/scraper/examples/helloworld/README.md
@@ -0,0 +1,70 @@
+# Scraper _examples/helloworld_
+
+> Mots-clés : gout, gout-scraper, gout-scraper-examples-helloworld.
+
+Ce scraper d'exemple retourne un _Hello world!_. Le mot _world_ est paramétrable
+dans les options du scraper.
+
+Il peut être utilisé avec les modules :
+
+- [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
+  ;
+- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme)
+  pour afficher un seul élément.
+
+## Options
+
+Les options sont dans un objet
+[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec la
+propriété suivante :
+
+<table>
+  <tr>
+    <th>Nom</th>
+    <th>Type</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td><code>"who"</code></td>
+    <td><code>string</code></td>
+    <td>
+      <p>
+        Le nom de la personne à saluer. Par défaut, c'est le `"world"`.
+      </p>
+      <p>
+        Exemple : <code>"there"</code>.
+      </p>
+    </td>
+  </tr>
+</table>
+
+## Exemples
+
+Ce widget affiche le texte `"Hello world!"`.
+
+```JSON
+{
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/helloworld/helloworld.js"
+  }]
+}
+```
+
+Ce widget affiche le texte `"Hello Doctor!"`.
+
+```JSON
+{
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/helloworld/helloworld.js",
+    "options": {
+      "who": "Doctor"
+    }
+  }]
+}
+```
diff --git a/src/scraper/examples/helloworld/helloworld.js b/src/scraper/examples/helloworld/helloworld.js
new file mode 100644
index 0000000..5cea323
--- /dev/null
+++ b/src/scraper/examples/helloworld/helloworld.js
@@ -0,0 +1,70 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+/**
+ * Scraper d'exemple qui retourne un "Hello world!". Cette classe doit être
+ * exportée par défaut pour être utilisée par le moteur de Gout.
+ */
+export default class HelloWorldScraper {
+    /**
+     * Le nom de la personne à saluer.
+     */
+    #who;
+
+    /**
+     * Crée une instance du scraper.
+     *
+     * @param {Object} options       Les options du scraper (qui ont été
+     *                               définies dans la configuration du widget).
+     * @param {string} [options.who] Le nom de la personne à saluer (qui a été
+     *                               renseigné dans la propriété "who" dans la
+     *                               configuration du widget).
+     */
+    constructor({ who }) {
+        // Le premier paramètre du constructeur contient les options du scraper.
+        // Si aucune option est spécifiée dans la configuration du widget, le
+        // constructeur recevra un objet vide.
+
+        // Récupérer le nom de la personne à saluer dans les options du scraper.
+        // Si le nom n'est pas défini, utiliser le mot "world" par défaut.
+        this.#who = who ?? "world";
+    }
+
+    /**
+     * Extraire les éléments pour les fournir au module (qui a été défini dans
+     * la configuration du widget).
+     *
+     * @param {number} max Le nombre maximum d'éléments à retourner.
+     * @returns {Promise<Object[]>} Une promesse contenant un tableau avec un
+     *                              seul élément ayant la salutation.
+     */
+    extract(max = Number.MAX_SAFE_INTEGER) {
+        // Si aucun élément n'est demandé, retourner une promesse contenant un
+        // tableau vide. La méthode extract() doit retourner une promesse
+        // contenant un tableau d'objets pour être compatible avec les autres
+        // scrapers.
+        if (0 === max) {
+            return Promise.resolve([]);
+        }
+
+        // Retourner une promesse contenant un tableau avec un seul élément. Ce
+        // scraper retourne un seul élément, mais d'autres scrapers peuvent
+        // retourner une liste d'éléments.
+        return Promise.resolve([
+            // Utiliser un Object pour représenter l'élément. Ce scraper
+            // renseigne seulement la propriété "title" de l'élément, mais
+            // d'autres scrapers renseignent d'autres propriétés (comme "link",
+            // "desc", "guid"...).
+            {
+                // Définir la salutation dans la propriété "title" de l'élément
+                // pour que le module puisse l'afficher. Le mot "Hello" est
+                // concaténé avec la variable privée "#who" (qui contient la
+                // valeur récupérée dans la configuration du widget).
+                title: `Hello ${this.#who}!`,
+            },
+        ]);
+    }
+}
diff --git a/src/scraper/examples/jsonplaceholder/README.md b/src/scraper/examples/jsonplaceholder/README.md
new file mode 100644
index 0000000..01b170a
--- /dev/null
+++ b/src/scraper/examples/jsonplaceholder/README.md
@@ -0,0 +1,95 @@
+# Scraper _examples/jsonplaceholder_
+
+> Mots-clés : gout, gout-scraper, gout-scraper-examples-jsonplaceholder.
+
+Ce scraper d'exemple appelle l'API
+**[JSONPlaceholder](https://jsonplaceholder.typicode.com/)** et retourne les
+photos d'un album. L'identifiant de l'album est à renseigner dans les options du
+scraper.
+
+Il peut être utilisé avec les modules :
+
+- [_image_](https://github.com/regseb/gout/tree/HEAD/src/module/image#readme) ;
+- [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
+  pour afficher seulement le nom de la dernière image (avec un lien vers
+  l'image) ;
+- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme)
+  pour afficher seulement le nom des images (avec un lien pour voir chaque
+  image).
+
+## Options
+
+Les options sont dans un objet
+[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
+propriétés suivantes :
+
+<table>
+  <tr>
+    <th>Nom</th>
+    <th>Type</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td><code>"album"</code></td>
+    <td><code>number</code></td>
+    <td>
+      <p>
+        L'identifiant de l'album. Un nombre en <code>1</code> et
+        <code>100</code>.
+      </p>
+      <p>
+        Exemple : <code>42</code>.
+      </p>
+    </td>
+  </tr>
+  <tr>
+    <td><code>"complements"</code></td>
+    <td><code>object</code></td>
+    <td>
+      <p>
+        Des propriétés qui seront ajoutées dans les éléments retournés. Par
+        défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
+        scraper
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
+      </p>
+      <p>
+        Exemple : <code>{ "icon": "https://example.com/foo/bar.svg" }</code>.
+      </p>
+    </td>
+  </tr>
+  <tr>
+    <td><code>"filter"</code></td>
+    <td><code>string</code></td>
+    <td>
+      <p>
+        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
+        aucun filtre n'est appliqué. Pour plus de détails, voir le scraper
+        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
+      </p>
+      <p>
+        Exemple : <code>"title != 'foo'"</code>.
+      </p>
+    </td>
+  </tr>
+</table>
+
+## Exemple
+
+Ce widget affiche 5 images de l'album ayant l'identifiant `13`.
+
+```JSON
+{
+  "module": {
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/image/image.js",
+    "options": {
+      "max": 5
+    }
+  },
+  "scrapers": [{
+    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/jsonplaceholder/jsonplaceholder.js",
+    "options": {
+      "album": 13
+    }
+  }]
+}
+```
diff --git a/src/scraper/examples/jsonplaceholder/jsonplaceholder.js b/src/scraper/examples/jsonplaceholder/jsonplaceholder.js
new file mode 100644
index 0000000..385c3ec
--- /dev/null
+++ b/src/scraper/examples/jsonplaceholder/jsonplaceholder.js
@@ -0,0 +1,100 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+// Importer l'utilitaire pour chaîner les scrapers.
+import chain from "../../../utils/scraper/chain.js";
+// Importer le scraper pour compléter les informations.
+import ComplementsScraper from "../../tools/complements/complements.js";
+// Importer le scraper pour filtrer les éléments.
+import FilterScraper from "../../tools/filter/filter.js";
+
+/**
+ * Scraper d'exemple qui retourne les photos d'un album de l'API
+ * JSONPlaceholder. Cette classe n'est pas exportée directement, car elle est
+ * chaînée avec d'autres scrapers puis exporter (voir à la fin du fichier).
+ */
+const JSONPlaceholderScraper = class {
+    /**
+     * L'identifiant de l'album.
+     *
+     * @type {number}
+     */
+    #album;
+
+    /**
+     * Crée une instance du scraper.
+     *
+     * @param {Object} options       Les options du scraper (qui ont été
+     *                               définies dans la configuration du widget).
+     * @param {number} options.album L'identifiant de l'album (qui a été
+     *                               renseigné dans la propriété "albumId" dans
+     *                               la configuration du widget).
+     */
+    constructor({ album }) {
+        // Récupérer l'identifiant de l'album dans les options du scraper. Il
+        // n'y a pas de valeur par défaut, car la propriété est obligatoire.
+        this.#album = album;
+    }
+
+    /**
+     * Extraire les éléments pour les fournir au module (qui a été défini dans
+     * la configuration du widget).
+     *
+     * @param {number} max Le nombre maximum d'éléments à retourner.
+     * @returns {Promise<Object[]>} Une promesse contenant un tableau avec les
+     *                              photos d'un album.
+     */
+    async extract(max = Number.MAX_SAFE_INTEGER) {
+        // Appeler l'API JSONPlaceholder pour récupérer les photos d'un album.
+        const response = await fetch(
+            "https://jsonplaceholder.typicode.com/photos?albumId=" +
+                this.#album,
+        );
+        // Récupérer la liste des photos.
+        const photos = await response.json();
+
+        // Convertir les données des photos dans le format attendu par les
+        // modules.
+        return (
+            photos
+                .map((photo) => ({
+                    // Stocker l'identifiant de la photo dans la propriété "guid".
+                    guid: photo.id,
+                    // Transférer le titre dans la propriété "title".
+                    title: photo.title,
+                    // Utiliser l'URL de la photo dans la propriété "link".
+                    link: photo.url,
+                    // Utiliser l'URL de la miniature pour l'URL de l'image affichée
+                    // dans le module.
+                    image: photo.thumbnailUrl,
+                }))
+                // Limiter éventuellement le nombre de photos retournées.
+                .slice(0, max)
+        );
+    }
+};
+
+// Chainer les scrapers pour ajouter les fonctionnalités de filtrage et de
+// complétion dans JSONPlaceholderScraper.
+// eslint-disable-next-line import/no-anonymous-default-export
+export default chain(
+    FilterScraper,
+    ComplementsScraper,
+    JSONPlaceholderScraper,
+    {
+        // Définir comment répartir les options entre les scrapers.
+        dispatch: ({ filter, complements, ...others }) => [
+            // Envoyer la propriété "filter" des options à FilterScraper.
+            { filter },
+            // Envoyer la propriété "complements" des options à
+            // ComplementsScraper.
+            { complements },
+            // Envoyer les autres propriétés des options à
+            // JSONPlaceholderScraper.
+            others,
+        ],
+    },
+);

From ba1cb15948150f946c48cb27f5d1d18efb2ace9a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 6 Mar 2024 16:12:04 +0100
Subject: [PATCH 17/38] =?UTF-8?q?chore:=20Utiliser=20la=20biblioth=C3=A8qu?=
 =?UTF-8?q?e=20JFather.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/engine/jfather.js       | 178 ------------------------------------
 src/engine/script.js        |   6 +-
 test/unit/engine/jfather.js | 178 ------------------------------------
 3 files changed, 3 insertions(+), 359 deletions(-)
 delete mode 100644 src/engine/jfather.js
 delete mode 100644 test/unit/engine/jfather.js

diff --git a/src/engine/jfather.js b/src/engine/jfather.js
deleted file mode 100644
index 06ec3ab..0000000
--- a/src/engine/jfather.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * <em>Boys use JSON; Men use JFather.</em>
- *
- * @module
- * @license MIT
- * @author Sébastien Règne
- */
-
-/**
- * Exécute une fonction sur un objet et tous ses sous-objets (en partant des
- * objets les plus profonds).
- *
- * @param {any}      obj Une variable quelconque.
- * @param {Function} fn  La fonction appliquée sur tous les objets.
- * @returns {any} Le retour de la fonction.
- */
-export const walk = function (obj, fn) {
-    if (Object === obj?.constructor) {
-        return fn(
-            Object.fromEntries(
-                Object.entries(obj).map(([k, v]) => [k, walk(v, fn)]),
-            ),
-        );
-    }
-
-    if (Array.isArray(obj)) {
-        return obj.map((v) => walk(v, fn));
-    }
-
-    return obj;
-};
-
-/**
- * Exécute une fonction asynchrone sur un objet et tous ses sous-objets (en
- * partant des objets les plus profonds).
- *
- * @param {any}      obj Une variable quelconque.
- * @param {Function} fn  La fonction asynchrone appliquée sur tous les objets.
- * @returns {Promise<any>} Une promesse contenant le retour de la fonction.
- */
-export const walkAsync = async function (obj, fn) {
-    if (Object === obj?.constructor) {
-        return fn(
-            Object.fromEntries(
-                await Promise.all(
-                    Object.entries(obj).map(async ([key, value]) => [
-                        key,
-                        await walkAsync(value, fn),
-                    ]),
-                ),
-            ),
-        );
-    }
-
-    if (Array.isArray(obj)) {
-        return Promise.all(obj.map((v) => walkAsync(v, fn)));
-    }
-
-    return obj;
-};
-
-/**
- * Clone récursivement un objet.
- *
- * @param {any} obj Une variable quelconque.
- * @returns {any} Le clone de la variable d'entrée.
- */
-export const clone = function (obj) {
-    return walk(obj, (v) => v);
-};
-
-/**
- * Extrait un élément d'un objet.
- *
- * @param {Object} obj   L'objet où sera extrait l'élément.
- * @param {string} chain Le chemin de l'élément.
- * @returns {any} L'élément extrait.
- * @throws {TypeError} Si le chemin est invalide.
- */
-export const query = function (obj, chain) {
-    const re = /^\.(?<prop>\w+)|^\[(?<index>\d+)\]/u;
-    const sub = { obj, chain };
-    while (0 !== sub.chain.length) {
-        const result = re.exec(sub.chain);
-        if (undefined !== result?.groups.prop) {
-            sub.obj = sub.obj[result.groups.prop];
-            // eslint-disable-next-line no-negated-condition
-        } else if (undefined !== result?.groups.index) {
-            sub.obj = sub.obj[Number(result.groups.index)];
-        } else {
-            throw new TypeError(`Invalid chain: ${chain}`);
-        }
-        sub.chain = sub.chain.slice(result[0].length);
-    }
-    return sub.obj;
-};
-
-/**
- * Fusionne deux objets récursivement.
- *
- * @param {any} parent L'objet parent.
- * @param {any} child  L'objet enfant.
- * @returns {any} La fusion des deux objets.
- */
-export const merge = function (parent, child) {
-    if (Object !== parent?.constructor || Object !== child?.constructor) {
-        return clone(child);
-    }
-
-    const overrode = {};
-    for (const key of new Set([
-        ...Object.keys(parent),
-        ...Object.keys(child),
-    ])) {
-        // Ne pas copier les surcharges d'éléments.
-        if (key.startsWith("$")) {
-            continue;
-        }
-
-        // Si la propriété est dans les deux objets : fusionner les deux
-        // valeurs.
-        if (key in parent && key in child) {
-            overrode[key] = merge(parent[key], child[key]);
-            // Si la propriété est seulement dans l'objet parent.
-        } else if (key in parent) {
-            overrode[key] = clone(parent[key]);
-            // Si la propriété est seulement dans l'objet enfant.
-        } else {
-            overrode[key] = clone(child[key]);
-        }
-
-        // Si la valeur est un tableau : chercher si l'objet enfant a des
-        // surcharges d'éléments.
-        if (Array.isArray(overrode[key])) {
-            const overelemRegex = new RegExp(
-                `^\\$${key}\\[(?<index>\\d*)\\]$`,
-                "u",
-            );
-            const overelems = Object.entries(child)
-                .map(([k, v]) => [overelemRegex.exec(k)?.groups.index, v])
-                .filter(([i]) => undefined !== i);
-            for (const [index, value] of overelems) {
-                if ("" === index) {
-                    overrode[key].push(clone(value));
-                } else {
-                    overrode[key][Number(index)] = merge(
-                        overrode[key][Number(index)],
-                        value,
-                    );
-                }
-            }
-        }
-    }
-    return overrode;
-};
-
-export const inherit = async function (obj) {
-    if (undefined === obj?.$extends) {
-        return obj;
-    }
-
-    // eslint-disable-next-line no-use-before-define
-    return merge(await load(obj.$extends), obj);
-};
-
-export const transform = function (obj) {
-    return walkAsync(obj, inherit);
-};
-
-export const load = async function (url) {
-    const response = await fetch(url);
-    const json = await response.json();
-    return transform(query(json, new URL(url).hash.replace(/^#/u, ".")));
-};
-
-export const parse = function (text) {
-    return transform(JSON.parse(text));
-};
diff --git a/src/engine/script.js b/src/engine/script.js
index 1dbb35d..719f0f1 100644
--- a/src/engine/script.js
+++ b/src/engine/script.js
@@ -4,7 +4,7 @@
  * @author Sébastien Règne
  */
 
-import * as jfather from "./jfather.js";
+import JFather from "https://esm.sh/jfather@0";
 
 const hashCode = function (text) {
     return Math.abs(
@@ -58,8 +58,8 @@ const liven = async function (script) {
     try {
         const config =
             "" === script.src
-                ? await jfather.parse(script.text)
-                : await jfather.load(script.src);
+                ? await JFather.parse(script.text)
+                : await JFather.load(script.src);
         const widget = await loadWidget(config);
         widget.classList.add("widget");
         script.after(widget);
diff --git a/test/unit/engine/jfather.js b/test/unit/engine/jfather.js
deleted file mode 100644
index 413d66b..0000000
--- a/test/unit/engine/jfather.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * @module
- * @license MIT
- * @author Sébastien Règne
- */
-
-import assert from "node:assert/strict";
-import * as jfather from "../../../src/engine/jfather.js";
-
-describe("engine/jfather.js", function () {
-    describe("walkAsync()", function () {
-        it("should apply on object", async function () {
-            const obj = { foo: "bar" };
-            const result = await jfather.walkAsync(obj, (o) =>
-                Promise.resolve({ ...o, baz: 42 }),
-            );
-            assert.deepEqual(result, { foo: "bar", baz: 42 });
-            // Vérifier que l'objet d'entrée n'a pas été modifié.
-            assert.deepEqual(obj, { foo: "bar" });
-        });
-
-        it("should apply on all elements of array", async function () {
-            const obj = [{ foo: "bar" }, { baz: "qux", quux: "corge" }];
-            const result = await jfather.walkAsync(obj, (o) =>
-                Promise.resolve(Object.keys(o)),
-            );
-            assert.deepEqual(result, [["foo"], ["baz", "quux"]]);
-            // Vérifier que l'objet d'entrée n'a pas été modifié.
-            assert.deepEqual(obj, [
-                { foo: "bar" },
-                { baz: "qux", quux: "corge" },
-            ]);
-        });
-
-        it("should ignore others types", async function () {
-            const obj = "foo";
-            const result = await jfather.walkAsync("foo", () =>
-                Promise.resolve(42),
-            );
-            assert.deepEqual(result, "foo");
-            // Vérifier que l'objet d'entrée n'a pas été modifié.
-            assert.deepEqual(obj, "foo");
-        });
-
-        it("should apply on sub-object", async function () {
-            const obj = { foo: { bar: "baz" } };
-            const result = await jfather.walkAsync(obj, (o) =>
-                Promise.resolve({ ...o, qux: 42 }),
-            );
-            assert.deepEqual(result, { foo: { bar: "baz", qux: 42 }, qux: 42 });
-            // Vérifier que l'objet d'entrée n'a pas été modifié.
-            assert.deepEqual(obj, { foo: { bar: "baz" } });
-        });
-
-        it("should apply on all elements of array of array", async function () {
-            const obj = [[{ foo: "bar" }], { baz: ["qux"], quux: "corge" }];
-            const result = await jfather.walkAsync(obj, (o) =>
-                Promise.resolve(Object.values(o)),
-            );
-            assert.deepEqual(result, [[["bar"]], [["qux"], "corge"]]);
-            // Vérifier que l'objet d'entrée n'a pas été modifié.
-            assert.deepEqual(obj, [
-                [{ foo: "bar" }],
-                { baz: ["qux"], quux: "corge" },
-            ]);
-        });
-    });
-
-    describe("query()", function () {
-        it("should get by property name", function () {
-            const result = jfather.query({ foo: "bar" }, ".foo");
-            assert.deepEqual(result, "bar");
-        });
-
-        it("should get by index", function () {
-            const result = jfather.query(["foo", "bar"], "[1]");
-            assert.deepEqual(result, "bar");
-        });
-
-        it("should get by property name and index", function () {
-            const result = jfather.query({ foo: ["bar", "baz"] }, ".foo[1]");
-            assert.deepEqual(result, "baz");
-        });
-
-        it("should get by sub-property name", function () {
-            const result = jfather.query({ foo: { bar: "baz" } }, ".foo.bar");
-            assert.deepEqual(result, "baz");
-        });
-
-        it("should get reject invalid chain", function () {
-            assert.throws(
-                () => jfather.query({ foo: { bar: "baz" } }, ".qux.quux"),
-                {
-                    name: "TypeError",
-                    message:
-                        "Cannot read properties of undefined (reading 'quux')",
-                },
-            );
-        });
-
-        it("should get reject unsupported chain", function () {
-            assert.throws(() => jfather.query({ foo: "bar" }, ".?foo"), {
-                name: "TypeError",
-                message: "Invalid chain: .?foo",
-            });
-        });
-    });
-
-    describe("merge()", function () {
-        it("should return second when first isn't object", function () {
-            const overrode = jfather.merge("foo", { bar: "baz" });
-            assert.deepEqual(overrode, { bar: "baz" });
-        });
-
-        it("should return second when second isn't object", function () {
-            const overrode = jfather.merge({ foo: "bar" }, "baz");
-            assert.equal(overrode, "baz");
-        });
-
-        it("should return second when both aren't object", function () {
-            const overrode = jfather.merge("foo", "bar");
-            assert.equal(overrode, "bar");
-        });
-
-        it("should merge two objects", function () {
-            const overrode = jfather.merge(
-                { foo: "bar", baz: "qux" },
-                { foo: "quux", corge: "grault" },
-            );
-            assert.deepEqual(overrode, {
-                foo: "quux",
-                baz: "qux",
-                corge: "grault",
-            });
-        });
-
-        it("should override", function () {
-            const overrode = jfather.merge(
-                { foo: ["bar", "baz"] },
-                { "$foo[0]": "qux", "$foo[]": "quux" },
-            );
-            assert.deepEqual(overrode, { foo: ["qux", "baz", "quux"] });
-        });
-
-        it("should override in sub-object", function () {
-            const overrode = jfather.merge(
-                { foo: ["bar", "baz"], qux: { quux: ["corge", "grault"] } },
-                {
-                    "$foo[0]": "garply",
-                    "$foo[]": "waldo",
-                    qux: { fred: "plugh", "$quux[1]": "xyzzy" },
-                },
-            );
-            assert.deepEqual(overrode, {
-                foo: ["garply", "baz", "waldo"],
-                qux: { quux: ["corge", "xyzzy"], fred: "plugh" },
-            });
-        });
-
-        it("should override in depth", function () {
-            const overrode = jfather.merge(
-                { foo: [{ bar: "baz" }, { qux: "quux" }, "corge"] },
-                {
-                    "$foo[0]": "grault",
-                    "$foo[1]": { garply: "waldo" },
-                    "$foo[2]": { fred: "plugh" },
-                },
-            );
-            assert.deepEqual(overrode, {
-                foo: [
-                    "grault",
-                    { qux: "quux", garply: "waldo" },
-                    { fred: "plugh" },
-                ],
-            });
-        });
-    });
-});

From d950ff3890482cd473f4b8883ced66cb597cc12d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 6 Mar 2024 16:13:02 +0100
Subject: [PATCH 18/38] =?UTF-8?q?fix(module/podcast):=20G=C3=A9rer=20les?=
 =?UTF-8?q?=20actions=20play/pause.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/module/podcast/podcast.js | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/module/podcast/podcast.js b/src/module/podcast/podcast.js
index 2f02b09..2ad8a26 100644
--- a/src/module/podcast/podcast.js
+++ b/src/module/podcast/podcast.js
@@ -18,22 +18,30 @@ const hashCode = function (item) {
 };
 
 const playPause = function (event) {
+    const li = event.target.closest("li");
+    const audio = li.querySelector("audio");
+    if (audio.paused) {
+        audio.play();
+    } else {
+        audio.pause();
+    }
+};
+
+const change = function (event) {
     const li = event.target.closest("li");
     const img = li.querySelector("img");
     const a = li.querySelector("a");
     const input = li.querySelector("input");
     const audio = li.querySelector("audio");
     if (audio.paused) {
+        input.style.display = "none";
+        a.style.display = "block";
+        img.src = import.meta.resolve("./img/play.svg");
+    } else {
         a.style.display = "none";
         input.max = Math.trunc(audio.duration);
         input.style.display = "block";
         img.src = import.meta.resolve("./img/pause.svg");
-        audio.play();
-    } else {
-        input.style.display = "none";
-        a.style.display = "block";
-        img.src = import.meta.resolve("./img/play.svg");
-        audio.pause();
     }
 };
 
@@ -111,6 +119,8 @@ export default class PodcastModule extends HTMLElement {
         const audio = li.querySelector("audio");
         audio.src = item.audio;
         audio.addEventListener("timeupdate", elapse);
+        audio.addEventListener("pause", change);
+        audio.addEventListener("play", change);
 
         // Si l'élément n'est pas dans la liste.
         if (!li.isConnected) {

From c220ee604322704392c16669ea7ae06fa6e8cb5a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 6 Mar 2024 16:32:27 +0100
Subject: [PATCH 19/38] =?UTF-8?q?chore:=20Mettre=20=C3=A0=20jour=20les=20d?=
 =?UTF-8?q?=C3=A9pendances.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/ISSUE_TEMPLATE/bug_report.md      |    4 +-
 .github/ISSUE_TEMPLATE/feature_request.md |    4 +-
 .github/workflows/ci.yml                  |   13 +
 .github/workflows/release.yml             |    5 +-
 .metalint/eslint.config.js                |   20 +-
 .metalint/eslint_browser.config.js        |    5 +-
 .metalint/eslint_node.config.js           |    8 +
 .metalint/eslint_test.config.js           |    8 +
 CHANGELOG.md                              |    2 -
 package-lock.json                         | 1123 ++++++++++++---------
 package.json                              |   28 +-
 src/extension/background/migrate.js       |   37 +-
 src/scraper/tools/filter/filter.js        |    6 +
 src/utils/scraper/chain.js                |    4 +-
 template/dashboard/3-columns.html         |    2 +-
 15 files changed, 741 insertions(+), 528 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 127c9df..e3c72cc 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -28,8 +28,8 @@ Steps to reproduce the behavior:
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.10.0 -->:
-- Browser version<!-- e.g. Chrome 120.0.6099.199, Firefox 121.0 -->:
+- Gout extension version<!-- e.g. 0.11.0 -->:
+- Browser version<!-- e.g. Chrome 122.0.6261.94, Firefox 123.0 -->:
 
 ### Additional context
 
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 3fe52d2..eada9e2 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -17,8 +17,8 @@ assignees: ""
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.10.0 -->:
-- Browser version<!-- e.g. Chrome 120.0.6099.199, Firefox 121.0 -->:
+- Gout extension version<!-- e.g. 0.11.0 -->:
+- Browser version<!-- e.g. Chrome 122.0.6261.94, Firefox 123.0 -->:
 
 ### Additional context
 
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d39b059..969aaf9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -84,3 +84,16 @@ jobs:
 
       - name: Perform CodeQL Analysis
         uses: github/codeql-action/analyze@v3
+
+      - name: Run Snyk to check for vulnerabilities
+        uses: snyk/actions/node@master
+        continue-on-error: true
+        env:
+          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
+        with:
+          args: --sarif-file-output=snyk.sarif
+
+      - name: Upload Snyk result to GitHub Code Scanning
+        uses: github/codeql-action/upload-sarif@v3
+        with:
+          sarif_file: snyk.sarif
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 71bbddd..97896d6 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -17,8 +17,9 @@ jobs:
           config-file: .release-please/config.json
           manifest-file: .release-please/manifest.json
 
-      # Formatter les fichiers modifiés par release-please, car ils ne
-      # respectent plus le formatage de Prettier (via Metalint).
+      # Si la PR (pull request) a été créée ou modifiée : formatter les fichiers
+      # modifiés par release-please, car ils ne respectent plus le formatage de
+      # Prettier (via Metalint).
       # https://github.com/googleapis/release-please/issues/1802
       - name: Checkout repository
         if: ${{ steps.release.outputs.pr }}
diff --git a/.metalint/eslint.config.js b/.metalint/eslint.config.js
index 6aabe56..f680e40 100644
--- a/.metalint/eslint.config.js
+++ b/.metalint/eslint.config.js
@@ -404,13 +404,7 @@ export default {
         "import/no-relative-parent-imports": "off",
         "import/no-restricted-paths": "off",
         "import/no-self-import": "error",
-        "import/no-unresolved": [
-            "error",
-            {
-                caseSensitive: true,
-                caseSensitiveStrict: true,
-            },
-        ],
+        "import/no-unresolved": ["error", { caseSensitiveStrict: true }],
         "import/no-useless-path-segments": "error",
         "import/no-webpack-loader-syntax": "error",
 
@@ -767,7 +761,17 @@ export default {
         "unicorn/require-post-message-target-origin": "off",
         "unicorn/string-content": "off",
         "unicorn/switch-case-braces": ["error", "avoid"],
-        "unicorn/template-indent": "error",
+        "unicorn/template-indent": [
+            "error",
+            // Configurer la règle pour qu'elle soit compatible avec Prettier.
+            // https://github.com/prettier/eslint-config-prettier#unicorntemplate-indent
+            {
+                tags: ["outdent", "dedent", "sql", "styled"],
+                functions: ["dedent", "stripIndent"],
+                selectors: [],
+                comments: ["indent"],
+            },
+        ],
         "unicorn/text-encoding-identifier-case": "error",
         "unicorn/throw-new-error": "error",
     },
diff --git a/.metalint/eslint_browser.config.js b/.metalint/eslint_browser.config.js
index 0938173..0b8efee 100644
--- a/.metalint/eslint_browser.config.js
+++ b/.metalint/eslint_browser.config.js
@@ -10,10 +10,13 @@ export default {
     },
 
     rules: {
+        // Plugin eslint-plugin-import.
+        // Static analysis.
         "import/no-unresolved": [
             "error",
             {
-                ignore: ["^https:\\/\\/esm\\.sh\\/"],
+                ignore: ["^https://esm\\.sh/"],
+                caseSensitiveStrict: true,
             },
         ],
     },
diff --git a/.metalint/eslint_node.config.js b/.metalint/eslint_node.config.js
index 34e868c..132abd6 100644
--- a/.metalint/eslint_node.config.js
+++ b/.metalint/eslint_node.config.js
@@ -88,5 +88,13 @@ export default {
         "n/prefer-global/url": "off",
         "n/prefer-promises/dns": "error",
         "n/prefer-promises/fs": "error",
+
+        // Plugin eslint-plugin-unicorn.
+        // Désactiver les règles suivantes, car elles s'appliquent seulement au
+        // DOM et sont donc inutiles dans les scripts Node.js.
+        "unicorn/prefer-dom-node-append": "off",
+        "unicorn/prefer-dom-node-dataset": "off",
+        "unicorn/prefer-dom-node-remove": "off",
+        "unicorn/prefer-dom-node-text-content": "off",
     },
 };
diff --git a/.metalint/eslint_test.config.js b/.metalint/eslint_test.config.js
index a233a85..5f15980 100644
--- a/.metalint/eslint_test.config.js
+++ b/.metalint/eslint_test.config.js
@@ -22,6 +22,7 @@ export default {
         "prefer-arrow-callback": "off",
 
         // Plugin eslint-plugin-mocha.
+        "mocha/consistent-spacing-between-blocks": "error",
         "mocha/handle-done-callback": "error",
         "mocha/max-top-level-suites": "error",
         "mocha/no-async-describe": "error",
@@ -48,5 +49,12 @@ export default {
 
         // Plugin eslint-plugin-no-unsanitized.
         "no-unsanitized/method": "off",
+
+        // Plugin eslint-plugin-unicorn.
+        // Ne pas obliger à sortir les fonctions des tests.
+        "unicorn/consistent-function-scoping": "off",
+        // Autoriser la valeur null pour pouvoir tester cette valeur dans les
+        // tests.
+        "unicorn/no-null": "off",
     },
 };
diff --git a/CHANGELOG.md b/CHANGELOG.md
index da68f2a..548048d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,5 @@
 # Changelog
 
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
 ## [0.10.0](https://github.com/regseb/gout/compare/v0.9.8...v0.10.0) (2024-01-08)
 
 ### Features
diff --git a/package-lock.json b/package-lock.json
index 420fcf6..3f20a14 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,35 +14,35 @@
       },
       "devDependencies": {
         "@prantlf/jsonlint": "14.0.3",
-        "@prettier/plugin-xml": "3.2.2",
-        "@stryker-mutator/core": "8.0.0",
-        "@stryker-mutator/mocha-runner": "8.0.0",
+        "@prettier/plugin-xml": "3.3.1",
+        "@stryker-mutator/core": "8.2.6",
+        "@stryker-mutator/mocha-runner": "8.2.6",
         "@types/mocha": "10.0.6",
-        "addons-linter": "6.19.0",
-        "eslint": "8.56.0",
+        "addons-linter": "6.23.0",
+        "eslint": "8.57.0",
         "eslint-plugin-array-func": "4.0.0",
         "eslint-plugin-eslint-comments": "3.2.0",
         "eslint-plugin-import": "2.29.1",
-        "eslint-plugin-jsdoc": "48.0.2",
-        "eslint-plugin-mocha": "10.2.0",
-        "eslint-plugin-n": "16.6.1",
+        "eslint-plugin-jsdoc": "48.2.0",
+        "eslint-plugin-mocha": "10.3.0",
+        "eslint-plugin-n": "16.6.2",
         "eslint-plugin-no-unsanitized": "4.0.2",
         "eslint-plugin-promise": "6.1.1",
         "eslint-plugin-regexp": "2.2.0",
-        "eslint-plugin-unicorn": "50.0.1",
+        "eslint-plugin-unicorn": "51.0.1",
         "htmlhint": "1.1.4",
         "http-server": "14.1.1",
         "markdownlint": "0.33.0",
         "metalint": "0.15.0",
-        "mocha": "10.2.0",
+        "mocha": "10.3.0",
         "npm-package-json-lint": "7.1.0",
-        "prettier": "3.1.1",
+        "prettier": "3.2.5",
         "purgecss": "5.0.0",
-        "stylelint": "16.1.0",
+        "stylelint": "16.2.1",
         "stylelint-order": "6.0.4",
-        "typedoc": "0.25.7",
+        "typedoc": "0.25.11",
         "typescript": "5.3.3",
-        "web-ext": "7.9.0",
+        "web-ext": "7.11.0",
         "yaml-lint": "1.7.0"
       },
       "engines": {
@@ -62,13 +62,13 @@
       }
     },
     "node_modules/@ampproject/remapping": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
-      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.0",
-        "@jridgewell/trace-mapping": "^0.3.9"
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
       },
       "engines": {
         "node": ">=6.0.0"
@@ -168,9 +168,9 @@
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.23.7",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
-      "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
+      "version": "7.23.9",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
+      "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
@@ -178,11 +178,11 @@
         "@babel/generator": "^7.23.6",
         "@babel/helper-compilation-targets": "^7.23.6",
         "@babel/helper-module-transforms": "^7.23.3",
-        "@babel/helpers": "^7.23.7",
-        "@babel/parser": "^7.23.6",
-        "@babel/template": "^7.22.15",
-        "@babel/traverse": "^7.23.7",
-        "@babel/types": "^7.23.6",
+        "@babel/helpers": "^7.23.9",
+        "@babel/parser": "^7.23.9",
+        "@babel/template": "^7.23.9",
+        "@babel/traverse": "^7.23.9",
+        "@babel/types": "^7.23.9",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -259,9 +259,9 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.23.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz",
-      "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==",
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz",
+      "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.22.5",
@@ -380,9 +380,9 @@
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
-      "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
+      "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -469,14 +469,14 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.23.7",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz",
-      "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==",
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz",
+      "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.22.15",
-        "@babel/traverse": "^7.23.7",
-        "@babel/types": "^7.23.6"
+        "@babel/template": "^7.24.0",
+        "@babel/traverse": "^7.24.0",
+        "@babel/types": "^7.24.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -568,9 +568,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
-      "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
+      "version": "7.23.9",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
+      "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -580,12 +580,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.23.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.7.tgz",
-      "integrity": "sha512-b1s5JyeMvqj7d9m9KhJNHKc18gEJiSyVzVX3bwbiPalQBQpuvfPh6lA9F7Kk/dWH0TIiXRpB9yicwijY6buPng==",
+      "version": "7.23.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.9.tgz",
+      "integrity": "sha512-hJhBCb0+NnTWybvWq2WpbCYDOcflSbx0t+BYP65e5R9GVnukiDTi+on5bFkk4p7QGuv190H6KfNiV9Knf/3cZA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.23.7",
+        "@babel/helper-create-class-features-plugin": "^7.23.9",
         "@babel/helper-plugin-utils": "^7.22.5",
         "@babel/plugin-syntax-decorators": "^7.23.3"
       },
@@ -597,12 +597,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.23.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz",
-      "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==",
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.0.tgz",
+      "integrity": "sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.22.5"
+        "@babel/helper-plugin-utils": "^7.24.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -708,23 +708,35 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
-      "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
+      "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "^7.22.13",
-        "@babel/parser": "^7.22.15",
-        "@babel/types": "^7.22.15"
+        "@babel/code-frame": "^7.23.5",
+        "@babel/parser": "^7.24.0",
+        "@babel/types": "^7.24.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/template/node_modules/@babel/parser": {
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
+      "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
+      "dev": true,
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
     "node_modules/@babel/traverse": {
-      "version": "7.23.7",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
-      "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz",
+      "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.23.5",
@@ -733,8 +745,8 @@
         "@babel/helper-function-name": "^7.23.0",
         "@babel/helper-hoist-variables": "^7.22.5",
         "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/parser": "^7.23.6",
-        "@babel/types": "^7.23.6",
+        "@babel/parser": "^7.24.0",
+        "@babel/types": "^7.24.0",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -742,10 +754,22 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/traverse/node_modules/@babel/parser": {
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
+      "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
+      "dev": true,
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
     "node_modules/@babel/types": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
-      "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
+      "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
       "dev": true,
       "dependencies": {
         "@babel/helper-string-parser": "^7.23.4",
@@ -891,9 +915,9 @@
       }
     },
     "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.41.0",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz",
-      "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==",
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz",
+      "integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==",
       "dev": true,
       "dependencies": {
         "comment-parser": "1.4.1",
@@ -1023,9 +1047,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "8.56.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
-      "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
+      "version": "8.57.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1042,13 +1066,13 @@
       }
     },
     "node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.13",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
-      "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+      "version": "0.11.14",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
       "dev": true,
       "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.1",
-        "debug": "^4.1.1",
+        "@humanwhocodes/object-schema": "^2.0.2",
+        "debug": "^4.3.1",
         "minimatch": "^3.0.5"
       },
       "engines": {
@@ -1091,9 +1115,9 @@
       }
     },
     "node_modules/@humanwhocodes/object-schema": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
-      "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+      "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
       "dev": true
     },
     "node_modules/@isaacs/cliui": {
@@ -1193,32 +1217,32 @@
       }
     },
     "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
-      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/set-array": "^1.2.1",
         "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.9"
+        "@jridgewell/trace-mapping": "^0.3.24"
       },
       "engines": {
         "node": ">=6.0.0"
       }
     },
     "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
-      "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
       "dev": true,
       "engines": {
         "node": ">=6.0.0"
       }
     },
     "node_modules/@jridgewell/set-array": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
       "dev": true,
       "engines": {
         "node": ">=6.0.0"
@@ -1231,9 +1255,9 @@
       "dev": true
     },
     "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.20",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
-      "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+      "version": "0.3.25",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
       "dev": true,
       "dependencies": {
         "@jridgewell/resolve-uri": "^3.1.0",
@@ -1241,21 +1265,21 @@
       }
     },
     "node_modules/@ljharb/through": {
-      "version": "2.3.11",
-      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz",
-      "integrity": "sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==",
+      "version": "2.3.12",
+      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.12.tgz",
+      "integrity": "sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==",
       "dev": true,
       "dependencies": {
-        "call-bind": "^1.0.2"
+        "call-bind": "^1.0.5"
       },
       "engines": {
         "node": ">= 0.4"
       }
     },
     "node_modules/@mdn/browser-compat-data": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.4.3.tgz",
-      "integrity": "sha512-+VnaO5zYUwFQVuRqp2qLPGR5GwhhJ/lrp0yEmamJ/nI15P2GKwGBEWRDiITZR8i6AYxeiQSu2rOi/gqxehnPuA==",
+      "version": "5.5.11",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.11.tgz",
+      "integrity": "sha512-4o1ZaGmvqoDx3QLyEAcZvGDKmdVXLB0aiANuPDumgue/7iH67KUBsKejLX7wrdxEdyNYfXUKtjFQYhGwVUBXGw==",
       "dev": true
     },
     "node_modules/@nodelib/fs.scandir": {
@@ -1364,9 +1388,9 @@
       }
     },
     "node_modules/@prettier/plugin-xml": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.2.2.tgz",
-      "integrity": "sha512-SoE70SQF1AKIvK7LVK80JcdAe6wrDcbodFFjcoqb1FkOqV0G0oSlgAFDwoRXPqkUE5p/YF2nGsnUbnfm6471sw==",
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.3.1.tgz",
+      "integrity": "sha512-kllNJk6n2pXJjGWdj+HAr1GhOoOTrlmeWkDYCGBzkyZS2l0K6h2gsUQcVif2cNqAE1MNC+nUrzN6QwEsCukPnQ==",
       "dev": true,
       "dependencies": {
         "@xml-tools/parser": "^1.0.11"
@@ -1388,14 +1412,14 @@
       }
     },
     "node_modules/@stryker-mutator/api": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-8.0.0.tgz",
-      "integrity": "sha512-4R8yieczpgOrOBQYq1d1aRJLcgenltpMH9ugtIYPPVmENFUo+mWm9HmaahLe+TVHnJSb4OZ4lvI7dVIhoBaiSQ==",
+      "version": "8.2.6",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-8.2.6.tgz",
+      "integrity": "sha512-ygPT37teKh2Ei3sj+cs+kNpaFiz0JyelSDEz4GiQXu8DXy79D0oglSFAKsiVBdzO6MD2eRtyclovfdr/OdPVwA==",
       "dev": true,
       "dependencies": {
-        "mutation-testing-metrics": "3.0.0",
-        "mutation-testing-report-schema": "3.0.0",
-        "tslib": "~2.6.0",
+        "mutation-testing-metrics": "3.0.2",
+        "mutation-testing-report-schema": "3.0.2",
+        "tslib": "~2.6.2",
         "typed-inject": "~4.0.0"
       },
       "engines": {
@@ -1403,39 +1427,39 @@
       }
     },
     "node_modules/@stryker-mutator/core": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-8.0.0.tgz",
-      "integrity": "sha512-dyPs60wtLS9vgghgL5a49k/7KOovOnavXzm5SIBBsBJuxoO+5rvGXRohZaqSoZdb0yWIvp+LFdu6qWcdlJPkoQ==",
+      "version": "8.2.6",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-8.2.6.tgz",
+      "integrity": "sha512-F3JaVOJn+m2xEzNXFrdWl0/34WOnnqjrBADyvxTfoejP8k/oz6R89+QPrR8RwuhTVZUdrmakNkHRPXh9CsaWkw==",
       "dev": true,
       "dependencies": {
-        "@stryker-mutator/api": "8.0.0",
-        "@stryker-mutator/instrumenter": "8.0.0",
-        "@stryker-mutator/util": "8.0.0",
+        "@stryker-mutator/api": "8.2.6",
+        "@stryker-mutator/instrumenter": "8.2.6",
+        "@stryker-mutator/util": "8.2.6",
         "ajv": "~8.12.0",
         "chalk": "~5.3.0",
-        "commander": "~11.1.0",
+        "commander": "~12.0.0",
         "diff-match-patch": "1.0.5",
         "emoji-regex": "~10.3.0",
-        "execa": "~8.0.0",
+        "execa": "~8.0.1",
         "file-url": "~4.0.0",
         "get-port": "~7.0.0",
-        "glob": "~10.3.0",
-        "inquirer": "~9.2.0",
+        "glob": "~10.3.10",
+        "inquirer": "~9.2.13",
         "lodash.groupby": "~4.6.0",
-        "log4js": "~6.9.0",
-        "minimatch": "~9.0.1",
-        "mutation-testing-elements": "3.0.1",
-        "mutation-testing-metrics": "3.0.0",
-        "mutation-testing-report-schema": "3.0.0",
-        "npm-run-path": "~5.1.0",
-        "progress": "~2.0.0",
-        "rxjs": "~7.8.0",
-        "semver": "^7.3.5",
-        "source-map": "~0.7.3",
+        "log4js": "~6.9.1",
+        "minimatch": "~9.0.3",
+        "mutation-testing-elements": "3.0.2",
+        "mutation-testing-metrics": "3.0.2",
+        "mutation-testing-report-schema": "3.0.2",
+        "npm-run-path": "~5.3.0",
+        "progress": "~2.0.3",
+        "rxjs": "~7.8.1",
+        "semver": "^7.5.4",
+        "source-map": "~0.7.4",
         "tree-kill": "~1.2.2",
         "tslib": "2.6.2",
         "typed-inject": "~4.0.0",
-        "typed-rest-client": "~1.8.0"
+        "typed-rest-client": "~1.8.11"
       },
       "bin": {
         "stryker": "bin/stryker.js"
@@ -1445,48 +1469,48 @@
       }
     },
     "node_modules/@stryker-mutator/instrumenter": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-8.0.0.tgz",
-      "integrity": "sha512-kS3BdpqDuJeRBDBw2eP68rhUrgtlT5EGERNOwCwUGpfTtUan7y2zX9ZGEblOtMI5yTtyBArFZMtwhPGi+waJ/Q==",
+      "version": "8.2.6",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-8.2.6.tgz",
+      "integrity": "sha512-2o9ffO4yBxAtCbnOsOAojQmBI4IZcFTCMW9o7CaTThNTQ6j/8gLaU1suxt3IPCRGl30rph0skBAyKiiWaUVhMw==",
       "dev": true,
       "dependencies": {
-        "@babel/core": "~7.23.0",
-        "@babel/generator": "~7.23.0",
-        "@babel/parser": "~7.23.0",
-        "@babel/plugin-proposal-decorators": "~7.23.0",
-        "@babel/preset-typescript": "~7.23.0",
-        "@stryker-mutator/api": "8.0.0",
-        "@stryker-mutator/util": "8.0.0",
-        "angular-html-parser": "~5.0.0",
-        "semver": "~7.5.4",
-        "weapon-regex": "~1.1.0"
+        "@babel/core": "~7.23.9",
+        "@babel/generator": "~7.23.6",
+        "@babel/parser": "~7.23.9",
+        "@babel/plugin-proposal-decorators": "~7.23.9",
+        "@babel/preset-typescript": "~7.23.3",
+        "@stryker-mutator/api": "8.2.6",
+        "@stryker-mutator/util": "8.2.6",
+        "angular-html-parser": "~5.2.0",
+        "semver": "~7.6.0",
+        "weapon-regex": "~1.3.0"
       },
       "engines": {
         "node": ">=18.0.0"
       }
     },
     "node_modules/@stryker-mutator/mocha-runner": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-8.0.0.tgz",
-      "integrity": "sha512-23qNT78l68d/OBrq64UDCKBoYDc+PMbmvTTYrQcCDRKaRn97wEG44ADR+ebqxdEUnV1iiqUXkVMki3jRuYk8gw==",
+      "version": "8.2.6",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-8.2.6.tgz",
+      "integrity": "sha512-WIoNECVBa5mjWJSLu8U6gnDYeeEt7/Y2iIwT75SJqJ4K317fslth2DKlfcXDZaUmdNGxfhvtf7MKOcsbczwboQ==",
       "dev": true,
       "dependencies": {
-        "@stryker-mutator/api": "8.0.0",
-        "@stryker-mutator/util": "8.0.0",
-        "tslib": "~2.6.0"
+        "@stryker-mutator/api": "8.2.6",
+        "@stryker-mutator/util": "8.2.6",
+        "tslib": "~2.6.2"
       },
       "engines": {
         "node": ">=18.0.0"
       },
       "peerDependencies": {
-        "@stryker-mutator/core": "~8.0.0",
+        "@stryker-mutator/core": "~8.2.0",
         "mocha": ">= 7.2 < 11"
       }
     },
     "node_modules/@stryker-mutator/util": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-8.0.0.tgz",
-      "integrity": "sha512-geb2JvbYXDs6vOjGV9514PK+L6NiYFQIYhkpKvzfZQWYijNYnLhxXKz/X264a9StTYbGb/ZBADOkzsVde/5zig==",
+      "version": "8.2.6",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-8.2.6.tgz",
+      "integrity": "sha512-2jmSYmrbGqt59JBkv1TvoOwQpUccCL3c90FLZIWg1zBNwj6zeOrwh734E5dKswDaC+BudQ3FtwlWB5augSuo1w==",
       "dev": true
     },
     "node_modules/@szmarczak/http-timer": {
@@ -1604,43 +1628,43 @@
       }
     },
     "node_modules/addons-linter": {
-      "version": "6.19.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.19.0.tgz",
-      "integrity": "sha512-Yz5YRfIQ12dIqXKmEoHNwoS/L1xIve2hdm9UEesOEsov5W0zeWMOWCnqdvJNVNy7f1FnPu1lnqzylelkTBS7dA==",
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.23.0.tgz",
+      "integrity": "sha512-yFI1fe/c0hkgcWwq6MerWAcDU/CG/NKzQlWxgjQDruMOezs0vyD2fCzapNZt2vxsyNLuDp54q9gNL/85ypYZ/g==",
       "dev": true,
       "dependencies": {
         "@fluent/syntax": "0.19.0",
-        "@mdn/browser-compat-data": "5.4.3",
+        "@mdn/browser-compat-data": "5.5.11",
         "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "9.8.0",
+        "addons-scanner-utils": "9.9.0",
         "ajv": "8.12.0",
         "chalk": "4.1.2",
         "cheerio": "1.0.0-rc.12",
         "columnify": "1.6.0",
         "common-tags": "1.8.2",
         "deepmerge": "4.3.1",
-        "eslint": "8.55.0",
+        "eslint": "8.57.0",
         "eslint-plugin-no-unsanitized": "4.0.2",
-        "eslint-visitor-keys": "3.4.3",
-        "espree": "9.6.1",
+        "eslint-visitor-keys": "4.0.0",
+        "espree": "10.0.1",
         "esprima": "4.0.1",
         "fast-json-patch": "3.1.1",
         "glob": "10.3.10",
-        "image-size": "1.0.2",
+        "image-size": "1.1.1",
         "is-mergeable-object": "1.1.1",
         "jed": "1.1.1",
         "json-merge-patch": "1.0.2",
         "os-locale": "5.0.0",
-        "pino": "8.16.2",
-        "postcss": "8.4.32",
+        "pino": "8.19.0",
+        "postcss": "8.4.35",
         "relaxed-json": "1.0.3",
-        "semver": "7.5.4",
+        "semver": "7.6.0",
         "sha.js": "2.4.11",
         "source-map-support": "0.5.21",
         "tosource": "1.0.0",
         "upath": "2.0.1",
         "yargs": "17.7.2",
-        "yauzl": "2.10.0"
+        "yauzl": "3.1.0"
       },
       "bin": {
         "addons-linter": "bin/addons-linter"
@@ -1649,25 +1673,6 @@
         "node": ">=16.0.0"
       }
     },
-    "node_modules/addons-linter/node_modules/@eslint/js": {
-      "version": "8.55.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz",
-      "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/addons-linter/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
     "node_modules/addons-linter/node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -1684,108 +1689,33 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/addons-linter/node_modules/eslint": {
-      "version": "8.55.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz",
-      "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==",
+    "node_modules/addons-linter/node_modules/eslint-visitor-keys": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
       "dev": true,
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.55.0",
-        "@humanwhocodes/config-array": "^0.11.13",
-        "@humanwhocodes/module-importer": "^1.0.1",
-        "@nodelib/fs.walk": "^1.2.8",
-        "@ungap/structured-clone": "^1.2.0",
-        "ajv": "^6.12.4",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.2.2",
-        "eslint-visitor-keys": "^3.4.3",
-        "espree": "^9.6.1",
-        "esquery": "^1.4.2",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "find-up": "^5.0.0",
-        "glob-parent": "^6.0.2",
-        "globals": "^13.19.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^5.2.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "is-path-inside": "^3.0.3",
-        "js-yaml": "^4.1.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.3",
-        "strip-ansi": "^6.0.1",
-        "text-table": "^0.2.0"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/addons-linter/node_modules/eslint/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/addons-linter/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+    "node_modules/addons-linter/node_modules/espree": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz",
+      "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==",
       "dev": true,
       "dependencies": {
-        "type-fest": "^0.20.2"
+        "acorn": "^8.11.3",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/addons-linter/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
-    "node_modules/addons-linter/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
+        "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/addons-linter/node_modules/supports-color": {
@@ -1800,16 +1730,17 @@
         "node": ">=8"
       }
     },
-    "node_modules/addons-linter/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+    "node_modules/addons-linter/node_modules/yauzl": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.0.tgz",
+      "integrity": "sha512-zbff6SaAPyewVextulqeBjJm+1ZhS69vSN7cRpqVD7jMNSE9oXEdQ1SGF+ydfB+gKE2a3GiWfXf/pnwVZ1/tOA==",
       "dev": true,
-      "engines": {
-        "node": ">=10"
+      "dependencies": {
+        "buffer-crc32": "~0.2.3",
+        "pend": "~1.2.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": ">=12"
       }
     },
     "node_modules/addons-moz-compare": {
@@ -1819,9 +1750,9 @@
       "dev": true
     },
     "node_modules/addons-scanner-utils": {
-      "version": "9.8.0",
-      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.8.0.tgz",
-      "integrity": "sha512-nJJ4QazrtMImyb2OK9SGZlNtinNu25dzOR0lhWthhJQN2iDOf3yqHdSiVBEeZvCwuT/sS1cU6me4O4kgEATjFQ==",
+      "version": "9.9.0",
+      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.9.0.tgz",
+      "integrity": "sha512-YDP10U3sEZMuIgnjXMiAYgUU64jTbxmhpUXMlhi1nKO4Etz+ctGWoTUst7IQRoLWaY9y2r1KZDG3jALxLA1n7Q==",
       "dev": true,
       "dependencies": {
         "@types/yauzl": "2.10.3",
@@ -1901,9 +1832,9 @@
       }
     },
     "node_modules/angular-html-parser": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/angular-html-parser/-/angular-html-parser-5.0.2.tgz",
-      "integrity": "sha512-fov2PwgZDgDsvZXPRa0+lbJyakOZOlFb5eiACR2i6RSn9ad5A+84/SwVfj/dUCbUAHH1ta2uvaoAKEijG93Sfg==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/angular-html-parser/-/angular-html-parser-5.2.0.tgz",
+      "integrity": "sha512-8S/8g5iMcuGhRmBUJ+xuXm9hdjqIcaky2z52RA7tSyz9tWN0mgiP/JR9+kx/SiS1REJpTXnEKpMCMEeVVIeo3A==",
       "dev": true,
       "dependencies": {
         "tslib": "^2.6.2"
@@ -2985,12 +2916,12 @@
       }
     },
     "node_modules/commander": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
-      "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+      "version": "12.0.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz",
+      "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==",
       "dev": true,
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       }
     },
     "node_modules/comment-parser": {
@@ -3839,16 +3770,16 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.56.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
-      "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
+      "version": "8.57.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+      "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.6.1",
         "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.56.0",
-        "@humanwhocodes/config-array": "^0.11.13",
+        "@eslint/js": "8.57.0",
+        "@humanwhocodes/config-array": "^0.11.14",
         "@humanwhocodes/module-importer": "^1.0.1",
         "@nodelib/fs.walk": "^1.2.8",
         "@ungap/structured-clone": "^1.2.0",
@@ -4095,19 +4026,19 @@
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
-      "version": "48.0.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.0.2.tgz",
-      "integrity": "sha512-CBFl5Jc7+jlV36RwDm+PQ8Uw5r28pn2/uW/OaB+Gw5bFwn4Py/1eYMZ3hGf9S4meUFZ/sRvS+hVif2mRAp6WqQ==",
+      "version": "48.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.0.tgz",
+      "integrity": "sha512-O2B1XLBJnUCRkggFzUQ+PBYJDit8iAgXdlu8ucolqGrbmOWPvttZQZX8d1sC0MbqDMSLs8SHSQxaNPRY1RQREg==",
       "dev": true,
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.41.0",
+        "@es-joy/jsdoccomment": "~0.42.0",
         "are-docs-informative": "^0.0.2",
         "comment-parser": "1.4.1",
         "debug": "^4.3.4",
         "escape-string-regexp": "^4.0.0",
         "esquery": "^1.5.0",
         "is-builtin-module": "^3.2.1",
-        "semver": "^7.5.4",
+        "semver": "^7.6.0",
         "spdx-expression-parse": "^4.0.0"
       },
       "engines": {
@@ -4118,9 +4049,9 @@
       }
     },
     "node_modules/eslint-plugin-mocha": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz",
-      "integrity": "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==",
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.3.0.tgz",
+      "integrity": "sha512-IWzbg2K6B1Q7h37Ih4zMyW+nhmw1JvUlHlbCUUUu6PfOOAUGCB0gxmvv7/U+TQQ6e8yHUv+q7KMdIIum4bx+PA==",
       "dev": true,
       "dependencies": {
         "eslint-utils": "^3.0.0",
@@ -4134,9 +4065,9 @@
       }
     },
     "node_modules/eslint-plugin-n": {
-      "version": "16.6.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.1.tgz",
-      "integrity": "sha512-M1kE5bVQRLBMDYRZwDhWzlzbp370SRRRC1MHqq4I3L2Tatey+9/2csc5mwLDPlmhJaDvkojbrNUME5/llpRyDg==",
+      "version": "16.6.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
+      "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
@@ -4253,9 +4184,9 @@
       }
     },
     "node_modules/eslint-plugin-unicorn": {
-      "version": "50.0.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz",
-      "integrity": "sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA==",
+      "version": "51.0.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz",
+      "integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-validator-identifier": "^7.22.20",
@@ -4711,31 +4642,27 @@
       }
     },
     "node_modules/figures": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz",
-      "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
       "dev": true,
       "dependencies": {
-        "escape-string-regexp": "^5.0.0",
-        "is-unicode-supported": "^1.2.0"
+        "escape-string-regexp": "^1.0.5"
       },
       "engines": {
-        "node": ">=14"
+        "node": ">=8"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/figures/node_modules/escape-string-regexp": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
-      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
       "dev": true,
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=0.8.0"
       }
     },
     "node_modules/file-entry-cache": {
@@ -5058,9 +4985,9 @@
       }
     },
     "node_modules/fx-runner": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.3.0.tgz",
-      "integrity": "sha512-5b37H4GCyhF+Nf8xk9mylXoDq4wb7pbGAXxlCXp/631UTeeZomWSYcEGXumY4wk8g2QAqjPMGdWW+RbNt8PUcA==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.4.0.tgz",
+      "integrity": "sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==",
       "dev": true,
       "dependencies": {
         "commander": "2.9.0",
@@ -5926,9 +5853,9 @@
       }
     },
     "node_modules/image-size": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz",
-      "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz",
+      "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==",
       "dev": true,
       "dependencies": {
         "queue": "6.0.2"
@@ -5937,7 +5864,7 @@
         "image-size": "bin/image-size.js"
       },
       "engines": {
-        "node": ">=14.0.0"
+        "node": ">=16.x"
       }
     },
     "node_modules/immediate": {
@@ -6012,18 +5939,18 @@
       "dev": true
     },
     "node_modules/inquirer": {
-      "version": "9.2.12",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz",
-      "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==",
+      "version": "9.2.13",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.13.tgz",
+      "integrity": "sha512-mUlJNemjYioZgaZXqEFlQ0z9GD8/o+pavIF3JyhzWLX4Xa9M1wioGMCxQEFmps70un9lrah2WaBl3kSRVcoV3g==",
       "dev": true,
       "dependencies": {
-        "@ljharb/through": "^2.3.11",
+        "@ljharb/through": "^2.3.12",
         "ansi-escapes": "^4.3.2",
         "chalk": "^5.3.0",
         "cli-cursor": "^3.1.0",
         "cli-width": "^4.1.0",
         "external-editor": "^3.1.0",
-        "figures": "^5.0.0",
+        "figures": "^3.2.0",
         "lodash": "^4.17.21",
         "mute-stream": "1.0.0",
         "ora": "^5.4.1",
@@ -6489,12 +6416,12 @@
       "dev": true
     },
     "node_modules/is-unicode-supported": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
-      "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
       "dev": true,
       "engines": {
-        "node": ">=12"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -6985,18 +6912,6 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/log-symbols/node_modules/is-unicode-supported": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/log-symbols/node_modules/supports-color": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -7410,9 +7325,9 @@
       }
     },
     "node_modules/mocha": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
-      "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz",
+      "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==",
       "dev": true,
       "dependencies": {
         "ansi-colors": "4.1.1",
@@ -7422,13 +7337,12 @@
         "diff": "5.0.0",
         "escape-string-regexp": "4.0.0",
         "find-up": "5.0.0",
-        "glob": "7.2.0",
+        "glob": "8.1.0",
         "he": "1.2.0",
         "js-yaml": "4.1.0",
         "log-symbols": "4.1.0",
         "minimatch": "5.0.1",
         "ms": "2.1.3",
-        "nanoid": "3.3.3",
         "serialize-javascript": "6.0.0",
         "strip-json-comments": "3.1.1",
         "supports-color": "8.1.1",
@@ -7443,10 +7357,6 @@
       },
       "engines": {
         "node": ">= 14.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/mochajs"
       }
     },
     "node_modules/mocha/node_modules/cliui": {
@@ -7470,47 +7380,24 @@
       }
     },
     "node_modules/mocha/node_modules/glob": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
-      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
       "dev": true,
       "dependencies": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
         "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
       },
       "engines": {
-        "node": "*"
+        "node": ">=12"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/mocha/node_modules/minimatch": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
@@ -7633,24 +7520,24 @@
       }
     },
     "node_modules/mutation-testing-elements": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.0.1.tgz",
-      "integrity": "sha512-hsBKkabjD2sjyR2vhdEFPDxZfYLw71geIWjEh4rcZSSQAtyWRfjGf6UbdMjleuyw1ZZTgGt6CImtwRY7s3lrVg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.0.2.tgz",
+      "integrity": "sha512-ISsvj+2pfcyAUEMig83Y5KFvWpy3wJ3NIcXiJ6hD5NQeDdZJnhagRJqLQTwBRkzblqiAuYpY611v4isYJauBbg==",
       "dev": true
     },
     "node_modules/mutation-testing-metrics": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.0.0.tgz",
-      "integrity": "sha512-WslGuCdpqT+6SpeIahMhLrJl5+YbutlOCFKxuULIkAkaHfsWBK8UCq6euE7PiDEx+R1pYZo//kqRbFIOFmdQug==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.0.2.tgz",
+      "integrity": "sha512-FpyCAz43Mmq/l7BIyBrZLv8z3kc5XHNei/DcAyEVSXyj2i+h4jLhen4SiW/BPMijCIMVyiOeMJPMIfaYxrFZGg==",
       "dev": true,
       "dependencies": {
-        "mutation-testing-report-schema": "3.0.0"
+        "mutation-testing-report-schema": "3.0.2"
       }
     },
     "node_modules/mutation-testing-report-schema": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.0.0.tgz",
-      "integrity": "sha512-70+ZPYoyedruSGiEcXQnFiTtIusBYlsL/2EMwfR+/HOqBGxBpmI798spqc86ZVYXPVCL5mt2rWjE1dTQwcjpmQ==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.0.2.tgz",
+      "integrity": "sha512-1F6s37zFDsoWa262sANVBDKANMvmKPVU1FAVEpSCMtKAGkFoar+tjXUlPnD0dWJfPuKV58G86zP7sMlcu+QOJQ==",
       "dev": true
     },
     "node_modules/mute-stream": {
@@ -7750,10 +7637,16 @@
       "optional": true
     },
     "node_modules/nanoid": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
-      "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
-      "dev": true,
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
       "bin": {
         "nanoid": "bin/nanoid.cjs"
       },
@@ -8072,9 +7965,9 @@
       }
     },
     "node_modules/npm-run-path": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
-      "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+      "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
       "dev": true,
       "dependencies": {
         "path-key": "^4.0.0"
@@ -8325,18 +8218,6 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/ora/node_modules/is-unicode-supported": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/ora/node_modules/supports-color": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -8737,9 +8618,9 @@
       }
     },
     "node_modules/pino": {
-      "version": "8.16.2",
-      "resolved": "https://registry.npmjs.org/pino/-/pino-8.16.2.tgz",
-      "integrity": "sha512-2advCDGVEvkKu9TTVSa/kWW7Z3htI/sBKEZpqiHk6ive0i/7f5b1rsU8jn0aimxqfnSz5bj/nOYkwhBUn5xxvg==",
+      "version": "8.19.0",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-8.19.0.tgz",
+      "integrity": "sha512-oswmokxkav9bADfJ2ifrvfHUwad6MLp73Uat0IkQWY3iAw5xTRoznXbXksZs8oaOUMpmhVWD+PZogNzllWpJaA==",
       "dev": true,
       "dependencies": {
         "atomic-sleep": "^1.0.0",
@@ -8747,7 +8628,7 @@
         "on-exit-leak-free": "^2.1.0",
         "pino-abstract-transport": "v1.1.0",
         "pino-std-serializers": "^6.0.0",
-        "process-warning": "^2.0.0",
+        "process-warning": "^3.0.0",
         "quick-format-unescaped": "^4.0.3",
         "real-require": "^0.2.0",
         "safe-stable-stringify": "^2.3.1",
@@ -8871,9 +8752,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.32",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
-      "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+      "version": "8.4.35",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
+      "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
       "dev": true,
       "funding": [
         {
@@ -8958,24 +8839,6 @@
       "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
       "dev": true
     },
-    "node_modules/postcss/node_modules/nanoid": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
-      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
     "node_modules/prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -8986,9 +8849,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
-      "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
+      "version": "3.2.5",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
+      "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
       "dev": true,
       "bin": {
         "prettier": "bin/prettier.cjs"
@@ -9016,9 +8879,9 @@
       "dev": true
     },
     "node_modules/process-warning": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz",
-      "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
+      "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==",
       "dev": true
     },
     "node_modules/progress": {
@@ -10012,9 +9875,9 @@
       "dev": true
     },
     "node_modules/semver": {
-      "version": "7.5.4",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
-      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "version": "7.6.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^6.0.0"
@@ -10624,14 +10487,14 @@
       }
     },
     "node_modules/stylelint": {
-      "version": "16.1.0",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.1.0.tgz",
-      "integrity": "sha512-Sh1rRV0lN1qxz/QsuuooLWsIZ/ona7NKw/fRZd6y6PyXYdD2W0EAzJ8yJcwSx4Iw/muz0CF09VZ+z4EiTAcKmg==",
+      "version": "16.2.1",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz",
+      "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==",
       "dev": true,
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.4.0",
-        "@csstools/css-tokenizer": "^2.2.2",
-        "@csstools/media-query-list-parser": "^2.1.6",
+        "@csstools/css-parser-algorithms": "^2.5.0",
+        "@csstools/css-tokenizer": "^2.2.3",
+        "@csstools/media-query-list-parser": "^2.1.7",
         "@csstools/selector-specificity": "^3.0.1",
         "balanced-match": "^2.0.0",
         "colord": "^2.9.3",
@@ -10651,14 +10514,14 @@
         "is-plain-object": "^5.0.0",
         "known-css-properties": "^0.29.0",
         "mathml-tag-names": "^2.1.3",
-        "meow": "^13.0.0",
+        "meow": "^13.1.0",
         "micromatch": "^4.0.5",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.0.0",
-        "postcss": "^8.4.32",
+        "postcss": "^8.4.33",
         "postcss-resolve-nested-selector": "^0.1.1",
         "postcss-safe-parser": "^7.0.0",
-        "postcss-selector-parser": "^6.0.13",
+        "postcss-selector-parser": "^6.0.15",
         "postcss-value-parser": "^4.2.0",
         "resolve-from": "^5.0.0",
         "string-width": "^4.2.3",
@@ -11230,9 +11093,9 @@
       }
     },
     "node_modules/typedoc": {
-      "version": "0.25.7",
-      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.7.tgz",
-      "integrity": "sha512-m6A6JjQRg39p2ZVRIN3NKXgrN8vzlHhOS+r9ymUYtcUP/TIQPvWSq7YgE5ZjASfv5Vd5BW5xrir6Gm2XNNcOow==",
+      "version": "0.25.11",
+      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.11.tgz",
+      "integrity": "sha512-5MbI1W/FOG6oXsd8bdssQidSTeKh8Kt3xA5uKVzI+K99uzP8EGN45uPnPvQesyaWdD+89s4wCQdtWEd8QUbiRg==",
       "dev": true,
       "dependencies": {
         "lunr": "^2.3.9",
@@ -11511,20 +11374,20 @@
       }
     },
     "node_modules/weapon-regex": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/weapon-regex/-/weapon-regex-1.1.1.tgz",
-      "integrity": "sha512-b0RmqduiSUKyKFamrpU+UK78Jm65/6CgKq1zoWFaS9PM7vwNK4RWrjmX1jREs3pLmG7botsgMLVOltxDR7RGRw==",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/weapon-regex/-/weapon-regex-1.3.1.tgz",
+      "integrity": "sha512-l1qFP+WdehGfqNwW9MTtEB87PZITaIiz+m0ndvJS80/jlShRvP4rRQR/XXij53Rfa1zRe2qbOAcH+MQAsYtYYw==",
       "dev": true
     },
     "node_modules/web-ext": {
-      "version": "7.9.0",
-      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.9.0.tgz",
-      "integrity": "sha512-oWMiM3e+u5E8X7aUMgQ0BCGjlbZt4XwF6ExAXsXx9Btdz3nLmUY/4eKEZA1J+2T7WhCdRwN7Pdh2VKMej/pthQ==",
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.11.0.tgz",
+      "integrity": "sha512-EG6YXHITNDJB/h6Rc5FF08eMoN45sZPBBIIlEraBzxJ0RdJZ8Z3xvUUawbDwt+mowfv9X0XRWlLSwdWbRKgojg==",
       "dev": true,
       "dependencies": {
         "@babel/runtime": "7.21.0",
         "@devicefarmer/adbkit": "3.2.3",
-        "addons-linter": "6.19.0",
+        "addons-linter": "6.21.0",
         "bunyan": "1.8.15",
         "camelcase": "7.0.1",
         "chrome-launcher": "0.15.1",
@@ -11533,7 +11396,7 @@
         "es6-error": "4.1.1",
         "firefox-profile": "4.3.2",
         "fs-extra": "11.1.0",
-        "fx-runner": "1.3.0",
+        "fx-runner": "1.4.0",
         "import-fresh": "3.3.0",
         "jose": "4.13.1",
         "mkdirp": "1.0.4",
@@ -11563,6 +11426,95 @@
         "npm": ">=6.9.0"
       }
     },
+    "node_modules/web-ext/node_modules/@eslint/js": {
+      "version": "8.56.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
+      "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
+      "dev": true,
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/web-ext/node_modules/@mdn/browser-compat-data": {
+      "version": "5.5.7",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.7.tgz",
+      "integrity": "sha512-DoHTZ/TjtNfUu9eiqJd+x3IcCQrhS+yOYU436TKUnlE36jZwNbK535D1CmTsSYdi/UcdCWNm5KRQZ9g1tlZCPw==",
+      "dev": true
+    },
+    "node_modules/web-ext/node_modules/addons-linter": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.21.0.tgz",
+      "integrity": "sha512-4GBn14BR16FZE7dog6uz+1HO6V3B+mAVxmbwxRhed2y5eyrwIW832TmEpku+5A5bbovBZ4gilXEtBsl6A1AMmg==",
+      "dev": true,
+      "dependencies": {
+        "@fluent/syntax": "0.19.0",
+        "@mdn/browser-compat-data": "5.5.7",
+        "addons-moz-compare": "1.3.0",
+        "addons-scanner-utils": "9.9.0",
+        "ajv": "8.12.0",
+        "chalk": "4.1.2",
+        "cheerio": "1.0.0-rc.12",
+        "columnify": "1.6.0",
+        "common-tags": "1.8.2",
+        "deepmerge": "4.3.1",
+        "eslint": "8.56.0",
+        "eslint-plugin-no-unsanitized": "4.0.2",
+        "eslint-visitor-keys": "3.4.3",
+        "espree": "9.6.1",
+        "esprima": "4.0.1",
+        "fast-json-patch": "3.1.1",
+        "glob": "10.3.10",
+        "image-size": "1.1.1",
+        "is-mergeable-object": "1.1.1",
+        "jed": "1.1.1",
+        "json-merge-patch": "1.0.2",
+        "os-locale": "5.0.0",
+        "pino": "8.17.2",
+        "postcss": "8.4.33",
+        "relaxed-json": "1.0.3",
+        "semver": "7.5.4",
+        "sha.js": "2.4.11",
+        "source-map-support": "0.5.21",
+        "tosource": "1.0.0",
+        "upath": "2.0.1",
+        "yargs": "17.7.2",
+        "yauzl": "2.10.0"
+      },
+      "bin": {
+        "addons-linter": "bin/addons-linter"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/web-ext/node_modules/addons-linter/node_modules/yargs": {
+      "version": "17.7.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+      "dev": true,
+      "dependencies": {
+        "cliui": "^8.0.1",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.3",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/web-ext/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
     "node_modules/web-ext/node_modules/camelcase": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
@@ -11575,6 +11527,22 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/web-ext/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
     "node_modules/web-ext/node_modules/decamelize": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz",
@@ -11587,6 +11555,77 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/web-ext/node_modules/eslint": {
+      "version": "8.56.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
+      "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/js": "8.56.0",
+        "@humanwhocodes/config-array": "^0.11.13",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@nodelib/fs.walk": "^1.2.8",
+        "@ungap/structured-clone": "^1.2.0",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
+        "esquery": "^1.4.2",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "globals": "^13.19.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3",
+        "strip-ansi": "^6.0.1",
+        "text-table": "^0.2.0"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/eslint/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dev": true,
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
     "node_modules/web-ext/node_modules/fs-extra": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
@@ -11601,6 +11640,27 @@
         "node": ">=14.14"
       }
     },
+    "node_modules/web-ext/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/web-ext/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true
+    },
     "node_modules/web-ext/node_modules/jsonfile": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -11622,6 +11682,30 @@
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       }
     },
+    "node_modules/web-ext/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/web-ext/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/web-ext/node_modules/mkdirp": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -11670,6 +11754,71 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/web-ext/node_modules/pino": {
+      "version": "8.17.2",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-8.17.2.tgz",
+      "integrity": "sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==",
+      "dev": true,
+      "dependencies": {
+        "atomic-sleep": "^1.0.0",
+        "fast-redact": "^3.1.1",
+        "on-exit-leak-free": "^2.1.0",
+        "pino-abstract-transport": "v1.1.0",
+        "pino-std-serializers": "^6.0.0",
+        "process-warning": "^3.0.0",
+        "quick-format-unescaped": "^4.0.3",
+        "real-require": "^0.2.0",
+        "safe-stable-stringify": "^2.3.1",
+        "sonic-boom": "^3.7.0",
+        "thread-stream": "^2.0.0"
+      },
+      "bin": {
+        "pino": "bin.js"
+      }
+    },
+    "node_modules/web-ext/node_modules/postcss": {
+      "version": "8.4.33",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
+      "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/web-ext/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/web-ext/node_modules/strip-bom": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz",
@@ -11694,6 +11843,18 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/web-ext/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/web-ext/node_modules/tmp": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
@@ -11706,6 +11867,18 @@
         "node": ">=8.17.0"
       }
     },
+    "node_modules/web-ext/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/web-ext/node_modules/universalify": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
@@ -11715,6 +11888,12 @@
         "node": ">= 10.0.0"
       }
     },
+    "node_modules/web-ext/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
     "node_modules/web-ext/node_modules/yargs": {
       "version": "17.7.1",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
diff --git a/package.json b/package.json
index 80f32a5..7c7b171 100644
--- a/package.json
+++ b/package.json
@@ -42,35 +42,35 @@
   },
   "devDependencies": {
     "@prantlf/jsonlint": "14.0.3",
-    "@prettier/plugin-xml": "3.2.2",
-    "@stryker-mutator/core": "8.0.0",
-    "@stryker-mutator/mocha-runner": "8.0.0",
+    "@prettier/plugin-xml": "3.3.1",
+    "@stryker-mutator/core": "8.2.6",
+    "@stryker-mutator/mocha-runner": "8.2.6",
     "@types/mocha": "10.0.6",
-    "addons-linter": "6.19.0",
-    "eslint": "8.56.0",
+    "addons-linter": "6.23.0",
+    "eslint": "8.57.0",
     "eslint-plugin-array-func": "4.0.0",
     "eslint-plugin-eslint-comments": "3.2.0",
     "eslint-plugin-import": "2.29.1",
-    "eslint-plugin-jsdoc": "48.0.2",
-    "eslint-plugin-mocha": "10.2.0",
-    "eslint-plugin-n": "16.6.1",
+    "eslint-plugin-jsdoc": "48.2.0",
+    "eslint-plugin-mocha": "10.3.0",
+    "eslint-plugin-n": "16.6.2",
     "eslint-plugin-no-unsanitized": "4.0.2",
     "eslint-plugin-promise": "6.1.1",
     "eslint-plugin-regexp": "2.2.0",
-    "eslint-plugin-unicorn": "50.0.1",
+    "eslint-plugin-unicorn": "51.0.1",
     "htmlhint": "1.1.4",
     "http-server": "14.1.1",
     "markdownlint": "0.33.0",
     "metalint": "0.15.0",
-    "mocha": "10.2.0",
+    "mocha": "10.3.0",
     "npm-package-json-lint": "7.1.0",
-    "prettier": "3.1.1",
+    "prettier": "3.2.5",
     "purgecss": "5.0.0",
-    "stylelint": "16.1.0",
+    "stylelint": "16.2.1",
     "stylelint-order": "6.0.4",
-    "typedoc": "0.25.7",
+    "typedoc": "0.25.11",
     "typescript": "5.3.3",
-    "web-ext": "7.9.0",
+    "web-ext": "7.11.0",
     "yaml-lint": "1.7.0"
   },
   "engines": {
diff --git a/src/extension/background/migrate.js b/src/extension/background/migrate.js
index 10936ec..7bf7c63 100644
--- a/src/extension/background/migrate.js
+++ b/src/extension/background/migrate.js
@@ -4,26 +4,19 @@
  * @author Sébastien Règne
  */
 
-// Utiliser un then() car addons-linter échoue à analyser les fichiers sans
-// import / export et avec un await dans le scope global.
-// https://github.com/mozilla/addons-linter/issues/4020
-// eslint-disable-next-line unicorn/prefer-top-level-await
-browser.storage.sync.get().then(async (current) => {
-    // Vider la configuration pour enlever les éventuelles propriétés obsolètes.
-    // Et aussi pour forcer l'appel à l'écouteur browser.storage.onChanged sous
-    // Chromium même si la méthode browser.storage.local.set() ne modifie pas la
-    // configuration.
-    await browser.storage.sync.clear();
+const current = await browser.storage.sync.get();
 
-    if ("version" in current) {
-        await browser.storage.sync.set({
-            version: current.version,
-            dashboards: current.dashboards,
-        });
-    } else {
-        await browser.storage.sync.set({
-            version: 1,
-            dashboards: [],
-        });
-    }
-});
+// Vider la configuration pour enlever les éventuelles propriétés obsolètes.
+await browser.storage.sync.clear();
+
+if ("version" in current) {
+    await browser.storage.sync.set({
+        version: current.version,
+        dashboards: current.dashboards,
+    });
+} else {
+    await browser.storage.sync.set({
+        version: 1,
+        dashboards: [],
+    });
+}
diff --git a/src/scraper/tools/filter/filter.js b/src/scraper/tools/filter/filter.js
index 9ff8c65..64fb251 100644
--- a/src/scraper/tools/filter/filter.js
+++ b/src/scraper/tools/filter/filter.js
@@ -73,6 +73,12 @@ const compile = (filter) => {
 };
 
 export default class FilterScraper {
+    /**
+     * La fonction pour filtrer prennant en argument un élément et retournant un
+     * booléen.
+     *
+     * @type {Function}
+     */
     #filter;
 
     /**
diff --git a/src/utils/scraper/chain.js b/src/utils/scraper/chain.js
index 787e8a6..58bbbe1 100644
--- a/src/utils/scraper/chain.js
+++ b/src/utils/scraper/chain.js
@@ -37,9 +37,9 @@ export default function chain(FirstScraper, ...others) {
         constructor(options, scrapers) {
             const allOptions = dispatch(options);
             const subScrapers = AllScraperss.reduce(
-                (dependancies, Scrapers) => {
+                (dependencies, Scrapers) => {
                     return Scrapers.map(
-                        (S) => new S(allOptions.pop(), dependancies),
+                        (S) => new S(allOptions.pop(), dependencies),
                     );
                 },
                 scrapers,
diff --git a/template/dashboard/3-columns.html b/template/dashboard/3-columns.html
index 2c22ff9..9b6d7b3 100644
--- a/template/dashboard/3-columns.html
+++ b/template/dashboard/3-columns.html
@@ -38,7 +38,7 @@
     </div>
     <div style="width: 33%">
       <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
-           deuxième colonne. -->
+           colonne du milieu. -->
     </div>
     <div style="width: 33%">
       <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la

From 0b477b7cb7109d41dd2595ed1fc6a43f3605120e Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 7 Mar 2024 10:12:47 +0100
Subject: [PATCH 20/38] chore(main): release 0.11.0 (#15)

---
 .release-please/manifest.json |  2 +-
 CHANGELOG.md                  | 10 ++++++++++
 package-lock.json             |  4 ++--
 package.json                  |  2 +-
 src/extension/manifest.json   |  2 +-
 5 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/.release-please/manifest.json b/.release-please/manifest.json
index 15cc783..0051aa3 100644
--- a/.release-please/manifest.json
+++ b/.release-please/manifest.json
@@ -1 +1 @@
-{ ".": "0.10.0" }
+{ ".": "0.11.0" }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 548048d..2a995b5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
 # Changelog
 
+## [0.11.0](https://github.com/regseb/gout/compare/v0.10.0...v0.11.0) (2024-03-07)
+
+### Features
+
+- Récupérer les données dans le group (Atom). ([e84592f](https://github.com/regseb/gout/commit/e84592f29543e54ac754a630766e9bc9f8ebb783))
+
+### Bug Fixes
+
+- **module/podcast:** Gérer les actions play/pause. ([d950ff3](https://github.com/regseb/gout/commit/d950ff3890482cd473f4b8883ced66cb597cc12d))
+
 ## [0.10.0](https://github.com/regseb/gout/compare/v0.9.8...v0.10.0) (2024-01-08)
 
 ### Features
diff --git a/package-lock.json b/package-lock.json
index 3f20a14..679ae2d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "gout",
-  "version": "0.10.0",
+  "version": "0.11.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "gout",
-      "version": "0.10.0",
+      "version": "0.11.0",
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
diff --git a/package.json b/package.json
index 7c7b171..4349eaf 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "gout",
-  "version": "0.10.0",
+  "version": "0.11.0",
   "description": "Agrégateur d'Internet (flux RSS et tout le reste).",
   "keywords": [
     "gout",
diff --git a/src/extension/manifest.json b/src/extension/manifest.json
index 3658079..1f24ed0 100644
--- a/src/extension/manifest.json
+++ b/src/extension/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 2,
   "name": "Gout",
-  "version": "0.10.0",
+  "version": "0.11.0",
   "browser_action": {
     "default_icon": {
       "16": "img/icon16.png",

From 91b03eed5cbc4e8d5697863ddadd7792634f67b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Mon, 27 May 2024 10:04:35 +0200
Subject: [PATCH 21/38] feat: Utiliser YAML pour les configurations.

---
 README.md                                     | 152 +++++++++---------
 src/engine/script.js                          |  32 +++-
 src/module/audio/README.md                    |  54 +++----
 src/module/clock/README.md                    |  40 +++--
 src/module/examples/minimal/README.md         |  11 +-
 .../examples/preact/helloworld/README.md      |  11 +-
 src/module/examples/react/tictactoe/README.md |  11 +-
 src/module/icon/README.md                     |  52 +++---
 src/module/iframe/README.md                   |  40 +++--
 src/module/image/README.md                    |  47 +++---
 src/module/list/README.md                     |  60 ++++---
 src/module/notepad/README.md                  |  34 ++--
 src/module/podcast/README.md                  |  62 ++++---
 src/module/search/README.md                   |  30 ++--
 src/module/single/README.md                   |  45 +++---
 src/module/text/README.md                     |  46 +++---
 src/module/tools/contrast/README.md           |  11 +-
 src/module/tools/findrss/README.md            |  21 ++-
 src/scraper/examples/days/README.md           |  50 +++---
 src/scraper/examples/days/days.js             |  50 +++---
 src/scraper/examples/helloworld/README.md     |  43 +++--
 .../examples/jsonplaceholder/README.md        |  36 ++---
 src/scraper/icon/ping/README.md               |  38 ++---
 src/scraper/list/jsonfeed/README.md           |  40 +++--
 src/scraper/list/rss/README.md                |  38 ++---
 src/scraper/search/opensearch/README.md       |  57 +++----
 src/scraper/tools/complements/README.md       |  47 +++---
 src/scraper/tools/filter/README.md            |  46 +++---
 src/scraper/tools/repeater/README.md          |  40 ++---
 template/dashboard/3-columns.html             |  12 +-
 template/dashboard/4-columns.html             |  12 +-
 31 files changed, 604 insertions(+), 664 deletions(-)

diff --git a/README.md b/README.md
index 8f160b4..1ed2996 100644
--- a/README.md
+++ b/README.md
@@ -10,10 +10,11 @@
 
 Gout est une **extension** Firefox pour récupérer des informations sur Internet
 (flux RSS, résultats d'API, parsing de sites Internet...) et les afficher dans
-une page Web. Les [dashboards](#dashboard) sont ces pages Web avec du JSON pour
-configurer chaque [widget](#widget). La configuration d'un widget comporte un
-[module](#module) pour définir le format d'affichage ; et des
-[scrapers](#scraper) pour extraire des données.
+une page Web. Les [dashboards](#dashboard) sont ces pages Web avec du
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") pour configurer chaque
+[widget](#widget). La configuration d'un widget comporte un [module](#module)
+pour définir le format d'affichage ; et des [scrapers](#scraper) pour extraire
+des données.
 
 ### Dashboard
 
@@ -40,19 +41,31 @@ Voici un exemple de dashboard ayant quatre colonnes de widgets.
   </head>
   <body>
     <div style="width: 30%;">
-      <script type="application/json">{ "...": "..." }</script>
-      <script type="application/json">{ "...": "..." }</script>
+      <script type="application/yaml">
+        # ...
+      </script>
+      <script type="application/yaml">
+        # ...
+      </script>
       <!-- ... -->
     </div>
     <div style="width: 30%;">
-      <script type="application/json">{ "...": "..." }</script>
+      <script type="application/yaml">
+        # ...
+      </script>
     </div>
     <div style="width: 20%;">
-      <script type="application/json">{ "...": "..." }</script>
+      <script type="application/yaml">
+        # ...
+      </script>
     </div>
     <div style="width: 20%;">
-      <script type="application/json">{ "...": "..." }</script>
-      <script type="application/json">{ "...": "..." }</script>
+      <script type="application/yaml">
+        # ...
+      </script>
+      <script type="application/yaml">
+        # ...
+      </script>
     </div>
   </body>
 </html>
@@ -61,37 +74,38 @@ Voici un exemple de dashboard ayant quatre colonnes de widgets.
 ### Widget
 
 Un widget est un bloc du dashboard. C'est un élément `<script>` (avec le
-`type="application/json"`). Le widget sera ajouté dans le DOM de la page au même
-endroit que l'élément `<script>`. Le contenu du `<script>` est un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") ayant
-deux propriétés :
-
-- `"module"` : Un objet JSON contenant la configuration du [module](#module).
-- `"scrapers"` : Un tableau d'objets JSON pour les configurations de chaque
-  [scraper](#scraper).
+`type="application/yaml"`). Le widget sera ajouté dans le DOM de la page au même
+endroit que l'élément `<script>`. Le contenu du `<script>` est au format
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés :
+
+```yaml
+module:
+  url: # L'URL du fichier JavaScript du module.
+  options: # Les options du module.
+  scrapers:
+    - url: # L'URL du fichier JavaScript du premier scraper.
+      options: # Les options du premier scraper.
+    - url: # L'URL du fichier JavaScript du deuxième scraper.
+      options: # Les options du deuxième scraper.
+    # ...
+```
 
 Cet exemple de widget récupère les dernières publications du flux RSS du site
 [LinuxFr.org](https://linuxfr.org/) et il les affiche sous forme d'une liste de
 liens.
 
-```HTML
-<script type="application/json">
-  {
-    "module": {
-      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-      "options": {
-        "max": 5,
-        "color": "#ffc107",
-        "cron": "*/10 * * * *"
-      }
-    },
-    "scrapers": [{
-      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-      "options": {
-        "url": "https://linuxfr.org/news.atom"
-      }
-    }]
-  }
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      max: 5
+      color: "#ffc107"
+      cron: "*/10 * * * *"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+        options:
+          url: "https://linuxfr.org/news.atom"
 </script>
 ```
 
@@ -102,32 +116,28 @@ dans GitHub.
 ### Module
 
 Les modules sont les composants du widget définissant comment les données sont
-affichées (une liste de liens, une image...). La configuration d'un module est
-un objet JSON composé de deux propriétés :
+affichées (une liste de liens, une image...). La configuration d'un module a
+trois propriétés :
 
-- `"url"` : L'URL du fichier JavaScript du module (par exemple pour le module
+- `url` : L'URL du fichier JavaScript du module (par exemple pour le module
   [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) :
   `"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"`).
-- `"options"` : Un objet JSON contenant les options du module (qui sont
-  spécifiques pour chaque module).
+- `options` : Les options du module (qui sont spécifiques pour chaque module).
+- `scrapers` : La liste des [scrapers](#scraper) associés au module.
 
 Dans cet exemple, le module est une liste (avec au maximum `5` éléments)
 affichée dans un bloc bleu `#2196f3` et actualisée toutes les dix minutes
 [`*/10 * * * *`](https://crontab.guru/#*/10_*_*_*_*).
 
-```HTML
-<script type="application/json">
-  {
-    "module": {
-      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-      "options": {
-        "color": "#2196f3",
-        "cron": "*/10 * * * *",
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      color: "#2196f3"
+      cron: "*/10 * * * *"
         "max": 5
-      }
-    },
-    "scrapers": [{ "...": "..." }]
-  }
+    scrapers: # ...
 </script>
 ```
 
@@ -140,35 +150,29 @@ dans GitHub.
 Les scrapers permettent d'extraire des données (flux RSS, parsing de page...) et
 de les transmettre à un module dans un format spécifique. Plusieurs scrapers
 peuvent être associés avec un module. Dans la configuration du widget, les
-scrapers sont définis dans un tableau d'objets JSON composés de deux
-propriétés :
+scrapers sont définis dans un tableau avec deux propriétés :
 
-- `"url"` : L'URL du fichier JavaScript du scraper (par exemple pour le scraper
+- `url` : L'URL du fichier JavaScript du scraper (par exemple pour le scraper
   [_list/rss_](https://github.com/regseb/gout/tree/HEAD/src/scraper/list/rss#readme)
   : `"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"`).
-- `"options"` : un objet JSON contenant les options du scraper (qui sont
-  spécifiques pour chaque scraper).
+- `options` : Les options du scraper (qui sont spécifiques pour chaque scraper).
 
 Dans cet exemple, deux scrapers sont définis pour récupérer les dernières vidéos
 des chaines YouTube [ARTE Cinema](https://www.youtube.com/@artecinemafr) et
 [ARTE Séries](https://www.youtube.com/@arteseries).
 
-```HTML
-<script type="application/json">
-  {
-    "module": { "...": "..." },
-    "scrapers": [{
-      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-      "options": {
-        "url": "https://www.youtube.com/feeds/videos.xml?channel_id=UClo03hULFynpoX3w1Jv7fhw",
-      }
-    }, {
-      "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-      "options": {
-        "url": "https://www.youtube.com/feeds/videos.xml?channel_id=UCzaf-8cAEiXfynukcmV5MXw"
-      }
-    }]
-  }
+```html
+<script type="application/yaml">
+  module:
+    url: # ...
+    options: # ...
+    scrapers
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+        options:
+          url: "https://www.youtube.com/feeds/videos.xml?channel_id=UClo03hULFynpoX3w1Jv7fhw"
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+        options:
+          url: "https://www.youtube.com/feeds/videos.xml?channel_id=UCzaf-8cAEiXfynukcmV5MXw"
 </script>
 ```
 
diff --git a/src/engine/script.js b/src/engine/script.js
index 719f0f1..80ea278 100644
--- a/src/engine/script.js
+++ b/src/engine/script.js
@@ -4,7 +4,8 @@
  * @author Sébastien Règne
  */
 
-import JFather from "https://esm.sh/jfather@0";
+import JFather from "https://esm.sh/jfather@0.3.0";
+import YAML from "https://esm.sh/yaml@2.4.2";
 
 const hashCode = function (text) {
     return Math.abs(
@@ -40,7 +41,7 @@ const loadScrapers = function (scrapers) {
  * @returns {Promise<Object>} Le module avec ses éventuels scrapers.
  */
 const loadWidget = async function (widget) {
-    const scrapers = await loadScrapers(widget.scrapers ?? []);
+    const scrapers = await loadScrapers(widget.module.scrapers ?? []);
 
     // eslint-disable-next-line no-unsanitized/method
     const { default: Module } = await import(widget.module.url);
@@ -56,10 +57,24 @@ const loadWidget = async function (widget) {
 
 const liven = async function (script) {
     try {
-        const config =
-            "" === script.src
-                ? await JFather.parse(script.text)
-                : await JFather.load(script.src);
+        let config;
+        if ("application/yaml" === script.type) {
+            config =
+                "" === script.src
+                    ? await JFather.extend(YAML.parse(script.text))
+                    : await JFather.load(script.src, {
+                          request: async (url) => {
+                              const response = await fetch(url);
+                              const yaml = await response.text();
+                              return YAML.parse(yaml);
+                          },
+                      });
+        } else {
+            config =
+                "" === script.src
+                    ? await JFather.parse(script.text)
+                    : await JFather.load(script.src);
+        }
         const widget = await loadWidget(config);
         widget.classList.add("widget");
         script.after(widget);
@@ -77,6 +92,9 @@ document.head.append(link);
 
 // Activer les widgets.
 Array.from(
-    document.querySelectorAll('body script[type="application/json"]'),
+    document.querySelectorAll(
+        'body script[type="application/yaml"],' +
+            ' body script[type="application/json"]',
+    ),
     liven,
 );
diff --git a/src/module/audio/README.md b/src/module/audio/README.md
index 4eb74c0..191aaf1 100644
--- a/src/module/audio/README.md
+++ b/src/module/audio/README.md
@@ -7,8 +7,8 @@ Ce module permet d'écouter un flux audio.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -17,7 +17,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -32,7 +32,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -42,7 +42,7 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
@@ -69,7 +69,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"audio"</code></td>
+    <td><code>audio</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -82,7 +82,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -97,7 +97,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -113,7 +113,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -129,7 +129,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"link"</code></td>
+    <td><code>link</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -142,7 +142,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"target"</code></td>
+    <td><code>target</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -156,7 +156,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"title"</code></td>
+    <td><code>title</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -174,21 +174,17 @@ suivantes :
 
 Ce widget affiche un cadre pour écouter la radio [Fip](https://www.fip.fr/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/audio/audio.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-    "options": {
-      "extract": [{
-        "audio": "https://direct.radiofrance.fr/live/fip-hifi.aac",
-        "color": "#e2007a",
-        "link": "https://www.radiofrance.fr/fip",
-        "title": "Fip"
-      }]
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/audio/audio.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js"
+        options:
+          extract:
+            - audio: "https://direct.radiofrance.fr/live/fip-hifi.aac"
+              color: "#e2007a"
+              link: "https://www.radiofrance.fr/fip"
+              title: "Fip"
+</script>
 ```
diff --git a/src/module/clock/README.md b/src/module/clock/README.md
index b446f8b..cff071d 100644
--- a/src/module/clock/README.md
+++ b/src/module/clock/README.md
@@ -7,8 +7,8 @@ Ce module affiche une horloge.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -17,7 +17,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -32,7 +32,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -42,7 +42,7 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
@@ -69,7 +69,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -84,7 +84,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -100,7 +100,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -123,18 +123,14 @@ suivantes :
 
 Ce widget affiche une horloge avec l'heure courante.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/clock/clock.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-    "options": {
-      "extract": [{
-        "color": "#795548"
-      }]
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/clock/clock.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js"
+        options:
+          extract:
+            - color: "#795548"
+</script>
 ```
diff --git a/src/module/examples/minimal/README.md b/src/module/examples/minimal/README.md
index 8569c9e..108a0aa 100644
--- a/src/module/examples/minimal/README.md
+++ b/src/module/examples/minimal/README.md
@@ -19,10 +19,9 @@ Ce module n'utilise pas de scraper.
 
 Ce widget ne fait rien et n'affiche rien.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/minimal/minimal.js"
-  }
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/minimal/minimal.js"
+</script>
 ```
diff --git a/src/module/examples/preact/helloworld/README.md b/src/module/examples/preact/helloworld/README.md
index 94a464f..84cc81e 100644
--- a/src/module/examples/preact/helloworld/README.md
+++ b/src/module/examples/preact/helloworld/README.md
@@ -19,10 +19,9 @@ Ce module n'utilise pas de scraper.
 
 Ce widget affiche un hello world développé avec Preact.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/preact/helloworld/helloworld.js"
-  }
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/preact/helloworld/helloworld.js"
+</script>
 ```
diff --git a/src/module/examples/react/tictactoe/README.md b/src/module/examples/react/tictactoe/README.md
index aadadf7..66fa4a4 100644
--- a/src/module/examples/react/tictactoe/README.md
+++ b/src/module/examples/react/tictactoe/README.md
@@ -19,10 +19,9 @@ Ce module n'utilise pas de scraper.
 
 Ce widget affiche un morpion dévéloppé avec React.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/react/tictactoe/tictactoe.js"
-  }
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/examples/react/tictactoe/tictactoe.js"
+</script>
 ```
diff --git a/src/module/icon/README.md b/src/module/icon/README.md
index b7bc2d7..f48c4ac 100644
--- a/src/module/icon/README.md
+++ b/src/module/icon/README.md
@@ -7,8 +7,8 @@ Ce module affiche une icône dans un lien.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -17,7 +17,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -32,7 +32,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -42,7 +42,7 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
@@ -69,7 +69,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -84,7 +84,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -100,7 +100,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -116,7 +116,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"link"</code></td>
+    <td><code>link</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -129,7 +129,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"target"</code></td>
+    <td><code>target</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -143,7 +143,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"title"</code></td>
+    <td><code>title</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -161,21 +161,17 @@ suivantes :
 
 Ce widget affiche un bouton qui redirige vers [GitHub](https://github.com/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-    "options": {
-      "extract": [{
-        "color": "black",
-        "link": "https://github.com/",
-        "target": "_top",
-        "title": "GitHub"
-      }]
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js"
+        options:
+          extract:
+            - color: "black"
+              link: "https://github.com/"
+              target: "_top"
+              title: "GitHub"
+</script>
 ```
diff --git a/src/module/iframe/README.md b/src/module/iframe/README.md
index 174b16e..0fb6257 100644
--- a/src/module/iframe/README.md
+++ b/src/module/iframe/README.md
@@ -7,8 +7,8 @@ Ce module affiche un `iframe`.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -17,7 +17,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -32,7 +32,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -42,12 +42,12 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
   <tr>
-    <td><code>"height"</code></td>
+    <td><code>height</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -82,7 +82,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -98,7 +98,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"link"</code></td>
+    <td><code>link</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -116,18 +116,14 @@ suivantes :
 Ce widget affiche la [Lofi Girl](https://youtu.be/jfKfPfyJRdk) de YouTube dans
 un `iframe`.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/iframe/iframe.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-    "options": {
-      "extract": [{
-        "link": "https://www.youtube-nocookie.com/embed/jfKfPfyJRdk"
-      }]
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/iframe/iframe.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js"
+        options:
+          extract:
+            - link: "https://www.youtube-nocookie.com/embed/jfKfPfyJRdk"
+</script>
 ```
diff --git a/src/module/image/README.md b/src/module/image/README.md
index 3ad1c51..350f04e 100644
--- a/src/module/image/README.md
+++ b/src/module/image/README.md
@@ -7,8 +7,8 @@ Ce module affiche des images.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -17,7 +17,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -37,7 +37,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -47,12 +47,12 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
   <tr>
-    <td><code>"max"</code></td>
+    <td><code>max</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -86,7 +86,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -102,7 +102,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"guid"</code></td>
+    <td><code>guid</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -117,7 +117,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"img"</code></td>
+    <td><code>img</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -129,7 +129,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"link"</code></td>
+    <td><code>link</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -142,7 +142,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"target"</code></td>
+    <td><code>target</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -156,7 +156,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"title"</code></td>
+    <td><code>title</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -176,17 +176,14 @@ Ce widget affiche les `3` dernières images du site
 [CommitStrip](https://www.commitstrip.com/fr/) avec une mise à jour à
 [minuit](https://crontab.guru/#@daily).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/image/image.js",
-    "options": {
-      "cron": "@daily",
-      "max": 3
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/image/commitstrip/commitstrip.js"
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/image/image.js"
+    options:
+      cron: "@daily"
+      max: 3
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/image/commitstrip/commitstrip.js"
+</script>
 ```
diff --git a/src/module/list/README.md b/src/module/list/README.md
index cb589e3..378af74 100644
--- a/src/module/list/README.md
+++ b/src/module/list/README.md
@@ -8,8 +8,8 @@ une icône.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -18,7 +18,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -33,7 +33,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -53,7 +53,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -63,12 +63,12 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -84,7 +84,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"max"</code></td>
+    <td><code>max</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -118,7 +118,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -134,7 +134,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"desc"</code></td>
+    <td><code>desc</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -147,7 +147,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"guid"</code></td>
+    <td><code>guid</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -162,7 +162,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -175,7 +175,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"link"</code></td>
+    <td><code>link</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -188,7 +188,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"target"</code></td>
+    <td><code>target</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -202,7 +202,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"title"</code></td>
+    <td><code>title</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -220,21 +220,17 @@ suivantes :
 Ce widget affiche les cinq dernières actualités du site
 [LinuxFr.org](https://linuxfr.org/) avec une mise à jour toutes les dix minutes.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-    "options": {
-      "color": "#ffc107",
-      "cron": "*/10 * * * *",
-      "max": 5
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-    "options": {
-      "url": "https://linuxfr.org/news.atom"
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      color": "#ffc107"
+      cron": "*/10 * * * *"
+      max": 5
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+        options:
+          url: "https://linuxfr.org/news.atom"
+</script>
 ```
diff --git a/src/module/notepad/README.md b/src/module/notepad/README.md
index 35e9ad5..cdb7828 100644
--- a/src/module/notepad/README.md
+++ b/src/module/notepad/README.md
@@ -11,8 +11,8 @@ Ce module affiche un bloc-notes.
 > compatibles avec ce module.
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -21,7 +21,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -36,7 +36,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -52,7 +52,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"desc"</code></td>
+    <td><code>desc</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -65,7 +65,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"guid"</code></td>
+    <td><code>guid</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -80,7 +80,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"title"</code></td>
+    <td><code>title</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -101,15 +101,13 @@ Ce module n'utilise pas de scraper.
 
 Ce widget affiche un bloc-notes pour une liste de courses.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/notepad/notepad.js",
-    "options": {
-      "color": "#607d8b",
-      "desc": "Liste de courses",
-      "title": "..."
-    }
-  }
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/notepad/notepad.js"
+    options:
+      color: "#607d8b"
+      desc: "Liste de courses"
+      title: "..."
+</script>
 ```
diff --git a/src/module/podcast/README.md b/src/module/podcast/README.md
index 267358b..1ec62c2 100644
--- a/src/module/podcast/README.md
+++ b/src/module/podcast/README.md
@@ -7,8 +7,8 @@ Ce module affiche une liste des dernières émissions audio d'un podcast.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -17,7 +17,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -32,7 +32,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -52,7 +52,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -62,12 +62,12 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -84,7 +84,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"max"</code></td>
+    <td><code>max</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -118,7 +118,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"audio"</code></td>
+    <td><code>audio</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -130,7 +130,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -146,7 +146,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"desc"</code></td>
+    <td><code>desc</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -159,7 +159,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"guid"</code></td>
+    <td><code>guid</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -174,7 +174,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -187,7 +187,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"link"</code></td>
+    <td><code>link</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -200,7 +200,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"target"</code></td>
+    <td><code>target</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -214,7 +214,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"title"</code></td>
+    <td><code>title</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -232,21 +232,17 @@ suivantes :
 Ce widget affiche les deux derniers épisodes des [Cast Codeurs
 Podcast](https://lescastcodeurs.com/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/podcast/podcast.js",
-    "options": {
-      "color": "black",
-      "cron": "@daily",
-      "max": 2
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-    "options": {
-      "url": "https://lescastcodeurs.com/podcast-rss"
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/podcast/podcast.js"
+    options:
+      color: "black"
+      cron: "@daily"
+      max: 2
+    scrapers:
+      - url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+        options:
+          url: "https://lescastcodeurs.com/podcast-rss"
+</script>
 ```
diff --git a/src/module/search/README.md b/src/module/search/README.md
index bce6b16..d632197 100644
--- a/src/module/search/README.md
+++ b/src/module/search/README.md
@@ -32,21 +32,17 @@ Les scrapers associés à ce module doivent définir trois méthodes :
 Ce widget fourni un champ pour faire une recherche avec
 [DuckDuckGo](https://duckduckgo.com/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/search/search.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
-    "options": {
-      "url": "https://duckduckgo.com/?q={searchTerms}",
-      "suggestions": "https://ac.duckduckgo.com/ac/?q={searchTerms}&type=list",
-      "complements": {
-        "title": "DuckDuckGo",
-        "color": "#f44336"
-      },
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/search/search.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js"
+        options:
+          url: "https://duckduckgo.com/?q={searchTerms}"
+          suggestions: "https://ac.duckduckgo.com/ac/?q={searchTerms}&type=list"
+          complements:
+            title: "DuckDuckGo"
+            color: "#f44336"
+</script>
 ```
diff --git a/src/module/single/README.md b/src/module/single/README.md
index 86b37e4..4a49dc3 100644
--- a/src/module/single/README.md
+++ b/src/module/single/README.md
@@ -7,8 +7,8 @@ Ce module affiche un lien.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -17,7 +17,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -37,7 +37,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -47,7 +47,7 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
@@ -73,7 +73,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -88,7 +88,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -104,7 +104,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"desc"</code></td>
+    <td><code>desc</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -117,7 +117,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -130,7 +130,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"link"</code></td>
+    <td><code>link</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -143,7 +143,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"target"</code></td>
+    <td><code>target</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -157,7 +157,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"title"</code></td>
+    <td><code>title</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -175,16 +175,13 @@ suivantes :
 Ce widget affiche un lien vers un article au hasard de
 [Wikipédia](https://fr.wikipedia.org/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js",
-    "options": {
-      "cron": "*/5 * * * *"
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/single/articleauhasard/articleauhasard.js"
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
+    options:
+      cron: "*/5 * * * *"
+    scrapers:
+      - url": "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/single/articleauhasard/articleauhasard.js"
+</script>
 ```
diff --git a/src/module/text/README.md b/src/module/text/README.md
index 807df97..1f795c5 100644
--- a/src/module/text/README.md
+++ b/src/module/text/README.md
@@ -8,8 +8,8 @@ personnalisable.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -18,7 +18,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"cron"</code></td>
+    <td><code>cron</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -33,7 +33,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"empty"</code></td>
+    <td><code>empty</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -43,7 +43,7 @@ propriétés suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>{ "title": "(aucun élément)" }</code>.
+        Exemple : <code>title: "(aucun élément)"</code>.
       </p>
     </td>
   </tr>
@@ -69,7 +69,7 @@ suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"align"</code></td>
+    <td><code>align</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -82,7 +82,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -97,7 +97,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"date"</code></td>
+    <td><code>date</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -113,7 +113,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"desc"</code></td>
+    <td><code>desc</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -126,7 +126,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -139,7 +139,7 @@ suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"title"</code></td>
+    <td><code>title</code></td>
     <td><code>string</code><br /><code>string[]</code></td>
     <td>
       <p>
@@ -157,18 +157,14 @@ suivantes :
 
 Ce widget affiche le texte _Carpe diem_.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/text/text.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-    "options": {
-      "extract": [{
-        "title": "Carpe diem"
-      }]
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/text/text.js"
+    scrapers:
+      - url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js"
+        options:
+          extract:
+            - title: "Carpe diem"
+</script>
 ```
diff --git a/src/module/tools/contrast/README.md b/src/module/tools/contrast/README.md
index f860267..5c2227c 100644
--- a/src/module/tools/contrast/README.md
+++ b/src/module/tools/contrast/README.md
@@ -18,10 +18,9 @@ Ce module n'utilise pas de scraper.
 
 Ce widget affiche le module.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/tools/conntrast/contrast.js"
-  }
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/tools/conntrast/contrast.js"
+</script>
 ```
diff --git a/src/module/tools/findrss/README.md b/src/module/tools/findrss/README.md
index 89e0e8e..558c092 100644
--- a/src/module/tools/findrss/README.md
+++ b/src/module/tools/findrss/README.md
@@ -7,8 +7,8 @@ Ce module cherche les liens RSS / Atom dans une page Web.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -17,7 +17,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"color"</code></td>
+    <td><code>color</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -32,7 +32,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"icon"</code></td>
+    <td><code>icon</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -48,7 +48,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"max"</code></td>
+    <td><code>max</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -71,10 +71,9 @@ Ce module n'utilise pas de scraper.
 Ce widget affiche un bloc avec un champ. En renseignant une URL dans ce champ,
 la liste des flux RSS est affichée en dessous.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/tools/findrss/findrss.js"
-  }
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/tools/findrss/findrss.js"
+</script>
 ```
diff --git a/src/scraper/examples/days/README.md b/src/scraper/examples/days/README.md
index a8a5dae..cb807aa 100644
--- a/src/scraper/examples/days/README.md
+++ b/src/scraper/examples/days/README.md
@@ -14,8 +14,8 @@ Il peut être utilisé avec les modules :
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -24,7 +24,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"lang"</code></td>
+    <td><code>lang</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -45,34 +45,28 @@ propriétés suivantes :
 
 Ce widget affiche le nom du lendemain en français.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js"
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js"
+</script>
 ```
 
 Ce widget affiche les noms des trois prochains jours (sauf le dimanche) en
 anglais.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-    "options": {
-      "max": 3
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js",
-    "options": {
-      "lang": "en",
-      "filter": "title != 'Sunday'"
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      max: 3
+    scrapers:
+      - url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js"
+        options:
+          lang: "en",
+          filter: "title != 'Sunday'"
+</script>
 ```
diff --git a/src/scraper/examples/days/days.js b/src/scraper/examples/days/days.js
index 5f95593..bc1c6c8 100644
--- a/src/scraper/examples/days/days.js
+++ b/src/scraper/examples/days/days.js
@@ -109,32 +109,34 @@ export default chain(FilterScraper, ComplementsScraper, DaysScraper, {
 // Grâce à la chaine de scrapers, la configuration du widget est simplifiée. Par
 // exemple, la configuration suivante :
 //
-// ```JSON
-// {
-//   "module": "...",
-//   "scrapers": [{
-//     "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/filter/filter.js",
-//     "options": { "filter": "..." },
-//     "scrapers": [{
-//       "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/complements/complements.js",
-//       "options": { "complements": "..." },
-//       "scrapers": [{
-//         "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js",
-//         "options": { "lang": "..." }
-//       }]
-//     }]
-//   }]
-// }
+// ```yaml
+// module:
+//   url: # ...
+//   options: # ...
+//   scrapers:
+//     - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/filter/filter.js"
+//       options:
+//         filter: # ...
+//       scrapers:
+//         - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/complements/complements.js"
+//           options:
+//             complements: # ...
+//           scrapers:
+//             - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js"
+//               options:
+//                 lang: # ...
 // ```
 //
 // peut être simplifiée en :
 //
-// ```JSON
-// {
-//   "module": "...",
-//   "scrapers": [{
-//     "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js",
-//     "options": { "filter": "...", "complements": "...", "lang": "..." }
-//   }]
-// }
+// ```yaml
+// module:
+//   url: # ...
+//   options: # ...
+//   scrapers:
+//     - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js"
+//       options:
+//         filter: # ...
+//         complements: # ...
+//         lang: # ...
 // ```
diff --git a/src/scraper/examples/helloworld/README.md b/src/scraper/examples/helloworld/README.md
index bc86ffb..f1f3f5d 100644
--- a/src/scraper/examples/helloworld/README.md
+++ b/src/scraper/examples/helloworld/README.md
@@ -15,8 +15,8 @@ Il peut être utilisé avec les modules :
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec la
-propriété suivante :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -25,7 +25,7 @@ propriété suivante :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"who"</code></td>
+    <td><code>who</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -42,29 +42,24 @@ propriété suivante :
 
 Ce widget affiche le texte `"Hello world!"`.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/helloworld/helloworld.js"
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/helloworld/helloworld.js"
+</script>
 ```
 
 Ce widget affiche le texte `"Hello Doctor!"`.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/helloworld/helloworld.js",
-    "options": {
-      "who": "Doctor"
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/single/single.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/helloworld/helloworld.js"
+        options:
+          who: "Doctor"
+</script>
 ```
diff --git a/src/scraper/examples/jsonplaceholder/README.md b/src/scraper/examples/jsonplaceholder/README.md
index 01b170a..7966fee 100644
--- a/src/scraper/examples/jsonplaceholder/README.md
+++ b/src/scraper/examples/jsonplaceholder/README.md
@@ -20,8 +20,8 @@ Il peut être utilisé avec les modules :
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -30,7 +30,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"album"</code></td>
+    <td><code>album</code></td>
     <td><code>number</code></td>
     <td>
       <p>
@@ -43,7 +43,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"complements"</code></td>
+    <td><code>complements</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -58,7 +58,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"filter"</code></td>
+    <td><code>filter</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -77,19 +77,15 @@ propriétés suivantes :
 
 Ce widget affiche 5 images de l'album ayant l'identifiant `13`.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/image/image.js",
-    "options": {
-      "max": 5
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/jsonplaceholder/jsonplaceholder.js",
-    "options": {
-      "album": 13
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/image/image.js"
+    options:
+      max: 5
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/jsonplaceholder/jsonplaceholder.js"
+        options:
+          album: 13
+</script>
 ```
diff --git a/src/scraper/icon/ping/README.md b/src/scraper/icon/ping/README.md
index 8a1762f..abe9e16 100644
--- a/src/scraper/icon/ping/README.md
+++ b/src/scraper/icon/ping/README.md
@@ -10,8 +10,8 @@ Il peut être utilisé avec le module
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -20,7 +20,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"url"</code></td>
+    <td><code>url</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -32,7 +32,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"colors"</code></td>
+    <td><code>colors</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -56,7 +56,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"complements"</code></td>
+    <td><code>complements</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -71,7 +71,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"filter"</code></td>
+    <td><code>filter</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -90,19 +90,15 @@ propriétés suivantes :
 
 Ce widget teste le site _localhost_ toutes les heures.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js",
-    "options": {
-      "cron": "@hourly"
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/icon/ping/ping.js",
-    "options": {
-      "url": "http://localhost"
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/icon/icon.js"
+    options:
+      cron: "@hourly"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/icon/ping/ping.js"
+        options:
+          url: "http://localhost"
+</script>
 ```
diff --git a/src/scraper/list/jsonfeed/README.md b/src/scraper/list/jsonfeed/README.md
index c73b7cf..c7524b6 100644
--- a/src/scraper/list/jsonfeed/README.md
+++ b/src/scraper/list/jsonfeed/README.md
@@ -15,8 +15,8 @@ Il peut être utilisé avec les modules :
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -25,7 +25,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"url"</code></td>
+    <td><code>url</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -37,7 +37,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"complements"</code></td>
+    <td><code>complements</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -52,7 +52,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"filter"</code></td>
+    <td><code>filter</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -72,21 +72,17 @@ propriétés suivantes :
 Ce widget affiche les cinq dernières actualités scientifiques du site
 [Refind](https://refind.com/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-    "options": {
-      "color": "#2196f3",
-      "cron": "*/10 * * * *",
-      "max": 5
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/jsonfeed/jsonfeed.js",
-    "options": {
-      "url": "https://refind.com/science.json"
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      color: "#2196f3"
+      cron: "*/10 * * * *"
+      max: 5
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/jsonfeed/jsonfeed.js"
+        options:
+          url: "https://refind.com/science.json"
+</script>
 ```
diff --git a/src/scraper/list/rss/README.md b/src/scraper/list/rss/README.md
index 5eef21e..cbe82f8 100644
--- a/src/scraper/list/rss/README.md
+++ b/src/scraper/list/rss/README.md
@@ -18,8 +18,8 @@ Il peut être utilisé avec les modules :
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -28,7 +28,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"url"</code></td>
+    <td><code>url</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -40,7 +40,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"complements"</code></td>
+    <td><code>complements</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -55,7 +55,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"filter"</code></td>
+    <td><code>filter</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -75,20 +75,16 @@ propriétés suivantes :
 Ce widget affiche les cinq dernières actualités du site [Le
 Monde.fr](https://www.lemonde.fr/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-    "options": {
-      "cron": "*/10 * * * *",
-      "max": 5
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-    "options": {
-      "url": "https://www.lemonde.fr/rss/une.xml"
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      cron: "*/10 * * * *"
+      max: 5
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+        options:
+          url: "https://www.lemonde.fr/rss/une.xml"
+</script>
 ```
diff --git a/src/scraper/search/opensearch/README.md b/src/scraper/search/opensearch/README.md
index 9f4b120..667d84c 100644
--- a/src/scraper/search/opensearch/README.md
+++ b/src/scraper/search/opensearch/README.md
@@ -12,8 +12,8 @@ Il peut être utilisé avec le module
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec les
-propriétés suivantes :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -22,7 +22,7 @@ propriétés suivantes :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"url"</code></td>
+    <td><code>url</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -35,7 +35,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"suggestions"</code></td>
+    <td><code>suggestions</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -50,7 +50,7 @@ propriétés suivantes :
     </td>
   </tr>
   <tr>
-    <td><code>"complements"</code></td>
+    <td><code>complements</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -69,31 +69,24 @@ propriétés suivantes :
 Ce widget fourni un champ pour faire une recherche avec
 [Google](https://www.google.com/) ou [Bing](https://www.bing.com/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/search/search.js"
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
-    "options": {
-      "url": "https://www.google.com/search?q={searchTerms}",
-      "suggestions": "https://www.google.com/complete/search?client=firefox&q={searchTerms}",
-      "complements": {
-        "title": "Google",
-        "color": "#2196f3"
-      }
-    }
-  }, {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js",
-    "options": {
-      "url": "https://www.bing.com/search?q={searchTerms}",
-      "suggestions": "https://www.bing.com/osjson.aspx?query={searchTerms}",
-      "complements": {
-        "title": "Bing",
-        "color": "#ffc107"
-      }
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/search/search.js"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js"
+        options:
+          url: "https://www.google.com/search?q={searchTerms}"
+          suggestions: "https://www.google.com/complete/search?client=firefox&q={searchTerms}"
+          complements:
+            title: "Google"
+            color: "#2196f3"
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/search/opensearch/opensearch.js"
+        options:
+          url: "https://www.bing.com/search?q={searchTerms}"
+          suggestions: "https://www.bing.com/osjson.aspx?query={searchTerms}"
+          complements:
+            title: "Bing"
+            color: "#ffc107"
+</script>
 ```
diff --git a/src/scraper/tools/complements/README.md b/src/scraper/tools/complements/README.md
index e9a24fb..e606432 100644
--- a/src/scraper/tools/complements/README.md
+++ b/src/scraper/tools/complements/README.md
@@ -6,22 +6,24 @@ Ce scraper ajoute des propriétés dans les résultats d'un autre scraper. Il es
 rare d'utiliser ce scraper directement dans un widget. Il peut être utilisé
 pour ajouter la fonctionnalité dans un autre scraper :
 
-```JavaScript
+```javascript
 import chain from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/utils/scraper/chain.js";
 import ComplementsScraper from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/complements/complements.js";
 
-const MyAwesomeScraper = class { /* ... */ };
+const MyAwesomeScraper = class {
+  /* ... */
+};
 
 export default chain(ComplementsScraper, MyAwesomeScraper, {
-    dispatch: ({ complements, ...others }) => [{ complements }, others],
+  dispatch: ({ complements, ...others }) => [{ complements }, others],
 });
 ```
 
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec la
-propriété suivante :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -30,7 +32,7 @@ propriété suivante :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"complements"</code></td>
+    <td><code>complements</code></td>
     <td><code>object</code></td>
     <td>
       <p>
@@ -60,22 +62,19 @@ Ce widget affiche les dernières vidéos de la chaine YouTube de
 élément. L'option `"complements"` est passée au scraper _list/rss_ car ce
 scraper utilise _tools/complements_.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-    "options": {
-      "color": "#757575",
-      "cron": "*/10 * * * *",
-      "max": 5
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-    "options": {
-      "url": "https://www.youtube.com/feeds/videos.xml?user=arte",
-      "complements": { "icon": "https://example.com/fip.svg" },
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      color: "#757575"
+      cron: "*/10 * * * *"
+      max: 5
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+        options:
+          url: "https://www.youtube.com/feeds/videos.xml?user=arte"
+          complements:
+            icon: "https://example.com/fip.svg"
+</script>
 ```
diff --git a/src/scraper/tools/filter/README.md b/src/scraper/tools/filter/README.md
index f4d699c..7426117 100644
--- a/src/scraper/tools/filter/README.md
+++ b/src/scraper/tools/filter/README.md
@@ -6,22 +6,24 @@ Ce scraper filtre les résultats d'un autre scraper. Il est rare d'utiliser ce
 scraper directement dans un widget. Il peut être utilisé pour ajouter la
 fonctionnalité dans un autre scraper :
 
-```JavaScript
+```javascript
 import chain from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/utils/scraper/chain.js";
 import FilterScraper from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/filter/filter.js";
 
-const MyAwesomeScraper = class { /* ... */ };
+const MyAwesomeScraper = class {
+  /* ... */
+};
 
 export default chain(FilterScraper, MyAwesomeScraper, {
-    dispatch: ({ filter, ...others }) => [{ filter }, others],
+  dispatch: ({ filter, ...others }) => [{ filter }, others],
 });
 ```
 
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") avec la
-propriété suivante :
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") avec les propriétés
+suivantes :
 
 <table>
   <tr>
@@ -30,7 +32,7 @@ propriété suivante :
     <th>Description</th>
   </tr>
   <tr>
-    <td><code>"filter"</code></td>
+    <td><code>filter</code></td>
     <td><code>string</code></td>
     <td>
       <p>
@@ -87,22 +89,18 @@ Ce widget affiche les dernières reportages de la chaine YouTube de
 [Arte](https://www.youtube.com/@arte). L'option `"filter"` est passée au scraper
 _list/rss_ car ce scraper utilise _tools/filter_.
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-    "options": {
-      "color": "#757575",
-      "cron": "*/10 * * * *",
-      "max": 5
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js",
-    "options": {
-      "url": "https://www.youtube.com/feeds/videos.xml?user=arte",
-      "filter": "title $= 'ARTE Reportage'",
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      color: "#757575"
+      cron: "*/10 * * * *"
+      max: 5
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+        options:
+          url: "https://www.youtube.com/feeds/videos.xml?user=arte"
+          filter: "title $= 'ARTE Reportage'"
+</script>
 ```
diff --git a/src/scraper/tools/repeater/README.md b/src/scraper/tools/repeater/README.md
index 3893520..aa0b4e3 100644
--- a/src/scraper/tools/repeater/README.md
+++ b/src/scraper/tools/repeater/README.md
@@ -10,8 +10,8 @@ Il peut être utilisé avec tous les modules.
 ## Options
 
 Les options sont dans un objet
-[JSON](https://www.json.org/json-fr.html "JavaScript Object Notation") dont les
-clés correspondent aux méthodes simulées et les valeurs aux données retournées.
+[YAML](https://yaml.org/ "YAML Ain't Markup Language") dont les clés
+correspondent aux méthodes simulées et les valeurs aux données retournées.
 
 ## Exemple
 
@@ -19,25 +19,19 @@ Ce widget affiche une liste avec deux liens allant vers
 [Facebook](https://www.facebook.com/) et
 [Instagram](https://www.instagram.com/).
 
-```JSON
-{
-  "module": {
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js",
-    "options": {
-      "color": "#f0a30a"
-    }
-  },
-  "scrapers": [{
-    "url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js",
-    "options": {
-      "extract": [{
-        "title": "Facebook",
-        "link": "https://www.facebook.com/"
-      }, {
-        "title": "Instagram",
-        "link": "https://www.instagram.com/"
-      }]
-    }
-  }]
-}
+```html
+<script type="application/yaml">
+  module:
+    url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
+    options:
+      color: "#f0a30a"
+    scrapers:
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js"
+        options:
+          extract:
+            - title: "Facebook"
+              link: "https://www.facebook.com/"
+            - title: "Instagram"
+              link: "https://www.instagram.com/"
+</script>
 ```
diff --git a/template/dashboard/3-columns.html b/template/dashboard/3-columns.html
index 9b6d7b3..86a2ff5 100644
--- a/template/dashboard/3-columns.html
+++ b/template/dashboard/3-columns.html
@@ -28,11 +28,13 @@
       <!--
         Les widgets sont à ajouter dans ce div pour les afficher dans la
         première colonne. Voici un exemple de structure d'un widget :
-          <script type="application/json">
-            {
-                "module": { "...": "..." },
-                "scrapers": [{ "...": "..." }, { "...": "..." }]
-            }
+          <script type="application/yaml">
+            module:
+              url: # ...
+              options: # ...
+              scrapers:
+                - url: # ...
+                  options: # ...
           </script>
       -->
     </div>
diff --git a/template/dashboard/4-columns.html b/template/dashboard/4-columns.html
index bf75f5b..237ec04 100644
--- a/template/dashboard/4-columns.html
+++ b/template/dashboard/4-columns.html
@@ -28,11 +28,13 @@
       <!--
         Les widgets sont à ajouter dans ce div pour les afficher dans la
         première colonne. Voici un exemple de structure d'un widget :
-          <script type="application/json">
-            {
-                "module": { "...": "..." },
-                "scrapers": [{ "...": "..." }, { "...": "..." }]
-            }
+          <script type="application/yaml">
+            module:
+              url: # ...
+              options: # ...
+              scrapers:
+                - url: # ...
+                  options: # ...
           </script>
       -->
     </div>

From b1cec7e8bd92fb3f27e2f6689076e7dd4c1fc662 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 29 May 2024 10:33:01 +0200
Subject: [PATCH 22/38] feat: Fournir une extension pour Chromium.

---
 .metalint/addons-linter_mv3.config.js         |   11 +
 .metalint/metalint.config.js                  |    6 +-
 .script/sync.js                               |   12 -
 package.json                                  |   11 +-
 src/extension/background/migrate.js           |   22 -
 src/extension/chromium/background/migrate.js  |   27 +
 src/extension/chromium/background/script.js   |   80 ++
 src/extension/{ => chromium}/img/icon.svg     |    0
 src/extension/{ => chromium}/img/icon128.png  |  Bin
 src/extension/{ => chromium}/img/icon16.png   |  Bin
 src/extension/{ => chromium}/img/icon24.png   |  Bin
 src/extension/{ => chromium}/img/icon32.png   |  Bin
 src/extension/{ => chromium}/img/icon48.png   |  Bin
 src/extension/{ => chromium}/img/icon64.png   |  Bin
 src/extension/{ => chromium}/img/icon96.png   |  Bin
 src/extension/chromium/manifest.json          |   43 +
 src/extension/chromium/polyfill/browser.js    |   12 +
 .../{ => chromium}/popup/img/remove.svg       |    0
 src/extension/{ => chromium}/popup/index.html |    0
 src/extension/{ => chromium}/popup/script.js  |    0
 src/extension/{ => chromium}/popup/style.css  |    0
 src/extension/firefox/background/migrate.js   |   27 +
 .../{ => firefox}/background/page.html        |    2 -
 .../{ => firefox}/background/script.js        |    7 +
 src/extension/firefox/img/icon.svg            |   26 +
 src/extension/firefox/img/icon128.png         |  Bin 0 -> 3022 bytes
 src/extension/firefox/img/icon16.png          |  Bin 0 -> 479 bytes
 src/extension/firefox/img/icon24.png          |  Bin 0 -> 719 bytes
 src/extension/firefox/img/icon32.png          |  Bin 0 -> 775 bytes
 src/extension/firefox/img/icon48.png          |  Bin 0 -> 1180 bytes
 src/extension/firefox/img/icon64.png          |  Bin 0 -> 1451 bytes
 src/extension/firefox/img/icon96.png          |  Bin 0 -> 2270 bytes
 src/extension/{ => firefox}/manifest.json     |    4 +-
 src/extension/firefox/polyfill/browser.js     |   12 +
 src/extension/firefox/popup/img/remove.svg    |    9 +
 src/extension/firefox/popup/index.html        |   28 +
 src/extension/firefox/popup/script.js         |  107 ++
 src/extension/firefox/popup/style.css         |   67 +
 src/extension/polyfill/browser.js             |    7 -
 .../polyfill/lib/browser-polyfill.js          | 1269 -----------------
 40 files changed, 467 insertions(+), 1322 deletions(-)
 create mode 100644 .metalint/addons-linter_mv3.config.js
 delete mode 100644 .script/sync.js
 delete mode 100644 src/extension/background/migrate.js
 create mode 100644 src/extension/chromium/background/migrate.js
 create mode 100644 src/extension/chromium/background/script.js
 rename src/extension/{ => chromium}/img/icon.svg (100%)
 rename src/extension/{ => chromium}/img/icon128.png (100%)
 rename src/extension/{ => chromium}/img/icon16.png (100%)
 rename src/extension/{ => chromium}/img/icon24.png (100%)
 rename src/extension/{ => chromium}/img/icon32.png (100%)
 rename src/extension/{ => chromium}/img/icon48.png (100%)
 rename src/extension/{ => chromium}/img/icon64.png (100%)
 rename src/extension/{ => chromium}/img/icon96.png (100%)
 create mode 100644 src/extension/chromium/manifest.json
 create mode 100644 src/extension/chromium/polyfill/browser.js
 rename src/extension/{ => chromium}/popup/img/remove.svg (100%)
 rename src/extension/{ => chromium}/popup/index.html (100%)
 rename src/extension/{ => chromium}/popup/script.js (100%)
 rename src/extension/{ => chromium}/popup/style.css (100%)
 create mode 100644 src/extension/firefox/background/migrate.js
 rename src/extension/{ => firefox}/background/page.html (59%)
 rename src/extension/{ => firefox}/background/script.js (89%)
 create mode 100644 src/extension/firefox/img/icon.svg
 create mode 100644 src/extension/firefox/img/icon128.png
 create mode 100644 src/extension/firefox/img/icon16.png
 create mode 100644 src/extension/firefox/img/icon24.png
 create mode 100644 src/extension/firefox/img/icon32.png
 create mode 100644 src/extension/firefox/img/icon48.png
 create mode 100644 src/extension/firefox/img/icon64.png
 create mode 100644 src/extension/firefox/img/icon96.png
 rename src/extension/{ => firefox}/manifest.json (92%)
 create mode 100644 src/extension/firefox/polyfill/browser.js
 create mode 100644 src/extension/firefox/popup/img/remove.svg
 create mode 100644 src/extension/firefox/popup/index.html
 create mode 100644 src/extension/firefox/popup/script.js
 create mode 100644 src/extension/firefox/popup/style.css
 delete mode 100644 src/extension/polyfill/browser.js
 delete mode 100644 src/extension/polyfill/lib/browser-polyfill.js

diff --git a/.metalint/addons-linter_mv3.config.js b/.metalint/addons-linter_mv3.config.js
new file mode 100644
index 0000000..fca28cf
--- /dev/null
+++ b/.metalint/addons-linter_mv3.config.js
@@ -0,0 +1,11 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+export default {
+    // Autoriser la propriété "service_worker" pour le "background".
+    // https://github.com/mozilla/addons-linter/issues/5152
+    enableBackgroundServiceWorker: true,
+};
diff --git a/.metalint/metalint.config.js b/.metalint/metalint.config.js
index 3185c54..97e1f69 100644
--- a/.metalint/metalint.config.js
+++ b/.metalint/metalint.config.js
@@ -26,8 +26,12 @@ export default {
     ],
     checkers: [
         {
-            patterns: ["/build/*.zip", "/src/extension/"],
+            patterns: ["/build/*.zip", "/src/extension/*/"],
             linters: "addons-linter",
+            overrides: {
+                patterns: "/src/extension/chromium/",
+                linters: "addons-linter_mv3",
+            },
         },
         {
             patterns: "*.js",
diff --git a/.script/sync.js b/.script/sync.js
deleted file mode 100644
index 9aa9cbe..0000000
--- a/.script/sync.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * @module
- * @license MIT
- * @author Sébastien Règne
- */
-
-import fs from "node:fs/promises";
-
-await fs.cp(
-    "node_modules/webextension-polyfill/dist/browser-polyfill.js",
-    "src/extension/polyfill/lib/browser-polyfill.js",
-);
diff --git a/package.json b/package.json
index 4349eaf..b59b739 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,6 @@
   "repository": "regseb/gout",
   "type": "module",
   "scripts": {
-    "postinstall": "node .script/sync.js",
     "lint": "metalint",
     "lint:fix": "metalint --fix",
     "lint:types": "tsc --project .tsconfig_lint.json",
@@ -32,14 +31,12 @@
     "test:coverage": "stryker run",
     "jsdocs": "typedoc --tsconfig .tsconfig_jsdocs.json",
     "serve": "http-server -p6007 -c-1 --cors",
-    "extension:chromium": "web-ext run -t chromium -s src/extension/",
-    "extension:firefox": "web-ext run -t firefox-desktop -s src/extension/",
-    "build": "web-ext build -s src/extension/ -a build/ -o",
+    "extension:chromium": "web-ext run -t chromium -s src/extension/chromium/",
+    "extension:firefox": "web-ext run -t firefox-desktop -s src/extension/firefox/",
+    "build:chromium": "web-ext build -s src/extension/chromium/ -a build/chromium/ -o",
+    "build:firefox": "web-ext build -s src/extension/firefox/ -a build/firefox/ -o",
     "clean": "node .script/clean.js"
   },
-  "dependencies": {
-    "webextension-polyfill": "0.10.0"
-  },
   "devDependencies": {
     "@prantlf/jsonlint": "14.0.3",
     "@prettier/plugin-xml": "3.3.1",
diff --git a/src/extension/background/migrate.js b/src/extension/background/migrate.js
deleted file mode 100644
index 7bf7c63..0000000
--- a/src/extension/background/migrate.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * @module
- * @license MIT
- * @author Sébastien Règne
- */
-
-const current = await browser.storage.sync.get();
-
-// Vider la configuration pour enlever les éventuelles propriétés obsolètes.
-await browser.storage.sync.clear();
-
-if ("version" in current) {
-    await browser.storage.sync.set({
-        version: current.version,
-        dashboards: current.dashboards,
-    });
-} else {
-    await browser.storage.sync.set({
-        version: 1,
-        dashboards: [],
-    });
-}
diff --git a/src/extension/chromium/background/migrate.js b/src/extension/chromium/background/migrate.js
new file mode 100644
index 0000000..912b1c4
--- /dev/null
+++ b/src/extension/chromium/background/migrate.js
@@ -0,0 +1,27 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+/**
+ * Migre éventuellement la configuration.
+ */
+export default async function migrate() {
+    const current = await browser.storage.sync.get();
+
+    // Vider la configuration pour enlever les éventuelles propriétés obsolètes.
+    await browser.storage.sync.clear();
+
+    if ("version" in current) {
+        await browser.storage.sync.set({
+            version: current.version,
+            dashboards: current.dashboards,
+        });
+    } else {
+        await browser.storage.sync.set({
+            version: 1,
+            dashboards: [],
+        });
+    }
+}
diff --git a/src/extension/chromium/background/script.js b/src/extension/chromium/background/script.js
new file mode 100644
index 0000000..6c1e222
--- /dev/null
+++ b/src/extension/chromium/background/script.js
@@ -0,0 +1,80 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+import "../polyfill/browser.js";
+import migrate from "./migrate.js";
+
+const handleBeforeNavigate = async (details) => {
+    // Récupérer les identifiants des onglets déjà impactés par l'extension.
+    const rules = await browser.declarativeNetRequest.getSessionRules();
+    const tabIds = [
+        ...rules.flatMap((r) => r.condition.tabIds),
+        // Ajouter le nouvel onglet.
+        details.tabId,
+    ];
+
+    // Ajouter la règle de modification des entêtes HTTP pour tous les onglets
+    // affichant un dashboard.
+    await browser.declarativeNetRequest.updateSessionRules({
+        addRules: [
+            {
+                action: {
+                    type: "modifyHeaders",
+                    responseHeaders: [
+                        {
+                            header: "Access-Control-Allow-Methods",
+                            value: "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS",
+                            operation: "set",
+                        },
+                        {
+                            header: "Access-Control-Allow-Credentials",
+                            value: "true",
+                            operation: "set",
+                        },
+                        {
+                            header: "Access-Control-Expose-Headers",
+                            value: "*",
+                            operation: "set",
+                        },
+                        {
+                            header: "Access-Control-Allow-Headers",
+                            value: "*",
+                            operation: "set",
+                        },
+                        {
+                            header: "Access-Control-Allow-Origin",
+                            value: "*",
+                            operation: "set",
+                        },
+                    ],
+                },
+                condition: {
+                    tabIds,
+                    urlFilter: "|http*",
+                    resourceTypes: ["xmlhttprequest"],
+                },
+                id: 1,
+            },
+        ],
+        removeRuleIds: [1],
+    });
+};
+
+browser.storage.onChanged.addListener(async () => {
+    const { dashboards } = await browser.storage.sync.get("dashboards");
+    if (undefined === dashboards) {
+        return;
+    }
+
+    browser.webNavigation.onBeforeNavigate.removeListener(handleBeforeNavigate);
+    browser.webNavigation.onBeforeNavigate.addListener(handleBeforeNavigate, {
+        url: dashboards.map((d) => ({ urlEquals: d.url })),
+    });
+});
+
+browser.runtime.onInstalled.addListener(async () => {
+    await migrate();
+});
diff --git a/src/extension/img/icon.svg b/src/extension/chromium/img/icon.svg
similarity index 100%
rename from src/extension/img/icon.svg
rename to src/extension/chromium/img/icon.svg
diff --git a/src/extension/img/icon128.png b/src/extension/chromium/img/icon128.png
similarity index 100%
rename from src/extension/img/icon128.png
rename to src/extension/chromium/img/icon128.png
diff --git a/src/extension/img/icon16.png b/src/extension/chromium/img/icon16.png
similarity index 100%
rename from src/extension/img/icon16.png
rename to src/extension/chromium/img/icon16.png
diff --git a/src/extension/img/icon24.png b/src/extension/chromium/img/icon24.png
similarity index 100%
rename from src/extension/img/icon24.png
rename to src/extension/chromium/img/icon24.png
diff --git a/src/extension/img/icon32.png b/src/extension/chromium/img/icon32.png
similarity index 100%
rename from src/extension/img/icon32.png
rename to src/extension/chromium/img/icon32.png
diff --git a/src/extension/img/icon48.png b/src/extension/chromium/img/icon48.png
similarity index 100%
rename from src/extension/img/icon48.png
rename to src/extension/chromium/img/icon48.png
diff --git a/src/extension/img/icon64.png b/src/extension/chromium/img/icon64.png
similarity index 100%
rename from src/extension/img/icon64.png
rename to src/extension/chromium/img/icon64.png
diff --git a/src/extension/img/icon96.png b/src/extension/chromium/img/icon96.png
similarity index 100%
rename from src/extension/img/icon96.png
rename to src/extension/chromium/img/icon96.png
diff --git a/src/extension/chromium/manifest.json b/src/extension/chromium/manifest.json
new file mode 100644
index 0000000..60bb78f
--- /dev/null
+++ b/src/extension/chromium/manifest.json
@@ -0,0 +1,43 @@
+{
+  "browser_specific_settings": {
+    "gecko": {
+      "id": "gout@regseb.github.io",
+      "strict_min_version": "126.0"
+    }
+  },
+  "manifest_version": 3,
+  "name": "Gout",
+  "version": "0.11.0",
+  "action": {
+    "default_icon": {
+      "16": "img/icon16.png",
+      "24": "img/icon24.png",
+      "32": "img/icon32.png",
+      "64": "img/icon64.png"
+    },
+    "default_title": "Gout",
+    "default_popup": "popup/index.html"
+  },
+  "description": "Agrégateur d'Internet (flux RSS et tout le reste).",
+  "icons": {
+    "16": "img/icon16.png",
+    "48": "img/icon48.png",
+    "96": "img/icon96.png",
+    "128": "img/icon128.png"
+  },
+  "author": "Sébastien Règne",
+  "background": {
+    "service_worker": "background/script.js",
+    "type": "module"
+  },
+  "homepage_url": "https://github.com/regseb/gout",
+  "host_permissions": ["<all_urls>"],
+  "minimum_chrome_version": "125",
+  "permissions": [
+    "activeTab",
+    "storage",
+    "webNavigation",
+    "declarativeNetRequest",
+    "declarativeNetRequestFeedback"
+  ]
+}
diff --git a/src/extension/chromium/polyfill/browser.js b/src/extension/chromium/polyfill/browser.js
new file mode 100644
index 0000000..04f0dc9
--- /dev/null
+++ b/src/extension/chromium/polyfill/browser.js
@@ -0,0 +1,12 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+// Copier la variable "chrome" (qui contient les APIs pour les WebExtensions)
+// dans la variable "browser", car Chromium fournit seulement "chrome".
+// https://crbug.com/798169
+if (!("browser" in globalThis)) {
+    globalThis.browser = chrome;
+}
diff --git a/src/extension/popup/img/remove.svg b/src/extension/chromium/popup/img/remove.svg
similarity index 100%
rename from src/extension/popup/img/remove.svg
rename to src/extension/chromium/popup/img/remove.svg
diff --git a/src/extension/popup/index.html b/src/extension/chromium/popup/index.html
similarity index 100%
rename from src/extension/popup/index.html
rename to src/extension/chromium/popup/index.html
diff --git a/src/extension/popup/script.js b/src/extension/chromium/popup/script.js
similarity index 100%
rename from src/extension/popup/script.js
rename to src/extension/chromium/popup/script.js
diff --git a/src/extension/popup/style.css b/src/extension/chromium/popup/style.css
similarity index 100%
rename from src/extension/popup/style.css
rename to src/extension/chromium/popup/style.css
diff --git a/src/extension/firefox/background/migrate.js b/src/extension/firefox/background/migrate.js
new file mode 100644
index 0000000..912b1c4
--- /dev/null
+++ b/src/extension/firefox/background/migrate.js
@@ -0,0 +1,27 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+/**
+ * Migre éventuellement la configuration.
+ */
+export default async function migrate() {
+    const current = await browser.storage.sync.get();
+
+    // Vider la configuration pour enlever les éventuelles propriétés obsolètes.
+    await browser.storage.sync.clear();
+
+    if ("version" in current) {
+        await browser.storage.sync.set({
+            version: current.version,
+            dashboards: current.dashboards,
+        });
+    } else {
+        await browser.storage.sync.set({
+            version: 1,
+            dashboards: [],
+        });
+    }
+}
diff --git a/src/extension/background/page.html b/src/extension/firefox/background/page.html
similarity index 59%
rename from src/extension/background/page.html
rename to src/extension/firefox/background/page.html
index ac1c6d6..d640daf 100644
--- a/src/extension/background/page.html
+++ b/src/extension/firefox/background/page.html
@@ -5,8 +5,6 @@
     <title>Gout</title>
   </head>
   <body>
-    <script src="../polyfill/script.js" type="module"></script>
-    <script src="migrate.js" type="module"></script>
     <script src="script.js" type="module"></script>
   </body>
 </html>
diff --git a/src/extension/background/script.js b/src/extension/firefox/background/script.js
similarity index 89%
rename from src/extension/background/script.js
rename to src/extension/firefox/background/script.js
index 91db895..72ff63a 100644
--- a/src/extension/background/script.js
+++ b/src/extension/firefox/background/script.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+import "../polyfill/browser.js";
+import migrate from "./migrate.js";
+
 const replace = (headers, replacements) => {
     const names = new Set(replacements.map((r) => r.name.toLowerCase()));
     return [
@@ -43,3 +46,7 @@ browser.webRequest.onHeadersReceived.addListener(
     { urls: ["<all_urls>"] },
     ["blocking", "responseHeaders"],
 );
+
+browser.runtime.onInstalled.addListener(async () => {
+    await migrate();
+});
diff --git a/src/extension/firefox/img/icon.svg b/src/extension/firefox/img/icon.svg
new file mode 100644
index 0000000..12ee39d
--- /dev/null
+++ b/src/extension/firefox/img/icon.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">
+  <defs>
+    <mask id="circle">
+      <circle cx="16" cy="16" r="16" fill="white" />
+    </mask>
+  </defs>
+
+  <g mask="url(#circle)">
+    <rect x="0" y="0" width="32" height="32" />
+    <polygon
+      points="9,11 23,11 16,2"
+      fill="white"
+      stroke="white"
+      stroke-width="4"
+    />
+    <line x1="16" y1="25" x2="16" y2="11" stroke="white" stroke-width="4" />
+    <polyline
+      points="8,32 8,19 24,19 24,32"
+      fill="none"
+      stroke="white"
+      stroke-width="4"
+      stroke-linejoin="round"
+    />
+  </g>
+</svg>
diff --git a/src/extension/firefox/img/icon128.png b/src/extension/firefox/img/icon128.png
new file mode 100644
index 0000000000000000000000000000000000000000..728804abe2fc361135314f34fe3380e4f86b6894
GIT binary patch
literal 3022
zcmX9=c{tSj7yiy-9lOa$GWcZ~G4`=DGL{k9m+WGY>|~db5>e8~E@Vp-WnYHT%~r&a
zvNa}dmqM1LLGqjK{o{Pj^PJ~>-uJxcoIgGp))!2<IYl@D0N}=(;cS_i_$Sy|neSiv
z-fx(RBh2h#Bmn5}{0Y!#TSY3fcrwb^Im#~7FDk}6f&j$C#Go&ST#5AY4kMsLBm9fM
z>52dV%oUF_w2v*>C`}G3bvQX>u%h7lfhTM(7pY=G71?*7%DRq9SB0>`<*v)}Kl=3v
zIo4HBAS`&S5-53!(;>+1QkDcp#l<X5P}08Igpl)G%cp{%R6Zra^+IcA6~nr*j9dxs
zBzFgI>TT|aZzhe)#Jy-G|14S28~^$6khYmXi+qr7Z6#X`50ePPAB3K20tak-{Tevi
z7VMg78_3Zl>|CTD4Aw+R%7k=%sWEbG57C46u&%T1ffT{xz_P7Bq$cnvHrI9qR6o@L
z?%>j_WQ1>QY^*PIk_d0|#^!0%O4Ey-5mE_z>!^KyI?79?>GTX*Qqf=MIwjrAlBEgS
z!P;>uR_NZ%M|E}h=uMi!XB8C{$+599SX=R+7+r=kjrCdGu8Y+*lCk!qA|M|?N0d_p
zAwTJFohuJtWEzZ-f6`oSke7RSeu;DlIm6=@UW?36aL8LTctOQP2<reJHa<RH4*gqg
z?L(u+SJgX^FY;F}uZEYzWHA|4P|grts0Bfm*x=G?exXFu+cAk>D{iN%!Go-w$zHP@
zUY@yIQePw)3uZBPqHt3T6u3HCT3Ut~jE?Z_+S$J3zLvJOIldI&7<kqwEdjN{Mr|9w
z)?cU%-#?SV#m!BSKkDY<<vnj?l&Zkbeqi@%x?;%v91LJ6Z8Z&~oWNp277EB;jTf#R
zZa79-EN4>)hFAEi>;hQ7foW}ekKNtfRn*l9wO?5*EG<XwXwX*AL1j{Oh&AG^TQrFV
zh)0;xy-6AkeTx^_=D2(5uBetI!aXVn#?Rh_V6^;<k6kl6rCChGBOuOovp(iGrERK}
zS$=^7_8bw4r4&<Q?P=~JU~+LWwDVo$)Z*giy5^*CKPj1B$?ycxqO`m&j*8i-6yZL<
zQl_^xEcaP=$R|SP{uiTdeQ`|8PQC~S8z{wIs+6vN>9CD}q&{OC%A57MO&|sI&Tz_K
z3|O#yX}oR4mgdHLJGglW&L&NDQ|2l`P0IuHpq7tc60vRtdNrCV8Ri3Mx_q4psN9LR
z{zIAX8B<iW2v@zNRc`qN4`9#6d*ApD3JcyVSeiK_cXuTvvPuLBlw{OiUd(68`H&uK
z{$`OU-2-FGHjewJKndyz7TaC|CkB;H=2s9<*T4&#YhD^bGxTaAX7$ULZPazP6jly#
zU`2X7>V^sv8z5jgbb84SpeXe6pj()frX;foM9wn=5{&hnDclP8n!dyor=Ag@i-+}g
zz=4DN-_jeMlGO|KYGTzgpt09E^DCX?i29yvcENtxsE3x4AWQ~~>1W5+rN%wPzMjeH
zPYU4dFc0Dc$Z4B#NH*(@e}Ru|UMHTFbpm4I%okQM&s_SqqE)9DZ8Lm8m~#B*C*P~C
zjI1jURN~b@ZsJ1Ft@P|0SH_ryX8bPEmmfH|dwM0~{geOLpBAtKNsTnpGr@+d%xPy!
zQ=^sP6mEUE3olbj%<_>{MheidP_5(nF7scH0cLXiz}#+lkv;i8BhT(}Lg~AseICr^
z>K5X7&9%VT&^Jr(cAok(33;Wd@GV1>5fIa1apqr2i$}=UiC{no)YxGzuJ}j9;*pbV
zmx;AJ5$#mE@~6>MeAFHIJ6&&#=O74wzlrchXl`!KP0iCu-m|x)zu!<qM8xfC`1gjg
zzdt%13vgk)<z;q)n6sWZqs=9sx6}^o?$y878SQ2^>_ZAD&E=zfY}2{zXN6%NNQ^lL
zNY}ra6tFkr?dyxnL%RpM0+qJ109|)puKwnHM<9!7dvWPm7I4R`-!gUmc{YT!nrSNz
zT-iLPu7{^WNROR36NzV=u;<UiAP|Te1~V6cwxv8W&J-3FE^lp}b|jrOY&^hElpR~O
zPe-Ur#HXp6B(vDK@33yspbX%u%dg>{9yaHk^86&zoe?RHgZgR7{VD|zn!VKcj4(oa
zRnZ~qZxT#^-Y{_ycb!@UC{#43Lo1~~G=z4hnUagZF8Meoak8XbBY}w<lqDukIrqq_
z-B%UZ{f5j*+;N0sd*jX;Zb}J`$Ov+58I<WoM@3D1_%JjxBP=K=2>WJ}tNvn1yDuYy
zV{mYAb#1M(vhuH&>`t#Fhz35%{hv_OnHkw)jnKT25&V38_183Jp6!WiW;)ewG!;n(
z$5KqUZ{50OlpQ*zq^rAr9-7LrRi-7wetvgvZ*q3_OILAMMRPNWM)N?rZ$KEVJPz-v
zRQ}o|h_sAMHB;*cSCc+yP@z6h=;OzaXYjkla#DDKuI_I47}bY>4>}>;u1`yBFvPwh
zKdtZX?*olBQJv_lni^?@<p;f?Y-DZc?CgLGS>6o?jh%B)e9rhsQ>?odhpSmEiRoHL
z**;hY{6e_r#guZ)gxieZ*oXT%RbalHeCjD2Zm0iox+vhcA+Tpw?koAbu<j}xs~;D2
zU|>FZzQ(-Hgzm8GUiqF6mhbyLD|LR#lkKfg4#`>xl0NK8!OW8h#;6CVKyor$P$^nJ
z?Dd6;p9vSFm&*EIBJDrHpXO?FC&e+`T*-ta*zkee>x5%tQNS^Mcz&v{K%GgUgY6p=
z`=7%=BWEVBu_{2ceR6t(!#T%e)d@>GRKyaa`Qx5%<=47BM&ztyAUW1@Ze?cjN<r^M
z<S#RO-4Czx%!3otxgg!8HG<nCJpB8vbq1sDj%#dp?`JUl-?}`E5YSx9Hs28cXfv5R
zA!8V~i6p=Gc`%wYe6C)-uekN6Sy->C)3!GVls?S2m9T~~PE;;<I6gMg6ADsVhGkvq
z$ic0ml!lIwENG#e<F`M{SrF^By%Z};=KU=vz)m1v7l43VTT2T2gvVtet!pf4>&bA2
z^YabY+b=?9`E!=B8gm!2>^1Bt2NAb<37ml6Xhm6}--+AWJrDc%ivLkbGPil}N*PW4
z@ucE3<@0BKnO(T3$oSAPG>p*Mc<r$lE3weQs9m7_L7fQ?*z-vh!@2?haK3Pc+;(Dl
z5g&a`a>usXO06r@6(<JmS@+^YWm-z^=#XR_qj;3oGR&nYLbv<wbfw4g(0?)5h_1%I
zuOA=DbI4T-fp|eq<39>yf!ZMhu0*t+hU%5YbJzXLV?+*P>-tPVnmWJTv9;+vh1Ex+
z3GL~_HoH#a2F0yU&1QQ5xBOOymmvU1M(`<ICu8O^N8fmOJx%WktW>_zt&uUTPbUSa
zN-m|jQ$+ap+n=&N4Ox_uyhR)bj4<<efP)*MOsrqC&Dvpm_2&69(`4O@8Sk@UPt!%8
ze{3Rg|C%i34Q088i{fe)r<k-1B)l|cD>Puu>({1hP-dmA-fj<3QYpcj9`{#_0N_o^
zAyNH-zH%)%R$!y)TXT^GN8-k(1Az&SL?qcu!dAqvvC}#A)>3NU$?|*k#4<>J-gmm_
z7+?iDMSOvXoDqM8ewz%^=S&nNN2qU#8jWX_Q6je`M!Bqq4^u2xf3Qf^eLqR}-mRzY
z$6!W{SCbYzS$ordSJB;%KyhGaSQLK~gU<t)(q(na&^LJOkJ!f3U0MkGo2PYp*^h*j
z5c!ZraEOh$`i%?HurEn**%jm8kenrNQTFvfjg}|sDr^GMz+P%`vj@DJIjl&{53Ro+
zhyawD6K1trw02m$F3x2A^S9EL>#k!^c6D)xgSxr|@m#KLCUu4LLsd9_CQH~jlzbq&
z_2H$Z@RgJzL9DWQT_kb(asw3o*G_ahOHT?WC>op%nGaSNWj7v!mBY>JF!W3GbLHGg
zzr%zk?whEFiG-OP<W^F20_^^=7HI?@QWu|KcyxUtB}`hklHb^W&sM#3)0g=d2k^!h
KaL>+pUH?Ce7JBIb

literal 0
HcmV?d00001

diff --git a/src/extension/firefox/img/icon16.png b/src/extension/firefox/img/icon16.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a97843da8c0b17dc46bc99208cd659b02471a5d
GIT binary patch
literal 479
zcmV<50U-W~P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000MJ
z000MJ0hPnJwg3PC8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10c=S`
zK~y-6g_F%n!%z@~zsR)~D&6KC)O6iVce?1a2-$YsWfzLY-#5r36#UCNt3r*^7swM-
z2rZT4!c4iQ{u~&{W#*ijGxr8b_yI(~xYcUqd7i(|=kxb=yPX3Uz|mH{N8AH$fDb@P
zlE{!Gi2wm>;0kDb6R60~RgvO2RvmF1n}~oX6ET5XOLn_mEtktJfz@iIUa#kiTvl8n
z8#@d`6-BW{HWWpnFbsV=hX7+h&N-!N`YYLxrm38BCUWk8V}K}%$g+$q%P<TE0{}*&
z5k8_QVmh4yoCLrE*yjhB#~=uPN&_rhH3|UzexFXKvsGo20L*4HCX>mg2f(Xswk*qk
zcTkq4e-ke|z=O#(o6U`9-?x9ZnhN&-M|@q$ri*p>=e!0EoTNMmf;-@}?tM5M{<b`T
zYe{dm=?3sv?^q8n{{ZZ&_A@mkT}oR2A+VM-Hu5(CFAjlo;DxU@vZ%h#BpuZ2KLJJv
VwD%|t=PLjJ002ovPDHLkV1nEY#(V$(

literal 0
HcmV?d00001

diff --git a/src/extension/firefox/img/icon24.png b/src/extension/firefox/img/icon24.png
new file mode 100644
index 0000000000000000000000000000000000000000..7322dcabc360cb02c03e74ba84ceebbee2213a30
GIT binary patch
literal 719
zcmV;=0x<oFP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00009a7bBm000XT
z000XT0n*)m`~Uy|8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10$fQ%
zK~zYIt(Gxw(?A%89~);Y>4X#rRFI`Ze}p^K5)x7i3uIvE4itp4V`ip=2_cY0Hk1WI
zY1c~m4;Ud?l_;eWQ;j#LeHmg$j$<b+@JJ`wpTB$GyU%xLBZ;yGECG*z-R0$FKMcbt
zilS&`WyJ?}frr4gnHnX+b>I~+1XQh7<@>%;eBW2KS`{GR1b7czKa&A)8~B}cmSGs`
z^?J(F>-A(9MrtA;1lDI70FRRqjXSnltts)8R;!gYNN2NEXpoG2LVR^~RdF1b8VrX+
zIgV3gvOZw|T+NmRP_0(e;o)Jac*@byk?Qq&-XsLBWDVYC6DpO827|#|@sz<}ph~5Z
zH+h|Cvy`ruv~@b2GmEFR+wHu;FsTe%*$2&L^W5So&1N%i^1uLgfSUk|i;H-k$HKw_
zc^ZudjYb22AP5M8U@9kyA~rWSIX*s4L!SY@<y;G!>$>BSx~@AnKWV-R)TV~=|EOC<
z(QG-gvF!EQ+S<hPlCqrwd?hn2+qP$Jt}@~{mTlYl5`8g&30vE?v8=+0&BU@SY}?L<
z0}I$DSw#S*X%<eqY!zkW*}e&%OyC2f^J9u`w~OOAIF3WN+npQFF$DUir0;-Nmh}(3
zk#vw2`x$T-xLB6GzrWAk-ro3n4k7Ryzygr;!!V3{Kp(hJ)Wh>UJkLAJ$WMX$l70e=
z--@Ii;AxWZx10h`B=yt4#A}z-0q!vRHk_9b*pT#cBC6uQflHFwuIt9kKch}0y_0mg
zNULl|{bKZeegSL%w}2ZY=R0t~XoGG8ACvn+{s0l-7O*k87SjL#002ovPDHLkV1kX`
BL4g1O

literal 0
HcmV?d00001

diff --git a/src/extension/firefox/img/icon32.png b/src/extension/firefox/img/icon32.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba6fb23b0be9631955f904353abcf55684950529
GIT binary patch
literal 775
zcmV+i1Ni)jP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000id
z000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10+dNa
zK~z|U#h1@(6G0e;p9$2o*pys^NGQ}oy`^aX1If|c)tvHgw6|V7ND(g$RP9x~=Hg97
zC@n1oD;|0XD70CSK*1jgC28RGu)C0?Gn>se)feWHZ{~ZS&Cb3%izMO<U=DZ!yaEo&
z<#JO}S5mi9sWgED;3e=F$i(g&!}u<+4YUCPDijK8x7!MJetxc%l@*2cVD4*RDKP*r
z18e{neT|jLWORIdtYOvbb!D^Jeh2|w;2AJI767mWd>v{gV~lFG+9mT)wOUQam|+M3
zd%*2j0Kk2qX=$RhwKb=CsMXa~8-RdQU^x;XxN@s`u~<~E*Bc4Y>-AJD7Na0?Rsdic
zII=CApPyH=*&Jye>g?=H3kwS_h(ln;2C!jUFf}!$ot>T7=AriY_mxhkT@dR70Kubn
zVVhj7R>w9EwYj<J0{9c&iV$GiHnChTCpHgNsZ?AL)xev%{*ZBnO;TAxDjY2!1Ae>?
z6kTDHRF04m@Cf{Dj~zBi<p`-Q@LwXX`{W$MO40+^O96NIe_Av^2e>irN(DPOlrbg=
zKqr-C)g+Yye%lJAQVGxVqF&bna?SHRk5Z}R^8W>nP1tBOCiVn08jZ+Jcw|G%=kxLZ
z#}SI?^(6&-n3&V}dT)SP;0JKCzcOl<U$u@O|GAW;7VvgF@QLV+q*nh)sLL2hcg1=K
zSd>Hxe|8;s@ei;5xukCd=KV*qy|`C6YDBEx1=5oJP?`fyt`Wck@&lf_oN&v)=`{eH
z0EJ6_!#@NNw<LX<Aiyp|$MHyjV5B9jOKM#Kpd;yN&@0);sid5wD*hQRE<j7tmZZf|
z{f#VdHk*twv%o{(0dNohAd?NsKY{PSXW%37PJY0R)L&fe&*VX-cbWhI002ovPDHLk
FV1h1eRipp_

literal 0
HcmV?d00001

diff --git a/src/extension/firefox/img/icon48.png b/src/extension/firefox/img/icon48.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4c1f5ddb8775794f93881a263a019e04c2b9eec
GIT binary patch
literal 1180
zcmV;N1Y`S&P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00009a7bBm000&x
z000&x0ZCFM@Bjb+8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11Sv^G
zK~!jg)tbR;99100KeO3ZcB4=lRvQu!A+@;`2}aqR{0Ej44@FNN#F}W@ix7_ul0Xiv
z)sx^Mr`&Ur?IC!`p{;J#Wlxp};u6s+ZD=Ne5W{{w%uL-T^Jd=6Y&P)=zst;T-|zdK
zH~YT7_jZv))&MR5?*m@}cMFBWM!jBtB57aJezVzpQY;oXfV+Oqd%%UR)XqS90JskP
z2&glbmX>rF%gf6;oCo{>%m4#D695bYcYxgxLYkhQK0-dg)YMd%2mw35m%z}m2>{Lj
zHvrc_LgVA(+S}VR3fSM@*TlqxNre1|auax=s{(*aKqI2CN~Mxot(K8|fL5!eQmGUr
zLcmYJ>s=85yc_k@0p)TzRjbul@&Q&?SJl_o7bjvHxROZ#@B#2oOd%~SELf8dFh4&Z
zCqTdf@Np^uz%`2ks#Gd!x7&#YwA*b}Dis?M0%j5k@L!vQxPeDTMzpoHm6&{h?d@%i
zj*i;S#H5t~U<7y?H)x?y(E9p%YVrY^&8CXQqKya_7>yJFoQ+#;f(SFKv@n=lSk!?t
zQ35`<87RuE(jvm-4##Jq0)QbrM~oaG&aBeH!sI$%rNJ-(cj7*5YgTDtX>tN?JtqLK
zF$?W&f=FssX<=z{JNOM?AmDnO>NIAR7M3RWNvD7#Epcb0HLJ9+G`R;pcLssBDKV>A
zrG<sbwSiZ_+ew8c6^lhR8jYTl571~d;!N&p9(W4_#>U2|R;yI2RZ~hRW@l$ZuP-hx
zCK@N;u(q~ly8SkI`&3&Ku?iEqT?hCshu8c3UvV)9oI7b28E`HKym-<qGT^1$Ni)cb
zJf1C|k4qdL9%gcKlK%ew)WuAzQzv$JcUf6kVRLiSW=I#{7h=Bc<#JiB>-KE@cU@QI
za@l4T+5n4Xv{tM2jC_Dvt!BN9{v0<?moHzona-}lvgX4aa6c|9pU-C|loXaV?>Tr4
z(I0?g%97vp^%{<2qy*k8G?<t4$Z?z+@Mh8irrsuLFJ!Yih2VjtN5Rvbp^LrEap(In
zEeS^wj^hjfzX73(yy+D(P4RK(<86OmmGn605AYcH)|7n;@r}>fn*jjFafX10gv`Pz
zn*kT^=>1QCXT6Z5-+?beM><`Y3&?}l3w7c)a20qXQ-!&?EFX_T9r*gWE3!D;O}R>R
zdk5zNmyYl~e8CrSg^uI(Qy|~~sDyG2yXcGf=#&U(10NcBnr^7$C#Dk=Z~$D3<QR3+
z7cnVm`ve3$HN7^81o&}LQoV-))+LSDaI+PFq`agXowIQa0(K?clyugXR}uk13`)8!
zDfY*Z1Oj#>-IA2}4<Km-1Tg@7ink#$9u7xD8@PveOnyEsk7vD57C4UcGVl)GS>-73
u8c^cDGp8NkZ{SzFE$n^Zdr5y~t^F@H`TEZ+->B~Z0000<MNUMnLSTY!j121l

literal 0
HcmV?d00001

diff --git a/src/extension/firefox/img/icon64.png b/src/extension/firefox/img/icon64.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a92b4c7db1714ae6b2ce06e63b25c5c3e3918fc
GIT binary patch
literal 1451
zcmV;c1yuTpP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00009a7bBm0013_
z0013_0gvVJWdHyG8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11vp7W
zK~#90<(o~66h#<@pX#uC+8;28WVtA4Z*=rP)a!-=d-p%1hw-5CY9uW20{+|x5#9A{
zj3KNCG6{)#(hDnw#6bL6*$9awUdSxM0K=SIvag5gmS&lmuB!RzU3ii&+01lxec!v)
z-EURbAc=kkunl+x_yG7CI9D#0FG;FP`ZtMsrBb;BoCD^8L%_?xw!Y`rr=p(+jslCo
zDxfqbCnwctG_;mxv#C<4r0lUt+eP3L;JI}z05AsZ2bR_p@qdhrjA&_T>7L?KE?&H-
z@$vDNZId{k^f9__1OOfaJ_70;5|=SXCr+GbTYSpNlP6`2=_G=ZzCHxD6ea**fC_LW
zCs_eHaNt00@hLMiGr8wW;u`QS5DioS;Bnw5$0W69&mOI;tT+pB`}S>3PfxpwAmB8x
zYajvuF9O$Hlbe{BP_0&TE<UAJt7&3l!bgM#Q0|)mKm>g1k&uRlhP1G-;9Y#mnKNfJ
zJUr|pg0N2v=S#x1_+jkx*(;g3xw+utQ)XvpeFYG392n|}07>!R`6f{=m%A=LrBbPc
zi14k82rhT}uY5Z%l}c(hn>`btjY)Ee`Mk>^PXMoL9`emjC=Mp6T^tD#0C?56Ggq?{
zila$t6|Z{<0PF&8_;%!Dc0%zmN!hpo>~s<!x$d1!P8z;uCzJq_l*R&JTm*RA_vG8R
zZ`b9^m-}9P%JTBEcI?;@BEp*;1;9>h{_#0!w`M1lK$El#Z0;n$$G)oe!t8_+Xp#=K
z6aYJ)?>MDh8@)6;p#+$uYh>0FvI6Y)IZ?Znok0_5lJ=>E0E@0C=$F|ECBP(|S5^S*
z8lF?*ew&?80!-3wWdu0t+HeqNClpVUbVL~e{%~nDD6<oar%C!nwsy9$X6d?Bgs$ui
z8jqEvRbVUFmlholF3RkL;$f0r+5|jJ4l64wOifMY9p;3RVb>00Oi%i8q!a;@gY0pg
zF&P0*6rDwZ#1YAj-~nZ81dJA)MS+Y)z(~<q6v${)bOuEe0nMV5D3DtbaLcz<9LH3v
zRT_<k)0?Gi<l%e1Mx#NsS|yI-AOQf*;xU(w<5=~2ePFK6m3qCdIF5ZLLjryV&v$;+
zYPINE+fuDoeFZoc0T+D6%-+3weGVTe0l8g>uv1}Y#>U2cI~f=Oxt%xI>2MAELL?VC
z+{lW=V=}c0JQ7K|g57=fpz)ietEmzCzR*;P;Rmor2<(%fCm3ToM!(y8Fb|0UlFs6J
zGu+@TN%|G;i~z7ZK^_#oNdGYDUELTn3j7Uh>C`gsDUdfzi*Ap7{r9M(TaXz6$p@e3
zwZ0GdEG-@~BLKh{vjyu6A8yyW=>K4s?U#W`NjK9E?phC!bRBrVV-FjfnQZaEz0*&u
zBRox;2}B<4+O323r)aT7=B`U1#Tc^-`|FMIwcqvNCe#&y{oeqdm2_$C7cG~>B>jcm
zD|El`R;%KH&MPq3jmJG5!rewd|A#x)m?MAzzTCh99H*PDvWW;oWHw80AOXIi+s)D$
z5jJ7%<3<tSm`m}_0_e`=aAcheunHWe#pAAP0W$G|?2jJTn*cW@z2;j_hyY01DXHa-
ziGl<;CF!w{T0#Xtl95!Av|OM7*Cf4@<PuazHv*)wS<;~-nL!C~RnkF8<K5=p3jxv?
zk+cuT9cO{DDCxbVub$-HaxTy<#+co}8^AR13~em81FOLA*hSlUCCga7q%Q*8)qycv
zfhpiA;7K6HZp+`yoxKT7?1ZI`U61$^yHx+9q^teR?>~%7Ho+HIHhusA002ovPDHLk
FV1hOMpa1{>

literal 0
HcmV?d00001

diff --git a/src/extension/firefox/img/icon96.png b/src/extension/firefox/img/icon96.png
new file mode 100644
index 0000000000000000000000000000000000000000..641ce897baeb54b0caabff869978ba4295d21506
GIT binary patch
literal 2270
zcmV<42qE{0P)<h;3K|Lk000e1NJLTq003YB003YJ1^@s6;+S_h00009a7bBm001mX
z001mX0e5<IO#lD@8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H12y011
zK~#90?VbH^97h?)KXbJ?k*l4QzF3$dwLjoQ5y+sXRjM{ZDwQaN))j6PDx(yd*8KsT
z{0#^pg*X+^Ul2kda6!04C=>+ZwF!lQNt5W>25{2wA`&YiB*MhGBsR%?`C<0ljeF<Y
zot?eC^W8^!B){y=Jo|iiX7`z$*)@`AMvO75fdODGurB!d-9tk|g?;<>6^t=A0fk`m
zlBEA^-MY23ckkX3a0)m9OasS(6O#Vh_@jt`q^2<7M&LnU7jPK31}JO;0|T0!omDO7
z=H|41{dz6kFR;G?Ujw!PH)Vaii^rXD(ANN?z{|kZ8i5m_LZP5z$Bxwueue4jY4!H@
z)+{HmtH5u7r-3zXB><2EHUlpJm+J&-(IzG)>IT2U<m6<eG6TCD`0`O8w_*hd0{<{@
zBt~!qXy?wIk%M1h$BrGb>Im!@unp*1F#-Txz*E3Uhk$6~#*LbvpN}oT!oq?!ZQA4_
zf`B)G?Trv3?ci?!UU3Y9`uh5G`t<48!LM-U%o+9f_q&Q9pa|U8asmMF0KP(%JDI4~
z)zzf~2M#y~zrw+T2i4u(okWB(Fag}w5&{5^0_PJPumFvZk0%a(h26V%C-Nn*bHGs3
z3V`kFcLirmqJteC9#*+r_9j5NT-NaLun!T+LCbzyQwadv2^{ipfOV5CSL!5baqW-5
z9Zews_CkBs$ALvnwp@vrq(!y!z`dCY06YL(@N_`2k}X$aCTaETBJfZq0stQeuJ}3_
zmt@No$0V(m%>$1+$I)pgc$@^cm`lwy*>WXel2*;G0iSS+r9<#P<nzq$>+93Z%uK_A
zUtwluMtyyKK1EmnJ{&uqu{MUgfjM7J`%1Q4@sOk~wGuHe%yEK$C-85N&U#I@T=A5o
zh3zacZc(EKzZ>|yPe+G_hP)<Qu9VAVZP~KLw+M%bn5;z=;LAQ8Oe@)P#dDHYv1jE&
z0N`VI7+$DY+R2tHo|7~MF?&==1ORTu!@yeD8j)<d;yFnZb^z}dB@p17J{@XgvgL~B
zBu&8A<stxZpU<wR(aDx8DJ5w&Z%u0jzYF^`$cqz6pKLW64^PsT+H2H!yje?tr+rnP
zb+YA33Q5|NiXs4T19n!Kmx}l7*^^lilQKR&?o)u1)mlL{0Y-dP+APVID=8#tZy7aR
z8hiu1?xV71OSW9`oTUAUC6m9F3b5HnMa`OQx#BrV`-qki;QKx*Y35|h6^}{U_f$;)
zU^Q?lX$7s2Y`NkoNxMvFLU34sXOb4)D#?~B9+R}~sv^M4NeXSXWXly#N!ose1qiyI
zW#{KFXRVrSx#A&7`ybG&kN}S)QM8qlEmu4wX`2-i;7hIr`JP7DDtMUgxJMxYUUeyC
zr6gOfBuvtd%Eq46I1D?lv}DVb1WDR8pvM6BU?-b4H44s_s2F2X^293}a@cja9kO9<
zM}TbU2#_&rbHKZ@_M(lsJqPq=?L`~Ylf%BFp+h$G<ba;6y=Y@PEg)lha#?%O?&Pow
z%{pYmTn@Y9r9(E%d2a#ve4eqfF{Y-bD3wZer@u$FxcI8KR4OqwHO1K282NnOXQ&`J
z`Ms@t>F@7Xu~<xX^f60{#iH*yqrU^#>!YxIKEI-aU!hnmDxc5$5@0fieXC$%Mn^{(
z931pfR8uoJILPSesITIVdlO(}WW+}?ErG{lJ?`y+OsQ02)v8s=U1|X?UAjb}P^iCQ
zeKr{EVB9QrVy-iCxKn9mJUnqL18Z`UE?{RwcW5lHN}8(-MZA=$EA7dz!45?L?9b4V
zc4a?+kyLq6_Id2`Bquu8fLL4wZkBW*2O#@q@q<1b>kx_G2G?G~!_nVuqzA^BSk`Ri
zC*(Veepb4Upc^^^yxpb5xLr`(gKqWmLtFvgDQOl$Eg<NIe(YLmhsgY}5`4J63j+9d
zgPmzdCc?j%aMLrkUA+dpH*Tq|-bFO13;HwgK1t=uAFgWwvR>?RDY-)=J|7M~ENKA%
z#+Vy`zX0!vQ*x`Hp$%vOCxLa6u7&^jmRS+O249R@dWX7vVQKK8N(+F+R&W@2f7H@j
z{R~aH{G-4<)dZ+IFDTgX8SId0hh&t2&sGaQ)DQqb(jnkmDLK_nd_&S7YW=fn7qs|K
zV{XBIjqc`pwX}E_kyiQVuovF*wKiCGYNDibz!TUf_?gn=V>{Il@YHg_hdKfPNcsu(
z#jPFU@vNj5>ut1b7qqyMG2Pft|J_?_n+6VMrGjVw4*{DbEz~V1YQ@HwJA#65t@i(p
z0E?Uj?w0h=DCI<+o-XMh*zYZNCiB*24*N!|NWq5~0su%ljQvj7d`!pMfd$|(Nk`-C
z6nlY&q?dqC(Mi(6l!0xMei3&^rxh}iCb1tzzT&d~3S$8nk@SMg&XF&|Rd+V#0bn1M
zmk-6;*SX#_aP<Eow%hr+YrTmC2pqW!_^G7ZV(yoyUf(zf@GtC3myRT<H}N99z<~|e
zg&ys~E7&)pCkj4z5CA~ZDd2;^=UCYnX93Rv_e=V_j{*~SK~;DJ`{9RW2k=_33pxip
ziRYOkX{;0e5%zKBbF7TkAmDjmJt<7vNuvdXxeNFz_5*O&SKJycpa^`16t8b-uarN6
z9l+ZTypeKUJ~;t=nnv7Q$kTe-2$qxdu%siw^p~cxfY&8$lT`I{BWYOLT~IX)@Q^X)
z3G4;iX)dZqE(0%0ngD)AgC9O+A;6oJ+X=ys0iOi!$9_Dh5nRPCl71fef$Y54OvqG#
zFvgey_ImMPU?0HmHR^A`uLAp}LK9@Oq-g|LiZP}K`$EA1U|sO@?b!Dl-3YAV&37GL
s#IE$b7}zQ7g>)Lb4*G<orhJa^f4+tDAd@gT!~g&Q07*qoM6N<$f-&kicK`qY

literal 0
HcmV?d00001

diff --git a/src/extension/manifest.json b/src/extension/firefox/manifest.json
similarity index 92%
rename from src/extension/manifest.json
rename to src/extension/firefox/manifest.json
index 1f24ed0..6fd656f 100644
--- a/src/extension/manifest.json
+++ b/src/extension/firefox/manifest.json
@@ -2,7 +2,7 @@
   "browser_specific_settings": {
     "gecko": {
       "id": "gout@regseb.github.io",
-      "strict_min_version": "121.0"
+      "strict_min_version": "126.0"
     }
   },
   "manifest_version": 2,
@@ -31,7 +31,7 @@
     "persistent": true
   },
   "homepage_url": "https://github.com/regseb/gout",
-  "minimum_chrome_version": "120",
+  "minimum_chrome_version": "125",
   "permissions": [
     "<all_urls>",
     "activeTab",
diff --git a/src/extension/firefox/polyfill/browser.js b/src/extension/firefox/polyfill/browser.js
new file mode 100644
index 0000000..04f0dc9
--- /dev/null
+++ b/src/extension/firefox/polyfill/browser.js
@@ -0,0 +1,12 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+// Copier la variable "chrome" (qui contient les APIs pour les WebExtensions)
+// dans la variable "browser", car Chromium fournit seulement "chrome".
+// https://crbug.com/798169
+if (!("browser" in globalThis)) {
+    globalThis.browser = chrome;
+}
diff --git a/src/extension/firefox/popup/img/remove.svg b/src/extension/firefox/popup/img/remove.svg
new file mode 100644
index 0000000..a11d462
--- /dev/null
+++ b/src/extension/firefox/popup/img/remove.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
+  <path
+    d="M6.5 12a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5zm2 0a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5zm2 0a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5z"
+  />
+  <path
+    d="M14 2h-3.05a2.5 2.5 0 0 0-4.9 0H3a1 1 0 0 0 0 2v9a3 3 0 0 0 3 3h5a3 3 0 0 0 3-3V4a1 1 0 0 0 0-2zM8.5 1a1.489 1.489 0 0 1 1.391 1H7.109A1.489 1.489 0 0 1 8.5 1zM12 13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4h7z"
+  />
+</svg>
diff --git a/src/extension/firefox/popup/index.html b/src/extension/firefox/popup/index.html
new file mode 100644
index 0000000..781ff63
--- /dev/null
+++ b/src/extension/firefox/popup/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Gout</title>
+    <link href="style.css" rel="stylesheet" />
+    <link href="/img/icon.svg" rel="shortcut icon" />
+  </head>
+  <body>
+    <template>
+      <li>
+        <span></span>
+        <button class="icon" title="Enlever">
+          <img src="img/remove.svg" alt="remove" />
+        </button>
+      </li>
+    </template>
+
+    <div>
+      <button class="outlined" id="set" disabled="disabled">Ajouter</button>
+    </div>
+
+    <ul></ul>
+
+    <script src="script.js" type="module"></script>
+  </body>
+</html>
diff --git a/src/extension/firefox/popup/script.js b/src/extension/firefox/popup/script.js
new file mode 100644
index 0000000..ab75c43
--- /dev/null
+++ b/src/extension/firefox/popup/script.js
@@ -0,0 +1,107 @@
+/**
+ * @module
+ * @license MIT
+ * @author Sébastien Règne
+ */
+
+import "../polyfill/browser.js";
+
+const check = function (href) {
+    try {
+        const url = new URL(href);
+        return ["http:", "https:", "data:", "file:"].includes(url.protocol);
+    } catch {
+        // Indiquer que l'URL est invalide.
+        return false;
+    }
+};
+
+const copy = async function (event) {
+    const li = event.target.closest("li");
+    const url = li.querySelector("span").title;
+
+    await navigator.clipboard.writeText(url);
+};
+
+const remove = async function (event) {
+    const li = event.target.closest("li");
+    const url = li.querySelector("span").title;
+
+    const { dashboards } = await browser.storage.sync.get("dashboards");
+    dashboards.splice(
+        dashboards.findIndex((d) => url === d.url),
+        1,
+    );
+    await browser.storage.sync.set({ dashboards });
+
+    li.remove();
+    const button = document.querySelector("#set");
+    if (url === button.dataset.url) {
+        button.textContent = "Ajouter";
+    }
+};
+
+const create = function (dashboard, active) {
+    const template = document.querySelector("template");
+    const clone = document.importNode(template.content, true);
+
+    clone.querySelector("span").textContent = dashboard.title;
+    clone.querySelector("span").title = dashboard.url;
+    if (active) {
+        clone.querySelector("span").classList.add("active");
+    }
+    clone.querySelector("span").addEventListener("dblclick", copy);
+    clone.querySelector("button").addEventListener("click", remove);
+
+    return clone;
+};
+
+const set = async function () {
+    const button = document.querySelector("#set");
+    const dashboard = {
+        title: button.dataset.title,
+        url: button.dataset.url,
+    };
+
+    const { dashboards } = await browser.storage.sync.get("dashboards");
+    const index = dashboards.findIndex((d) => dashboard.url === d.url);
+    if (-1 === index) {
+        dashboards.push(dashboard);
+        document.querySelector("ul").append(create(dashboard, true));
+    } else {
+        dashboards[index] = dashboard;
+        document.querySelector(`ul li:nth-child(${index}) span`).textContent =
+            dashboard.title;
+    }
+    await browser.storage.sync.set({ dashboards });
+
+    button.textContent = "Mettre à jour";
+};
+
+const { dashboards } = await browser.storage.sync.get("dashboards");
+// Récupérer le titre et l'URL de l'onglet courant.
+// Attention avec Chromium ! Quand la popup est ouverte dans un onglet : la
+// méthode retourne un élément, mais sans titre, ni URL.
+const [{ title, url }] = await browser.tabs.query({
+    active: true,
+    currentWindow: true,
+});
+
+const button = document.querySelector("#set");
+if (check(url)) {
+    if (dashboards.some((d) => url === d.url)) {
+        button.textContent = "Mettre à jour";
+    }
+
+    button.dataset.title = title;
+    button.dataset.url = url;
+    button.addEventListener("click", set);
+    button.disabled = false;
+} else {
+    button.textContent = "(Impossible pour cette page)";
+}
+
+const ul = document.querySelector("ul");
+for (const dashboard of dashboards) {
+    ul.append(create(dashboard, url === dashboard.url));
+}
diff --git a/src/extension/firefox/popup/style.css b/src/extension/firefox/popup/style.css
new file mode 100644
index 0000000..65164af
--- /dev/null
+++ b/src/extension/firefox/popup/style.css
@@ -0,0 +1,67 @@
+body {
+    font-family: system-ui;
+    font-size: 14px;
+    min-width: 200px;
+}
+
+button.icon {
+    background: transparent;
+    border: none;
+    border-radius: 4px;
+    height: 34px;
+    width: 34px;
+}
+button.icon:hover {
+    background-color: rgba(0 0 0 / 6%);
+}
+
+button.outlined {
+    background: transparent;
+    border: 1px solid rgba(0 0 0 / 12%);
+    border-radius: 4px;
+    color: rgba(0 0 0 / 87%);
+    line-height: 34px;
+    padding: 0 15px;
+    text-align: center;
+    text-transform: uppercase;
+}
+button.outlined::-moz-focus-inner {
+    border: none;
+}
+button.outlined:hover {
+    background-color: rgba(0 0 0 / 6%);
+}
+
+ul {
+    list-style-type: none;
+    margin-bottom: 0;
+    margin-top: 0;
+    padding-left: 0;
+}
+li {
+    align-items: center;
+    display: flex;
+    height: 34px;
+}
+span {
+    flex-grow: 1;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    /* Ne pas sélectionner un mot durant un double-clic (pour copier l'URL dans
+       le presse-papier). */
+    user-select: none;
+    white-space: nowrap;
+}
+span.active {
+    font-weight: bold;
+}
+li button {
+    display: none;
+}
+li:hover button {
+    display: block;
+}
+
+#set {
+    width: 100%;
+}
diff --git a/src/extension/polyfill/browser.js b/src/extension/polyfill/browser.js
deleted file mode 100644
index 861caaa..0000000
--- a/src/extension/polyfill/browser.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * @module
- * @license MIT
- * @author Sébastien Règne
- */
-
-import "./lib/browser-polyfill.js";
diff --git a/src/extension/polyfill/lib/browser-polyfill.js b/src/extension/polyfill/lib/browser-polyfill.js
deleted file mode 100644
index 8e732a2..0000000
--- a/src/extension/polyfill/lib/browser-polyfill.js
+++ /dev/null
@@ -1,1269 +0,0 @@
-(function (global, factory) {
-  if (typeof define === "function" && define.amd) {
-    define("webextension-polyfill", ["module"], factory);
-  } else if (typeof exports !== "undefined") {
-    factory(module);
-  } else {
-    var mod = {
-      exports: {}
-    };
-    factory(mod);
-    global.browser = mod.exports;
-  }
-})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (module) {
-  /* webextension-polyfill - v0.10.0 - Fri Aug 12 2022 19:42:44 */
-
-  /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
-
-  /* vim: set sts=2 sw=2 et tw=80: */
-
-  /* This Source Code Form is subject to the terms of the Mozilla Public
-   * License, v. 2.0. If a copy of the MPL was not distributed with this
-   * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-  "use strict";
-
-  if (!globalThis.chrome?.runtime?.id) {
-    throw new Error("This script should only be loaded in a browser extension.");
-  }
-
-  if (typeof globalThis.browser === "undefined" || Object.getPrototypeOf(globalThis.browser) !== Object.prototype) {
-    const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received."; // Wrapping the bulk of this polyfill in a one-time-use function is a minor
-    // optimization for Firefox. Since Spidermonkey does not fully parse the
-    // contents of a function until the first time it's called, and since it will
-    // never actually need to be called, this allows the polyfill to be included
-    // in Firefox nearly for free.
-
-    const wrapAPIs = extensionAPIs => {
-      // NOTE: apiMetadata is associated to the content of the api-metadata.json file
-      // at build time by replacing the following "include" with the content of the
-      // JSON file.
-      const apiMetadata = {
-        "alarms": {
-          "clear": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "clearAll": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "get": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "getAll": {
-            "minArgs": 0,
-            "maxArgs": 0
-          }
-        },
-        "bookmarks": {
-          "create": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "get": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getChildren": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getRecent": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getSubTree": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getTree": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "move": {
-            "minArgs": 2,
-            "maxArgs": 2
-          },
-          "remove": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeTree": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "search": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "update": {
-            "minArgs": 2,
-            "maxArgs": 2
-          }
-        },
-        "browserAction": {
-          "disable": {
-            "minArgs": 0,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "enable": {
-            "minArgs": 0,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "getBadgeBackgroundColor": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getBadgeText": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getPopup": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getTitle": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "openPopup": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "setBadgeBackgroundColor": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "setBadgeText": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "setIcon": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "setPopup": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "setTitle": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          }
-        },
-        "browsingData": {
-          "remove": {
-            "minArgs": 2,
-            "maxArgs": 2
-          },
-          "removeCache": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeCookies": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeDownloads": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeFormData": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeHistory": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeLocalStorage": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removePasswords": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removePluginData": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "settings": {
-            "minArgs": 0,
-            "maxArgs": 0
-          }
-        },
-        "commands": {
-          "getAll": {
-            "minArgs": 0,
-            "maxArgs": 0
-          }
-        },
-        "contextMenus": {
-          "remove": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeAll": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "update": {
-            "minArgs": 2,
-            "maxArgs": 2
-          }
-        },
-        "cookies": {
-          "get": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getAll": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getAllCookieStores": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "remove": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "set": {
-            "minArgs": 1,
-            "maxArgs": 1
-          }
-        },
-        "devtools": {
-          "inspectedWindow": {
-            "eval": {
-              "minArgs": 1,
-              "maxArgs": 2,
-              "singleCallbackArg": false
-            }
-          },
-          "panels": {
-            "create": {
-              "minArgs": 3,
-              "maxArgs": 3,
-              "singleCallbackArg": true
-            },
-            "elements": {
-              "createSidebarPane": {
-                "minArgs": 1,
-                "maxArgs": 1
-              }
-            }
-          }
-        },
-        "downloads": {
-          "cancel": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "download": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "erase": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getFileIcon": {
-            "minArgs": 1,
-            "maxArgs": 2
-          },
-          "open": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "pause": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeFile": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "resume": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "search": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "show": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          }
-        },
-        "extension": {
-          "isAllowedFileSchemeAccess": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "isAllowedIncognitoAccess": {
-            "minArgs": 0,
-            "maxArgs": 0
-          }
-        },
-        "history": {
-          "addUrl": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "deleteAll": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "deleteRange": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "deleteUrl": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getVisits": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "search": {
-            "minArgs": 1,
-            "maxArgs": 1
-          }
-        },
-        "i18n": {
-          "detectLanguage": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getAcceptLanguages": {
-            "minArgs": 0,
-            "maxArgs": 0
-          }
-        },
-        "identity": {
-          "launchWebAuthFlow": {
-            "minArgs": 1,
-            "maxArgs": 1
-          }
-        },
-        "idle": {
-          "queryState": {
-            "minArgs": 1,
-            "maxArgs": 1
-          }
-        },
-        "management": {
-          "get": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getAll": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "getSelf": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "setEnabled": {
-            "minArgs": 2,
-            "maxArgs": 2
-          },
-          "uninstallSelf": {
-            "minArgs": 0,
-            "maxArgs": 1
-          }
-        },
-        "notifications": {
-          "clear": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "create": {
-            "minArgs": 1,
-            "maxArgs": 2
-          },
-          "getAll": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "getPermissionLevel": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "update": {
-            "minArgs": 2,
-            "maxArgs": 2
-          }
-        },
-        "pageAction": {
-          "getPopup": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getTitle": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "hide": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "setIcon": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "setPopup": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "setTitle": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          },
-          "show": {
-            "minArgs": 1,
-            "maxArgs": 1,
-            "fallbackToNoCallback": true
-          }
-        },
-        "permissions": {
-          "contains": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getAll": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "remove": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "request": {
-            "minArgs": 1,
-            "maxArgs": 1
-          }
-        },
-        "runtime": {
-          "getBackgroundPage": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "getPlatformInfo": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "openOptionsPage": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "requestUpdateCheck": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "sendMessage": {
-            "minArgs": 1,
-            "maxArgs": 3
-          },
-          "sendNativeMessage": {
-            "minArgs": 2,
-            "maxArgs": 2
-          },
-          "setUninstallURL": {
-            "minArgs": 1,
-            "maxArgs": 1
-          }
-        },
-        "sessions": {
-          "getDevices": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "getRecentlyClosed": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "restore": {
-            "minArgs": 0,
-            "maxArgs": 1
-          }
-        },
-        "storage": {
-          "local": {
-            "clear": {
-              "minArgs": 0,
-              "maxArgs": 0
-            },
-            "get": {
-              "minArgs": 0,
-              "maxArgs": 1
-            },
-            "getBytesInUse": {
-              "minArgs": 0,
-              "maxArgs": 1
-            },
-            "remove": {
-              "minArgs": 1,
-              "maxArgs": 1
-            },
-            "set": {
-              "minArgs": 1,
-              "maxArgs": 1
-            }
-          },
-          "managed": {
-            "get": {
-              "minArgs": 0,
-              "maxArgs": 1
-            },
-            "getBytesInUse": {
-              "minArgs": 0,
-              "maxArgs": 1
-            }
-          },
-          "sync": {
-            "clear": {
-              "minArgs": 0,
-              "maxArgs": 0
-            },
-            "get": {
-              "minArgs": 0,
-              "maxArgs": 1
-            },
-            "getBytesInUse": {
-              "minArgs": 0,
-              "maxArgs": 1
-            },
-            "remove": {
-              "minArgs": 1,
-              "maxArgs": 1
-            },
-            "set": {
-              "minArgs": 1,
-              "maxArgs": 1
-            }
-          }
-        },
-        "tabs": {
-          "captureVisibleTab": {
-            "minArgs": 0,
-            "maxArgs": 2
-          },
-          "create": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "detectLanguage": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "discard": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "duplicate": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "executeScript": {
-            "minArgs": 1,
-            "maxArgs": 2
-          },
-          "get": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getCurrent": {
-            "minArgs": 0,
-            "maxArgs": 0
-          },
-          "getZoom": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "getZoomSettings": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "goBack": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "goForward": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "highlight": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "insertCSS": {
-            "minArgs": 1,
-            "maxArgs": 2
-          },
-          "move": {
-            "minArgs": 2,
-            "maxArgs": 2
-          },
-          "query": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "reload": {
-            "minArgs": 0,
-            "maxArgs": 2
-          },
-          "remove": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "removeCSS": {
-            "minArgs": 1,
-            "maxArgs": 2
-          },
-          "sendMessage": {
-            "minArgs": 2,
-            "maxArgs": 3
-          },
-          "setZoom": {
-            "minArgs": 1,
-            "maxArgs": 2
-          },
-          "setZoomSettings": {
-            "minArgs": 1,
-            "maxArgs": 2
-          },
-          "update": {
-            "minArgs": 1,
-            "maxArgs": 2
-          }
-        },
-        "topSites": {
-          "get": {
-            "minArgs": 0,
-            "maxArgs": 0
-          }
-        },
-        "webNavigation": {
-          "getAllFrames": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "getFrame": {
-            "minArgs": 1,
-            "maxArgs": 1
-          }
-        },
-        "webRequest": {
-          "handlerBehaviorChanged": {
-            "minArgs": 0,
-            "maxArgs": 0
-          }
-        },
-        "windows": {
-          "create": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "get": {
-            "minArgs": 1,
-            "maxArgs": 2
-          },
-          "getAll": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "getCurrent": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "getLastFocused": {
-            "minArgs": 0,
-            "maxArgs": 1
-          },
-          "remove": {
-            "minArgs": 1,
-            "maxArgs": 1
-          },
-          "update": {
-            "minArgs": 2,
-            "maxArgs": 2
-          }
-        }
-      };
-
-      if (Object.keys(apiMetadata).length === 0) {
-        throw new Error("api-metadata.json has not been included in browser-polyfill");
-      }
-      /**
-       * A WeakMap subclass which creates and stores a value for any key which does
-       * not exist when accessed, but behaves exactly as an ordinary WeakMap
-       * otherwise.
-       *
-       * @param {function} createItem
-       *        A function which will be called in order to create the value for any
-       *        key which does not exist, the first time it is accessed. The
-       *        function receives, as its only argument, the key being created.
-       */
-
-
-      class DefaultWeakMap extends WeakMap {
-        constructor(createItem, items = undefined) {
-          super(items);
-          this.createItem = createItem;
-        }
-
-        get(key) {
-          if (!this.has(key)) {
-            this.set(key, this.createItem(key));
-          }
-
-          return super.get(key);
-        }
-
-      }
-      /**
-       * Returns true if the given object is an object with a `then` method, and can
-       * therefore be assumed to behave as a Promise.
-       *
-       * @param {*} value The value to test.
-       * @returns {boolean} True if the value is thenable.
-       */
-
-
-      const isThenable = value => {
-        return value && typeof value === "object" && typeof value.then === "function";
-      };
-      /**
-       * Creates and returns a function which, when called, will resolve or reject
-       * the given promise based on how it is called:
-       *
-       * - If, when called, `chrome.runtime.lastError` contains a non-null object,
-       *   the promise is rejected with that value.
-       * - If the function is called with exactly one argument, the promise is
-       *   resolved to that value.
-       * - Otherwise, the promise is resolved to an array containing all of the
-       *   function's arguments.
-       *
-       * @param {object} promise
-       *        An object containing the resolution and rejection functions of a
-       *        promise.
-       * @param {function} promise.resolve
-       *        The promise's resolution function.
-       * @param {function} promise.reject
-       *        The promise's rejection function.
-       * @param {object} metadata
-       *        Metadata about the wrapped method which has created the callback.
-       * @param {boolean} metadata.singleCallbackArg
-       *        Whether or not the promise is resolved with only the first
-       *        argument of the callback, alternatively an array of all the
-       *        callback arguments is resolved. By default, if the callback
-       *        function is invoked with only a single argument, that will be
-       *        resolved to the promise, while all arguments will be resolved as
-       *        an array if multiple are given.
-       *
-       * @returns {function}
-       *        The generated callback function.
-       */
-
-
-      const makeCallback = (promise, metadata) => {
-        return (...callbackArgs) => {
-          if (extensionAPIs.runtime.lastError) {
-            promise.reject(new Error(extensionAPIs.runtime.lastError.message));
-          } else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) {
-            promise.resolve(callbackArgs[0]);
-          } else {
-            promise.resolve(callbackArgs);
-          }
-        };
-      };
-
-      const pluralizeArguments = numArgs => numArgs == 1 ? "argument" : "arguments";
-      /**
-       * Creates a wrapper function for a method with the given name and metadata.
-       *
-       * @param {string} name
-       *        The name of the method which is being wrapped.
-       * @param {object} metadata
-       *        Metadata about the method being wrapped.
-       * @param {integer} metadata.minArgs
-       *        The minimum number of arguments which must be passed to the
-       *        function. If called with fewer than this number of arguments, the
-       *        wrapper will raise an exception.
-       * @param {integer} metadata.maxArgs
-       *        The maximum number of arguments which may be passed to the
-       *        function. If called with more than this number of arguments, the
-       *        wrapper will raise an exception.
-       * @param {boolean} metadata.singleCallbackArg
-       *        Whether or not the promise is resolved with only the first
-       *        argument of the callback, alternatively an array of all the
-       *        callback arguments is resolved. By default, if the callback
-       *        function is invoked with only a single argument, that will be
-       *        resolved to the promise, while all arguments will be resolved as
-       *        an array if multiple are given.
-       *
-       * @returns {function(object, ...*)}
-       *       The generated wrapper function.
-       */
-
-
-      const wrapAsyncFunction = (name, metadata) => {
-        return function asyncFunctionWrapper(target, ...args) {
-          if (args.length < metadata.minArgs) {
-            throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);
-          }
-
-          if (args.length > metadata.maxArgs) {
-            throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);
-          }
-
-          return new Promise((resolve, reject) => {
-            if (metadata.fallbackToNoCallback) {
-              // This API method has currently no callback on Chrome, but it return a promise on Firefox,
-              // and so the polyfill will try to call it with a callback first, and it will fallback
-              // to not passing the callback if the first call fails.
-              try {
-                target[name](...args, makeCallback({
-                  resolve,
-                  reject
-                }, metadata));
-              } catch (cbError) {
-                console.warn(`${name} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", cbError);
-                target[name](...args); // Update the API method metadata, so that the next API calls will not try to
-                // use the unsupported callback anymore.
-
-                metadata.fallbackToNoCallback = false;
-                metadata.noCallback = true;
-                resolve();
-              }
-            } else if (metadata.noCallback) {
-              target[name](...args);
-              resolve();
-            } else {
-              target[name](...args, makeCallback({
-                resolve,
-                reject
-              }, metadata));
-            }
-          });
-        };
-      };
-      /**
-       * Wraps an existing method of the target object, so that calls to it are
-       * intercepted by the given wrapper function. The wrapper function receives,
-       * as its first argument, the original `target` object, followed by each of
-       * the arguments passed to the original method.
-       *
-       * @param {object} target
-       *        The original target object that the wrapped method belongs to.
-       * @param {function} method
-       *        The method being wrapped. This is used as the target of the Proxy
-       *        object which is created to wrap the method.
-       * @param {function} wrapper
-       *        The wrapper function which is called in place of a direct invocation
-       *        of the wrapped method.
-       *
-       * @returns {Proxy<function>}
-       *        A Proxy object for the given method, which invokes the given wrapper
-       *        method in its place.
-       */
-
-
-      const wrapMethod = (target, method, wrapper) => {
-        return new Proxy(method, {
-          apply(targetMethod, thisObj, args) {
-            return wrapper.call(thisObj, target, ...args);
-          }
-
-        });
-      };
-
-      let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);
-      /**
-       * Wraps an object in a Proxy which intercepts and wraps certain methods
-       * based on the given `wrappers` and `metadata` objects.
-       *
-       * @param {object} target
-       *        The target object to wrap.
-       *
-       * @param {object} [wrappers = {}]
-       *        An object tree containing wrapper functions for special cases. Any
-       *        function present in this object tree is called in place of the
-       *        method in the same location in the `target` object tree. These
-       *        wrapper methods are invoked as described in {@see wrapMethod}.
-       *
-       * @param {object} [metadata = {}]
-       *        An object tree containing metadata used to automatically generate
-       *        Promise-based wrapper functions for asynchronous. Any function in
-       *        the `target` object tree which has a corresponding metadata object
-       *        in the same location in the `metadata` tree is replaced with an
-       *        automatically-generated wrapper function, as described in
-       *        {@see wrapAsyncFunction}
-       *
-       * @returns {Proxy<object>}
-       */
-
-      const wrapObject = (target, wrappers = {}, metadata = {}) => {
-        let cache = Object.create(null);
-        let handlers = {
-          has(proxyTarget, prop) {
-            return prop in target || prop in cache;
-          },
-
-          get(proxyTarget, prop, receiver) {
-            if (prop in cache) {
-              return cache[prop];
-            }
-
-            if (!(prop in target)) {
-              return undefined;
-            }
-
-            let value = target[prop];
-
-            if (typeof value === "function") {
-              // This is a method on the underlying object. Check if we need to do
-              // any wrapping.
-              if (typeof wrappers[prop] === "function") {
-                // We have a special-case wrapper for this method.
-                value = wrapMethod(target, target[prop], wrappers[prop]);
-              } else if (hasOwnProperty(metadata, prop)) {
-                // This is an async method that we have metadata for. Create a
-                // Promise wrapper for it.
-                let wrapper = wrapAsyncFunction(prop, metadata[prop]);
-                value = wrapMethod(target, target[prop], wrapper);
-              } else {
-                // This is a method that we don't know or care about. Return the
-                // original method, bound to the underlying object.
-                value = value.bind(target);
-              }
-            } else if (typeof value === "object" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) {
-              // This is an object that we need to do some wrapping for the children
-              // of. Create a sub-object wrapper for it with the appropriate child
-              // metadata.
-              value = wrapObject(value, wrappers[prop], metadata[prop]);
-            } else if (hasOwnProperty(metadata, "*")) {
-              // Wrap all properties in * namespace.
-              value = wrapObject(value, wrappers[prop], metadata["*"]);
-            } else {
-              // We don't need to do any wrapping for this property,
-              // so just forward all access to the underlying object.
-              Object.defineProperty(cache, prop, {
-                configurable: true,
-                enumerable: true,
-
-                get() {
-                  return target[prop];
-                },
-
-                set(value) {
-                  target[prop] = value;
-                }
-
-              });
-              return value;
-            }
-
-            cache[prop] = value;
-            return value;
-          },
-
-          set(proxyTarget, prop, value, receiver) {
-            if (prop in cache) {
-              cache[prop] = value;
-            } else {
-              target[prop] = value;
-            }
-
-            return true;
-          },
-
-          defineProperty(proxyTarget, prop, desc) {
-            return Reflect.defineProperty(cache, prop, desc);
-          },
-
-          deleteProperty(proxyTarget, prop) {
-            return Reflect.deleteProperty(cache, prop);
-          }
-
-        }; // Per contract of the Proxy API, the "get" proxy handler must return the
-        // original value of the target if that value is declared read-only and
-        // non-configurable. For this reason, we create an object with the
-        // prototype set to `target` instead of using `target` directly.
-        // Otherwise we cannot return a custom object for APIs that
-        // are declared read-only and non-configurable, such as `chrome.devtools`.
-        //
-        // The proxy handlers themselves will still use the original `target`
-        // instead of the `proxyTarget`, so that the methods and properties are
-        // dereferenced via the original targets.
-
-        let proxyTarget = Object.create(target);
-        return new Proxy(proxyTarget, handlers);
-      };
-      /**
-       * Creates a set of wrapper functions for an event object, which handles
-       * wrapping of listener functions that those messages are passed.
-       *
-       * A single wrapper is created for each listener function, and stored in a
-       * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener`
-       * retrieve the original wrapper, so that  attempts to remove a
-       * previously-added listener work as expected.
-       *
-       * @param {DefaultWeakMap<function, function>} wrapperMap
-       *        A DefaultWeakMap object which will create the appropriate wrapper
-       *        for a given listener function when one does not exist, and retrieve
-       *        an existing one when it does.
-       *
-       * @returns {object}
-       */
-
-
-      const wrapEvent = wrapperMap => ({
-        addListener(target, listener, ...args) {
-          target.addListener(wrapperMap.get(listener), ...args);
-        },
-
-        hasListener(target, listener) {
-          return target.hasListener(wrapperMap.get(listener));
-        },
-
-        removeListener(target, listener) {
-          target.removeListener(wrapperMap.get(listener));
-        }
-
-      });
-
-      const onRequestFinishedWrappers = new DefaultWeakMap(listener => {
-        if (typeof listener !== "function") {
-          return listener;
-        }
-        /**
-         * Wraps an onRequestFinished listener function so that it will return a
-         * `getContent()` property which returns a `Promise` rather than using a
-         * callback API.
-         *
-         * @param {object} req
-         *        The HAR entry object representing the network request.
-         */
-
-
-        return function onRequestFinished(req) {
-          const wrappedReq = wrapObject(req, {}
-          /* wrappers */
-          , {
-            getContent: {
-              minArgs: 0,
-              maxArgs: 0
-            }
-          });
-          listener(wrappedReq);
-        };
-      });
-      const onMessageWrappers = new DefaultWeakMap(listener => {
-        if (typeof listener !== "function") {
-          return listener;
-        }
-        /**
-         * Wraps a message listener function so that it may send responses based on
-         * its return value, rather than by returning a sentinel value and calling a
-         * callback. If the listener function returns a Promise, the response is
-         * sent when the promise either resolves or rejects.
-         *
-         * @param {*} message
-         *        The message sent by the other end of the channel.
-         * @param {object} sender
-         *        Details about the sender of the message.
-         * @param {function(*)} sendResponse
-         *        A callback which, when called with an arbitrary argument, sends
-         *        that value as a response.
-         * @returns {boolean}
-         *        True if the wrapped listener returned a Promise, which will later
-         *        yield a response. False otherwise.
-         */
-
-
-        return function onMessage(message, sender, sendResponse) {
-          let didCallSendResponse = false;
-          let wrappedSendResponse;
-          let sendResponsePromise = new Promise(resolve => {
-            wrappedSendResponse = function (response) {
-              didCallSendResponse = true;
-              resolve(response);
-            };
-          });
-          let result;
-
-          try {
-            result = listener(message, sender, wrappedSendResponse);
-          } catch (err) {
-            result = Promise.reject(err);
-          }
-
-          const isResultThenable = result !== true && isThenable(result); // If the listener didn't returned true or a Promise, or called
-          // wrappedSendResponse synchronously, we can exit earlier
-          // because there will be no response sent from this listener.
-
-          if (result !== true && !isResultThenable && !didCallSendResponse) {
-            return false;
-          } // A small helper to send the message if the promise resolves
-          // and an error if the promise rejects (a wrapped sendMessage has
-          // to translate the message into a resolved promise or a rejected
-          // promise).
-
-
-          const sendPromisedResult = promise => {
-            promise.then(msg => {
-              // send the message value.
-              sendResponse(msg);
-            }, error => {
-              // Send a JSON representation of the error if the rejected value
-              // is an instance of error, or the object itself otherwise.
-              let message;
-
-              if (error && (error instanceof Error || typeof error.message === "string")) {
-                message = error.message;
-              } else {
-                message = "An unexpected error occurred";
-              }
-
-              sendResponse({
-                __mozWebExtensionPolyfillReject__: true,
-                message
-              });
-            }).catch(err => {
-              // Print an error on the console if unable to send the response.
-              console.error("Failed to send onMessage rejected reply", err);
-            });
-          }; // If the listener returned a Promise, send the resolved value as a
-          // result, otherwise wait the promise related to the wrappedSendResponse
-          // callback to resolve and send it as a response.
-
-
-          if (isResultThenable) {
-            sendPromisedResult(result);
-          } else {
-            sendPromisedResult(sendResponsePromise);
-          } // Let Chrome know that the listener is replying.
-
-
-          return true;
-        };
-      });
-
-      const wrappedSendMessageCallback = ({
-        reject,
-        resolve
-      }, reply) => {
-        if (extensionAPIs.runtime.lastError) {
-          // Detect when none of the listeners replied to the sendMessage call and resolve
-          // the promise to undefined as in Firefox.
-          // See https://github.com/mozilla/webextension-polyfill/issues/130
-          if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {
-            resolve();
-          } else {
-            reject(new Error(extensionAPIs.runtime.lastError.message));
-          }
-        } else if (reply && reply.__mozWebExtensionPolyfillReject__) {
-          // Convert back the JSON representation of the error into
-          // an Error instance.
-          reject(new Error(reply.message));
-        } else {
-          resolve(reply);
-        }
-      };
-
-      const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => {
-        if (args.length < metadata.minArgs) {
-          throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);
-        }
-
-        if (args.length > metadata.maxArgs) {
-          throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);
-        }
-
-        return new Promise((resolve, reject) => {
-          const wrappedCb = wrappedSendMessageCallback.bind(null, {
-            resolve,
-            reject
-          });
-          args.push(wrappedCb);
-          apiNamespaceObj.sendMessage(...args);
-        });
-      };
-
-      const staticWrappers = {
-        devtools: {
-          network: {
-            onRequestFinished: wrapEvent(onRequestFinishedWrappers)
-          }
-        },
-        runtime: {
-          onMessage: wrapEvent(onMessageWrappers),
-          onMessageExternal: wrapEvent(onMessageWrappers),
-          sendMessage: wrappedSendMessage.bind(null, "sendMessage", {
-            minArgs: 1,
-            maxArgs: 3
-          })
-        },
-        tabs: {
-          sendMessage: wrappedSendMessage.bind(null, "sendMessage", {
-            minArgs: 2,
-            maxArgs: 3
-          })
-        }
-      };
-      const settingMetadata = {
-        clear: {
-          minArgs: 1,
-          maxArgs: 1
-        },
-        get: {
-          minArgs: 1,
-          maxArgs: 1
-        },
-        set: {
-          minArgs: 1,
-          maxArgs: 1
-        }
-      };
-      apiMetadata.privacy = {
-        network: {
-          "*": settingMetadata
-        },
-        services: {
-          "*": settingMetadata
-        },
-        websites: {
-          "*": settingMetadata
-        }
-      };
-      return wrapObject(extensionAPIs, staticWrappers, apiMetadata);
-    }; // The build process adds a UMD wrapper around this file, which makes the
-    // `module` variable available.
-
-
-    module.exports = wrapAPIs(chrome);
-  } else {
-    module.exports = globalThis.browser;
-  }
-});
-//# sourceMappingURL=browser-polyfill.js.map

From 3f7a8a463be8faf7bccf8424484a866829e04def Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 29 May 2024 10:35:16 +0200
Subject: [PATCH 23/38] =?UTF-8?q?chore:=20Mettre=20=C3=A0=20jour=20les=20d?=
 =?UTF-8?q?=C3=A9pendances.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/FUNDING.yml                           |    1 +
 .github/ISSUE_TEMPLATE/bug_report.md          |    4 +-
 .github/ISSUE_TEMPLATE/feature_request.md     |    4 +-
 .metalint/eslint.config.js                    |   18 +-
 .metalint/eslint_browser.config.js            |    5 +-
 .metalint/eslint_config.config.js             |    3 +
 .metalint/eslint_node.config.js               |   13 +-
 .metalint/eslint_test.config.js               |    3 +
 .metalint/eslint_webext.config.js             |    3 +
 .metalint/markdownlint.config.js              |   14 +-
 .metalint/metalint.config.js                  |    3 +
 .metalint/prettier.config.js                  |    4 +-
 .metalint/prettier_css.config.js              |    3 +
 .metalint/prettier_javascript.config.js       |    3 +
 .metalint/prettier_tpl.config.js              |    3 +
 .metalint/stylelint.config.js                 |    3 +
 README.md                                     |   29 +-
 package-lock.json                             | 2610 ++++++++---------
 package.json                                  |   38 +-
 .../examples/preact/helloworld/helloworld.js  |    4 +-
 .../examples/react/tictactoe/tictactoe.js     |    6 +-
 src/scraper/tools/filter/filter.js            |   14 +-
 22 files changed, 1286 insertions(+), 1502 deletions(-)

diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index e7f4ece..f26f6d2 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1 +1,2 @@
+buy_me_a_coffee: regseb
 custom: https://www.paypal.me/sebastienregne
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index e3c72cc..257075f 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -28,8 +28,8 @@ Steps to reproduce the behavior:
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.11.0 -->:
-- Browser version<!-- e.g. Chrome 122.0.6261.94, Firefox 123.0 -->:
+- Gout extension version<!-- e.g. 0.12.0 -->:
+- Browser version<!-- e.g. Chrome 125.0.6422.112, Firefox 126.0 -->:
 
 ### Additional context
 
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index eada9e2..f2d214f 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -17,8 +17,8 @@ assignees: ""
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.11.0 -->:
-- Browser version<!-- e.g. Chrome 122.0.6261.94, Firefox 123.0 -->:
+- Gout extension version<!-- e.g. 0.12.0 -->:
+- Browser version<!-- e.g. Chrome 125.0.6422.112, Firefox 126.0 -->:
 
 ### Additional context
 
diff --git a/.metalint/eslint.config.js b/.metalint/eslint.config.js
index f680e40..a6269f8 100644
--- a/.metalint/eslint.config.js
+++ b/.metalint/eslint.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("eslint").Linter.Config}
+ */
 export default {
     plugins: [
         "array-func",
@@ -242,7 +245,6 @@ export default {
             "ForInStatement",
             "LabeledStatement",
             "SequenceExpression",
-            "TaggedTemplateExpression",
             "WithStatement",
             "YieldExpression",
             "JSXIdentifier",
@@ -642,11 +644,13 @@ export default {
         "regexp/sort-character-class-elements": "error",
         "regexp/sort-flags": "error",
         "regexp/unicode-escape": "error",
+        "regexp/unicode-property": "error",
 
         // Plugin eslint-plugin-unicorn.
         "unicorn/better-regex": "error",
         "unicorn/catch-error-name": ["error", { ignore: [/^err$/u, /^e$/u] }],
         "unicorn/consistent-destructuring": "error",
+        "unicorn/consistent-empty-array-spread": "error",
         "unicorn/consistent-function-scoping": "error",
         "unicorn/custom-error-definition": "error",
         // Laisser Prettier gérer cette règle.
@@ -659,21 +663,25 @@ export default {
         "unicorn/import-style": "error",
         "unicorn/new-for-builtins": "error",
         "unicorn/no-abusive-eslint-disable": "error",
+        "unicorn/no-anonymous-default-export": "error",
         "unicorn/no-array-callback-reference": "off",
         "unicorn/no-array-for-each": "off",
         "unicorn/no-array-method-this-argument": "error",
         "unicorn/no-array-push-push": "error",
         "unicorn/no-array-reduce": "off",
         "unicorn/no-await-expression-member": "error",
+        "unicorn/no-await-in-promise-methods": "error",
         "unicorn/no-console-spaces": "error",
         "unicorn/no-document-cookie": "error",
         "unicorn/no-empty-file": "error",
         "unicorn/no-for-loop": "error",
         "unicorn/no-hex-escape": "error",
         "unicorn/no-instanceof-array": "error",
+        "unicorn/no-invalid-fetch-options": "error",
         "unicorn/no-invalid-remove-event-listener": "error",
         "unicorn/no-keyword-prefix": "error",
         "unicorn/no-lonely-if": "error",
+        "unicorn/no-magic-array-flat-depth": "error",
         // Utiliser la règle no-negated-condition d'ESLint, car celle d'unicorn
         // apporte seulement la correction automatique.
         "unicorn/no-negated-condition": "off",
@@ -683,6 +691,7 @@ export default {
         "unicorn/no-null": "error",
         "unicorn/no-object-as-default-parameter": "error",
         "unicorn/no-process-exit": "error",
+        "unicorn/no-single-promise-in-promise-methods": "error",
         "unicorn/no-static-only-class": "error",
         "unicorn/no-thenable": "error",
         "unicorn/no-this-assignment": "error",
@@ -732,7 +741,8 @@ export default {
         "unicorn/prefer-module": "error",
         "unicorn/prefer-native-coercion-functions": "error",
         "unicorn/prefer-negative-index": "error",
-        "unicorn/prefer-node-protocol": "error",
+        // Désactiver cette règle et préférer la règle "n/prefer-node-protocol".
+        "unicorn/prefer-node-protocol": "off",
         "unicorn/prefer-number-properties": "error",
         "unicorn/prefer-object-from-entries": "error",
         "unicorn/prefer-optional-catch-binding": "error",
@@ -743,10 +753,12 @@ export default {
         "unicorn/prefer-set-has": "error",
         "unicorn/prefer-set-size": "error",
         "unicorn/prefer-spread": "off",
+        "unicorn/prefer-string-raw": "error",
         "unicorn/prefer-string-replace-all": "error",
         "unicorn/prefer-string-slice": "error",
         "unicorn/prefer-string-starts-ends-with": "error",
         "unicorn/prefer-string-trim-start-end": "error",
+        "unicorn/prefer-structured-clone": "error",
         "unicorn/prefer-switch": "off",
         "unicorn/prefer-ternary": "off",
         "unicorn/prefer-top-level-await": "error",
@@ -800,7 +812,7 @@ export default {
                 var: "member",
                 arg: "param",
                 argument: "param",
-                prop: "property",
+                property: "prop",
                 return: "returns",
                 exception: "throws",
                 yield: "yields",
diff --git a/.metalint/eslint_browser.config.js b/.metalint/eslint_browser.config.js
index 0b8efee..0e28ff2 100644
--- a/.metalint/eslint_browser.config.js
+++ b/.metalint/eslint_browser.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("eslint").Linter.Config}
+ */
 export default {
     env: {
         browser: true,
@@ -15,7 +18,7 @@ export default {
         "import/no-unresolved": [
             "error",
             {
-                ignore: ["^https://esm\\.sh/"],
+                ignore: [String.raw`^https://esm\.sh/`],
                 caseSensitiveStrict: true,
             },
         ],
diff --git a/.metalint/eslint_config.config.js b/.metalint/eslint_config.config.js
index 7e2e711..e9bb255 100644
--- a/.metalint/eslint_config.config.js
+++ b/.metalint/eslint_config.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("eslint").Linter.Config}
+ */
 export default {
     rules: {
         // Plugin eslint-plugin-unicorn.
diff --git a/.metalint/eslint_node.config.js b/.metalint/eslint_node.config.js
index 132abd6..3a4b04a 100644
--- a/.metalint/eslint_node.config.js
+++ b/.metalint/eslint_node.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("eslint").Linter.Config}
+ */
 export default {
     rules: {
         // Suggestions.
@@ -38,6 +41,7 @@ export default {
         // Plugin eslint-plugin-n.
         // Possible Errors.
         "n/handle-callback-err": "error",
+        "n/hashbang": "error",
         "n/no-callback-literal": "error",
         "n/no-exports-assign": "error",
         "n/no-extraneous-import": "error",
@@ -51,15 +55,9 @@ export default {
         "n/no-unpublished-import": "off",
         "n/no-unpublished-require": "error",
         "n/no-unsupported-features/es-builtins": "error",
-        "n/no-unsupported-features/es-syntax": [
-            "error",
-            {
-                ignores: ["dynamicImport", "modules"],
-            },
-        ],
+        "n/no-unsupported-features/es-syntax": "error",
         "n/no-unsupported-features/node-builtins": "error",
         "n/process-exit-as-throw": "error",
-        "n/shebang": "error",
 
         // Best Practices.
         "n/no-deprecated-api": "error",
@@ -86,6 +84,7 @@ export default {
         "n/prefer-global/text-encoder": "off",
         "n/prefer-global/url-search-params": "off",
         "n/prefer-global/url": "off",
+        "n/prefer-node-protocol": "error",
         "n/prefer-promises/dns": "error",
         "n/prefer-promises/fs": "error",
 
diff --git a/.metalint/eslint_test.config.js b/.metalint/eslint_test.config.js
index 5f15980..3d6761c 100644
--- a/.metalint/eslint_test.config.js
+++ b/.metalint/eslint_test.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("eslint").Linter.Config}
+ */
 export default {
     env: {
         browser: true,
diff --git a/.metalint/eslint_webext.config.js b/.metalint/eslint_webext.config.js
index 459bd38..ba4ba06 100644
--- a/.metalint/eslint_webext.config.js
+++ b/.metalint/eslint_webext.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("eslint").Linter.Config}
+ */
 export default {
     env: {
         browser: true,
diff --git a/.metalint/markdownlint.config.js b/.metalint/markdownlint.config.js
index a28fe1d..747e003 100644
--- a/.metalint/markdownlint.config.js
+++ b/.metalint/markdownlint.config.js
@@ -46,13 +46,13 @@ export default {
     "fenced-code-language": {
         // eslint-disable-next-line camelcase
         allowed_languages: [
-            "CSS",
-            "HTML",
-            "JavaScript",
-            "JSON",
-            "Markdown",
-            "Shell",
-            "YAML",
+            "css",
+            "html",
+            "javascript",
+            "json",
+            "markdown",
+            "shell",
+            "yaml",
         ],
         // eslint-disable-next-line camelcase
         language_only: true,
diff --git a/.metalint/metalint.config.js b/.metalint/metalint.config.js
index 97e1f69..584e0b7 100644
--- a/.metalint/metalint.config.js
+++ b/.metalint/metalint.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("metalint/types").Config}
+ */
 export default {
     patterns: [
         "**",
diff --git a/.metalint/prettier.config.js b/.metalint/prettier.config.js
index a22cc6f..1f4d3bb 100644
--- a/.metalint/prettier.config.js
+++ b/.metalint/prettier.config.js
@@ -4,9 +4,11 @@
  * @author Sébastien Règne
  */
 
-// @ts-ignore https://github.com/prettier/plugin-xml/issues/671
 import pluginXML from "@prettier/plugin-xml";
 
+/**
+ * @type {import("prettier").Config}
+ */
 export default {
     plugins: [pluginXML],
 
diff --git a/.metalint/prettier_css.config.js b/.metalint/prettier_css.config.js
index 449047e..6a7ba63 100644
--- a/.metalint/prettier_css.config.js
+++ b/.metalint/prettier_css.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("prettier").Config}
+ */
 export default {
     tabWidth: 4,
 };
diff --git a/.metalint/prettier_javascript.config.js b/.metalint/prettier_javascript.config.js
index 449047e..6a7ba63 100644
--- a/.metalint/prettier_javascript.config.js
+++ b/.metalint/prettier_javascript.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("prettier").Config}
+ */
 export default {
     tabWidth: 4,
 };
diff --git a/.metalint/prettier_tpl.config.js b/.metalint/prettier_tpl.config.js
index 0921006..ba258d3 100644
--- a/.metalint/prettier_tpl.config.js
+++ b/.metalint/prettier_tpl.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("prettier").Config}
+ */
 export default {
     parser: "html",
 };
diff --git a/.metalint/stylelint.config.js b/.metalint/stylelint.config.js
index 4486a97..f47058c 100644
--- a/.metalint/stylelint.config.js
+++ b/.metalint/stylelint.config.js
@@ -4,6 +4,9 @@
  * @author Sébastien Règne
  */
 
+/**
+ * @type {import("stylelint").Config}
+ */
 export default {
     plugins: ["stylelint-order"],
 
diff --git a/README.md b/README.md
index 1ed2996..7526f8c 100644
--- a/README.md
+++ b/README.md
@@ -24,19 +24,28 @@ moteur de rendu de Gout :
 
 Voici un exemple de dashboard ayant quatre colonnes de widgets.
 
-```HTML
-<!DOCTYPE html>
+```html
+<!doctype html>
 <html lang="fr-FR">
   <head>
-    <meta charset="utf-8">
-    <link href="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg"
-          rel="shortcut icon">
+    <meta charset="utf-8" />
+    <link
+      href="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg"
+      rel="shortcut icon"
+    />
     <title>Gout</title>
-    <script src="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js"
-            type="module"></script>
+    <script
+      src="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js"
+      type="module"
+    ></script>
     <style>
-        body { display: flex; }
-        div  { display: flex; flex-direction: column; }
+      body {
+        display: flex;
+      }
+      div {
+        display: flex;
+        flex-direction: column;
+      }
     </style>
   </head>
   <body>
@@ -192,7 +201,7 @@ d'outils du navigateur). Actualisez la page pour voir apparaitre les widgets.
 
 [img-firefox]: https://img.shields.io/amo/v/gout.svg?label=add-on&logo=firefox-browser&logoColor=whitesmoke
 [img-build]: https://img.shields.io/github/actions/workflow/status/regseb/gout/ci.yml?branch=main&logo=github&logoColor=whitesmoke
-[img-coverage]: https://img.shields.io/endpoint?label=coverage&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fgout%2Fmain&logo=stryker&logoColor=whitesmoke
+[img-coverage]: https://img.shields.io/endpoint?label=coverage&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fgout%2Fmain
 [link-firefox]: https://addons.mozilla.org/addon/gout/
 [link-build]: https://github.com/regseb/gout/actions/workflows/ci.yml?query=branch%3Amain
 [link-coverage]: https://dashboard.stryker-mutator.io/reports/github.com/regseb/gout/main
diff --git a/package-lock.json b/package-lock.json
index 679ae2d..8b593bc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,49 +7,47 @@
     "": {
       "name": "gout",
       "version": "0.11.0",
-      "hasInstallScript": true,
+      "funding": [
+        "https://buymeacoffee.com/regseb",
+        "https://www.paypal.me/sebastienregne"
+      ],
       "license": "MIT",
-      "dependencies": {
-        "webextension-polyfill": "0.10.0"
-      },
       "devDependencies": {
         "@prantlf/jsonlint": "14.0.3",
-        "@prettier/plugin-xml": "3.3.1",
+        "@prettier/plugin-xml": "3.4.1",
         "@stryker-mutator/core": "8.2.6",
         "@stryker-mutator/mocha-runner": "8.2.6",
+        "@types/eslint": "8.56.10",
         "@types/mocha": "10.0.6",
-        "addons-linter": "6.23.0",
+        "addons-linter": "6.28.0",
         "eslint": "8.57.0",
         "eslint-plugin-array-func": "4.0.0",
         "eslint-plugin-eslint-comments": "3.2.0",
         "eslint-plugin-import": "2.29.1",
-        "eslint-plugin-jsdoc": "48.2.0",
-        "eslint-plugin-mocha": "10.3.0",
-        "eslint-plugin-n": "16.6.2",
+        "eslint-plugin-jsdoc": "48.2.6",
+        "eslint-plugin-mocha": "10.4.3",
+        "eslint-plugin-n": "17.7.0",
         "eslint-plugin-no-unsanitized": "4.0.2",
-        "eslint-plugin-promise": "6.1.1",
-        "eslint-plugin-regexp": "2.2.0",
-        "eslint-plugin-unicorn": "51.0.1",
+        "eslint-plugin-promise": "6.2.0",
+        "eslint-plugin-regexp": "2.6.0",
+        "eslint-plugin-unicorn": "53.0.0",
         "htmlhint": "1.1.4",
         "http-server": "14.1.1",
-        "markdownlint": "0.33.0",
-        "metalint": "0.15.0",
-        "mocha": "10.3.0",
+        "markdownlint": "0.34.0",
+        "metalint": "0.17.0",
+        "mocha": "10.4.0",
         "npm-package-json-lint": "7.1.0",
         "prettier": "3.2.5",
-        "purgecss": "5.0.0",
-        "stylelint": "16.2.1",
+        "purgecss": "6.0.0",
+        "stylelint": "16.6.1",
         "stylelint-order": "6.0.4",
-        "typedoc": "0.25.11",
-        "typescript": "5.3.3",
-        "web-ext": "7.11.0",
+        "typedoc": "0.25.13",
+        "typescript": "5.4.5",
+        "web-ext": "8.0.0",
         "yaml-lint": "1.7.0"
       },
       "engines": {
         "node": ">=20.6.0"
-      },
-      "funding": {
-        "url": "https://www.paypal.me/sebastienregne"
       }
     },
     "node_modules/@aashutoshrathi/word-wrap": {
@@ -451,10 +449,11 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+      "version": "7.24.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
+      "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
@@ -696,12 +695,13 @@
       }
     },
     "node_modules/@babel/runtime": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz",
-      "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==",
+      "version": "7.24.6",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
+      "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "regenerator-runtime": "^0.13.11"
+        "regenerator-runtime": "^0.14.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -781,9 +781,9 @@
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz",
-      "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
+      "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
       "dev": true,
       "funding": [
         {
@@ -795,17 +795,18 @@
           "url": "https://opencollective.com/csstools"
         }
       ],
+      "license": "MIT",
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.2.3"
+        "@csstools/css-tokenizer": "^2.3.1"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz",
-      "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
+      "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
       "dev": true,
       "funding": [
         {
@@ -817,14 +818,15 @@
           "url": "https://opencollective.com/csstools"
         }
       ],
+      "license": "MIT",
       "engines": {
         "node": "^14 || ^16 || >=18"
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.7",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.7.tgz",
-      "integrity": "sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==",
+      "version": "2.1.11",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
+      "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
       "dev": true,
       "funding": [
         {
@@ -836,18 +838,19 @@
           "url": "https://opencollective.com/csstools"
         }
       ],
+      "license": "MIT",
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.5.0",
-        "@csstools/css-tokenizer": "^2.2.3"
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       }
     },
     "node_modules/@csstools/selector-specificity": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz",
-      "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
+      "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
       "dev": true,
       "funding": [
         {
@@ -859,6 +862,7 @@
           "url": "https://opencollective.com/csstools"
         }
       ],
+      "license": "MIT-0",
       "engines": {
         "node": "^14 || ^16 || >=18"
       },
@@ -867,13 +871,14 @@
       }
     },
     "node_modules/@devicefarmer/adbkit": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-3.2.3.tgz",
-      "integrity": "sha512-wK9rVrabs4QU0oK8Jnwi+HRBEm+s1x/o63kgthUe0y7K1bfcYmgLuQf41/adsj/5enddlSxzkJavl2EwOu+r1g==",
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-3.2.6.tgz",
+      "integrity": "sha512-8lO1hSeTgtxcOHhp4tTWq/JaOysp5KNbbyFoxNEBnwkCDZu/Bji3ZfOaG++Riv9jN6c9bgdLBOZqJTC5VJPRKQ==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "@devicefarmer/adbkit-logcat": "^2.1.2",
-        "@devicefarmer/adbkit-monkey": "~1.2.0",
+        "@devicefarmer/adbkit-monkey": "~1.2.1",
         "bluebird": "~3.7",
         "commander": "^9.1.0",
         "debug": "~4.3.1",
@@ -892,6 +897,7 @@
       "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-2.1.3.tgz",
       "integrity": "sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
         "node": ">= 4"
       }
@@ -901,6 +907,7 @@
       "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.2.1.tgz",
       "integrity": "sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
         "node": ">= 0.10.4"
       }
@@ -910,16 +917,32 @@
       "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
       "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || >=14"
       }
     },
+    "node_modules/@dual-bundle/import-meta-resolve": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
+      "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz",
-      "integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==",
+      "version": "0.43.0",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.0.tgz",
+      "integrity": "sha512-Q1CnsQrytI3TlCB1IVWXWeqUIPGVEKGaE7IbVdt13Nq/3i0JESAkQQERrfiQkmlpijl+++qyqPgaS31Bvc1jRQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
+        "@types/eslint": "^8.56.5",
+        "@types/estree": "^1.0.5",
+        "@typescript-eslint/types": "^7.2.0",
         "comment-parser": "1.4.1",
         "esquery": "^1.5.0",
         "jsdoc-type-pratt-parser": "~4.0.0"
@@ -1277,10 +1300,11 @@
       }
     },
     "node_modules/@mdn/browser-compat-data": {
-      "version": "5.5.11",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.11.tgz",
-      "integrity": "sha512-4o1ZaGmvqoDx3QLyEAcZvGDKmdVXLB0aiANuPDumgue/7iH67KUBsKejLX7wrdxEdyNYfXUKtjFQYhGwVUBXGw==",
-      "dev": true
+      "version": "5.5.29",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.29.tgz",
+      "integrity": "sha512-NHdG3QOiAsxh8ygBSKMa/WaNJwpNt87uVqW+S2RlnSqgeRdk+L3foNWTX6qd0I3NHSlCFb47rgopeNCJtRDY5A==",
+      "dev": true,
+      "license": "CC0-1.0"
     },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
@@ -1388,10 +1412,11 @@
       }
     },
     "node_modules/@prettier/plugin-xml": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.3.1.tgz",
-      "integrity": "sha512-kllNJk6n2pXJjGWdj+HAr1GhOoOTrlmeWkDYCGBzkyZS2l0K6h2gsUQcVif2cNqAE1MNC+nUrzN6QwEsCukPnQ==",
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.4.1.tgz",
+      "integrity": "sha512-Uf/6/+9ez6z/IvZErgobZ2G9n1ybxF5BhCd7eMcKqfoWuOzzNUxBipNo3QAP8kRC1VD18TIo84no7LhqtyDcTg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@xml-tools/parser": "^1.0.11"
       },
@@ -1525,12 +1550,35 @@
         "node": ">=14.16"
       }
     },
+    "node_modules/@types/eslint": {
+      "version": "8.56.10",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
+      "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+      "dev": true
+    },
     "node_modules/@types/http-cache-semantics": {
       "version": "4.0.4",
       "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
       "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
       "dev": true
     },
+    "node_modules/@types/json-schema": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+      "dev": true
+    },
     "node_modules/@types/json5": {
       "version": "0.0.29",
       "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -1579,6 +1627,20 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@typescript-eslint/types": {
+      "version": "7.9.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz",
+      "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || >=20.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
     "node_modules/@ungap/structured-clone": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
@@ -1628,16 +1690,17 @@
       }
     },
     "node_modules/addons-linter": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.23.0.tgz",
-      "integrity": "sha512-yFI1fe/c0hkgcWwq6MerWAcDU/CG/NKzQlWxgjQDruMOezs0vyD2fCzapNZt2vxsyNLuDp54q9gNL/85ypYZ/g==",
+      "version": "6.28.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.28.0.tgz",
+      "integrity": "sha512-fCTjXL/yG4hwq74JG8tQdrvEu0OvGrEN9yU+Df0020RDtHl3g/tTCyMeC4G1uyk8IuyMzp4myCBNnOGC7MWSQQ==",
       "dev": true,
+      "license": "MPL-2.0",
       "dependencies": {
         "@fluent/syntax": "0.19.0",
-        "@mdn/browser-compat-data": "5.5.11",
+        "@mdn/browser-compat-data": "5.5.29",
         "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "9.9.0",
-        "ajv": "8.12.0",
+        "addons-scanner-utils": "9.10.1",
+        "ajv": "8.13.0",
         "chalk": "4.1.2",
         "cheerio": "1.0.0-rc.12",
         "columnify": "1.6.0",
@@ -1649,22 +1712,21 @@
         "espree": "10.0.1",
         "esprima": "4.0.1",
         "fast-json-patch": "3.1.1",
-        "glob": "10.3.10",
+        "glob": "10.4.1",
         "image-size": "1.1.1",
         "is-mergeable-object": "1.1.1",
         "jed": "1.1.1",
         "json-merge-patch": "1.0.2",
         "os-locale": "5.0.0",
-        "pino": "8.19.0",
-        "postcss": "8.4.35",
+        "pino": "8.20.0",
         "relaxed-json": "1.0.3",
-        "semver": "7.6.0",
+        "semver": "7.6.2",
         "sha.js": "2.4.11",
         "source-map-support": "0.5.21",
         "tosource": "1.0.0",
         "upath": "2.0.1",
         "yargs": "17.7.2",
-        "yauzl": "3.1.0"
+        "yauzl": "2.10.0"
       },
       "bin": {
         "addons-linter": "bin/addons-linter"
@@ -1673,6 +1735,57 @@
         "node": ">=16.0.0"
       }
     },
+    "node_modules/addons-linter/node_modules/addons-scanner-utils": {
+      "version": "9.10.1",
+      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.10.1.tgz",
+      "integrity": "sha512-Tz9OUQx9Ja0TyQ+H2GakB9KlJ50myI6ESBGRlA8N80nHBzMjjPRFGm0APADSaCd5NP74SrFtEvL4TRpDwZXETA==",
+      "dev": true,
+      "dependencies": {
+        "@types/yauzl": "2.10.3",
+        "common-tags": "1.8.2",
+        "first-chunk-stream": "3.0.0",
+        "strip-bom-stream": "4.0.0",
+        "upath": "2.0.1",
+        "yauzl": "2.10.0"
+      },
+      "peerDependencies": {
+        "body-parser": "1.20.2",
+        "express": "4.18.3",
+        "node-fetch": "2.6.11",
+        "safe-compare": "1.1.4"
+      },
+      "peerDependenciesMeta": {
+        "body-parser": {
+          "optional": true
+        },
+        "express": {
+          "optional": true
+        },
+        "node-fetch": {
+          "optional": true
+        },
+        "safe-compare": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/addons-linter/node_modules/ajv": {
+      "version": "8.13.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
+      "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2",
+        "uri-js": "^4.4.1"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
     "node_modules/addons-linter/node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -1718,29 +1831,58 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/addons-linter/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+    "node_modules/addons-linter/node_modules/glob": {
+      "version": "10.4.1",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz",
+      "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
-        "has-flag": "^4.0.0"
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/addons-linter/node_modules/yauzl": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.0.tgz",
-      "integrity": "sha512-zbff6SaAPyewVextulqeBjJm+1ZhS69vSN7cRpqVD7jMNSE9oXEdQ1SGF+ydfB+gKE2a3GiWfXf/pnwVZ1/tOA==",
+    "node_modules/addons-linter/node_modules/jackspeak": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz",
+      "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==",
       "dev": true,
+      "license": "BlueOak-1.0.0",
       "dependencies": {
-        "buffer-crc32": "~0.2.3",
-        "pend": "~1.2.0"
+        "@isaacs/cliui": "^8.0.2"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/addons-linter/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/addons-moz-compare": {
@@ -1749,47 +1891,27 @@
       "integrity": "sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==",
       "dev": true
     },
-    "node_modules/addons-scanner-utils": {
-      "version": "9.9.0",
-      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.9.0.tgz",
-      "integrity": "sha512-YDP10U3sEZMuIgnjXMiAYgUU64jTbxmhpUXMlhi1nKO4Etz+ctGWoTUst7IQRoLWaY9y2r1KZDG3jALxLA1n7Q==",
+    "node_modules/adm-zip": {
+      "version": "0.5.12",
+      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.12.tgz",
+      "integrity": "sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==",
       "dev": true,
-      "dependencies": {
-        "@types/yauzl": "2.10.3",
-        "common-tags": "1.8.2",
-        "first-chunk-stream": "3.0.0",
-        "strip-bom-stream": "4.0.0",
-        "upath": "2.0.1",
-        "yauzl": "2.10.0"
-      },
-      "peerDependencies": {
-        "body-parser": "1.20.2",
-        "express": "4.18.2",
-        "node-fetch": "2.6.11",
-        "safe-compare": "1.1.4"
-      },
-      "peerDependenciesMeta": {
-        "body-parser": {
-          "optional": true
-        },
-        "express": {
-          "optional": true
-        },
-        "node-fetch": {
-          "optional": true
-        },
-        "safe-compare": {
-          "optional": true
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0"
       }
     },
-    "node_modules/adm-zip": {
-      "version": "0.5.10",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz",
-      "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==",
+    "node_modules/agent-base": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+      "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
       "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^4.3.4"
+      },
       "engines": {
-        "node": ">=6.0"
+        "node": ">= 14"
       }
     },
     "node_modules/ajv": {
@@ -1910,7 +2032,8 @@
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
       "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/anymatch": {
       "version": "3.1.3",
@@ -2078,29 +2201,12 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/asn1": {
-      "version": "0.2.6",
-      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
-      "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
-      "dev": true,
-      "dependencies": {
-        "safer-buffer": "~2.1.0"
-      }
-    },
-    "node_modules/assert-plus": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
     "node_modules/astral-regex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
       "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -2111,17 +2217,12 @@
       "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
       "dev": true
     },
-    "node_modules/asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
-      "dev": true
-    },
     "node_modules/at-least-node": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
       "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">= 4.0.0"
       }
@@ -2147,21 +2248,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/aws-sign2": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/aws4": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
-      "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
-      "dev": true
-    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -2200,13 +2286,14 @@
         "node": ">= 0.8"
       }
     },
-    "node_modules/bcrypt-pbkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-      "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+    "node_modules/big-integer": {
+      "version": "1.6.52",
+      "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+      "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
       "dev": true,
-      "dependencies": {
-        "tweetnacl": "^0.14.3"
+      "license": "Unlicense",
+      "engines": {
+        "node": ">=0.6"
       }
     },
     "node_modules/binary-extensions": {
@@ -2233,7 +2320,8 @@
       "version": "3.7.2",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
       "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/boolbase": {
       "version": "1.0.0",
@@ -2366,6 +2454,19 @@
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
+    "node_modules/bplist-parser": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
+      "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "big-integer": "^1.6.44"
+      },
+      "engines": {
+        "node": ">= 5.10.0"
+      }
+    },
     "node_modules/brace-expansion": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -2376,12 +2477,13 @@
       }
     },
     "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "fill-range": "^7.0.1"
+        "fill-range": "^7.1.1"
       },
       "engines": {
         "node": ">=8"
@@ -2394,9 +2496,9 @@
       "dev": true
     },
     "node_modules/browserslist": {
-      "version": "4.22.2",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
-      "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
+      "version": "4.23.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+      "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
       "dev": true,
       "funding": [
         {
@@ -2412,9 +2514,10 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001565",
-        "electron-to-chromium": "^1.4.601",
+        "caniuse-lite": "^1.0.30001587",
+        "electron-to-chromium": "^1.4.668",
         "node-releases": "^2.0.14",
         "update-browserslist-db": "^1.0.13"
       },
@@ -2458,12 +2561,6 @@
         "node": "*"
       }
     },
-    "node_modules/buffer-equal-constant-time": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
-      "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
-      "dev": true
-    },
     "node_modules/buffer-from": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -2491,6 +2588,22 @@
         "semver": "^7.0.0"
       }
     },
+    "node_modules/bundle-name": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
+      "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "run-applescript": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/bunyan": {
       "version": "1.8.15",
       "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
@@ -2598,9 +2711,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001576",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz",
-      "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==",
+      "version": "1.0.30001620",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz",
+      "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==",
       "dev": true,
       "funding": [
         {
@@ -2615,13 +2728,8 @@
           "type": "github",
           "url": "https://github.com/sponsors/ai"
         }
-      ]
-    },
-    "node_modules/caseless": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
-      "dev": true
+      ],
+      "license": "CC-BY-4.0"
     },
     "node_modules/chalk": {
       "version": "5.3.0",
@@ -2903,18 +3011,6 @@
         "node": ">=8.0.0"
       }
     },
-    "node_modules/combined-stream": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "dev": true,
-      "dependencies": {
-        "delayed-stream": "~1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
     "node_modules/commander": {
       "version": "12.0.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz",
@@ -3052,24 +3148,14 @@
       "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
       "dev": true
     },
-    "node_modules/core-js": {
-      "version": "3.29.0",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz",
-      "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==",
-      "dev": true,
-      "hasInstallScript": true,
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/core-js"
-      }
-    },
     "node_modules/core-js-compat": {
-      "version": "3.35.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz",
-      "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==",
+      "version": "3.37.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+      "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.22.2"
+        "browserslist": "^4.23.0"
       },
       "funding": {
         "type": "opencollective",
@@ -3151,10 +3237,11 @@
       }
     },
     "node_modules/css-functions-list": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz",
-      "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
+      "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12 || >=16"
       }
@@ -3212,23 +3299,12 @@
         "node": ">=4"
       }
     },
-    "node_modules/dashdash": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-      "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
-      "dev": true,
-      "dependencies": {
-        "assert-plus": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
     "node_modules/data-uri-to-buffer": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
       "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 12"
       }
@@ -3341,15 +3417,6 @@
       "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
       "dev": true
     },
-    "node_modules/deepcopy": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz",
-      "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==",
-      "dev": true,
-      "dependencies": {
-        "type-detect": "^4.0.8"
-      }
-    },
     "node_modules/deepmerge": {
       "version": "4.3.1",
       "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
@@ -3359,6 +3426,96 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/default-browser": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz",
+      "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bundle-name": "^3.0.0",
+        "default-browser-id": "^3.0.0",
+        "execa": "^7.1.1",
+        "titleize": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/default-browser-id": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
+      "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bplist-parser": "^0.2.0",
+        "untildify": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/default-browser/node_modules/execa": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz",
+      "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.1",
+        "human-signals": "^4.3.0",
+        "is-stream": "^3.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^5.1.0",
+        "onetime": "^6.0.0",
+        "signal-exit": "^3.0.7",
+        "strip-final-newline": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/default-browser/node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/default-browser/node_modules/human-signals": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
+      "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=14.18.0"
+      }
+    },
+    "node_modules/default-browser/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/defaults": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
@@ -3395,12 +3552,16 @@
       }
     },
     "node_modules/define-lazy-prop": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
-      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/define-properties": {
@@ -3420,15 +3581,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/diff": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
@@ -3558,30 +3710,12 @@
       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
       "dev": true
     },
-    "node_modules/ecc-jsbn": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
-      "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
-      "dev": true,
-      "dependencies": {
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.1.0"
-      }
-    },
-    "node_modules/ecdsa-sig-formatter": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
-      "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "^5.0.1"
-      }
-    },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.623",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz",
-      "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==",
-      "dev": true
+      "version": "1.4.774",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz",
+      "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/emoji-regex": {
       "version": "10.3.0",
@@ -3598,6 +3732,20 @@
         "once": "^1.4.0"
       }
     },
+    "node_modules/enhanced-resolve": {
+      "version": "5.16.1",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
+      "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
     "node_modules/entities": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -3725,16 +3873,8 @@
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
       "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
-      "dev": true
-    },
-    "node_modules/es6-promisify": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz",
-      "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==",
       "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
+      "license": "MIT"
     },
     "node_modules/escalade": {
       "version": "3.1.1",
@@ -4026,19 +4166,19 @@
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
-      "version": "48.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.0.tgz",
-      "integrity": "sha512-O2B1XLBJnUCRkggFzUQ+PBYJDit8iAgXdlu8ucolqGrbmOWPvttZQZX8d1sC0MbqDMSLs8SHSQxaNPRY1RQREg==",
+      "version": "48.2.6",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.6.tgz",
+      "integrity": "sha512-GNk9jtpYmoEVeD/U6yYYmd6T8vSOoPs7CL8ZeX85iD8P3qifDdLQGze6+cw9boobDthmYnnxvIoHrhuSffj09g==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.42.0",
+        "@es-joy/jsdoccomment": "~0.43.0",
         "are-docs-informative": "^0.0.2",
         "comment-parser": "1.4.1",
         "debug": "^4.3.4",
         "escape-string-regexp": "^4.0.0",
         "esquery": "^1.5.0",
-        "is-builtin-module": "^3.2.1",
-        "semver": "^7.6.0",
+        "semver": "^7.6.1",
         "spdx-expression-parse": "^4.0.0"
       },
       "engines": {
@@ -4049,12 +4189,14 @@
       }
     },
     "node_modules/eslint-plugin-mocha": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.3.0.tgz",
-      "integrity": "sha512-IWzbg2K6B1Q7h37Ih4zMyW+nhmw1JvUlHlbCUUUu6PfOOAUGCB0gxmvv7/U+TQQ6e8yHUv+q7KMdIIum4bx+PA==",
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.3.tgz",
+      "integrity": "sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "eslint-utils": "^3.0.0",
+        "globals": "^13.24.0",
         "rambda": "^7.4.0"
       },
       "engines": {
@@ -4064,78 +4206,67 @@
         "eslint": ">=7.0.0"
       }
     },
-    "node_modules/eslint-plugin-n": {
-      "version": "16.6.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
-      "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
+    "node_modules/eslint-plugin-mocha/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
       "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "builtins": "^5.0.1",
-        "eslint-plugin-es-x": "^7.5.0",
-        "get-tsconfig": "^4.7.0",
-        "globals": "^13.24.0",
-        "ignore": "^5.2.4",
-        "is-builtin-module": "^3.2.1",
-        "is-core-module": "^2.12.1",
-        "minimatch": "^3.1.2",
-        "resolve": "^1.22.2",
-        "semver": "^7.5.3"
+        "type-fest": "^0.20.2"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=8"
       },
       "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=7.0.0"
-      }
-    },
-    "node_modules/eslint-plugin-n/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/eslint-plugin-n/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+    "node_modules/eslint-plugin-mocha/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
       "dev": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/eslint-plugin-n/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/eslint-plugin-n": {
+      "version": "17.7.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.7.0.tgz",
+      "integrity": "sha512-4Jg4ZKVE4VjHig2caBqPHYNW5na84RVufUuipFLJbgM/G57O6FdpUKJbHakCDJb/yjQuyqVzYWRtU3HNYaZUwg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "enhanced-resolve": "^5.15.0",
+        "eslint-plugin-es-x": "^7.5.0",
+        "get-tsconfig": "^4.7.0",
+        "globals": "^15.0.0",
+        "ignore": "^5.2.4",
+        "minimatch": "^9.0.0",
+        "semver": "^7.5.3"
       },
       "engines": {
-        "node": "*"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      },
+      "peerDependencies": {
+        "eslint": ">=8.23.0"
       }
     },
-    "node_modules/eslint-plugin-n/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+    "node_modules/eslint-plugin-n/node_modules/globals": {
+      "version": "15.2.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-15.2.0.tgz",
+      "integrity": "sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -4151,22 +4282,27 @@
       }
     },
     "node_modules/eslint-plugin-promise": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
-      "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz",
+      "integrity": "sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      },
       "peerDependencies": {
-        "eslint": "^7.0.0 || ^8.0.0"
+        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
       }
     },
     "node_modules/eslint-plugin-regexp": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.2.0.tgz",
-      "integrity": "sha512-0kwpiWiLRVBkVr3oIRQLl196sXP/NF6DQFefv9jtR4ZOgQR+6WID2pIZ0I+wIt54qgBPwBB7Gm2a+ueh8/WsFQ==",
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.6.0.tgz",
+      "integrity": "sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.9.1",
@@ -4184,17 +4320,18 @@
       }
     },
     "node_modules/eslint-plugin-unicorn": {
-      "version": "51.0.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz",
-      "integrity": "sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==",
+      "version": "53.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz",
+      "integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-validator-identifier": "^7.24.5",
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/eslintrc": "^3.0.2",
         "ci-info": "^4.0.0",
         "clean-regexp": "^1.0.0",
-        "core-js-compat": "^3.34.0",
+        "core-js-compat": "^3.37.0",
         "esquery": "^1.5.0",
         "indent-string": "^4.0.0",
         "is-builtin-module": "^3.2.1",
@@ -4203,11 +4340,11 @@
         "read-pkg-up": "^7.0.1",
         "regexp-tree": "^0.1.27",
         "regjsparser": "^0.10.0",
-        "semver": "^7.5.4",
+        "semver": "^7.6.1",
         "strip-indent": "^3.0.0"
       },
       "engines": {
-        "node": ">=16"
+        "node": ">=18.18"
       },
       "funding": {
         "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
@@ -4216,61 +4353,177 @@
         "eslint": ">=8.56.0"
       }
     },
-    "node_modules/eslint-plugin-unicorn/node_modules/jsesc": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
-      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+    "node_modules/eslint-plugin-unicorn/node_modules/@eslint/eslintrc": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+    "node_modules/eslint-plugin-unicorn/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
-      "engines": {
-        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       },
       "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=5"
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+    "node_modules/eslint-plugin-unicorn/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint-plugin-unicorn/node_modules/espree": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz",
+      "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.11.3",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.0.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint-plugin-unicorn/node_modules/globals": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint-plugin-unicorn/node_modules/jsesc": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+      "dev": true,
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/eslint-plugin-unicorn/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/eslint-plugin-unicorn/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/eslint-scope": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "dev": true,
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint-utils": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+      "dev": true,
+      "dependencies": {
+        "eslint-visitor-keys": "^2.0.0"
+      },
+      "engines": {
+        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mysticatea"
+      },
+      "peerDependencies": {
+        "eslint": ">=5"
+      }
+    },
+    "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/eslint-visitor-keys": {
       "version": "3.4.3",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -4501,12 +4754,6 @@
         "url": "https://github.com/sindresorhus/execa?sponsor=1"
       }
     },
-    "node_modules/extend": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
-      "dev": true
-    },
     "node_modules/external-editor": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@@ -4521,15 +4768,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/extsprintf": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
-      "dev": true,
-      "engines": [
-        "node >=0.6.0"
-      ]
-    },
     "node_modules/fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -4633,6 +4871,7 @@
           "url": "https://paypal.me/jimmywarting"
         }
       ],
+      "license": "MIT",
       "dependencies": {
         "node-domexception": "^1.0.0",
         "web-streams-polyfill": "^3.0.3"
@@ -4690,10 +4929,11 @@
       }
     },
     "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "to-regex-range": "^5.0.1"
       },
@@ -4718,10 +4958,11 @@
       }
     },
     "node_modules/firefox-profile": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.3.2.tgz",
-      "integrity": "sha512-/C+Eqa0YgIsQT2p66p7Ygzqe7NlE/GNTbhw2SBCm5V3OsWDPITNdTPEcH2Q2fe7eMpYYNPKdUcuVioZBZiR6kA==",
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.6.0.tgz",
+      "integrity": "sha512-I9rAm1w8U3CdhgO4EzTJsCvgcbvynZn9lOySkZf78wUdUIQH2w9QOKf3pAX+THt2XMSSR3kJSuM8P7bYux9j8g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "adm-zip": "~0.5.x",
         "fs-extra": "~9.0.1",
@@ -4738,6 +4979,7 @@
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
       "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "at-least-node": "^1.0.0",
         "graceful-fs": "^4.2.0",
@@ -4753,6 +4995,7 @@
       "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
       "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">=10"
       }
@@ -4762,6 +5005,7 @@
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
       "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "universalify": "^2.0.0"
       },
@@ -4774,6 +5018,7 @@
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
       "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 10.0.0"
       }
@@ -4783,6 +5028,7 @@
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
       "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 10.0.0"
       }
@@ -4820,15 +5066,16 @@
       }
     },
     "node_modules/flatted": {
-      "version": "3.2.9",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
-      "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
-      "dev": true
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+      "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.4",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
-      "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
+      "version": "1.15.6",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+      "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
       "dev": true,
       "funding": [
         {
@@ -4836,6 +5083,7 @@
           "url": "https://github.com/sponsors/RubenVerborgh"
         }
       ],
+      "license": "MIT",
       "engines": {
         "node": ">=4.0"
       },
@@ -4870,29 +5118,6 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/forever-agent": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/form-data": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
-      "dev": true,
-      "dependencies": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.6",
-        "mime-types": "^2.1.12"
-      },
-      "engines": {
-        "node": ">= 0.12"
-      }
-    },
     "node_modules/form-data-encoder": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz",
@@ -4907,6 +5132,7 @@
       "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
       "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "fetch-blob": "^3.1.2"
       },
@@ -4934,20 +5160,6 @@
       "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
       "dev": true
     },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
     "node_modules/function-bind": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -5117,15 +5329,6 @@
         "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
       }
     },
-    "node_modules/getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
-      "dev": true,
-      "dependencies": {
-        "assert-plus": "^1.0.0"
-      }
-    },
     "node_modules/glob": {
       "version": "10.3.10",
       "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
@@ -5164,7 +5367,8 @@
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
       "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-2-Clause"
     },
     "node_modules/global-dirs": {
       "version": "3.0.1",
@@ -5351,51 +5555,6 @@
       "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
       "dev": true
     },
-    "node_modules/har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/har-validator": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
-      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
-      "deprecated": "this library is no longer supported",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.12.3",
-        "har-schema": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/har-validator/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/har-validator/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
     "node_modules/hard-rejection": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
@@ -5762,21 +5921,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-      "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
-      "dev": true,
-      "dependencies": {
-        "assert-plus": "^1.0.0",
-        "jsprim": "^1.2.2",
-        "sshpk": "^1.7.0"
-      },
-      "engines": {
-        "node": ">=0.8",
-        "npm": ">=1.3.7"
-      }
-    },
     "node_modules/http2-wrapper": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
@@ -5802,6 +5946,20 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/https-proxy-agent": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
+      "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "agent-base": "^7.0.2",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
     "node_modules/human-signals": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
@@ -5844,10 +6002,11 @@
       ]
     },
     "node_modules/ignore": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
-      "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 4"
       }
@@ -6197,6 +6356,41 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-inside-container": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+      "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-docker": "^3.0.0"
+      },
+      "bin": {
+        "is-inside-container": "cli.js"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-inside-container/node_modules/is-docker": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+      "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/is-installed-globally": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
@@ -6257,6 +6451,7 @@
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.12.0"
       }
@@ -6478,12 +6673,6 @@
       "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
       "dev": true
     },
-    "node_modules/isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
-      "dev": true
-    },
     "node_modules/jackspeak": {
       "version": "2.3.6",
       "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
@@ -6509,10 +6698,11 @@
       "dev": true
     },
     "node_modules/jose": {
-      "version": "4.13.1",
-      "resolved": "https://registry.npmjs.org/jose/-/jose-4.13.1.tgz",
-      "integrity": "sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==",
+      "version": "4.15.5",
+      "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.5.tgz",
+      "integrity": "sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==",
       "dev": true,
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/panva"
       }
@@ -6535,12 +6725,6 @@
         "js-yaml": "bin/js-yaml.js"
       }
     },
-    "node_modules/jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
-      "dev": true
-    },
     "node_modules/jsdoc-type-pratt-parser": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
@@ -6583,12 +6767,6 @@
       "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
       "dev": true
     },
-    "node_modules/json-schema": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
-      "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
-      "dev": true
-    },
     "node_modules/json-schema-traverse": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
@@ -6601,12 +6779,6 @@
       "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
       "dev": true
     },
-    "node_modules/json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
-      "dev": true
-    },
     "node_modules/json5": {
       "version": "2.2.3",
       "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -6634,37 +6806,6 @@
         "graceful-fs": "^4.1.6"
       }
     },
-    "node_modules/jsonwebtoken": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
-      "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
-      "dev": true,
-      "dependencies": {
-        "jws": "^3.2.2",
-        "lodash": "^4.17.21",
-        "ms": "^2.1.1",
-        "semver": "^7.3.8"
-      },
-      "engines": {
-        "node": ">=12",
-        "npm": ">=6"
-      }
-    },
-    "node_modules/jsprim": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
-      "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
-      "dev": true,
-      "dependencies": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.4.0",
-        "verror": "1.10.0"
-      },
-      "engines": {
-        "node": ">=0.6.0"
-      }
-    },
     "node_modules/jszip": {
       "version": "3.10.1",
       "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
@@ -6707,27 +6848,6 @@
         "safe-buffer": "~5.1.0"
       }
     },
-    "node_modules/jwa": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
-      "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
-      "dev": true,
-      "dependencies": {
-        "buffer-equal-constant-time": "1.0.1",
-        "ecdsa-sig-formatter": "1.0.11",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "node_modules/jws": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
-      "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
-      "dev": true,
-      "dependencies": {
-        "jwa": "^1.4.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
     "node_modules/keyv": {
       "version": "4.5.4",
       "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -6747,10 +6867,11 @@
       }
     },
     "node_modules/known-css-properties": {
-      "version": "0.29.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
-      "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
-      "dev": true
+      "version": "0.31.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz",
+      "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/latest-version": {
       "version": "7.0.0",
@@ -6837,6 +6958,7 @@
       "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
       "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "uc.micro": "^2.0.0"
       }
@@ -6878,7 +7000,8 @@
       "version": "4.4.2",
       "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
       "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/log-symbols": {
       "version": "4.1.0",
@@ -6998,30 +7121,32 @@
       }
     },
     "node_modules/markdown-it": {
-      "version": "14.0.0",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz",
-      "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==",
+      "version": "14.1.0",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+      "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "argparse": "^2.0.1",
         "entities": "^4.4.0",
         "linkify-it": "^5.0.0",
         "mdurl": "^2.0.0",
         "punycode.js": "^2.3.1",
-        "uc.micro": "^2.0.0"
+        "uc.micro": "^2.1.0"
       },
       "bin": {
         "markdown-it": "bin/markdown-it.mjs"
       }
     },
     "node_modules/markdownlint": {
-      "version": "0.33.0",
-      "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.33.0.tgz",
-      "integrity": "sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==",
+      "version": "0.34.0",
+      "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.34.0.tgz",
+      "integrity": "sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "markdown-it": "14.0.0",
-        "markdownlint-micromark": "0.1.8"
+        "markdown-it": "14.1.0",
+        "markdownlint-micromark": "0.1.9"
       },
       "engines": {
         "node": ">=18"
@@ -7031,12 +7156,13 @@
       }
     },
     "node_modules/markdownlint-micromark": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.8.tgz",
-      "integrity": "sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==",
+      "version": "0.1.9",
+      "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.9.tgz",
+      "integrity": "sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/DavidAnson"
@@ -7080,7 +7206,8 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
       "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/mem": {
       "version": "5.1.1",
@@ -7159,10 +7286,15 @@
       }
     },
     "node_modules/metalint": {
-      "version": "0.15.0",
-      "resolved": "https://registry.npmjs.org/metalint/-/metalint-0.15.0.tgz",
-      "integrity": "sha512-U4RTfBedIIP1gJp+BLyg+gkwqfRLTFFi9El/2tkKqBgi5dLlUr9FFrj47JrTHNBqSru7DuJYth+PZS/g6zIoRA==",
+      "version": "0.17.0",
+      "resolved": "https://registry.npmjs.org/metalint/-/metalint-0.17.0.tgz",
+      "integrity": "sha512-j76R59x8wfI9y1j80WtAdknJJntysTs5ddaljFMHQL36R2Xkp9CLAUhfPwYhxOeas/Tjde8uW+pdOz2PqhHwMw==",
       "dev": true,
+      "funding": [
+        "https://buymeacoffee.com/regseb",
+        "https://www.paypal.me/sebastienregne"
+      ],
+      "license": "MIT",
       "dependencies": {
         "chalk": "5.3.0",
         "yargs": "17.7.2"
@@ -7172,18 +7304,16 @@
       },
       "engines": {
         "node": ">=20.6.0"
-      },
-      "funding": {
-        "url": "https://www.paypal.me/sebastienregne"
       }
     },
     "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+      "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "braces": "^3.0.2",
+        "braces": "^3.0.3",
         "picomatch": "^2.3.1"
       },
       "engines": {
@@ -7202,27 +7332,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
-      "dependencies": {
-        "mime-db": "1.52.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
     "node_modules/mimic-fn": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
@@ -7257,10 +7366,11 @@
       }
     },
     "node_modules/minimatch": {
-      "version": "9.0.3",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
-      "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+      "version": "9.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
+      "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^2.0.1"
       },
@@ -7304,10 +7414,11 @@
       }
     },
     "node_modules/minipass": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
-      "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">=16 || 14 >=14.17"
       }
@@ -7325,10 +7436,11 @@
       }
     },
     "node_modules/mocha": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz",
-      "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==",
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz",
+      "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-colors": "4.1.1",
         "browser-stdout": "1.3.1",
@@ -7623,6 +7735,7 @@
       "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
       "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "any-promise": "^1.0.0",
         "object-assign": "^4.0.1",
@@ -7755,6 +7868,7 @@
           "url": "https://paypal.me/jimmywarting"
         }
       ],
+      "license": "MIT",
       "engines": {
         "node": ">=10.5.0"
       }
@@ -7784,6 +7898,7 @@
       "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
       "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
       "dev": true,
+      "license": "(BSD-3-Clause OR GPL-2.0)",
       "engines": {
         "node": ">= 6.13.0"
       }
@@ -8003,20 +8118,12 @@
         "url": "https://github.com/fb55/nth-check?sponsor=1"
       }
     },
-    "node_modules/oauth-sign": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
       "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -8137,17 +8244,19 @@
       }
     },
     "node_modules/open": {
-      "version": "8.4.2",
-      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
-      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz",
+      "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "define-lazy-prop": "^2.0.0",
-        "is-docker": "^2.1.1",
+        "default-browser": "^4.0.0",
+        "define-lazy-prop": "^3.0.0",
+        "is-inside-container": "^1.0.0",
         "is-wsl": "^2.2.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=14.16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -8554,26 +8663,28 @@
       "dev": true
     },
     "node_modules/path-scurry": {
-      "version": "1.10.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
-      "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
       "dev": true,
+      "license": "BlueOak-1.0.0",
       "dependencies": {
-        "lru-cache": "^9.1.1 || ^10.0.0",
+        "lru-cache": "^10.2.0",
         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=16 || 14 >=14.18"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/path-scurry/node_modules/lru-cache": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
-      "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+      "version": "10.2.2",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+      "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": "14 || >=16.14"
       }
@@ -8593,17 +8704,12 @@
       "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
       "dev": true
     },
-    "node_modules/performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
-      "dev": true
-    },
     "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-      "dev": true
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/picomatch": {
       "version": "2.3.1",
@@ -8618,15 +8724,16 @@
       }
     },
     "node_modules/pino": {
-      "version": "8.19.0",
-      "resolved": "https://registry.npmjs.org/pino/-/pino-8.19.0.tgz",
-      "integrity": "sha512-oswmokxkav9bADfJ2ifrvfHUwad6MLp73Uat0IkQWY3iAw5xTRoznXbXksZs8oaOUMpmhVWD+PZogNzllWpJaA==",
+      "version": "8.20.0",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz",
+      "integrity": "sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "atomic-sleep": "^1.0.0",
         "fast-redact": "^3.1.1",
         "on-exit-leak-free": "^2.1.0",
-        "pino-abstract-transport": "v1.1.0",
+        "pino-abstract-transport": "^1.1.0",
         "pino-std-serializers": "^6.0.0",
         "process-warning": "^3.0.0",
         "quick-format-unescaped": "^4.0.3",
@@ -8752,9 +8859,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.35",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
-      "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+      "version": "8.4.38",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+      "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
       "dev": true,
       "funding": [
         {
@@ -8770,10 +8877,11 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "dependencies": {
         "nanoid": "^3.3.7",
         "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2"
+        "source-map-js": "^1.2.0"
       },
       "engines": {
         "node": "^10 || ^12 || >=14"
@@ -8812,10 +8920,11 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.0.15",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
-      "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+      "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "cssesc": "^3.0.0",
         "util-deprecate": "^1.0.2"
@@ -8911,12 +9020,6 @@
       "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
       "dev": true
     },
-    "node_modules/psl": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
-      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
-      "dev": true
-    },
     "node_modules/pump": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -8941,6 +9044,7 @@
       "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
       "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -8961,13 +9065,14 @@
       }
     },
     "node_modules/purgecss": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-5.0.0.tgz",
-      "integrity": "sha512-RAnuxrGuVyLLTr8uMbKaxDRGWMgK5CCYDfRyUNNcaz5P3kGgD2b7ymQGYEyo2ST7Tl/ScwFgf5l3slKMxHSbrw==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-6.0.0.tgz",
+      "integrity": "sha512-s3EBxg5RSWmpqd0KGzNqPiaBbWDz1/As+2MzoYVGMqgDqRTLBhJW6sywfTBek7OwNfoS/6pS0xdtvChNhFj2cw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "commander": "^9.0.0",
-        "glob": "^8.0.3",
+        "commander": "^12.0.0",
+        "glob": "^10.3.10",
         "postcss": "^8.4.4",
         "postcss-selector-parser": "^6.0.7"
       },
@@ -8975,46 +9080,6 @@
         "purgecss": "bin/purgecss.js"
       }
     },
-    "node_modules/purgecss/node_modules/commander": {
-      "version": "9.5.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
-      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
-      "dev": true,
-      "engines": {
-        "node": "^12.20.0 || >=14"
-      }
-    },
-    "node_modules/purgecss/node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/purgecss/node_modules/minimatch": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/qs": {
       "version": "6.11.2",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
@@ -9303,10 +9368,11 @@
       }
     },
     "node_modules/regenerator-runtime": {
-      "version": "0.13.11",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
-      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
-      "dev": true
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/regexp-ast-analysis": {
       "version": "0.7.1",
@@ -9494,57 +9560,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/request": {
-      "version": "2.88.2",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
-      "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
-      "dev": true,
-      "dependencies": {
-        "aws-sign2": "~0.7.0",
-        "aws4": "^1.8.0",
-        "caseless": "~0.12.0",
-        "combined-stream": "~1.0.6",
-        "extend": "~3.0.2",
-        "forever-agent": "~0.6.1",
-        "form-data": "~2.3.2",
-        "har-validator": "~5.1.3",
-        "http-signature": "~1.2.0",
-        "is-typedarray": "~1.0.0",
-        "isstream": "~0.1.2",
-        "json-stringify-safe": "~5.0.1",
-        "mime-types": "~2.1.19",
-        "oauth-sign": "~0.9.0",
-        "performance-now": "^2.1.0",
-        "qs": "~6.5.2",
-        "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.5.0",
-        "tunnel-agent": "^0.6.0",
-        "uuid": "^3.3.2"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/request/node_modules/qs": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
-      "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/request/node_modules/uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
-      "dev": true,
-      "bin": {
-        "uuid": "bin/uuid"
-      }
-    },
     "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -9741,6 +9756,138 @@
         "node": "*"
       }
     },
+    "node_modules/run-applescript": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz",
+      "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "execa": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/run-applescript/node_modules/execa": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.0",
+        "human-signals": "^2.1.0",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.1",
+        "onetime": "^5.1.2",
+        "signal-exit": "^3.0.3",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/run-applescript/node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/run-applescript/node_modules/human-signals": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/run-applescript/node_modules/is-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/run-applescript/node_modules/mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/run-applescript/node_modules/npm-run-path": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/run-applescript/node_modules/onetime": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mimic-fn": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/run-applescript/node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/run-applescript/node_modules/strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/run-async": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
@@ -9843,10 +9990,11 @@
       "dev": true
     },
     "node_modules/sax": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
-      "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==",
-      "dev": true
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/scslre": {
       "version": "0.3.0",
@@ -9875,13 +10023,11 @@
       "dev": true
     },
     "node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
       "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
+      "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -9904,24 +10050,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/semver/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/semver/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    },
     "node_modules/serialize-javascript": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
@@ -10038,24 +10166,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/sign-addon": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-5.3.0.tgz",
-      "integrity": "sha512-7nHlCzhQgVMLBNiXVEgbG/raq48awOW0lYMN5uo1BaB3mp0+k8M8pvDwbfTlr3apcxZJsk9HQsAW1POwoJugpQ==",
-      "dev": true,
-      "dependencies": {
-        "common-tags": "1.8.2",
-        "core-js": "3.29.0",
-        "deepcopy": "2.1.0",
-        "es6-error": "4.1.1",
-        "es6-promisify": "7.0.0",
-        "jsonwebtoken": "9.0.0",
-        "mz": "2.7.0",
-        "request": "2.88.2",
-        "source-map-support": "0.5.21",
-        "stream-to-promise": "3.0.0"
-      }
-    },
     "node_modules/signal-exit": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
@@ -10082,6 +10192,7 @@
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
       "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.0.0",
         "astral-regex": "^2.0.0",
@@ -10113,10 +10224,11 @@
       }
     },
     "node_modules/source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -10198,6 +10310,7 @@
       "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
       "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "through": "2"
       },
@@ -10214,54 +10327,6 @@
         "node": ">= 10.x"
       }
     },
-    "node_modules/sshpk": {
-      "version": "1.18.0",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
-      "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
-      "dev": true,
-      "dependencies": {
-        "asn1": "~0.2.3",
-        "assert-plus": "^1.0.0",
-        "bcrypt-pbkdf": "^1.0.0",
-        "dashdash": "^1.12.0",
-        "ecc-jsbn": "~0.1.1",
-        "getpass": "^0.1.1",
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.0.2",
-        "tweetnacl": "~0.14.0"
-      },
-      "bin": {
-        "sshpk-conv": "bin/sshpk-conv",
-        "sshpk-sign": "bin/sshpk-sign",
-        "sshpk-verify": "bin/sshpk-verify"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/stream-to-array": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
-      "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==",
-      "dev": true,
-      "dependencies": {
-        "any-promise": "^1.1.0"
-      }
-    },
-    "node_modules/stream-to-promise": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz",
-      "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==",
-      "dev": true,
-      "dependencies": {
-        "any-promise": "~1.3.0",
-        "end-of-stream": "~1.4.1",
-        "stream-to-array": "~2.3.0"
-      },
-      "engines": {
-        "node": ">= 10"
-      }
-    },
     "node_modules/streamroller": {
       "version": "3.1.5",
       "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
@@ -10487,48 +10552,60 @@
       }
     },
     "node_modules/stylelint": {
-      "version": "16.2.1",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz",
-      "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==",
+      "version": "16.6.1",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.6.1.tgz",
+      "integrity": "sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==",
       "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/stylelint"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/stylelint"
+        }
+      ],
+      "license": "MIT",
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.5.0",
-        "@csstools/css-tokenizer": "^2.2.3",
-        "@csstools/media-query-list-parser": "^2.1.7",
-        "@csstools/selector-specificity": "^3.0.1",
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1",
+        "@csstools/media-query-list-parser": "^2.1.11",
+        "@csstools/selector-specificity": "^3.1.1",
+        "@dual-bundle/import-meta-resolve": "^4.1.0",
         "balanced-match": "^2.0.0",
         "colord": "^2.9.3",
         "cosmiconfig": "^9.0.0",
-        "css-functions-list": "^3.2.1",
+        "css-functions-list": "^3.2.2",
         "css-tree": "^2.3.1",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "fastest-levenshtein": "^1.0.16",
-        "file-entry-cache": "^8.0.0",
+        "file-entry-cache": "^9.0.0",
         "global-modules": "^2.0.0",
         "globby": "^11.1.0",
         "globjoin": "^0.1.4",
         "html-tags": "^3.3.1",
-        "ignore": "^5.3.0",
+        "ignore": "^5.3.1",
         "imurmurhash": "^0.1.4",
         "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.29.0",
+        "known-css-properties": "^0.31.0",
         "mathml-tag-names": "^2.1.3",
-        "meow": "^13.1.0",
-        "micromatch": "^4.0.5",
+        "meow": "^13.2.0",
+        "micromatch": "^4.0.7",
         "normalize-path": "^3.0.0",
-        "picocolors": "^1.0.0",
-        "postcss": "^8.4.33",
+        "picocolors": "^1.0.1",
+        "postcss": "^8.4.38",
         "postcss-resolve-nested-selector": "^0.1.1",
         "postcss-safe-parser": "^7.0.0",
-        "postcss-selector-parser": "^6.0.15",
+        "postcss-selector-parser": "^6.1.0",
         "postcss-value-parser": "^4.2.0",
         "resolve-from": "^5.0.0",
         "string-width": "^4.2.3",
         "strip-ansi": "^7.1.0",
         "supports-hyperlinks": "^3.0.0",
         "svg-tags": "^1.0.0",
-        "table": "^6.8.1",
+        "table": "^6.8.2",
         "write-file-atomic": "^5.0.1"
       },
       "bin": {
@@ -10536,10 +10613,6 @@
       },
       "engines": {
         "node": ">=18.12.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/stylelint"
       }
     },
     "node_modules/stylelint-order": {
@@ -10616,29 +10689,30 @@
       }
     },
     "node_modules/stylelint/node_modules/file-entry-cache": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
-      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz",
+      "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "flat-cache": "^4.0.0"
+        "flat-cache": "^5.0.0"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=18"
       }
     },
     "node_modules/stylelint/node_modules/flat-cache": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.0.tgz",
-      "integrity": "sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz",
+      "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "flatted": "^3.2.9",
-        "keyv": "^4.5.4",
-        "rimraf": "^5.0.5"
+        "flatted": "^3.3.1",
+        "keyv": "^4.5.4"
       },
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       }
     },
     "node_modules/stylelint/node_modules/glob-parent": {
@@ -10654,10 +10728,11 @@
       }
     },
     "node_modules/stylelint/node_modules/meow": {
-      "version": "13.1.0",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-13.1.0.tgz",
-      "integrity": "sha512-o5R/R3Tzxq0PJ3v3qcQJtSvSE9nKOLSAaDuuoMzDVuGTwHdccMWcYomh9Xolng2tjT6O/Y83d+0coVGof6tqmA==",
+      "version": "13.2.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+      "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18"
       },
@@ -10674,24 +10749,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/stylelint/node_modules/rimraf": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz",
-      "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==",
-      "dev": true,
-      "dependencies": {
-        "glob": "^10.3.7"
-      },
-      "bin": {
-        "rimraf": "dist/esm/bin.mjs"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
     "node_modules/stylelint/node_modules/strip-ansi": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
@@ -10766,10 +10823,11 @@
       "dev": true
     },
     "node_modules/table": {
-      "version": "6.8.1",
-      "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
-      "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+      "version": "6.8.2",
+      "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
+      "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
         "ajv": "^8.0.1",
         "lodash.truncate": "^4.4.2",
@@ -10781,6 +10839,16 @@
         "node": ">=10.0.0"
       }
     },
+    "node_modules/tapable": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -10792,6 +10860,7 @@
       "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
       "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "any-promise": "^1.0.0"
       }
@@ -10801,6 +10870,7 @@
       "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
       "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "thenify": ">= 3.1.0 < 4"
       },
@@ -10821,7 +10891,21 @@
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
       "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/titleize": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz",
+      "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
     "node_modules/tmp": {
       "version": "0.0.33",
@@ -10849,6 +10933,7 @@
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-number": "^7.0.0"
       },
@@ -10865,19 +10950,6 @@
         "node": ">=0.4.0"
       }
     },
-    "node_modules/tough-cookie": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-      "dev": true,
-      "dependencies": {
-        "psl": "^1.1.28",
-        "punycode": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
     "node_modules/tr46": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -10941,24 +11013,6 @@
         "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
       }
     },
-    "node_modules/tunnel-agent": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "^5.0.1"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/tweetnacl": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
-      "dev": true
-    },
     "node_modules/type-check": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -10971,15 +11025,6 @@
         "node": ">= 0.8.0"
       }
     },
-    "node_modules/type-detect": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
-      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/type-fest": {
       "version": "0.21.3",
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
@@ -11093,10 +11138,11 @@
       }
     },
     "node_modules/typedoc": {
-      "version": "0.25.11",
-      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.11.tgz",
-      "integrity": "sha512-5MbI1W/FOG6oXsd8bdssQidSTeKh8Kt3xA5uKVzI+K99uzP8EGN45uPnPvQesyaWdD+89s4wCQdtWEd8QUbiRg==",
+      "version": "0.25.13",
+      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz",
+      "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "lunr": "^2.3.9",
         "marked": "^4.3.0",
@@ -11110,14 +11156,15 @@
         "node": ">= 16"
       },
       "peerDependencies": {
-        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x"
+        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x"
       }
     },
     "node_modules/typescript": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
-      "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+      "version": "5.4.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+      "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
       "dev": true,
+      "license": "Apache-2.0",
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
@@ -11127,10 +11174,11 @@
       }
     },
     "node_modules/uc.micro": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.0.0.tgz",
-      "integrity": "sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==",
-      "dev": true
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+      "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/unbox-primitive": {
       "version": "1.0.2",
@@ -11195,6 +11243,16 @@
         "node": ">= 4.0.0"
       }
     },
+    "node_modules/untildify": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+      "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/upath": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
@@ -11325,20 +11383,6 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/verror": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-      "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
-      "dev": true,
-      "engines": [
-        "node >=0.6.0"
-      ],
-      "dependencies": {
-        "assert-plus": "^1.0.0",
-        "core-util-is": "1.0.2",
-        "extsprintf": "^1.2.0"
-      }
-    },
     "node_modules/vscode-oniguruma": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
@@ -11352,10 +11396,11 @@
       "dev": true
     },
     "node_modules/watchpack": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
-      "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
+      "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "glob-to-regexp": "^0.4.1",
         "graceful-fs": "^4.1.2"
@@ -11380,169 +11425,66 @@
       "dev": true
     },
     "node_modules/web-ext": {
-      "version": "7.11.0",
-      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.11.0.tgz",
-      "integrity": "sha512-EG6YXHITNDJB/h6Rc5FF08eMoN45sZPBBIIlEraBzxJ0RdJZ8Z3xvUUawbDwt+mowfv9X0XRWlLSwdWbRKgojg==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-8.0.0.tgz",
+      "integrity": "sha512-fcE6woJOHRAzGRTlHwcltEirOV+R3aLE/Yl+yoBbvHonJRnOcthaW1wjqlXc+iJu5rXqwd3yICLbLUndQlbCRQ==",
       "dev": true,
+      "license": "MPL-2.0",
       "dependencies": {
-        "@babel/runtime": "7.21.0",
-        "@devicefarmer/adbkit": "3.2.3",
-        "addons-linter": "6.21.0",
+        "@babel/runtime": "7.24.6",
+        "@devicefarmer/adbkit": "3.2.6",
+        "addons-linter": "6.28.0",
         "bunyan": "1.8.15",
-        "camelcase": "7.0.1",
+        "camelcase": "8.0.0",
         "chrome-launcher": "0.15.1",
         "debounce": "1.2.1",
         "decamelize": "6.0.0",
         "es6-error": "4.1.1",
-        "firefox-profile": "4.3.2",
-        "fs-extra": "11.1.0",
+        "firefox-profile": "4.6.0",
+        "fs-extra": "11.2.0",
         "fx-runner": "1.4.0",
-        "import-fresh": "3.3.0",
-        "jose": "4.13.1",
+        "https-proxy-agent": "^7.0.0",
+        "jose": "4.15.5",
+        "jszip": "3.10.1",
         "mkdirp": "1.0.4",
         "multimatch": "6.0.0",
         "mz": "2.7.0",
-        "node-fetch": "3.3.1",
+        "node-fetch": "3.3.2",
         "node-notifier": "10.0.1",
-        "open": "8.4.2",
-        "parse-json": "6.0.2",
+        "open": "9.1.0",
+        "parse-json": "7.1.1",
         "promise-toolbox": "0.21.0",
-        "sign-addon": "5.3.0",
         "source-map-support": "0.5.21",
         "strip-bom": "5.0.0",
-        "strip-json-comments": "5.0.0",
-        "tmp": "0.2.1",
+        "strip-json-comments": "5.0.1",
+        "tmp": "0.2.3",
         "update-notifier": "6.0.2",
-        "watchpack": "2.4.0",
-        "ws": "8.13.0",
-        "yargs": "17.7.1",
+        "watchpack": "2.4.1",
+        "ws": "8.17.0",
+        "yargs": "17.7.2",
         "zip-dir": "2.0.0"
       },
       "bin": {
         "web-ext": "bin/web-ext.js"
       },
       "engines": {
-        "node": ">=14.0.0",
-        "npm": ">=6.9.0"
-      }
-    },
-    "node_modules/web-ext/node_modules/@eslint/js": {
-      "version": "8.56.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
-      "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/web-ext/node_modules/@mdn/browser-compat-data": {
-      "version": "5.5.7",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.7.tgz",
-      "integrity": "sha512-DoHTZ/TjtNfUu9eiqJd+x3IcCQrhS+yOYU436TKUnlE36jZwNbK535D1CmTsSYdi/UcdCWNm5KRQZ9g1tlZCPw==",
-      "dev": true
-    },
-    "node_modules/web-ext/node_modules/addons-linter": {
-      "version": "6.21.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.21.0.tgz",
-      "integrity": "sha512-4GBn14BR16FZE7dog6uz+1HO6V3B+mAVxmbwxRhed2y5eyrwIW832TmEpku+5A5bbovBZ4gilXEtBsl6A1AMmg==",
-      "dev": true,
-      "dependencies": {
-        "@fluent/syntax": "0.19.0",
-        "@mdn/browser-compat-data": "5.5.7",
-        "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "9.9.0",
-        "ajv": "8.12.0",
-        "chalk": "4.1.2",
-        "cheerio": "1.0.0-rc.12",
-        "columnify": "1.6.0",
-        "common-tags": "1.8.2",
-        "deepmerge": "4.3.1",
-        "eslint": "8.56.0",
-        "eslint-plugin-no-unsanitized": "4.0.2",
-        "eslint-visitor-keys": "3.4.3",
-        "espree": "9.6.1",
-        "esprima": "4.0.1",
-        "fast-json-patch": "3.1.1",
-        "glob": "10.3.10",
-        "image-size": "1.1.1",
-        "is-mergeable-object": "1.1.1",
-        "jed": "1.1.1",
-        "json-merge-patch": "1.0.2",
-        "os-locale": "5.0.0",
-        "pino": "8.17.2",
-        "postcss": "8.4.33",
-        "relaxed-json": "1.0.3",
-        "semver": "7.5.4",
-        "sha.js": "2.4.11",
-        "source-map-support": "0.5.21",
-        "tosource": "1.0.0",
-        "upath": "2.0.1",
-        "yargs": "17.7.2",
-        "yauzl": "2.10.0"
-      },
-      "bin": {
-        "addons-linter": "bin/addons-linter"
-      },
-      "engines": {
-        "node": ">=16.0.0"
-      }
-    },
-    "node_modules/web-ext/node_modules/addons-linter/node_modules/yargs": {
-      "version": "17.7.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
-      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^8.0.1",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.3",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^21.1.1"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/web-ext/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
       }
     },
     "node_modules/web-ext/node_modules/camelcase": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
-      "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
+      "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=14.16"
+        "node": ">=16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
     "node_modules/web-ext/node_modules/decamelize": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz",
@@ -11555,82 +11497,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/eslint": {
-      "version": "8.56.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
-      "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
-      "dev": true,
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.56.0",
-        "@humanwhocodes/config-array": "^0.11.13",
-        "@humanwhocodes/module-importer": "^1.0.1",
-        "@nodelib/fs.walk": "^1.2.8",
-        "@ungap/structured-clone": "^1.2.0",
-        "ajv": "^6.12.4",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.2.2",
-        "eslint-visitor-keys": "^3.4.3",
-        "espree": "^9.6.1",
-        "esquery": "^1.4.2",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "find-up": "^5.0.0",
-        "glob-parent": "^6.0.2",
-        "globals": "^13.19.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^5.2.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "is-path-inside": "^3.0.3",
-        "js-yaml": "^4.1.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.3",
-        "strip-ansi": "^6.0.1",
-        "text-table": "^0.2.0"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/web-ext/node_modules/eslint/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
     "node_modules/web-ext/node_modules/fs-extra": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
-      "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
+      "version": "11.2.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "graceful-fs": "^4.2.0",
         "jsonfile": "^6.0.1",
@@ -11640,32 +11512,22 @@
         "node": ">=14.14"
       }
     },
-    "node_modules/web-ext/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+    "node_modules/web-ext/node_modules/json-parse-even-better-errors": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
+      "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==",
       "dev": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
+      "license": "MIT",
       "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/web-ext/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
     "node_modules/web-ext/node_modules/jsonfile": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
       "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "universalify": "^2.0.0"
       },
@@ -11678,34 +11540,11 @@
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz",
       "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       }
     },
-    "node_modules/web-ext/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/web-ext/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/web-ext/node_modules/mkdirp": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -11719,10 +11558,11 @@
       }
     },
     "node_modules/web-ext/node_modules/node-fetch": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz",
-      "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+      "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "data-uri-to-buffer": "^4.0.0",
         "fetch-blob": "^3.1.4",
@@ -11737,88 +11577,25 @@
       }
     },
     "node_modules/web-ext/node_modules/parse-json": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz",
-      "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz",
+      "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.16.0",
+        "@babel/code-frame": "^7.21.4",
         "error-ex": "^1.3.2",
-        "json-parse-even-better-errors": "^2.3.1",
-        "lines-and-columns": "^2.0.2"
+        "json-parse-even-better-errors": "^3.0.0",
+        "lines-and-columns": "^2.0.3",
+        "type-fest": "^3.8.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/pino": {
-      "version": "8.17.2",
-      "resolved": "https://registry.npmjs.org/pino/-/pino-8.17.2.tgz",
-      "integrity": "sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==",
-      "dev": true,
-      "dependencies": {
-        "atomic-sleep": "^1.0.0",
-        "fast-redact": "^3.1.1",
-        "on-exit-leak-free": "^2.1.0",
-        "pino-abstract-transport": "v1.1.0",
-        "pino-std-serializers": "^6.0.0",
-        "process-warning": "^3.0.0",
-        "quick-format-unescaped": "^4.0.3",
-        "real-require": "^0.2.0",
-        "safe-stable-stringify": "^2.3.1",
-        "sonic-boom": "^3.7.0",
-        "thread-stream": "^2.0.0"
-      },
-      "bin": {
-        "pino": "bin.js"
-      }
-    },
-    "node_modules/web-ext/node_modules/postcss": {
-      "version": "8.4.33",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
-      "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "nanoid": "^3.3.7",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      }
-    },
-    "node_modules/web-ext/node_modules/semver": {
-      "version": "7.5.4",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
-      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
-      "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/web-ext/node_modules/strip-bom": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz",
@@ -11832,10 +11609,11 @@
       }
     },
     "node_modules/web-ext/node_modules/strip-json-comments": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz",
-      "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz",
+      "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=14.16"
       },
@@ -11843,37 +11621,24 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/web-ext/node_modules/tmp": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
-      "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+      "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
       "dev": true,
-      "dependencies": {
-        "rimraf": "^3.0.0"
-      },
+      "license": "MIT",
       "engines": {
-        "node": ">=8.17.0"
+        "node": ">=14.14"
       }
     },
     "node_modules/web-ext/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+      "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
-        "node": ">=10"
+        "node": ">=14.16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -11884,57 +11649,21 @@
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
       "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 10.0.0"
       }
     },
-    "node_modules/web-ext/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    },
-    "node_modules/web-ext/node_modules/yargs": {
-      "version": "17.7.1",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
-      "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^8.0.1",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.3",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^21.1.1"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/web-ext/node_modules/yargs-parser": {
-      "version": "21.1.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
-      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/web-streams-polyfill": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz",
-      "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==",
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+      "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 8"
       }
     },
-    "node_modules/webextension-polyfill": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz",
-      "integrity": "sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g=="
-    },
     "node_modules/webidl-conversions": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
@@ -12160,10 +11889,11 @@
       }
     },
     "node_modules/ws": {
-      "version": "8.13.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
-      "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
+      "version": "8.17.0",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
+      "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10.0.0"
       },
@@ -12203,6 +11933,7 @@
       "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
       "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "sax": ">=0.6.0",
         "xmlbuilder": "~11.0.0"
@@ -12216,6 +11947,7 @@
       "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
       "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4.0"
       }
diff --git a/package.json b/package.json
index b59b739..1b0458f 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,10 @@
   },
   "license": "MIT",
   "author": "Sébastien Règne <regseb@gmail.com> (https://github.com/regseb)",
-  "funding": "https://www.paypal.me/sebastienregne",
+  "funding": [
+    "https://buymeacoffee.com/regseb",
+    "https://www.paypal.me/sebastienregne"
+  ],
   "repository": "regseb/gout",
   "type": "module",
   "scripts": {
@@ -39,35 +42,36 @@
   },
   "devDependencies": {
     "@prantlf/jsonlint": "14.0.3",
-    "@prettier/plugin-xml": "3.3.1",
+    "@prettier/plugin-xml": "3.4.1",
     "@stryker-mutator/core": "8.2.6",
     "@stryker-mutator/mocha-runner": "8.2.6",
+    "@types/eslint": "8.56.10",
     "@types/mocha": "10.0.6",
-    "addons-linter": "6.23.0",
+    "addons-linter": "6.28.0",
     "eslint": "8.57.0",
     "eslint-plugin-array-func": "4.0.0",
     "eslint-plugin-eslint-comments": "3.2.0",
     "eslint-plugin-import": "2.29.1",
-    "eslint-plugin-jsdoc": "48.2.0",
-    "eslint-plugin-mocha": "10.3.0",
-    "eslint-plugin-n": "16.6.2",
+    "eslint-plugin-jsdoc": "48.2.6",
+    "eslint-plugin-mocha": "10.4.3",
+    "eslint-plugin-n": "17.7.0",
     "eslint-plugin-no-unsanitized": "4.0.2",
-    "eslint-plugin-promise": "6.1.1",
-    "eslint-plugin-regexp": "2.2.0",
-    "eslint-plugin-unicorn": "51.0.1",
+    "eslint-plugin-promise": "6.2.0",
+    "eslint-plugin-regexp": "2.6.0",
+    "eslint-plugin-unicorn": "53.0.0",
     "htmlhint": "1.1.4",
     "http-server": "14.1.1",
-    "markdownlint": "0.33.0",
-    "metalint": "0.15.0",
-    "mocha": "10.3.0",
+    "markdownlint": "0.34.0",
+    "metalint": "0.17.0",
+    "mocha": "10.4.0",
     "npm-package-json-lint": "7.1.0",
     "prettier": "3.2.5",
-    "purgecss": "5.0.0",
-    "stylelint": "16.2.1",
+    "purgecss": "6.0.0",
+    "stylelint": "16.6.1",
     "stylelint-order": "6.0.4",
-    "typedoc": "0.25.11",
-    "typescript": "5.3.3",
-    "web-ext": "7.11.0",
+    "typedoc": "0.25.13",
+    "typescript": "5.4.5",
+    "web-ext": "8.0.0",
     "yaml-lint": "1.7.0"
   },
   "engines": {
diff --git a/src/module/examples/preact/helloworld/helloworld.js b/src/module/examples/preact/helloworld/helloworld.js
index 24ffd23..15494fb 100644
--- a/src/module/examples/preact/helloworld/helloworld.js
+++ b/src/module/examples/preact/helloworld/helloworld.js
@@ -4,10 +4,10 @@
  * @author Sébastien Règne
  */
 
-/* eslint-disable max-classes-per-file, no-restricted-syntax */
+/* eslint-disable max-classes-per-file */
 
 import htm from "https://esm.sh/htm@3.1.1";
-import { Component, h, render } from "https://esm.sh/preact@10.19.6";
+import { Component, h, render } from "https://esm.sh/preact@10.22.0";
 
 // Initialize htm with Preact
 const html = htm.bind(h);
diff --git a/src/module/examples/react/tictactoe/tictactoe.js b/src/module/examples/react/tictactoe/tictactoe.js
index 4475b54..e4d7c66 100644
--- a/src/module/examples/react/tictactoe/tictactoe.js
+++ b/src/module/examples/react/tictactoe/tictactoe.js
@@ -4,11 +4,9 @@
  * @author Sébastien Règne
  */
 
-/* eslint-disable no-restricted-syntax */
-
 import { html } from "https://esm.sh/htm@3.1.1/react";
-import { createRoot } from "https://esm.sh/react-dom@18.2.0";
-import { useState } from "https://esm.sh/react@18.2.0";
+import { createRoot } from "https://esm.sh/react-dom@18.3.1";
+import { useState } from "https://esm.sh/react@18.3.1";
 
 const calculateWinner = (squares) => {
     const lines = [
diff --git a/src/scraper/tools/filter/filter.js b/src/scraper/tools/filter/filter.js
index 64fb251..bd31ab6 100644
--- a/src/scraper/tools/filter/filter.js
+++ b/src/scraper/tools/filter/filter.js
@@ -14,7 +14,7 @@
  * @see https://developer.mozilla.org/Web/JavaScript/Guide/Regular_expressions
  */
 const quote = function (pattern) {
-    return pattern.replaceAll(/[$()*+.?[\\\]^{|}]/gu, "\\$&");
+    return pattern.replaceAll(/[$()*+.?[\\\]^{|}]/gu, String.raw`\$&`);
 };
 
 const GENERIC_OP = {
@@ -38,20 +38,20 @@ const NUMBER_OP = {
 };
 
 const STRING_PATTERN = new RegExp(
-    "^\\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\\s*" +
+    String.raw`^\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\s*` +
         "(?<op>(?:" +
         Object.keys(STRING_OP).map(quote).join("|") +
-        "))\\s*" +
-        "'(?<val>.*)'\\s*$",
+        String.raw`))\s*` +
+        String.raw`'(?<val>.*)'\s*$`,
     "u",
 );
 
 const NUMBER_PATTERN = new RegExp(
-    "^\\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\\s*" +
+    String.raw`^\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\s*` +
         "(?<op>(?:" +
         Object.keys(NUMBER_OP).map(quote).join("|") +
-        "))\\s*" +
-        "(?<val>[0-9]+)\\s*$",
+        String.raw`))\s*` +
+        String.raw`(?<val>[0-9]+)\s*$`,
     "u",
 );
 

From 20c55a51eb3e6d2cdbc7dbaab9b2819176f09cf1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Wed, 29 May 2024 10:50:20 +0200
Subject: [PATCH 24/38] =?UTF-8?q?fix:=20G=C3=A9rer=20la=20release=20avec?=
 =?UTF-8?q?=20deux=20extensions.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/workflows/release.yml | 3 ++-
 .release-please/config.json   | 5 ++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 97896d6..12ca67c 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -51,7 +51,8 @@ jobs:
           CHANGELOG.md
           package.json
           package-lock.json
-          src/extension/manifest.json
+          src/extension/chromium/manifest.json
+          src/extension/firefox/manifest.json
 
       - name: Commit and push
         if: ${{ steps.release.outputs.pr }}
diff --git a/.release-please/config.json b/.release-please/config.json
index 9656e8b..1ce3442 100644
--- a/.release-please/config.json
+++ b/.release-please/config.json
@@ -1,7 +1,10 @@
 {
   "release-type": "node",
   "include-component-in-tag": false,
-  "extra-files": ["src/extension/manifest.json"],
+  "extra-files": [
+    "src/extension/chromium/manifest.json",
+    "src/extension/firefox/manifest.json"
+  ],
   "packages": {
     ".": {}
   }

From e17e8311351226f37f9d1057a9dead2e65e6d1fa Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 29 May 2024 10:53:02 +0200
Subject: [PATCH 25/38] chore(main): release 0.12.0 (#18)

---
 .release-please/manifest.json        |  2 +-
 CHANGELOG.md                         | 11 +++++++++++
 package-lock.json                    |  4 ++--
 package.json                         |  2 +-
 src/extension/chromium/manifest.json |  2 +-
 src/extension/firefox/manifest.json  |  2 +-
 6 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/.release-please/manifest.json b/.release-please/manifest.json
index 0051aa3..aafbabb 100644
--- a/.release-please/manifest.json
+++ b/.release-please/manifest.json
@@ -1 +1 @@
-{ ".": "0.11.0" }
+{ ".": "0.12.0" }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2a995b5..f42a421 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
 # Changelog
 
+## [0.12.0](https://github.com/regseb/gout/compare/v0.11.0...v0.12.0) (2024-05-29)
+
+### Features
+
+- Fournir une extension pour Chromium. ([b1cec7e](https://github.com/regseb/gout/commit/b1cec7e8bd92fb3f27e2f6689076e7dd4c1fc662))
+- Utiliser YAML pour les configurations. ([91b03ee](https://github.com/regseb/gout/commit/91b03eed5cbc4e8d5697863ddadd7792634f67b6))
+
+### Bug Fixes
+
+- Gérer la release avec deux extensions. ([20c55a5](https://github.com/regseb/gout/commit/20c55a51eb3e6d2cdbc7dbaab9b2819176f09cf1))
+
 ## [0.11.0](https://github.com/regseb/gout/compare/v0.10.0...v0.11.0) (2024-03-07)
 
 ### Features
diff --git a/package-lock.json b/package-lock.json
index 8b593bc..398d0ee 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "gout",
-  "version": "0.11.0",
+  "version": "0.12.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "gout",
-      "version": "0.11.0",
+      "version": "0.12.0",
       "funding": [
         "https://buymeacoffee.com/regseb",
         "https://www.paypal.me/sebastienregne"
diff --git a/package.json b/package.json
index 1b0458f..11b0804 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "gout",
-  "version": "0.11.0",
+  "version": "0.12.0",
   "description": "Agrégateur d'Internet (flux RSS et tout le reste).",
   "keywords": [
     "gout",
diff --git a/src/extension/chromium/manifest.json b/src/extension/chromium/manifest.json
index 60bb78f..766ea2f 100644
--- a/src/extension/chromium/manifest.json
+++ b/src/extension/chromium/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 3,
   "name": "Gout",
-  "version": "0.11.0",
+  "version": "0.12.0",
   "action": {
     "default_icon": {
       "16": "img/icon16.png",
diff --git a/src/extension/firefox/manifest.json b/src/extension/firefox/manifest.json
index 6fd656f..f6e8f87 100644
--- a/src/extension/firefox/manifest.json
+++ b/src/extension/firefox/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 2,
   "name": "Gout",
-  "version": "0.11.0",
+  "version": "0.12.0",
   "browser_action": {
     "default_icon": {
       "16": "img/icon16.png",

From cc9c871d4a854d62787c6133a4d158ac49be1b3b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sun, 11 Aug 2024 14:22:53 +0200
Subject: [PATCH 26/38] fix: Corriger les exemples.

---
 README.md                           | 21 +++++++++++++++++----
 src/module/list/README.md           |  6 +++---
 src/module/podcast/README.md        |  4 ++--
 src/module/single/README.md         |  2 +-
 src/module/text/README.md           |  2 +-
 src/scraper/examples/days/README.md |  4 ++--
 src/scraper/list/jsonfeed/README.md |  2 +-
 src/scraper/tools/filter/README.md  |  2 +-
 8 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/README.md b/README.md
index 7526f8c..1dd2863 100644
--- a/README.md
+++ b/README.md
@@ -108,9 +108,9 @@ liens.
   module:
     url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
     options:
+      cron: "0 * * * *"
       max: 5
       color: "#ffc107"
-      cron: "*/10 * * * *"
     scrapers:
       - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
         options:
@@ -118,6 +118,19 @@ liens.
 </script>
 ```
 
+Vous pouvez aussi importer des widgets directement dans votre dashboard. Il faut
+ajouter un élément `<script>` avec l'attribut `src` (ainsi que le `type`). Dans
+l'exemple ci-dessous, le widget permettant d'écouter la radio
+[Fip](https://github.com/regseb/gout-regseb/tree/main/src/widget/radiofrance#readme)
+est intégré dans le dashboard :
+
+```html
+<script
+  type="application/yaml"
+  src="https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/widget/radiofrance/fip.yaml"
+></script>
+```
+
 Si vous voulez des widgets, vous pouvez chercher
 [_gout-widget_](https://github.com/search?q=%22+gout-widget%22+language%3AMarkdown&type=Code&l=Markdown)
 dans GitHub.
@@ -143,9 +156,9 @@ affichée dans un bloc bleu `#2196f3` et actualisée toutes les dix minutes
   module:
     url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
     options:
-      color: "#2196f3"
       cron: "*/10 * * * *"
-        "max": 5
+      max: 5
+      color: "#2196f3"
     scrapers: # ...
 </script>
 ```
@@ -159,7 +172,7 @@ dans GitHub.
 Les scrapers permettent d'extraire des données (flux RSS, parsing de page...) et
 de les transmettre à un module dans un format spécifique. Plusieurs scrapers
 peuvent être associés avec un module. Dans la configuration du widget, les
-scrapers sont définis dans un tableau avec deux propriétés :
+scrapers sont définis dans une liste ou chaque élément a deux propriétés :
 
 - `url` : L'URL du fichier JavaScript du scraper (par exemple pour le scraper
   [_list/rss_](https://github.com/regseb/gout/tree/HEAD/src/scraper/list/rss#readme)
diff --git a/src/module/list/README.md b/src/module/list/README.md
index 378af74..2551ad6 100644
--- a/src/module/list/README.md
+++ b/src/module/list/README.md
@@ -225,9 +225,9 @@ Ce widget affiche les cinq dernières actualités du site
   module:
     url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
     options:
-      color": "#ffc107"
-      cron": "*/10 * * * *"
-      max": 5
+      cron: "*/10 * * * *"
+      max: 5
+      color: "#ffc107"
     scrapers:
       - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
         options:
diff --git a/src/module/podcast/README.md b/src/module/podcast/README.md
index 1ec62c2..6e2f9d3 100644
--- a/src/module/podcast/README.md
+++ b/src/module/podcast/README.md
@@ -237,11 +237,11 @@ Podcast](https://lescastcodeurs.com/).
   module:
     url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/podcast/podcast.js"
     options:
-      color: "black"
       cron: "@daily"
       max: 2
+      color: "black"
     scrapers:
-      - url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
         options:
           url: "https://lescastcodeurs.com/podcast-rss"
 </script>
diff --git a/src/module/single/README.md b/src/module/single/README.md
index 4a49dc3..a125a1d 100644
--- a/src/module/single/README.md
+++ b/src/module/single/README.md
@@ -182,6 +182,6 @@ Ce widget affiche un lien vers un article au hasard de
     options:
       cron: "*/5 * * * *"
     scrapers:
-      - url": "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/single/articleauhasard/articleauhasard.js"
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/scraper/single/articleauhasard/articleauhasard.js"
 </script>
 ```
diff --git a/src/module/text/README.md b/src/module/text/README.md
index 1f795c5..2d4069a 100644
--- a/src/module/text/README.md
+++ b/src/module/text/README.md
@@ -162,7 +162,7 @@ Ce widget affiche le texte _Carpe diem_.
   module:
     url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/text/text.js"
     scrapers:
-      - url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js"
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/tools/repeater/repeater.js"
         options:
           extract:
             - title: "Carpe diem"
diff --git a/src/scraper/examples/days/README.md b/src/scraper/examples/days/README.md
index cb807aa..9e85fcf 100644
--- a/src/scraper/examples/days/README.md
+++ b/src/scraper/examples/days/README.md
@@ -64,9 +64,9 @@ anglais.
     options:
       max: 3
     scrapers:
-      - url": "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js"
+      - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/examples/days/days.js"
         options:
-          lang: "en",
+          lang: "en"
           filter: "title != 'Sunday'"
 </script>
 ```
diff --git a/src/scraper/list/jsonfeed/README.md b/src/scraper/list/jsonfeed/README.md
index c7524b6..9eae96d 100644
--- a/src/scraper/list/jsonfeed/README.md
+++ b/src/scraper/list/jsonfeed/README.md
@@ -77,9 +77,9 @@ Ce widget affiche les cinq dernières actualités scientifiques du site
   module:
     url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
     options:
-      color: "#2196f3"
       cron: "*/10 * * * *"
       max: 5
+      color: "#2196f3"
     scrapers:
       - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/jsonfeed/jsonfeed.js"
         options:
diff --git a/src/scraper/tools/filter/README.md b/src/scraper/tools/filter/README.md
index 7426117..48136b8 100644
--- a/src/scraper/tools/filter/README.md
+++ b/src/scraper/tools/filter/README.md
@@ -94,9 +94,9 @@ _list/rss_ car ce scraper utilise _tools/filter_.
   module:
     url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
     options:
-      color: "#757575"
       cron: "*/10 * * * *"
       max: 5
+      color: "#757575"
     scrapers:
       - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
         options:

From 40f9e5debb7d5e094accd4779ad8cfb36ee24ea8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sun, 11 Aug 2024 15:12:59 +0200
Subject: [PATCH 27/38] =?UTF-8?q?chore:=20Mettre=20=C3=A0=20jour=20les=20d?=
 =?UTF-8?q?=C3=A9pendances.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/CODE_OF_CONDUCT.md                    |   13 +-
 .github/ISSUE_TEMPLATE/bug_report.md          |    4 +-
 .github/ISSUE_TEMPLATE/feature_request.md     |    4 +-
 .github/workflows/ci.yml                      |    6 +-
 .github/workflows/release.yml                 |   12 +-
 .metalint/addons-linter.config.js             |    6 +-
 .metalint/eslint.config.js                    |   37 +-
 .metalint/eslint_config.config.js             |    6 +-
 .metalint/eslint_node.config.js               |   12 +-
 .metalint/eslint_test.config.js               |    6 +-
 .metalint/eslint_webext.config.js             |    6 +-
 .metalint/markdownlint.config.js              |   61 +-
 .metalint/markdownlint_changelog.config.js    |   14 -
 .metalint/metalint.config.js                  |   10 +-
 .metalint/prettier.config.js                  |    8 +-
 .metalint/prettier_css.config.js              |    6 +-
 .metalint/prettier_javascript.config.js       |    6 +-
 .metalint/stylelint.config.js                 |    7 +-
 CHANGELOG.md                                  |   48 +-
 README.md                                     |   22 +-
 package-lock.json                             | 5312 +++++++++++------
 package.json                                  |   38 +-
 src/engine/script.js                          |    4 +-
 src/extension/chromium/manifest.json          |    5 +-
 src/extension/chromium/polyfill/browser.js    |    2 +-
 src/extension/firefox/background/page.html    |   10 -
 src/extension/firefox/background/script.js    |   98 +-
 src/extension/firefox/manifest.json           |   14 +-
 src/extension/firefox/polyfill/browser.js     |    2 +-
 src/module/audio/README.md                    |   19 +-
 src/module/clock/README.md                    |   11 +-
 .../examples/preact/helloworld/README.md      |    6 +-
 src/module/icon/README.md                     |   17 +-
 src/module/iframe/README.md                   |   11 +-
 src/module/image/README.md                    |   19 +-
 src/module/image/image.js                     |    2 +-
 src/module/list/README.md                     |   28 +-
 src/module/list/list.js                       |    2 +-
 src/module/notepad/README.md                  |   11 +-
 src/module/notepad/notepad.js                 |    2 +-
 src/module/podcast/README.md                  |   31 +-
 src/module/podcast/podcast.js                 |    2 +-
 src/module/search/README.md                   |    1 +
 src/module/single/README.md                   |   19 +-
 src/module/text/README.md                     |   17 +-
 src/module/tools/findrss/README.md            |    6 +-
 src/scraper/examples/days/README.md           |   11 +-
 src/scraper/examples/helloworld/README.md     |   13 +-
 src/scraper/examples/helloworld/helloworld.js |    2 +-
 .../examples/jsonplaceholder/README.md        |   15 +-
 src/scraper/icon/ping/README.md               |   19 +-
 src/scraper/list/jsonfeed/README.md           |   14 +-
 src/scraper/list/rss/README.md                |   18 +-
 src/scraper/search/opensearch/README.md       |    9 +-
 src/scraper/tools/complements/README.md       |   19 +-
 src/scraper/tools/filter/README.md            |   15 +-
 src/utils/scraper/chain.js                    |   10 +-
 test/unit/scraper/tools/filter.js             |    8 +
 58 files changed, 3801 insertions(+), 2335 deletions(-)
 delete mode 100644 .metalint/markdownlint_changelog.config.js
 delete mode 100644 src/extension/firefox/background/page.html

diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
index c2b2b62..e53a44b 100644
--- a/.github/CODE_OF_CONDUCT.md
+++ b/.github/CODE_OF_CONDUCT.md
@@ -60,8 +60,8 @@ representative at an online or offline event.
 
 Instances of abusive, harassing, or otherwise unacceptable behavior may be
 reported to the community leaders responsible for enforcement at
-<regseb@gmail.com>.
-All complaints will be reviewed and investigated promptly and fairly.
+<regseb@gmail.com>. All complaints will be reviewed and investigated promptly
+and fairly.
 
 All community leaders are obligated to respect the privacy and security of the
 reporter of any incident.
@@ -114,12 +114,13 @@ community.
 
 ## Attribution
 
-This Code of Conduct is adapted from the [Contributor
-Covenant](https://www.contributor-covenant.org) version 2.1, available at
+This Code of Conduct is adapted from the
+[Contributor Covenant](https://www.contributor-covenant.org) version 2.1,
+available at
 <https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
 
-Community Impact Guidelines were inspired by [Mozilla's code of conduct
-enforcement ladder](https://github.com/mozilla/diversity).
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
 
 For answers to common questions about this code of conduct, see the FAQ at
 <https://www.contributor-covenant.org/faq>. Translations are available at
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 257075f..aee414e 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -28,8 +28,8 @@ Steps to reproduce the behavior:
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.12.0 -->:
-- Browser version<!-- e.g. Chrome 125.0.6422.112, Firefox 126.0 -->:
+- Gout extension version<!-- e.g. 0.12.1 -->:
+- Browser version<!-- e.g. Chrome 127.0.6533.88, Firefox 129.0 -->:
 
 ### Additional context
 
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index f2d214f..0e496e2 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -17,8 +17,8 @@ assignees: ""
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.12.0 -->:
-- Browser version<!-- e.g. Chrome 125.0.6422.112, Firefox 126.0 -->:
+- Gout extension version<!-- e.g. 0.12.1 -->:
+- Browser version<!-- e.g. Chrome 127.0.6533.88, Firefox 129.0 -->:
 
 ### Additional context
 
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 969aaf9..7255038 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -17,7 +17,7 @@ jobs:
       - name: Setup Node.js
         uses: actions/setup-node@v4
         with:
-          node-version: 20
+          node-version: 22
 
       - name: Install dependencies
         run: npm ci
@@ -36,7 +36,7 @@ jobs:
       - name: Setup Node.js
         uses: actions/setup-node@v4
         with:
-          node-version: 20
+          node-version: 22
 
       - name: Install dependencies
         run: npm ci
@@ -55,7 +55,7 @@ jobs:
       - name: Setup Node.js
         uses: actions/setup-node@v4
         with:
-          node-version: 20
+          node-version: 22
 
       - name: Install dependencies
         run: npm ci
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 12ca67c..a6a7908 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -11,7 +11,7 @@ jobs:
       pull-requests: write
     steps:
       - name: Run Release Please
-        uses: google-github-actions/release-please-action@v4
+        uses: googleapis/release-please-action@v4
         id: release
         with:
           config-file: .release-please/config.json
@@ -37,7 +37,7 @@ jobs:
         if: ${{ steps.release.outputs.pr }}
         uses: actions/setup-node@v4
         with:
-          node-version: 20
+          node-version: 22
 
       - name: Install dependencies
         if: ${{ steps.release.outputs.pr }}
@@ -46,12 +46,8 @@ jobs:
       - name: Format files
         if: ${{ steps.release.outputs.pr }}
         run: >
-          npm run lint:fix --
-          .release-please/manifest.json
-          CHANGELOG.md
-          package.json
-          package-lock.json
-          src/extension/chromium/manifest.json
+          npm run lint:fix -- .release-please/manifest.json CHANGELOG.md
+          package.json package-lock.json src/extension/chromium/manifest.json
           src/extension/firefox/manifest.json
 
       - name: Commit and push
diff --git a/.metalint/addons-linter.config.js b/.metalint/addons-linter.config.js
index 5eadf14..fca28cf 100644
--- a/.metalint/addons-linter.config.js
+++ b/.metalint/addons-linter.config.js
@@ -4,4 +4,8 @@
  * @author Sébastien Règne
  */
 
-export default {};
+export default {
+    // Autoriser la propriété "service_worker" pour le "background".
+    // https://github.com/mozilla/addons-linter/issues/5152
+    enableBackgroundServiceWorker: true,
+};
diff --git a/.metalint/eslint.config.js b/.metalint/eslint.config.js
index a6269f8..80f3ba8 100644
--- a/.metalint/eslint.config.js
+++ b/.metalint/eslint.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("eslint").Linter.Config}
+ * @import { Linter } from "eslint"
+ */
+
+/**
+ * @type {Linter.Config}
  */
 export default {
     plugins: [
@@ -466,7 +470,7 @@ export default {
             "error",
             "always",
             {
-                tags: ["param", "property"],
+                tags: ["param", "prop"],
                 customSpacings: {
                     postDelimiter: 1,
                     postTag: 1,
@@ -477,14 +481,18 @@ export default {
         "jsdoc/check-property-names": "error",
         "jsdoc/check-syntax": "error",
         "jsdoc/check-tag-names": "error",
+        "jsdoc/check-template-names": "error",
         "jsdoc/check-types": "error",
         "jsdoc/check-values": "error",
+        "jsdoc/convert-to-jsdoc-comments": "off",
         "jsdoc/empty-tags": "error",
         "jsdoc/implements-on-classes": "error",
         // Désactiver la règle, car elle ne supporte pas la propriété "exports".
         // https://github.com/gajus/eslint-plugin-jsdoc/issues/1114
         "jsdoc/imports-as-dependencies": "off",
         "jsdoc/informative-docs": "error",
+        // Désactiver cette règle et laisser Prettier gérer le formatage.
+        "jsdoc/lines-before-block": "off",
         "jsdoc/match-description": ["error", { matchDescription: "[A-ZÉ].*" }],
         "jsdoc/match-name": "off",
         "jsdoc/multiline-blocks": "error",
@@ -524,11 +532,13 @@ export default {
         "jsdoc/require-returns-check": "error",
         "jsdoc/require-returns-description": "error",
         "jsdoc/require-returns-type": "error",
+        "jsdoc/require-template": "error",
         "jsdoc/require-throws": "error",
         "jsdoc/require-yields": "error",
         "jsdoc/require-yields-check": "error",
         "jsdoc/sort-tags": "error",
         "jsdoc/tag-lines": ["error", "never", { startLines: 1 }],
+        "jsdoc/text-escaping": "off",
         "jsdoc/valid-types": "error",
 
         // Plugin eslint-plugin-no-unsanitized.
@@ -536,21 +546,22 @@ export default {
         "no-unsanitized/property": "error",
 
         // Plugin eslint-plugin-promise.
-        "promise/catch-or-return": "off",
-        "promise/no-return-wrap": "error",
-        "promise/param-names": "error",
         "promise/always-return": "off",
+        "promise/avoid-new": "off",
+        "promise/catch-or-return": "off",
+        "promise/no-callback-in-promise": "error",
+        "promise/no-multiple-resolved": "error",
         "promise/no-native": "off",
         "promise/no-nesting": "error",
-        "promise/no-promise-in-callback": "error",
-        "promise/no-callback-in-promise": "error",
-        "promise/avoid-new": "off",
         "promise/no-new-statics": "error",
+        "promise/no-promise-in-callback": "error",
         "promise/no-return-in-finally": "error",
-        "promise/valid-params": "error",
-        "promise/prefer-await-to-then": "error",
+        "promise/no-return-wrap": "error",
+        "promise/param-names": "error",
         "promise/prefer-await-to-callbacks": "off",
-        "promise/no-multiple-resolved": "error",
+        "promise/prefer-await-to-then": ["error", { strict: true }],
+        "promise/spec-only": "error",
+        "promise/valid-params": "error",
 
         // Plugin eslint-plugin-regexp.
         // Possible Errors.
@@ -680,11 +691,13 @@ export default {
         "unicorn/no-invalid-fetch-options": "error",
         "unicorn/no-invalid-remove-event-listener": "error",
         "unicorn/no-keyword-prefix": "error",
+        "unicorn/no-length-as-slice-end": "error",
         "unicorn/no-lonely-if": "error",
         "unicorn/no-magic-array-flat-depth": "error",
         // Utiliser la règle no-negated-condition d'ESLint, car celle d'unicorn
         // apporte seulement la correction automatique.
         "unicorn/no-negated-condition": "off",
+        "unicorn/no-negation-in-equality-check": "error",
         "unicorn/no-nested-ternary": "off",
         "unicorn/no-new-array": "error",
         "unicorn/no-new-buffer": "error",
@@ -715,7 +728,7 @@ export default {
         "unicorn/number-literal-case": "off",
         "unicorn/numeric-separators-style": "error",
         "unicorn/prefer-add-event-listener": "error",
-        "unicorn/prefer-array-find": ["error", { checkFromLast: true }],
+        "unicorn/prefer-array-find": "error",
         "unicorn/prefer-array-flat": "error",
         "unicorn/prefer-array-flat-map": "error",
         "unicorn/prefer-array-index-of": "error",
diff --git a/.metalint/eslint_config.config.js b/.metalint/eslint_config.config.js
index e9bb255..f33814b 100644
--- a/.metalint/eslint_config.config.js
+++ b/.metalint/eslint_config.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("eslint").Linter.Config}
+ * @import { Linter } from "eslint"
+ */
+
+/**
+ * @type {Linter.Config}
  */
 export default {
     rules: {
diff --git a/.metalint/eslint_node.config.js b/.metalint/eslint_node.config.js
index 3a4b04a..0a834be 100644
--- a/.metalint/eslint_node.config.js
+++ b/.metalint/eslint_node.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("eslint").Linter.Config}
+ * @import { Linter } from "eslint"
+ */
+
+/**
+ * @type {Linter.Config}
  */
 export default {
     rules: {
@@ -52,8 +56,10 @@ export default {
         "n/no-path-concat": "error",
         "n/no-process-exit": "error",
         "n/no-unpublished-bin": "error",
-        "n/no-unpublished-import": "off",
-        "n/no-unpublished-require": "error",
+        "n/no-unpublished-import": "error",
+        // Ne pas vérifier les require(), car ils ne sont pas utilisés (en
+        // faveur des imports).
+        "n/no-unpublished-require": "off",
         "n/no-unsupported-features/es-builtins": "error",
         "n/no-unsupported-features/es-syntax": "error",
         "n/no-unsupported-features/node-builtins": "error",
diff --git a/.metalint/eslint_test.config.js b/.metalint/eslint_test.config.js
index 3d6761c..341bbfd 100644
--- a/.metalint/eslint_test.config.js
+++ b/.metalint/eslint_test.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("eslint").Linter.Config}
+ * @import { Linter } from "eslint"
+ */
+
+/**
+ * @type {Linter.Config}
  */
 export default {
     env: {
diff --git a/.metalint/eslint_webext.config.js b/.metalint/eslint_webext.config.js
index ba4ba06..0671860 100644
--- a/.metalint/eslint_webext.config.js
+++ b/.metalint/eslint_webext.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("eslint").Linter.Config}
+ * @import { Linter } from "eslint"
+ */
+
+/**
+ * @type {Linter.Config}
  */
 export default {
     env: {
diff --git a/.metalint/markdownlint.config.js b/.metalint/markdownlint.config.js
index 747e003..25ea56e 100644
--- a/.metalint/markdownlint.config.js
+++ b/.metalint/markdownlint.config.js
@@ -5,40 +5,46 @@
  */
 
 /**
- * @type {import("markdownlint").Configuration}
+ * @import { Configuration } from "markdownlint"
+ */
+
+/**
+ * @type {Configuration}
  */
 export default {
     "heading-increment": true,
-    "heading-style": { style: "atx" },
-    "ul-style": { style: "dash" },
-    "list-indent": true,
-    "ul-indent": true,
-    "no-trailing-spaces": true,
-    "no-hard-tabs": true,
+    // Désactiver les règles de style et laisser Prettier formatter les
+    // fichiers.
+    // https://github.com/DavidAnson/markdownlint/blob/main/doc/Prettier.md
+    "heading-style": false,
+    "ul-style": false,
+    "list-indent": false,
+    "ul-indent": false,
+    "no-trailing-spaces": false,
+    "no-hard-tabs": false,
     "no-reversed-links": true,
-    "no-multiple-blanks": true,
-    // eslint-disable-next-line camelcase
-    "line-length": { code_blocks: false, headings: false },
-    "commonds-show-output": true,
-    "no-missing-space-atx": true,
-    "no-multiple-space-atx": true,
-    "no-missing-space-closed-atx": true,
-    "no-multiple-space-closed-atx": true,
-    "blanks-around-headings": true,
-    "heading-start-left": true,
+    "no-multiple-blanks": false,
+    "line-length": false,
+    "commands-show-output": true,
+    "no-missing-space-atx": false,
+    "no-multiple-space-atx": false,
+    "no-missing-space-closed-atx": false,
+    "no-multiple-space-closed-atx": false,
+    "blanks-around-headings": false,
+    "heading-start-left": false,
     // eslint-disable-next-line camelcase
     "no-duplicate-heading": { siblings_only: true },
     "single-title": true,
     "no-trailing-punctuation": true,
-    "no-multiple-space-blockquote": true,
-    "no-blanks-blockquote": true,
-    "ol-prefix": { style: "ordered" },
-    "list-marker-space": true,
-    "blanks-around-fences": true,
-    "blanks-around-lists": true,
+    "no-multiple-space-blockquote": false,
+    "no-blanks-blockquote": false,
+    "ol-prefix": false,
+    "list-marker-space": false,
+    "blanks-around-fences": false,
+    "blanks-around-lists": false,
     "no-inline-html": false,
     "no-bare-urls": true,
-    "hr-style": { style: "---" },
+    "hr-style": false,
     "no-emphasis-as-heading": true,
     "no-space-in-emphasis": true,
     "no-space-in-code": true,
@@ -60,13 +66,14 @@ export default {
     "first-line-heading": true,
     "no-empty-links": true,
     "required-headings": true,
+    // Désactiver cette règle, car il n'y a pas de mots à vérifier.
     "proper-names": false,
     "no-alt-text": true,
     "code-block-style": { style: "fenced" },
     "single-trailing-newline": true,
-    "code-fence-style": { style: "backtick" },
-    "emphasis-style": { style: "underscore" },
-    "strong-style": { style: "asterisk" },
+    "code-fence-style": false,
+    "emphasis-style": false,
+    "strong-style": false,
     "link-fragments": true,
     "reference-links-images": true,
     "link-image-reference-definitions": true,
diff --git a/.metalint/markdownlint_changelog.config.js b/.metalint/markdownlint_changelog.config.js
deleted file mode 100644
index 8f3edb1..0000000
--- a/.metalint/markdownlint_changelog.config.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * @module
- * @license MIT
- * @author Sébastien Règne
- */
-
-/**
- * @type {import("markdownlint").Configuration}
- */
-export default {
-    // Ne pas vérifier la longueur des lignes du CHANGELOG, car celui-ci est
-    // généré par release-please et il peut avoir de longues lignes.
-    "line-length": false,
-};
diff --git a/.metalint/metalint.config.js b/.metalint/metalint.config.js
index 584e0b7..0b14754 100644
--- a/.metalint/metalint.config.js
+++ b/.metalint/metalint.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("metalint/types").Config}
+ * @import { Config } from "metalint/types"
+ */
+
+/**
+ * @type {Config}
  */
 export default {
     patterns: [
@@ -93,10 +97,6 @@ export default {
         {
             patterns: "*.md",
             linters: ["prettier", "markdownlint"],
-            overrides: {
-                patterns: "/CHANGELOG.md",
-                linters: "markdownlint_changelog",
-            },
         },
         {
             patterns: "*.json",
diff --git a/.metalint/prettier.config.js b/.metalint/prettier.config.js
index 1f4d3bb..79c4c54 100644
--- a/.metalint/prettier.config.js
+++ b/.metalint/prettier.config.js
@@ -7,11 +7,17 @@
 import pluginXML from "@prettier/plugin-xml";
 
 /**
- * @type {import("prettier").Config}
+ * @import { Config } from "prettier"
+ */
+
+/**
+ * @type {Config}
  */
 export default {
     plugins: [pluginXML],
 
+    proseWrap: "always",
+
     // Options spécifiques du plugin XML.
     xmlQuoteAttributes: "double",
 };
diff --git a/.metalint/prettier_css.config.js b/.metalint/prettier_css.config.js
index 6a7ba63..c1fa98d 100644
--- a/.metalint/prettier_css.config.js
+++ b/.metalint/prettier_css.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("prettier").Config}
+ * @import { Config } from "prettier"
+ */
+
+/**
+ * @type {Config}
  */
 export default {
     tabWidth: 4,
diff --git a/.metalint/prettier_javascript.config.js b/.metalint/prettier_javascript.config.js
index 6a7ba63..c1fa98d 100644
--- a/.metalint/prettier_javascript.config.js
+++ b/.metalint/prettier_javascript.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("prettier").Config}
+ * @import { Config } from "prettier"
+ */
+
+/**
+ * @type {Config}
  */
 export default {
     tabWidth: 4,
diff --git a/.metalint/stylelint.config.js b/.metalint/stylelint.config.js
index f47058c..3597923 100644
--- a/.metalint/stylelint.config.js
+++ b/.metalint/stylelint.config.js
@@ -5,7 +5,11 @@
  */
 
 /**
- * @type {import("stylelint").Config}
+ * @import { Config } from "stylelint"
+ */
+
+/**
+ * @type {Config}
  */
 export default {
     plugins: ["stylelint-order"],
@@ -62,6 +66,7 @@ export default {
         "media-feature-name-no-unknown": true,
         "media-feature-name-value-no-unknown": true,
         "no-unknown-animations": true,
+        "no-unknown-custom-media": true,
         "no-unknown-custom-properties": true,
         "property-no-unknown": true,
         "selector-pseudo-class-no-unknown": true,
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f42a421..b82ff3d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,48 +4,61 @@
 
 ### Features
 
-- Fournir une extension pour Chromium. ([b1cec7e](https://github.com/regseb/gout/commit/b1cec7e8bd92fb3f27e2f6689076e7dd4c1fc662))
-- Utiliser YAML pour les configurations. ([91b03ee](https://github.com/regseb/gout/commit/91b03eed5cbc4e8d5697863ddadd7792634f67b6))
+- Fournir une extension pour Chromium.
+  ([b1cec7e](https://github.com/regseb/gout/commit/b1cec7e8bd92fb3f27e2f6689076e7dd4c1fc662))
+- Utiliser YAML pour les configurations.
+  ([91b03ee](https://github.com/regseb/gout/commit/91b03eed5cbc4e8d5697863ddadd7792634f67b6))
 
 ### Bug Fixes
 
-- Gérer la release avec deux extensions. ([20c55a5](https://github.com/regseb/gout/commit/20c55a51eb3e6d2cdbc7dbaab9b2819176f09cf1))
+- Gérer la release avec deux extensions.
+  ([20c55a5](https://github.com/regseb/gout/commit/20c55a51eb3e6d2cdbc7dbaab9b2819176f09cf1))
 
 ## [0.11.0](https://github.com/regseb/gout/compare/v0.10.0...v0.11.0) (2024-03-07)
 
 ### Features
 
-- Récupérer les données dans le group (Atom). ([e84592f](https://github.com/regseb/gout/commit/e84592f29543e54ac754a630766e9bc9f8ebb783))
+- Récupérer les données dans le group (Atom).
+  ([e84592f](https://github.com/regseb/gout/commit/e84592f29543e54ac754a630766e9bc9f8ebb783))
 
 ### Bug Fixes
 
-- **module/podcast:** Gérer les actions play/pause. ([d950ff3](https://github.com/regseb/gout/commit/d950ff3890482cd473f4b8883ced66cb597cc12d))
+- **module/podcast:** Gérer les actions play/pause.
+  ([d950ff3](https://github.com/regseb/gout/commit/d950ff3890482cd473f4b8883ced66cb597cc12d))
 
 ## [0.10.0](https://github.com/regseb/gout/compare/v0.9.8...v0.10.0) (2024-01-08)
 
 ### Features
 
-- Chainer les scrapers. ([04c094b](https://github.com/regseb/gout/commit/04c094b9f08b7ed980e27c57fd922d7e3f86e1fb))
+- Chainer les scrapers.
+  ([04c094b](https://github.com/regseb/gout/commit/04c094b9f08b7ed980e27c57fd922d7e3f86e1fb))
 
 ### Bug Fixes
 
-- Déplacer le scraper Repeater dans tools. ([da4af6f](https://github.com/regseb/gout/commit/da4af6fbf59a68223468b52abb401c2e683e5630))
-- **scraper/icon/ping:** Remplacer les points par des "x". ([402e2b4](https://github.com/regseb/gout/commit/402e2b400f16b92b6e9e193a7ae70f1dacc5ff9b))
+- Déplacer le scraper Repeater dans tools.
+  ([da4af6f](https://github.com/regseb/gout/commit/da4af6fbf59a68223468b52abb401c2e683e5630))
+- **scraper/icon/ping:** Remplacer les points par des "x".
+  ([402e2b4](https://github.com/regseb/gout/commit/402e2b400f16b92b6e9e193a7ae70f1dacc5ff9b))
 
 ## [0.9.8](https://github.com/regseb/gout/compare/v0.9.7...v0.9.8) (2023-09-24)
 
 ### Bug Fixes
 
-- Corriger des fautes de français. ([ebb3cba](https://github.com/regseb/gout/commit/ebb3cba7bc03a738ef59055d857b2673dade3e32))
-- Corriger le nom des classes. ([c91d0fa](https://github.com/regseb/gout/commit/c91d0fa7befa9582dad35712b2a3fdf630183f31))
-- Gérer correctement les async / await. ([b017aaa](https://github.com/regseb/gout/commit/b017aaade74a678200fa4a8c597463fcd6296c33))
+- Corriger des fautes de français.
+  ([ebb3cba](https://github.com/regseb/gout/commit/ebb3cba7bc03a738ef59055d857b2673dade3e32))
+- Corriger le nom des classes.
+  ([c91d0fa](https://github.com/regseb/gout/commit/c91d0fa7befa9582dad35712b2a3fdf630183f31))
+- Gérer correctement les async / await.
+  ([b017aaa](https://github.com/regseb/gout/commit/b017aaade74a678200fa4a8c597463fcd6296c33))
 
 ## [0.9.7](https://github.com/regseb/gout/compare/v0.9.6...v0.9.7) (2023-03-10)
 
 ### Bug Fixes
 
-- **extension:** Modifier la requête HTTP. ([d0de0f9](https://github.com/regseb/gout/commit/d0de0f947c53fb594cdd61956952b297dd226114))
-- Renommer "Configuration" en "Options". ([eb0a0ad](https://github.com/regseb/gout/commit/eb0a0adcffdb07559a5853b630701cdfc197ddca))
+- **extension:** Modifier la requête HTTP.
+  ([d0de0f9](https://github.com/regseb/gout/commit/d0de0f947c53fb594cdd61956952b297dd226114))
+- Renommer "Configuration" en "Options".
+  ([eb0a0ad](https://github.com/regseb/gout/commit/eb0a0adcffdb07559a5853b630701cdfc197ddca))
 
 ## [0.9.6](https://github.com/regseb/gout/compare/v0.9.5...v0.9.6) (2022-12-11)
 
@@ -53,9 +66,12 @@
 
 ### Features
 
-- Améliorer l'héritage de widgets. ([1c25ad3](https://github.com/regseb/gout/commit/1c25ad37d0063bed18f4065d980d78ef2250e7eb))
-- **module/findrss:** Ajouter un module pour extraire les flux RSS. ([e7b88a7](https://github.com/regseb/gout/commit/e7b88a7e534ae6b335b5bffa4341e35f0d17a995))
+- Améliorer l'héritage de widgets.
+  ([1c25ad3](https://github.com/regseb/gout/commit/1c25ad37d0063bed18f4065d980d78ef2250e7eb))
+- **module/findrss:** Ajouter un module pour extraire les flux RSS.
+  ([e7b88a7](https://github.com/regseb/gout/commit/e7b88a7e534ae6b335b5bffa4341e35f0d17a995))
 
 ### Bug Fixes
 
-- **scraper/ping:** Gérer correctement les codes. ([b03035c](https://github.com/regseb/gout/commit/b03035ca4d5779653cbf0ab1811341a7c163d658))
+- **scraper/ping:** Gérer correctement les codes.
+  ([b03035c](https://github.com/regseb/gout/commit/b03035ca4d5779653cbf0ab1811341a7c163d658))
diff --git a/README.md b/README.md
index 1dd2863..a961fdf 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
 # Gout
 
-[![firefox][img-firefox]][link-firefox]
-[![build][img-build]][link-build]
+[![firefox][img-firefox]][link-firefox] [![build][img-build]][link-build]
 [![coverage][img-coverage]][link-coverage]
 
 > Agrégateur d'Internet (flux RSS et tout le reste).
@@ -205,16 +204,21 @@ dans GitHub.
 ## Installation
 
 L'extension est disponible sur [**Firefox Browser Add-ons**][link-firefox].
-Après l'avoir installée, téléchargez un [template d'un
-dashboard](https://github.com/regseb/gout/tree/HEAD/template/dashboard).
+Après l'avoir installée, téléchargez un
+[template d'un dashboard](https://github.com/regseb/gout/tree/HEAD/template/dashboard).
 Ouvrez le fichier avec un éditeur de texte. Ajoutez les widgets que vous
 souhaitez dans le code HTML. Ouvrez le fichier avec votre navigateur et ajoutez
 la page dans l'extension (en cliquant sur l'icône de l'extension dans la barre
 d'outils du navigateur). Actualisez la page pour voir apparaitre les widgets.
 
-[img-firefox]: https://img.shields.io/amo/v/gout.svg?label=add-on&logo=firefox-browser&logoColor=whitesmoke
-[img-build]: https://img.shields.io/github/actions/workflow/status/regseb/gout/ci.yml?branch=main&logo=github&logoColor=whitesmoke
-[img-coverage]: https://img.shields.io/endpoint?label=coverage&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fgout%2Fmain
+[img-firefox]:
+  https://img.shields.io/amo/v/gout.svg?label=add-on&logo=firefox-browser&logoColor=whitesmoke
+[img-build]:
+  https://img.shields.io/github/actions/workflow/status/regseb/gout/ci.yml?branch=main&logo=github&logoColor=whitesmoke
+[img-coverage]:
+  https://img.shields.io/endpoint?label=coverage&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fgout%2Fmain
 [link-firefox]: https://addons.mozilla.org/addon/gout/
-[link-build]: https://github.com/regseb/gout/actions/workflows/ci.yml?query=branch%3Amain
-[link-coverage]: https://dashboard.stryker-mutator.io/reports/github.com/regseb/gout/main
+[link-build]:
+  https://github.com/regseb/gout/actions/workflows/ci.yml?query=branch%3Amain
+[link-coverage]:
+  https://dashboard.stryker-mutator.io/reports/github.com/regseb/gout/main
diff --git a/package-lock.json b/package-lock.json
index 398d0ee..27d8cc9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,50 +13,41 @@
       ],
       "license": "MIT",
       "devDependencies": {
-        "@prantlf/jsonlint": "14.0.3",
+        "@prantlf/jsonlint": "16.0.0",
         "@prettier/plugin-xml": "3.4.1",
-        "@stryker-mutator/core": "8.2.6",
-        "@stryker-mutator/mocha-runner": "8.2.6",
-        "@types/eslint": "8.56.10",
-        "@types/mocha": "10.0.6",
-        "addons-linter": "6.28.0",
+        "@stryker-mutator/core": "8.4.0",
+        "@stryker-mutator/mocha-runner": "8.4.0",
+        "@types/eslint": "9.6.0",
+        "@types/mocha": "10.0.7",
+        "addons-linter": "6.33.0",
         "eslint": "8.57.0",
         "eslint-plugin-array-func": "4.0.0",
         "eslint-plugin-eslint-comments": "3.2.0",
         "eslint-plugin-import": "2.29.1",
-        "eslint-plugin-jsdoc": "48.2.6",
-        "eslint-plugin-mocha": "10.4.3",
-        "eslint-plugin-n": "17.7.0",
+        "eslint-plugin-jsdoc": "50.0.1",
+        "eslint-plugin-mocha": "10.5.0",
+        "eslint-plugin-n": "17.10.2",
         "eslint-plugin-no-unsanitized": "4.0.2",
-        "eslint-plugin-promise": "6.2.0",
+        "eslint-plugin-promise": "7.1.0",
         "eslint-plugin-regexp": "2.6.0",
-        "eslint-plugin-unicorn": "53.0.0",
+        "eslint-plugin-unicorn": "55.0.0",
         "htmlhint": "1.1.4",
         "http-server": "14.1.1",
         "markdownlint": "0.34.0",
         "metalint": "0.17.0",
-        "mocha": "10.4.0",
-        "npm-package-json-lint": "7.1.0",
-        "prettier": "3.2.5",
+        "mocha": "10.7.3",
+        "npm-package-json-lint": "8.0.0",
+        "prettier": "3.3.3",
         "purgecss": "6.0.0",
-        "stylelint": "16.6.1",
+        "stylelint": "16.8.1",
         "stylelint-order": "6.0.4",
-        "typedoc": "0.25.13",
-        "typescript": "5.4.5",
-        "web-ext": "8.0.0",
+        "typedoc": "0.26.5",
+        "typescript": "5.5.4",
+        "web-ext": "8.2.0",
         "yaml-lint": "1.7.0"
       },
       "engines": {
-        "node": ">=20.6.0"
-      }
-    },
-    "node_modules/@aashutoshrathi/word-wrap": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
-      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
+        "node": ">=22.1.0"
       }
     },
     "node_modules/@ampproject/remapping": {
@@ -64,6 +55,7 @@
       "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
       "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.24"
@@ -73,114 +65,46 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
-      "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.23.4",
-        "chalk": "^2.4.2"
+        "@babel/highlight": "^7.24.7",
+        "picocolors": "^1.0.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/code-frame/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true
-    },
-    "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/code-frame/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/@babel/compat-data": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
-      "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
+      "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.23.9",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
-      "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.23.5",
-        "@babel/generator": "^7.23.6",
-        "@babel/helper-compilation-targets": "^7.23.6",
-        "@babel/helper-module-transforms": "^7.23.3",
-        "@babel/helpers": "^7.23.9",
-        "@babel/parser": "^7.23.9",
-        "@babel/template": "^7.23.9",
-        "@babel/traverse": "^7.23.9",
-        "@babel/types": "^7.23.9",
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.25.0",
+        "@babel/helper-compilation-targets": "^7.25.2",
+        "@babel/helper-module-transforms": "^7.25.2",
+        "@babel/helpers": "^7.25.0",
+        "@babel/parser": "^7.25.0",
+        "@babel/template": "^7.25.0",
+        "@babel/traverse": "^7.25.2",
+        "@babel/types": "^7.25.2",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -200,19 +124,21 @@
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
+      "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
-      "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.23.6",
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "@jridgewell/trace-mapping": "^0.3.17",
+        "@babel/types": "^7.25.0",
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
       },
       "engines": {
@@ -220,26 +146,28 @@
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
-      "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
-      "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
+      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.23.5",
-        "@babel/helper-validator-option": "^7.23.5",
-        "browserslist": "^4.22.2",
+        "@babel/compat-data": "^7.25.2",
+        "@babel/helper-validator-option": "^7.24.8",
+        "browserslist": "^4.23.1",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -252,24 +180,24 @@
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
+      "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz",
-      "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-member-expression-to-functions": "^7.23.0",
-        "@babel/helper-optimise-call-expression": "^7.22.5",
-        "@babel/helper-replace-supers": "^7.22.20",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
+      "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.24.7",
+        "@babel/helper-member-expression-to-functions": "^7.24.8",
+        "@babel/helper-optimise-call-expression": "^7.24.7",
+        "@babel/helper-replace-supers": "^7.25.0",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+        "@babel/traverse": "^7.25.0",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -284,79 +212,50 @@
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
+      "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
       }
     },
-    "node_modules/@babel/helper-environment-visitor": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
-      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-function-name": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
-      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/template": "^7.22.15",
-        "@babel/types": "^7.23.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-hoist-variables": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
-      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.22.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
-      "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
+      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.23.0"
+        "@babel/traverse": "^7.24.8",
+        "@babel/types": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
-      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.22.15"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.23.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
-      "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
+      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-module-imports": "^7.22.15",
-        "@babel/helper-simple-access": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/helper-validator-identifier": "^7.22.20"
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-simple-access": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/traverse": "^7.25.2"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -366,35 +265,38 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
-      "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
-      "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
+      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
-      "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
+      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-member-expression-to-functions": "^7.22.15",
-        "@babel/helper-optimise-call-expression": "^7.22.5"
+        "@babel/helper-member-expression-to-functions": "^7.24.8",
+        "@babel/helper-optimise-call-expression": "^7.24.7",
+        "@babel/traverse": "^7.25.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -404,54 +306,47 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
-      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
-      "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.22.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.22.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
-      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.22.5"
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
-      "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
-      "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -459,37 +354,40 @@
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.23.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
-      "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz",
-      "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==",
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
+      "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.24.0",
-        "@babel/traverse": "^7.24.0",
-        "@babel/types": "^7.24.0"
+        "@babel/template": "^7.25.0",
+        "@babel/types": "^7.25.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.23.4",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
-      "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "chalk": "^2.4.2",
-        "js-tokens": "^4.0.0"
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.0.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -500,6 +398,7 @@
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "color-convert": "^1.9.0"
       },
@@ -512,6 +411,7 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
       "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^3.2.1",
         "escape-string-regexp": "^1.0.5",
@@ -526,6 +426,7 @@
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "color-name": "1.1.3"
       }
@@ -534,13 +435,15 @@
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
       "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
       "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.0"
       }
@@ -550,6 +453,7 @@
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
       "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
@@ -559,6 +463,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^3.0.0"
       },
@@ -567,10 +472,14 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.23.9",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
-      "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
       "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.2"
+      },
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -579,14 +488,32 @@
       }
     },
     "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.23.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.9.tgz",
-      "integrity": "sha512-hJhBCb0+NnTWybvWq2WpbCYDOcflSbx0t+BYP65e5R9GVnukiDTi+on5bFkk4p7QGuv190H6KfNiV9Knf/3cZA==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz",
+      "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/plugin-syntax-decorators": "^7.24.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-explicit-resource-management": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-explicit-resource-management/-/plugin-proposal-explicit-resource-management-7.24.7.tgz",
+      "integrity": "sha512-sYvUjHrKctxFiNe/YFyzNyXoblzP4YaZrWSk0js7QU3Lw2lYjLAxnzV8l/4+7PB5+NDFKGblPUq2YbdTxs3Ppg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.23.9",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/plugin-syntax-decorators": "^7.23.3"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/plugin-syntax-explicit-resource-management": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -596,12 +523,29 @@
       }
     },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.0.tgz",
-      "integrity": "sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
+      "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.24.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-explicit-resource-management": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-explicit-resource-management/-/plugin-syntax-explicit-resource-management-7.24.7.tgz",
+      "integrity": "sha512-gEl7s4tkyWl3EcfUCLVcJJRSogDQju6qX2hdJmZVO0wdpVGzss5bJU8wySoZ7JQw1jBjztEY1a/eYstgv+AQkA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.0"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -611,12 +555,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.23.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
-      "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.22.5"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -626,12 +571,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.23.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
-      "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz",
+      "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.22.5"
+        "@babel/helper-plugin-utils": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -641,14 +587,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.23.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
-      "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
+      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.23.3",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/helper-simple-access": "^7.22.5"
+        "@babel/helper-module-transforms": "^7.24.8",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/helper-simple-access": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -658,15 +605,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.23.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz",
-      "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz",
+      "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.22.5",
-        "@babel/helper-create-class-features-plugin": "^7.23.6",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/plugin-syntax-typescript": "^7.23.3"
+        "@babel/helper-annotate-as-pure": "^7.24.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.0",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+        "@babel/plugin-syntax-typescript": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -676,16 +625,17 @@
       }
     },
     "node_modules/@babel/preset-typescript": {
-      "version": "7.23.3",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz",
-      "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz",
+      "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/helper-validator-option": "^7.22.15",
-        "@babel/plugin-syntax-jsx": "^7.23.3",
-        "@babel/plugin-transform-modules-commonjs": "^7.23.3",
-        "@babel/plugin-transform-typescript": "^7.23.3"
+        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-validator-option": "^7.24.7",
+        "@babel/plugin-syntax-jsx": "^7.24.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.24.7",
+        "@babel/plugin-transform-typescript": "^7.24.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -695,9 +645,9 @@
       }
     },
     "node_modules/@babel/runtime": {
-      "version": "7.24.6",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
-      "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz",
+      "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -708,45 +658,32 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
-      "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/parser": "^7.24.0",
-        "@babel/types": "^7.24.0"
+        "@babel/code-frame": "^7.24.7",
+        "@babel/parser": "^7.25.0",
+        "@babel/types": "^7.25.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/template/node_modules/@babel/parser": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
-      "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
-      "dev": true,
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
     "node_modules/@babel/traverse": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz",
-      "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/generator": "^7.23.6",
-        "@babel/helper-environment-visitor": "^7.22.20",
-        "@babel/helper-function-name": "^7.23.0",
-        "@babel/helper-hoist-variables": "^7.22.5",
-        "@babel/helper-split-export-declaration": "^7.22.6",
-        "@babel/parser": "^7.24.0",
-        "@babel/types": "^7.24.0",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.25.0",
+        "@babel/parser": "^7.25.3",
+        "@babel/template": "^7.25.0",
+        "@babel/types": "^7.25.2",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -754,26 +691,15 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/@babel/parser": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
-      "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
-      "dev": true,
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
     "node_modules/@babel/types": {
-      "version": "7.24.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
-      "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.23.4",
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-string-parser": "^7.24.8",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -781,9 +707,9 @@
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
-      "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz",
+      "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==",
       "dev": true,
       "funding": [
         {
@@ -800,13 +726,13 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.3.1"
+        "@csstools/css-tokenizer": "^2.4.1"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
-      "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz",
+      "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==",
       "dev": true,
       "funding": [
         {
@@ -824,9 +750,9 @@
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.11",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
-      "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
+      "version": "2.1.13",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz",
+      "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==",
       "dev": true,
       "funding": [
         {
@@ -843,8 +769,8 @@
         "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.3",
-        "@csstools/css-tokenizer": "^2.3.1"
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1"
       }
     },
     "node_modules/@csstools/selector-specificity": {
@@ -934,17 +860,14 @@
       }
     },
     "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.43.0",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.0.tgz",
-      "integrity": "sha512-Q1CnsQrytI3TlCB1IVWXWeqUIPGVEKGaE7IbVdt13Nq/3i0JESAkQQERrfiQkmlpijl+++qyqPgaS31Bvc1jRQ==",
+      "version": "0.46.0",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz",
+      "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/eslint": "^8.56.5",
-        "@types/estree": "^1.0.5",
-        "@typescript-eslint/types": "^7.2.0",
         "comment-parser": "1.4.1",
-        "esquery": "^1.5.0",
+        "esquery": "^1.6.0",
         "jsdoc-type-pratt-parser": "~4.0.0"
       },
       "engines": {
@@ -956,6 +879,7 @@
       "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
       "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "eslint-visitor-keys": "^3.3.0"
       },
@@ -966,11 +890,25 @@
         "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
       }
     },
+    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/@eslint-community/regexpp": {
-      "version": "4.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
-      "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+      "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
@@ -980,6 +918,7 @@
       "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
       "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
@@ -1003,6 +942,7 @@
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
       "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
@@ -1019,16 +959,49 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
       }
     },
+    "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
       "version": "13.24.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
       "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "type-fest": "^0.20.2"
       },
@@ -1043,13 +1016,15 @@
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@eslint/eslintrc/node_modules/minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -1062,6 +1037,7 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
       "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=10"
       },
@@ -1074,6 +1050,7 @@
       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
       "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
@@ -1083,6 +1060,7 @@
       "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.19.0.tgz",
       "integrity": "sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
         "node": ">=14.0.0",
         "npm": ">=7.0.0"
@@ -1092,7 +1070,9 @@
       "version": "0.11.14",
       "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
       "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+      "deprecated": "Use @eslint/config-array instead",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "@humanwhocodes/object-schema": "^2.0.2",
         "debug": "^4.3.1",
@@ -1107,6 +1087,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -1117,6 +1098,7 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -1129,6 +1111,7 @@
       "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
       "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
         "node": ">=12.22"
       },
@@ -1138,16 +1121,241 @@
       }
     },
     "node_modules/@humanwhocodes/object-schema": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
-      "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
-      "dev": true
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+      "deprecated": "Use @eslint/object-schema instead",
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "node_modules/@isaacs/cliui": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
-      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+    "node_modules/@inquirer/checkbox": {
+      "version": "2.4.7",
+      "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.4.7.tgz",
+      "integrity": "sha512-5YwCySyV1UEgqzz34gNsC38eKxRBtlRDpJLlKcRtTjlYA/yDKuc1rfw+hjw+2WJxbAZtaDPsRl5Zk7J14SBoBw==",
       "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/figures": "^1.0.5",
+        "@inquirer/type": "^1.5.2",
+        "ansi-escapes": "^4.3.2",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/confirm": {
+      "version": "3.1.22",
+      "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz",
+      "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/type": "^1.5.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/core": {
+      "version": "9.0.10",
+      "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.10.tgz",
+      "integrity": "sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/figures": "^1.0.5",
+        "@inquirer/type": "^1.5.2",
+        "@types/mute-stream": "^0.0.4",
+        "@types/node": "^22.1.0",
+        "@types/wrap-ansi": "^3.0.0",
+        "ansi-escapes": "^4.3.2",
+        "cli-spinners": "^2.9.2",
+        "cli-width": "^4.1.0",
+        "mute-stream": "^1.0.0",
+        "signal-exit": "^4.1.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^6.2.0",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/editor": {
+      "version": "2.1.22",
+      "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.1.22.tgz",
+      "integrity": "sha512-K1QwTu7GCK+nKOVRBp5HY9jt3DXOfPGPr6WRDrPImkcJRelG9UTx2cAtK1liXmibRrzJlTWOwqgWT3k2XnS62w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/type": "^1.5.2",
+        "external-editor": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/expand": {
+      "version": "2.1.22",
+      "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.1.22.tgz",
+      "integrity": "sha512-wTZOBkzH+ItPuZ3ZPa9lynBsdMp6kQ9zbjVPYEtSBG7UulGjg2kQiAnUjgyG4SlntpTce5bOmXAPvE4sguXjpA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/type": "^1.5.2",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/figures": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz",
+      "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/input": {
+      "version": "2.2.9",
+      "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.2.9.tgz",
+      "integrity": "sha512-7Z6N+uzkWM7+xsE+3rJdhdG/+mQgejOVqspoW+w0AbSZnL6nq5tGMEVASaYVWbkoSzecABWwmludO2evU3d31g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/type": "^1.5.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/number": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.0.10.tgz",
+      "integrity": "sha512-kWTxRF8zHjQOn2TJs+XttLioBih6bdc5CcosXIzZsrTY383PXI35DuhIllZKu7CdXFi2rz2BWPN9l0dPsvrQOA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/type": "^1.5.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/password": {
+      "version": "2.1.22",
+      "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.1.22.tgz",
+      "integrity": "sha512-5Fxt1L9vh3rAKqjYwqsjU4DZsEvY/2Gll+QkqR4yEpy6wvzLxdSgFhUcxfDAOtO4BEoTreWoznC0phagwLU5Kw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/type": "^1.5.2",
+        "ansi-escapes": "^4.3.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/prompts": {
+      "version": "5.3.8",
+      "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz",
+      "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/checkbox": "^2.4.7",
+        "@inquirer/confirm": "^3.1.22",
+        "@inquirer/editor": "^2.1.22",
+        "@inquirer/expand": "^2.1.22",
+        "@inquirer/input": "^2.2.9",
+        "@inquirer/number": "^1.0.10",
+        "@inquirer/password": "^2.1.22",
+        "@inquirer/rawlist": "^2.2.4",
+        "@inquirer/search": "^1.0.7",
+        "@inquirer/select": "^2.4.7"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/rawlist": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.2.4.tgz",
+      "integrity": "sha512-pb6w9pWrm7EfnYDgQObOurh2d2YH07+eDo3xQBsNAM2GRhliz6wFXGi1thKQ4bN6B0xDd6C3tBsjdr3obsCl3Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/type": "^1.5.2",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/search": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.0.7.tgz",
+      "integrity": "sha512-p1wpV+3gd1eST/o5N3yQpYEdFNCzSP0Klrl+5bfD3cTTz8BGG6nf4Z07aBW0xjlKIj1Rp0y3x/X4cZYi6TfcLw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/figures": "^1.0.5",
+        "@inquirer/type": "^1.5.2",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/select": {
+      "version": "2.4.7",
+      "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.4.7.tgz",
+      "integrity": "sha512-JH7XqPEkBpNWp3gPCqWqY8ECbyMoFcCZANlL6pV9hf59qK6dGmkOlx1ydyhY+KZ0c5X74+W6Mtp+nm2QX0/MAQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@inquirer/core": "^9.0.10",
+        "@inquirer/figures": "^1.0.5",
+        "@inquirer/type": "^1.5.2",
+        "ansi-escapes": "^4.3.2",
+        "yoctocolors-cjs": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@inquirer/type": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz",
+      "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mute-stream": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+      "dev": true,
+      "license": "ISC",
       "dependencies": {
         "string-width": "^5.1.2",
         "string-width-cjs": "npm:string-width@^4.2.0",
@@ -1165,6 +1373,7 @@
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
       "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -1177,6 +1386,7 @@
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
       "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -1184,34 +1394,12 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true
-    },
-    "node_modules/@isaacs/cliui/node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
-      "dev": true,
-      "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
       "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^6.0.1"
       },
@@ -1227,6 +1415,7 @@
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
       "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^6.1.0",
         "string-width": "^5.0.1",
@@ -1244,6 +1433,7 @@
       "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
       "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@jridgewell/set-array": "^1.2.1",
         "@jridgewell/sourcemap-codec": "^1.4.10",
@@ -1258,6 +1448,7 @@
       "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
       "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6.0.0"
       }
@@ -1267,42 +1458,33 @@
       "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
       "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6.0.0"
       }
     },
     "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.4.15",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
-      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
-      "dev": true
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@jridgewell/trace-mapping": {
       "version": "0.3.25",
       "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
       "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@jridgewell/resolve-uri": "^3.1.0",
         "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
-    "node_modules/@ljharb/through": {
-      "version": "2.3.12",
-      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.12.tgz",
-      "integrity": "sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.5"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
     "node_modules/@mdn/browser-compat-data": {
-      "version": "5.5.29",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.29.tgz",
-      "integrity": "sha512-NHdG3QOiAsxh8ygBSKMa/WaNJwpNt87uVqW+S2RlnSqgeRdk+L3foNWTX6qd0I3NHSlCFb47rgopeNCJtRDY5A==",
+      "version": "5.5.40",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.40.tgz",
+      "integrity": "sha512-5hByR+TGX/iKG7Uv3Zk8f+aUftkBcHqWE3Ym229jxm+cRjeJSBZzUKPm6H+p46vaeooql72kydrqpz0B3UrErw==",
       "dev": true,
       "license": "CC0-1.0"
     },
@@ -1311,6 +1493,7 @@
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
       "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@nodelib/fs.stat": "2.0.5",
         "run-parallel": "^1.1.9"
@@ -1324,6 +1507,7 @@
       "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
       "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 8"
       }
@@ -1333,6 +1517,7 @@
       "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
       "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@nodelib/fs.scandir": "2.1.5",
         "fastq": "^1.6.0"
@@ -1346,16 +1531,31 @@
       "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
       "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=14"
       }
     },
+    "node_modules/@pkgr/core": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/unts"
+      }
+    },
     "node_modules/@pnpm/config.env-replace": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
       "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12.22.0"
       }
@@ -1365,6 +1565,7 @@
       "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
       "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "graceful-fs": "4.2.10"
       },
@@ -1376,13 +1577,15 @@
       "version": "4.2.10",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
       "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/@pnpm/npm-conf": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz",
-      "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz",
+      "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@pnpm/config.env-replace": "^1.1.0",
         "@pnpm/network.ca-file": "^1.0.1",
@@ -1393,22 +1596,23 @@
       }
     },
     "node_modules/@prantlf/jsonlint": {
-      "version": "14.0.3",
-      "resolved": "https://registry.npmjs.org/@prantlf/jsonlint/-/jsonlint-14.0.3.tgz",
-      "integrity": "sha512-Z9FrZd+cqCiqB6r/EHb4evj8HUqMgPvi7RVBQhFHYOJ292K7XmnKprNTngTqiUclCFn5MFqeZv20Jo5ZzlOCqw==",
+      "version": "16.0.0",
+      "resolved": "https://registry.npmjs.org/@prantlf/jsonlint/-/jsonlint-16.0.0.tgz",
+      "integrity": "sha512-L0jFtcsBRJZOr4T6sbePb1R6XYF6Nofj6kmEAxqTKCHEr50uvyxBFnB1UKaehWaMhHnvtyqWfTR5Go25RywXIQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "ajv": "8.12.0",
+        "ajv": "8.17.1",
         "ajv-draft-04": "1.0.0",
-        "cosmiconfig": "8.1.3",
-        "diff": "5.1.0",
-        "fast-glob": "3.2.12"
+        "cosmiconfig": "9.0.0",
+        "diff": "5.2.0",
+        "fast-glob": "3.3.2"
       },
       "bin": {
         "jsonlint": "lib/cli.js"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">=16.9"
       }
     },
     "node_modules/@prettier/plugin-xml": {
@@ -1424,11 +1628,29 @@
         "prettier": "^3.0.0"
       }
     },
+    "node_modules/@sec-ant/readable-stream": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+      "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@shikijs/core": {
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.12.1.tgz",
+      "integrity": "sha512-biCz/mnkMktImI6hMfMX3H9kOeqsInxWEyCHbSlL8C/2TR1FqfmGxTLRNwYCKsyCyxWLbB8rEqXRVZuyxuLFmA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.4"
+      }
+    },
     "node_modules/@sindresorhus/is": {
       "version": "5.6.0",
       "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
       "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=14.16"
       },
@@ -1436,15 +1658,29 @@
         "url": "https://github.com/sindresorhus/is?sponsor=1"
       }
     },
+    "node_modules/@sindresorhus/merge-streams": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/@stryker-mutator/api": {
-      "version": "8.2.6",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-8.2.6.tgz",
-      "integrity": "sha512-ygPT37teKh2Ei3sj+cs+kNpaFiz0JyelSDEz4GiQXu8DXy79D0oglSFAKsiVBdzO6MD2eRtyclovfdr/OdPVwA==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-8.4.0.tgz",
+      "integrity": "sha512-VccQ0s4WOxVkIN0slBNM4CIo5jMf46Mc6gazwIWyyng/MvjuEaXO/yYl3ihL9wFww41FDKXiTy3alOc4WWyIVQ==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "mutation-testing-metrics": "3.0.2",
-        "mutation-testing-report-schema": "3.0.2",
-        "tslib": "~2.6.2",
+        "mutation-testing-metrics": "3.1.1",
+        "mutation-testing-report-schema": "3.1.1",
+        "tslib": "~2.6.3",
         "typed-inject": "~4.0.0"
       },
       "engines": {
@@ -1452,39 +1688,39 @@
       }
     },
     "node_modules/@stryker-mutator/core": {
-      "version": "8.2.6",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-8.2.6.tgz",
-      "integrity": "sha512-F3JaVOJn+m2xEzNXFrdWl0/34WOnnqjrBADyvxTfoejP8k/oz6R89+QPrR8RwuhTVZUdrmakNkHRPXh9CsaWkw==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-8.4.0.tgz",
+      "integrity": "sha512-vqdggnLFpr6uG/JOwiRYmk62xDJmTrj42gx7Kvth1AAj8txIVeCxcmh0o6gMG31vS22NGkkSzW8uYIxT/gfyKg==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "@stryker-mutator/api": "8.2.6",
-        "@stryker-mutator/instrumenter": "8.2.6",
-        "@stryker-mutator/util": "8.2.6",
-        "ajv": "~8.12.0",
+        "@inquirer/prompts": "^5.3.6",
+        "@stryker-mutator/api": "8.4.0",
+        "@stryker-mutator/instrumenter": "8.4.0",
+        "@stryker-mutator/util": "8.4.0",
+        "ajv": "~8.17.1",
         "chalk": "~5.3.0",
-        "commander": "~12.0.0",
+        "commander": "~12.1.0",
         "diff-match-patch": "1.0.5",
         "emoji-regex": "~10.3.0",
-        "execa": "~8.0.1",
+        "execa": "~9.3.0",
         "file-url": "~4.0.0",
-        "get-port": "~7.0.0",
-        "glob": "~10.3.10",
-        "inquirer": "~9.2.13",
+        "get-port": "~7.1.0",
         "lodash.groupby": "~4.6.0",
         "log4js": "~6.9.1",
-        "minimatch": "~9.0.3",
-        "mutation-testing-elements": "3.0.2",
-        "mutation-testing-metrics": "3.0.2",
-        "mutation-testing-report-schema": "3.0.2",
+        "minimatch": "~9.0.5",
+        "mutation-testing-elements": "3.1.1",
+        "mutation-testing-metrics": "3.1.1",
+        "mutation-testing-report-schema": "3.1.1",
         "npm-run-path": "~5.3.0",
         "progress": "~2.0.3",
         "rxjs": "~7.8.1",
-        "semver": "^7.5.4",
+        "semver": "^7.6.3",
         "source-map": "~0.7.4",
         "tree-kill": "~1.2.2",
-        "tslib": "2.6.2",
+        "tslib": "2.6.3",
         "typed-inject": "~4.0.0",
-        "typed-rest-client": "~1.8.11"
+        "typed-rest-client": "~2.0.2"
       },
       "bin": {
         "stryker": "bin/stryker.js"
@@ -1494,55 +1730,60 @@
       }
     },
     "node_modules/@stryker-mutator/instrumenter": {
-      "version": "8.2.6",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-8.2.6.tgz",
-      "integrity": "sha512-2o9ffO4yBxAtCbnOsOAojQmBI4IZcFTCMW9o7CaTThNTQ6j/8gLaU1suxt3IPCRGl30rph0skBAyKiiWaUVhMw==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-8.4.0.tgz",
+      "integrity": "sha512-thLblaLuH+hIWk53bVxFJ9gfpnlOY+zNSxGV09986QoztYXejSSqRUWe8cxPc7PKF5xVewEh4yMTJaewX7Nzfw==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "@babel/core": "~7.23.9",
-        "@babel/generator": "~7.23.6",
-        "@babel/parser": "~7.23.9",
-        "@babel/plugin-proposal-decorators": "~7.23.9",
-        "@babel/preset-typescript": "~7.23.3",
-        "@stryker-mutator/api": "8.2.6",
-        "@stryker-mutator/util": "8.2.6",
-        "angular-html-parser": "~5.2.0",
-        "semver": "~7.6.0",
-        "weapon-regex": "~1.3.0"
+        "@babel/core": "~7.25.2",
+        "@babel/generator": "~7.25.0",
+        "@babel/parser": "~7.25.0",
+        "@babel/plugin-proposal-decorators": "~7.24.7",
+        "@babel/plugin-proposal-explicit-resource-management": "^7.24.7",
+        "@babel/preset-typescript": "~7.24.7",
+        "@stryker-mutator/api": "8.4.0",
+        "@stryker-mutator/util": "8.4.0",
+        "angular-html-parser": "~6.0.2",
+        "semver": "~7.6.3",
+        "weapon-regex": "~1.3.2"
       },
       "engines": {
         "node": ">=18.0.0"
       }
     },
     "node_modules/@stryker-mutator/mocha-runner": {
-      "version": "8.2.6",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-8.2.6.tgz",
-      "integrity": "sha512-WIoNECVBa5mjWJSLu8U6gnDYeeEt7/Y2iIwT75SJqJ4K317fslth2DKlfcXDZaUmdNGxfhvtf7MKOcsbczwboQ==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-8.4.0.tgz",
+      "integrity": "sha512-7A83OFZO7vx6U63TF3NLGzEVWZeEPFA9NR925KaX+4u/5pl8UbAP9L3jJLnPQrkZJnFivb4KXXaHZQkaKqcX/A==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "@stryker-mutator/api": "8.2.6",
-        "@stryker-mutator/util": "8.2.6",
-        "tslib": "~2.6.2"
+        "@stryker-mutator/api": "8.4.0",
+        "@stryker-mutator/util": "8.4.0",
+        "tslib": "~2.6.3"
       },
       "engines": {
         "node": ">=18.0.0"
       },
       "peerDependencies": {
-        "@stryker-mutator/core": "~8.2.0",
+        "@stryker-mutator/core": "~8.4.0",
         "mocha": ">= 7.2 < 11"
       }
     },
     "node_modules/@stryker-mutator/util": {
-      "version": "8.2.6",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-8.2.6.tgz",
-      "integrity": "sha512-2jmSYmrbGqt59JBkv1TvoOwQpUccCL3c90FLZIWg1zBNwj6zeOrwh734E5dKswDaC+BudQ3FtwlWB5augSuo1w==",
-      "dev": true
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-8.4.0.tgz",
+      "integrity": "sha512-dvDBmIrKpkqICO/7kcmfTzs+dsS1dA61q6XbbF+uB+WSsNLUHMfft0XKQg6BwLY+NLlis4pFN5CJz6gI7bfwxA==",
+      "dev": true,
+      "license": "Apache-2.0"
     },
     "node_modules/@szmarczak/http-timer": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
       "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "defer-to-connect": "^2.0.1"
       },
@@ -1551,9 +1792,9 @@
       }
     },
     "node_modules/@types/eslint": {
-      "version": "8.56.10",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
-      "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
+      "version": "9.6.0",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
+      "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1565,93 +1806,125 @@
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
       "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/hast": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+      "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
     },
     "node_modules/@types/http-cache-semantics": {
       "version": "4.0.4",
       "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
       "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@types/json-schema": {
       "version": "7.0.15",
       "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
       "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@types/json5": {
       "version": "0.0.29",
       "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
       "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@types/minimatch": {
       "version": "3.0.5",
       "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
       "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@types/minimist": {
       "version": "1.2.5",
       "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
       "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@types/mocha": {
-      "version": "10.0.6",
-      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz",
-      "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==",
-      "dev": true
+      "version": "10.0.7",
+      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz",
+      "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/mute-stream": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz",
+      "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
     },
     "node_modules/@types/node": {
-      "version": "20.10.7",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz",
-      "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==",
+      "version": "22.2.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
+      "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "undici-types": "~5.26.4"
+        "undici-types": "~6.13.0"
       }
     },
     "node_modules/@types/normalize-package-data": {
       "version": "2.4.4",
       "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
       "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/unist": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+      "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/wrap-ansi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz",
+      "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/@types/yauzl": {
       "version": "2.10.3",
       "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
       "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@types/node": "*"
       }
     },
-    "node_modules/@typescript-eslint/types": {
-      "version": "7.9.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz",
-      "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
     "node_modules/@ungap/structured-clone": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
       "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/@xml-tools/parser": {
       "version": "1.0.11",
       "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz",
       "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "chevrotain": "7.1.1"
       }
@@ -1661,6 +1934,7 @@
       "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
       "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "event-target-shim": "^5.0.0"
       },
@@ -1669,10 +1943,11 @@
       }
     },
     "node_modules/acorn": {
-      "version": "8.11.3",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
-      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+      "version": "8.12.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+      "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "acorn": "bin/acorn"
       },
@@ -1685,22 +1960,23 @@
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
       "dev": true,
+      "license": "MIT",
       "peerDependencies": {
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
     "node_modules/addons-linter": {
-      "version": "6.28.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.28.0.tgz",
-      "integrity": "sha512-fCTjXL/yG4hwq74JG8tQdrvEu0OvGrEN9yU+Df0020RDtHl3g/tTCyMeC4G1uyk8IuyMzp4myCBNnOGC7MWSQQ==",
+      "version": "6.33.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.33.0.tgz",
+      "integrity": "sha512-FOXyI3v4HTUFCmKdyUH2eC1a6Efekuknq7yqMEIX1pl05USZuUtVO/0Mh+ZbA28Am26S62G5RbQghK7GTxtLhQ==",
       "dev": true,
       "license": "MPL-2.0",
       "dependencies": {
         "@fluent/syntax": "0.19.0",
-        "@mdn/browser-compat-data": "5.5.29",
+        "@mdn/browser-compat-data": "5.5.40",
         "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "9.10.1",
-        "ajv": "8.13.0",
+        "addons-scanner-utils": "9.11.0",
+        "ajv": "8.17.1",
         "chalk": "4.1.2",
         "cheerio": "1.0.0-rc.12",
         "columnify": "1.6.0",
@@ -1709,10 +1985,10 @@
         "eslint": "8.57.0",
         "eslint-plugin-no-unsanitized": "4.0.2",
         "eslint-visitor-keys": "4.0.0",
-        "espree": "10.0.1",
+        "espree": "10.1.0",
         "esprima": "4.0.1",
         "fast-json-patch": "3.1.1",
-        "glob": "10.4.1",
+        "glob": "11.0.0",
         "image-size": "1.1.1",
         "is-mergeable-object": "1.1.1",
         "jed": "1.1.1",
@@ -1720,7 +1996,7 @@
         "os-locale": "5.0.0",
         "pino": "8.20.0",
         "relaxed-json": "1.0.3",
-        "semver": "7.6.2",
+        "semver": "7.6.3",
         "sha.js": "2.4.11",
         "source-map-support": "0.5.21",
         "tosource": "1.0.0",
@@ -1735,62 +2011,12 @@
         "node": ">=16.0.0"
       }
     },
-    "node_modules/addons-linter/node_modules/addons-scanner-utils": {
-      "version": "9.10.1",
-      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.10.1.tgz",
-      "integrity": "sha512-Tz9OUQx9Ja0TyQ+H2GakB9KlJ50myI6ESBGRlA8N80nHBzMjjPRFGm0APADSaCd5NP74SrFtEvL4TRpDwZXETA==",
-      "dev": true,
-      "dependencies": {
-        "@types/yauzl": "2.10.3",
-        "common-tags": "1.8.2",
-        "first-chunk-stream": "3.0.0",
-        "strip-bom-stream": "4.0.0",
-        "upath": "2.0.1",
-        "yauzl": "2.10.0"
-      },
-      "peerDependencies": {
-        "body-parser": "1.20.2",
-        "express": "4.18.3",
-        "node-fetch": "2.6.11",
-        "safe-compare": "1.1.4"
-      },
-      "peerDependenciesMeta": {
-        "body-parser": {
-          "optional": true
-        },
-        "express": {
-          "optional": true
-        },
-        "node-fetch": {
-          "optional": true
-        },
-        "safe-compare": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/addons-linter/node_modules/ajv": {
-      "version": "8.13.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
-      "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.4.1"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
     "node_modules/addons-linter/node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.1.0",
         "supports-color": "^7.1.0"
@@ -1799,78 +2025,7 @@
         "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/addons-linter/node_modules/eslint-visitor-keys": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
-      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
-      "dev": true,
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/addons-linter/node_modules/espree": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz",
-      "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^8.11.3",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/addons-linter/node_modules/glob": {
-      "version": "10.4.1",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz",
-      "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/addons-linter/node_modules/jackspeak": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz",
-      "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==",
-      "dev": true,
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "@isaacs/cliui": "^8.0.2"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      },
-      "optionalDependencies": {
-        "@pkgjs/parseargs": "^0.11.0"
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
     "node_modules/addons-linter/node_modules/supports-color": {
@@ -1878,6 +2033,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -1889,16 +2045,52 @@
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz",
       "integrity": "sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==",
-      "dev": true
+      "dev": true,
+      "license": "MPL-2.0"
+    },
+    "node_modules/addons-scanner-utils": {
+      "version": "9.11.0",
+      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.11.0.tgz",
+      "integrity": "sha512-X95V8ymnue9EHmOLz3zJTGHvHDFlWKiavlH+kJKOlv2sJDWFvD3TWeJMHJgxS9GKOqT/545mOXvX3vuuGGum+g==",
+      "dev": true,
+      "license": "MPL-2.0",
+      "dependencies": {
+        "@types/yauzl": "2.10.3",
+        "common-tags": "1.8.2",
+        "first-chunk-stream": "3.0.0",
+        "strip-bom-stream": "4.0.0",
+        "upath": "2.0.1",
+        "yauzl": "2.10.0"
+      },
+      "peerDependencies": {
+        "body-parser": "1.20.2",
+        "express": "4.19.2",
+        "node-fetch": "2.6.11",
+        "safe-compare": "1.1.4"
+      },
+      "peerDependenciesMeta": {
+        "body-parser": {
+          "optional": true
+        },
+        "express": {
+          "optional": true
+        },
+        "node-fetch": {
+          "optional": true
+        },
+        "safe-compare": {
+          "optional": true
+        }
+      }
     },
     "node_modules/adm-zip": {
-      "version": "0.5.12",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.12.tgz",
-      "integrity": "sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==",
+      "version": "0.5.15",
+      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.15.tgz",
+      "integrity": "sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=6.0"
+        "node": ">=12.0"
       }
     },
     "node_modules/agent-base": {
@@ -1915,15 +2107,16 @@
       }
     },
     "node_modules/ajv": {
-      "version": "8.12.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-      "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
         "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
+        "require-from-string": "^2.0.2"
       },
       "funding": {
         "type": "github",
@@ -1935,6 +2128,7 @@
       "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
       "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
       "dev": true,
+      "license": "MIT",
       "peerDependencies": {
         "ajv": "^8.5.0"
       },
@@ -1949,15 +2143,17 @@
       "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
       "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
       "dev": true,
+      "license": "MIT",
       "peerDependencies": {
         "ajv": ">=5.0.0"
       }
     },
     "node_modules/angular-html-parser": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/angular-html-parser/-/angular-html-parser-5.2.0.tgz",
-      "integrity": "sha512-8S/8g5iMcuGhRmBUJ+xuXm9hdjqIcaky2z52RA7tSyz9tWN0mgiP/JR9+kx/SiS1REJpTXnEKpMCMEeVVIeo3A==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/angular-html-parser/-/angular-html-parser-6.0.2.tgz",
+      "integrity": "sha512-8+sH1TwYxv8XsQes1psxTHMtWRBbJFA/jY0ThqpT4AgCiRdhTtRxru0vlBfyRJpL9CHd3G06k871bR2vyqaM6A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "tslib": "^2.6.2"
       },
@@ -1970,15 +2166,39 @@
       "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
       "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "string-width": "^4.1.0"
       }
     },
+    "node_modules/ansi-align/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/ansi-align/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/ansi-colors": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
-      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+      "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -1988,6 +2208,7 @@
       "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
       "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "type-fest": "^0.21.3"
       },
@@ -2003,21 +2224,17 @@
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/ansi-sequence-parser": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz",
-      "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==",
-      "dev": true
-    },
     "node_modules/ansi-styles": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "color-convert": "^2.0.1"
       },
@@ -2040,6 +2257,7 @@
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
       "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "normalize-path": "^3.0.0",
         "picomatch": "^2.0.4"
@@ -2053,6 +2271,7 @@
       "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
       "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=14"
       }
@@ -2061,16 +2280,21 @@
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-      "dev": true
+      "dev": true,
+      "license": "Python-2.0"
     },
     "node_modules/array-buffer-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
-      "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+      "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "is-array-buffer": "^3.0.1"
+        "call-bind": "^1.0.5",
+        "is-array-buffer": "^3.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -2081,6 +2305,7 @@
       "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
       "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
@@ -2089,15 +2314,17 @@
       }
     },
     "node_modules/array-includes": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
-      "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1",
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.4",
         "is-string": "^1.0.7"
       },
       "engines": {
@@ -2112,21 +2339,24 @@
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
       "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
-      "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0",
-        "get-intrinsic": "^1.2.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-shim-unscopables": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -2140,6 +2370,7 @@
       "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
       "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.2",
         "define-properties": "^1.2.0",
@@ -2158,6 +2389,7 @@
       "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
       "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.2",
         "define-properties": "^1.2.0",
@@ -2172,17 +2404,19 @@
       }
     },
     "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
-      "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "array-buffer-byte-length": "^1.0.0",
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1",
-        "is-array-buffer": "^3.0.2",
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.2.1",
+        "get-intrinsic": "^1.2.3",
+        "is-array-buffer": "^3.0.4",
         "is-shared-array-buffer": "^1.0.2"
       },
       "engines": {
@@ -2197,6 +2431,7 @@
       "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
       "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -2215,7 +2450,8 @@
       "version": "3.2.3",
       "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
       "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/at-least-node": {
       "version": "1.0.0",
@@ -2232,15 +2468,20 @@
       "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
       "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8.0.0"
       }
     },
     "node_modules/available-typed-arrays": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
-      "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
       "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "possible-typed-array-names": "^1.0.0"
+      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -2252,7 +2493,8 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/base64-js": {
       "version": "1.5.1",
@@ -2272,13 +2514,15 @@
           "type": "consulting",
           "url": "https://feross.org/support"
         }
-      ]
+      ],
+      "license": "MIT"
     },
     "node_modules/basic-auth": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
       "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "safe-buffer": "5.1.2"
       },
@@ -2297,23 +2541,16 @@
       }
     },
     "node_modules/binary-extensions": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
-      }
-    },
-    "node_modules/bl": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
-      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
-      "dev": true,
-      "dependencies": {
-        "buffer": "^5.5.0",
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/bluebird": {
@@ -2327,13 +2564,15 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
       "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/boxen": {
       "version": "7.1.1",
       "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz",
       "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-align": "^3.0.1",
         "camelcase": "^7.0.1",
@@ -2356,6 +2595,7 @@
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
       "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -2368,6 +2608,7 @@
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
       "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -2380,6 +2621,7 @@
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
       "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=14.16"
       },
@@ -2387,34 +2629,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/boxen/node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true
-    },
-    "node_modules/boxen/node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
-      "dev": true,
-      "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/boxen/node_modules/strip-ansi": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
       "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^6.0.1"
       },
@@ -2430,6 +2650,7 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
       "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=12.20"
       },
@@ -2442,6 +2663,7 @@
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
       "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^6.1.0",
         "string-width": "^5.0.1",
@@ -2472,6 +2694,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
       "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0"
       }
@@ -2493,12 +2716,13 @@
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
       "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/browserslist": {
-      "version": "4.23.0",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
-      "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
+      "version": "4.23.3",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
       "dev": true,
       "funding": [
         {
@@ -2516,10 +2740,10 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001587",
-        "electron-to-chromium": "^1.4.668",
-        "node-releases": "^2.0.14",
-        "update-browserslist-db": "^1.0.13"
+        "caniuse-lite": "^1.0.30001646",
+        "electron-to-chromium": "^1.5.4",
+        "node-releases": "^2.0.18",
+        "update-browserslist-db": "^1.1.0"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -2529,9 +2753,9 @@
       }
     },
     "node_modules/buffer": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
-      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
       "dev": true,
       "funding": [
         {
@@ -2547,9 +2771,10 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "dependencies": {
         "base64-js": "^1.3.1",
-        "ieee754": "^1.1.13"
+        "ieee754": "^1.2.1"
       }
     },
     "node_modules/buffer-crc32": {
@@ -2557,6 +2782,7 @@
       "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
       "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "*"
       }
@@ -2565,13 +2791,15 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
       "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/builtin-modules": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
       "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       },
@@ -2579,15 +2807,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/builtins": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
-      "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
-      "dev": true,
-      "dependencies": {
-        "semver": "^7.0.0"
-      }
-    },
     "node_modules/bundle-name": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz",
@@ -2612,6 +2831,7 @@
       "engines": [
         "node >=0.10.0"
       ],
+      "license": "MIT",
       "bin": {
         "bunyan": "bin/bunyan"
       },
@@ -2627,6 +2847,7 @@
       "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
       "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=14.16"
       }
@@ -2636,6 +2857,7 @@
       "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
       "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@types/http-cache-semantics": "^4.0.2",
         "get-stream": "^6.0.1",
@@ -2654,6 +2876,7 @@
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
       "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -2662,14 +2885,20 @@
       }
     },
     "node_modules/call-bind": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
-      "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+      "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
         "function-bind": "^1.1.2",
-        "get-intrinsic": "^1.2.1",
-        "set-function-length": "^1.1.1"
+        "get-intrinsic": "^1.2.4",
+        "set-function-length": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -2680,6 +2909,7 @@
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
       "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -2689,6 +2919,7 @@
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
       "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -2698,6 +2929,7 @@
       "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
       "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "camelcase": "^5.3.1",
         "map-obj": "^4.0.0",
@@ -2711,9 +2943,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001620",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz",
-      "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==",
+      "version": "1.0.30001651",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
       "dev": true,
       "funding": [
         {
@@ -2736,6 +2968,7 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
       "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.17.0 || ^14.13 || >=16.0.0"
       },
@@ -2747,13 +2980,15 @@
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
       "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/cheerio": {
       "version": "1.0.0-rc.12",
       "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
       "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "cheerio-select": "^2.1.0",
         "dom-serializer": "^2.0.0",
@@ -2775,6 +3010,7 @@
       "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
       "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boolbase": "^1.0.0",
         "css-select": "^5.1.0",
@@ -2792,21 +3028,17 @@
       "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz",
       "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "regexp-to-ast": "0.5.0"
       }
     },
     "node_modules/chokidar": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
       "dev": true,
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://paulmillr.com/funding/"
-        }
-      ],
+      "license": "MIT",
       "dependencies": {
         "anymatch": "~3.1.2",
         "braces": "~3.0.2",
@@ -2819,6 +3051,9 @@
       "engines": {
         "node": ">= 8.10.0"
       },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
       "optionalDependencies": {
         "fsevents": "~2.3.2"
       }
@@ -2828,6 +3063,7 @@
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "is-glob": "^4.0.1"
       },
@@ -2840,6 +3076,7 @@
       "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz",
       "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "@types/node": "*",
         "escape-string-regexp": "^4.0.0",
@@ -2864,6 +3101,7 @@
           "url": "https://github.com/sponsors/sibiraj-s"
         }
       ],
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -2873,6 +3111,7 @@
       "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz",
       "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "escape-string-regexp": "^1.0.5"
       },
@@ -2885,6 +3124,7 @@
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
       "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.0"
       }
@@ -2894,6 +3134,7 @@
       "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
       "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -2901,23 +3142,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/cli-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-      "dev": true,
-      "dependencies": {
-        "restore-cursor": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/cli-spinners": {
       "version": "2.9.2",
       "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
       "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       },
@@ -2930,6 +3160,7 @@
       "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
       "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">= 12"
       }
@@ -2939,13 +3170,36 @@
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
       "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
       "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/cliui/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/cliui/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.1",
-        "wrap-ansi": "^7.0.0"
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=8"
       }
     },
     "node_modules/cliui/node_modules/wrap-ansi": {
@@ -2953,6 +3207,7 @@
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
       "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
@@ -2970,6 +3225,7 @@
       "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
       "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8"
       }
@@ -2979,6 +3235,7 @@
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
       "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "color-name": "~1.1.4"
       },
@@ -2990,19 +3247,22 @@
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/colord": {
       "version": "2.9.3",
       "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
       "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/columnify": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz",
       "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "strip-ansi": "^6.0.1",
         "wcwidth": "^1.0.0"
@@ -3012,10 +3272,11 @@
       }
     },
     "node_modules/commander": {
-      "version": "12.0.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz",
-      "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==",
+      "version": "12.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+      "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18"
       }
@@ -3025,6 +3286,7 @@
       "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
       "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 12.0.0"
       }
@@ -3034,6 +3296,7 @@
       "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
       "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4.0.0"
       }
@@ -3042,7 +3305,8 @@
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/concat-stream": {
       "version": "1.6.2",
@@ -3052,6 +3316,7 @@
       "engines": [
         "node >= 0.8"
       ],
+      "license": "MIT",
       "dependencies": {
         "buffer-from": "^1.0.0",
         "inherits": "^2.0.3",
@@ -3063,13 +3328,15 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
       "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/concat-stream/node_modules/readable-stream": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
       "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "core-util-is": "~1.0.0",
         "inherits": "~2.0.3",
@@ -3085,6 +3352,7 @@
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "safe-buffer": "~5.1.0"
       }
@@ -3094,6 +3362,7 @@
       "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
       "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ini": "^1.3.4",
         "proto-list": "~1.2.1"
@@ -3104,6 +3373,7 @@
       "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz",
       "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "dot-prop": "^6.0.1",
         "graceful-fs": "^4.2.6",
@@ -3122,13 +3392,15 @@
       "version": "3.0.7",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/configstore/node_modules/write-file-atomic": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
       "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "imurmurhash": "^0.1.4",
         "is-typedarray": "^1.0.0",
@@ -3140,22 +3412,24 @@
       "version": "2.15.3",
       "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
       "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/convert-source-map": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
       "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/core-js-compat": {
-      "version": "3.37.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
-      "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
+      "version": "3.38.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
+      "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.0"
+        "browserslist": "^4.23.3"
       },
       "funding": {
         "type": "opencollective",
@@ -3163,36 +3437,47 @@
       }
     },
     "node_modules/core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
-      "dev": true
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/corser": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
       "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4.0"
       }
     },
     "node_modules/cosmiconfig": {
-      "version": "8.1.3",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz",
-      "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==",
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+      "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "import-fresh": "^3.2.1",
+        "env-paths": "^2.2.1",
+        "import-fresh": "^3.3.0",
         "js-yaml": "^4.1.0",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0"
+        "parse-json": "^5.2.0"
       },
       "engines": {
         "node": ">=14"
       },
       "funding": {
         "url": "https://github.com/sponsors/d-fischer"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.9.5"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
     "node_modules/cross-spawn": {
@@ -3200,6 +3485,7 @@
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
       "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "path-key": "^3.1.0",
         "shebang-command": "^2.0.0",
@@ -3214,6 +3500,7 @@
       "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
       "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "type-fest": "^1.0.1"
       },
@@ -3229,6 +3516,7 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
       "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=10"
       },
@@ -3251,6 +3539,7 @@
       "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
       "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boolbase": "^1.0.0",
         "css-what": "^6.1.0",
@@ -3267,6 +3556,7 @@
       "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
       "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "mdn-data": "2.0.30",
         "source-map-js": "^1.0.1"
@@ -3280,6 +3570,7 @@
       "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
       "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "engines": {
         "node": ">= 6"
       },
@@ -3292,6 +3583,7 @@
       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
       "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "cssesc": "bin/cssesc"
       },
@@ -3309,11 +3601,66 @@
         "node": ">= 12"
       }
     },
+    "node_modules/data-view-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+      "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/data-view-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+      "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/data-view-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/date-format": {
       "version": "4.0.14",
       "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz",
       "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4.0"
       }
@@ -3322,13 +3669,15 @@
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
       "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ms": "2.1.2"
       },
@@ -3346,6 +3695,7 @@
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
       "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -3355,6 +3705,7 @@
       "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
       "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "decamelize": "^1.1.0",
         "map-obj": "^1.0.0"
@@ -3371,6 +3722,7 @@
       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
       "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -3380,6 +3732,7 @@
       "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
       "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "mimic-response": "^3.1.0"
       },
@@ -3395,6 +3748,7 @@
       "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
       "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -3407,6 +3761,7 @@
       "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
       "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4.0.0"
       }
@@ -3415,13 +3770,15 @@
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
       "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/deepmerge": {
       "version": "4.3.1",
       "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
       "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -3509,6 +3866,19 @@
         "node": ">=14.18.0"
       }
     },
+    "node_modules/default-browser/node_modules/is-stream": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+      "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/default-browser/node_modules/signal-exit": {
       "version": "3.0.7",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -3516,11 +3886,25 @@
       "dev": true,
       "license": "ISC"
     },
+    "node_modules/default-browser/node_modules/strip-final-newline": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/defaults": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
       "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "clone": "^1.0.2"
       },
@@ -3533,22 +3917,27 @@
       "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
       "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       }
     },
     "node_modules/define-data-property": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
-      "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "get-intrinsic": "^1.2.1",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.0"
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.0.1"
       },
       "engines": {
         "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/define-lazy-prop": {
@@ -3569,6 +3958,7 @@
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
       "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "define-data-property": "^1.0.1",
         "has-property-descriptors": "^1.0.0",
@@ -3581,11 +3971,23 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/des.js": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
+      "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
     "node_modules/diff": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
-      "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+      "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "engines": {
         "node": ">=0.3.1"
       }
@@ -3594,13 +3996,15 @@
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
       "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==",
-      "dev": true
+      "dev": true,
+      "license": "Apache-2.0"
     },
     "node_modules/dir-glob": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
       "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "path-type": "^4.0.0"
       },
@@ -3613,6 +4017,7 @@
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
       "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "esutils": "^2.0.2"
       },
@@ -3625,6 +4030,7 @@
       "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
       "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "domelementtype": "^2.3.0",
         "domhandler": "^5.0.2",
@@ -3644,13 +4050,15 @@
           "type": "github",
           "url": "https://github.com/sponsors/fb55"
         }
-      ]
+      ],
+      "license": "BSD-2-Clause"
     },
     "node_modules/domhandler": {
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
       "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "domelementtype": "^2.3.0"
       },
@@ -3666,6 +4074,7 @@
       "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
       "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "dom-serializer": "^2.0.0",
         "domelementtype": "^2.3.0",
@@ -3680,6 +4089,7 @@
       "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
       "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-obj": "^2.0.0"
       },
@@ -3696,6 +4106,7 @@
       "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
       "dev": true,
       "hasInstallScript": true,
+      "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
         "nan": "^2.14.0"
@@ -3708,12 +4119,13 @@
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.774",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz",
-      "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==",
+      "version": "1.5.6",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
+      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
       "dev": true,
       "license": "ISC"
     },
@@ -3721,21 +4133,23 @@
       "version": "10.3.0",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
       "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/end-of-stream": {
       "version": "1.4.4",
       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
       "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "once": "^1.4.0"
       }
     },
     "node_modules/enhanced-resolve": {
-      "version": "5.16.1",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
-      "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
+      "version": "5.17.1",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+      "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3751,6 +4165,7 @@
       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
       "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "engines": {
         "node": ">=0.12"
       },
@@ -3763,6 +4178,7 @@
       "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
       "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -3772,55 +4188,64 @@
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
       "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-arrayish": "^0.2.1"
       }
     },
     "node_modules/es-abstract": {
-      "version": "1.22.3",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
-      "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
+      "version": "1.23.3",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+      "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "array-buffer-byte-length": "^1.0.0",
-        "arraybuffer.prototype.slice": "^1.0.2",
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.5",
-        "es-set-tostringtag": "^2.0.1",
+        "array-buffer-byte-length": "^1.0.1",
+        "arraybuffer.prototype.slice": "^1.0.3",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
+        "data-view-buffer": "^1.0.1",
+        "data-view-byte-length": "^1.0.1",
+        "data-view-byte-offset": "^1.0.0",
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-set-tostringtag": "^2.0.3",
         "es-to-primitive": "^1.2.1",
         "function.prototype.name": "^1.1.6",
-        "get-intrinsic": "^1.2.2",
-        "get-symbol-description": "^1.0.0",
+        "get-intrinsic": "^1.2.4",
+        "get-symbol-description": "^1.0.2",
         "globalthis": "^1.0.3",
         "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.0",
-        "has-proto": "^1.0.1",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.0.3",
         "has-symbols": "^1.0.3",
-        "hasown": "^2.0.0",
-        "internal-slot": "^1.0.5",
-        "is-array-buffer": "^3.0.2",
+        "hasown": "^2.0.2",
+        "internal-slot": "^1.0.7",
+        "is-array-buffer": "^3.0.4",
         "is-callable": "^1.2.7",
-        "is-negative-zero": "^2.0.2",
+        "is-data-view": "^1.0.1",
+        "is-negative-zero": "^2.0.3",
         "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
+        "is-shared-array-buffer": "^1.0.3",
         "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.12",
+        "is-typed-array": "^1.1.13",
         "is-weakref": "^1.0.2",
         "object-inspect": "^1.13.1",
         "object-keys": "^1.1.1",
-        "object.assign": "^4.1.4",
-        "regexp.prototype.flags": "^1.5.1",
-        "safe-array-concat": "^1.0.1",
-        "safe-regex-test": "^1.0.0",
-        "string.prototype.trim": "^1.2.8",
-        "string.prototype.trimend": "^1.0.7",
-        "string.prototype.trimstart": "^1.0.7",
-        "typed-array-buffer": "^1.0.0",
-        "typed-array-byte-length": "^1.0.0",
-        "typed-array-byte-offset": "^1.0.0",
-        "typed-array-length": "^1.0.4",
+        "object.assign": "^4.1.5",
+        "regexp.prototype.flags": "^1.5.2",
+        "safe-array-concat": "^1.1.2",
+        "safe-regex-test": "^1.0.3",
+        "string.prototype.trim": "^1.2.9",
+        "string.prototype.trimend": "^1.0.8",
+        "string.prototype.trimstart": "^1.0.8",
+        "typed-array-buffer": "^1.0.2",
+        "typed-array-byte-length": "^1.0.1",
+        "typed-array-byte-offset": "^1.0.2",
+        "typed-array-length": "^1.0.6",
         "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.13"
+        "which-typed-array": "^1.1.15"
       },
       "engines": {
         "node": ">= 0.4"
@@ -3829,15 +4254,59 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/es-define-property": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+      "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+      "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/es-set-tostringtag": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
-      "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+      "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "get-intrinsic": "^1.2.2",
-        "has-tostringtag": "^1.0.0",
-        "hasown": "^2.0.0"
+        "get-intrinsic": "^1.2.4",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -3848,6 +4317,7 @@
       "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
       "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "hasown": "^2.0.0"
       }
@@ -3857,6 +4327,7 @@
       "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
       "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-callable": "^1.1.4",
         "is-date-object": "^1.0.1",
@@ -3877,10 +4348,11 @@
       "license": "MIT"
     },
     "node_modules/escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -3890,6 +4362,7 @@
       "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz",
       "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -3902,6 +4375,7 @@
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
       "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -3914,6 +4388,7 @@
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
       "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.6.1",
@@ -3965,10 +4440,14 @@
       }
     },
     "node_modules/eslint-compat-utils": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz",
-      "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==",
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+      "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
       "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "semver": "^7.5.4"
+      },
       "engines": {
         "node": ">=12"
       },
@@ -3981,6 +4460,7 @@
       "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
       "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "debug": "^3.2.7",
         "is-core-module": "^2.13.0",
@@ -3992,15 +4472,17 @@
       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
       "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ms": "^2.1.1"
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
-      "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+      "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "debug": "^3.2.7"
       },
@@ -4018,6 +4500,7 @@
       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
       "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ms": "^2.1.1"
       }
@@ -4027,6 +4510,7 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-4.0.0.tgz",
       "integrity": "sha512-p3NY2idNIvgmQLF2/62ZskYt8gOuUgQ51smRc3Lh7FtSozpNc2sg+lniz9VaCagLZHEZTl8qGJKqE7xy8O/D/g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
@@ -4035,21 +4519,23 @@
       }
     },
     "node_modules/eslint-plugin-es-x": {
-      "version": "7.5.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz",
-      "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==",
+      "version": "7.8.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+      "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
       "dev": true,
+      "funding": [
+        "https://github.com/sponsors/ota-meshi",
+        "https://opencollective.com/eslint"
+      ],
+      "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.1.2",
-        "@eslint-community/regexpp": "^4.6.0",
-        "eslint-compat-utils": "^0.1.2"
+        "@eslint-community/regexpp": "^4.11.0",
+        "eslint-compat-utils": "^0.5.1"
       },
       "engines": {
         "node": "^14.18.0 || >=16.0.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ota-meshi"
-      },
       "peerDependencies": {
         "eslint": ">=8"
       }
@@ -4059,6 +4545,7 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
       "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "escape-string-regexp": "^1.0.5",
         "ignore": "^5.0.5"
@@ -4078,6 +4565,7 @@
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
       "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.0"
       }
@@ -4087,6 +4575,7 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
       "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "array-includes": "^3.1.7",
         "array.prototype.findlastindex": "^1.2.3",
@@ -4118,6 +4607,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -4128,6 +4618,7 @@
       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
       "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ms": "^2.1.1"
       }
@@ -4137,6 +4628,7 @@
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
       "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "esutils": "^2.0.2"
       },
@@ -4149,6 +4641,7 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -4161,25 +4654,29 @@
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
+      "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
-      "version": "48.2.6",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.6.tgz",
-      "integrity": "sha512-GNk9jtpYmoEVeD/U6yYYmd6T8vSOoPs7CL8ZeX85iD8P3qifDdLQGze6+cw9boobDthmYnnxvIoHrhuSffj09g==",
+      "version": "50.0.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.0.1.tgz",
+      "integrity": "sha512-UayhAysIk1Du8InV27WMbV4AMSJSu60+bekmeuGK2OUy4QJSFPr1srYT6AInykGkmMdRuHfDX6Q0tJEr8BtDtg==",
       "dev": true,
       "license": "BSD-3-Clause",
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.43.0",
+        "@es-joy/jsdoccomment": "~0.46.0",
         "are-docs-informative": "^0.0.2",
         "comment-parser": "1.4.1",
-        "debug": "^4.3.4",
+        "debug": "^4.3.5",
         "escape-string-regexp": "^4.0.0",
-        "esquery": "^1.5.0",
-        "semver": "^7.6.1",
-        "spdx-expression-parse": "^4.0.0"
+        "espree": "^10.1.0",
+        "esquery": "^1.6.0",
+        "parse-imports": "^2.1.1",
+        "semver": "^7.6.3",
+        "spdx-expression-parse": "^4.0.0",
+        "synckit": "^0.9.1"
       },
       "engines": {
         "node": ">=18"
@@ -4189,9 +4686,9 @@
       }
     },
     "node_modules/eslint-plugin-mocha": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.3.tgz",
-      "integrity": "sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==",
+      "version": "10.5.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.5.0.tgz",
+      "integrity": "sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4211,6 +4708,7 @@
       "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
       "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "type-fest": "^0.20.2"
       },
@@ -4226,6 +4724,7 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
       "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=10"
       },
@@ -4234,19 +4733,19 @@
       }
     },
     "node_modules/eslint-plugin-n": {
-      "version": "17.7.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.7.0.tgz",
-      "integrity": "sha512-4Jg4ZKVE4VjHig2caBqPHYNW5na84RVufUuipFLJbgM/G57O6FdpUKJbHakCDJb/yjQuyqVzYWRtU3HNYaZUwg==",
+      "version": "17.10.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.2.tgz",
+      "integrity": "sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "enhanced-resolve": "^5.15.0",
+        "enhanced-resolve": "^5.17.0",
         "eslint-plugin-es-x": "^7.5.0",
         "get-tsconfig": "^4.7.0",
-        "globals": "^15.0.0",
+        "globals": "^15.8.0",
         "ignore": "^5.2.4",
-        "minimatch": "^9.0.0",
+        "minimatch": "^9.0.5",
         "semver": "^7.5.3"
       },
       "engines": {
@@ -4260,9 +4759,9 @@
       }
     },
     "node_modules/eslint-plugin-n/node_modules/globals": {
-      "version": "15.2.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-15.2.0.tgz",
-      "integrity": "sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==",
+      "version": "15.9.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
+      "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -4277,18 +4776,19 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz",
       "integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==",
       "dev": true,
+      "license": "MPL-2.0",
       "peerDependencies": {
         "eslint": "^6 || ^7 || ^8"
       }
     },
     "node_modules/eslint-plugin-promise": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz",
-      "integrity": "sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.1.0.tgz",
+      "integrity": "sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -4320,19 +4820,19 @@
       }
     },
     "node_modules/eslint-plugin-unicorn": {
-      "version": "53.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz",
-      "integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==",
+      "version": "55.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-55.0.0.tgz",
+      "integrity": "sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-validator-identifier": "^7.24.5",
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@eslint/eslintrc": "^3.0.2",
         "ci-info": "^4.0.0",
         "clean-regexp": "^1.0.0",
         "core-js-compat": "^3.37.0",
         "esquery": "^1.5.0",
+        "globals": "^15.7.0",
         "indent-string": "^4.0.0",
         "is-builtin-module": "^3.2.1",
         "jsesc": "^3.0.2",
@@ -4353,93 +4853,10 @@
         "eslint": ">=8.56.0"
       }
     },
-    "node_modules/eslint-plugin-unicorn/node_modules/@eslint/eslintrc": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
-      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^10.0.1",
-        "globals": "^14.0.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-plugin-unicorn/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/eslint-plugin-unicorn/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
-      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-plugin-unicorn/node_modules/espree": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz",
-      "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.11.3",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/eslint-plugin-unicorn/node_modules/globals": {
-      "version": "14.0.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
-      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+      "version": "15.9.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
+      "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -4454,6 +4871,7 @@
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
       "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
@@ -4461,31 +4879,12 @@
         "node": ">=6"
       }
     },
-    "node_modules/eslint-plugin-unicorn/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/eslint-plugin-unicorn/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/eslint-scope": {
       "version": "7.2.2",
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
       "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "esrecurse": "^4.3.0",
         "estraverse": "^5.2.0"
@@ -4502,6 +4901,7 @@
       "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
       "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "eslint-visitor-keys": "^2.0.0"
       },
@@ -4520,17 +4920,19 @@
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
       "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
         "node": ">=10"
       }
     },
     "node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -4541,6 +4943,7 @@
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
       "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
@@ -4557,6 +4960,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -4567,6 +4971,7 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.1.0",
         "supports-color": "^7.1.0"
@@ -4578,11 +4983,43 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
+    "node_modules/eslint/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/eslint/node_modules/globals": {
       "version": "13.24.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
       "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "type-fest": "^0.20.2"
       },
@@ -4597,13 +5034,15 @@
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/eslint/node_modules/minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -4616,6 +5055,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -4628,6 +5068,7 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
       "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=10"
       },
@@ -4636,17 +5077,18 @@
       }
     },
     "node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "acorn": "^8.9.0",
+        "acorn": "^8.12.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
+        "eslint-visitor-keys": "^4.0.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -4657,6 +5099,7 @@
       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
       "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "bin": {
         "esparse": "bin/esparse.js",
         "esvalidate": "bin/esvalidate.js"
@@ -4666,10 +5109,11 @@
       }
     },
     "node_modules/esquery": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
-      "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+      "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
         "estraverse": "^5.1.0"
       },
@@ -4682,6 +5126,7 @@
       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
       "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "estraverse": "^5.2.0"
       },
@@ -4694,6 +5139,7 @@
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
       "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "engines": {
         "node": ">=4.0"
       }
@@ -4703,6 +5149,7 @@
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
       "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -4712,6 +5159,7 @@
       "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
       "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -4720,35 +5168,41 @@
       "version": "4.0.7",
       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/events": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
       "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.x"
       }
     },
     "node_modules/execa": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
-      "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+      "version": "9.3.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-9.3.0.tgz",
+      "integrity": "sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
+        "@sindresorhus/merge-streams": "^4.0.0",
         "cross-spawn": "^7.0.3",
-        "get-stream": "^8.0.1",
-        "human-signals": "^5.0.0",
-        "is-stream": "^3.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^5.1.0",
-        "onetime": "^6.0.0",
+        "figures": "^6.1.0",
+        "get-stream": "^9.0.0",
+        "human-signals": "^7.0.0",
+        "is-plain-obj": "^4.1.0",
+        "is-stream": "^4.0.1",
+        "npm-run-path": "^5.2.0",
+        "pretty-ms": "^9.0.0",
         "signal-exit": "^4.1.0",
-        "strip-final-newline": "^3.0.0"
+        "strip-final-newline": "^4.0.0",
+        "yoctocolors": "^2.0.0"
       },
       "engines": {
-        "node": ">=16.17"
+        "node": "^18.19.0 || >=20.5.0"
       },
       "funding": {
         "url": "https://github.com/sindresorhus/execa?sponsor=1"
@@ -4759,6 +5213,7 @@
       "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
       "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "chardet": "^0.7.0",
         "iconv-lite": "^0.4.24",
@@ -4772,13 +5227,15 @@
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
       "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/fast-glob": {
-      "version": "3.2.12",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
-      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
         "@nodelib/fs.walk": "^1.2.3",
@@ -4795,6 +5252,7 @@
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "is-glob": "^4.0.1"
       },
@@ -4806,43 +5264,56 @@
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz",
       "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/fast-levenshtein": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
       "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/fast-redact": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz",
-      "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
+      "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
     },
+    "node_modules/fast-uri": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
+      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/fastest-levenshtein": {
       "version": "1.0.16",
       "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
       "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 4.9.1"
       }
     },
     "node_modules/fastq": {
-      "version": "1.16.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
-      "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
+      "version": "1.17.1",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "reusify": "^1.0.4"
       }
@@ -4852,6 +5323,7 @@
       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
       "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "pend": "~1.2.0"
       }
@@ -4881,34 +5353,27 @@
       }
     },
     "node_modules/figures": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
+      "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "escape-string-regexp": "^1.0.5"
+        "is-unicode-supported": "^2.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/figures/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
     "node_modules/file-entry-cache": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
       "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "flat-cache": "^3.0.4"
       },
@@ -4921,6 +5386,7 @@
       "resolved": "https://registry.npmjs.org/file-url/-/file-url-4.0.0.tgz",
       "integrity": "sha512-vRCdScQ6j3Ku6Kd7W1kZk9c++5SqD6Xz5Jotrjr/nkY714M14RFHy/AAVA2WQvpsqVAVgTbDrYyBpU205F0cLw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -4946,6 +5412,7 @@
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
       "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "locate-path": "^6.0.0",
         "path-exists": "^4.0.0"
@@ -5038,6 +5505,7 @@
       "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz",
       "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -5047,6 +5515,7 @@
       "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
       "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "bin": {
         "flat": "cli.js"
       }
@@ -5056,6 +5525,7 @@
       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
       "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "flatted": "^3.2.9",
         "keyv": "^4.5.3",
@@ -5098,15 +5568,17 @@
       "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
       "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-callable": "^1.1.3"
       }
     },
     "node_modules/foreground-child": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
-      "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+      "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "cross-spawn": "^7.0.0",
         "signal-exit": "^4.0.1"
@@ -5123,6 +5595,7 @@
       "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz",
       "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 14.17"
       }
@@ -5145,26 +5618,44 @@
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
       "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "graceful-fs": "^4.2.0",
         "jsonfile": "^4.0.0",
         "universalify": "^0.1.0"
       },
       "engines": {
-        "node": ">=6 <7 || >=8"
+        "node": ">=6 <7 || >=8"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
       }
     },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-      "dev": true
-    },
     "node_modules/function-bind": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
       "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
       "dev": true,
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -5174,6 +5665,7 @@
       "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
       "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.2",
         "define-properties": "^1.2.0",
@@ -5192,6 +5684,7 @@
       "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
       "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
       "dev": true,
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -5201,6 +5694,7 @@
       "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.4.0.tgz",
       "integrity": "sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==",
       "dev": true,
+      "license": "MPL-2.0",
       "dependencies": {
         "commander": "2.9.0",
         "shell-quote": "1.7.3",
@@ -5218,6 +5712,7 @@
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
       "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "graceful-readlink": ">= 1.0.0"
       },
@@ -5229,13 +5724,15 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz",
       "integrity": "sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/fx-runner/node_modules/which": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz",
       "integrity": "sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "is-absolute": "^0.1.7",
         "isexe": "^1.1.1"
@@ -5249,6 +5746,7 @@
       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
       "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
@@ -5258,30 +5756,37 @@
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": "6.* || 8.* || >= 10.*"
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
-      "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
+        "es-errors": "^1.3.0",
         "function-bind": "^1.1.2",
         "has-proto": "^1.0.1",
         "has-symbols": "^1.0.3",
         "hasown": "^2.0.0"
       },
+      "engines": {
+        "node": ">= 0.4"
+      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/get-port": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.0.0.tgz",
-      "integrity": "sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz",
+      "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=16"
       },
@@ -5290,25 +5795,32 @@
       }
     },
     "node_modules/get-stream": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
-      "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
       "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sec-ant/readable-stream": "^0.4.1",
+        "is-stream": "^4.0.1"
+      },
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
+        "call-bind": "^1.0.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4"
       },
       "engines": {
         "node": ">= 0.4"
@@ -5318,10 +5830,11 @@
       }
     },
     "node_modules/get-tsconfig": {
-      "version": "4.7.2",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
-      "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+      "version": "4.7.6",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
+      "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "resolve-pkg-maps": "^1.0.0"
       },
@@ -5330,22 +5843,24 @@
       }
     },
     "node_modules/glob": {
-      "version": "10.3.10",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
-      "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
+      "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "foreground-child": "^3.1.0",
-        "jackspeak": "^2.3.5",
-        "minimatch": "^9.0.1",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
-        "path-scurry": "^1.10.1"
+        "jackspeak": "^4.0.1",
+        "minimatch": "^10.0.0",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^2.0.0"
       },
       "bin": {
         "glob": "dist/esm/bin.mjs"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": "20 || >=22"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -5356,6 +5871,7 @@
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
       "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "is-glob": "^4.0.3"
       },
@@ -5370,11 +5886,28 @@
       "dev": true,
       "license": "BSD-2-Clause"
     },
+    "node_modules/glob/node_modules/minimatch": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+      "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/global-dirs": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
       "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ini": "2.0.0"
       },
@@ -5390,6 +5923,7 @@
       "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
       "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">=10"
       }
@@ -5399,6 +5933,7 @@
       "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
       "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "global-prefix": "^3.0.0"
       },
@@ -5411,6 +5946,7 @@
       "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
       "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ini": "^1.3.5",
         "kind-of": "^6.0.2",
@@ -5425,6 +5961,7 @@
       "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
       "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "isexe": "^2.0.0"
       },
@@ -5437,17 +5974,20 @@
       "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
       "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
     },
     "node_modules/globalthis": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
-      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "define-properties": "^1.1.3"
+        "define-properties": "^1.2.1",
+        "gopd": "^1.0.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -5461,6 +6001,7 @@
       "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
       "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "array-union": "^2.1.0",
         "dir-glob": "^3.0.1",
@@ -5480,13 +6021,15 @@
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
       "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/gopd": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
       "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "get-intrinsic": "^1.1.3"
       },
@@ -5499,6 +6042,7 @@
       "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz",
       "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@sindresorhus/is": "^5.2.0",
         "@szmarczak/http-timer": "^5.0.1",
@@ -5524,6 +6068,7 @@
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
       "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -5535,31 +6080,36 @@
       "version": "4.2.11",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/graceful-readlink": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
       "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/graphemer": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
       "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/growly": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
       "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/hard-rejection": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
       "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -5569,6 +6119,7 @@
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
       "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
       "dev": true,
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -5578,27 +6129,30 @@
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
       "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/has-property-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
-      "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "get-intrinsic": "^1.2.2"
+        "es-define-property": "^1.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/has-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
-      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+      "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       },
@@ -5611,6 +6165,7 @@
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
       "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       },
@@ -5619,12 +6174,13 @@
       }
     },
     "node_modules/has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "has-symbols": "^1.0.2"
+        "has-symbols": "^1.0.3"
       },
       "engines": {
         "node": ">= 0.4"
@@ -5638,6 +6194,7 @@
       "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz",
       "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
@@ -5646,10 +6203,11 @@
       }
     },
     "node_modules/hasown": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
-      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "function-bind": "^1.1.2"
       },
@@ -5662,6 +6220,7 @@
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
       "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "he": "bin/he"
       }
@@ -5671,6 +6230,7 @@
       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
       "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "lru-cache": "^6.0.0"
       },
@@ -5683,6 +6243,7 @@
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
       "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "yallist": "^4.0.0"
       },
@@ -5694,13 +6255,15 @@
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/html-encoding-sniffer": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
       "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "whatwg-encoding": "^2.0.0"
       },
@@ -5713,6 +6276,7 @@
       "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
       "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       },
@@ -5725,6 +6289,7 @@
       "resolved": "https://registry.npmjs.org/htmlhint/-/htmlhint-1.1.4.tgz",
       "integrity": "sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "async": "3.2.3",
         "chalk": "^4.1.2",
@@ -5744,6 +6309,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -5754,6 +6320,7 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.1.0",
         "supports-color": "^7.1.0"
@@ -5770,6 +6337,7 @@
       "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
       "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || >=14"
       }
@@ -5778,7 +6346,9 @@
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
       "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
@@ -5799,6 +6369,7 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -5811,6 +6382,7 @@
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
       "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -5820,6 +6392,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -5839,6 +6412,7 @@
           "url": "https://github.com/sponsors/fb55"
         }
       ],
+      "license": "MIT",
       "dependencies": {
         "domelementtype": "^2.3.0",
         "domhandler": "^5.0.3",
@@ -5850,13 +6424,15 @@
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
       "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-2-Clause"
     },
     "node_modules/http-proxy": {
       "version": "1.18.1",
       "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
       "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "eventemitter3": "^4.0.0",
         "follow-redirects": "^1.0.0",
@@ -5871,6 +6447,7 @@
       "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz",
       "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "basic-auth": "^2.0.1",
         "chalk": "^4.1.2",
@@ -5898,6 +6475,7 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.1.0",
         "supports-color": "^7.1.0"
@@ -5914,6 +6492,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -5926,6 +6505,7 @@
       "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
       "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "quick-lru": "^5.1.1",
         "resolve-alpn": "^1.2.0"
@@ -5939,6 +6519,7 @@
       "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
       "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -5947,9 +6528,9 @@
       }
     },
     "node_modules/https-proxy-agent": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
-      "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+      "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5961,12 +6542,13 @@
       }
     },
     "node_modules/human-signals": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
-      "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-7.0.0.tgz",
+      "integrity": "sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
-        "node": ">=16.17.0"
+        "node": ">=18.18.0"
       }
     },
     "node_modules/iconv-lite": {
@@ -5974,6 +6556,7 @@
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
       "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "safer-buffer": ">= 2.1.2 < 3"
       },
@@ -5999,7 +6582,8 @@
           "type": "consulting",
           "url": "https://feross.org/support"
         }
-      ]
+      ],
+      "license": "BSD-3-Clause"
     },
     "node_modules/ignore": {
       "version": "5.3.1",
@@ -6016,6 +6600,7 @@
       "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz",
       "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "queue": "6.0.2"
       },
@@ -6030,13 +6615,15 @@
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
       "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/import-fresh": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
       "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "parent-module": "^1.0.0",
         "resolve-from": "^4.0.0"
@@ -6053,6 +6640,7 @@
       "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
       "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -6062,6 +6650,7 @@
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
       "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.19"
       }
@@ -6071,6 +6660,7 @@
       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
       "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -6079,7 +6669,9 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -6089,47 +6681,24 @@
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/ini": {
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
-      "dev": true
-    },
-    "node_modules/inquirer": {
-      "version": "9.2.13",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.13.tgz",
-      "integrity": "sha512-mUlJNemjYioZgaZXqEFlQ0z9GD8/o+pavIF3JyhzWLX4Xa9M1wioGMCxQEFmps70un9lrah2WaBl3kSRVcoV3g==",
       "dev": true,
-      "dependencies": {
-        "@ljharb/through": "^2.3.12",
-        "ansi-escapes": "^4.3.2",
-        "chalk": "^5.3.0",
-        "cli-cursor": "^3.1.0",
-        "cli-width": "^4.1.0",
-        "external-editor": "^3.1.0",
-        "figures": "^3.2.0",
-        "lodash": "^4.17.21",
-        "mute-stream": "1.0.0",
-        "ora": "^5.4.1",
-        "run-async": "^3.0.0",
-        "rxjs": "^7.8.1",
-        "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1",
-        "wrap-ansi": "^6.2.0"
-      },
-      "engines": {
-        "node": ">=14.18.0"
-      }
+      "license": "ISC"
     },
     "node_modules/internal-slot": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
-      "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+      "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "get-intrinsic": "^1.2.2",
+        "es-errors": "^1.3.0",
         "hasown": "^2.0.0",
         "side-channel": "^1.0.4"
       },
@@ -6142,6 +6711,7 @@
       "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz",
       "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       },
@@ -6154,6 +6724,7 @@
       "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz",
       "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -6163,6 +6734,7 @@
       "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
       "integrity": "sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-relative": "^0.1.0"
       },
@@ -6171,14 +6743,17 @@
       }
     },
     "node_modules/is-array-buffer": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
-      "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+      "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.0",
-        "is-typed-array": "^1.1.10"
+        "get-intrinsic": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -6188,13 +6763,15 @@
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
       "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/is-bigint": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
       "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-bigints": "^1.0.1"
       },
@@ -6207,6 +6784,7 @@
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "binary-extensions": "^2.0.0"
       },
@@ -6219,6 +6797,7 @@
       "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
       "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.2",
         "has-tostringtag": "^1.0.0"
@@ -6235,6 +6814,7 @@
       "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
       "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "builtin-modules": "^3.3.0"
       },
@@ -6250,6 +6830,7 @@
       "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
       "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       },
@@ -6262,6 +6843,7 @@
       "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
       "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ci-info": "^3.2.0"
       },
@@ -6280,17 +6862,38 @@
           "url": "https://github.com/sponsors/sibiraj-s"
         }
       ],
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
-      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "version": "2.15.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+      "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "hasown": "^2.0.0"
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-data-view": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+      "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -6301,6 +6904,7 @@
       "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
       "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-tostringtag": "^1.0.0"
       },
@@ -6316,6 +6920,7 @@
       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
       "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "is-docker": "cli.js"
       },
@@ -6331,6 +6936,7 @@
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -6340,6 +6946,7 @@
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
       "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -6349,6 +6956,7 @@
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-extglob": "^2.1.1"
       },
@@ -6396,6 +7004,7 @@
       "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
       "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "global-dirs": "^3.0.0",
         "is-path-inside": "^3.0.2"
@@ -6407,26 +7016,19 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/is-interactive": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
-      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/is-mergeable-object": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz",
       "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       },
@@ -6439,6 +7041,7 @@
       "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz",
       "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
@@ -6461,6 +7064,7 @@
       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
       "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-tostringtag": "^1.0.0"
       },
@@ -6476,6 +7080,7 @@
       "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
       "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -6485,17 +7090,19 @@
       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
       "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/is-plain-obj": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
-      "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -6506,6 +7113,7 @@
       "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
       "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -6515,6 +7123,7 @@
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
       "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.2",
         "has-tostringtag": "^1.0.0"
@@ -6536,24 +7145,29 @@
       }
     },
     "node_modules/is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+      "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2"
+        "call-bind": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/is-stream": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
-      "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -6564,6 +7178,7 @@
       "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
       "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-tostringtag": "^1.0.0"
       },
@@ -6579,6 +7194,7 @@
       "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
       "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-symbols": "^1.0.2"
       },
@@ -6590,12 +7206,13 @@
       }
     },
     "node_modules/is-typed-array": {
-      "version": "1.1.12",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
-      "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+      "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "which-typed-array": "^1.1.11"
+        "which-typed-array": "^1.1.14"
       },
       "engines": {
         "node": ">= 0.4"
@@ -6608,15 +7225,17 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
       "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
-      "dev": true
-    },
-    "node_modules/is-unicode-supported": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-unicode-supported": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz",
+      "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==",
+      "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -6626,13 +7245,15 @@
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
       "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/is-weakref": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
       "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.2"
       },
@@ -6645,6 +7266,7 @@
       "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
       "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-docker": "^2.0.0"
       },
@@ -6657,6 +7279,7 @@
       "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz",
       "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       }
@@ -6665,24 +7288,27 @@
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
       "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
       "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/jackspeak": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
-      "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz",
+      "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==",
       "dev": true,
+      "license": "BlueOak-1.0.0",
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
       },
       "engines": {
-        "node": ">=14"
+        "node": "20 || >=22"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -6695,29 +7321,39 @@
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz",
       "integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/jose": {
-      "version": "4.15.5",
-      "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.5.tgz",
-      "integrity": "sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/jose/-/jose-5.4.1.tgz",
+      "integrity": "sha512-U6QajmpV/nhL9SyfAewo000fkiRQ+Yd2H0lBxJJ9apjpOgkOcBQJWOrMo917lxLptdS/n/o/xPzMkXhF46K8hQ==",
       "dev": true,
       "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/panva"
       }
     },
+    "node_modules/js-md4": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz",
+      "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
       "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "argparse": "^2.0.1"
       },
@@ -6730,6 +7366,7 @@
       "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
       "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12.0.0"
       }
@@ -6739,6 +7376,7 @@
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
       "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
@@ -6750,13 +7388,15 @@
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
       "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/json-merge-patch": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-1.0.2.tgz",
       "integrity": "sha512-M6Vp2GN9L7cfuMXiWOmHj9bEFbeC250iVtcKQbqVgEsDVYnIsrNsbU+h/Y/PkbBQCtEa4Bez+Ebv0zfbC8ObLg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "fast-deep-equal": "^3.1.3"
       }
@@ -6765,25 +7405,29 @@
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
       "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/json-schema-traverse": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
       "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/json5": {
       "version": "2.2.3",
       "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
       "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "json5": "lib/cli.js"
       },
@@ -6792,16 +7436,18 @@
       }
     },
     "node_modules/jsonc-parser": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
-      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
-      "dev": true
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+      "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/jsonfile": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
       "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
       "dev": true,
+      "license": "MIT",
       "optionalDependencies": {
         "graceful-fs": "^4.1.6"
       }
@@ -6811,6 +7457,7 @@
       "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
       "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
       "dev": true,
+      "license": "(MIT OR GPL-3.0-or-later)",
       "dependencies": {
         "lie": "~3.3.0",
         "pako": "~1.0.2",
@@ -6822,13 +7469,15 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
       "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/jszip/node_modules/readable-stream": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
       "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "core-util-is": "~1.0.0",
         "inherits": "~2.0.3",
@@ -6844,6 +7493,7 @@
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "safe-buffer": "~5.1.0"
       }
@@ -6853,6 +7503,7 @@
       "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
       "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "json-buffer": "3.0.1"
       }
@@ -6862,14 +7513,15 @@
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
       "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
     },
     "node_modules/known-css-properties": {
-      "version": "0.31.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz",
-      "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==",
+      "version": "0.34.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz",
+      "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==",
       "dev": true,
       "license": "MIT"
     },
@@ -6878,6 +7530,7 @@
       "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz",
       "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "package-json": "^8.1.0"
       },
@@ -6893,6 +7546,7 @@
       "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz",
       "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "invert-kv": "^3.0.0"
       },
@@ -6905,6 +7559,7 @@
       "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
       "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "prelude-ls": "^1.2.1",
         "type-check": "~0.4.0"
@@ -6918,6 +7573,7 @@
       "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
       "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "immediate": "~3.0.5"
       }
@@ -6927,6 +7583,7 @@
       "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz",
       "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "debug": "^2.6.9",
         "marky": "^1.2.2"
@@ -6937,6 +7594,7 @@
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ms": "2.0.0"
       }
@@ -6945,13 +7603,15 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lines-and-columns": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
       "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/linkify-it": {
       "version": "5.0.0",
@@ -6968,6 +7628,7 @@
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
       "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "p-locate": "^5.0.0"
       },
@@ -6982,19 +7643,22 @@
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.groupby": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
       "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.merge": {
       "version": "4.6.2",
       "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
       "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.truncate": {
       "version": "4.4.2",
@@ -7008,6 +7672,7 @@
       "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
       "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "chalk": "^4.1.0",
         "is-unicode-supported": "^0.1.0"
@@ -7024,6 +7689,7 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.1.0",
         "supports-color": "^7.1.0"
@@ -7035,11 +7701,25 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
+    "node_modules/log-symbols/node_modules/is-unicode-supported": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/log-symbols/node_modules/supports-color": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -7052,6 +7732,7 @@
       "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz",
       "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "date-format": "^4.0.14",
         "debug": "^4.3.4",
@@ -7068,6 +7749,7 @@
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
       "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
@@ -7080,6 +7762,7 @@
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
       "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "yallist": "^3.0.2"
       }
@@ -7088,19 +7771,22 @@
       "version": "2.3.9",
       "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
       "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/make-error": {
       "version": "1.3.6",
       "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
       "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/map-age-cleaner": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
       "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "p-defer": "^1.0.0"
       },
@@ -7113,6 +7799,7 @@
       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
       "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       },
@@ -7168,29 +7855,19 @@
         "url": "https://github.com/sponsors/DavidAnson"
       }
     },
-    "node_modules/marked": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
-      "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
-      "dev": true,
-      "bin": {
-        "marked": "bin/marked.js"
-      },
-      "engines": {
-        "node": ">= 12"
-      }
-    },
     "node_modules/marky": {
       "version": "1.2.5",
       "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz",
       "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==",
-      "dev": true
+      "dev": true,
+      "license": "Apache-2.0"
     },
     "node_modules/mathml-tag-names": {
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
       "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
       "dev": true,
+      "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/wooorm"
@@ -7200,7 +7877,8 @@
       "version": "2.0.30",
       "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
       "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
-      "dev": true
+      "dev": true,
+      "license": "CC0-1.0"
     },
     "node_modules/mdurl": {
       "version": "2.0.0",
@@ -7214,6 +7892,7 @@
       "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz",
       "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "map-age-cleaner": "^0.1.3",
         "mimic-fn": "^2.1.0",
@@ -7223,20 +7902,12 @@
         "node": ">=8"
       }
     },
-    "node_modules/mem/node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/meow": {
       "version": "9.0.0",
       "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
       "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@types/minimist": "^1.2.0",
         "camelcase-keys": "^6.2.2",
@@ -7263,6 +7934,7 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
       "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=10"
       },
@@ -7274,13 +7946,15 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
       "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/merge2": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
       "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 8"
       }
@@ -7325,6 +7999,7 @@
       "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
       "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "mime": "cli.js"
       },
@@ -7333,15 +8008,13 @@
       }
     },
     "node_modules/mimic-fn": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
-      "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=6"
       }
     },
     "node_modules/mimic-response": {
@@ -7349,6 +8022,7 @@
       "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
       "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
@@ -7361,14 +8035,22 @@
       "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
       "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
     },
+    "node_modules/minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/minimatch": {
-      "version": "9.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
-      "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -7386,6 +8068,7 @@
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
       "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "dev": true,
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -7395,6 +8078,7 @@
       "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
       "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "arrify": "^1.0.1",
         "is-plain-obj": "^1.1.0",
@@ -7409,6 +8093,7 @@
       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
       "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -7428,6 +8113,7 @@
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
       "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "minimist": "^1.2.6"
       },
@@ -7436,32 +8122,32 @@
       }
     },
     "node_modules/mocha": {
-      "version": "10.4.0",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz",
-      "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-colors": "4.1.1",
-        "browser-stdout": "1.3.1",
-        "chokidar": "3.5.3",
-        "debug": "4.3.4",
-        "diff": "5.0.0",
-        "escape-string-regexp": "4.0.0",
-        "find-up": "5.0.0",
-        "glob": "8.1.0",
-        "he": "1.2.0",
-        "js-yaml": "4.1.0",
-        "log-symbols": "4.1.0",
-        "minimatch": "5.0.1",
-        "ms": "2.1.3",
-        "serialize-javascript": "6.0.0",
-        "strip-json-comments": "3.1.1",
-        "supports-color": "8.1.1",
-        "workerpool": "6.2.1",
-        "yargs": "16.2.0",
-        "yargs-parser": "20.2.4",
-        "yargs-unparser": "2.0.0"
+      "version": "10.7.3",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz",
+      "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-colors": "^4.1.3",
+        "browser-stdout": "^1.3.1",
+        "chokidar": "^3.5.3",
+        "debug": "^4.3.5",
+        "diff": "^5.2.0",
+        "escape-string-regexp": "^4.0.0",
+        "find-up": "^5.0.0",
+        "glob": "^8.1.0",
+        "he": "^1.2.0",
+        "js-yaml": "^4.1.0",
+        "log-symbols": "^4.1.0",
+        "minimatch": "^5.1.6",
+        "ms": "^2.1.3",
+        "serialize-javascript": "^6.0.2",
+        "strip-json-comments": "^3.1.1",
+        "supports-color": "^8.1.1",
+        "workerpool": "^6.5.1",
+        "yargs": "^16.2.0",
+        "yargs-parser": "^20.2.9",
+        "yargs-unparser": "^2.0.0"
       },
       "bin": {
         "_mocha": "bin/_mocha",
@@ -7476,26 +8162,27 @@
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
       "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "string-width": "^4.2.0",
         "strip-ansi": "^6.0.0",
         "wrap-ansi": "^7.0.0"
       }
     },
-    "node_modules/mocha/node_modules/diff": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
-      "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+    "node_modules/mocha/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true,
-      "engines": {
-        "node": ">=0.3.1"
-      }
+      "license": "MIT"
     },
     "node_modules/mocha/node_modules/glob": {
       "version": "8.1.0",
       "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
       "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
@@ -7511,10 +8198,11 @@
       }
     },
     "node_modules/mocha/node_modules/minimatch": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
-      "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^2.0.1"
       },
@@ -7526,13 +8214,30 @@
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/mocha/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
     },
     "node_modules/mocha/node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
       "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
@@ -7550,6 +8255,7 @@
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
       "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "cliui": "^7.0.2",
         "escalade": "^3.1.1",
@@ -7568,6 +8274,7 @@
       "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
       "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": "*"
@@ -7577,13 +8284,15 @@
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/multimatch": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-6.0.0.tgz",
       "integrity": "sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@types/minimatch": "^3.0.5",
         "array-differ": "^4.0.0",
@@ -7602,6 +8311,7 @@
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
       "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -7614,6 +8324,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -7624,6 +8335,7 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -7632,31 +8344,35 @@
       }
     },
     "node_modules/mutation-testing-elements": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.0.2.tgz",
-      "integrity": "sha512-ISsvj+2pfcyAUEMig83Y5KFvWpy3wJ3NIcXiJ6hD5NQeDdZJnhagRJqLQTwBRkzblqiAuYpY611v4isYJauBbg==",
-      "dev": true
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.1.1.tgz",
+      "integrity": "sha512-pYkrxZJh2zqA8XRSjtkoDFuIbezY1/4kIYjxw+DM6h6WL5wntLVKP5y3vQT8miRz/ek/3MP0qm2tuvgPn1rjOQ==",
+      "dev": true,
+      "license": "Apache-2.0"
     },
     "node_modules/mutation-testing-metrics": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.0.2.tgz",
-      "integrity": "sha512-FpyCAz43Mmq/l7BIyBrZLv8z3kc5XHNei/DcAyEVSXyj2i+h4jLhen4SiW/BPMijCIMVyiOeMJPMIfaYxrFZGg==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.1.1.tgz",
+      "integrity": "sha512-AgXM0TAnwD4G5ml0pA4u4qZu6+EuKnFwDHKjwdipgxy6nZRvZzqj2JUOGfFvbTPyjFLeVbAxYMsedPQskxXyxw==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "mutation-testing-report-schema": "3.0.2"
+        "mutation-testing-report-schema": "3.1.1"
       }
     },
     "node_modules/mutation-testing-report-schema": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.0.2.tgz",
-      "integrity": "sha512-1F6s37zFDsoWa262sANVBDKANMvmKPVU1FAVEpSCMtKAGkFoar+tjXUlPnD0dWJfPuKV58G86zP7sMlcu+QOJQ==",
-      "dev": true
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.1.1.tgz",
+      "integrity": "sha512-lWIbgUEnMEdsY2yymC7SZRBO+6dbZa5tY/Bmw+xjXYPdBxTVlnd2mjKRPZ6FUxgHJ9vMQmQnktMNAKCWZp1H0A==",
+      "dev": true,
+      "license": "Apache-2.0"
     },
     "node_modules/mute-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
       "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
@@ -7666,6 +8382,7 @@
       "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
       "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "mkdirp": "~0.5.1",
@@ -7681,6 +8398,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "balanced-match": "^1.0.0",
@@ -7691,7 +8409,9 @@
       "version": "6.0.4",
       "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
       "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "inflight": "^1.0.4",
@@ -7709,6 +8429,7 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "brace-expansion": "^1.1.7"
@@ -7721,7 +8442,9 @@
       "version": "2.4.5",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
       "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
       "dev": true,
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "glob": "^6.0.1"
@@ -7743,10 +8466,11 @@
       }
     },
     "node_modules/nan": {
-      "version": "2.18.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
-      "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==",
+      "version": "2.20.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
+      "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
       "dev": true,
+      "license": "MIT",
       "optional": true
     },
     "node_modules/nanoid": {
@@ -7760,6 +8484,7 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "bin": {
         "nanoid": "bin/nanoid.cjs"
       },
@@ -7771,13 +8496,15 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
       "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/nconf": {
       "version": "0.12.1",
       "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.1.tgz",
       "integrity": "sha512-p2cfF+B3XXacQdswUYWZ0w6Vld0832A/tuqjLBu3H1sfUcby4N2oVbGhyuCkZv+t3iY3aiFEj7gZGqax9Q2c1w==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "async": "^3.0.0",
         "ini": "^2.0.0",
@@ -7793,26 +8520,51 @@
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
       "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "string-width": "^4.2.0",
         "strip-ansi": "^6.0.0",
         "wrap-ansi": "^7.0.0"
       }
     },
+    "node_modules/nconf/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/nconf/node_modules/ini": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
       "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">=10"
       }
     },
+    "node_modules/nconf/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/nconf/node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
       "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
@@ -7830,6 +8582,7 @@
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
       "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "cliui": "^7.0.2",
         "escalade": "^3.1.1",
@@ -7848,6 +8601,7 @@
       "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
       "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "bin": {
         "ncp": "bin/ncp"
@@ -7878,6 +8632,7 @@
       "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
       "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "whatwg-url": "^5.0.0"
       },
@@ -7908,6 +8663,7 @@
       "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz",
       "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "growly": "^1.3.0",
         "is-wsl": "^2.2.0",
@@ -7918,16 +8674,18 @@
       }
     },
     "node_modules/node-releases": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
-      "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
-      "dev": true
+      "version": "2.0.18",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+      "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/normalize-package-data": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
       "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "hosted-git-info": "^4.0.1",
         "is-core-module": "^2.5.0",
@@ -7943,15 +8701,17 @@
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
     },
     "node_modules/normalize-url": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz",
-      "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==",
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
+      "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=14.16"
       },
@@ -7960,35 +8720,36 @@
       }
     },
     "node_modules/npm-package-json-lint": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-7.1.0.tgz",
-      "integrity": "sha512-ypcMpag32TCP89zzLSS+7vjeR2QY613WzmO2upcJgKNWlcswDz8cdb80urbBNHkhSPI40ex3nsKrRDH/WhMYOg==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-8.0.0.tgz",
+      "integrity": "sha512-44xqAKoV0nXnBYYLGUhMItGZb5tW3cLoW3UZxcsaCOX/YAkECrzOQA5F48oAA51vVE5CqAnsJB2CFvtolzMA3Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ajv": "^6.12.6",
         "ajv-errors": "^1.0.1",
         "chalk": "^4.1.2",
-        "cosmiconfig": "^8.2.0",
+        "cosmiconfig": "^8.3.6",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
-        "ignore": "^5.2.4",
+        "ignore": "^5.3.1",
         "is-plain-obj": "^3.0.0",
-        "jsonc-parser": "^3.2.0",
+        "jsonc-parser": "^3.2.1",
         "log-symbols": "^4.1.0",
         "meow": "^9.0.0",
         "plur": "^4.0.0",
-        "semver": "^7.5.4",
+        "semver": "^7.6.2",
         "slash": "^3.0.0",
         "strip-json-comments": "^3.1.1",
-        "type-fest": "^4.3.3",
-        "validate-npm-package-name": "^5.0.0"
+        "type-fest": "^4.20.0",
+        "validate-npm-package-name": "^5.0.1"
       },
       "bin": {
         "npmPkgJsonLint": "dist/cli.js"
       },
       "engines": {
-        "node": ">=16.0.0",
-        "npm": ">=8.0.0"
+        "node": ">=18.0.0",
+        "npm": ">=9.0.0"
       }
     },
     "node_modules/npm-package-json-lint/node_modules/ajv": {
@@ -7996,6 +8757,7 @@
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
       "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
@@ -8012,6 +8774,7 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.1.0",
         "supports-color": "^7.1.0"
@@ -8028,6 +8791,7 @@
       "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
       "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "import-fresh": "^3.3.0",
         "js-yaml": "^4.1.0",
@@ -8049,17 +8813,32 @@
         }
       }
     },
+    "node_modules/npm-package-json-lint/node_modules/is-plain-obj": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
+      "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/npm-package-json-lint/node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/npm-package-json-lint/node_modules/supports-color": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -8068,10 +8847,11 @@
       }
     },
     "node_modules/npm-package-json-lint/node_modules/type-fest": {
-      "version": "4.9.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.9.0.tgz",
-      "integrity": "sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.24.0.tgz",
+      "integrity": "sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=16"
       },
@@ -8084,6 +8864,7 @@
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
       "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "path-key": "^4.0.0"
       },
@@ -8099,6 +8880,7 @@
       "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
       "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -8111,6 +8893,7 @@
       "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
       "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boolbase": "^1.0.0"
       },
@@ -8129,10 +8912,14 @@
       }
     },
     "node_modules/object-inspect": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
-      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+      "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
       "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -8142,6 +8929,7 @@
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
       "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       }
@@ -8151,6 +8939,7 @@
       "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
       "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.5",
         "define-properties": "^1.2.1",
@@ -8165,14 +8954,16 @@
       }
     },
     "node_modules/object.fromentries": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
-      "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -8182,26 +8973,30 @@
       }
     },
     "node_modules/object.groupby": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
-      "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "get-intrinsic": "^1.2.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/object.values": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
-      "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+      "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -8215,6 +9010,7 @@
       "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
       "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=14.0.0"
       }
@@ -8224,6 +9020,7 @@
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "wrappy": "1"
       }
@@ -8233,6 +9030,7 @@
       "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
       "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "mimic-fn": "^4.0.0"
       },
@@ -8243,6 +9041,19 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/onetime/node_modules/mimic-fn": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+      "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/open": {
       "version": "9.1.0",
       "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz",
@@ -8267,83 +9078,35 @@
       "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
       "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
       "dev": true,
+      "license": "(WTFPL OR MIT)",
       "bin": {
         "opener": "bin/opener-bin.js"
       }
     },
     "node_modules/optionator": {
-      "version": "0.9.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
-      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+      "version": "0.9.4",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@aashutoshrathi/word-wrap": "^1.2.3",
         "deep-is": "^0.1.3",
         "fast-levenshtein": "^2.0.6",
         "levn": "^0.4.1",
         "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0"
+        "type-check": "^0.4.0",
+        "word-wrap": "^1.2.5"
       },
       "engines": {
         "node": ">= 0.8.0"
       }
     },
-    "node_modules/ora": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
-      "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
-      "dev": true,
-      "dependencies": {
-        "bl": "^4.1.0",
-        "chalk": "^4.1.0",
-        "cli-cursor": "^3.1.0",
-        "cli-spinners": "^2.5.0",
-        "is-interactive": "^1.0.0",
-        "is-unicode-supported": "^0.1.0",
-        "log-symbols": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "wcwidth": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/ora/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/ora/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/os-locale": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz",
       "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "execa": "^4.0.0",
         "lcid": "^3.0.0",
@@ -8361,6 +9124,7 @@
       "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
       "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "cross-spawn": "^7.0.0",
         "get-stream": "^5.0.0",
@@ -8384,6 +9148,7 @@
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
       "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "pump": "^3.0.0"
       },
@@ -8399,6 +9164,7 @@
       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
       "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
         "node": ">=8.12.0"
       }
@@ -8408,6 +9174,7 @@
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
       "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       },
@@ -8415,20 +9182,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/os-locale/node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/os-locale/node_modules/npm-run-path": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
       "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "path-key": "^3.0.0"
       },
@@ -8441,6 +9200,7 @@
       "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
       "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "mimic-fn": "^2.1.0"
       },
@@ -8455,13 +9215,15 @@
       "version": "3.0.7",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/os-locale/node_modules/strip-final-newline": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
       "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -8480,6 +9242,7 @@
       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
       "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -8489,6 +9252,7 @@
       "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz",
       "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12.20"
       }
@@ -8498,6 +9262,7 @@
       "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
       "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
@@ -8507,6 +9272,7 @@
       "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
       "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -8516,6 +9282,7 @@
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
       "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "yocto-queue": "^0.1.0"
       },
@@ -8531,6 +9298,7 @@
       "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
       "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "p-limit": "^3.0.2"
       },
@@ -8546,6 +9314,7 @@
       "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
       "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -8555,6 +9324,7 @@
       "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz",
       "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "got": "^12.1.0",
         "registry-auth-token": "^5.0.1",
@@ -8568,17 +9338,26 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/package-json-from-dist": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0"
+    },
     "node_modules/pako": {
       "version": "1.0.11",
       "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
       "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
-      "dev": true
+      "dev": true,
+      "license": "(MIT AND Zlib)"
     },
     "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
       "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "callsites": "^3.0.0"
       },
@@ -8586,11 +9365,26 @@
         "node": ">=6"
       }
     },
+    "node_modules/parse-imports": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz",
+      "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "es-module-lexer": "^1.5.3",
+        "slashes": "^3.0.12"
+      },
+      "engines": {
+        "node": ">= 18"
+      }
+    },
     "node_modules/parse-json": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
       "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.0.0",
         "error-ex": "^1.3.1",
@@ -8604,11 +9398,25 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/parse-ms": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
+      "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/parse5": {
       "version": "7.1.2",
       "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
       "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "entities": "^4.4.0"
       },
@@ -8621,6 +9429,7 @@
       "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
       "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "domhandler": "^5.0.2",
         "parse5": "^7.0.0"
@@ -8634,6 +9443,7 @@
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
       "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -8643,6 +9453,7 @@
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
       "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -8652,6 +9463,7 @@
       "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
       "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -8660,33 +9472,34 @@
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
       "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/path-scurry": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+      "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
       "dev": true,
       "license": "BlueOak-1.0.0",
       "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+        "lru-cache": "^11.0.0",
+        "minipass": "^7.1.2"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.18"
+        "node": "20 || >=22"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/path-scurry/node_modules/lru-cache": {
-      "version": "10.2.2",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
-      "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz",
+      "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": "14 || >=16.14"
+        "node": "20 || >=22"
       }
     },
     "node_modules/path-type": {
@@ -8694,6 +9507,7 @@
       "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
       "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -8702,7 +9516,8 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
       "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/picocolors": {
       "version": "1.0.1",
@@ -8716,6 +9531,7 @@
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8.6"
       },
@@ -8747,66 +9563,29 @@
       }
     },
     "node_modules/pino-abstract-transport": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz",
-      "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz",
+      "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "readable-stream": "^4.0.0",
         "split2": "^4.0.0"
       }
     },
-    "node_modules/pino-abstract-transport/node_modules/buffer": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
-      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "base64-js": "^1.3.1",
-        "ieee754": "^1.2.1"
-      }
-    },
-    "node_modules/pino-abstract-transport/node_modules/readable-stream": {
-      "version": "4.5.2",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
-      "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
-      "dev": true,
-      "dependencies": {
-        "abort-controller": "^3.0.0",
-        "buffer": "^6.0.3",
-        "events": "^3.3.0",
-        "process": "^0.11.10",
-        "string_decoder": "^1.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
     "node_modules/pino-std-serializers": {
       "version": "6.2.2",
       "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz",
       "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/plur": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz",
       "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "irregular-plurals": "^3.2.0"
       },
@@ -8822,6 +9601,7 @@
       "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
       "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
@@ -8831,6 +9611,7 @@
       "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
       "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "async": "^2.6.4",
         "debug": "^3.2.7",
@@ -8845,6 +9626,7 @@
       "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
       "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "lodash": "^4.17.14"
       }
@@ -8854,14 +9636,25 @@
       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
       "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ms": "^2.1.1"
       }
     },
+    "node_modules/possible-typed-array-names": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+      "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/postcss": {
-      "version": "8.4.38",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
-      "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+      "version": "8.4.41",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
       "dev": true,
       "funding": [
         {
@@ -8880,18 +9673,19 @@
       "license": "MIT",
       "dependencies": {
         "nanoid": "^3.3.7",
-        "picocolors": "^1.0.0",
+        "picocolors": "^1.0.1",
         "source-map-js": "^1.2.0"
       },
       "engines": {
         "node": "^10 || ^12 || >=14"
       }
     },
-    "node_modules/postcss-resolve-nested-selector": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
-      "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
-      "dev": true
+    "node_modules/postcss-resolve-nested-selector": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.5.tgz",
+      "integrity": "sha512-tum2m18S22ZSNjXatMG0FSk5ZL83pTttymeJx5Gzxg7RU0s1jNDU9rXltro4osQrukjyNormcb07IEjqEyPNaA==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/postcss-safe-parser": {
       "version": "7.0.0",
@@ -8912,6 +9706,7 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "engines": {
         "node": ">=18.0"
       },
@@ -8920,9 +9715,9 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
-      "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
+      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8938,6 +9733,7 @@
       "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz",
       "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==",
       "dev": true,
+      "license": "MIT",
       "peerDependencies": {
         "postcss": "^8.4.20"
       }
@@ -8946,22 +9742,25 @@
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
       "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
       "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.8.0"
       }
     },
     "node_modules/prettier": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
-      "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+      "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "prettier": "bin/prettier.cjs"
       },
@@ -8972,11 +9771,28 @@
         "url": "https://github.com/prettier/prettier?sponsor=1"
       }
     },
+    "node_modules/pretty-ms": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz",
+      "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "parse-ms": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/process": {
       "version": "0.11.10",
       "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
       "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.6.0"
       }
@@ -8985,19 +9801,22 @@
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
       "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/process-warning": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
       "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/progress": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
       "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.4.0"
       }
@@ -9007,6 +9826,7 @@
       "resolved": "https://registry.npmjs.org/promise-toolbox/-/promise-toolbox-0.21.0.tgz",
       "integrity": "sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "make-error": "^1.3.2"
       },
@@ -9018,13 +9838,15 @@
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
       "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/pump": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
       "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "end-of-stream": "^1.1.0",
         "once": "^1.3.1"
@@ -9035,6 +9857,7 @@
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
       "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -9054,6 +9877,7 @@
       "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz",
       "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "escape-goat": "^4.0.0"
       },
@@ -9080,13 +9904,75 @@
         "purgecss": "bin/purgecss.js"
       }
     },
+    "node_modules/purgecss/node_modules/glob": {
+      "version": "10.4.5",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/purgecss/node_modules/jackspeak": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/purgecss/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/purgecss/node_modules/path-scurry": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/qs": {
-      "version": "6.11.2",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
-      "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+      "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "side-channel": "^1.0.4"
+        "side-channel": "^1.0.6"
       },
       "engines": {
         "node": ">=0.6"
@@ -9100,6 +9986,7 @@
       "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
       "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "inherits": "~2.0.3"
       }
@@ -9122,19 +10009,22 @@
           "type": "consulting",
           "url": "https://feross.org/support"
         }
-      ]
+      ],
+      "license": "MIT"
     },
     "node_modules/quick-format-unescaped": {
       "version": "4.0.4",
       "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
       "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/quick-lru": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
       "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -9143,13 +10033,15 @@
       "version": "7.5.0",
       "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz",
       "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/randombytes": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
       "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "safe-buffer": "^5.1.0"
       }
@@ -9159,6 +10051,7 @@
       "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
       "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
       "dev": true,
+      "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
       "dependencies": {
         "deep-extend": "^0.6.0",
         "ini": "~1.3.0",
@@ -9174,6 +10067,7 @@
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
       "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -9183,6 +10077,7 @@
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
       "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@types/normalize-package-data": "^2.4.0",
         "normalize-package-data": "^2.5.0",
@@ -9198,6 +10093,7 @@
       "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
       "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "find-up": "^4.1.0",
         "read-pkg": "^5.2.0",
@@ -9215,6 +10111,7 @@
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
       "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "locate-path": "^5.0.0",
         "path-exists": "^4.0.0"
@@ -9228,6 +10125,7 @@
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
       "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "p-locate": "^4.1.0"
       },
@@ -9240,6 +10138,7 @@
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
       "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "p-try": "^2.0.0"
       },
@@ -9255,6 +10154,7 @@
       "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
       "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "p-limit": "^2.2.0"
       },
@@ -9267,6 +10167,7 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
       "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=8"
       }
@@ -9275,13 +10176,15 @@
       "version": "2.8.9",
       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
       "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/read-pkg/node_modules/normalize-package-data": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
       "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "hosted-git-info": "^2.1.4",
         "resolve": "^1.10.0",
@@ -9294,6 +10197,7 @@
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
       "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
       "dev": true,
+      "license": "ISC",
       "bin": {
         "semver": "bin/semver"
       }
@@ -9303,22 +10207,26 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
       "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/readable-stream": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "version": "4.5.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+      "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
+        "abort-controller": "^3.0.0",
+        "buffer": "^6.0.3",
+        "events": "^3.3.0",
+        "process": "^0.11.10",
+        "string_decoder": "^1.3.0"
       },
       "engines": {
-        "node": ">= 6"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
     "node_modules/readdirp": {
@@ -9326,6 +10234,7 @@
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "picomatch": "^2.2.1"
       },
@@ -9338,6 +10247,7 @@
       "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
       "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 12.13.0"
       }
@@ -9347,6 +10257,7 @@
       "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
       "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "indent-string": "^4.0.0",
         "strip-indent": "^3.0.0"
@@ -9360,6 +10271,7 @@
       "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz",
       "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.8.0"
       },
@@ -9379,6 +10291,7 @@
       "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz",
       "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.8.0",
         "refa": "^0.12.1"
@@ -9391,26 +10304,30 @@
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz",
       "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/regexp-tree": {
       "version": "0.1.27",
       "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz",
       "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "regexp-tree": "bin/regexp-tree"
       }
     },
     "node_modules/regexp.prototype.flags": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
-      "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "set-function-name": "^2.0.0"
+        "call-bind": "^1.0.6",
+        "define-properties": "^1.2.1",
+        "es-errors": "^1.3.0",
+        "set-function-name": "^2.0.1"
       },
       "engines": {
         "node": ">= 0.4"
@@ -9424,6 +10341,7 @@
       "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz",
       "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@pnpm/npm-conf": "^2.1.0"
       },
@@ -9436,6 +10354,7 @@
       "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
       "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "rc": "1.2.8"
       },
@@ -9451,6 +10370,7 @@
       "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz",
       "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "jsesc": "~0.5.0"
       },
@@ -9472,6 +10392,7 @@
       "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz",
       "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
         "chalk": "^2.4.2",
         "commander": "^2.6.0"
@@ -9488,6 +10409,7 @@
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "color-convert": "^1.9.0"
       },
@@ -9500,6 +10422,7 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
       "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^3.2.1",
         "escape-string-regexp": "^1.0.5",
@@ -9514,6 +10437,7 @@
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "color-name": "1.1.3"
       }
@@ -9522,19 +10446,22 @@
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
       "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/relaxed-json/node_modules/commander": {
       "version": "2.20.3",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
       "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/relaxed-json/node_modules/escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
       "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.0"
       }
@@ -9544,6 +10471,7 @@
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
       "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
@@ -9553,6 +10481,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^3.0.0"
       },
@@ -9565,6 +10494,7 @@
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
       "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -9574,6 +10504,7 @@
       "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
       "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -9582,13 +10513,15 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
       "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/resolve": {
       "version": "1.22.8",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
       "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-core-module": "^2.13.0",
         "path-parse": "^1.0.7",
@@ -9605,13 +10538,15 @@
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
       "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/resolve-from": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
       "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
@@ -9621,6 +10556,7 @@
       "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
       "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
       "dev": true,
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
       }
@@ -9630,6 +10566,7 @@
       "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
       "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "lowercase-keys": "^3.0.0"
       },
@@ -9640,70 +10577,31 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/restore-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-      "dev": true,
-      "dependencies": {
-        "onetime": "^5.1.0",
-        "signal-exit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/restore-cursor/node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/restore-cursor/node_modules/onetime": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
-      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
-      "dev": true,
-      "dependencies": {
-        "mimic-fn": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/restore-cursor/node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true
-    },
     "node_modules/reusify": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
       "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "iojs": ">=1.0.0",
         "node": ">=0.10.0"
       }
     },
     "node_modules/rfdc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
-      "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
-      "dev": true
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
       "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "glob": "^7.1.3"
       },
@@ -9719,6 +10617,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -9728,7 +10627,9 @@
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
       "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
@@ -9749,6 +10650,7 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -9832,16 +10734,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/run-applescript/node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/run-applescript/node_modules/npm-run-path": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -9888,15 +10780,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/run-async": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
-      "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
     "node_modules/run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -9916,6 +10799,7 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "dependencies": {
         "queue-microtask": "^1.2.2"
       }
@@ -9925,18 +10809,20 @@
       "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
       "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "tslib": "^2.1.0"
       }
     },
     "node_modules/safe-array-concat": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
-      "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+      "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.1",
+        "call-bind": "^1.0.7",
+        "get-intrinsic": "^1.2.4",
         "has-symbols": "^1.0.3",
         "isarray": "^2.0.5"
       },
@@ -9951,25 +10837,31 @@
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/safe-json-stringify": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
       "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
       "dev": true,
+      "license": "MIT",
       "optional": true
     },
     "node_modules/safe-regex-test": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
-      "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
         "is-regex": "^1.1.4"
       },
+      "engines": {
+        "node": ">= 0.4"
+      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -9979,6 +10871,7 @@
       "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
       "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       }
@@ -9987,7 +10880,8 @@
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/sax": {
       "version": "1.4.1",
@@ -10001,6 +10895,7 @@
       "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz",
       "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.8.0",
         "refa": "^0.12.0",
@@ -10014,18 +10909,20 @@
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
       "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/secure-keys": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz",
       "integrity": "sha512-nZi59hW3Sl5P3+wOO89eHBAAGwmCPd2aE1+dLZV5MO+ItQctIvAqihzaAXIQhvtH4KJPxM080HsnqltR2y8cWg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/semver": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
       "dev": true,
       "license": "ISC",
       "bin": {
@@ -10040,6 +10937,7 @@
       "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz",
       "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "semver": "^7.3.5"
       },
@@ -10051,38 +10949,44 @@
       }
     },
     "node_modules/serialize-javascript": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
-      "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
         "randombytes": "^2.1.0"
       }
     },
     "node_modules/set-function-length": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
-      "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "define-data-property": "^1.1.1",
-        "get-intrinsic": "^1.2.1",
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.4",
         "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.0"
+        "has-property-descriptors": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
       }
     },
     "node_modules/set-function-name": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
-      "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+      "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "define-data-property": "^1.0.1",
+        "define-data-property": "^1.1.4",
+        "es-errors": "^1.3.0",
         "functions-have-names": "^1.2.3",
-        "has-property-descriptors": "^1.0.0"
+        "has-property-descriptors": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -10092,13 +10996,15 @@
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
       "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/sha.js": {
       "version": "2.4.11",
       "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
       "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
       "dev": true,
+      "license": "(MIT AND BSD-3-Clause)",
       "dependencies": {
         "inherits": "^2.0.1",
         "safe-buffer": "^5.0.1"
@@ -10112,6 +11018,7 @@
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
       "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "shebang-regex": "^3.0.0"
       },
@@ -10124,6 +11031,7 @@
       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
       "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -10132,35 +11040,41 @@
       "version": "1.7.3",
       "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
       "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/shellwords": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
       "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/shiki": {
-      "version": "0.14.7",
-      "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz",
-      "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==",
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.12.1.tgz",
+      "integrity": "sha512-nwmjbHKnOYYAe1aaQyEBHvQymJgfm86ZSS7fT8OaPRr4sbAcBNz7PbfAikMEFSDQ6se2j2zobkXvVKcBOm0ysg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "ansi-sequence-parser": "^1.1.0",
-        "jsonc-parser": "^3.2.0",
-        "vscode-oniguruma": "^1.7.0",
-        "vscode-textmate": "^8.0.0"
+        "@shikijs/core": "1.12.1",
+        "@types/hast": "^3.0.4"
       }
     },
     "node_modules/side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+      "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -10171,6 +11085,7 @@
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
       "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">=14"
       },
@@ -10183,10 +11098,18 @@
       "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
       "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
     },
+    "node_modules/slashes": {
+      "version": "3.0.12",
+      "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz",
+      "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/slice-ansi": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
@@ -10206,10 +11129,11 @@
       }
     },
     "node_modules/sonic-boom": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.0.tgz",
-      "integrity": "sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==",
+      "version": "3.8.1",
+      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz",
+      "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "atomic-sleep": "^1.0.0"
       }
@@ -10219,6 +11143,7 @@
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
       "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "engines": {
         "node": ">= 8"
       }
@@ -10238,6 +11163,7 @@
       "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
       "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "buffer-from": "^1.0.0",
         "source-map": "^0.6.0"
@@ -10248,6 +11174,7 @@
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
       "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
       "dev": true,
+      "license": "BSD-3-Clause",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -10258,6 +11185,7 @@
       "integrity": "sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==",
       "dev": true,
       "hasInstallScript": true,
+      "license": "MIT",
       "dependencies": {
         "concat-stream": "^1.4.7",
         "os-shim": "^0.1.2"
@@ -10268,6 +11196,7 @@
       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
       "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "spdx-expression-parse": "^3.0.0",
         "spdx-license-ids": "^3.0.0"
@@ -10278,32 +11207,36 @@
       "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
       "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "spdx-exceptions": "^2.1.0",
         "spdx-license-ids": "^3.0.0"
       }
     },
     "node_modules/spdx-exceptions": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-      "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
-      "dev": true
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+      "dev": true,
+      "license": "CC-BY-3.0"
     },
     "node_modules/spdx-expression-parse": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
       "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "spdx-exceptions": "^2.1.0",
         "spdx-license-ids": "^3.0.0"
       }
     },
     "node_modules/spdx-license-ids": {
-      "version": "3.0.16",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
-      "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
-      "dev": true
+      "version": "3.0.18",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+      "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
+      "dev": true,
+      "license": "CC0-1.0"
     },
     "node_modules/split": {
       "version": "1.0.1",
@@ -10323,6 +11256,7 @@
       "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
       "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">= 10.x"
       }
@@ -10332,6 +11266,7 @@
       "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
       "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "date-format": "^4.0.14",
         "debug": "^4.3.4",
@@ -10346,6 +11281,7 @@
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
       "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "safe-buffer": "~5.2.0"
       }
@@ -10368,20 +11304,25 @@
           "type": "consulting",
           "url": "https://feross.org/support"
         }
-      ]
+      ],
+      "license": "MIT"
     },
     "node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/string-width-cjs": {
@@ -10390,6 +11331,7 @@
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
       "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "emoji-regex": "^8.0.0",
         "is-fullwidth-code-point": "^3.0.0",
@@ -10403,23 +11345,56 @@
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/string-width/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
     },
     "node_modules/string-width/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/string-width/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
     },
     "node_modules/string.prototype.trim": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
-      "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+      "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.0",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -10429,28 +11404,33 @@
       }
     },
     "node_modules/string.prototype.trimend": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
-      "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+      "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/string.prototype.trimstart": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
-      "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -10461,6 +11441,7 @@
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^5.0.1"
       },
@@ -10474,6 +11455,7 @@
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^5.0.1"
       },
@@ -10486,6 +11468,7 @@
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
       "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
@@ -10495,6 +11478,7 @@
       "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz",
       "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-utf8": "^0.2.1"
       },
@@ -10507,6 +11491,7 @@
       "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz",
       "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "first-chunk-stream": "^3.0.0",
         "strip-bom-buf": "^2.0.0"
@@ -10516,12 +11501,13 @@
       }
     },
     "node_modules/strip-final-newline": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
-      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
+      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -10532,6 +11518,7 @@
       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
       "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "min-indent": "^1.0.0"
       },
@@ -10544,6 +11531,7 @@
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
       "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       },
@@ -10552,9 +11540,9 @@
       }
     },
     "node_modules/stylelint": {
-      "version": "16.6.1",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.6.1.tgz",
-      "integrity": "sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==",
+      "version": "16.8.1",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.8.1.tgz",
+      "integrity": "sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA==",
       "dev": true,
       "funding": [
         {
@@ -10568,9 +11556,9 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.3",
-        "@csstools/css-tokenizer": "^2.3.1",
-        "@csstools/media-query-list-parser": "^2.1.11",
+        "@csstools/css-parser-algorithms": "^2.7.1",
+        "@csstools/css-tokenizer": "^2.4.1",
+        "@csstools/media-query-list-parser": "^2.1.13",
         "@csstools/selector-specificity": "^3.1.1",
         "@dual-bundle/import-meta-resolve": "^4.1.0",
         "balanced-match": "^2.0.0",
@@ -10578,7 +11566,7 @@
         "cosmiconfig": "^9.0.0",
         "css-functions-list": "^3.2.2",
         "css-tree": "^2.3.1",
-        "debug": "^4.3.4",
+        "debug": "^4.3.6",
         "fast-glob": "^3.3.2",
         "fastest-levenshtein": "^1.0.16",
         "file-entry-cache": "^9.0.0",
@@ -10589,16 +11577,16 @@
         "ignore": "^5.3.1",
         "imurmurhash": "^0.1.4",
         "is-plain-object": "^5.0.0",
-        "known-css-properties": "^0.31.0",
+        "known-css-properties": "^0.34.0",
         "mathml-tag-names": "^2.1.3",
         "meow": "^13.2.0",
         "micromatch": "^4.0.7",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.0.1",
-        "postcss": "^8.4.38",
-        "postcss-resolve-nested-selector": "^0.1.1",
+        "postcss": "^8.4.40",
+        "postcss-resolve-nested-selector": "^0.1.4",
         "postcss-safe-parser": "^7.0.0",
-        "postcss-selector-parser": "^6.1.0",
+        "postcss-selector-parser": "^6.1.1",
         "postcss-value-parser": "^4.2.0",
         "resolve-from": "^5.0.0",
         "string-width": "^4.2.3",
@@ -10620,6 +11608,7 @@
       "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz",
       "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "postcss": "^8.4.32",
         "postcss-sorting": "^8.0.2"
@@ -10628,65 +11617,19 @@
         "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1"
       }
     },
-    "node_modules/stylelint/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
     "node_modules/stylelint/node_modules/balanced-match": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
       "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-      "dev": true
-    },
-    "node_modules/stylelint/node_modules/cosmiconfig": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
-      "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
       "dev": true,
-      "dependencies": {
-        "env-paths": "^2.2.1",
-        "import-fresh": "^3.3.0",
-        "js-yaml": "^4.1.0",
-        "parse-json": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/d-fischer"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.9.5"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
+      "license": "MIT"
     },
-    "node_modules/stylelint/node_modules/fast-glob": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
-      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+    "node_modules/stylelint/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
+      "license": "MIT"
     },
     "node_modules/stylelint/node_modules/file-entry-cache": {
       "version": "9.0.0",
@@ -10715,18 +11658,6 @@
         "node": ">=18"
       }
     },
-    "node_modules/stylelint/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/stylelint/node_modules/meow": {
       "version": "13.2.0",
       "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
@@ -10745,6 +11676,35 @@
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
       "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
       "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/stylelint/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/stylelint/node_modules/string-width/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
       "engines": {
         "node": ">=8"
       }
@@ -10754,6 +11714,7 @@
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
       "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^6.0.1"
       },
@@ -10761,7 +11722,20 @@
         "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/stylelint/node_modules/strip-ansi/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
     "node_modules/supports-color": {
@@ -10769,6 +11743,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
       "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -10784,6 +11759,7 @@
       "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
       "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0",
         "supports-color": "^7.0.0"
@@ -10797,6 +11773,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -10809,6 +11786,7 @@
       "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
       "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       },
@@ -10822,6 +11800,23 @@
       "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
       "dev": true
     },
+    "node_modules/synckit": {
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz",
+      "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@pkgr/core": "^0.1.0",
+        "tslib": "^2.6.2"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/unts"
+      }
+    },
     "node_modules/table": {
       "version": "6.8.2",
       "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
@@ -10839,6 +11834,28 @@
         "node": ">=10.0.0"
       }
     },
+    "node_modules/table/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/table/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/tapable": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -10853,7 +11870,8 @@
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
       "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/thenify": {
       "version": "3.3.1",
@@ -10879,10 +11897,11 @@
       }
     },
     "node_modules/thread-stream": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz",
-      "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz",
+      "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "real-require": "^0.2.0"
       }
@@ -10912,6 +11931,7 @@
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
       "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "os-tmpdir": "~1.0.2"
       },
@@ -10924,6 +11944,7 @@
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
       "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
@@ -10954,13 +11975,15 @@
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
       "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/tree-kill": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
       "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "tree-kill": "cli.js"
       }
@@ -10970,6 +11993,7 @@
       "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
       "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -10979,6 +12003,7 @@
       "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
       "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@types/json5": "^0.0.29",
         "json5": "^1.0.2",
@@ -10991,6 +12016,7 @@
       "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
       "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "minimist": "^1.2.0"
       },
@@ -10999,16 +12025,18 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
-      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
-      "dev": true
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+      "dev": true,
+      "license": "0BSD"
     },
     "node_modules/tunnel": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
       "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
       }
@@ -11018,6 +12046,7 @@
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
       "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "prelude-ls": "^1.2.1"
       },
@@ -11030,6 +12059,7 @@
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
       "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
       "dev": true,
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
         "node": ">=10"
       },
@@ -11038,29 +12068,32 @@
       }
     },
     "node_modules/typed-array-buffer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
-      "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.1",
-        "is-typed-array": "^1.1.10"
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.13"
       },
       "engines": {
         "node": ">= 0.4"
       }
     },
     "node_modules/typed-array-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
-      "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+      "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "has-proto": "^1.0.1",
-        "is-typed-array": "^1.1.10"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
       },
       "engines": {
         "node": ">= 0.4"
@@ -11070,16 +12103,18 @@
       }
     },
     "node_modules/typed-array-byte-offset": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
-      "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+      "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "has-proto": "^1.0.1",
-        "is-typed-array": "^1.1.10"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
       },
       "engines": {
         "node": ">= 0.4"
@@ -11089,14 +12124,21 @@
       }
     },
     "node_modules/typed-array-length": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
-      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+      "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.2",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
-        "is-typed-array": "^1.1.9"
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13",
+        "possible-typed-array-names": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -11107,62 +12149,72 @@
       "resolved": "https://registry.npmjs.org/typed-inject/-/typed-inject-4.0.0.tgz",
       "integrity": "sha512-OuBL3G8CJlS/kjbGV/cN8Ni32+ktyyi6ADDZpKvksbX0fYBV5WcukhRCYa7WqLce7dY/Br2dwtmJ9diiadLFpg==",
       "dev": true,
+      "license": "Apache-2.0",
       "engines": {
         "node": ">=16"
       }
     },
     "node_modules/typed-rest-client": {
-      "version": "1.8.11",
-      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
-      "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.0.2.tgz",
+      "integrity": "sha512-rmAQM2gZw/PQpK5+5aSs+I6ZBv4PFC2BT1o+0ADS1SgSejA+14EmbI2Lt8uXwkX7oeOMkwFmg0pHKwe8D9IT5A==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "qs": "^6.9.1",
+        "des.js": "^1.1.0",
+        "js-md4": "^0.3.2",
+        "qs": "^6.10.3",
         "tunnel": "0.0.6",
         "underscore": "^1.12.1"
+      },
+      "engines": {
+        "node": ">= 16.0.0"
       }
     },
     "node_modules/typedarray": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/typedarray-to-buffer": {
       "version": "3.1.5",
       "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
       "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-typedarray": "^1.0.0"
       }
     },
     "node_modules/typedoc": {
-      "version": "0.25.13",
-      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz",
-      "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==",
+      "version": "0.26.5",
+      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.5.tgz",
+      "integrity": "sha512-Vn9YKdjKtDZqSk+by7beZ+xzkkr8T8CYoiasqyt4TTRFy5+UHzL/mF/o4wGBjRF+rlWQHDb0t6xCpA3JNL5phg==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
         "lunr": "^2.3.9",
-        "marked": "^4.3.0",
-        "minimatch": "^9.0.3",
-        "shiki": "^0.14.7"
+        "markdown-it": "^14.1.0",
+        "minimatch": "^9.0.5",
+        "shiki": "^1.9.1",
+        "yaml": "^2.4.5"
       },
       "bin": {
         "typedoc": "bin/typedoc"
       },
       "engines": {
-        "node": ">= 16"
+        "node": ">= 18"
       },
       "peerDependencies": {
-        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x"
+        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x"
       }
     },
     "node_modules/typescript": {
-      "version": "5.4.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-      "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+      "version": "5.5.4",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+      "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
       "dev": true,
       "license": "Apache-2.0",
       "bin": {
@@ -11185,6 +12237,7 @@
       "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
       "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.2",
         "has-bigints": "^1.0.2",
@@ -11196,16 +12249,18 @@
       }
     },
     "node_modules/underscore": {
-      "version": "1.13.6",
-      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
-      "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
-      "dev": true
+      "version": "1.13.7",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz",
+      "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/undici-types": {
-      "version": "5.26.5",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
-      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
-      "dev": true
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
+      "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/union": {
       "version": "0.5.0",
@@ -11224,6 +12279,7 @@
       "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
       "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "crypto-random-string": "^4.0.0"
       },
@@ -11239,6 +12295,7 @@
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
       "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 4.0.0"
       }
@@ -11258,15 +12315,16 @@
       "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
       "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4",
         "yarn": "*"
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.0.13",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
-      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
       "dev": true,
       "funding": [
         {
@@ -11282,9 +12340,10 @@
           "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
+        "escalade": "^3.1.2",
+        "picocolors": "^1.0.1"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -11298,6 +12357,7 @@
       "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz",
       "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boxen": "^7.0.0",
         "chalk": "^5.0.1",
@@ -11326,6 +12386,7 @@
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
       "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "punycode": "^2.1.0"
       }
@@ -11334,19 +12395,22 @@
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
       "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/uuid": {
       "version": "8.3.2",
       "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
       "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "uuid": "dist/bin/uuid"
       }
@@ -11356,6 +12420,7 @@
       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
       "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "spdx-correct": "^3.0.0",
         "spdx-expression-parse": "^3.0.0"
@@ -11366,35 +12431,22 @@
       "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
       "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "spdx-exceptions": "^2.1.0",
         "spdx-license-ids": "^3.0.0"
       }
     },
     "node_modules/validate-npm-package-name": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz",
-      "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
+      "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
       "dev": true,
-      "dependencies": {
-        "builtins": "^5.0.0"
-      },
+      "license": "ISC",
       "engines": {
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/vscode-oniguruma": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
-      "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
-      "dev": true
-    },
-    "node_modules/vscode-textmate": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz",
-      "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==",
-      "dev": true
-    },
     "node_modules/watchpack": {
       "version": "2.4.1",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
@@ -11414,26 +12466,28 @@
       "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
       "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "defaults": "^1.0.3"
       }
     },
     "node_modules/weapon-regex": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/weapon-regex/-/weapon-regex-1.3.1.tgz",
-      "integrity": "sha512-l1qFP+WdehGfqNwW9MTtEB87PZITaIiz+m0ndvJS80/jlShRvP4rRQR/XXij53Rfa1zRe2qbOAcH+MQAsYtYYw==",
-      "dev": true
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/weapon-regex/-/weapon-regex-1.3.2.tgz",
+      "integrity": "sha512-jtFTAr0F3gmiX10J6+BYgPrZ/yjXhpcxK/j/Lm1fWRLATxfecPgnkd3DqSUkD0AC2wVVyAkMtsgeuiIuELlW3w==",
+      "dev": true,
+      "license": "Apache-2.0"
     },
     "node_modules/web-ext": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-8.0.0.tgz",
-      "integrity": "sha512-fcE6woJOHRAzGRTlHwcltEirOV+R3aLE/Yl+yoBbvHonJRnOcthaW1wjqlXc+iJu5rXqwd3yICLbLUndQlbCRQ==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-8.2.0.tgz",
+      "integrity": "sha512-krU7rmxaG96b3Q9Enbry9/pmE/5FUGkvajCGfJCD+J79rt7JFjhVpw1Dszz4BqQkTd3y8cG5wJ3p1uC6uyAwcA==",
       "dev": true,
       "license": "MPL-2.0",
       "dependencies": {
-        "@babel/runtime": "7.24.6",
+        "@babel/runtime": "7.24.7",
         "@devicefarmer/adbkit": "3.2.6",
-        "addons-linter": "6.28.0",
+        "addons-linter": "6.31.1",
         "bunyan": "1.8.15",
         "camelcase": "8.0.0",
         "chrome-launcher": "0.15.1",
@@ -11444,9 +12498,9 @@
         "fs-extra": "11.2.0",
         "fx-runner": "1.4.0",
         "https-proxy-agent": "^7.0.0",
-        "jose": "4.15.5",
+        "jose": "5.4.1",
         "jszip": "3.10.1",
-        "mkdirp": "1.0.4",
+        "mkdirp": "3.0.1",
         "multimatch": "6.0.0",
         "mz": "2.7.0",
         "node-fetch": "3.3.2",
@@ -11460,7 +12514,7 @@
         "tmp": "0.2.3",
         "update-notifier": "6.0.2",
         "watchpack": "2.4.1",
-        "ws": "8.17.0",
+        "ws": "8.17.1",
         "yargs": "17.7.2",
         "zip-dir": "2.0.0"
       },
@@ -11472,6 +12526,76 @@
         "npm": ">=8.0.0"
       }
     },
+    "node_modules/web-ext/node_modules/@mdn/browser-compat-data": {
+      "version": "5.5.34",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.34.tgz",
+      "integrity": "sha512-e8k7+8r3jiJuP7FMH6AL1OnmfQqLyABhTM+NmRDvFeAbMgtFcNQLHpmT7uza5cBnxI01+CAU3aSsIgcKGRdEBQ==",
+      "dev": true,
+      "license": "CC0-1.0"
+    },
+    "node_modules/web-ext/node_modules/addons-linter": {
+      "version": "6.31.1",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.31.1.tgz",
+      "integrity": "sha512-R9FCyVzqU/h5A2aB1t+jD8t4QKLuLxYqc1FjmjJ0nZrn1qNCna1jFOajt5R1T8pwt0H4WXgT+uwWSD2BdkBzqQ==",
+      "dev": true,
+      "license": "MPL-2.0",
+      "dependencies": {
+        "@fluent/syntax": "0.19.0",
+        "@mdn/browser-compat-data": "5.5.34",
+        "addons-moz-compare": "1.3.0",
+        "addons-scanner-utils": "9.11.0",
+        "ajv": "8.16.0",
+        "chalk": "4.1.2",
+        "cheerio": "1.0.0-rc.12",
+        "columnify": "1.6.0",
+        "common-tags": "1.8.2",
+        "deepmerge": "4.3.1",
+        "eslint": "8.57.0",
+        "eslint-plugin-no-unsanitized": "4.0.2",
+        "eslint-visitor-keys": "4.0.0",
+        "espree": "10.0.1",
+        "esprima": "4.0.1",
+        "fast-json-patch": "3.1.1",
+        "glob": "10.4.2",
+        "image-size": "1.1.1",
+        "is-mergeable-object": "1.1.1",
+        "jed": "1.1.1",
+        "json-merge-patch": "1.0.2",
+        "os-locale": "5.0.0",
+        "pino": "8.20.0",
+        "relaxed-json": "1.0.3",
+        "semver": "7.6.2",
+        "sha.js": "2.4.11",
+        "source-map-support": "0.5.21",
+        "tosource": "1.0.0",
+        "upath": "2.0.1",
+        "yargs": "17.7.2",
+        "yauzl": "2.10.0"
+      },
+      "bin": {
+        "addons-linter": "bin/addons-linter"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/web-ext/node_modules/ajv": {
+      "version": "8.16.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
+      "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2",
+        "uri-js": "^4.4.1"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
     "node_modules/web-ext/node_modules/camelcase": {
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
@@ -11485,11 +12609,29 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/web-ext/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
     "node_modules/web-ext/node_modules/decamelize": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz",
       "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
@@ -11497,19 +12639,77 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/fs-extra": {
-      "version": "11.2.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
-      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+    "node_modules/web-ext/node_modules/espree": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz",
+      "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.11.3",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.0.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/fs-extra": {
+      "version": "11.2.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=14.14"
+      }
+    },
+    "node_modules/web-ext/node_modules/glob": {
+      "version": "10.4.2",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+      "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/web-ext/node_modules/jackspeak": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
       "dev": true,
-      "license": "MIT",
+      "license": "BlueOak-1.0.0",
       "dependencies": {
-        "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
+        "@isaacs/cliui": "^8.0.2"
       },
-      "engines": {
-        "node": ">=14.14"
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
       }
     },
     "node_modules/web-ext/node_modules/json-parse-even-better-errors": {
@@ -11545,16 +12745,27 @@
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       }
     },
+    "node_modules/web-ext/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/web-ext/node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+      "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
       "dev": true,
+      "license": "MIT",
       "bin": {
-        "mkdirp": "bin/cmd.js"
+        "mkdirp": "dist/cjs/src/bin.js"
       },
       "engines": {
         "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/web-ext/node_modules/node-fetch": {
@@ -11596,11 +12807,42 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/web-ext/node_modules/path-scurry": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/web-ext/node_modules/semver": {
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/web-ext/node_modules/strip-bom": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz",
       "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -11621,6 +12863,19 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/web-ext/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/web-ext/node_modules/tmp": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
@@ -11668,13 +12923,15 @@
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
       "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-2-Clause"
     },
     "node_modules/whatwg-encoding": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
       "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "iconv-lite": "0.6.3"
       },
@@ -11687,6 +12944,7 @@
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
       "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "safer-buffer": ">= 2.1.2 < 3.0.0"
       },
@@ -11699,6 +12957,7 @@
       "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
       "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "tr46": "~0.0.3",
         "webidl-conversions": "^3.0.0"
@@ -11708,13 +12967,15 @@
       "version": "3.7.7",
       "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz",
       "integrity": "sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
       "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "isexe": "^2.0.0"
       },
@@ -11730,6 +12991,7 @@
       "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
       "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-bigint": "^1.0.1",
         "is-boolean-object": "^1.1.0",
@@ -11742,16 +13004,17 @@
       }
     },
     "node_modules/which-typed-array": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
-      "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
+      "version": "1.1.15",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+      "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.4",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -11765,6 +13028,7 @@
       "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz",
       "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "string-width": "^5.0.1"
       },
@@ -11775,73 +13039,36 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/widest-line/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
-    "node_modules/widest-line/node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true
-    },
-    "node_modules/widest-line/node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+    "node_modules/winreg": {
+      "version": "0.0.12",
+      "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz",
+      "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==",
       "dev": true,
-      "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
+      "license": "BSD"
     },
-    "node_modules/widest-line/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+    "node_modules/word-wrap": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
       "dev": true,
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
+      "license": "MIT",
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/winreg": {
-      "version": "0.0.12",
-      "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz",
-      "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==",
-      "dev": true
-    },
     "node_modules/workerpool": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
-      "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
-      "dev": true
+      "version": "6.5.1",
+      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
+      "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
+      "dev": true,
+      "license": "Apache-2.0"
     },
     "node_modules/wrap-ansi": {
       "version": "6.2.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
       "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
@@ -11857,6 +13084,7 @@
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
       "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
@@ -11869,17 +13097,63 @@
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
+    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/wrap-ansi/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/write-file-atomic": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
       "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "imurmurhash": "^0.1.4",
         "signal-exit": "^4.0.1"
@@ -11889,9 +13163,9 @@
       }
     },
     "node_modules/ws": {
-      "version": "8.17.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
-      "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+      "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -11915,6 +13189,7 @@
       "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz",
       "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -11926,7 +13201,8 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
       "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/xml2js": {
       "version": "0.5.0",
@@ -11957,6 +13233,7 @@
       "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
       "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">=10"
       }
@@ -11965,13 +13242,28 @@
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
       "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/yaml": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
+      "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "yaml": "bin.mjs"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
     },
     "node_modules/yaml-lint": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/yaml-lint/-/yaml-lint-1.7.0.tgz",
       "integrity": "sha512-zeBC/kskKQo4zuoGQ+IYjw6C9a/YILr2SXoEZA9jM0COrSwvwVbfTiFegT8qYBSBgOwLMWGL8sY137tOmFXGnQ==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "consola": "^2.15.3",
         "globby": "^11.1.0",
@@ -11987,6 +13279,7 @@
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
       "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "cliui": "^8.0.1",
         "escalade": "^3.1.1",
@@ -12001,10 +13294,11 @@
       }
     },
     "node_modules/yargs-parser": {
-      "version": "20.2.4",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
-      "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+      "version": "20.2.9",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">=10"
       }
@@ -12014,6 +13308,7 @@
       "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
       "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "camelcase": "^6.0.0",
         "decamelize": "^4.0.0",
@@ -12029,6 +13324,7 @@
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
       "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -12041,6 +13337,7 @@
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
       "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -12053,6 +13350,29 @@
       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
       "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
       "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yargs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/yargs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
       "engines": {
         "node": ">=8"
       }
@@ -12062,6 +13382,7 @@
       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
       "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
       "dev": true,
+      "license": "ISC",
       "engines": {
         "node": ">=12"
       }
@@ -12071,6 +13392,7 @@
       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
       "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "buffer-crc32": "~0.2.3",
         "fd-slicer": "~1.1.0"
@@ -12081,6 +13403,7 @@
       "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
       "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=10"
       },
@@ -12088,11 +13411,38 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/yoctocolors": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz",
+      "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/yoctocolors-cjs": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
+      "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/zip-dir": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-2.0.0.tgz",
       "integrity": "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "async": "^3.2.0",
         "jszip": "^3.2.2"
diff --git a/package.json b/package.json
index 11b0804..32477ba 100644
--- a/package.json
+++ b/package.json
@@ -41,41 +41,41 @@
     "clean": "node .script/clean.js"
   },
   "devDependencies": {
-    "@prantlf/jsonlint": "14.0.3",
+    "@prantlf/jsonlint": "16.0.0",
     "@prettier/plugin-xml": "3.4.1",
-    "@stryker-mutator/core": "8.2.6",
-    "@stryker-mutator/mocha-runner": "8.2.6",
-    "@types/eslint": "8.56.10",
-    "@types/mocha": "10.0.6",
-    "addons-linter": "6.28.0",
+    "@stryker-mutator/core": "8.4.0",
+    "@stryker-mutator/mocha-runner": "8.4.0",
+    "@types/eslint": "9.6.0",
+    "@types/mocha": "10.0.7",
+    "addons-linter": "6.33.0",
     "eslint": "8.57.0",
     "eslint-plugin-array-func": "4.0.0",
     "eslint-plugin-eslint-comments": "3.2.0",
     "eslint-plugin-import": "2.29.1",
-    "eslint-plugin-jsdoc": "48.2.6",
-    "eslint-plugin-mocha": "10.4.3",
-    "eslint-plugin-n": "17.7.0",
+    "eslint-plugin-jsdoc": "50.0.1",
+    "eslint-plugin-mocha": "10.5.0",
+    "eslint-plugin-n": "17.10.2",
     "eslint-plugin-no-unsanitized": "4.0.2",
-    "eslint-plugin-promise": "6.2.0",
+    "eslint-plugin-promise": "7.1.0",
     "eslint-plugin-regexp": "2.6.0",
-    "eslint-plugin-unicorn": "53.0.0",
+    "eslint-plugin-unicorn": "55.0.0",
     "htmlhint": "1.1.4",
     "http-server": "14.1.1",
     "markdownlint": "0.34.0",
     "metalint": "0.17.0",
-    "mocha": "10.4.0",
-    "npm-package-json-lint": "7.1.0",
-    "prettier": "3.2.5",
+    "mocha": "10.7.3",
+    "npm-package-json-lint": "8.0.0",
+    "prettier": "3.3.3",
     "purgecss": "6.0.0",
-    "stylelint": "16.6.1",
+    "stylelint": "16.8.1",
     "stylelint-order": "6.0.4",
-    "typedoc": "0.25.13",
-    "typescript": "5.4.5",
-    "web-ext": "8.0.0",
+    "typedoc": "0.26.5",
+    "typescript": "5.5.4",
+    "web-ext": "8.2.0",
     "yaml-lint": "1.7.0"
   },
   "engines": {
-    "node": ">=20.6.0"
+    "node": ">=22.1.0"
   },
   "private": true
 }
diff --git a/src/engine/script.js b/src/engine/script.js
index 80ea278..67fce35 100644
--- a/src/engine/script.js
+++ b/src/engine/script.js
@@ -10,7 +10,7 @@ import YAML from "https://esm.sh/yaml@2.4.2";
 const hashCode = function (text) {
     return Math.abs(
         Array.from(text).reduce((code, character) => {
-            return (code << 5) - code + character.codePointAt();
+            return (code << 5) - code + character.codePointAt(0);
         }, 0),
     ).toString(36);
 };
@@ -38,7 +38,7 @@ const loadScrapers = function (scrapers) {
  *
  * @param {Object} widget La configuration du widget (un module et des éventuels
  *                        scrapers).
- * @returns {Promise<Object>} Le module avec ses éventuels scrapers.
+ * @returns {Promise<HTMLElement>} L'élément HTML du widget.
  */
 const loadWidget = async function (widget) {
     const scrapers = await loadScrapers(widget.module.scrapers ?? []);
diff --git a/src/extension/chromium/manifest.json b/src/extension/chromium/manifest.json
index 766ea2f..55ad77c 100644
--- a/src/extension/chromium/manifest.json
+++ b/src/extension/chromium/manifest.json
@@ -2,7 +2,7 @@
   "browser_specific_settings": {
     "gecko": {
       "id": "gout@regseb.github.io",
-      "strict_min_version": "126.0"
+      "strict_min_version": "129.0"
     }
   },
   "manifest_version": 3,
@@ -27,12 +27,13 @@
   },
   "author": "Sébastien Règne",
   "background": {
+    "scripts": ["background/script.js"],
     "service_worker": "background/script.js",
     "type": "module"
   },
   "homepage_url": "https://github.com/regseb/gout",
   "host_permissions": ["<all_urls>"],
-  "minimum_chrome_version": "125",
+  "minimum_chrome_version": "127",
   "permissions": [
     "activeTab",
     "storage",
diff --git a/src/extension/chromium/polyfill/browser.js b/src/extension/chromium/polyfill/browser.js
index 04f0dc9..19e5e8f 100644
--- a/src/extension/chromium/polyfill/browser.js
+++ b/src/extension/chromium/polyfill/browser.js
@@ -6,7 +6,7 @@
 
 // Copier la variable "chrome" (qui contient les APIs pour les WebExtensions)
 // dans la variable "browser", car Chromium fournit seulement "chrome".
-// https://crbug.com/798169
+// https://issues.chromium.org/40556351
 if (!("browser" in globalThis)) {
     globalThis.browser = chrome;
 }
diff --git a/src/extension/firefox/background/page.html b/src/extension/firefox/background/page.html
deleted file mode 100644
index d640daf..0000000
--- a/src/extension/firefox/background/page.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!doctype html>
-<html>
-  <head>
-    <meta charset="utf-8" />
-    <title>Gout</title>
-  </head>
-  <body>
-    <script src="script.js" type="module"></script>
-  </body>
-</html>
diff --git a/src/extension/firefox/background/script.js b/src/extension/firefox/background/script.js
index 72ff63a..6c1e222 100644
--- a/src/extension/firefox/background/script.js
+++ b/src/extension/firefox/background/script.js
@@ -7,45 +7,73 @@
 import "../polyfill/browser.js";
 import migrate from "./migrate.js";
 
-const replace = (headers, replacements) => {
-    const names = new Set(replacements.map((r) => r.name.toLowerCase()));
-    return [
-        ...headers.filter((h) => !names.has(h.name.toLowerCase())),
-        ...replacements,
+const handleBeforeNavigate = async (details) => {
+    // Récupérer les identifiants des onglets déjà impactés par l'extension.
+    const rules = await browser.declarativeNetRequest.getSessionRules();
+    const tabIds = [
+        ...rules.flatMap((r) => r.condition.tabIds),
+        // Ajouter le nouvel onglet.
+        details.tabId,
     ];
+
+    // Ajouter la règle de modification des entêtes HTTP pour tous les onglets
+    // affichant un dashboard.
+    await browser.declarativeNetRequest.updateSessionRules({
+        addRules: [
+            {
+                action: {
+                    type: "modifyHeaders",
+                    responseHeaders: [
+                        {
+                            header: "Access-Control-Allow-Methods",
+                            value: "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS",
+                            operation: "set",
+                        },
+                        {
+                            header: "Access-Control-Allow-Credentials",
+                            value: "true",
+                            operation: "set",
+                        },
+                        {
+                            header: "Access-Control-Expose-Headers",
+                            value: "*",
+                            operation: "set",
+                        },
+                        {
+                            header: "Access-Control-Allow-Headers",
+                            value: "*",
+                            operation: "set",
+                        },
+                        {
+                            header: "Access-Control-Allow-Origin",
+                            value: "*",
+                            operation: "set",
+                        },
+                    ],
+                },
+                condition: {
+                    tabIds,
+                    urlFilter: "|http*",
+                    resourceTypes: ["xmlhttprequest"],
+                },
+                id: 1,
+            },
+        ],
+        removeRuleIds: [1],
+    });
 };
 
-browser.webRequest.onBeforeSendHeaders.addListener(
-    async (details) => {
-        const { dashboards } = await browser.storage.sync.get("dashboards");
-        if (dashboards.some((d) => details.documentUrl === d.url)) {
-            return {
-                requestHeaders: replace(details.requestHeaders, [
-                    { name: "Sec-Fetch-Mode", value: "navigate" },
-                ]),
-            };
-        }
-        return {};
-    },
-    { urls: ["<all_urls>"] },
-    ["blocking", "requestHeaders"],
-);
+browser.storage.onChanged.addListener(async () => {
+    const { dashboards } = await browser.storage.sync.get("dashboards");
+    if (undefined === dashboards) {
+        return;
+    }
 
-browser.webRequest.onHeadersReceived.addListener(
-    async (details) => {
-        const { dashboards } = await browser.storage.sync.get("dashboards");
-        if (dashboards.some((d) => details.documentUrl === d.url)) {
-            return {
-                responseHeaders: replace(details.responseHeaders, [
-                    { name: "Access-Control-Allow-Origin", value: "*" },
-                ]),
-            };
-        }
-        return {};
-    },
-    { urls: ["<all_urls>"] },
-    ["blocking", "responseHeaders"],
-);
+    browser.webNavigation.onBeforeNavigate.removeListener(handleBeforeNavigate);
+    browser.webNavigation.onBeforeNavigate.addListener(handleBeforeNavigate, {
+        url: dashboards.map((d) => ({ urlEquals: d.url })),
+    });
+});
 
 browser.runtime.onInstalled.addListener(async () => {
     await migrate();
diff --git a/src/extension/firefox/manifest.json b/src/extension/firefox/manifest.json
index f6e8f87..58eae27 100644
--- a/src/extension/firefox/manifest.json
+++ b/src/extension/firefox/manifest.json
@@ -2,7 +2,7 @@
   "browser_specific_settings": {
     "gecko": {
       "id": "gout@regseb.github.io",
-      "strict_min_version": "126.0"
+      "strict_min_version": "129.0"
     }
   },
   "manifest_version": 2,
@@ -27,16 +27,18 @@
   },
   "author": "Sébastien Règne",
   "background": {
-    "page": "background/page.html",
-    "persistent": true
+    "scripts": ["background/script.js"],
+    "service_worker": "background/script.js",
+    "type": "module"
   },
   "homepage_url": "https://github.com/regseb/gout",
-  "minimum_chrome_version": "125",
+  "minimum_chrome_version": "127",
   "permissions": [
     "<all_urls>",
     "activeTab",
     "storage",
-    "webRequest",
-    "webRequestBlocking"
+    "webNavigation",
+    "declarativeNetRequest",
+    "declarativeNetRequestFeedback"
   ]
 }
diff --git a/src/extension/firefox/polyfill/browser.js b/src/extension/firefox/polyfill/browser.js
index 04f0dc9..19e5e8f 100644
--- a/src/extension/firefox/polyfill/browser.js
+++ b/src/extension/firefox/polyfill/browser.js
@@ -6,7 +6,7 @@
 
 // Copier la variable "chrome" (qui contient les APIs pour les WebExtensions)
 // dans la variable "browser", car Chromium fournit seulement "chrome".
-// https://crbug.com/798169
+// https://issues.chromium.org/40556351
 if (!("browser" in globalThis)) {
     globalThis.browser = chrome;
 }
diff --git a/src/module/audio/README.md b/src/module/audio/README.md
index 191aaf1..bff231d 100644
--- a/src/module/audio/README.md
+++ b/src/module/audio/README.md
@@ -27,7 +27,7 @@ suivantes :
         propriété, les données ne sont jamais mises à jour.
       </p>
       <p>
-        Exemple : <code>"@daily"</code>.
+        Exemple : <code>"@daily"</code>
       </p>
     </td>
   </tr>
@@ -42,7 +42,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -51,6 +51,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -77,7 +78,7 @@ suivantes :
         l'icône est affichée).
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.mp3"</code>.
+        Exemple : <code>"https://example.com/foo/bar.mp3"</code>
       </p>
     </td>
   </tr>
@@ -92,7 +93,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -108,7 +109,7 @@ suivantes :
         ancien. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -124,7 +125,7 @@ suivantes :
         l'image d'une note de musique est affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -137,7 +138,7 @@ suivantes :
         de lien.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.html"</code>.
+        Exemple : <code>"https://example.com/foo/bar.html"</code>
       </p>
     </td>
   </tr>
@@ -151,7 +152,7 @@ suivantes :
         des liens HTML). Par défaut, les liens s'ouvrent dans un nouvel onglet.
       </p>
       <p>
-        Exemple : <code>"_top"</code>.
+        Exemple : <code>"_top"</code>
       </p>
     </td>
   </tr>
@@ -164,7 +165,7 @@ suivantes :
         infobulle n'est affichée.
       </p>
       <p>
-        Exemple : <code>"La meilleur radio !"</code>.
+        Exemple : <code>"La meilleur radio !"</code>
       </p>
     </td>
   </tr>
diff --git a/src/module/clock/README.md b/src/module/clock/README.md
index cff071d..a080712 100644
--- a/src/module/clock/README.md
+++ b/src/module/clock/README.md
@@ -27,7 +27,7 @@ suivantes :
         propriété, les données ne sont jamais mises à jour.
       </p>
       <p>
-        Exemple : <code>"@daily"</code>.
+        Exemple : <code>"@daily"</code>
       </p>
     </td>
   </tr>
@@ -42,7 +42,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -51,6 +51,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -79,7 +80,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -95,7 +96,7 @@ suivantes :
         courante est utilisée.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -113,7 +114,7 @@ suivantes :
         d'une simple horloge est affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
diff --git a/src/module/examples/preact/helloworld/README.md b/src/module/examples/preact/helloworld/README.md
index 84cc81e..f924137 100644
--- a/src/module/examples/preact/helloworld/README.md
+++ b/src/module/examples/preact/helloworld/README.md
@@ -4,8 +4,8 @@
 > gout-module-examples-preact, gout-module-examples-preact-helloworld.
 
 Ce module est un exemple utilisant **[Preact](https://preactjs.com/)**. Il
-implémente un _hello world_ récupéré du tutoriel [_Interactive Hello
-World_](https://preactjs.com/guide/v10/tutorial/#interactive-hello-world).
+implémente un _hello world_ récupéré du tutoriel
+[_Interactive Hello World_](https://preactjs.com/guide/v10/tutorial/#interactive-hello-world).
 
 ## Options
 
@@ -17,7 +17,7 @@ Ce module n'utilise pas de scraper.
 
 ## Exemple
 
-Ce widget affiche un hello world développé avec Preact.
+Ce widget affiche un _hello world_ développé avec Preact.
 
 ```html
 <script type="application/yaml">
diff --git a/src/module/icon/README.md b/src/module/icon/README.md
index f48c4ac..afac8e6 100644
--- a/src/module/icon/README.md
+++ b/src/module/icon/README.md
@@ -27,7 +27,7 @@ suivantes :
         propriété, les données ne sont jamais mises à jour.
       </p>
       <p>
-        Exemple : <code>"@daily"</code>.
+        Exemple : <code>"@daily"</code>
       </p>
     </td>
   </tr>
@@ -42,7 +42,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -51,6 +51,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -79,7 +80,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -95,7 +96,7 @@ suivantes :
         ancien. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -111,7 +112,7 @@ suivantes :
         aucune icône n'est affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -124,7 +125,7 @@ suivantes :
         de lien.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.html"</code>.
+        Exemple : <code>"https://example.com/foo/bar.html"</code>
       </p>
     </td>
   </tr>
@@ -138,7 +139,7 @@ suivantes :
         des liens HTML). Par défaut, les liens s'ouvrent dans un nouvel onglet.
       </p>
       <p>
-        Exemple : <code>"_top"</code>.
+        Exemple : <code>"_top"</code>
       </p>
     </td>
   </tr>
@@ -151,7 +152,7 @@ suivantes :
         infobulle est affichée.
       </p>
       <p>
-        Exemple : <code>"Click me!"</code>.
+        Exemple : <code>"Click me!"</code>
       </p>
     </td>
   </tr>
diff --git a/src/module/iframe/README.md b/src/module/iframe/README.md
index 0fb6257..9dffcb9 100644
--- a/src/module/iframe/README.md
+++ b/src/module/iframe/README.md
@@ -27,7 +27,7 @@ suivantes :
         propriété, l'<code>iframe</code> n'est jamais rechargé.
       </p>
       <p>
-        Exemple : <code>"@daily"</code>.
+        Exemple : <code>"@daily"</code>
       </p>
     </td>
   </tr>
@@ -42,7 +42,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -55,7 +55,7 @@ suivantes :
         fixée à <code>150</code>.
       </p>
       <p>
-        Exemple : <code>200</code>.
+        Exemple : <code>200</code>
       </p>
     </td>
   </tr>
@@ -64,6 +64,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -93,7 +94,7 @@ suivantes :
         ancien. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -105,7 +106,7 @@ suivantes :
         Le lien de la page Internet qui sera affiché dans l'<code>iframe</code>.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.html"</code>.
+        Exemple : <code>"https://example.com/foo/bar.html"</code>
       </p>
     </td>
   </tr>
diff --git a/src/module/image/README.md b/src/module/image/README.md
index 350f04e..7501390 100644
--- a/src/module/image/README.md
+++ b/src/module/image/README.md
@@ -32,7 +32,7 @@ suivantes :
              faux-positifs avec les expressions cron.
              https://github.com/DavidAnson/markdownlint/issues/427 -->
         <!-- markdownlint-disable-next-line no-space-in-emphasis -->
-        Exemple : <code>"*/5 * * * *"</code>.
+        Exemple : <code>"*/5 * * * *"</code>
       </p>
     </td>
   </tr>
@@ -47,7 +47,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -60,7 +60,7 @@ suivantes :
         les éléments retournés par les scrapers sont affichés.
       </p>
       <p>
-        Exemple : <code>5</code>.
+        Exemple : <code>5</code>
       </p>
     </td>
   </tr>
@@ -69,6 +69,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -97,7 +98,7 @@ suivantes :
         ancien. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -112,7 +113,7 @@ suivantes :
         propriétés.
       </p>
       <p>
-        Exemple : <code>"example.com:12345"</code>.
+        Exemple : <code>"example.com:12345"</code>
       </p>
     </td>
   </tr>
@@ -124,7 +125,7 @@ suivantes :
         L'URL de l'image affichée. Par défaut, aucune image n'est affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.jpg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.jpg"</code>
       </p>
     </td>
   </tr>
@@ -137,7 +138,7 @@ suivantes :
         affichée).
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.html"</code>.
+        Exemple : <code>"https://example.com/foo/bar.html"</code>
       </p>
     </td>
   </tr>
@@ -151,7 +152,7 @@ suivantes :
         des liens HTML). Par défaut, les liens s'ouvrent dans un nouvel onglet.
       </p>
       <p>
-        Exemple : <code>"_top"</code>.
+        Exemple : <code>"_top"</code>
       </p>
     </td>
   </tr>
@@ -164,7 +165,7 @@ suivantes :
         infobulle n'est affichée.
       </p>
       <p>
-        Exemple : <code>"Magnifique photo !"</code>.
+        Exemple : <code>"Magnifique photo !"</code>
       </p>
     </td>
   </tr>
diff --git a/src/module/image/image.js b/src/module/image/image.js
index cdc4a52..ed9439d 100644
--- a/src/module/image/image.js
+++ b/src/module/image/image.js
@@ -10,7 +10,7 @@ const hashCode = function (item) {
     return Math.abs(
         Array.from(item.guid ?? JSON.stringify(item)).reduce(
             (code, character) => {
-                return (code << 5) - code + character.codePointAt();
+                return (code << 5) - code + character.codePointAt(0);
             },
             0,
         ),
diff --git a/src/module/list/README.md b/src/module/list/README.md
index 2551ad6..1d11984 100644
--- a/src/module/list/README.md
+++ b/src/module/list/README.md
@@ -28,7 +28,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -48,7 +48,7 @@ suivantes :
              faux-positifs avec les expressions cron.
              https://github.com/DavidAnson/markdownlint/issues/427 -->
         <!-- markdownlint-disable-next-line no-space-in-emphasis -->
-        Exemple : <code>"*/5 * * * *"</code>.
+        Exemple : <code>"*/5 * * * *"</code>
       </p>
     </td>
   </tr>
@@ -63,7 +63,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -79,7 +79,7 @@ suivantes :
         opacité de <code>0.2</code>. Par défaut, aucune icône n'est affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -92,7 +92,7 @@ suivantes :
         les éléments retournés par les scrapers sont affichés.
       </p>
       <p>
-        Exemple : <code>5</code>.
+        Exemple : <code>5</code>
       </p>
     </td>
   </tr>
@@ -101,6 +101,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -129,7 +130,7 @@ suivantes :
         ancien. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -142,7 +143,7 @@ suivantes :
         aucune infobulle n'est affichée.
       </p>
       <p>
-        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
+        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>
       </p>
     </td>
   </tr>
@@ -157,7 +158,7 @@ suivantes :
         propriétés.
       </p>
       <p>
-        Exemple : <code>"example.com:12345"</code>.
+        Exemple : <code>"example.com:12345"</code>
       </p>
     </td>
   </tr>
@@ -170,7 +171,7 @@ suivantes :
         affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -183,7 +184,7 @@ suivantes :
         l'élément est affiché).
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.html"</code>.
+        Exemple : <code>"https://example.com/foo/bar.html"</code>
       </p>
     </td>
   </tr>
@@ -197,7 +198,7 @@ suivantes :
         des liens HTML). Par défaut, les liens s'ouvrent dans un nouvel onglet.
       </p>
       <p>
-        Exemple : <code>"_top"</code>.
+        Exemple : <code>"_top"</code>
       </p>
     </td>
   </tr>
@@ -209,7 +210,7 @@ suivantes :
         Le texte affiché dans la ligne.
       </p>
       <p>
-        Exemple : <code>"La 7e va vous étonner"</code>.
+        Exemple : <code>"La 7e va vous étonner"</code>
       </p>
     </td>
   </tr>
@@ -218,7 +219,8 @@ suivantes :
 ## Exemple
 
 Ce widget affiche les cinq dernières actualités du site
-[LinuxFr.org](https://linuxfr.org/) avec une mise à jour toutes les dix minutes.
+[LinuxFr.org](https://linuxfr.org/) avec une mise à jour toutes les
+[dix minutes](https://crontab.guru/#*/10_*_*_*_*).
 
 ```html
 <script type="application/yaml">
diff --git a/src/module/list/list.js b/src/module/list/list.js
index 335ca5c..ed0f25b 100644
--- a/src/module/list/list.js
+++ b/src/module/list/list.js
@@ -10,7 +10,7 @@ const hashCode = function (item) {
     return Math.abs(
         Array.from(item.guid ?? JSON.stringify(item)).reduce(
             (code, character) => {
-                return (code << 5) - code + character.codePointAt();
+                return (code << 5) - code + character.codePointAt(0);
             },
             0,
         ),
diff --git a/src/module/notepad/README.md b/src/module/notepad/README.md
index cdb7828..2befb09 100644
--- a/src/module/notepad/README.md
+++ b/src/module/notepad/README.md
@@ -7,6 +7,7 @@ Ce module affiche un bloc-notes.
 ## Options
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -31,7 +32,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -47,7 +48,7 @@ suivantes :
         opacité de <code>0.2</code>. Par défaut, aucune icône n'est affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -60,7 +61,7 @@ suivantes :
         aucune infobulle n'est affichée.
       </p>
       <p>
-        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
+        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>
       </p>
     </td>
   </tr>
@@ -75,7 +76,7 @@ suivantes :
         propriétés.
       </p>
       <p>
-        Exemple : <code>"example.com:12345"</code>.
+        Exemple : <code>"example.com:12345"</code>
       </p>
     </td>
   </tr>
@@ -87,7 +88,7 @@ suivantes :
         L'indication affichée dans le bloc-notes quand celui-ci est vide.
       </p>
       <p>
-        Exemple : <code>"La 7e va vous étonner"</code>.
+        Exemple : <code>"La 7e va vous étonner"</code>
       </p>
     </td>
   </tr>
diff --git a/src/module/notepad/notepad.js b/src/module/notepad/notepad.js
index 2132aa3..8220337 100644
--- a/src/module/notepad/notepad.js
+++ b/src/module/notepad/notepad.js
@@ -8,7 +8,7 @@ const hashCode = function (item) {
     return Math.abs(
         Array.from(item.guid ?? JSON.stringify(item)).reduce(
             (code, character) => {
-                return (code << 5) - code + character.codePointAt();
+                return (code << 5) - code + character.codePointAt(0);
             },
             0,
         ),
diff --git a/src/module/podcast/README.md b/src/module/podcast/README.md
index 6e2f9d3..e30ce3a 100644
--- a/src/module/podcast/README.md
+++ b/src/module/podcast/README.md
@@ -27,7 +27,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -47,7 +47,7 @@ suivantes :
              faux-positifs avec les expressions cron.
              https://github.com/DavidAnson/markdownlint/issues/427 -->
         <!-- markdownlint-disable-next-line no-space-in-emphasis -->
-        Exemple : <code>"*/5 * * * *"</code>.
+        Exemple : <code>"*/5 * * * *"</code>
       </p>
     </td>
   </tr>
@@ -62,7 +62,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -79,7 +79,7 @@ suivantes :
         est affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -92,7 +92,7 @@ suivantes :
         les éléments retournés par les scrapers sont affichés.
       </p>
       <p>
-        Exemple : <code>5</code>.
+        Exemple : <code>5</code>
       </p>
     </td>
   </tr>
@@ -101,6 +101,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -125,7 +126,7 @@ suivantes :
         L'URL d'un fichier audio.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.mp3"</code>.
+        Exemple : <code>"https://example.com/foo/bar.mp3"</code>
       </p>
     </td>
   </tr>
@@ -141,7 +142,7 @@ suivantes :
         ancien. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -154,7 +155,7 @@ suivantes :
         aucune infobulle n'est affichée.
       </p>
       <p>
-        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
+        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>
       </p>
     </td>
   </tr>
@@ -169,7 +170,7 @@ suivantes :
         propriétés.
       </p>
       <p>
-        Exemple : <code>"example.com:12345"</code>.
+        Exemple : <code>"example.com:12345"</code>
       </p>
     </td>
   </tr>
@@ -182,7 +183,7 @@ suivantes :
         affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -195,7 +196,7 @@ suivantes :
         l'élément est affiché).
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.html"</code>.
+        Exemple : <code>"https://example.com/foo/bar.html"</code>
       </p>
     </td>
   </tr>
@@ -209,7 +210,7 @@ suivantes :
         des liens HTML). Par défaut, les liens s'ouvrent dans un nouvel onglet.
       </p>
       <p>
-        Exemple : <code>"_top"</code>.
+        Exemple : <code>"_top"</code>
       </p>
     </td>
   </tr>
@@ -221,7 +222,7 @@ suivantes :
         Le texte affiché dans la ligne.
       </p>
       <p>
-        Exemple : <code>"La 7e va vous étonner"</code>.
+        Exemple : <code>"La 7e va vous étonner"</code>
       </p>
     </td>
   </tr>
@@ -229,8 +230,8 @@ suivantes :
 
 ## Exemple
 
-Ce widget affiche les deux derniers épisodes des [Cast Codeurs
-Podcast](https://lescastcodeurs.com/).
+Ce widget affiche les deux derniers épisodes des
+[Cast Codeurs Podcast](https://lescastcodeurs.com/).
 
 ```html
 <script type="application/yaml">
diff --git a/src/module/podcast/podcast.js b/src/module/podcast/podcast.js
index 2ad8a26..c1991f9 100644
--- a/src/module/podcast/podcast.js
+++ b/src/module/podcast/podcast.js
@@ -10,7 +10,7 @@ const hashCode = function (item) {
     return Math.abs(
         Array.from(item.guid ?? JSON.stringify(item)).reduce(
             (code, character) => {
-                return (code << 5) - code + character.codePointAt();
+                return (code << 5) - code + character.codePointAt(0);
             },
             0,
         ),
diff --git a/src/module/search/README.md b/src/module/search/README.md
index d632197..ce3b867 100644
--- a/src/module/search/README.md
+++ b/src/module/search/README.md
@@ -11,6 +11,7 @@ Aucune option n'est nécessaire. Tout le paramétrage se fait avec les scrapers.
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
diff --git a/src/module/single/README.md b/src/module/single/README.md
index a125a1d..fe468f9 100644
--- a/src/module/single/README.md
+++ b/src/module/single/README.md
@@ -32,7 +32,7 @@ suivantes :
              faux-positifs avec les expressions cron.
              https://github.com/DavidAnson/markdownlint/issues/427 -->
         <!-- markdownlint-disable-next-line no-space-in-emphasis -->
-        Exemple : <code>"*/5 * * * *"</code>.
+        Exemple : <code>"*/5 * * * *"</code>
       </p>
     </td>
   </tr>
@@ -47,7 +47,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -56,6 +56,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -83,7 +84,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -99,7 +100,7 @@ suivantes :
         récent. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -112,7 +113,7 @@ suivantes :
         aucune infobulle n'est affichée.
       </p>
       <p>
-        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
+        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>
       </p>
     </td>
   </tr>
@@ -125,7 +126,7 @@ suivantes :
         affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -138,7 +139,7 @@ suivantes :
         l'élément est affiché).
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.html"</code>.
+        Exemple : <code>"https://example.com/foo/bar.html"</code>
       </p>
     </td>
   </tr>
@@ -152,7 +153,7 @@ suivantes :
         des liens HTML). Par défaut, les liens s'ouvrent dans un nouvel onglet.
       </p>
       <p>
-        Exemple : <code>"_top"</code>.
+        Exemple : <code>"_top"</code>
       </p>
     </td>
   </tr>
@@ -164,7 +165,7 @@ suivantes :
         Le texte affiché dans la ligne.
       </p>
       <p>
-        Exemple : <code>"La 7e va vous étonner"</code>.
+        Exemple : <code>"La 7e va vous étonner"</code>
       </p>
     </td>
   </tr>
diff --git a/src/module/text/README.md b/src/module/text/README.md
index 2d4069a..d5d24c6 100644
--- a/src/module/text/README.md
+++ b/src/module/text/README.md
@@ -28,7 +28,7 @@ suivantes :
         propriété, les données ne sont jamais mises à jour.
       </p>
       <p>
-        Exemple : <code>"@daily"</code>.
+        Exemple : <code>"@daily"</code>
       </p>
     </td>
   </tr>
@@ -43,7 +43,7 @@ suivantes :
         laissé vide.
       </p>
       <p>
-        Exemple : <code>title: "(aucun élément)"</code>.
+        Exemple : <code>title: "(aucun élément)"</code>
       </p>
     </td>
   </tr>
@@ -52,6 +52,7 @@ suivantes :
 ## Scrapers
 
 > [!NOTE]
+>
 > Ce chapitre est utile principalement pour le développement de scrapers
 > compatibles avec ce module.
 
@@ -77,7 +78,7 @@ suivantes :
         du texte. Par défaut, le texte est aligné à gauche.
       </p>
       <p>
-        Exemple : <code>"justify"</code>.
+        Exemple : <code>"justify"</code>
       </p>
     </td>
   </tr>
@@ -92,7 +93,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -108,7 +109,7 @@ suivantes :
         récent. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
-        Exemple : <code>900277200000</code>.
+        Exemple : <code>900277200000</code>
       </p>
     </td>
   </tr>
@@ -121,7 +122,7 @@ suivantes :
         aucune infobulle n'est affichée.
       </p>
       <p>
-        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>.
+        Exemple : <code>"Ce top10 des choses incroyables est incroyable"</code>
       </p>
     </td>
   </tr>
@@ -134,7 +135,7 @@ suivantes :
         affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -147,7 +148,7 @@ suivantes :
         concaténé et affiché dans le cadre.
       </p>
       <p>
-        Exemple : <code>"La 7e va vous étonner"</code>.
+        Exemple : <code>"La 7e va vous étonner"</code>
       </p>
     </td>
   </tr>
diff --git a/src/module/tools/findrss/README.md b/src/module/tools/findrss/README.md
index 558c092..e1b3a71 100644
--- a/src/module/tools/findrss/README.md
+++ b/src/module/tools/findrss/README.md
@@ -27,7 +27,7 @@ suivantes :
         utilisée.
       </p>
       <p>
-        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>.
+        Exemples : <code>"#673ab7"</code>, <code>"chocolate"</code>
       </p>
     </td>
   </tr>
@@ -43,7 +43,7 @@ suivantes :
         opacité de <code>0.2</code>. Par défaut, aucune icône n'est affichée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.svg"</code>.
+        Exemple : <code>"https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -56,7 +56,7 @@ suivantes :
         tous les flux extraits sont affichés.
       </p>
       <p>
-        Exemple : <code>5</code>.
+        Exemple : <code>5</code>
       </p>
     </td>
   </tr>
diff --git a/src/scraper/examples/days/README.md b/src/scraper/examples/days/README.md
index 9e85fcf..ff34dc4 100644
--- a/src/scraper/examples/days/README.md
+++ b/src/scraper/examples/days/README.md
@@ -2,8 +2,8 @@
 
 > Mots-clés : gout, gout-scraper, gout-scraper-examples-days.
 
-Ce scraper d'exemple d'exemple retourne les noms des prochains jours de la
-semaine. La langue des noms est paramétrable dans les options du scraper.
+Ce scraper d'exemple retourne les noms des prochains jours de la semaine. La
+langue des noms est paramétrable dans les options du scraper.
 
 Il peut être utilisé avec les modules :
 
@@ -28,11 +28,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le code ISO 639-1 de la langue. Par défaut, c'est le français qui est
-        utilisé.
+        Le code
+        <a href="https://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1">ISO 639-1</a>
+        de la langue. Par défaut, c'est le français qui est utilisé.
       </p>
       <p>
-        Exemple : <code>"en"</code>.
+        Exemple : <code>"en"</code>
       </p>
     </td>
   </tr>
diff --git a/src/scraper/examples/helloworld/README.md b/src/scraper/examples/helloworld/README.md
index f1f3f5d..19e9dfd 100644
--- a/src/scraper/examples/helloworld/README.md
+++ b/src/scraper/examples/helloworld/README.md
@@ -9,8 +9,8 @@ Il peut être utilisé avec les modules :
 
 - [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
   ;
-- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme)
-  pour afficher un seul élément.
+- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) pour
+  afficher un seul élément.
 
 ## Options
 
@@ -29,10 +29,11 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le nom de la personne à saluer. Par défaut, c'est le `"world"`.
+        Le nom de la personne à saluer. Par défaut, c'est le
+        <code>"world"</code>.
       </p>
       <p>
-        Exemple : <code>"there"</code>.
+        Exemple : <code>"there"</code>
       </p>
     </td>
   </tr>
@@ -40,7 +41,7 @@ suivantes :
 
 ## Exemples
 
-Ce widget affiche le texte `"Hello world!"`.
+Ce widget affiche le texte _Hello world!_
 
 ```html
 <script type="application/yaml">
@@ -51,7 +52,7 @@ Ce widget affiche le texte `"Hello world!"`.
 </script>
 ```
 
-Ce widget affiche le texte `"Hello Doctor!"`.
+Ce widget affiche le texte _Hello Doctor!_
 
 ```html
 <script type="application/yaml">
diff --git a/src/scraper/examples/helloworld/helloworld.js b/src/scraper/examples/helloworld/helloworld.js
index 5cea323..88aeaba 100644
--- a/src/scraper/examples/helloworld/helloworld.js
+++ b/src/scraper/examples/helloworld/helloworld.js
@@ -25,7 +25,7 @@ export default class HelloWorldScraper {
      */
     constructor({ who }) {
         // Le premier paramètre du constructeur contient les options du scraper.
-        // Si aucune option est spécifiée dans la configuration du widget, le
+        // Si aucune option n'est spécifiée dans la configuration du widget, le
         // constructeur recevra un objet vide.
 
         // Récupérer le nom de la personne à saluer dans les options du scraper.
diff --git a/src/scraper/examples/jsonplaceholder/README.md b/src/scraper/examples/jsonplaceholder/README.md
index 7966fee..75996d8 100644
--- a/src/scraper/examples/jsonplaceholder/README.md
+++ b/src/scraper/examples/jsonplaceholder/README.md
@@ -13,9 +13,8 @@ Il peut être utilisé avec les modules :
 - [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
   pour afficher seulement le nom de la dernière image (avec un lien vers
   l'image) ;
-- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme)
-  pour afficher seulement le nom des images (avec un lien pour voir chaque
-  image).
+- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) pour
+  afficher seulement le nom des images (avec un lien pour voir chaque image).
 
 ## Options
 
@@ -38,7 +37,7 @@ suivantes :
         <code>100</code>.
       </p>
       <p>
-        Exemple : <code>42</code>.
+        Exemple : <code>42</code>
       </p>
     </td>
   </tr>
@@ -53,7 +52,7 @@ suivantes :
         <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
-        Exemple : <code>{ "icon": "https://example.com/foo/bar.svg" }</code>.
+        Exemple : <code>icon: "https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -62,12 +61,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
-        aucun filtre n'est appliqué. Pour plus de détails, voir le scraper
+        Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
+        filtre n'est appliqué. Pour plus de détails, voir le scraper
         <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
       </p>
       <p>
-        Exemple : <code>"title != 'foo'"</code>.
+        Exemple : <code>"title != 'foo'"</code>
       </p>
     </td>
   </tr>
diff --git a/src/scraper/icon/ping/README.md b/src/scraper/icon/ping/README.md
index abe9e16..68ba884 100644
--- a/src/scraper/icon/ping/README.md
+++ b/src/scraper/icon/ping/README.md
@@ -27,7 +27,7 @@ suivantes :
         L'URL du serveur qui sera testé.
       </p>
       <p>
-        Exemple : <code>"https://example.com/"</code>.
+        Exemple : <code>"https://example.com/"</code>
       </p>
     </td>
   </tr>
@@ -49,9 +49,12 @@ suivantes :
         <li>autre : gris.</li>
       </ul>
       <p>
-        Exemple :
-        <code>{ "1xx": "blue", "200": "green", "2xx": "darkgreen", "xxx":
-              "gray" }</code>.
+        Exemple : <pre><code>
+1xx: blue
+200: green
+2xx: darkgreen
+xxx: gray
+        </code></pre>
       </p>
     </td>
   </tr>
@@ -66,7 +69,7 @@ suivantes :
         <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
-        Exemple : <code>{ "target": "_top" }</code>.
+        Exemple : <code>target: "_top"</code>
       </p>
     </td>
   </tr>
@@ -75,12 +78,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
-        aucun filtre n'est appliqué. Pour plus de détails, voir le scraper
+        Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
+        filtre n'est appliqué. Pour plus de détails, voir le scraper
         <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
       </p>
       <p>
-        Exemple : <code>"color != 'green'"</code>.
+        Exemple : <code>"color != 'green'"</code>
       </p>
     </td>
   </tr>
diff --git a/src/scraper/list/jsonfeed/README.md b/src/scraper/list/jsonfeed/README.md
index 9eae96d..e9d8739 100644
--- a/src/scraper/list/jsonfeed/README.md
+++ b/src/scraper/list/jsonfeed/README.md
@@ -3,8 +3,8 @@
 > Mots-clés : gout, gout-scraper, gout-scraper-list-jsonfeed, gout-module-list,
 > gout-module-single.
 
-Ce scraper récupère la liste des derniers éléments d'un flux [**JSON
-Feed**](https://jsonfeed.org/).
+Ce scraper récupère la liste des derniers éléments d'un flux
+[**JSON Feed**](https://jsonfeed.org/).
 
 Il peut être utilisé avec les modules :
 
@@ -32,7 +32,7 @@ suivantes :
         L'URL vers un JSON Feed.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.json"</code>.
+        Exemple : <code>"https://example.com/foo/bar.json"</code>
       </p>
     </td>
   </tr>
@@ -47,7 +47,7 @@ suivantes :
         <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
-        Exemple : <code>{ "icon": "https://example.com/foo/bar.svg" }</code>.
+        Exemple : <code>icon: "https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -56,12 +56,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
-        aucun filtre n'est appliqué. Pour plus de détails, voir le scraper
+        Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
+        filtre n'est appliqué. Pour plus de détails, voir le scraper
         <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
       </p>
       <p>
-        Exemple : <code>"title != 'foo'"</code>.
+        Exemple : <code>"title != 'foo'"</code>
       </p>
     </td>
   </tr>
diff --git a/src/scraper/list/rss/README.md b/src/scraper/list/rss/README.md
index cbe82f8..9f347c9 100644
--- a/src/scraper/list/rss/README.md
+++ b/src/scraper/list/rss/README.md
@@ -11,7 +11,9 @@ Il peut être utilisé avec les modules :
 - [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
   pour afficher seulement le dernier élément ;
 - [_podcast_](https://github.com/regseb/gout/tree/HEAD/src/module/podcast#readme)
-  pour un flux RSS avec des `enclosure` de type `audio` ;
+  pour un flux RSS avec des
+  [`enclosure`](https://www.rssboard.org/rss-specification#ltenclosuregtSubelementOfLtitemgt)
+  de type `audio` ;
 - [_image_](https://github.com/regseb/gout/tree/HEAD/src/module/image#readme)
   pour un flux RSS avec des `enclosure` de type `image`.
 
@@ -35,7 +37,7 @@ suivantes :
         L'URL vers un flux RSS ou Atom.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo/bar.rss"</code>.
+        Exemple : <code>"https://example.com/foo/bar.rss"</code>
       </p>
     </td>
   </tr>
@@ -50,7 +52,7 @@ suivantes :
         <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
-        Exemple : <code>{ "icon": "https://example.com/foo/bar.svg" }</code>.
+        Exemple : <code>icon: "https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -59,12 +61,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
-        aucun filtre n'est appliqué. Pour plus de détails, voir le scraper
+        Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
+        filtre n'est appliqué. Pour plus de détails, voir le scraper
         <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
       </p>
       <p>
-        Exemple : <code>"title != 'foo'"</code>.
+        Exemple : <code>"title != 'foo'"</code>
       </p>
     </td>
   </tr>
@@ -72,8 +74,8 @@ suivantes :
 
 ## Exemple
 
-Ce widget affiche les cinq dernières actualités du site [Le
-Monde.fr](https://www.lemonde.fr/).
+Ce widget affiche les cinq dernières actualités du site
+[Le Monde.fr](https://www.lemonde.fr/).
 
 ```html
 <script type="application/yaml">
diff --git a/src/scraper/search/opensearch/README.md b/src/scraper/search/opensearch/README.md
index 667d84c..3b4b5f4 100644
--- a/src/scraper/search/opensearch/README.md
+++ b/src/scraper/search/opensearch/README.md
@@ -30,7 +30,7 @@ suivantes :
         qui sera remplacée par les termes recherchés.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo.html?q={searchTerms}"</code>.
+        Exemple : <code>"https://example.com/foo.html?q={searchTerms}"</code>
       </p>
     </td>
   </tr>
@@ -45,7 +45,7 @@ suivantes :
         remontée.
       </p>
       <p>
-        Exemple : <code>"https://example.com/foo.html?q={searchTerms}"</code>.
+        Exemple : <code>"https://example.com/foo.html?q={searchTerms}"</code>
       </p>
     </td>
   </tr>
@@ -58,7 +58,10 @@ suivantes :
         <a href="https://github.com/regseb/gout/tree/HEAD/src/module/search#scrapers"><code>info()</code></a>.
       </p>
       <p>
-        Exemple : <code>{ "title": "Google", "color": "#2196f3" }</code>.
+        Exemple : <pre><code>
+title: "Google"
+color: "#2196f3"
+        </code></pre>
       </p>
     </td>
   </tr>
diff --git a/src/scraper/tools/complements/README.md b/src/scraper/tools/complements/README.md
index e606432..c75c15b 100644
--- a/src/scraper/tools/complements/README.md
+++ b/src/scraper/tools/complements/README.md
@@ -3,8 +3,8 @@
 > Mots-clés : gout, gout-scraper, gout-scraper-tools-complements.
 
 Ce scraper ajoute des propriétés dans les résultats d'un autre scraper. Il est
-rare d'utiliser ce scraper directement dans un widget. Il peut être utilisé
-pour ajouter la fonctionnalité dans un autre scraper :
+rare d'utiliser ce scraper directement dans un widget. Il peut être utilisé pour
+ajouter la fonctionnalité dans un autre scraper :
 
 ```javascript
 import chain from "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/utils/scraper/chain.js";
@@ -40,7 +40,7 @@ suivantes :
         défaut aucune propriété n'est ajoutée.
       </p>
       <p>
-        Exemple : <code>{ "icon": "https://example.com/foo/bar.svg" }</code>.
+        Exemple : <code>icon: "https://example.com/foo/bar.svg"</code>
       </p>
     </td>
   </tr>
@@ -58,23 +58,24 @@ du tableau.
 ## Exemple
 
 Ce widget affiche les dernières vidéos de la chaine YouTube de
-[FIP](https://www.youtube.com/@FipradioFr) en ajoutant le logo de FIP à chaque
-élément. L'option `"complements"` est passée au scraper _list/rss_ car ce
-scraper utilise _tools/complements_.
+[Arte](https://www.youtube.com/@arte) en ajoutant le logo de Arte à chaque
+élément. L'option `complements` est passée au scraper
+[_list/rss_](https://github.com/regseb/gout/tree/HEAD/src/scraper/list/rss#readme)
+car ce scraper utilise _tools/complements_.
 
 ```html
 <script type="application/yaml">
   module:
     url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"
     options:
-      color: "#757575"
-      cron: "*/10 * * * *"
+      cron: "@hourly"
       max: 5
+      color: "#e23014"
     scrapers:
       - url: "https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"
         options:
           url: "https://www.youtube.com/feeds/videos.xml?user=arte"
           complements:
-            icon: "https://example.com/fip.svg"
+            icon: "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/widget/arte/arte_white.svg"
 </script>
 ```
diff --git a/src/scraper/tools/filter/README.md b/src/scraper/tools/filter/README.md
index 48136b8..36db789 100644
--- a/src/scraper/tools/filter/README.md
+++ b/src/scraper/tools/filter/README.md
@@ -36,11 +36,11 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        Le filtre qui sera appliqué sur les éléments retournées. Par défaut
-        aucun filtre n'est appliqué.
+        Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
+        filtre n'est appliqué.
       </p>
       <p>
-        Exemple : <code>"title != 'foo'"</code>.
+        Exemple : <code>"title != 'foo'"</code>
       </p>
     </td>
   </tr>
@@ -67,7 +67,7 @@ Les filtres sont composés de trois éléments :
     - `^=` : garder les éléments dont la propriété commence par la valeur
       ([`.startsWith()`](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String/startsWith)
       sous le capot) ;
-    - `^=` : garder les éléments dont la propriété finit par la valeur
+    - `$=` : garder les éléments dont la propriété finit par la valeur
       ([`.endsWith()`](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String/endsWith)
       sous le capot) ;
 - la valeur comparée :
@@ -85,9 +85,10 @@ tableau.
 
 ## Exemple
 
-Ce widget affiche les dernières reportages de la chaine YouTube de
-[Arte](https://www.youtube.com/@arte). L'option `"filter"` est passée au scraper
-_list/rss_ car ce scraper utilise _tools/filter_.
+Ce widget affiche les derniers reportages de la chaine YouTube de
+[Arte](https://www.youtube.com/@arte). L'option `filter` est passée au scraper
+[_list/rss_](https://github.com/regseb/gout/tree/HEAD/src/scraper/list/rss#readme)
+car ce scraper utilise _tools/filter_.
 
 ```html
 <script type="application/yaml">
diff --git a/src/utils/scraper/chain.js b/src/utils/scraper/chain.js
index 58bbbe1..399c8e6 100644
--- a/src/utils/scraper/chain.js
+++ b/src/utils/scraper/chain.js
@@ -9,16 +9,16 @@
  *
  * @param {any} options Les options des scrapers.
  * @returns {Object} Une simulation d'un tableau dont la méthode
- *                   <code>pop()</code> retourne toujours les options.
+ *                   <code>pop()</code> retourne toujours toutes les options.
  */
 const DEFAULT_DISPATCH = (options) => ({ pop: () => options });
 
 /**
- * Chaine des scrapers pour combiner leurs fonctionnalités.
+ * Chaine des classes de scrapers pour combiner leurs fonctionnalités.
  *
- * @param {Function}             FirstScraper Le premier scraper.
- * @param {...(Function|Object)} others       Les autres scrapers et/ou les
- *                                            options.
+ * @param {Function}             FirstScraper La classe du premier scraper.
+ * @param {...(Function|Object)} others       Les classes des autres scrapers
+ *                                            et/ou les options.
  */
 export default function chain(FirstScraper, ...others) {
     const AllScraperss = [];
diff --git a/test/unit/scraper/tools/filter.js b/test/unit/scraper/tools/filter.js
index 1893fd6..128105a 100644
--- a/test/unit/scraper/tools/filter.js
+++ b/test/unit/scraper/tools/filter.js
@@ -22,6 +22,14 @@ const check = async (value, filter, expected) => {
 
 describe("scraper/tools/filter/filter.js", function () {
     describe("extract()", function () {
+        it("should support no filter", async function () {
+            await check(
+                [{ foo: "bar" }, { foo: "baz" }, { foo: 42 }],
+                undefined,
+                [{ foo: "bar" }, { foo: "baz" }, { foo: 42 }],
+            );
+        });
+
         it("should support '==' with string", async function () {
             await check(
                 [{ foo: "bar" }, { foo: "baz" }, { foo: 42 }],

From b9e5397cf8dd9b886fbf7902a97693930a3f43fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sun, 11 Aug 2024 15:13:20 +0200
Subject: [PATCH 28/38] =?UTF-8?q?fix:=20G=C3=A9rer=20les=20flux=20RSS=20sa?=
 =?UTF-8?q?ns=20date.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/scraper/list/rss/rss.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/scraper/list/rss/rss.js b/src/scraper/list/rss/rss.js
index 546be17..0ba8161 100644
--- a/src/scraper/list/rss/rss.js
+++ b/src/scraper/list/rss/rss.js
@@ -24,7 +24,8 @@ const RSSScraper = class {
             date:
                 item.querySelector("pubDate")?.textContent ??
                 // S'il n'y a pas de date de publication, utiliser la "dc:date".
-                item.querySelector("date").textContent,
+                item.querySelector("date")?.textContent ??
+                0,
             desc: item.querySelector("description")?.textContent ?? "",
             guid: item.querySelector("guid")?.textContent ?? "",
             img: item

From f1b9522454904b2011dead14ce5abb53d7b68259 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sun, 11 Aug 2024 15:13:43 +0200
Subject: [PATCH 29/38] fix: Optimiser les filtres.

---
 src/scraper/tools/filter/filter.js | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/scraper/tools/filter/filter.js b/src/scraper/tools/filter/filter.js
index bd31ab6..8a97399 100644
--- a/src/scraper/tools/filter/filter.js
+++ b/src/scraper/tools/filter/filter.js
@@ -57,7 +57,7 @@ const NUMBER_PATTERN = new RegExp(
 
 const compile = (filter) => {
     if (undefined === filter) {
-        return (_item) => true;
+        return undefined;
     }
     let result = STRING_PATTERN.exec(filter);
     if (null !== result) {
@@ -74,7 +74,7 @@ const compile = (filter) => {
 
 export default class FilterScraper {
     /**
-     * La fonction pour filtrer prennant en argument un élément et retournant un
+     * La fonction pour filtrer prenant en argument un élément et retournant un
      * booléen.
      *
      * @type {Function}
@@ -94,6 +94,9 @@ export default class FilterScraper {
     }
 
     async extract(max = Number.MAX_SAFE_INTEGER) {
+        if (undefined === this.#filter) {
+            return this.#scraper.extract(max);
+        }
         const items = await this.#scraper.extract(Number.MAX_SAFE_INTEGER);
         return items.filter(this.#filter).slice(0, max);
     }

From 57cd0a1a4ea3d5280eee218063c164542d441a8b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 11 Aug 2024 16:45:10 +0200
Subject: [PATCH 30/38] chore(main): release 0.12.1 (#19)

---
 .release-please/manifest.json        |  2 +-
 CHANGELOG.md                         | 11 +++++++++++
 package-lock.json                    |  4 ++--
 package.json                         |  2 +-
 src/extension/chromium/manifest.json |  2 +-
 src/extension/firefox/manifest.json  |  2 +-
 6 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/.release-please/manifest.json b/.release-please/manifest.json
index aafbabb..9a1c691 100644
--- a/.release-please/manifest.json
+++ b/.release-please/manifest.json
@@ -1 +1 @@
-{ ".": "0.12.0" }
+{ ".": "0.12.1" }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b82ff3d..20e9b8e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
 # Changelog
 
+## [0.12.1](https://github.com/regseb/gout/compare/v0.12.0...v0.12.1) (2024-08-11)
+
+### Bug Fixes
+
+- Corriger les exemples.
+  ([cc9c871](https://github.com/regseb/gout/commit/cc9c871d4a854d62787c6133a4d158ac49be1b3b))
+- Gérer les flux RSS sans date.
+  ([b9e5397](https://github.com/regseb/gout/commit/b9e5397cf8dd9b886fbf7902a97693930a3f43fa))
+- Optimiser les filtres.
+  ([f1b9522](https://github.com/regseb/gout/commit/f1b9522454904b2011dead14ce5abb53d7b68259))
+
 ## [0.12.0](https://github.com/regseb/gout/compare/v0.11.0...v0.12.0) (2024-05-29)
 
 ### Features
diff --git a/package-lock.json b/package-lock.json
index 27d8cc9..08eb603 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "gout",
-  "version": "0.12.0",
+  "version": "0.12.1",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "gout",
-      "version": "0.12.0",
+      "version": "0.12.1",
       "funding": [
         "https://buymeacoffee.com/regseb",
         "https://www.paypal.me/sebastienregne"
diff --git a/package.json b/package.json
index 32477ba..cbbd8bd 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "gout",
-  "version": "0.12.0",
+  "version": "0.12.1",
   "description": "Agrégateur d'Internet (flux RSS et tout le reste).",
   "keywords": [
     "gout",
diff --git a/src/extension/chromium/manifest.json b/src/extension/chromium/manifest.json
index 55ad77c..cfc8b6b 100644
--- a/src/extension/chromium/manifest.json
+++ b/src/extension/chromium/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 3,
   "name": "Gout",
-  "version": "0.12.0",
+  "version": "0.12.1",
   "action": {
     "default_icon": {
       "16": "img/icon16.png",
diff --git a/src/extension/firefox/manifest.json b/src/extension/firefox/manifest.json
index 58eae27..1b43cdf 100644
--- a/src/extension/firefox/manifest.json
+++ b/src/extension/firefox/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 2,
   "name": "Gout",
-  "version": "0.12.0",
+  "version": "0.12.1",
   "browser_action": {
     "default_icon": {
       "16": "img/icon16.png",

From bb51fc54b64d9aa0bc55551800dd3157b11c3dcc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sun, 3 Nov 2024 18:50:03 +0100
Subject: [PATCH 31/38] =?UTF-8?q?docs:=20Am=C3=A9liorer=20la=20JSDoc.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .metalint/addons-linter.config.js         | 1 -
 .metalint/eslint.config.js                | 1 -
 .metalint/eslint_browser.config.js        | 1 -
 .metalint/eslint_config.config.js         | 1 -
 .metalint/eslint_node.config.js           | 1 -
 .metalint/eslint_test.config.js           | 1 -
 .metalint/eslint_webext.config.js         | 1 -
 .metalint/htmlhint.config.js              | 1 -
 .metalint/htmlhint_dashboard.config.js    | 1 -
 .metalint/htmlhint_tpl.config.js          | 1 -
 .metalint/markdownlint.config.js          | 1 -
 .metalint/metalint.config.js              | 1 -
 .metalint/npm-package-json-lint.config.js | 1 -
 .metalint/prantlf__jsonlint.config.js     | 1 -
 .metalint/prettier.config.js              | 1 -
 .metalint/prettier_css.config.js          | 1 -
 .metalint/prettier_javascript.config.js   | 1 -
 .metalint/prettier_tpl.config.js          | 7 +++++--
 .metalint/purgecss_popup.config.js        | 1 -
 .metalint/stylelint.config.js             | 1 -
 .metalint/yaml-lint.config.js             | 1 -
 .script/clean.js                          | 1 -
 .stryker.config.js                        | 7 +++++--
 src/module/tools/contrast/contrast.js     | 9 ++++-----
 src/utils/scraper/chain.js                | 4 ++--
 test/unit/scraper/tools/filter.js         | 1 -
 26 files changed, 16 insertions(+), 33 deletions(-)

diff --git a/.metalint/addons-linter.config.js b/.metalint/addons-linter.config.js
index fca28cf..5f60150 100644
--- a/.metalint/addons-linter.config.js
+++ b/.metalint/addons-linter.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/eslint.config.js b/.metalint/eslint.config.js
index 80f3ba8..5943807 100644
--- a/.metalint/eslint.config.js
+++ b/.metalint/eslint.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/eslint_browser.config.js b/.metalint/eslint_browser.config.js
index 0e28ff2..3bd93f0 100644
--- a/.metalint/eslint_browser.config.js
+++ b/.metalint/eslint_browser.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/eslint_config.config.js b/.metalint/eslint_config.config.js
index f33814b..26f3d31 100644
--- a/.metalint/eslint_config.config.js
+++ b/.metalint/eslint_config.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/eslint_node.config.js b/.metalint/eslint_node.config.js
index 0a834be..113f4b6 100644
--- a/.metalint/eslint_node.config.js
+++ b/.metalint/eslint_node.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/eslint_test.config.js b/.metalint/eslint_test.config.js
index 341bbfd..da02fe4 100644
--- a/.metalint/eslint_test.config.js
+++ b/.metalint/eslint_test.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/eslint_webext.config.js b/.metalint/eslint_webext.config.js
index 0671860..0a4f4b1 100644
--- a/.metalint/eslint_webext.config.js
+++ b/.metalint/eslint_webext.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/htmlhint.config.js b/.metalint/htmlhint.config.js
index 4e18771..2cec607 100644
--- a/.metalint/htmlhint.config.js
+++ b/.metalint/htmlhint.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/htmlhint_dashboard.config.js b/.metalint/htmlhint_dashboard.config.js
index c3decd4..34defbf 100644
--- a/.metalint/htmlhint_dashboard.config.js
+++ b/.metalint/htmlhint_dashboard.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/htmlhint_tpl.config.js b/.metalint/htmlhint_tpl.config.js
index 97a76ea..7fc516a 100644
--- a/.metalint/htmlhint_tpl.config.js
+++ b/.metalint/htmlhint_tpl.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/markdownlint.config.js b/.metalint/markdownlint.config.js
index 25ea56e..aa3c839 100644
--- a/.metalint/markdownlint.config.js
+++ b/.metalint/markdownlint.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/metalint.config.js b/.metalint/metalint.config.js
index 0b14754..f5684eb 100644
--- a/.metalint/metalint.config.js
+++ b/.metalint/metalint.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/npm-package-json-lint.config.js b/.metalint/npm-package-json-lint.config.js
index 58bbef8..080f764 100644
--- a/.metalint/npm-package-json-lint.config.js
+++ b/.metalint/npm-package-json-lint.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/prantlf__jsonlint.config.js b/.metalint/prantlf__jsonlint.config.js
index 82e427f..283e393 100644
--- a/.metalint/prantlf__jsonlint.config.js
+++ b/.metalint/prantlf__jsonlint.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/prettier.config.js b/.metalint/prettier.config.js
index 79c4c54..969d418 100644
--- a/.metalint/prettier.config.js
+++ b/.metalint/prettier.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/prettier_css.config.js b/.metalint/prettier_css.config.js
index c1fa98d..789c0cb 100644
--- a/.metalint/prettier_css.config.js
+++ b/.metalint/prettier_css.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/prettier_javascript.config.js b/.metalint/prettier_javascript.config.js
index c1fa98d..789c0cb 100644
--- a/.metalint/prettier_javascript.config.js
+++ b/.metalint/prettier_javascript.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/prettier_tpl.config.js b/.metalint/prettier_tpl.config.js
index ba258d3..b55c98c 100644
--- a/.metalint/prettier_tpl.config.js
+++ b/.metalint/prettier_tpl.config.js
@@ -1,11 +1,14 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
 
 /**
- * @type {import("prettier").Config}
+ * @import { Config } from "prettier"
+ */
+
+/**
+ * @type {Config}
  */
 export default {
     parser: "html",
diff --git a/.metalint/purgecss_popup.config.js b/.metalint/purgecss_popup.config.js
index db4058d..7ef4df3 100644
--- a/.metalint/purgecss_popup.config.js
+++ b/.metalint/purgecss_popup.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/stylelint.config.js b/.metalint/stylelint.config.js
index 3597923..fe050c3 100644
--- a/.metalint/stylelint.config.js
+++ b/.metalint/stylelint.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.metalint/yaml-lint.config.js b/.metalint/yaml-lint.config.js
index 5eadf14..ccde286 100644
--- a/.metalint/yaml-lint.config.js
+++ b/.metalint/yaml-lint.config.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.script/clean.js b/.script/clean.js
index c88a881..4eacd48 100644
--- a/.script/clean.js
+++ b/.script/clean.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
diff --git a/.stryker.config.js b/.stryker.config.js
index 7a156e2..7ea420f 100644
--- a/.stryker.config.js
+++ b/.stryker.config.js
@@ -1,11 +1,14 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */
 
 /**
- * @type {import("@stryker-mutator/api/core").PartialStrykerOptions}
+ * @import { PartialStrykerOptions } from "@stryker-mutator/api/core"
+ */
+
+/**
+ * @type {PartialStrykerOptions}
  */
 export default {
     disableTypeChecks: false,
diff --git a/src/module/tools/contrast/contrast.js b/src/module/tools/contrast/contrast.js
index 120fcad..325beec 100644
--- a/src/module/tools/contrast/contrast.js
+++ b/src/module/tools/contrast/contrast.js
@@ -7,7 +7,7 @@
 
 /**
  * Convertit une couleur du format RGB vers de l'hexadécimal (avec le préfixe
- * <code>"#"</code>).
+ * `"#"`).
  *
  * @param {Object} rgb La couleur au format RGB.
  * @returns {string} La couleur en hexadécimale.
@@ -22,8 +22,8 @@ const rgb2hex = function (rgb) {
 };
 
 /**
- * Convertit une couleur en hexadécimale (avec le préfixe <code>"#"</code>) vers
- * le format RGB.
+ * Convertit une couleur en hexadécimale (avec le préfixe `"#"`) vers le format
+ * RGB.
  *
  * @param {string} hex La couleur en hexadécimale.
  * @returns {Object} La couleur au format RGB.
@@ -70,8 +70,7 @@ const rgb2lab = function (rgb) {
 /**
  * Calcule la valeur linéaire d'un canal.
  *
- * @param {number} channel Le canal d'une couleur (entre <code>0</code> et
- *                         <code>255</code>).
+ * @param {number} channel Le canal d'une couleur (entre `0` et `255`).
  * @returns {number} La valeur linéaire.
  * @see https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-procedure
  */
diff --git a/src/utils/scraper/chain.js b/src/utils/scraper/chain.js
index 399c8e6..87a4331 100644
--- a/src/utils/scraper/chain.js
+++ b/src/utils/scraper/chain.js
@@ -8,8 +8,8 @@
  * Envoie les options à tous les scrapers.
  *
  * @param {any} options Les options des scrapers.
- * @returns {Object} Une simulation d'un tableau dont la méthode
- *                   <code>pop()</code> retourne toujours toutes les options.
+ * @returns {Object} Une simulation d'un tableau dont la méthode `pop()`
+ *                   retourne toujours toutes les options.
  */
 const DEFAULT_DISPATCH = (options) => ({ pop: () => options });
 
diff --git a/test/unit/scraper/tools/filter.js b/test/unit/scraper/tools/filter.js
index 128105a..320acd5 100644
--- a/test/unit/scraper/tools/filter.js
+++ b/test/unit/scraper/tools/filter.js
@@ -1,5 +1,4 @@
 /**
- * @module
  * @license MIT
  * @author Sébastien Règne
  */

From 75b0ec7b16137c074f21de62d0afd34b744599bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Fri, 8 Nov 2024 18:54:21 +0100
Subject: [PATCH 32/38] feat: Simplifier les images SVG.

---
 src/engine/img/icon.svg                       |  46 +++++++++---------
 src/engine/img/icon_0003.svg                  |   6 +++
 src/engine/img/icon_fff.svg                   |   6 +++
 src/extension/chromium/img/icon.svg           |  46 +++++++++---------
 src/extension/chromium/img/icon128.png        | Bin 3022 -> 1774 bytes
 src/extension/chromium/img/icon16.png         | Bin 479 -> 330 bytes
 src/extension/chromium/img/icon24.png         | Bin 719 -> 473 bytes
 src/extension/chromium/img/icon32.png         | Bin 775 -> 478 bytes
 src/extension/chromium/img/icon48.png         | Bin 1180 -> 659 bytes
 src/extension/chromium/img/icon64.png         | Bin 1451 -> 858 bytes
 src/extension/chromium/img/icon96.png         | Bin 2270 -> 1277 bytes
 src/extension/chromium/img/icon_png.svg       |  28 +++++++++++
 src/extension/firefox/img/icon.svg            |  46 +++++++++---------
 src/extension/firefox/img/icon128.png         | Bin 3022 -> 1774 bytes
 src/extension/firefox/img/icon16.png          | Bin 479 -> 330 bytes
 src/extension/firefox/img/icon24.png          | Bin 719 -> 473 bytes
 src/extension/firefox/img/icon32.png          | Bin 775 -> 478 bytes
 src/extension/firefox/img/icon48.png          | Bin 1180 -> 659 bytes
 src/extension/firefox/img/icon64.png          | Bin 1451 -> 858 bytes
 src/extension/firefox/img/icon96.png          | Bin 2270 -> 1277 bytes
 src/extension/firefox/img/icon_png.svg        |  28 +++++++++++
 src/module/audio/README.md                    |   8 +--
 src/module/audio/audio.js                     |   2 +-
 .../audio/img/{icon.svg => icon_fff.svg}      |   0
 src/module/clock/README.md                    |  15 +++---
 src/module/clock/clock.css                    |   5 +-
 src/module/clock/clock.js                     |   2 +-
 .../clock/img/{icon.svg => default.svg}       |   0
 src/module/icon/README.md                     |  10 ++--
 src/module/list/README.md                     |  18 ++++---
 src/module/notepad/README.md                  |  11 +++--
 .../notepad/img/{icon.svg => icon_0003.svg}   |   3 +-
 src/module/podcast/README.md                  |  19 +++++---
 src/module/podcast/img/icon.svg               |  13 -----
 src/module/podcast/img/icon_0003.svg          |  15 ++++++
 src/module/podcast/img/play.svg               |   4 +-
 src/module/podcast/img/volume.svg             |   3 +-
 src/module/single/README.md                   |   7 ++-
 src/module/text/README.md                     |   6 ++-
 src/module/tools/contrast/img/icon.svg        |   6 ---
 src/module/tools/findrss/README.md            |  11 +++--
 src/module/tools/findrss/findrss.js           |   2 +-
 src/module/tools/findrss/img/rss.svg          |   8 ---
 src/scraper/tools/complements/README.md       |   2 +-
 44 files changed, 227 insertions(+), 149 deletions(-)
 create mode 100644 src/engine/img/icon_0003.svg
 create mode 100644 src/engine/img/icon_fff.svg
 create mode 100644 src/extension/chromium/img/icon_png.svg
 create mode 100644 src/extension/firefox/img/icon_png.svg
 rename src/module/audio/img/{icon.svg => icon_fff.svg} (100%)
 rename src/module/clock/img/{icon.svg => default.svg} (100%)
 rename src/module/notepad/img/{icon.svg => icon_0003.svg} (96%)
 delete mode 100644 src/module/podcast/img/icon.svg
 create mode 100644 src/module/podcast/img/icon_0003.svg
 delete mode 100644 src/module/tools/contrast/img/icon.svg
 delete mode 100644 src/module/tools/findrss/img/rss.svg

diff --git a/src/engine/img/icon.svg b/src/engine/img/icon.svg
index 12ee39d..3d312c6 100644
--- a/src/engine/img/icon.svg
+++ b/src/engine/img/icon.svg
@@ -1,26 +1,26 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">
-  <defs>
-    <mask id="circle">
-      <circle cx="16" cy="16" r="16" fill="white" />
-    </mask>
-  </defs>
-
-  <g mask="url(#circle)">
-    <rect x="0" y="0" width="32" height="32" />
-    <polygon
-      points="9,11 23,11 16,2"
-      fill="white"
-      stroke="white"
-      stroke-width="4"
-    />
-    <line x1="16" y1="25" x2="16" y2="11" stroke="white" stroke-width="4" />
-    <polyline
-      points="8,32 8,19 24,19 24,32"
-      fill="none"
-      stroke="white"
-      stroke-width="4"
-      stroke-linejoin="round"
-    />
-  </g>
+  <style>
+    @media (prefers-color-scheme: dark) {
+        svg {
+            color: white;
+        }
+    }
+  </style>
+  <polygon points="6,14 26,14 16,0" fill="currentColor" />
+  <line
+    x1="16"
+    y1="12"
+    x2="16"
+    y2="26"
+    stroke="currentColor"
+    stroke-width="4"
+  />
+  <polyline
+    points="8,32 8,20 24,20 24,32"
+    fill="none"
+    stroke="currentColor"
+    stroke-width="4"
+    stroke-linejoin="round"
+  />
 </svg>
diff --git a/src/engine/img/icon_0003.svg b/src/engine/img/icon_0003.svg
new file mode 100644
index 0000000..784a7a7
--- /dev/null
+++ b/src/engine/img/icon_0003.svg
@@ -0,0 +1,6 @@
+<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+  <path
+    d="M16 0 6 14h8v4H8a2 2 0 0 0-2 2v12h4V22h4v4h4v-4h4v10h4V20a2 2 0 0 0-2-2h-6v-4h8z"
+    fill="#0003"
+  />
+</svg>
diff --git a/src/engine/img/icon_fff.svg b/src/engine/img/icon_fff.svg
new file mode 100644
index 0000000..7d51452
--- /dev/null
+++ b/src/engine/img/icon_fff.svg
@@ -0,0 +1,6 @@
+<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+  <path
+    d="M16 0 6 14h8v4H8a2 2 0 0 0-2 2v12h4V22h4v4h4v-4h4v10h4V20a2 2 0 0 0-2-2h-6v-4h8z"
+    fill="#fff"
+  />
+</svg>
diff --git a/src/extension/chromium/img/icon.svg b/src/extension/chromium/img/icon.svg
index 12ee39d..3d312c6 100644
--- a/src/extension/chromium/img/icon.svg
+++ b/src/extension/chromium/img/icon.svg
@@ -1,26 +1,26 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">
-  <defs>
-    <mask id="circle">
-      <circle cx="16" cy="16" r="16" fill="white" />
-    </mask>
-  </defs>
-
-  <g mask="url(#circle)">
-    <rect x="0" y="0" width="32" height="32" />
-    <polygon
-      points="9,11 23,11 16,2"
-      fill="white"
-      stroke="white"
-      stroke-width="4"
-    />
-    <line x1="16" y1="25" x2="16" y2="11" stroke="white" stroke-width="4" />
-    <polyline
-      points="8,32 8,19 24,19 24,32"
-      fill="none"
-      stroke="white"
-      stroke-width="4"
-      stroke-linejoin="round"
-    />
-  </g>
+  <style>
+    @media (prefers-color-scheme: dark) {
+        svg {
+            color: white;
+        }
+    }
+  </style>
+  <polygon points="6,14 26,14 16,0" fill="currentColor" />
+  <line
+    x1="16"
+    y1="12"
+    x2="16"
+    y2="26"
+    stroke="currentColor"
+    stroke-width="4"
+  />
+  <polyline
+    points="8,32 8,20 24,20 24,32"
+    fill="none"
+    stroke="currentColor"
+    stroke-width="4"
+    stroke-linejoin="round"
+  />
 </svg>
diff --git a/src/extension/chromium/img/icon128.png b/src/extension/chromium/img/icon128.png
index 728804abe2fc361135314f34fe3380e4f86b6894..59b3a2e8b6a842c1dc17d84bc0bcfaa5738cea58 100644
GIT binary patch
literal 1774
zcmZ`)eLT~79RF>M$jC#<lF8$FJXdEpPb0(h%3<?(vn13lvfId_={I-QE+G!rd00p$
z&Ql(0%e2d->|%(QTFUMft#rpsXytUj-QV3G-{1H3`@G-Z_xt_%eE<0V7!e+V)J5q6
z0D#1Y21P+Ts9xK&pzo01(LbO~hZ-7B2LNw<^@2U@Z}=W6nq}eQvIv=JSvf~(sX$In
zj_bFlPSTGZrKY-O(vH_G`JezmD-RzOKxEYZT{n7?6utZW74MQ^P3d>`CORec_wJo|
zR9Kj@GuBElUR<>A&8F$Mmjo__Zm<BN^z~igtpm2>1?Z$G0z3>q+lzaX9QD<s(tT$V
zo2>Dx+571drbH-b%AQrEj4h9;QkR%7+kWK80?Tc7%B+)&7}|`z3<P81wHCaI+^Iob
zTZ~??(U?Fah>nO3%TNj-$A|hp!_X@WyvfQ0^(}F~Q2HF(V-6*>R}tHy*L)nl)_#Zb
zWX^9{+*q*|+4k>gW@4|0^GQ{EJWhp{zM1Jf#3#i_7LE!;xTJS+2p}AGN0SPW(@vj`
z;mS8vtBZV}F(bD{A|P|7dVu5PwB+PK!LubUJnMF%85$ick$<-Y95-+Q6bWS>ccQL8
zkV>W8(dF*`e!I#roG<UbN}F+V4h{^7B(NXeVn)+eMWf3T>6mGHF83SJgM7p-6Rc+@
zp>w8mcGF@lH_^9K&hKgi(%Z;?cC6<;BKXDXwz9o>$XaPUn5nUCA(a~om40OlRmvyN
z>E#8!BR%wWHLHW2A=AYAf^OuOmJ4)SxcjD_tPLn=@(Xde;)IAD`W%*zv<zK*(RjAQ
zBo28FehZDgM3j4q<zWHSicHWRrisreX@fu_5^ap-Of?@_pkJ$}v{+d7nFXmx4)v&3
z?a)-MXvnICy$I9d_EtzL3$8chf-L*P5ETnilj>I*AcY|0w8mTCK{eh2;e*3BmHa5c
zooFyVlLF!MBnUUpyAkCVOY4B7O5Ed}t~hzc99#qLqmWQ`9wa3?^JS%^(!8}H7vN3A
zKuoo1No@oqTB|m-wzq+pArMnGu5(yL8YzSFc~S$Re6&W0s$Y9aeO~R)v^Rjdl&SMc
z=5Z>Lj@tjP>H%mjur>%!{3!&Iih%MdKF&u&cqH;C^7h{AL`P>Am&o>*zN?H>CbO=)
z`wI*P(|Z+&nA9J?I&s1ze-+j`?N}Uq(0kZ*3eCRIbhhIM$eIUI`oxoyM$q*i2!5HK
zp6-Uh48MObpy*E%uzXVUll0)5sxIazeL=iayl{h3VhYB$-#ea`cDcHGGJ#w-F%j9{
z-ycUJ5l0(nOAZ1hzp<U|I0JNlcEzch(n3S-DEhC|e3n(;!2X2`PlkH_a>}iTfPE;I
zUtpusnpxe@Kv9$vV$<F6tqmI|0m9(cgD|A<h{k2*T1X6~Wh?no=I<*XaXuUyd{mf`
z-ERYE(fDt=JG^4R2i@?XlAV^cUxBh?2#&cEc0LYfb^jAk?ZfR6ZPS-)YK~=RSDwCI
z%wg08tkiWrJJll)h-YWb`x0CV^KO+Mdzj2-vs3c($ruk0!a0M)$j7s@6)M#kGZad!
z?14Q=-@1FZVEvz(J-c@8y5Y?Fh(i^#*O}GcsN!Hdgkp;;N@yQeD)(P2Pt3G9-`?&r
zR_iq+7GIdj9#|H?ecPLnkFE%_ZRYX*>3osL8X3XQ9WtqMUh-b%f#JL%g`!JhtNX{*
zkkZ{|W-9{r20T>P)#AXQ|IbPG@=vxJvQb3YyL;+;ZKg$F9&_%o_5Tjw|7K&n`2nVN
z?bY0d|7YvlK0VS3kSE=z=gzGFwWSVv?wBx<;I!_+;yxoP!Mm_wc-dA~t^P+F%WS9y
z3S~A?iXNM?lf765I;(=_VT!uW=!;2wXDb6^!+rSjM<N%W0UvY45v-kN?q-JUupvJd
zzN5?^^g=tC1<)dcmS8qQwjEx%ziZpT&o9GRTZoik@cy~&p7vIIAFmL*I6hi_h^1y>
zqoLjg>+9Sa1Bq~#rBx1C$~t#IKkc2|Pr>5MK3A3Ik@bwq=0Kf(wByC(F8D?Nr%x0A
z`ar4YZ0gi%3?@A_Ej~M`<=Vv@yCa-4un9?Qvcc1IFT<K&y%=c(J}=mhd;QK^lqy?&
zKE1`dxr}ndmm7=Di#~{Mi}qj<jMrUrJ#dEq77ttWx9M6H3n9}sJoAe7;Ulc8$jg4=
TcNaJ4tpf14@Su*sq=J6|=5R6g

delta 2959
zcmV;A3vl%A4bB&kU4IK(Nkl<Zc%1E>e{7vq8OJ~8EnC+PaN3j~GDguF`Bl*<Tg)b;
zZUz)8f+!K9{NW$Xx|o<46aO-5A{z=-Y+PcDAvQ8vNQM(4RHa5`k+C^rp=B_j(;*D9
zIoRkn2JPb?=WV&YyKV11@A+}>ea|O(vbDYUoaa5y_n!OS?|*yVbCrltPbj4na3OF>
z`fnSs0%+~(>T21xZCi^{Y6-9ySeia<0yrrmCvLjwrbAn|ZaoCN2J8p+0WSj20OL|;
z1Ey;Ic$8A-0jtxv0=Nt~qxf;{?d|N`xszqfmd)GV(W6IMxpF0Y_UtM7XW%JdC$JsZ
zE+Q{yJA%N7NPkTQumrdUxEpvDkcFbDsY!P4-Yw-aGBP5~&CLt8o5mjCC&1M}W9adz
zcsxTVP-f8=1J?olz#C;2W+v{r=bo~QKh3@O-dj;0X}k{n8n_l%6nfms8r#qbEKv9l
z0h@pW2E`CSdU|>)F8(y@*RMC~GmQi3EOlw<ah!LILw_ewGAURCJOoT-D1fY5wMtH$
zIAK<O5jlDCq^w@OI*SOV<8h#i^qi}jB6tD?MOVNLz&|YvxU{si$oTlUaq*|wzkk29
zwzk?3fdKyiuCFE`1W!P8@jnafvNXt&B#8_S4P`9-y9^HxOG870EfEO%Q^eJw$6Z1T
z0QfNQuz$sY6+kv_+?c)UMcjV-?N)P4<Bz~)L2D4CQ)mY60^YVgs9jxMGBq`2r|Jbv
zO-;#-H{R$%1Sf$zfTkd|@ZKS;172`2kka1XE{6{vwpR3FjvP567hQCb3lRvg7x=XI
zdU)$d8#tSQNf!fHso7&ng(gv@F$MerX!ceYFMplDM}Vgt4VnPb-`{V!)N|9{-|y@=
z(ip*$f8e9|Ujg29Ibd1L9#b-!MCHUW;I^#ezfia=d;{7ecREm6%^p)MnnVl5oj_uv
zCZ)nv@fQPwt_R1K*<*@jlW4x!3M^S@+)cto@lOYaTn~zEv&R$%Ced6m44f&|ECAqa
zw13^{d_Y{7J*GG^iAu#T;4G;|0iajj?Da7auFM`&9GXO>;yIvAs!0GqD|%ss^8s*e
z_L$<>Br1;Qfper91OS|gr)l4p*<*@hlc+fU1uT=00zjYb|H0D%do_DZ@n8}a#xNO|
zp=Bw40^INGU^i^o;H7{z=;`V4DS`)q27d`40Ouypbc8Z{Oz~(EO~)PLQvkp%z78(5
z*<*@FlSt4Pk**gX0zhBbnecI7)nfLT;?X1$;2?0mxD){TlJ1DFSAR8`J*Idxi3E6p
z3YVi-Du6y;2UBfkk13u_A^|pu3jv^4@?=`3U2asX*<*@llV}RKN^A-My@v03AAbi>
z?PiZDo=u`r%6uy*R{(c;O5Er+u3EwHb~DrXw%8B=a4~x2s`I34$?P%3qe(OYTp$(%
z@Q9CuYt8I2#j{EDfMgK>`i>pviPoywV~S^!XswtC0DZ6Cldco2b+gA5k0#M}F%-ZJ
zJ``FHW{)WzO`=bUfdH)Br8{5Li+|Z;ibs=ZNGcHk+VpXnRK1x!rg$`ou8;}@;PlMD
zUd<j;JefofN;v{RZ_DD;@~vmH#}p4H(G>7ODMJ8vxJ)DuW{)WzOrjskd;$O#0k619
zATMT*DIQFsS17thP%MBhSDok0>@mfINpy`A)I4D}U&aARlCWjV7TVg{Tz@oQS1ez?
zoWa3C8X6j0b#e2opXA+F{}K!~VJs)|Z1$Mq&?GtxESBQ80QB~&);r9**<*@hlW3ik
z5WwBGJBnscHXNEncS;EXJZH0$X!h7)WMo8^E?sI{0HabU0N^~^DyxOtxM~GQx0{_S
z1p>I)X5-Q9v5y0j=!;Sy0Do)m|IzGmg9DSOR|<T9E3iOIOA7-712i@^+Gs9Pz@kNq
z7#J9!wYAk&lPf{5`bp5A|4+Boay21(hBHQg1yNn{2Jqel_yBcU{K&k#2UwAymwiX_
z$t4N;tJNa;q%8q12%SYF7#Ak!FI9}>lM52ytk79Rg3+1)EupiB1b?F?0p1rni%2k9
z67;?Qk$lpepf`Jr<deoIfPB+fyeKr1GZOUfACY|WRun+Kc`HHhB@@Xf6AAD?pFMVT
zbkNt=$Jp2y6B82)?opIAvf?_wiHQlu#>VLD>!YKi!@>wx#36t`V}HTnDbd*2D4REL
zmdVLU+pDGOhRMlE*?+uwvotm~I<H3>e*$>GNAZV;heMBV%`iMX>`MfL3GkmeCkRXQ
z_V&`*+3C8Qx}mePliuE5A6@MO_y!JD*3r=sr+ot^Cnu$&qr>$Kus#9CEvsr4-QC?J
zN%Wg4B}o#xySrU?GoAorE_;Ymzd0VpZd9R{hQE&f`ZwzwJAZbJrluwrP1ilgj~}PG
z+1bTfy)0Zr1bEt2FR}RMI3ByFL`0_FoOinHDN>c}0A_9t+a55HNEo(56hNN&JEQ^-
zk(bdML`3qzsE8Z@X6+L8NT6gQ{+X$D6hJ<CboxI^(o3dFsYc*c^j)LY5DS-N^NfSr
z(_aV97Lk)sFn<Gx$XmcR+r4E)DU~T|y?+O6oi09b%1)v8drl_epTWW(RN)k@lsXN4
zdH7sgy=8q1$oeYEd;dio09J^|+ta_8H3NvqJ3zn99wSx7uL_F~MKb_^QmP&830RR{
z=vP4A`!7I%b`g28@Rz4ts27pvi605;k%x<m4<!VUa(|cOWFr3gaj9RH6o7~f1G}B3
z6Y<Fo5&2uGKg_pQ>j#dKiTG#ETAp$eIO~r}?I7Jz(v;9AL3!^Vz1Cxu%#p}Kt2Muy
zwf9JHzB5<xVF3Y%$Pn;*>nTNiF_@mu&B?rP0WjkWjAFQvMCd6n$Ne7#E*6ph&i9}N
z7wo6Lz<*Covxo%adkYmG%9sHFlu}K=2+&?>7CC+ehU|Y7_*k*+TZ*!7*%6WBKsVY>
zj8r#M!1{8E4`m7fX3U|VnPwG=I=r605S!*QeM(W*TfoeN^{SyAz~$vWC-f8?8qdf7
z1aM`!uYRat27sAWL$?yQm8nJ!0$-}6_)wt$0DnYe6!<Ffe4v^T;OiptQl(Ecx^G)V
z9t6DXU=S&bO(OC;lP6Ym4lwJ9N+rM+iocDzh<Fa*{P+ieTSa8bsQoMnDy0?y4*^%t
z^_VCCr^i1Gd@emVGi%>Mf@h$28vA&uzefQ$JN{ijr-;0nrTxr%w}{A5^jFV6o3*V-
z*?+tMT$i=@U_k%?B61Kdg1t7{i_FVjV6BL}YNIi0yElo*KH!sRGa}-KUBDU<`M0eG
zt#02XB8Py_07Ew0jR5+DZ>@;DX0uW2`?sa<OP@!7Jc-z0D{!rd9I@T7lMVdRn-6aV
zenfN(vmn4mw8eYEMF*Kb2A07(;5We8CVx-P@yEb}z->5QlIKGJ0Ly{<fHjpqF{c7}
z678_=vzkl^eC^@-63_{JAH859QW`<8xmbgT;)A~#ppdJ8p97bc^WYrK08arMfU*~J
z*dW9%&VK<u3Vaj2ay9Q9L(hz#z;p2-%nVS-`+-g9^#vuV^BLe_^sC<acQ(vL=zo3O
zUk1L0{-oet{Q-FbSPOI!u=o&O0Mk4MT!}tEsAm`PN#I(vWj^m6JH8107BCl=1K$E}
zQA#z0P9_WKeR+?e&+Z=zoX#m!s{p1sUnzA9&;zUpolJ$i0`!Z>FVUB8tCDIL05G$A
z**dg2@&#a7*o@}nFz{RSR&0-@n}2RqH8mlCLX=XA(dP=+q;W~uj2K04z4|Ed*TPL0
zYk`^*Kru?GbAZ)ptOPE@@^-fcyn!}sb^?zB+ifk(2t~~cpcG1}HsE65LZA(O{%{u1
zl14Ld8gNGXl%v2qXjA4;8m|KT(ch{z4m@LXAx5?Ef6G+!k27M0WB>pF00>D%PDHLk
FV1o9daVh`+

diff --git a/src/extension/chromium/img/icon16.png b/src/extension/chromium/img/icon16.png
index 6a97843da8c0b17dc46bc99208cd659b02471a5d..da4687f462eb63deb65cbd25dcef756daa7b7777 100644
GIT binary patch
delta 245
zcmV<R01E%#1IhxBU4H=ANkl<ZIE|%~!3~5U5Jf*5?$kgVTEXs?KrvbjouF-SPz&JB
z;qO7&h=?(}KbZvhGcPj)0N@Q^0l;GzV`z*i&bOEWys#~b1g$kg2n-=mYh8m(I5VV_
z9LJGK!!S@vS%Z{^ec$t_uIugr+O}nku>iyv*)+{HKq*D<eQr^l<h`d-st&N$R*RFY
zwHZJp%9+U35<=8c@TfXBl>wY{Ao-1bCn=nB86X>BUv#DYNT(wRA+n_7zB<A$l2_){
v?e9BS{%BwZ)-O2&_&ye#zxks-0eF4@An6eTEf$uz00000NkvXXu0mjf&a7)v

delta 396
zcmV;70dxM!0^b9WU4H>=Nkl<ZIE{sq%}T>i5QV?UwH7Mf<{i{@-A#A8=(7mfcHLzc
zipAeI$RiZ|%Q~w<jnWs$6I2K-mE*!pxu*Uc7|3PjoS8HC21)n<M8LS!YUO#Jzt89M
z_jbFT0~f&2R=r2u18#s1KuMCwkR*u!0c+q2XnYf>$j?=g;(s_+9dR6+h=3;(F@al4
zcDr3Im&+}I)oP_)ujh+gR$L+*I}Ae=MX^OT6h)yh41GI?0AoPTIi+d(E7_2ysho2r
za_)d*fGCQ{vWzUtFboC*07jz`KB6dMI-LTX1i%8==LeX_AP9a+11wxM3IP3npH8Q<
zRb`U^%w{ttlYhyk2f(Xswk*qkcTkq4e-ke|z=O#(o6U`9-?x9ZnhN&-M|@q$ri*p>
z=e!0EoTNMmf;-@}?tM5M{<b`TYe{dm=?3sv?^q8n{{ZZ&_A@mkT}oR2A+VM-Hu5(C
qFAjlo;DxU@vZ%h#BpuZ2KLJJvwD%|t=PLjJ002ovP6b4+LSTY#GP2nK

diff --git a/src/extension/chromium/img/icon24.png b/src/extension/chromium/img/icon24.png
index 7322dcabc360cb02c03e74ba84ceebbee2213a30..a9fb7b9d99dcc7731db67ab789577579af093e13 100644
GIT binary patch
delta 389
zcmV;00eb$=1=$0TU4H>)Nkl<ZNQt$TF>Zq}6o$V<Ry(pc6UxLDLT=)6jxZI*w$})`
z1w$m@1lie0R(6Khp;&?tz)90jvSc3i`|ao7GQcbF4V(d)YFca2T2GE?+Zp%*UTBlg
zPI6sW>bjP?uElj-8xa9M0WNa`l~Pg^g&6WY7p0Vqzy+I?#D8%t*F;fdyNl@ozVA!Z
zGy{RAX=Jn6{7t}d94X6kklav~r8tiBxImI5qsa|Pk~}7$wVq9Gn6d7-C2g6p?zAOs
z8MCh93eWS%vWzUtdhzXci|_jY6h%Rv=hsv5Jde}qG>BXIxqBDlIJUh5vK+`gnL&vb
ziv?P1R;yJnZhp#R`n%n(_rIzt4u=CGG7#x)DF}kQ57-a{!F-9<>-7VL7@s>RQJ1b;
z#$42m-(vER(=;UvL&7j5P1D)<-2%^GvP4~u$K%cZQw8oxY*^AhYyU*G1or<ZuvfrG
j`|%FEJt^^---Sm%rZs7SEDV}@00000NkvXXu0mjfIkdYo

delta 637
zcmV-@0)qY71J4DJU4H^xNkl<ZNQteMF>ljA7=|AkXDjK16bMw1r9*#&JJb>qQVR=Y
zVCW7MgtB91ri2M0kVQ6>1wv`pO8E~MAz76ur4mz(H>Z6WVn>c+CoS+uC)uCBd*8dy
zcV{DsvIZ;xkAU6f<z+t%!zhZPXk}%^2X=vnz_pngCBk*!6@M@URIOI!`@T|q-&eI-
z6(HaQcn@4ZlL2rW_?>i?VHoQ5ddk!5^<)@EY9b&6)@K?3kCPFNJGNS_De;t6tCclK
zXR}pkkc@mne06nIaU7Q#42MHGj#Ff^K4Ab{&6WjFtya_F;bEzG%F)r0>h*fwBm}Nx
z4c=xGDwT=`gMYzX@sz<}ph~5ZH+h|Cvy`ruv~@b2GmEFR+wHu;FsTe%*$2&L^W5So
z&1N%i^1uLgfSUk|i;H-k$HKw_c^ZudjYb22AP5M8U@9kyA~rWSIX*s4L!SY@<y;G!
z>$>BSx~@AnKWV-R)TV~=|EOC<(QG-gvF!EQ+S<hPl7F(D0(>PiE!(zdZmu%oIF@bO
z`4W9GfeBmNwy~_jiOs~aENt7(hXV`PCRs%QrfC*VyKEI@<JrCmpG@Ebqw`~mZnul$
zI5>_&x7(c?&oKo0rljwHSC;h;ypeQ}7W)}+7r0oKy}!TD-rnB$dJZA*9KZsQ^usWW
zdq5w!P<GVA^E^DyJIlyVf%}qv0*v2^q#fXClJK{j0#79M)4;@Qm(&67F#0x}mk`*H
z^l~Dq;=h4QlG?88#>_vXP9(jPbh${YY)AcK^nHE-Yyh`_8zkpDaKLDTZUY~a`$GNz
X5#biFF}fDh00000NkvXXu0mjfWCbqS

diff --git a/src/extension/chromium/img/icon32.png b/src/extension/chromium/img/icon32.png
index ba6fb23b0be9631955f904353abcf55684950529..68e3aa80c1066fa32f0c8041063c1aff02dd931d 100644
GIT binary patch
delta 395
zcmV;60d)R{2HpdZU4H><Nkl<ZScUDEJ95G>5QaZ9>U{wkS8xWnf^VS1z+v2^$fHe>
z4zA(K?lKbtrHf60RYdr)QefQh&1|Jz?XMmEnh_!bum(PWGa%Zq){3=Oo!`Y7cn4Np
zZ`Qz1;3kq~nKVr!P18u0WuYRZ>$##kc~G%2Mvlj$I1Yz{7=L48M7$C@c0l&~z4+{Q
zyBGl{LW{QBt+Z`>BcN?t*=#m3BJ{~=no3!gH_aVoSxTCwj}uT7#b9$sQ5266V6B~O
z?g+Hzbds~2mOyKcC-|1r5@5~ogg(n@QCc(Ha$1zujI*2;g*D?Xr)A8ViBl1Z$ltOg
zNn*BP5mj|Zo__)c1>|{7UDt?6Z}<%5)pbpt=c6KeZ)a6icXL5iRpBn^JLP{Ea>?v>
zz-SZw6HL7W+6m4+fu{iV9q@^L`+a7gzyi3;*#EQuzGf8g3D*ze&F9p|U!Mv^{Wq|5
p55@|3<N8;7w15-v0xU&@UwCt7k>7lx!vFvP07*qoL<FuvV1h!&yG{TA

delta 694
zcmV;n0!jVe1BV8XU4H_UNkl<ZScS!x&ubGw7>1t-)U?=?T!cs{)Iz<bX#WGr(cIOX
z@^7@aUOY$<FAY@fRlMfnO+_dzEd?tcdI%`AS&%@%9|<LC;PtS(kfbx4%{J8+=8|vb
zd!NnDzB`K~;tXI8cmliv4$9?nQ&Lw_w^FGzfdk+r@EFL%?tdG@_%5&wv;hGs6bfp$
z+X{7ley)|36@~R+?rUHvF#s?FYycO1jg`q{bbNfQVb$w(WwY6S2mxK-88AH-0I&pn
z9cm_HjB2&oCG$|VT2027VF&?x!0lK7z<r=;X`;2YHK%!~)zwuSfPhnAIT9eaa;tf<
zSX8gq8wt?s^?y_>7Na0?RsdicII=CApPyH=*&Jye>g?=H3kwS_h(ln;2C!jUFf}!$
zot>T7=AriY_mxhkT@dR70KubnVVhj7R>w9EwYj<J0{9c&iV$GiHnChTCpHgNsZ?AL
z)xev%{*ZBnO;TAxDjY2!1Ae>?6kTDHRF04m@Cf{DkAEFDN#zKsE%09=uKVO1!%ETv
z*h>L-_<ve7KnJ)n?n(taIFvCa2|y>6WYr{<0)E>HrBVsc^P*nY19HvtJdaYT<nsRo
zj!oETG$!^0G#ZV_O?YHO%jfg)|Hl!E==CK9e3+Qi_<C=ES>Ok7v%fNGmtVDxAOE?O
zq!#dYJb&<s=#8XS|4FFJ7)f`<dIwmPL<)a)9eD8%ul~8DZv^K3N3y-RS2$`!tltIF
zlKoJc15U0HzytCFp1PcH%fRV10Gt4YOMb&Y1Q53*eVQP^E<?xhNPu9ZC9O+pT>+pY
z>1og_*~h7*oTMuL87?kBOVXC4#Zmo@EN?cOj4v^>z(e2xa1Z|=lMTv0f$zX);3M!(
ce!z{?UtH|Z<Uyu)ng9R*07*qoM6N<$f@+yUk^lez

diff --git a/src/extension/chromium/img/icon48.png b/src/extension/chromium/img/icon48.png
index e4c1f5ddb8775794f93881a263a019e04c2b9eec..b2bff5a897f365819e5cd19670893ee4ce443014 100644
GIT binary patch
delta 577
zcmV-H0>1s636lkoU4H@~Nkl<ZXo2mTO>&}86h@C0g_%*M!%h#_hAxFI^xqD21+WRS
z6YZokNva1KvI8lqb;jWKAkYI7<ifiK)A3Zj*?X7!@$euDB7%qjTmj#KU%(y^*AYdL
zL{a2iry6_U4)_L4{`Flo{~7pgbRYpF3_~f3LW-i0FbvJ=R)6CWxUPEV%DQ>a^JKHx
zNX>e^7SHoe5n=-H!?>`lRx3GVxm;QY5a27oy=BqGVj*Q&z6em3rOfAZ>i~BEJF9|0
z5J;9~FPg8(vP^;?une%n@{FWu+Sq(enx@vfU{ffHqSoeX4Ap8ApjM_9W3{>!I8>$<
zL$$gUcukpFjDOVHe{qvCwHT?j-@-O!YB5l2zl9oQYH?I+_eEWlsl`F9-4=9JrWOaa
z>L>SArk0*+)lYU&rj{OR)lGC&rj{ORZJ%VNOf4PN+CIrrnOd}J9n~o;5qZ7jXf(1u
z6l3#>Z_FjY&|CrxjVgfe`^0ffp65vQlisn>gl27?=YPa;jPLvE5Us9FlH`r=0wPJ0
z*xd)V+bz@SRDDJ)$n%`pY}PtY72w!qaY{5dzK`)CK4(0a#Z6n>bjfv{ui@SAz$L)Y
zTmlS@lZBc%#gkVP?|ujVivatfn{eRI7<d}G3kROYz|GKIIB)~cf7d^9<e{O7V{5vM
zp7kF9zdHURb$u+v83uR&K1uzyN)=+l^ScMP9Q=EKCINQ9Pv8sS*M0v5;;MSlZfMHw
P00000NkvXXu0mjff-M=e

delta 1102
zcmV-U1hM;*1)K?xU4H~ANkl<ZXo1z5!D}2<9LGPi*;aO=P#RVn5)dJ^xfKaU*_`|b
zmJ|;~PaedYXxfVqj}4MQ4z1Ob;322nbCT^Lc*voxZq{W_mI&e!(JF0dCV>#cem%@g
z-6r#9-pp(^@e9Ap%x~ZC`<*xYzQ6Z&kwn%2E&%TXUjcUug@3|Ey<UGJX<yQQv)O!7
zEEYF_yME4lz=f{V&OmwqxDNaXs56$9mUI})%gZ{P2mAoc00TV}01N|nfZY&6nx39M
zLO#IM)Kr)V0Xx8#z|gS?0L}n60M|f5<KyGn+uJh=*x%pR#KeS2g#3qc6L_Jk0)R_E
zBciZMrIK2$mVc3afL5!eQmGUrLcmYJ>s=85yc_k@0p)TzRjbul@&Q&?SJl_o7bjvH
zxROZ#@B#2oOd%~SELf8dFh4&ZCqTdf@Np^uz%`2ks#Gd!x7&#YwA*b}Dis?M0%j5k
z@L!vQxPeDTMzpoHm6&{h?d@%ij*i;S#H5t~U<7y?H-BiMP|*7NdTR0kn$4z)#iES}
z7Z{Bc0Gy3mZGs3htF$nfTv*hBGf@IQw;3qPtkNRF<POJYp#p#*JV%TiAkM7P!ouV_
zU!}n?0e9j)Y-?6&VQF##ZapUeuQ3blZGuQ@R%u~ray$49U?AXnoa!`Yl@^vJ_erOK
zBQ0@fq<=N5w6HX}2R?TOfwn0zt68Omg~_#nSHRmzg(ek?MKv0Yo|6yIXf)zX?rI)*
z3j@Z+#;8`SRI61}N+@P$XG5<qE-oe-C*ZKQwr0BhHhB9~TNAMg6S`do_%4Un`}|*V
zF$bJGX%-o9E(g4L(kwFIrQAs~$cj9kEuW7|9Dg1jW^!_p{{H^d#Z0SHCw6ytSy@?O
zb92*XNEhH2V!rL=a#^nH_H6xkU03CD*=7~m0E=a`R;%@le1KZ5X1$F595+vwFJHEq
z&aT3;=EEFtKQ1eu&u1o-6qYsbId~1xAAn=ZlHc|98jfS61l}t&n3wd(ahw|PX3_$t
z-hU=(FJ!Yih2VjtN5Rvbp^LrEap(InEeS^wj^hjfzX73(yy+D(P4RK(<86OmmGn60
z5AYcH)|7n;@r}>fn*jjFafX10gv`Pzn*kT^=>1QCXT6Z5-+?beM><`Y3&?}l3w7c)
za20qXQ-!&?EFX_T9r*gWE3!D;O}R>Rdw&P#0+){PJ$%6zafOcK^;00=0H}m=4ZG-z
z_~?`fXagS_d75sh<0qyQ6mS4si{uz}(-$!*Y5N2OJT<*Gi3Ip@QBu8!0@fvs*l@EI
zfTX;n8=bRp3<7o~-IR3JmRAx1K@3W|Eh+ZLkOTsDB;Asf_zxgy1Ozbve2TXrGDjW`
zM?@RAhj&bVJ}r-Dy-*f7j`K3`4&GViDDWCk;=ePe9pG=^SG+Ckec*dZe`T%xFE;u5
U&n(}l?*IS*07*qoM6N<$f}_v<PXGV_

diff --git a/src/extension/chromium/img/icon64.png b/src/extension/chromium/img/icon64.png
index 7a92b4c7db1714ae6b2ce06e63b25c5c3e3918fc..eb7264010ccd4f1d29af9fbff2837cb7f82d9c18 100644
GIT binary patch
delta 778
zcmV+l1NHo?3)%*dU4H`SNkl<Zc%1E<y-wRu6o5ZRR#__i2vrtOKzEq?6dwB^@CN-8
zEezeV`UP64bb!55VT~#tAPO#9K&L}uDFmpGeeXS&HvXhLg?s*F-_MCKBEs?lc7S)l
z1#k^Ws8tk&6h#p%{$gDN=fGQF`(D3Gjc)))z-{1y1d!oyD1X!GRHoCZ42Q$u`4;OI
z_y}y=8Nj0X??y#Pnx=Agb|y8ar>Bypsnrk!IH`wF58%i!xf~oE$SV8$`<4R`;Be79
zI~ZN|fb8w<$!s>eH-On}CcC@4mIJr}wgBE+CC#!-#^dq5=4-~|v1D0hIfOSbKkZEt
zjz*(Lo39y-Mt_zAI0yJ`k*p|+#^!4b)L5?yi$t~Zv>2-~Y=TwgX)#n|*aQzLPm7Tn
z!v%j#d0LFr7$$I&^0XMJF-%~M^0Wk2qyM07l&2-28vO=rt2`|M)#xu+SLJC5q(*<i
zT$HCJfExV-a#fy|0BUp(;!Am2Jgd<?h)?Bd@u)_(0DmErr^S;RyKfGqJT0Eo*llBI
z<!SMt#%>!el&8f}jqNvCDNl=|8ryBKR-P6IHMZLjLwQ=ds4=OhV1>xv(<Mn_RLPuy
zX|^XwKY-W;#HJrW>;hub4<L2{vFS8`JkKf1lB%li{J)K6HPJR+RaKN_NuK9jTAAl;
zv+_Kb$$w;G_H?IZGMPx8=iwiP%d(8!>!Xxq8U9iD>gtNk&CNDj%&4l0EX!K$X*~c@
z+{ZC#`(2{9K<olyv-Sf>eFtp12b<0i*Zpl-`zxRyK<oly(+?na0kP=^5W9fbcz+IP
z!uogrCf5E6=m!wHfY=O}zgM@eR0H5Lb`=r19De{`V^<N8FA1;>{6KjgxPF~=#bf?k
z;N?I>egemib^VKc5|NALS7%R9{EXa$CWg!Ml>Zy>Odfc7`jGh>mH+DiZh#MU^CChb
zEB92ABwN61;1%!!c)tAk>ff*O1kZqL;1~15{<DZ&EPwb1s~~d;$l}$&00000NkvXX
It^-0~f*Ch>x&QzG

delta 1375
zcmV-l1)%!c2CEB@U4I2QNkl<Zc%0>%O^g&p7>1wfuzT7cFo<NiC}?kV^gz_>h68)|
zKck27pz&%XEb#*V+z1if^=ynGtOqg)iF(otD~7~C{8`xui6magEW!Z8oLsW6hw7GQ
znVGJt`RQGFk}uiJbaj2-yVc!qRo5Vieg?1&cm?<X_!>A@E`OIVNvccwH;H<sQn>`2
z1LlE4z{|k4zUSAcqMrwj0*k;Zpfn~YC)H>)w3cSGsZyz=?6FDPMc@<Qxpgf7Fb3=g
zmev&Ue~gTbXlZHbp5jw3Uc9LB@$r^zlQ^IBF}iL903HH90_q(SmoY{sPMm04e9Fm_
zCuNN3B!ZH@K7RzZ6ea**fC_LWCs_eHaNt00@hLMiGr8wW;u`QS5DioS;Bnw5$0W69
z&mOI;tT+pB`}S>3PfxpwAmB8xYajvuF9O$Hlbe{BP_0&TE<UAJt7&3l!bgM#Q0|)m
zKm>g1k&uRlhP1G-;9Y#mnKNfJJUr|pg0N2v=S#x1_<v#S^Vutzxw*OE;!|d4XMF__
za2y!wi2zCQ-}xp{E|<G5KBZErgoyC1iwG`v`mcODFO^DaHk&;Ypp8j#iTS+CAx{9W
zYaa5=PACp0sa+fi5&(GBw=-9>6N;lrY89`02>|Q@ZuoZOV|GIEFiF|C0qk@VAi3_H
zO->rVW`8G?0F#u)0$^MOc-!~n+qZAm<;$1*UVO^(^0Id9*bySan;iwfPHg`1Icc|M
zCzL>wv<z(SB*4eMs`kR{gc4|y4z&~jJD=}3rCl4nG&`XLn51iD))TS<?DsiQyOo_m
z6KIn5sf7TGt|#c1*$E}UB%N1Q0PGr`Q{#S{oqtdQOww*;1UTy2a1drE6i<_ML>U48
zaA`CsvlEJ^N%}>$cDAu*>AF>fuIvmNkCmiVU@O>{799^R%It*VVUk|j1UyX+D=RBZ
zO-<z;=7f@A*A8P$Px^7B6akZi>~Wnj839ieokfAf5y_3<0cC3hj24|mfs97LNYPmo
z$bV>5bOuEe0nMV5D3DtbaLcz<9LH3vRT_<k)0?Gi<l%e1Mx#NsS|yI-AOQf*;xU(w
z<5=~2ePFK6m3qCdIF5ZLLjryV&v$;+YPINE+fuDoeFZoc0T+D6%-+3weGVTe0l8g>
zuv1}Y#>U2cI~f=Oxt%xI>2MAELL?VC+<(Z5#A7nG3Oo`?x`N$(^`P;aq^qeB`o7Rq
zis1*aMhNVapeGn(I!3?SdoT})0Fut)c{AMLEJ^wm?u-DiJ3$^4zDWNt>0R9zGYb3-
zZ0Xc8?<tTsOp9)hef{^Sq+5^~0m%oS=e52M_$)0RG9v)M7_$ZI3?FXSy6FF4mw)Y-
zfk{a>(+}=i50G>nc)w#08=IMI@xZ;)Ppl(6O`8cs9_`w#gZ8Iru|?*tOCZG<vkUv{
zjq$bL_24Gd6@mTV0G^d}Y3&y+m&7Ffh21N3zwlP8;(^X9FxZX9JsrZ`MnM0EJJy&Z
zfC0YTzychno2{~m2t#BxOK%_nzJH<H&C(eWHev1KMiJncOYzPE=+5PEWStAJ3LK`z
z<F0D~GVy}!j~>^X05>JQ=37sQ07%*?spXD|f&@4v>9LSnLIpsQkyMeiT%Z8gB)ya5
z5>!Vw0;I87(xD`oK?!hG(m_e%-R9p50n!+ev=7G}XMwRO>Aj?{p5)zfE?Cel#+co}
z8^AR13~em81FOLA*hSlUCCga7q%Q*8)qycvfhpiA;7K6HZp+`yoxKT7?1ZI`U61$^
hyHx+9q^teR?>~%7Ho+HIHhusA002ovPDHLkV1gn@k3|3g

diff --git a/src/extension/chromium/img/icon96.png b/src/extension/chromium/img/icon96.png
index 641ce897baeb54b0caabff869978ba4295d21506..c3e123f85ca8a6a89004093d483a06f38d8606a7 100644
GIT binary patch
delta 1200
zcmca7_?L4+Y&}btr;B4q#hkZuH)cnNi?r`w&Lww)^=;Q=w`lXX-|8o*nzrgK@@DrH
zRb06HZ$68cw_}`Bds@Lu`GjV-T-_;JsuJa*g-={J`m_I>d82C5`N{8UpYQuoS0JW1
zzq+K}=H=v+z0*55x;-X65&R(ffu({chjBLd{{<;lbNLw9+1cxlO}>-BG>73oQ~QBz
z!OGnq?kO3CpE3KT`hjtR!0M}6Co62GeXP(~8+N*8o@y!M9;T?B)pIxhjAwq&EK!qq
z^>wMGo!zva#fz0!UVr_p_-<hOfp?b}8pIEzG91=h`}c3{&a?OK&HEYCwTormb2f%I
zM%FQF+GC=ut*wpb`aNfw;a9(W)84(gcJqx|^7B|2Y*aohmvxZpZR>Gcyz}gNiC(u$
z8760*hg^~T@Zd2+9bdu<>(%$)>)-j)Q@20gZuzFVGdy1e8E^ZA0S!BM_WX+yt7o6J
zUNLV@mz&3GaOTpfDZ$>XS4>vFXZ**JFrl?H+Hz}%i*G&q59<a;v9NhXSt}drXZ>T{
z9G>#pu_${Yh(Bwd-~oZ1rPIOeS^N{CrJi09+A(Vuzd^Vw(6j?tS#}3{wN}lEVhRiX
z%(yN)6ezs{C|wZyT4VV%hO1X<7#hD$4fbvTDr_(YO3naEJ_xbg%CcnHHs&7ze!7h-
zR^ENI4``M`R@UYX_4z<G4YO|P#IzM<8HQc{B(Cdixm99y=1%TuYv)AqT-|bqRd-5o
z_rzJ#w$E4!R1$ExNNiJ>pDtV0tNMunKx0mV7!!bu&a7AEjTaz{^_445tz4>N`t`a^
z%F`=BO|yPw#;`uU@+i{xuKC)oqO6Z=mgPx@`C4wRuLud=&bxZWoG6=>D|e@bhWhEw
zyK=>M@ha`*V*FXJmR(%FU`|xbs?14C1*|qb5&v7M;`u03X#15l>^t5cVd&{(ln`b%
zP-9E*;W;ovqQTIRAvuZR7)0W+O@oQ=%db^DY|LttJ>PjUhOb<-BdXkJrhx>{i?3Bn
zGGA5gPOIO%YgO82&BG5byjGt$ji=o?(`<HPo&1DlFV*+{lsx<};F3wHSi|P!3-Y#m
z@4j1hRWIV!TeG`)*CXxI8B@|X?&aT6v*z5s2{V1va&mHZWQf{4fBrltZ<l5B=FJQ#
ztidad*6l0oe$R~R&|Oy#x#})jk^1x9`}(d57TjKd_^sz=x})pLQ~CS4g!+;E2b5fP
z?2XYjLFs!}8~(3ZzT^0uYYp`vx+g0p_M&mpp~ORPn$9Ud*j#G$^WS>b`x0mB8Ew{e
zo``-hy>z!L*XPL{b5!b;oF=J6ADDmO`RcN6cL&9D4f?K6wv=uC!TCYAV5i^p4lc%h
z!V`mkyy%_L@rUh?gX_5kp@Djh;!2-hf7LbmUwk1pY{#jxz^-rKV^z=m=c};Vet&!Z
z4z7ocAB1MGePLK7b%6B)*AJ!q^}>;#9!*v`>HI+R14{;Dv`)psxNGT-?=_vifA2l~
o^FFis0qF+<6}p?R--!9g9wEB&Ur|VzJOdDTy85}Sb4q9e05S7A)&Kwi

delta 2201
zcmV;K2xj;F3EmNqU4IB`Nkl<Zc%1E>{cjvc8OJ|!wK<Wios_;<m?E`5;6xF~pr%!-
zHbN?uD1_D(ZWJn`6q?rk0i65|2qA?y70_Q0LLhKKxI`!v1md*`g@8$u=-LKw((ob@
zD<UMq#JMCk$$j}@_S}to=i8l~y}k3@M|vc`?9M#<e0OH|nSY(xHIisXj4`W$0bnh#
zF8KM~LqkJ_ef#zmj4?L>g<$iNr2lN)y0x@-@7@w{3OE5w1IK|AlK$KHqlkc{rZC_}
z;6Y#)a2U7-C~N}*1Dc(kRW0V`=CpqOdM({Au)hLd1GWG+WqrJh$DMJ|*8roy%fQtd
zffJxYp`c^Oj(^n*eue4jY4!H@)+{HmtH5u7r-3zXB><2EHUlpJm+J&-(IzG)>IT2U
z<m6<eG6TCD`0`O8w_*hd0{<{@Bt~!qXy?wIk%M1h$BrGb>Im!@unp*1F#-Txz*E3U
zhk$6~#*LbvpN}oT!oq?!ZQA4_f`B)G?Trv3?ci?!UVm{6g8KUUbo%t^*uk%G=FA!O
z_xHPsAfO1`*Kz^??*P6+l{=ZJ*45Re0|yQ`2fxC>g9p{!-JL{)GB5$$))E2$j{@ft
z9Iyb5kB=t~eudq;cPH{Cuyepr(+Ys?>vsibOrnDw9v)V?T=phFxm?!p@URaN%0bJ1
zTT=-D+<yri@^FB4lPy>3Bx!N&kH8&GAprJ5d)CK+MNPI`iI}8Cwe!HenF;_r09^2N
zK(Uf7S7Ih<_3R?>P$mKZ9|x}ZIvAH^%N55Yt(MILk2}ZFX(xD`1h<$=%{AF_C1H|Q
z&8`8TaEhfv@IU19%<t>#)6C3F!-8L7W@bixeSdvEMOXkn96O$|Hio-_IbTluO150_
zkfbfO5-~5#ae{v*@NbXKdQG-m@sy;6?JO~FQKJUG8~D9XM~8-nye3<&l*?sp*|NpA
z2#1K6tVI>z%RU`UE7@|zbCOoEXXQfx;A40gUZ_~w$(AdglQab}dsImT0B*&@z*^WE
zk$-Ht;yFnZb^z}dB@p17J{@XgvgL~BBu&8A<stxZpU<wR(aDx8DJ5w&Z%u0jzYF^`
z$cqz6pKLW64^PsT+H2H!yje?tr+rnPb+YA33Q5|NiXs4T19n!Kmx}l7*^^lilQKR&
z?o)u1)mlL{0Y-dP+APVID=8#tZy7aR8h?BPyzZm2W=pnQ@tmani6xW2mI|=hM@7w=
zY`Nk&N&ASF5#akiDrx3q%N37F+V@mV0AMw6DQN|*kZif)DM`CbXhLvUfM=2x-YUtK
zD;|@y?W!Wc%Sj4twPec`Pf6N-g#`$@pJnIgFK4ZqY`NkgN&6qrtB?SXBvG`LlYcE&
zJS1tG6%yb}t_As?M%XHNnC`eoApu@>DP*N2TdpKb(vHf;p4B)EJFm24%asI4+BKlZ
z0QX=gn>IBH&X%YcV^Z?OD;sjyb+{d}VQoi%Z0QJ)F>7<cyR!D8jk!Gs^k(fv8`G1+
zzN4W-HuU6xo~*rSV>&G$V|sE~dw<aG<gg3PI%LCK4!h!|LpIELZvpvyp0TkprlzJS
zl}dG|zelyW_^P*5Dls)R#n{*w`F!4Is317`y{&xd@9$T!SWI>FF-wZYqVGAQzXRCo
zqp*BFzoLU*p;#;`pU?XeU^0h&t6*YAM@JbP9Q09CQ!_X?$mr;(ui}n-6MtZ2WW+}?
zErG{lJ?`y+OsQ02)v8s=U1|X?UAjb}P^iCQeKr{EVB9QrVy-iCxKn9mJUnqL18Z`U
zE?{RwcW5lHN}8(-MZA=$EA7dz!45?L?9b4Vc4a?+kyLq6_Id2`Bquu8fLL4wZkBW*
z2O#@q@q<1b>kx_G2G?G~!++7=ZKMarm{`_q<tOAji+)zRj-VSl1H9d(#JF8h+=FiQ
z@<Ut!-YIDoLM<TZhJNf?YKO@Duo8T@z6%2Qc7vU1M<&9*m~hiGwq3mjyf<#Ct=>g6
zs0;ct@IFc9${((40kU4~aw)k(Bt9PwJ}hYg0LGXbfWH9miBoc`pMRkZXaOgIb&{@y
z|M-?!5y1vuj9Yq#x_n`2@S#czfW=mD7<hlw(p&uuO}YG|z&+Ijs5&nw*zg(bkZFfx
zl!4Dy3qI5k06@|q;9Ds<)lPgv(jRL5vuYQ#_)lYQ!G4YI=6bcXco&gY`RA|~-t)CK
zSaxcnq;tR%*eCdz(tqS*JJk^I)N;XxIsyPl`U&>MtsUa=tfUv~ZM19`w78Km-Plk6
z-CJv$1`cMWf@l8^0h=T()Ga4!#m1OBf`V_Y_WzCmi<|}Smh{gk<wTyIF6kfG?=5yF
z^VVh#`$nut!G{<E07yEF{Z80?Ovl=R1>iABN8{`idx3_emw$jy(Mi(6l!0xMei3&^
zrxh}iCb1tzzT&d~3S$8nk@SMg&XF&|Rd+V#0bn1Mmk-6;*SX#_aP<Eow%hr+YrTmC
z2pqW!_^G7ZV(yoyUf(zf@GtC3myRT<H}N99z<~|eg&ys~E7&)pCkj4z5CA~ZDd2;^
z=UCYnX93Rv_kT<JyN?1BcR^Kn1pDEKWe4zDunRf|Jc;L-BWbJ?{t@<Z=5wr!)*#?{
zU_B{J+exDZgt-g&D)s|#*H_#cEuaW|h7_-FX|I$&f*ruy4!n_aT|PMhe40kwT*%XU
z+6b1D^suBO!St7=vVhkmZIe{>b0cY3+FejJ4DgUK=6?z71>0#Zsz)vZFG`vKenx{I
zK4l@mo0Z!M!H)r-1n$RvJg5;|#V(S59{7Rmyx2_0RDdwXm;&~C@nB#d!0$EcZ@{kt
z`=vq?WV57c1XzkOrU&~%!2w`h@bm51_Z!^^tl`af9bLq(^t>3@DeQ%G8oLhqgruf?
bj`4rKg%a~1lQ22N00000NkvXXu0mjfC(<mt

diff --git a/src/extension/chromium/img/icon_png.svg b/src/extension/chromium/img/icon_png.svg
new file mode 100644
index 0000000..7a84d80
--- /dev/null
+++ b/src/extension/chromium/img/icon_png.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">
+  <!-- Version du logo static (fond noir et icône blanche) pour l'exporter en
+       PNG. Car Chromium ne gère pas les images en SVG pour les WebExtensions.
+       https://issues.chromium.org/issues/41057033 -->
+  <style>
+    svg {
+        color: white;
+    }
+  </style>
+  <rect x="0" y="0" width="32" height="32" fill="black" rx="4" ry="4" />
+  <polygon points="6,14 26,14 16,0" fill="currentColor" />
+  <line
+    x1="16"
+    y1="12"
+    x2="16"
+    y2="26"
+    stroke="currentColor"
+    stroke-width="4"
+  />
+  <polyline
+    points="8,32 8,20 24,20 24,32"
+    fill="none"
+    stroke="currentColor"
+    stroke-width="4"
+    stroke-linejoin="round"
+  />
+</svg>
diff --git a/src/extension/firefox/img/icon.svg b/src/extension/firefox/img/icon.svg
index 12ee39d..3d312c6 100644
--- a/src/extension/firefox/img/icon.svg
+++ b/src/extension/firefox/img/icon.svg
@@ -1,26 +1,26 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">
-  <defs>
-    <mask id="circle">
-      <circle cx="16" cy="16" r="16" fill="white" />
-    </mask>
-  </defs>
-
-  <g mask="url(#circle)">
-    <rect x="0" y="0" width="32" height="32" />
-    <polygon
-      points="9,11 23,11 16,2"
-      fill="white"
-      stroke="white"
-      stroke-width="4"
-    />
-    <line x1="16" y1="25" x2="16" y2="11" stroke="white" stroke-width="4" />
-    <polyline
-      points="8,32 8,19 24,19 24,32"
-      fill="none"
-      stroke="white"
-      stroke-width="4"
-      stroke-linejoin="round"
-    />
-  </g>
+  <style>
+    @media (prefers-color-scheme: dark) {
+        svg {
+            color: white;
+        }
+    }
+  </style>
+  <polygon points="6,14 26,14 16,0" fill="currentColor" />
+  <line
+    x1="16"
+    y1="12"
+    x2="16"
+    y2="26"
+    stroke="currentColor"
+    stroke-width="4"
+  />
+  <polyline
+    points="8,32 8,20 24,20 24,32"
+    fill="none"
+    stroke="currentColor"
+    stroke-width="4"
+    stroke-linejoin="round"
+  />
 </svg>
diff --git a/src/extension/firefox/img/icon128.png b/src/extension/firefox/img/icon128.png
index 728804abe2fc361135314f34fe3380e4f86b6894..59b3a2e8b6a842c1dc17d84bc0bcfaa5738cea58 100644
GIT binary patch
literal 1774
zcmZ`)eLT~79RF>M$jC#<lF8$FJXdEpPb0(h%3<?(vn13lvfId_={I-QE+G!rd00p$
z&Ql(0%e2d->|%(QTFUMft#rpsXytUj-QV3G-{1H3`@G-Z_xt_%eE<0V7!e+V)J5q6
z0D#1Y21P+Ts9xK&pzo01(LbO~hZ-7B2LNw<^@2U@Z}=W6nq}eQvIv=JSvf~(sX$In
zj_bFlPSTGZrKY-O(vH_G`JezmD-RzOKxEYZT{n7?6utZW74MQ^P3d>`CORec_wJo|
zR9Kj@GuBElUR<>A&8F$Mmjo__Zm<BN^z~igtpm2>1?Z$G0z3>q+lzaX9QD<s(tT$V
zo2>Dx+571drbH-b%AQrEj4h9;QkR%7+kWK80?Tc7%B+)&7}|`z3<P81wHCaI+^Iob
zTZ~??(U?Fah>nO3%TNj-$A|hp!_X@WyvfQ0^(}F~Q2HF(V-6*>R}tHy*L)nl)_#Zb
zWX^9{+*q*|+4k>gW@4|0^GQ{EJWhp{zM1Jf#3#i_7LE!;xTJS+2p}AGN0SPW(@vj`
z;mS8vtBZV}F(bD{A|P|7dVu5PwB+PK!LubUJnMF%85$ick$<-Y95-+Q6bWS>ccQL8
zkV>W8(dF*`e!I#roG<UbN}F+V4h{^7B(NXeVn)+eMWf3T>6mGHF83SJgM7p-6Rc+@
zp>w8mcGF@lH_^9K&hKgi(%Z;?cC6<;BKXDXwz9o>$XaPUn5nUCA(a~om40OlRmvyN
z>E#8!BR%wWHLHW2A=AYAf^OuOmJ4)SxcjD_tPLn=@(Xde;)IAD`W%*zv<zK*(RjAQ
zBo28FehZDgM3j4q<zWHSicHWRrisreX@fu_5^ap-Of?@_pkJ$}v{+d7nFXmx4)v&3
z?a)-MXvnICy$I9d_EtzL3$8chf-L*P5ETnilj>I*AcY|0w8mTCK{eh2;e*3BmHa5c
zooFyVlLF!MBnUUpyAkCVOY4B7O5Ed}t~hzc99#qLqmWQ`9wa3?^JS%^(!8}H7vN3A
zKuoo1No@oqTB|m-wzq+pArMnGu5(yL8YzSFc~S$Re6&W0s$Y9aeO~R)v^Rjdl&SMc
z=5Z>Lj@tjP>H%mjur>%!{3!&Iih%MdKF&u&cqH;C^7h{AL`P>Am&o>*zN?H>CbO=)
z`wI*P(|Z+&nA9J?I&s1ze-+j`?N}Uq(0kZ*3eCRIbhhIM$eIUI`oxoyM$q*i2!5HK
zp6-Uh48MObpy*E%uzXVUll0)5sxIazeL=iayl{h3VhYB$-#ea`cDcHGGJ#w-F%j9{
z-ycUJ5l0(nOAZ1hzp<U|I0JNlcEzch(n3S-DEhC|e3n(;!2X2`PlkH_a>}iTfPE;I
zUtpusnpxe@Kv9$vV$<F6tqmI|0m9(cgD|A<h{k2*T1X6~Wh?no=I<*XaXuUyd{mf`
z-ERYE(fDt=JG^4R2i@?XlAV^cUxBh?2#&cEc0LYfb^jAk?ZfR6ZPS-)YK~=RSDwCI
z%wg08tkiWrJJll)h-YWb`x0CV^KO+Mdzj2-vs3c($ruk0!a0M)$j7s@6)M#kGZad!
z?14Q=-@1FZVEvz(J-c@8y5Y?Fh(i^#*O}GcsN!Hdgkp;;N@yQeD)(P2Pt3G9-`?&r
zR_iq+7GIdj9#|H?ecPLnkFE%_ZRYX*>3osL8X3XQ9WtqMUh-b%f#JL%g`!JhtNX{*
zkkZ{|W-9{r20T>P)#AXQ|IbPG@=vxJvQb3YyL;+;ZKg$F9&_%o_5Tjw|7K&n`2nVN
z?bY0d|7YvlK0VS3kSE=z=gzGFwWSVv?wBx<;I!_+;yxoP!Mm_wc-dA~t^P+F%WS9y
z3S~A?iXNM?lf765I;(=_VT!uW=!;2wXDb6^!+rSjM<N%W0UvY45v-kN?q-JUupvJd
zzN5?^^g=tC1<)dcmS8qQwjEx%ziZpT&o9GRTZoik@cy~&p7vIIAFmL*I6hi_h^1y>
zqoLjg>+9Sa1Bq~#rBx1C$~t#IKkc2|Pr>5MK3A3Ik@bwq=0Kf(wByC(F8D?Nr%x0A
z`ar4YZ0gi%3?@A_Ej~M`<=Vv@yCa-4un9?Qvcc1IFT<K&y%=c(J}=mhd;QK^lqy?&
zKE1`dxr}ndmm7=Di#~{Mi}qj<jMrUrJ#dEq77ttWx9M6H3n9}sJoAe7;Ulc8$jg4=
TcNaJ4tpf14@Su*sq=J6|=5R6g

delta 2959
zcmV;A3vl%A4bB&kU4IK(Nkl<Zc%1E>e{7vq8OJ~8EnC+PaN3j~GDguF`Bl*<Tg)b;
zZUz)8f+!K9{NW$Xx|o<46aO-5A{z=-Y+PcDAvQ8vNQM(4RHa5`k+C^rp=B_j(;*D9
zIoRkn2JPb?=WV&YyKV11@A+}>ea|O(vbDYUoaa5y_n!OS?|*yVbCrltPbj4na3OF>
z`fnSs0%+~(>T21xZCi^{Y6-9ySeia<0yrrmCvLjwrbAn|ZaoCN2J8p+0WSj20OL|;
z1Ey;Ic$8A-0jtxv0=Nt~qxf;{?d|N`xszqfmd)GV(W6IMxpF0Y_UtM7XW%JdC$JsZ
zE+Q{yJA%N7NPkTQumrdUxEpvDkcFbDsY!P4-Yw-aGBP5~&CLt8o5mjCC&1M}W9adz
zcsxTVP-f8=1J?olz#C;2W+v{r=bo~QKh3@O-dj;0X}k{n8n_l%6nfms8r#qbEKv9l
z0h@pW2E`CSdU|>)F8(y@*RMC~GmQi3EOlw<ah!LILw_ewGAURCJOoT-D1fY5wMtH$
zIAK<O5jlDCq^w@OI*SOV<8h#i^qi}jB6tD?MOVNLz&|YvxU{si$oTlUaq*|wzkk29
zwzk?3fdKyiuCFE`1W!P8@jnafvNXt&B#8_S4P`9-y9^HxOG870EfEO%Q^eJw$6Z1T
z0QfNQuz$sY6+kv_+?c)UMcjV-?N)P4<Bz~)L2D4CQ)mY60^YVgs9jxMGBq`2r|Jbv
zO-;#-H{R$%1Sf$zfTkd|@ZKS;172`2kka1XE{6{vwpR3FjvP567hQCb3lRvg7x=XI
zdU)$d8#tSQNf!fHso7&ng(gv@F$MerX!ceYFMplDM}Vgt4VnPb-`{V!)N|9{-|y@=
z(ip*$f8e9|Ujg29Ibd1L9#b-!MCHUW;I^#ezfia=d;{7ecREm6%^p)MnnVl5oj_uv
zCZ)nv@fQPwt_R1K*<*@jlW4x!3M^S@+)cto@lOYaTn~zEv&R$%Ced6m44f&|ECAqa
zw13^{d_Y{7J*GG^iAu#T;4G;|0iajj?Da7auFM`&9GXO>;yIvAs!0GqD|%ss^8s*e
z_L$<>Br1;Qfper91OS|gr)l4p*<*@hlc+fU1uT=00zjYb|H0D%do_DZ@n8}a#xNO|
zp=Bw40^INGU^i^o;H7{z=;`V4DS`)q27d`40Ouypbc8Z{Oz~(EO~)PLQvkp%z78(5
z*<*@FlSt4Pk**gX0zhBbnecI7)nfLT;?X1$;2?0mxD){TlJ1DFSAR8`J*Idxi3E6p
z3YVi-Du6y;2UBfkk13u_A^|pu3jv^4@?=`3U2asX*<*@llV}RKN^A-My@v03AAbi>
z?PiZDo=u`r%6uy*R{(c;O5Er+u3EwHb~DrXw%8B=a4~x2s`I34$?P%3qe(OYTp$(%
z@Q9CuYt8I2#j{EDfMgK>`i>pviPoywV~S^!XswtC0DZ6Cldco2b+gA5k0#M}F%-ZJ
zJ``FHW{)WzO`=bUfdH)Br8{5Li+|Z;ibs=ZNGcHk+VpXnRK1x!rg$`ou8;}@;PlMD
zUd<j;JefofN;v{RZ_DD;@~vmH#}p4H(G>7ODMJ8vxJ)DuW{)WzOrjskd;$O#0k619
zATMT*DIQFsS17thP%MBhSDok0>@mfINpy`A)I4D}U&aARlCWjV7TVg{Tz@oQS1ez?
zoWa3C8X6j0b#e2opXA+F{}K!~VJs)|Z1$Mq&?GtxESBQ80QB~&);r9**<*@hlW3ik
z5WwBGJBnscHXNEncS;EXJZH0$X!h7)WMo8^E?sI{0HabU0N^~^DyxOtxM~GQx0{_S
z1p>I)X5-Q9v5y0j=!;Sy0Do)m|IzGmg9DSOR|<T9E3iOIOA7-712i@^+Gs9Pz@kNq
z7#J9!wYAk&lPf{5`bp5A|4+Boay21(hBHQg1yNn{2Jqel_yBcU{K&k#2UwAymwiX_
z$t4N;tJNa;q%8q12%SYF7#Ak!FI9}>lM52ytk79Rg3+1)EupiB1b?F?0p1rni%2k9
z67;?Qk$lpepf`Jr<deoIfPB+fyeKr1GZOUfACY|WRun+Kc`HHhB@@Xf6AAD?pFMVT
zbkNt=$Jp2y6B82)?opIAvf?_wiHQlu#>VLD>!YKi!@>wx#36t`V}HTnDbd*2D4REL
zmdVLU+pDGOhRMlE*?+uwvotm~I<H3>e*$>GNAZV;heMBV%`iMX>`MfL3GkmeCkRXQ
z_V&`*+3C8Qx}mePliuE5A6@MO_y!JD*3r=sr+ot^Cnu$&qr>$Kus#9CEvsr4-QC?J
zN%Wg4B}o#xySrU?GoAorE_;Ymzd0VpZd9R{hQE&f`ZwzwJAZbJrluwrP1ilgj~}PG
z+1bTfy)0Zr1bEt2FR}RMI3ByFL`0_FoOinHDN>c}0A_9t+a55HNEo(56hNN&JEQ^-
zk(bdML`3qzsE8Z@X6+L8NT6gQ{+X$D6hJ<CboxI^(o3dFsYc*c^j)LY5DS-N^NfSr
z(_aV97Lk)sFn<Gx$XmcR+r4E)DU~T|y?+O6oi09b%1)v8drl_epTWW(RN)k@lsXN4
zdH7sgy=8q1$oeYEd;dio09J^|+ta_8H3NvqJ3zn99wSx7uL_F~MKb_^QmP&830RR{
z=vP4A`!7I%b`g28@Rz4ts27pvi605;k%x<m4<!VUa(|cOWFr3gaj9RH6o7~f1G}B3
z6Y<Fo5&2uGKg_pQ>j#dKiTG#ETAp$eIO~r}?I7Jz(v;9AL3!^Vz1Cxu%#p}Kt2Muy
zwf9JHzB5<xVF3Y%$Pn;*>nTNiF_@mu&B?rP0WjkWjAFQvMCd6n$Ne7#E*6ph&i9}N
z7wo6Lz<*Covxo%adkYmG%9sHFlu}K=2+&?>7CC+ehU|Y7_*k*+TZ*!7*%6WBKsVY>
zj8r#M!1{8E4`m7fX3U|VnPwG=I=r605S!*QeM(W*TfoeN^{SyAz~$vWC-f8?8qdf7
z1aM`!uYRat27sAWL$?yQm8nJ!0$-}6_)wt$0DnYe6!<Ffe4v^T;OiptQl(Ecx^G)V
z9t6DXU=S&bO(OC;lP6Ym4lwJ9N+rM+iocDzh<Fa*{P+ieTSa8bsQoMnDy0?y4*^%t
z^_VCCr^i1Gd@emVGi%>Mf@h$28vA&uzefQ$JN{ijr-;0nrTxr%w}{A5^jFV6o3*V-
z*?+tMT$i=@U_k%?B61Kdg1t7{i_FVjV6BL}YNIi0yElo*KH!sRGa}-KUBDU<`M0eG
zt#02XB8Py_07Ew0jR5+DZ>@;DX0uW2`?sa<OP@!7Jc-z0D{!rd9I@T7lMVdRn-6aV
zenfN(vmn4mw8eYEMF*Kb2A07(;5We8CVx-P@yEb}z->5QlIKGJ0Ly{<fHjpqF{c7}
z678_=vzkl^eC^@-63_{JAH859QW`<8xmbgT;)A~#ppdJ8p97bc^WYrK08arMfU*~J
z*dW9%&VK<u3Vaj2ay9Q9L(hz#z;p2-%nVS-`+-g9^#vuV^BLe_^sC<acQ(vL=zo3O
zUk1L0{-oet{Q-FbSPOI!u=o&O0Mk4MT!}tEsAm`PN#I(vWj^m6JH8107BCl=1K$E}
zQA#z0P9_WKeR+?e&+Z=zoX#m!s{p1sUnzA9&;zUpolJ$i0`!Z>FVUB8tCDIL05G$A
z**dg2@&#a7*o@}nFz{RSR&0-@n}2RqH8mlCLX=XA(dP=+q;W~uj2K04z4|Ed*TPL0
zYk`^*Kru?GbAZ)ptOPE@@^-fcyn!}sb^?zB+ifk(2t~~cpcG1}HsE65LZA(O{%{u1
zl14Ld8gNGXl%v2qXjA4;8m|KT(ch{z4m@LXAx5?Ef6G+!k27M0WB>pF00>D%PDHLk
FV1o9daVh`+

diff --git a/src/extension/firefox/img/icon16.png b/src/extension/firefox/img/icon16.png
index 6a97843da8c0b17dc46bc99208cd659b02471a5d..da4687f462eb63deb65cbd25dcef756daa7b7777 100644
GIT binary patch
delta 245
zcmV<R01E%#1IhxBU4H=ANkl<ZIE|%~!3~5U5Jf*5?$kgVTEXs?KrvbjouF-SPz&JB
z;qO7&h=?(}KbZvhGcPj)0N@Q^0l;GzV`z*i&bOEWys#~b1g$kg2n-=mYh8m(I5VV_
z9LJGK!!S@vS%Z{^ec$t_uIugr+O}nku>iyv*)+{HKq*D<eQr^l<h`d-st&N$R*RFY
zwHZJp%9+U35<=8c@TfXBl>wY{Ao-1bCn=nB86X>BUv#DYNT(wRA+n_7zB<A$l2_){
v?e9BS{%BwZ)-O2&_&ye#zxks-0eF4@An6eTEf$uz00000NkvXXu0mjf&a7)v

delta 396
zcmV;70dxM!0^b9WU4H>=Nkl<ZIE{sq%}T>i5QV?UwH7Mf<{i{@-A#A8=(7mfcHLzc
zipAeI$RiZ|%Q~w<jnWs$6I2K-mE*!pxu*Uc7|3PjoS8HC21)n<M8LS!YUO#Jzt89M
z_jbFT0~f&2R=r2u18#s1KuMCwkR*u!0c+q2XnYf>$j?=g;(s_+9dR6+h=3;(F@al4
zcDr3Im&+}I)oP_)ujh+gR$L+*I}Ae=MX^OT6h)yh41GI?0AoPTIi+d(E7_2ysho2r
za_)d*fGCQ{vWzUtFboC*07jz`KB6dMI-LTX1i%8==LeX_AP9a+11wxM3IP3npH8Q<
zRb`U^%w{ttlYhyk2f(Xswk*qkcTkq4e-ke|z=O#(o6U`9-?x9ZnhN&-M|@q$ri*p>
z=e!0EoTNMmf;-@}?tM5M{<b`TYe{dm=?3sv?^q8n{{ZZ&_A@mkT}oR2A+VM-Hu5(C
qFAjlo;DxU@vZ%h#BpuZ2KLJJvwD%|t=PLjJ002ovP6b4+LSTY#GP2nK

diff --git a/src/extension/firefox/img/icon24.png b/src/extension/firefox/img/icon24.png
index 7322dcabc360cb02c03e74ba84ceebbee2213a30..a9fb7b9d99dcc7731db67ab789577579af093e13 100644
GIT binary patch
delta 389
zcmV;00eb$=1=$0TU4H>)Nkl<ZNQt$TF>Zq}6o$V<Ry(pc6UxLDLT=)6jxZI*w$})`
z1w$m@1lie0R(6Khp;&?tz)90jvSc3i`|ao7GQcbF4V(d)YFca2T2GE?+Zp%*UTBlg
zPI6sW>bjP?uElj-8xa9M0WNa`l~Pg^g&6WY7p0Vqzy+I?#D8%t*F;fdyNl@ozVA!Z
zGy{RAX=Jn6{7t}d94X6kklav~r8tiBxImI5qsa|Pk~}7$wVq9Gn6d7-C2g6p?zAOs
z8MCh93eWS%vWzUtdhzXci|_jY6h%Rv=hsv5Jde}qG>BXIxqBDlIJUh5vK+`gnL&vb
ziv?P1R;yJnZhp#R`n%n(_rIzt4u=CGG7#x)DF}kQ57-a{!F-9<>-7VL7@s>RQJ1b;
z#$42m-(vER(=;UvL&7j5P1D)<-2%^GvP4~u$K%cZQw8oxY*^AhYyU*G1or<ZuvfrG
j`|%FEJt^^---Sm%rZs7SEDV}@00000NkvXXu0mjfIkdYo

delta 637
zcmV-@0)qY71J4DJU4H^xNkl<ZNQteMF>ljA7=|AkXDjK16bMw1r9*#&JJb>qQVR=Y
zVCW7MgtB91ri2M0kVQ6>1wv`pO8E~MAz76ur4mz(H>Z6WVn>c+CoS+uC)uCBd*8dy
zcV{DsvIZ;xkAU6f<z+t%!zhZPXk}%^2X=vnz_pngCBk*!6@M@URIOI!`@T|q-&eI-
z6(HaQcn@4ZlL2rW_?>i?VHoQ5ddk!5^<)@EY9b&6)@K?3kCPFNJGNS_De;t6tCclK
zXR}pkkc@mne06nIaU7Q#42MHGj#Ff^K4Ab{&6WjFtya_F;bEzG%F)r0>h*fwBm}Nx
z4c=xGDwT=`gMYzX@sz<}ph~5ZH+h|Cvy`ruv~@b2GmEFR+wHu;FsTe%*$2&L^W5So
z&1N%i^1uLgfSUk|i;H-k$HKw_c^ZudjYb22AP5M8U@9kyA~rWSIX*s4L!SY@<y;G!
z>$>BSx~@AnKWV-R)TV~=|EOC<(QG-gvF!EQ+S<hPl7F(D0(>PiE!(zdZmu%oIF@bO
z`4W9GfeBmNwy~_jiOs~aENt7(hXV`PCRs%QrfC*VyKEI@<JrCmpG@Ebqw`~mZnul$
zI5>_&x7(c?&oKo0rljwHSC;h;ypeQ}7W)}+7r0oKy}!TD-rnB$dJZA*9KZsQ^usWW
zdq5w!P<GVA^E^DyJIlyVf%}qv0*v2^q#fXClJK{j0#79M)4;@Qm(&67F#0x}mk`*H
z^l~Dq;=h4QlG?88#>_vXP9(jPbh${YY)AcK^nHE-Yyh`_8zkpDaKLDTZUY~a`$GNz
X5#biFF}fDh00000NkvXXu0mjfWCbqS

diff --git a/src/extension/firefox/img/icon32.png b/src/extension/firefox/img/icon32.png
index ba6fb23b0be9631955f904353abcf55684950529..68e3aa80c1066fa32f0c8041063c1aff02dd931d 100644
GIT binary patch
delta 395
zcmV;60d)R{2HpdZU4H><Nkl<ZScUDEJ95G>5QaZ9>U{wkS8xWnf^VS1z+v2^$fHe>
z4zA(K?lKbtrHf60RYdr)QefQh&1|Jz?XMmEnh_!bum(PWGa%Zq){3=Oo!`Y7cn4Np
zZ`Qz1;3kq~nKVr!P18u0WuYRZ>$##kc~G%2Mvlj$I1Yz{7=L48M7$C@c0l&~z4+{Q
zyBGl{LW{QBt+Z`>BcN?t*=#m3BJ{~=no3!gH_aVoSxTCwj}uT7#b9$sQ5266V6B~O
z?g+Hzbds~2mOyKcC-|1r5@5~ogg(n@QCc(Ha$1zujI*2;g*D?Xr)A8ViBl1Z$ltOg
zNn*BP5mj|Zo__)c1>|{7UDt?6Z}<%5)pbpt=c6KeZ)a6icXL5iRpBn^JLP{Ea>?v>
zz-SZw6HL7W+6m4+fu{iV9q@^L`+a7gzyi3;*#EQuzGf8g3D*ze&F9p|U!Mv^{Wq|5
p55@|3<N8;7w15-v0xU&@UwCt7k>7lx!vFvP07*qoL<FuvV1h!&yG{TA

delta 694
zcmV;n0!jVe1BV8XU4H_UNkl<ZScS!x&ubGw7>1t-)U?=?T!cs{)Iz<bX#WGr(cIOX
z@^7@aUOY$<FAY@fRlMfnO+_dzEd?tcdI%`AS&%@%9|<LC;PtS(kfbx4%{J8+=8|vb
zd!NnDzB`K~;tXI8cmliv4$9?nQ&Lw_w^FGzfdk+r@EFL%?tdG@_%5&wv;hGs6bfp$
z+X{7ley)|36@~R+?rUHvF#s?FYycO1jg`q{bbNfQVb$w(WwY6S2mxK-88AH-0I&pn
z9cm_HjB2&oCG$|VT2027VF&?x!0lK7z<r=;X`;2YHK%!~)zwuSfPhnAIT9eaa;tf<
zSX8gq8wt?s^?y_>7Na0?RsdicII=CApPyH=*&Jye>g?=H3kwS_h(ln;2C!jUFf}!$
zot>T7=AriY_mxhkT@dR70KubnVVhj7R>w9EwYj<J0{9c&iV$GiHnChTCpHgNsZ?AL
z)xev%{*ZBnO;TAxDjY2!1Ae>?6kTDHRF04m@Cf{DkAEFDN#zKsE%09=uKVO1!%ETv
z*h>L-_<ve7KnJ)n?n(taIFvCa2|y>6WYr{<0)E>HrBVsc^P*nY19HvtJdaYT<nsRo
zj!oETG$!^0G#ZV_O?YHO%jfg)|Hl!E==CK9e3+Qi_<C=ES>Ok7v%fNGmtVDxAOE?O
zq!#dYJb&<s=#8XS|4FFJ7)f`<dIwmPL<)a)9eD8%ul~8DZv^K3N3y-RS2$`!tltIF
zlKoJc15U0HzytCFp1PcH%fRV10Gt4YOMb&Y1Q53*eVQP^E<?xhNPu9ZC9O+pT>+pY
z>1og_*~h7*oTMuL87?kBOVXC4#Zmo@EN?cOj4v^>z(e2xa1Z|=lMTv0f$zX);3M!(
ce!z{?UtH|Z<Uyu)ng9R*07*qoM6N<$f@+yUk^lez

diff --git a/src/extension/firefox/img/icon48.png b/src/extension/firefox/img/icon48.png
index e4c1f5ddb8775794f93881a263a019e04c2b9eec..b2bff5a897f365819e5cd19670893ee4ce443014 100644
GIT binary patch
delta 577
zcmV-H0>1s636lkoU4H@~Nkl<ZXo2mTO>&}86h@C0g_%*M!%h#_hAxFI^xqD21+WRS
z6YZokNva1KvI8lqb;jWKAkYI7<ifiK)A3Zj*?X7!@$euDB7%qjTmj#KU%(y^*AYdL
zL{a2iry6_U4)_L4{`Flo{~7pgbRYpF3_~f3LW-i0FbvJ=R)6CWxUPEV%DQ>a^JKHx
zNX>e^7SHoe5n=-H!?>`lRx3GVxm;QY5a27oy=BqGVj*Q&z6em3rOfAZ>i~BEJF9|0
z5J;9~FPg8(vP^;?une%n@{FWu+Sq(enx@vfU{ffHqSoeX4Ap8ApjM_9W3{>!I8>$<
zL$$gUcukpFjDOVHe{qvCwHT?j-@-O!YB5l2zl9oQYH?I+_eEWlsl`F9-4=9JrWOaa
z>L>SArk0*+)lYU&rj{OR)lGC&rj{ORZJ%VNOf4PN+CIrrnOd}J9n~o;5qZ7jXf(1u
z6l3#>Z_FjY&|CrxjVgfe`^0ffp65vQlisn>gl27?=YPa;jPLvE5Us9FlH`r=0wPJ0
z*xd)V+bz@SRDDJ)$n%`pY}PtY72w!qaY{5dzK`)CK4(0a#Z6n>bjfv{ui@SAz$L)Y
zTmlS@lZBc%#gkVP?|ujVivatfn{eRI7<d}G3kROYz|GKIIB)~cf7d^9<e{O7V{5vM
zp7kF9zdHURb$u+v83uR&K1uzyN)=+l^ScMP9Q=EKCINQ9Pv8sS*M0v5;;MSlZfMHw
P00000NkvXXu0mjff-M=e

delta 1102
zcmV-U1hM;*1)K?xU4H~ANkl<ZXo1z5!D}2<9LGPi*;aO=P#RVn5)dJ^xfKaU*_`|b
zmJ|;~PaedYXxfVqj}4MQ4z1Ob;322nbCT^Lc*voxZq{W_mI&e!(JF0dCV>#cem%@g
z-6r#9-pp(^@e9Ap%x~ZC`<*xYzQ6Z&kwn%2E&%TXUjcUug@3|Ey<UGJX<yQQv)O!7
zEEYF_yME4lz=f{V&OmwqxDNaXs56$9mUI})%gZ{P2mAoc00TV}01N|nfZY&6nx39M
zLO#IM)Kr)V0Xx8#z|gS?0L}n60M|f5<KyGn+uJh=*x%pR#KeS2g#3qc6L_Jk0)R_E
zBciZMrIK2$mVc3afL5!eQmGUrLcmYJ>s=85yc_k@0p)TzRjbul@&Q&?SJl_o7bjvH
zxROZ#@B#2oOd%~SELf8dFh4&ZCqTdf@Np^uz%`2ks#Gd!x7&#YwA*b}Dis?M0%j5k
z@L!vQxPeDTMzpoHm6&{h?d@%ij*i;S#H5t~U<7y?H-BiMP|*7NdTR0kn$4z)#iES}
z7Z{Bc0Gy3mZGs3htF$nfTv*hBGf@IQw;3qPtkNRF<POJYp#p#*JV%TiAkM7P!ouV_
zU!}n?0e9j)Y-?6&VQF##ZapUeuQ3blZGuQ@R%u~ray$49U?AXnoa!`Yl@^vJ_erOK
zBQ0@fq<=N5w6HX}2R?TOfwn0zt68Omg~_#nSHRmzg(ek?MKv0Yo|6yIXf)zX?rI)*
z3j@Z+#;8`SRI61}N+@P$XG5<qE-oe-C*ZKQwr0BhHhB9~TNAMg6S`do_%4Un`}|*V
zF$bJGX%-o9E(g4L(kwFIrQAs~$cj9kEuW7|9Dg1jW^!_p{{H^d#Z0SHCw6ytSy@?O
zb92*XNEhH2V!rL=a#^nH_H6xkU03CD*=7~m0E=a`R;%@le1KZ5X1$F595+vwFJHEq
z&aT3;=EEFtKQ1eu&u1o-6qYsbId~1xAAn=ZlHc|98jfS61l}t&n3wd(ahw|PX3_$t
z-hU=(FJ!Yih2VjtN5Rvbp^LrEap(InEeS^wj^hjfzX73(yy+D(P4RK(<86OmmGn60
z5AYcH)|7n;@r}>fn*jjFafX10gv`Pzn*kT^=>1QCXT6Z5-+?beM><`Y3&?}l3w7c)
za20qXQ-!&?EFX_T9r*gWE3!D;O}R>Rdw&P#0+){PJ$%6zafOcK^;00=0H}m=4ZG-z
z_~?`fXagS_d75sh<0qyQ6mS4si{uz}(-$!*Y5N2OJT<*Gi3Ip@QBu8!0@fvs*l@EI
zfTX;n8=bRp3<7o~-IR3JmRAx1K@3W|Eh+ZLkOTsDB;Asf_zxgy1Ozbve2TXrGDjW`
zM?@RAhj&bVJ}r-Dy-*f7j`K3`4&GViDDWCk;=ePe9pG=^SG+Ckec*dZe`T%xFE;u5
U&n(}l?*IS*07*qoM6N<$f}_v<PXGV_

diff --git a/src/extension/firefox/img/icon64.png b/src/extension/firefox/img/icon64.png
index 7a92b4c7db1714ae6b2ce06e63b25c5c3e3918fc..eb7264010ccd4f1d29af9fbff2837cb7f82d9c18 100644
GIT binary patch
delta 778
zcmV+l1NHo?3)%*dU4H`SNkl<Zc%1E<y-wRu6o5ZRR#__i2vrtOKzEq?6dwB^@CN-8
zEezeV`UP64bb!55VT~#tAPO#9K&L}uDFmpGeeXS&HvXhLg?s*F-_MCKBEs?lc7S)l
z1#k^Ws8tk&6h#p%{$gDN=fGQF`(D3Gjc)))z-{1y1d!oyD1X!GRHoCZ42Q$u`4;OI
z_y}y=8Nj0X??y#Pnx=Agb|y8ar>Bypsnrk!IH`wF58%i!xf~oE$SV8$`<4R`;Be79
zI~ZN|fb8w<$!s>eH-On}CcC@4mIJr}wgBE+CC#!-#^dq5=4-~|v1D0hIfOSbKkZEt
zjz*(Lo39y-Mt_zAI0yJ`k*p|+#^!4b)L5?yi$t~Zv>2-~Y=TwgX)#n|*aQzLPm7Tn
z!v%j#d0LFr7$$I&^0XMJF-%~M^0Wk2qyM07l&2-28vO=rt2`|M)#xu+SLJC5q(*<i
zT$HCJfExV-a#fy|0BUp(;!Am2Jgd<?h)?Bd@u)_(0DmErr^S;RyKfGqJT0Eo*llBI
z<!SMt#%>!el&8f}jqNvCDNl=|8ryBKR-P6IHMZLjLwQ=ds4=OhV1>xv(<Mn_RLPuy
zX|^XwKY-W;#HJrW>;hub4<L2{vFS8`JkKf1lB%li{J)K6HPJR+RaKN_NuK9jTAAl;
zv+_Kb$$w;G_H?IZGMPx8=iwiP%d(8!>!Xxq8U9iD>gtNk&CNDj%&4l0EX!K$X*~c@
z+{ZC#`(2{9K<olyv-Sf>eFtp12b<0i*Zpl-`zxRyK<oly(+?na0kP=^5W9fbcz+IP
z!uogrCf5E6=m!wHfY=O}zgM@eR0H5Lb`=r19De{`V^<N8FA1;>{6KjgxPF~=#bf?k
z;N?I>egemib^VKc5|NALS7%R9{EXa$CWg!Ml>Zy>Odfc7`jGh>mH+DiZh#MU^CChb
zEB92ABwN61;1%!!c)tAk>ff*O1kZqL;1~15{<DZ&EPwb1s~~d;$l}$&00000NkvXX
It^-0~f*Ch>x&QzG

delta 1375
zcmV-l1)%!c2CEB@U4I2QNkl<Zc%0>%O^g&p7>1wfuzT7cFo<NiC}?kV^gz_>h68)|
zKck27pz&%XEb#*V+z1if^=ynGtOqg)iF(otD~7~C{8`xui6magEW!Z8oLsW6hw7GQ
znVGJt`RQGFk}uiJbaj2-yVc!qRo5Vieg?1&cm?<X_!>A@E`OIVNvccwH;H<sQn>`2
z1LlE4z{|k4zUSAcqMrwj0*k;Zpfn~YC)H>)w3cSGsZyz=?6FDPMc@<Qxpgf7Fb3=g
zmev&Ue~gTbXlZHbp5jw3Uc9LB@$r^zlQ^IBF}iL903HH90_q(SmoY{sPMm04e9Fm_
zCuNN3B!ZH@K7RzZ6ea**fC_LWCs_eHaNt00@hLMiGr8wW;u`QS5DioS;Bnw5$0W69
z&mOI;tT+pB`}S>3PfxpwAmB8xYajvuF9O$Hlbe{BP_0&TE<UAJt7&3l!bgM#Q0|)m
zKm>g1k&uRlhP1G-;9Y#mnKNfJJUr|pg0N2v=S#x1_<v#S^Vutzxw*OE;!|d4XMF__
za2y!wi2zCQ-}xp{E|<G5KBZErgoyC1iwG`v`mcODFO^DaHk&;Ypp8j#iTS+CAx{9W
zYaa5=PACp0sa+fi5&(GBw=-9>6N;lrY89`02>|Q@ZuoZOV|GIEFiF|C0qk@VAi3_H
zO->rVW`8G?0F#u)0$^MOc-!~n+qZAm<;$1*UVO^(^0Id9*bySan;iwfPHg`1Icc|M
zCzL>wv<z(SB*4eMs`kR{gc4|y4z&~jJD=}3rCl4nG&`XLn51iD))TS<?DsiQyOo_m
z6KIn5sf7TGt|#c1*$E}UB%N1Q0PGr`Q{#S{oqtdQOww*;1UTy2a1drE6i<_ML>U48
zaA`CsvlEJ^N%}>$cDAu*>AF>fuIvmNkCmiVU@O>{799^R%It*VVUk|j1UyX+D=RBZ
zO-<z;=7f@A*A8P$Px^7B6akZi>~Wnj839ieokfAf5y_3<0cC3hj24|mfs97LNYPmo
z$bV>5bOuEe0nMV5D3DtbaLcz<9LH3vRT_<k)0?Gi<l%e1Mx#NsS|yI-AOQf*;xU(w
z<5=~2ePFK6m3qCdIF5ZLLjryV&v$;+YPINE+fuDoeFZoc0T+D6%-+3weGVTe0l8g>
zuv1}Y#>U2cI~f=Oxt%xI>2MAELL?VC+<(Z5#A7nG3Oo`?x`N$(^`P;aq^qeB`o7Rq
zis1*aMhNVapeGn(I!3?SdoT})0Fut)c{AMLEJ^wm?u-DiJ3$^4zDWNt>0R9zGYb3-
zZ0Xc8?<tTsOp9)hef{^Sq+5^~0m%oS=e52M_$)0RG9v)M7_$ZI3?FXSy6FF4mw)Y-
zfk{a>(+}=i50G>nc)w#08=IMI@xZ;)Ppl(6O`8cs9_`w#gZ8Iru|?*tOCZG<vkUv{
zjq$bL_24Gd6@mTV0G^d}Y3&y+m&7Ffh21N3zwlP8;(^X9FxZX9JsrZ`MnM0EJJy&Z
zfC0YTzychno2{~m2t#BxOK%_nzJH<H&C(eWHev1KMiJncOYzPE=+5PEWStAJ3LK`z
z<F0D~GVy}!j~>^X05>JQ=37sQ07%*?spXD|f&@4v>9LSnLIpsQkyMeiT%Z8gB)ya5
z5>!Vw0;I87(xD`oK?!hG(m_e%-R9p50n!+ev=7G}XMwRO>Aj?{p5)zfE?Cel#+co}
z8^AR13~em81FOLA*hSlUCCga7q%Q*8)qycvfhpiA;7K6HZp+`yoxKT7?1ZI`U61$^
hyHx+9q^teR?>~%7Ho+HIHhusA002ovPDHLkV1gn@k3|3g

diff --git a/src/extension/firefox/img/icon96.png b/src/extension/firefox/img/icon96.png
index 641ce897baeb54b0caabff869978ba4295d21506..c3e123f85ca8a6a89004093d483a06f38d8606a7 100644
GIT binary patch
delta 1200
zcmca7_?L4+Y&}btr;B4q#hkZuH)cnNi?r`w&Lww)^=;Q=w`lXX-|8o*nzrgK@@DrH
zRb06HZ$68cw_}`Bds@Lu`GjV-T-_;JsuJa*g-={J`m_I>d82C5`N{8UpYQuoS0JW1
zzq+K}=H=v+z0*55x;-X65&R(ffu({chjBLd{{<;lbNLw9+1cxlO}>-BG>73oQ~QBz
z!OGnq?kO3CpE3KT`hjtR!0M}6Co62GeXP(~8+N*8o@y!M9;T?B)pIxhjAwq&EK!qq
z^>wMGo!zva#fz0!UVr_p_-<hOfp?b}8pIEzG91=h`}c3{&a?OK&HEYCwTormb2f%I
zM%FQF+GC=ut*wpb`aNfw;a9(W)84(gcJqx|^7B|2Y*aohmvxZpZR>Gcyz}gNiC(u$
z8760*hg^~T@Zd2+9bdu<>(%$)>)-j)Q@20gZuzFVGdy1e8E^ZA0S!BM_WX+yt7o6J
zUNLV@mz&3GaOTpfDZ$>XS4>vFXZ**JFrl?H+Hz}%i*G&q59<a;v9NhXSt}drXZ>T{
z9G>#pu_${Yh(Bwd-~oZ1rPIOeS^N{CrJi09+A(Vuzd^Vw(6j?tS#}3{wN}lEVhRiX
z%(yN)6ezs{C|wZyT4VV%hO1X<7#hD$4fbvTDr_(YO3naEJ_xbg%CcnHHs&7ze!7h-
zR^ENI4``M`R@UYX_4z<G4YO|P#IzM<8HQc{B(Cdixm99y=1%TuYv)AqT-|bqRd-5o
z_rzJ#w$E4!R1$ExNNiJ>pDtV0tNMunKx0mV7!!bu&a7AEjTaz{^_445tz4>N`t`a^
z%F`=BO|yPw#;`uU@+i{xuKC)oqO6Z=mgPx@`C4wRuLud=&bxZWoG6=>D|e@bhWhEw
zyK=>M@ha`*V*FXJmR(%FU`|xbs?14C1*|qb5&v7M;`u03X#15l>^t5cVd&{(ln`b%
zP-9E*;W;ovqQTIRAvuZR7)0W+O@oQ=%db^DY|LttJ>PjUhOb<-BdXkJrhx>{i?3Bn
zGGA5gPOIO%YgO82&BG5byjGt$ji=o?(`<HPo&1DlFV*+{lsx<};F3wHSi|P!3-Y#m
z@4j1hRWIV!TeG`)*CXxI8B@|X?&aT6v*z5s2{V1va&mHZWQf{4fBrltZ<l5B=FJQ#
ztidad*6l0oe$R~R&|Oy#x#})jk^1x9`}(d57TjKd_^sz=x})pLQ~CS4g!+;E2b5fP
z?2XYjLFs!}8~(3ZzT^0uYYp`vx+g0p_M&mpp~ORPn$9Ud*j#G$^WS>b`x0mB8Ew{e
zo``-hy>z!L*XPL{b5!b;oF=J6ADDmO`RcN6cL&9D4f?K6wv=uC!TCYAV5i^p4lc%h
z!V`mkyy%_L@rUh?gX_5kp@Djh;!2-hf7LbmUwk1pY{#jxz^-rKV^z=m=c};Vet&!Z
z4z7ocAB1MGePLK7b%6B)*AJ!q^}>;#9!*v`>HI+R14{;Dv`)psxNGT-?=_vifA2l~
o^FFis0qF+<6}p?R--!9g9wEB&Ur|VzJOdDTy85}Sb4q9e05S7A)&Kwi

delta 2201
zcmV;K2xj;F3EmNqU4IB`Nkl<Zc%1E>{cjvc8OJ|!wK<Wios_;<m?E`5;6xF~pr%!-
zHbN?uD1_D(ZWJn`6q?rk0i65|2qA?y70_Q0LLhKKxI`!v1md*`g@8$u=-LKw((ob@
zD<UMq#JMCk$$j}@_S}to=i8l~y}k3@M|vc`?9M#<e0OH|nSY(xHIisXj4`W$0bnh#
zF8KM~LqkJ_ef#zmj4?L>g<$iNr2lN)y0x@-@7@w{3OE5w1IK|AlK$KHqlkc{rZC_}
z;6Y#)a2U7-C~N}*1Dc(kRW0V`=CpqOdM({Au)hLd1GWG+WqrJh$DMJ|*8roy%fQtd
zffJxYp`c^Oj(^n*eue4jY4!H@)+{HmtH5u7r-3zXB><2EHUlpJm+J&-(IzG)>IT2U
z<m6<eG6TCD`0`O8w_*hd0{<{@Bt~!qXy?wIk%M1h$BrGb>Im!@unp*1F#-Txz*E3U
zhk$6~#*LbvpN}oT!oq?!ZQA4_f`B)G?Trv3?ci?!UVm{6g8KUUbo%t^*uk%G=FA!O
z_xHPsAfO1`*Kz^??*P6+l{=ZJ*45Re0|yQ`2fxC>g9p{!-JL{)GB5$$))E2$j{@ft
z9Iyb5kB=t~eudq;cPH{Cuyepr(+Ys?>vsibOrnDw9v)V?T=phFxm?!p@URaN%0bJ1
zTT=-D+<yri@^FB4lPy>3Bx!N&kH8&GAprJ5d)CK+MNPI`iI}8Cwe!HenF;_r09^2N
zK(Uf7S7Ih<_3R?>P$mKZ9|x}ZIvAH^%N55Yt(MILk2}ZFX(xD`1h<$=%{AF_C1H|Q
z&8`8TaEhfv@IU19%<t>#)6C3F!-8L7W@bixeSdvEMOXkn96O$|Hio-_IbTluO150_
zkfbfO5-~5#ae{v*@NbXKdQG-m@sy;6?JO~FQKJUG8~D9XM~8-nye3<&l*?sp*|NpA
z2#1K6tVI>z%RU`UE7@|zbCOoEXXQfx;A40gUZ_~w$(AdglQab}dsImT0B*&@z*^WE
zk$-Ht;yFnZb^z}dB@p17J{@XgvgL~BBu&8A<stxZpU<wR(aDx8DJ5w&Z%u0jzYF^`
z$cqz6pKLW64^PsT+H2H!yje?tr+rnPb+YA33Q5|NiXs4T19n!Kmx}l7*^^lilQKR&
z?o)u1)mlL{0Y-dP+APVID=8#tZy7aR8h?BPyzZm2W=pnQ@tmani6xW2mI|=hM@7w=
zY`Nk&N&ASF5#akiDrx3q%N37F+V@mV0AMw6DQN|*kZif)DM`CbXhLvUfM=2x-YUtK
zD;|@y?W!Wc%Sj4twPec`Pf6N-g#`$@pJnIgFK4ZqY`NkgN&6qrtB?SXBvG`LlYcE&
zJS1tG6%yb}t_As?M%XHNnC`eoApu@>DP*N2TdpKb(vHf;p4B)EJFm24%asI4+BKlZ
z0QX=gn>IBH&X%YcV^Z?OD;sjyb+{d}VQoi%Z0QJ)F>7<cyR!D8jk!Gs^k(fv8`G1+
zzN4W-HuU6xo~*rSV>&G$V|sE~dw<aG<gg3PI%LCK4!h!|LpIELZvpvyp0TkprlzJS
zl}dG|zelyW_^P*5Dls)R#n{*w`F!4Is317`y{&xd@9$T!SWI>FF-wZYqVGAQzXRCo
zqp*BFzoLU*p;#;`pU?XeU^0h&t6*YAM@JbP9Q09CQ!_X?$mr;(ui}n-6MtZ2WW+}?
zErG{lJ?`y+OsQ02)v8s=U1|X?UAjb}P^iCQeKr{EVB9QrVy-iCxKn9mJUnqL18Z`U
zE?{RwcW5lHN}8(-MZA=$EA7dz!45?L?9b4Vc4a?+kyLq6_Id2`Bquu8fLL4wZkBW*
z2O#@q@q<1b>kx_G2G?G~!++7=ZKMarm{`_q<tOAji+)zRj-VSl1H9d(#JF8h+=FiQ
z@<Ut!-YIDoLM<TZhJNf?YKO@Duo8T@z6%2Qc7vU1M<&9*m~hiGwq3mjyf<#Ct=>g6
zs0;ct@IFc9${((40kU4~aw)k(Bt9PwJ}hYg0LGXbfWH9miBoc`pMRkZXaOgIb&{@y
z|M-?!5y1vuj9Yq#x_n`2@S#czfW=mD7<hlw(p&uuO}YG|z&+Ijs5&nw*zg(bkZFfx
zl!4Dy3qI5k06@|q;9Ds<)lPgv(jRL5vuYQ#_)lYQ!G4YI=6bcXco&gY`RA|~-t)CK
zSaxcnq;tR%*eCdz(tqS*JJk^I)N;XxIsyPl`U&>MtsUa=tfUv~ZM19`w78Km-Plk6
z-CJv$1`cMWf@l8^0h=T()Ga4!#m1OBf`V_Y_WzCmi<|}Smh{gk<wTyIF6kfG?=5yF
z^VVh#`$nut!G{<E07yEF{Z80?Ovl=R1>iABN8{`idx3_emw$jy(Mi(6l!0xMei3&^
zrxh}iCb1tzzT&d~3S$8nk@SMg&XF&|Rd+V#0bn1Mmk-6;*SX#_aP<Eow%hr+YrTmC
z2pqW!_^G7ZV(yoyUf(zf@GtC3myRT<H}N99z<~|eg&ys~E7&)pCkj4z5CA~ZDd2;^
z=UCYnX93Rv_kT<JyN?1BcR^Kn1pDEKWe4zDunRf|Jc;L-BWbJ?{t@<Z=5wr!)*#?{
zU_B{J+exDZgt-g&D)s|#*H_#cEuaW|h7_-FX|I$&f*ruy4!n_aT|PMhe40kwT*%XU
z+6b1D^suBO!St7=vVhkmZIe{>b0cY3+FejJ4DgUK=6?z71>0#Zsz)vZFG`vKenx{I
zK4l@mo0Z!M!H)r-1n$RvJg5;|#V(S59{7Rmyx2_0RDdwXm;&~C@nB#d!0$EcZ@{kt
z`=vq?WV57c1XzkOrU&~%!2w`h@bm51_Z!^^tl`af9bLq(^t>3@DeQ%G8oLhqgruf?
bj`4rKg%a~1lQ22N00000NkvXXu0mjfC(<mt

diff --git a/src/extension/firefox/img/icon_png.svg b/src/extension/firefox/img/icon_png.svg
new file mode 100644
index 0000000..7a84d80
--- /dev/null
+++ b/src/extension/firefox/img/icon_png.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32">
+  <!-- Version du logo static (fond noir et icône blanche) pour l'exporter en
+       PNG. Car Chromium ne gère pas les images en SVG pour les WebExtensions.
+       https://issues.chromium.org/issues/41057033 -->
+  <style>
+    svg {
+        color: white;
+    }
+  </style>
+  <rect x="0" y="0" width="32" height="32" fill="black" rx="4" ry="4" />
+  <polygon points="6,14 26,14 16,0" fill="currentColor" />
+  <line
+    x1="16"
+    y1="12"
+    x2="16"
+    y2="26"
+    stroke="currentColor"
+    stroke-width="4"
+  />
+  <polyline
+    points="8,32 8,20 24,20 24,32"
+    fill="none"
+    stroke="currentColor"
+    stroke-width="4"
+    stroke-linejoin="round"
+  />
+</svg>
diff --git a/src/module/audio/README.md b/src/module/audio/README.md
index bff231d..6e09bf0 100644
--- a/src/module/audio/README.md
+++ b/src/module/audio/README.md
@@ -118,10 +118,10 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône qui sera affichée en fond. Il est conseillé que l'image
-        soit carrée et que le dessin occupe toute la zone de l'image. Si le
-        dessin n'est pas carré, il faut le centrer horizontalement et
-        verticalement. Seule la couleur blanche doit être utilisée. Par défaut,
+        L'URL de l'icône qui sera affichée en fond. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur blanche doit être utilisée. Par défaut,
         l'image d'une note de musique est affichée.
       </p>
       <p>
diff --git a/src/module/audio/audio.js b/src/module/audio/audio.js
index a96d321..15de42b 100644
--- a/src/module/audio/audio.js
+++ b/src/module/audio/audio.js
@@ -60,7 +60,7 @@ export default class AudioModule extends HTMLElement {
         a.title = item.title ?? "";
 
         const img = this.shadowRoot.querySelector("img");
-        img.src = item.icon ?? import.meta.resolve("./img/icon.svg");
+        img.src = item.icon ?? import.meta.resolve("./img/icon_fff.svg");
 
         const input = this.shadowRoot.querySelector("input");
         input.dataset.audio = item.audio;
diff --git a/src/module/audio/img/icon.svg b/src/module/audio/img/icon_fff.svg
similarity index 100%
rename from src/module/audio/img/icon.svg
rename to src/module/audio/img/icon_fff.svg
diff --git a/src/module/clock/README.md b/src/module/clock/README.md
index a080712..56b907b 100644
--- a/src/module/clock/README.md
+++ b/src/module/clock/README.md
@@ -105,13 +105,14 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'image qui sera utilisée comme horloge. Il est conseillé que
-        l'image soit carrée et que le dessin occupe toute la zone de l'image. Le
-        document <a href="https://www.w3.org/Graphics/SVG/">SVG</a> doit avoir
-        trois enfants avec les identifiants <code>hour</code>,
-        <code>minute</code> et <code>second</code>. Tous les sous-éléments
-        tourneront avec comme axe le centre de l'image. Par défaut, l'image
-        d'une simple horloge est affichée.
+        L'URL de l'image qui sera utilisée comme horloge. Pour avoir une
+        harmonie avec les autres widgets, il est conseillé d'utiliser une image
+        carrée avec un dessin occupant toute l'image. Le document
+        <a href="https://www.w3.org/Graphics/SVG/">SVG</a> doit avoir trois
+        enfants avec les identifiants <code>hour</code>, <code>minute</code> et
+        <code>second</code>. Tous ces sous-éléments tourneront avec comme axe le
+        centre de l'image. Par défaut, l'image d'une simple horloge est
+        affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
diff --git a/src/module/clock/clock.css b/src/module/clock/clock.css
index 0d00e07..1c8c9cf 100644
--- a/src/module/clock/clock.css
+++ b/src/module/clock/clock.css
@@ -1,5 +1,8 @@
 object {
     display: block;
     padding: 8px;
-    vertical-align: top;
+}
+
+svg {
+    width: 100%;
 }
diff --git a/src/module/clock/clock.js b/src/module/clock/clock.js
index 6c3115d..7e93508 100644
--- a/src/module/clock/clock.js
+++ b/src/module/clock/clock.js
@@ -44,7 +44,7 @@ export default class ClockModule extends HTMLElement {
         }
 
         const response = await fetch(
-            item.icon ?? import.meta.resolve("./img/icon.svg"),
+            item.icon ?? import.meta.resolve("./img/default.svg"),
         );
         const text = await response.text();
         const xml = new DOMParser().parseFromString(text, "image/svg+xml");
diff --git a/src/module/clock/img/icon.svg b/src/module/clock/img/default.svg
similarity index 100%
rename from src/module/clock/img/icon.svg
rename to src/module/clock/img/default.svg
diff --git a/src/module/icon/README.md b/src/module/icon/README.md
index afac8e6..1ad9531 100644
--- a/src/module/icon/README.md
+++ b/src/module/icon/README.md
@@ -105,11 +105,11 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône qui sera affichée en fond. Il est conseillé que l'image
-        soit carrée et que le dessin occupe toute la zone de l'image. Si le
-        dessin n'est pas carré, il faut le centrer horizontalement et
-        verticalement. Seule la couleur blanche doit être utilisée. Par défaut,
-        aucune icône n'est affichée.
+        L'URL de l'icône qui sera affichée en fond. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur blanche doit être utilisée. Par défaut, aucune
+        icône n'est affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
diff --git a/src/module/list/README.md b/src/module/list/README.md
index 1d11984..d71c9ad 100644
--- a/src/module/list/README.md
+++ b/src/module/list/README.md
@@ -72,11 +72,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône qui sera affichée en fond. Il est conseillé que l'image
-        soit carrée et que le dessin occupe toute la zone de l'image. Si le
-        dessin n'est pas carré, il faut le centrer verticalement et l'aligner à
-        droite. Seule la couleur noire doit être utilisée et elle doit avoir une
-        opacité de <code>0.2</code>. Par défaut, aucune icône n'est affichée.
+        L'URL de l'icône qui sera affichée en fond. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur noire doit être utilisée et elle doit avoir
+        une opacité de <code>0.2</code>. Par défaut, aucune icône n'est
+        affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
@@ -167,8 +168,11 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône qui préfixera le titre. Par défaut, aucune icône n'est
-        affichée.
+        L'URL de l'icône qui préfixera le titre. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur blanche doit être utilisée. Par défaut, aucune
+        icône n'est affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
diff --git a/src/module/notepad/README.md b/src/module/notepad/README.md
index 2befb09..bd65e8b 100644
--- a/src/module/notepad/README.md
+++ b/src/module/notepad/README.md
@@ -41,11 +41,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône qui sera affichée en fond. Il est conseillé que l'image
-        soit carrée et que le dessin occupe toute la zone de l'image. Si le
-        dessin n'est pas carré, il faut le centrer verticalement et l'aligner à
-        droite. Seule la couleur noire doit être utilisée et elle doit avoir une
-        opacité de <code>0.2</code>. Par défaut, aucune icône n'est affichée.
+        L'URL de l'icône qui sera affichée en fond. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur noire doit être utilisée et elle doit avoir
+        une opacité de <code>0.2</code>. Par défaut, aucune icône n'est
+        affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
diff --git a/src/module/notepad/img/icon.svg b/src/module/notepad/img/icon_0003.svg
similarity index 96%
rename from src/module/notepad/img/icon.svg
rename to src/module/notepad/img/icon_0003.svg
index ef0fb9a..18ab4f8 100644
--- a/src/module/notepad/img/icon.svg
+++ b/src/module/notepad/img/icon_0003.svg
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" opacity="0.2">
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
   <path
     d="M 78,18 61.28,18 C 59.6,13.36 55.2,10 50,10 44.8,10 40.4,13.36 38.72,18 L 22,18 c -4.4,0 -8,3.6 -8,8 l 0,56 c 0,4.4 3.6,8 8,8 l 56,0 c 4.4,0 8,-3.6 8,-8 l 0,-56 c 0,-4.4 -3.6,-8 -8,-8 z m -28,0 c 2.2,0 4,1.8 4,4 0,2.2 -1.8,4 -4,4 -2.2,0 -4,-1.8 -4,-4 0,-2.2 1.8,-4 4,-4 z m 8,56 -28,0 0,-8 28,0 0,8 z m 12,-16 -40,0 0,-8 40,0 0,8 z m 0,-16 -40,0 0,-8 40,0 0,8 z"
+    opacity="0.2"
   />
 </svg>
diff --git a/src/module/podcast/README.md b/src/module/podcast/README.md
index e30ce3a..9b3dc43 100644
--- a/src/module/podcast/README.md
+++ b/src/module/podcast/README.md
@@ -71,12 +71,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône qui sera affichée en fond. Il est conseillé que l'image
-        soit carrée et que le dessin occupe toute la zone de l'image. Si le
-        dessin n'est pas carré, il faut le centrer verticalement et l'aligner à
-        droite. Seule la couleur noire doit être utilisée et elle doit avoir une
-        opacité de <code>0.2</code>. Par défaut, c'est une icône de lecture qui
-        est affichée.
+        L'URL de l'icône qui sera affichée en fond. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur noire doit être utilisée et elle doit avoir
+        une opacité de <code>0.2</code>. Par défaut, aucune icône n'est
+        affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
@@ -179,8 +179,11 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône qui préfixera le titre. Par défaut, aucune icône n'est
-        affichée.
+        L'URL de l'icône qui préfixera le titre. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur blanche doit être utilisée. Par défaut, une
+        icône de lecture est affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
diff --git a/src/module/podcast/img/icon.svg b/src/module/podcast/img/icon.svg
deleted file mode 100644
index 2bc27e6..0000000
--- a/src/module/podcast/img/icon.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" opacity="0.2">
-  <path
-    d="m 57,60 c -9.133641,0 -16.538461,4.483333 -16.538461,11.111111 0,6.666667 0.882051,13.402222 2.64505,19.363333 1.025386,3.466667 3.116949,7.768889 3.116949,7.768889 C 46.693231,99.21 48.06923,100 49.282052,100 h 15.435896 c 1.212821,0 2.588821,-0.79 3.058513,-1.756667 0,0 2.090462,-4.302222 3.115846,-7.767777 C 72.65641,84.514444 73.538461,77.777778 73.538461,71.111111 73.538461,64.483333 66.133641,60 57,60 Z"
-  />
-  <ellipse cx="57" cy="43.333332" rx="10" ry="10" />
-  <path
-    d="M 57,0 C 33.289359,0 14,19.438889 14,43.333333 c 0,15.524445 8.146846,29.161111 20.354436,36.814445 -0.312026,-2.801111 -0.482923,-5.662222 -0.499462,-8.544445 -8.081795,-6.73 -13.239589,-16.904444 -13.239589,-28.27 0,-20.217777 16.322359,-36.6666663 36.384615,-36.6666663 20.062256,0 36.384615,16.4488893 36.384615,36.6666663 0,11.365556 -5.157795,21.54 -13.239589,28.27 -0.01764,2.882223 -0.187436,5.743334 -0.499463,8.544445 C 91.853154,72.494444 100,58.857778 100,43.333333 100,19.438889 80.710641,0 57,0 Z"
-  />
-  <path
-    d="M 42.510102,56.955556 C 39.198,53.381111 37.153846,48.598889 37.153846,43.333333 c 0,-11.027777 8.903206,-20 19.846154,-20 10.942948,0 19.846153,8.972223 19.846153,20 0,5.265556 -2.044154,10.047778 -5.356255,13.622223 2.013281,1.186666 3.733281,2.63 5.09605,4.291111 C 80.856179,56.51 83.461538,50.222222 83.461538,43.333333 83.461538,28.628889 71.591333,16.666667 57,16.666667 c -14.591333,0 -26.461538,11.962222 -26.461538,26.666666 0,6.888889 2.605358,13.176667 6.87559,17.913334 1.362769,-1.661111 3.082768,-3.104445 5.09605,-4.291111 z"
-  />
-</svg>
diff --git a/src/module/podcast/img/icon_0003.svg b/src/module/podcast/img/icon_0003.svg
new file mode 100644
index 0000000..3edc432
--- /dev/null
+++ b/src/module/podcast/img/icon_0003.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
+  <g opacity="0.2">
+    <path
+      d="m 57,60 c -9.133641,0 -16.538461,4.483333 -16.538461,11.111111 0,6.666667 0.882051,13.402222 2.64505,19.363333 1.025386,3.466667 3.116949,7.768889 3.116949,7.768889 C 46.693231,99.21 48.06923,100 49.282052,100 h 15.435896 c 1.212821,0 2.588821,-0.79 3.058513,-1.756667 0,0 2.090462,-4.302222 3.115846,-7.767777 C 72.65641,84.514444 73.538461,77.777778 73.538461,71.111111 73.538461,64.483333 66.133641,60 57,60 Z"
+    />
+    <ellipse cx="57" cy="43.333332" rx="10" ry="10" />
+    <path
+      d="M 57,0 C 33.289359,0 14,19.438889 14,43.333333 c 0,15.524445 8.146846,29.161111 20.354436,36.814445 -0.312026,-2.801111 -0.482923,-5.662222 -0.499462,-8.544445 -8.081795,-6.73 -13.239589,-16.904444 -13.239589,-28.27 0,-20.217777 16.322359,-36.6666663 36.384615,-36.6666663 20.062256,0 36.384615,16.4488893 36.384615,36.6666663 0,11.365556 -5.157795,21.54 -13.239589,28.27 -0.01764,2.882223 -0.187436,5.743334 -0.499463,8.544445 C 91.853154,72.494444 100,58.857778 100,43.333333 100,19.438889 80.710641,0 57,0 Z"
+    />
+    <path
+      d="M 42.510102,56.955556 C 39.198,53.381111 37.153846,48.598889 37.153846,43.333333 c 0,-11.027777 8.903206,-20 19.846154,-20 10.942948,0 19.846153,8.972223 19.846153,20 0,5.265556 -2.044154,10.047778 -5.356255,13.622223 2.013281,1.186666 3.733281,2.63 5.09605,4.291111 C 80.856179,56.51 83.461538,50.222222 83.461538,43.333333 83.461538,28.628889 71.591333,16.666667 57,16.666667 c -14.591333,0 -26.461538,11.962222 -26.461538,26.666666 0,6.888889 2.605358,13.176667 6.87559,17.913334 1.362769,-1.661111 3.082768,-3.104445 5.09605,-4.291111 z"
+    />
+  </g>
+</svg>
diff --git a/src/module/podcast/img/play.svg b/src/module/podcast/img/play.svg
index 5c6ea86..7197089 100644
--- a/src/module/podcast/img/play.svg
+++ b/src/module/podcast/img/play.svg
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" fill="white">
-  <polygon points="11,0 89,50 11,100" />
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
+  <polygon points="11,0 89,50 11,100" fill="white" />
 </svg>
diff --git a/src/module/podcast/img/volume.svg b/src/module/podcast/img/volume.svg
index 8157041..96d83fd 100644
--- a/src/module/podcast/img/volume.svg
+++ b/src/module/podcast/img/volume.svg
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" fill="white">
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
   <path
     d="M 0,33.238312 V 66.761687 H 22.222222 L 50,94.697833 V 5.302166 L 22.222222,33.238312 Z M 75,50 C 75,40.110604 69.333333,31.618016 61.111111,27.483466 V 72.460661 C 69.333333,68.381984 75,59.889395 75,50 Z M 61.111111,1 V 12.509692 C 77.166667,17.314709 88.888889,32.288483 88.888889,50 c 0,17.711517 -11.722222,32.685291 -27.777778,37.490308 V 99 C 83.388889,93.915621 100,73.913341 100,50 100,26.086659 83.388889,6.084378 61.111111,1 Z"
+    fill="white"
   />
 </svg>
diff --git a/src/module/single/README.md b/src/module/single/README.md
index fe468f9..73baad3 100644
--- a/src/module/single/README.md
+++ b/src/module/single/README.md
@@ -122,8 +122,11 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône affichée dans le cadre. Par défaut, aucune icône n'est
-        affichée.
+        L'URL de l'icône affichée dans le cadre. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur blanche doit être utilisée. Par défaut, aucune
+        icône n'est affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
diff --git a/src/module/text/README.md b/src/module/text/README.md
index d5d24c6..1737d2d 100644
--- a/src/module/text/README.md
+++ b/src/module/text/README.md
@@ -131,7 +131,11 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône affichée dans le cadre. Par défaut, aucune icône n'est
+        L'URL de l'icône qui sera affichée en fond. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur noire doit être utilisée et elle doit avoir
+        une opacité de <code>0.2</code>. Par défaut, aucune icône n'est
         affichée.
       </p>
       <p>
diff --git a/src/module/tools/contrast/img/icon.svg b/src/module/tools/contrast/img/icon.svg
deleted file mode 100644
index ef0fb9a..0000000
--- a/src/module/tools/contrast/img/icon.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" opacity="0.2">
-  <path
-    d="M 78,18 61.28,18 C 59.6,13.36 55.2,10 50,10 44.8,10 40.4,13.36 38.72,18 L 22,18 c -4.4,0 -8,3.6 -8,8 l 0,56 c 0,4.4 3.6,8 8,8 l 56,0 c 4.4,0 8,-3.6 8,-8 l 0,-56 c 0,-4.4 -3.6,-8 -8,-8 z m -28,0 c 2.2,0 4,1.8 4,4 0,2.2 -1.8,4 -4,4 -2.2,0 -4,-1.8 -4,-4 0,-2.2 1.8,-4 4,-4 z m 8,56 -28,0 0,-8 28,0 0,8 z m 12,-16 -40,0 0,-8 40,0 0,8 z m 0,-16 -40,0 0,-8 40,0 0,8 z"
-  />
-</svg>
diff --git a/src/module/tools/findrss/README.md b/src/module/tools/findrss/README.md
index e1b3a71..15f4e06 100644
--- a/src/module/tools/findrss/README.md
+++ b/src/module/tools/findrss/README.md
@@ -36,11 +36,12 @@ suivantes :
     <td><code>string</code></td>
     <td>
       <p>
-        L'URL de l'icône qui sera affichée en fond. Il est conseillé que l'image
-        soit carrée et que le dessin occupe toute la zone de l'image. Si le
-        dessin n'est pas carré, il faut le centrer verticalement et l'aligner à
-        droite. Seule la couleur noire doit être utilisée et elle doit avoir une
-        opacité de <code>0.2</code>. Par défaut, aucune icône n'est affichée.
+        L'URL de l'icône qui sera affichée en fond. Pour avoir une harmonie avec
+        les autres widgets, il est conseillé d'utiliser une image carrée avec un
+        dessin occupant toute l'image. Si le dessin n'est pas carré, il faut le
+        centrer. Seule la couleur noire doit être utilisée et elle doit avoir
+        une opacité de <code>0.2</code>. Par défaut, aucune icône n'est
+        affichée.
       </p>
       <p>
         Exemple : <code>"https://example.com/foo/bar.svg"</code>
diff --git a/src/module/tools/findrss/findrss.js b/src/module/tools/findrss/findrss.js
index 27049a9..e8789dd 100644
--- a/src/module/tools/findrss/findrss.js
+++ b/src/module/tools/findrss/findrss.js
@@ -13,7 +13,7 @@ const extract = async function (url) {
         'link[type="application/rss+xml"][href],' +
         ' link[type="application/atom+xml"][href]';
     return Array.from(doc.querySelectorAll(selector), (link) => ({
-        icon: import.meta.resolve("./img/rss.svg"),
+        icon: "https://cdn.simpleicons.org/rss/fff",
         link: new URL(link.getAttribute("href"), url).href,
         title: link.title,
     }));
diff --git a/src/module/tools/findrss/img/rss.svg b/src/module/tools/findrss/img/rss.svg
deleted file mode 100644
index 6a8942f..0000000
--- a/src/module/tools/findrss/img/rss.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
-  <g fill="white">
-    <path
-      d="M 79.995833,100 C 79.995833,56.1125 43.8875,20 0,20 V 0 C 54.854167,0 100,45.145833 100,100 Z M 13.7125,72.5625 c 7.558333,0 13.720833,6.1625 13.720833,13.729167 C 27.433333,93.845833 21.245833,100 13.679167,100 6.125,100 0,93.858333 0,86.291667 0,78.725 6.1458333,72.566667 13.7125,72.5625 Z M 66.2875,100 H 46.85 C 46.85,74.295833 25.704167,53.145833 0,53.145833 v -19.4375 c 36.3625,0 66.2875,29.933334 66.2875,66.291667 z"
-    />
-  </g>
-</svg>
diff --git a/src/scraper/tools/complements/README.md b/src/scraper/tools/complements/README.md
index c75c15b..e20d800 100644
--- a/src/scraper/tools/complements/README.md
+++ b/src/scraper/tools/complements/README.md
@@ -76,6 +76,6 @@ car ce scraper utilise _tools/complements_.
         options:
           url: "https://www.youtube.com/feeds/videos.xml?user=arte"
           complements:
-            icon: "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/widget/arte/arte_white.svg"
+            icon: "https://cdn.jsdelivr.net/gh/regseb/gout-regseb@0/src/widget/arte/arte_wc.svg"
 </script>
 ```

From f1dce28a5af028e6bd5e92acceb1821b110864d8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Fri, 8 Nov 2024 18:56:38 +0100
Subject: [PATCH 33/38] feat(tools/filter): Ajouter le support des RegExp.

---
 src/scraper/tools/filter/README.md |  30 ++++--
 src/scraper/tools/filter/filter.js | 149 ++++++++++++++++++++++-------
 test/unit/scraper/tools/filter.js  |  50 ++++++++++
 3 files changed, 187 insertions(+), 42 deletions(-)

diff --git a/src/scraper/tools/filter/README.md b/src/scraper/tools/filter/README.md
index 36db789..62ea321 100644
--- a/src/scraper/tools/filter/README.md
+++ b/src/scraper/tools/filter/README.md
@@ -52,15 +52,10 @@ Les filtres sont composés de trois éléments :
 
 - la propriété récupérée dans un élément des résultats ;
 - le type de comparaison :
-  - générique :
+  - chaine de caractères :
     - [`==`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Strict_equality),
-      [`!=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Strict_inequality),
-      [`<`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Less_than),
-      [`<=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Less_than_or_equal),
-      [`>`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Greater_than),
-      [`>=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Greater_than_or_equal)
+      [`!=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Strict_inequality)
       ;
-  - chaine de caractères :
     - `*=` : garder les éléments dont la propriété contient la valeur
       ([`.includes()`](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String/includes)
       sous le capot) ;
@@ -70,9 +65,26 @@ Les filtres sont composés de trois éléments :
     - `$=` : garder les éléments dont la propriété finit par la valeur
       ([`.endsWith()`](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String/endsWith)
       sous le capot) ;
+    - `~=` : garder les éléments dont la propriété contient la valeur entourée
+      par des caractères blancs ;
+  - expression rationnelle :
+    - `==` : utiliser la méthode
+      [`test()`](https://developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/RegExp/test)
+      ;
+    - `!=` : inverser le retour de la méthode `test()` ;
+  - nombre :
+    [`==`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Strict_equality),
+    [`!=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Strict_inequality),
+    [`<`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Less_than),
+    [`<=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Less_than_or_equal),
+    [`>`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Greater_than),
+    [`>=`](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Greater_than_or_equal)
+    ;
 - la valeur comparée :
-  - un nombre : `42` ;
-  - une chaine de caractères (entourée par des apostrophes) : `'foo'`.
+  - une chaine de caractères (entourée par des apostrophes) : `'foo'`, `'BAR'`
+  - une expression rationnelle (sans les marqueurs) : `/fo+/`, `/^bar/`,
+    `/Baz|Qux/`
+  - un nombre : `42`, `3.14`
 
 ## Scrapers
 
diff --git a/src/scraper/tools/filter/filter.js b/src/scraper/tools/filter/filter.js
index 8a97399..66ea4db 100644
--- a/src/scraper/tools/filter/filter.js
+++ b/src/scraper/tools/filter/filter.js
@@ -4,55 +4,127 @@
  * @author Sébastien Règne
  */
 
+// Créer une prothèse pour la méthode `RegExp.escape`.
+// https://github.com/tc39/proposal-regex-escaping
+// https://issues.chromium.org/353856236
+// https://bugzil.la/1918235
+if (undefined === RegExp.escape) {
+    /**
+     * Protège les caractères spéciaux d'une chaine de caractères pour les
+     * expressions rationnelles.
+     *
+     * @param {string} s La chaine de caractères.
+     * @returns {string} La chaine de caractères avec les caractères spéciaux
+     *                   protégés.
+     */
+    RegExp.escape = (s) =>
+        s.replaceAll(/[$\(\)*+.?\[\\\]^\{\|\}]/gv, String.raw`\$&`);
+}
+
 /**
- * Protège les caractères spéciaux d'une chaine de caractères pour les
- * expressions rationnelles.
+ * Les opérations de comparaison avec des chaines de caractères.
  *
- * @param {string} pattern La chaine de caractères.
- * @returns {string} La chaine de caractères avec les caractères spéciaux
- *                   protégés.
- * @see https://developer.mozilla.org/Web/JavaScript/Guide/Regular_expressions
+ * @type {Object<string, Object<string, Function>>}
  */
-const quote = function (pattern) {
-    return pattern.replaceAll(/[$()*+.?[\\\]^{|}]/gu, String.raw`\$&`);
-};
-
-const GENERIC_OP = {
-    "==": (a, b) => a === b,
-    "!=": (a, b) => a !== b,
-    "<": (a, b) => a < b,
-    "<=": (a, b) => a <= b,
-    ">": (a, b) => a > b,
-    ">=": (a, b) => a >= b,
-};
+const STRING_OP = Object.fromEntries(
+    Object.entries({
+        "==": (a, e) => a === e,
+        "!=": (a, e) => a !== e,
+        "*=": (a, e) => "string" === typeof a && a.includes(e),
+        "^=": (a, e) => "string" === typeof a && a.startsWith(e),
+        "$=": (a, e) => "string" === typeof a && a.endsWith(e),
+        "~=": {
+            prepare: (e) =>
+                new RegExp(
+                    String.raw`(?:^|\s)${RegExp.escape(e)}(?:$|\s)`,
+                    "v",
+                ),
+            test: (a, e) => "string" === typeof a && e.test(a),
+        },
+    }).map(([op, value]) => [
+        op,
+        "function" === typeof value
+            ? { prepare: (e) => e, test: value }
+            : { prepare: value.prepare, test: value.test },
+    ]),
+);
 
-const STRING_OP = {
-    ...GENERIC_OP,
-    "*=": (a, b) => "string" === typeof a && a.includes(b),
-    "^=": (a, b) => "string" === typeof a && a.startsWith(b),
-    "$=": (a, b) => "string" === typeof a && a.endsWith(b),
+/**
+ * Les opérations de comparaison avec des expressions rationnelles.
+ *
+ * @type {Object<string, Object<string, Function>>}
+ */
+const REGEX_OP = {
+    "==": {
+        prepare: (e) => new RegExp(e, "v"),
+        test: (a, e) => "string" === typeof a && e.test(a),
+    },
+    "!=": {
+        prepare: (e) => new RegExp(e, "v"),
+        test: (a, e) => !("string" === typeof a && e.test(a)),
+    },
 };
 
-const NUMBER_OP = {
-    ...GENERIC_OP,
-};
+/**
+ * Les opérations de comparaison avec des nombres.
+ *
+ * @type {Object<string, Object<string, Function>>}
+ */
+const NUMBER_OP = Object.fromEntries(
+    Object.entries({
+        "==": (a, e) => a === e,
+        "!=": (a, e) => a !== e,
+        "<": (a, e) => a < e,
+        "<=": (a, e) => a <= e,
+        ">": (a, e) => a > e,
+        ">=": (a, e) => a >= e,
+    }).map(([op, test]) => [op, { prepare: Number, test }]),
+);
 
+/**
+ * Le motif pour les filtres avec des chaines de caractères (entre guillemets
+ * simples).
+ *
+ * @type {RegExp}
+ */
 const STRING_PATTERN = new RegExp(
     String.raw`^\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\s*` +
         "(?<op>(?:" +
-        Object.keys(STRING_OP).map(quote).join("|") +
+        Object.keys(STRING_OP).map(RegExp.escape).join("|") +
         String.raw`))\s*` +
         String.raw`'(?<val>.*)'\s*$`,
-    "u",
+    "v",
 );
 
+/**
+ * Le motif pour les filtres avec des expressions rationnelles (entre barres
+ * obliques, mais sans les marqueurs).
+ *
+ * @type {RegExp}
+ */
+const REGEX_PATTERN = new RegExp(
+    String.raw`^\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\s*` +
+        "(?<op>(?:" +
+        Object.keys(REGEX_OP).map(RegExp.escape).join("|") +
+        String.raw`))\s*` +
+        String.raw`/(?<val>.*)/\s*$`,
+    "v",
+);
+
+/**
+ * Le motif pour les filtres avec des nombres. Les nombres peuvent être entiers
+ * (`123`, `123.`), décimaux (`123.456`, `.456`), positifs (`+123`) ou négatifs
+ * (`-123`).
+ *
+ * @type {RegExp}
+ */
 const NUMBER_PATTERN = new RegExp(
     String.raw`^\s*(?<prop>[a-zA-Z_][a-zA-Z_0-9]*)\s*` +
         "(?<op>(?:" +
-        Object.keys(NUMBER_OP).map(quote).join("|") +
+        Object.keys(NUMBER_OP).map(RegExp.escape).join("|") +
         String.raw`))\s*` +
-        String.raw`(?<val>[0-9]+)\s*$`,
-    "u",
+        String.raw`(?<val>[+\-]?(?:\d+(?:\.\d*)?|\.\d+))\s*$`,
+    "v",
 );
 
 const compile = (filter) => {
@@ -62,12 +134,23 @@ const compile = (filter) => {
     let result = STRING_PATTERN.exec(filter);
     if (null !== result) {
         const { prop, op, val } = result.groups;
-        return (item) => STRING_OP[op](item[prop], val);
+        const prepared = STRING_OP[op].prepare(val);
+        const test = STRING_OP[op].test;
+        return (item) => test(item[prop], prepared);
+    }
+    result = REGEX_PATTERN.exec(filter);
+    if (null !== result) {
+        const { prop, op, val } = result.groups;
+        const prepared = REGEX_OP[op].prepare(val);
+        const test = REGEX_OP[op].test;
+        return (item) => test(item[prop], prepared);
     }
     result = NUMBER_PATTERN.exec(filter);
     if (null !== result) {
         const { prop, op, val } = result.groups;
-        return (item) => NUMBER_OP[op](item[prop], Number(val));
+        const prepared = NUMBER_OP[op].prepare(val);
+        const test = NUMBER_OP[op].test;
+        return (item) => test(item[prop], prepared);
     }
     throw new Error(`Invalid filter: "${filter}"`);
 };
diff --git a/test/unit/scraper/tools/filter.js b/test/unit/scraper/tools/filter.js
index 320acd5..d84277f 100644
--- a/test/unit/scraper/tools/filter.js
+++ b/test/unit/scraper/tools/filter.js
@@ -95,6 +95,56 @@ describe("scraper/tools/filter/filter.js", function () {
             );
         });
 
+        it("should support '~=' with string", async function () {
+            await check(
+                [
+                    { foo: "bar" },
+                    { foo: "42 bar" },
+                    { foo: "bar 42" },
+                    { foo: "42bar42" },
+                    { foo: "baz" },
+                    { foo: 42 },
+                ],
+                "foo ~= 'bar'",
+                [{ foo: "bar" }, { foo: "42 bar" }, { foo: "bar 42" }],
+            );
+        });
+
+        it("should support '==' with regex", async function () {
+            await check(
+                [
+                    { foo: "bar" },
+                    { foo: "42bar" },
+                    { foo: "bar42" },
+                    { foo: "42bar42" },
+                    { foo: "baz42" },
+                    { foo: 42 },
+                ],
+                String.raw`foo == /bar\d+/`,
+                [{ foo: "bar42" }, { foo: "42bar42" }],
+            );
+        });
+
+        it("should support '!=' with regex", async function () {
+            await check(
+                [
+                    { foo: "bar" },
+                    { foo: "42bar" },
+                    { foo: "bar42" },
+                    { foo: "42bar42" },
+                    { foo: "baz42" },
+                    { foo: 42 },
+                ],
+                String.raw`foo != /bar\d+/`,
+                [
+                    { foo: "bar" },
+                    { foo: "42bar" },
+                    { foo: "baz42" },
+                    { foo: 42 },
+                ],
+            );
+        });
+
         it("should support '==' with number", async function () {
             await check([{ foo: 1 }, { foo: 2 }, { foo: "bar" }], "foo == 1", [
                 { foo: 1 },

From 48ae5313d7c65176ac9db1fe61ebfcc85801401f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Fri, 8 Nov 2024 18:58:08 +0100
Subject: [PATCH 34/38] =?UTF-8?q?fix(list/rss):=20R=C3=A9cup=C3=A9rer=20le?=
 =?UTF-8?q?s=20donn=C3=A9es=20dans=20"updated".?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/scraper/list/rss/rss.js | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/scraper/list/rss/rss.js b/src/scraper/list/rss/rss.js
index 0ba8161..371335f 100644
--- a/src/scraper/list/rss/rss.js
+++ b/src/scraper/list/rss/rss.js
@@ -57,7 +57,9 @@ const RSSScraper = class {
             .slice(0, max)
             .map((entry) => ({
                 content: entry.querySelector("content")?.textContent ?? "",
-                date: entry.querySelector("published").textContent,
+                date:
+                    entry.querySelector("published")?.textContent ??
+                    entry.querySelector("updated").textContent,
                 guid: entry.querySelector("id").textContent,
                 link: entry.querySelector("link").getAttribute("href"),
                 summary:
@@ -70,16 +72,16 @@ const RSSScraper = class {
                     entry.querySelector("title").textContent ??
                     // Essayer le titre dans "media:group media:title".
                     entry.querySelector("group title")?.textContent,
-                thumbnail: entry
-                    // Essayer la miniature dans "media:group media:thumbnail".
-                    .querySelector("group thumbnail")
-                    ?.getAttribute("url"),
+                thumbnail:
+                    // Essayer la miniature dans "media:thumbnail" ou
+                    // "media:group media:thumbnail".
+                    entry.querySelector("thumbnail")?.getAttribute("url"),
             }))
             .map((item) => ({
                 date: new Date(item.date).getTime(),
                 desc: new DOMParser()
                     .parseFromString(
-                        /^\s*$/u.test(item.summary)
+                        /^\s*$/v.test(item.summary)
                             ? item.content
                             : item.summary,
                         "text/html",
@@ -103,7 +105,10 @@ const RSSScraper = class {
             case "feed":
                 return this.#extractAtom(xml, max);
             default:
-                throw new Error("Unknown format");
+                throw new Error(
+                    `Unknown format '${xml.documentElement.nodeName}' of ` +
+                        this.#url,
+                );
         }
     }
 };

From 06ea93b0fa202297a88c2859c774aaa1657975af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Fri, 8 Nov 2024 19:01:17 +0100
Subject: [PATCH 35/38] =?UTF-8?q?fix:=20G=C3=A9rer=20les=20diff=C3=A9rents?=
 =?UTF-8?q?=20cas=20pour=20modifier=20les=20ent=C3=AAtes.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/extension/chromium/background/migrate.js  |   4 +-
 src/extension/chromium/background/script.js   | 106 ++++++++++---
 src/extension/chromium/manifest.json          |   4 +-
 .../chromium/popup/img/checkmark.svg          |  18 +++
 src/extension/chromium/popup/img/remove.svg   |   9 --
 src/extension/chromium/popup/index.html       |  45 ++++--
 src/extension/chromium/popup/script.js        | 133 +++++++---------
 src/extension/chromium/popup/style.css        | 146 ++++++++++++------
 src/extension/firefox/background/migrate.js   |   4 +-
 src/extension/firefox/background/script.js    | 106 ++++++++++---
 src/extension/firefox/manifest.json           |   4 +-
 src/extension/firefox/popup/img/checkmark.svg |  18 +++
 src/extension/firefox/popup/img/remove.svg    |   9 --
 src/extension/firefox/popup/index.html        |  45 ++++--
 src/extension/firefox/popup/script.js         | 133 +++++++---------
 src/extension/firefox/popup/style.css         | 146 ++++++++++++------
 16 files changed, 600 insertions(+), 330 deletions(-)
 create mode 100644 src/extension/chromium/popup/img/checkmark.svg
 delete mode 100644 src/extension/chromium/popup/img/remove.svg
 create mode 100644 src/extension/firefox/popup/img/checkmark.svg
 delete mode 100644 src/extension/firefox/popup/img/remove.svg

diff --git a/src/extension/chromium/background/migrate.js b/src/extension/chromium/background/migrate.js
index 912b1c4..e0bedf8 100644
--- a/src/extension/chromium/background/migrate.js
+++ b/src/extension/chromium/background/migrate.js
@@ -16,12 +16,12 @@ export default async function migrate() {
     if ("version" in current) {
         await browser.storage.sync.set({
             version: current.version,
-            dashboards: current.dashboards,
+            urls: current.urls,
         });
     } else {
         await browser.storage.sync.set({
             version: 1,
-            dashboards: [],
+            urls: [],
         });
     }
 }
diff --git a/src/extension/chromium/background/script.js b/src/extension/chromium/background/script.js
index 6c1e222..5564b58 100644
--- a/src/extension/chromium/background/script.js
+++ b/src/extension/chromium/background/script.js
@@ -7,14 +7,19 @@
 import "../polyfill/browser.js";
 import migrate from "./migrate.js";
 
-const handleBeforeNavigate = async (details) => {
-    // Récupérer les identifiants des onglets déjà impactés par l'extension.
-    const rules = await browser.declarativeNetRequest.getSessionRules();
-    const tabIds = [
-        ...rules.flatMap((r) => r.condition.tabIds),
-        // Ajouter le nouvel onglet.
-        details.tabId,
-    ];
+/**
+ * Met à jour la règle de modification des entêtes HTTP.
+ *
+ * @param {number[]} tabIds Les identifiants des onglets impactés.
+ */
+const updateRule = async (tabIds) => {
+    await browser.declarativeNetRequest.updateSessionRules({
+        removeRuleIds: [1],
+    });
+
+    if (0 === tabIds.length) {
+        return;
+    }
 
     // Ajouter la règle de modification des entêtes HTTP pour tous les onglets
     // affichant un dashboard.
@@ -26,7 +31,9 @@ const handleBeforeNavigate = async (details) => {
                     responseHeaders: [
                         {
                             header: "Access-Control-Allow-Methods",
-                            value: "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS",
+                            value:
+                                "GET, HEAD, POST, PUT, PATCH, DELETE," +
+                                " OPTIONS",
                             operation: "set",
                         },
                         {
@@ -59,22 +66,81 @@ const handleBeforeNavigate = async (details) => {
                 id: 1,
             },
         ],
-        removeRuleIds: [1],
     });
 };
 
-browser.storage.onChanged.addListener(async () => {
-    const { dashboards } = await browser.storage.sync.get("dashboards");
-    if (undefined === dashboards) {
+/**
+ * Ajoute un onglet dans la liste des onglets impactés.
+ *
+ * @param {Object} details       Les détails de l'onglet à ajouter.
+ * @param {number} details.tabId L'identifiant de l'onglet.
+ */
+const addWatchedTabs = async ({ tabId }) => {
+    // Récupérer les identifiants des onglets déjà impactés par l'extension.
+    const rules = await browser.declarativeNetRequest.getSessionRules();
+    const tabIds = rules.flatMap((r) => r.condition.tabIds);
+    if (!tabIds.includes(tabId)) {
+        // Ajouter le nouvel onglet.
+        await updateRule([...tabIds, tabId]);
+    }
+};
+
+/**
+ * Supprime un onglet des onglets impactés (si celui-ci est impactés).
+ *
+ * @param {Object} details              Les détails de l'onglet à enlever.
+ * @param {number} details.tabId        L'identifiant de l'onglet.
+ * @param {Object} [details.changeInfo] Les éventuelles informations sur les
+ *                                      changements de l'onglet.
+ */
+const removeWatchedTabs = async ({ tabId, changeInfo }) => {
+    const config = await browser.storage.sync.get("urls");
+    const urls = config.urls ?? [];
+
+    // Si on n'a pas d'informations sur le changement : c'est que l'onglet a été
+    // fermé.
+    if (!urls.includes(changeInfo?.url)) {
+        // Récupérer les identifiants des onglets déjà impactés par l'extension.
+        const rules = await browser.declarativeNetRequest.getSessionRules();
+        const tabIds = rules.flatMap((r) => r.condition.tabIds);
+        if (tabIds.includes(tabId)) {
+            await updateRule(tabIds.filter((i) => tabId !== i));
+        }
+    }
+};
+
+/**
+ * Mets à jour les URLs surveillées.
+ */
+const updateWatchedUrls = async () => {
+    browser.webNavigation.onBeforeNavigate.removeListener(addWatchedTabs);
+    browser.tabs.onUpdated.removeListener(removeWatchedTabs);
+
+    const config = await browser.storage.sync.get("urls");
+    const urls = config.urls ?? [];
+
+    // Mettre à jour la liste des onglets impactés avec les onglets déjà
+    // ouverts.
+    const tabs = await browser.tabs.query({ url: urls });
+    await updateRule(tabs.map((t) => t.id));
+
+    if (0 === urls.length) {
         return;
     }
 
-    browser.webNavigation.onBeforeNavigate.removeListener(handleBeforeNavigate);
-    browser.webNavigation.onBeforeNavigate.addListener(handleBeforeNavigate, {
-        url: dashboards.map((d) => ({ urlEquals: d.url })),
+    // Surveiller quand un onglet arrive sur une URL d'un dashboards.
+    browser.webNavigation.onBeforeNavigate.addListener(addWatchedTabs, {
+        url: urls.map((u) => ({ urlEquals: u })),
+    });
+
+    // Surveiller quand un onglet d'un dashboard change d'URL.
+    browser.tabs.onUpdated.addListener(removeWatchedTabs, {
+        urls,
+        properties: ["url"],
     });
-});
+};
 
-browser.runtime.onInstalled.addListener(async () => {
-    await migrate();
-});
+browser.storage.onChanged.addListener(updateWatchedUrls);
+browser.runtime.onInstalled.addListener(migrate);
+browser.runtime.onStartup.addListener(updateWatchedUrls);
+browser.tabs.onRemoved.addListener(removeWatchedTabs);
diff --git a/src/extension/chromium/manifest.json b/src/extension/chromium/manifest.json
index cfc8b6b..eae1e81 100644
--- a/src/extension/chromium/manifest.json
+++ b/src/extension/chromium/manifest.json
@@ -2,7 +2,7 @@
   "browser_specific_settings": {
     "gecko": {
       "id": "gout@regseb.github.io",
-      "strict_min_version": "129.0"
+      "strict_min_version": "132.0"
     }
   },
   "manifest_version": 3,
@@ -33,7 +33,7 @@
   },
   "homepage_url": "https://github.com/regseb/gout",
   "host_permissions": ["<all_urls>"],
-  "minimum_chrome_version": "127",
+  "minimum_chrome_version": "130",
   "permissions": [
     "activeTab",
     "storage",
diff --git a/src/extension/chromium/popup/img/checkmark.svg b/src/extension/chromium/popup/img/checkmark.svg
new file mode 100644
index 0000000..03a642c
--- /dev/null
+++ b/src/extension/chromium/popup/img/checkmark.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
+  <style>
+    svg {
+        color: #15141a;
+    }
+    @media (prefers-color-scheme: dark) {
+        svg {
+            color: white;
+        }
+    }
+  </style>
+  <polyline
+    points="14.939,3.54 6.23,12.25 1.06,7.081"
+    fill="none"
+    stroke="currentColor"
+  />
+</svg>
diff --git a/src/extension/chromium/popup/img/remove.svg b/src/extension/chromium/popup/img/remove.svg
deleted file mode 100644
index a11d462..0000000
--- a/src/extension/chromium/popup/img/remove.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
-  <path
-    d="M6.5 12a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5zm2 0a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5zm2 0a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5z"
-  />
-  <path
-    d="M14 2h-3.05a2.5 2.5 0 0 0-4.9 0H3a1 1 0 0 0 0 2v9a3 3 0 0 0 3 3h5a3 3 0 0 0 3-3V4a1 1 0 0 0 0-2zM8.5 1a1.489 1.489 0 0 1 1.391 1H7.109A1.489 1.489 0 0 1 8.5 1zM12 13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4h7z"
-  />
-</svg>
diff --git a/src/extension/chromium/popup/index.html b/src/extension/chromium/popup/index.html
index 781ff63..7248419 100644
--- a/src/extension/chromium/popup/index.html
+++ b/src/extension/chromium/popup/index.html
@@ -8,20 +8,41 @@
     <link href="/img/icon.svg" rel="shortcut icon" />
   </head>
   <body>
-    <template>
-      <li>
-        <span></span>
-        <button class="icon" title="Enlever">
-          <img src="img/remove.svg" alt="remove" />
-        </button>
-      </li>
-    </template>
+    <header>
+      <h1>Gout</h1>
+    </header>
 
-    <div>
-      <button class="outlined" id="set" disabled="disabled">Ajouter</button>
-    </div>
+    <main id="ok">
+      <p>Activer / désactiver l'extension Gout pour la page&nbsp;:</p>
+      <p>
+        <a rel="noopener noreferrer"><code></code></a>
+      </p>
+      <form>
+        <label class="switch">
+          <input type="checkbox" />
+          <span>Inactif</span>
+          <span>Actif</span>
+        </label>
+      </form>
+      <p class="detail">
+        Quand Gout est actif, les widgets de la page peuvent récupérer des
+        données externes. Pour plus d'informations, consultez la
+        <a href="https://github.com/regseb/gout" rel="noopener noreferrer"
+          >documentation</a
+        >.
+      </p>
+    </main>
 
-    <ul></ul>
+    <main id="forbidden">
+      <p>Impossible d'activer l'extension Gout pour la page&nbsp;:</p>
+      <p>
+        <a rel="noopener noreferrer"><code></code></a>
+      </p>
+      <p>
+        Seules les pages <code>https</code>, <code>http</code>,
+        <code>file</code> et <code>data</code> sont supportées.
+      </p>
+    </main>
 
     <script src="script.js" type="module"></script>
   </body>
diff --git a/src/extension/chromium/popup/script.js b/src/extension/chromium/popup/script.js
index ab75c43..6132df9 100644
--- a/src/extension/chromium/popup/script.js
+++ b/src/extension/chromium/popup/script.js
@@ -6,102 +6,83 @@
 
 import "../polyfill/browser.js";
 
-const check = function (href) {
+/**
+ * Vérifie si une URL est supporté par l'extension.
+ *
+ * @param {string} href L'URL à vérifier.
+ * @returns {boolean} `true` si l'URL est supporté, sinon `false`.
+ */
+const check = (href) => {
     try {
         const url = new URL(href);
-        return ["http:", "https:", "data:", "file:"].includes(url.protocol);
+        return ["https:", "http:", "file:", "data:"].includes(url.protocol);
     } catch {
         // Indiquer que l'URL est invalide.
         return false;
     }
 };
 
-const copy = async function (event) {
-    const li = event.target.closest("li");
-    const url = li.querySelector("span").title;
-
-    await navigator.clipboard.writeText(url);
-};
-
-const remove = async function (event) {
-    const li = event.target.closest("li");
-    const url = li.querySelector("span").title;
-
-    const { dashboards } = await browser.storage.sync.get("dashboards");
-    dashboards.splice(
-        dashboards.findIndex((d) => url === d.url),
-        1,
-    );
-    await browser.storage.sync.set({ dashboards });
-
-    li.remove();
-    const button = document.querySelector("#set");
-    if (url === button.dataset.url) {
-        button.textContent = "Ajouter";
-    }
-};
-
-const create = function (dashboard, active) {
-    const template = document.querySelector("template");
-    const clone = document.importNode(template.content, true);
-
-    clone.querySelector("span").textContent = dashboard.title;
-    clone.querySelector("span").title = dashboard.url;
-    if (active) {
-        clone.querySelector("span").classList.add("active");
+/**
+ * Ajoute ou enlève une URL de la liste des URLs actives.
+ */
+const change = async () => {
+    const [{ url }] = await browser.tabs.query({
+        active: true,
+        currentWindow: true,
+    });
+    const config = await browser.storage.sync.get("urls");
+    const urls = new Set(config.urls);
+
+    if (document.querySelector("#ok input").checked) {
+        urls.add(url);
+    } else {
+        urls.delete(url);
     }
-    clone.querySelector("span").addEventListener("dblclick", copy);
-    clone.querySelector("button").addEventListener("click", remove);
 
-    return clone;
+    await browser.storage.sync.set({ urls: Array.from(urls) });
+    await browser.tabs.reload();
 };
 
-const set = async function () {
-    const button = document.querySelector("#set");
-    const dashboard = {
-        title: button.dataset.title,
-        url: button.dataset.url,
-    };
-
-    const { dashboards } = await browser.storage.sync.get("dashboards");
-    const index = dashboards.findIndex((d) => dashboard.url === d.url);
-    if (-1 === index) {
-        dashboards.push(dashboard);
-        document.querySelector("ul").append(create(dashboard, true));
-    } else {
-        dashboards[index] = dashboard;
-        document.querySelector(`ul li:nth-child(${index}) span`).textContent =
-            dashboard.title;
+/**
+ * Ouvre un lien.
+ *
+ * @param {Event} event L'événement du clic sur le lien.
+ */
+const open = async (event) => {
+    const [{ url }] = await browser.tabs.query({
+        active: true,
+        currentWindow: true,
+    });
+    const a = event.target.closest("a");
+
+    if (url !== a.href) {
+        await browser.tabs.create({ url: a.href });
     }
-    await browser.storage.sync.set({ dashboards });
-
-    button.textContent = "Mettre à jour";
+    close();
 };
 
-const { dashboards } = await browser.storage.sync.get("dashboards");
-// Récupérer le titre et l'URL de l'onglet courant.
+// Récupérer l'URL de l'onglet courant.
 // Attention avec Chromium ! Quand la popup est ouverte dans un onglet : la
-// méthode retourne un élément, mais sans titre, ni URL.
-const [{ title, url }] = await browser.tabs.query({
+// méthode retourne un élément, mais sans URL.
+const [{ url }] = await browser.tabs.query({
     active: true,
     currentWindow: true,
 });
-
-const button = document.querySelector("#set");
 if (check(url)) {
-    if (dashboards.some((d) => url === d.url)) {
-        button.textContent = "Mettre à jour";
-    }
-
-    button.dataset.title = title;
-    button.dataset.url = url;
-    button.addEventListener("click", set);
-    button.disabled = false;
+    const config = await browser.storage.sync.get("urls");
+    const urls = new Set(config.urls);
+
+    document.querySelector("#ok a:has(code)").href = url;
+    document.querySelector("#ok code").textContent = url;
+    document.querySelector("#ok input").checked = urls.has(url);
+    document.querySelector("#ok input").addEventListener("change", change);
+    document.querySelector("#ok").classList.add("visible");
 } else {
-    button.textContent = "(Impossible pour cette page)";
+    document.querySelector("#forbidden a:has(code)").href = url;
+    document.querySelector("#forbidden code").textContent = url;
+    document.querySelector("#forbidden").classList.add("visible");
 }
 
-const ul = document.querySelector("ul");
-for (const dashboard of dashboards) {
-    ul.append(create(dashboard, url === dashboard.url));
-}
+document
+    .querySelectorAll("a")
+    .forEach((a) => a.addEventListener("click", open));
diff --git a/src/extension/chromium/popup/style.css b/src/extension/chromium/popup/style.css
index 65164af..bae136c 100644
--- a/src/extension/chromium/popup/style.css
+++ b/src/extension/chromium/popup/style.css
@@ -1,67 +1,125 @@
+:root {
+    --background-color: white;
+    --inactive-color: #bbbbc4;
+    --inactive-color-hover: #8f8f9d;
+    --color: #15141a;
+    --accent-color: #0060df;
+    --accent-color-hover: #0250bb;
+    --line-color: #5e5e5e;
+}
+@media (prefers-color-scheme: dark) {
+    :root {
+        --background-color: #272727;
+        --inactive-color: #484854;
+        --inactive-color-hover: #5c5c6a;
+        --color: white;
+        --accent-color: #00ddff;
+        --accent-color-hover: #80ebff;
+        --line-color: #5e5e5e;
+    }
+}
+
 body {
-    font-family: system-ui;
+    background-color: var(--background-color);
+    color: var(--color);
+    font-family: sans-serif;
     font-size: 14px;
-    min-width: 200px;
 }
 
-button.icon {
-    background: transparent;
-    border: none;
-    border-radius: 4px;
-    height: 34px;
-    width: 34px;
+a,
+a:visited {
+    color: var(--accent-color);
 }
-button.icon:hover {
-    background-color: rgba(0 0 0 / 6%);
+a:hover {
+    color: var(--accent-color-hover);
 }
 
-button.outlined {
-    background: transparent;
-    border: 1px solid rgba(0 0 0 / 12%);
-    border-radius: 4px;
-    color: rgba(0 0 0 / 87%);
-    line-height: 34px;
-    padding: 0 15px;
+header {
+    border-bottom: 1px solid var(--line-color);
     text-align: center;
-    text-transform: uppercase;
 }
-button.outlined::-moz-focus-inner {
-    border: none;
+h1 {
+    font-size: 14px;
 }
-button.outlined:hover {
-    background-color: rgba(0 0 0 / 6%);
+
+main {
+    display: none;
+    margin: 0 8px;
+    width: 340px;
+}
+main.visible {
+    display: block;
 }
 
-ul {
-    list-style-type: none;
-    margin-bottom: 0;
-    margin-top: 0;
-    padding-left: 0;
+form {
+    display: flex;
+    justify-content: center;
+    margin: 28px;
 }
-li {
+
+label.switch {
     align-items: center;
+    background-color: var(--inactive-color);
+    border-radius: 64px;
+    color: var(--color);
     display: flex;
-    height: 34px;
+    font-size: 22px;
+    font-weight: 600;
+    height: 64px;
+    position: relative;
+    transition: 0.4s;
+    width: 164px;
+}
+
+label.switch input {
+    display: none;
 }
-span {
-    flex-grow: 1;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    /* Ne pas sélectionner un mot durant un double-clic (pour copier l'URL dans
-       le presse-papier). */
-    user-select: none;
-    white-space: nowrap;
+
+label.switch::before {
+    background: url("./img/checkmark.svg") center / 50% no-repeat var(--color);
+    border-radius: 50%;
+    bottom: 8px;
+    content: "";
+    height: 48px;
+    left: 8px;
+    position: absolute;
+    transition: 0.4s;
+    width: 48px;
 }
-span.active {
-    font-weight: bold;
+
+label.switch:has(input:checked) {
+    background-color: var(--accent-color);
+    color: var(--background-color);
 }
-li button {
-    display: none;
+label.switch:has(input:hover) {
+    background-color: var(--inactive-color-hover);
 }
-li:hover button {
-    display: block;
+label.switch:has(input:checked:hover) {
+    background-color: var(--accent-color-hover);
+}
+label.switch:has(input:checked)::before {
+    background-color: var(--background-color);
+    transform: translateX(98px);
 }
 
-#set {
+label.switch input ~ span {
+    box-sizing: border-box;
+    padding: 0 25px;
+    position: absolute;
+    transition: 0.4s;
     width: 100%;
 }
+label.switch input ~ span:first-of-type {
+    text-align: right;
+}
+label.switch input ~ span:last-of-type {
+    text-align: left;
+}
+label.switch input ~ span:last-of-type,
+label.switch input:checked ~ span:first-of-type {
+    opacity: 0%;
+}
+label.switch input ~ span:first-of-type,
+label.switch input:checked ~ span:last-of-type {
+    opacity: 100%;
+}
diff --git a/src/extension/firefox/background/migrate.js b/src/extension/firefox/background/migrate.js
index 912b1c4..e0bedf8 100644
--- a/src/extension/firefox/background/migrate.js
+++ b/src/extension/firefox/background/migrate.js
@@ -16,12 +16,12 @@ export default async function migrate() {
     if ("version" in current) {
         await browser.storage.sync.set({
             version: current.version,
-            dashboards: current.dashboards,
+            urls: current.urls,
         });
     } else {
         await browser.storage.sync.set({
             version: 1,
-            dashboards: [],
+            urls: [],
         });
     }
 }
diff --git a/src/extension/firefox/background/script.js b/src/extension/firefox/background/script.js
index 6c1e222..5564b58 100644
--- a/src/extension/firefox/background/script.js
+++ b/src/extension/firefox/background/script.js
@@ -7,14 +7,19 @@
 import "../polyfill/browser.js";
 import migrate from "./migrate.js";
 
-const handleBeforeNavigate = async (details) => {
-    // Récupérer les identifiants des onglets déjà impactés par l'extension.
-    const rules = await browser.declarativeNetRequest.getSessionRules();
-    const tabIds = [
-        ...rules.flatMap((r) => r.condition.tabIds),
-        // Ajouter le nouvel onglet.
-        details.tabId,
-    ];
+/**
+ * Met à jour la règle de modification des entêtes HTTP.
+ *
+ * @param {number[]} tabIds Les identifiants des onglets impactés.
+ */
+const updateRule = async (tabIds) => {
+    await browser.declarativeNetRequest.updateSessionRules({
+        removeRuleIds: [1],
+    });
+
+    if (0 === tabIds.length) {
+        return;
+    }
 
     // Ajouter la règle de modification des entêtes HTTP pour tous les onglets
     // affichant un dashboard.
@@ -26,7 +31,9 @@ const handleBeforeNavigate = async (details) => {
                     responseHeaders: [
                         {
                             header: "Access-Control-Allow-Methods",
-                            value: "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS",
+                            value:
+                                "GET, HEAD, POST, PUT, PATCH, DELETE," +
+                                " OPTIONS",
                             operation: "set",
                         },
                         {
@@ -59,22 +66,81 @@ const handleBeforeNavigate = async (details) => {
                 id: 1,
             },
         ],
-        removeRuleIds: [1],
     });
 };
 
-browser.storage.onChanged.addListener(async () => {
-    const { dashboards } = await browser.storage.sync.get("dashboards");
-    if (undefined === dashboards) {
+/**
+ * Ajoute un onglet dans la liste des onglets impactés.
+ *
+ * @param {Object} details       Les détails de l'onglet à ajouter.
+ * @param {number} details.tabId L'identifiant de l'onglet.
+ */
+const addWatchedTabs = async ({ tabId }) => {
+    // Récupérer les identifiants des onglets déjà impactés par l'extension.
+    const rules = await browser.declarativeNetRequest.getSessionRules();
+    const tabIds = rules.flatMap((r) => r.condition.tabIds);
+    if (!tabIds.includes(tabId)) {
+        // Ajouter le nouvel onglet.
+        await updateRule([...tabIds, tabId]);
+    }
+};
+
+/**
+ * Supprime un onglet des onglets impactés (si celui-ci est impactés).
+ *
+ * @param {Object} details              Les détails de l'onglet à enlever.
+ * @param {number} details.tabId        L'identifiant de l'onglet.
+ * @param {Object} [details.changeInfo] Les éventuelles informations sur les
+ *                                      changements de l'onglet.
+ */
+const removeWatchedTabs = async ({ tabId, changeInfo }) => {
+    const config = await browser.storage.sync.get("urls");
+    const urls = config.urls ?? [];
+
+    // Si on n'a pas d'informations sur le changement : c'est que l'onglet a été
+    // fermé.
+    if (!urls.includes(changeInfo?.url)) {
+        // Récupérer les identifiants des onglets déjà impactés par l'extension.
+        const rules = await browser.declarativeNetRequest.getSessionRules();
+        const tabIds = rules.flatMap((r) => r.condition.tabIds);
+        if (tabIds.includes(tabId)) {
+            await updateRule(tabIds.filter((i) => tabId !== i));
+        }
+    }
+};
+
+/**
+ * Mets à jour les URLs surveillées.
+ */
+const updateWatchedUrls = async () => {
+    browser.webNavigation.onBeforeNavigate.removeListener(addWatchedTabs);
+    browser.tabs.onUpdated.removeListener(removeWatchedTabs);
+
+    const config = await browser.storage.sync.get("urls");
+    const urls = config.urls ?? [];
+
+    // Mettre à jour la liste des onglets impactés avec les onglets déjà
+    // ouverts.
+    const tabs = await browser.tabs.query({ url: urls });
+    await updateRule(tabs.map((t) => t.id));
+
+    if (0 === urls.length) {
         return;
     }
 
-    browser.webNavigation.onBeforeNavigate.removeListener(handleBeforeNavigate);
-    browser.webNavigation.onBeforeNavigate.addListener(handleBeforeNavigate, {
-        url: dashboards.map((d) => ({ urlEquals: d.url })),
+    // Surveiller quand un onglet arrive sur une URL d'un dashboards.
+    browser.webNavigation.onBeforeNavigate.addListener(addWatchedTabs, {
+        url: urls.map((u) => ({ urlEquals: u })),
+    });
+
+    // Surveiller quand un onglet d'un dashboard change d'URL.
+    browser.tabs.onUpdated.addListener(removeWatchedTabs, {
+        urls,
+        properties: ["url"],
     });
-});
+};
 
-browser.runtime.onInstalled.addListener(async () => {
-    await migrate();
-});
+browser.storage.onChanged.addListener(updateWatchedUrls);
+browser.runtime.onInstalled.addListener(migrate);
+browser.runtime.onStartup.addListener(updateWatchedUrls);
+browser.tabs.onRemoved.addListener(removeWatchedTabs);
diff --git a/src/extension/firefox/manifest.json b/src/extension/firefox/manifest.json
index 1b43cdf..61001fd 100644
--- a/src/extension/firefox/manifest.json
+++ b/src/extension/firefox/manifest.json
@@ -2,7 +2,7 @@
   "browser_specific_settings": {
     "gecko": {
       "id": "gout@regseb.github.io",
-      "strict_min_version": "129.0"
+      "strict_min_version": "132.0"
     }
   },
   "manifest_version": 2,
@@ -32,7 +32,7 @@
     "type": "module"
   },
   "homepage_url": "https://github.com/regseb/gout",
-  "minimum_chrome_version": "127",
+  "minimum_chrome_version": "130",
   "permissions": [
     "<all_urls>",
     "activeTab",
diff --git a/src/extension/firefox/popup/img/checkmark.svg b/src/extension/firefox/popup/img/checkmark.svg
new file mode 100644
index 0000000..03a642c
--- /dev/null
+++ b/src/extension/firefox/popup/img/checkmark.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
+  <style>
+    svg {
+        color: #15141a;
+    }
+    @media (prefers-color-scheme: dark) {
+        svg {
+            color: white;
+        }
+    }
+  </style>
+  <polyline
+    points="14.939,3.54 6.23,12.25 1.06,7.081"
+    fill="none"
+    stroke="currentColor"
+  />
+</svg>
diff --git a/src/extension/firefox/popup/img/remove.svg b/src/extension/firefox/popup/img/remove.svg
deleted file mode 100644
index a11d462..0000000
--- a/src/extension/firefox/popup/img/remove.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
-  <path
-    d="M6.5 12a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5zm2 0a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5zm2 0a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 0 .5.5z"
-  />
-  <path
-    d="M14 2h-3.05a2.5 2.5 0 0 0-4.9 0H3a1 1 0 0 0 0 2v9a3 3 0 0 0 3 3h5a3 3 0 0 0 3-3V4a1 1 0 0 0 0-2zM8.5 1a1.489 1.489 0 0 1 1.391 1H7.109A1.489 1.489 0 0 1 8.5 1zM12 13a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4h7z"
-  />
-</svg>
diff --git a/src/extension/firefox/popup/index.html b/src/extension/firefox/popup/index.html
index 781ff63..7248419 100644
--- a/src/extension/firefox/popup/index.html
+++ b/src/extension/firefox/popup/index.html
@@ -8,20 +8,41 @@
     <link href="/img/icon.svg" rel="shortcut icon" />
   </head>
   <body>
-    <template>
-      <li>
-        <span></span>
-        <button class="icon" title="Enlever">
-          <img src="img/remove.svg" alt="remove" />
-        </button>
-      </li>
-    </template>
+    <header>
+      <h1>Gout</h1>
+    </header>
 
-    <div>
-      <button class="outlined" id="set" disabled="disabled">Ajouter</button>
-    </div>
+    <main id="ok">
+      <p>Activer / désactiver l'extension Gout pour la page&nbsp;:</p>
+      <p>
+        <a rel="noopener noreferrer"><code></code></a>
+      </p>
+      <form>
+        <label class="switch">
+          <input type="checkbox" />
+          <span>Inactif</span>
+          <span>Actif</span>
+        </label>
+      </form>
+      <p class="detail">
+        Quand Gout est actif, les widgets de la page peuvent récupérer des
+        données externes. Pour plus d'informations, consultez la
+        <a href="https://github.com/regseb/gout" rel="noopener noreferrer"
+          >documentation</a
+        >.
+      </p>
+    </main>
 
-    <ul></ul>
+    <main id="forbidden">
+      <p>Impossible d'activer l'extension Gout pour la page&nbsp;:</p>
+      <p>
+        <a rel="noopener noreferrer"><code></code></a>
+      </p>
+      <p>
+        Seules les pages <code>https</code>, <code>http</code>,
+        <code>file</code> et <code>data</code> sont supportées.
+      </p>
+    </main>
 
     <script src="script.js" type="module"></script>
   </body>
diff --git a/src/extension/firefox/popup/script.js b/src/extension/firefox/popup/script.js
index ab75c43..6132df9 100644
--- a/src/extension/firefox/popup/script.js
+++ b/src/extension/firefox/popup/script.js
@@ -6,102 +6,83 @@
 
 import "../polyfill/browser.js";
 
-const check = function (href) {
+/**
+ * Vérifie si une URL est supporté par l'extension.
+ *
+ * @param {string} href L'URL à vérifier.
+ * @returns {boolean} `true` si l'URL est supporté, sinon `false`.
+ */
+const check = (href) => {
     try {
         const url = new URL(href);
-        return ["http:", "https:", "data:", "file:"].includes(url.protocol);
+        return ["https:", "http:", "file:", "data:"].includes(url.protocol);
     } catch {
         // Indiquer que l'URL est invalide.
         return false;
     }
 };
 
-const copy = async function (event) {
-    const li = event.target.closest("li");
-    const url = li.querySelector("span").title;
-
-    await navigator.clipboard.writeText(url);
-};
-
-const remove = async function (event) {
-    const li = event.target.closest("li");
-    const url = li.querySelector("span").title;
-
-    const { dashboards } = await browser.storage.sync.get("dashboards");
-    dashboards.splice(
-        dashboards.findIndex((d) => url === d.url),
-        1,
-    );
-    await browser.storage.sync.set({ dashboards });
-
-    li.remove();
-    const button = document.querySelector("#set");
-    if (url === button.dataset.url) {
-        button.textContent = "Ajouter";
-    }
-};
-
-const create = function (dashboard, active) {
-    const template = document.querySelector("template");
-    const clone = document.importNode(template.content, true);
-
-    clone.querySelector("span").textContent = dashboard.title;
-    clone.querySelector("span").title = dashboard.url;
-    if (active) {
-        clone.querySelector("span").classList.add("active");
+/**
+ * Ajoute ou enlève une URL de la liste des URLs actives.
+ */
+const change = async () => {
+    const [{ url }] = await browser.tabs.query({
+        active: true,
+        currentWindow: true,
+    });
+    const config = await browser.storage.sync.get("urls");
+    const urls = new Set(config.urls);
+
+    if (document.querySelector("#ok input").checked) {
+        urls.add(url);
+    } else {
+        urls.delete(url);
     }
-    clone.querySelector("span").addEventListener("dblclick", copy);
-    clone.querySelector("button").addEventListener("click", remove);
 
-    return clone;
+    await browser.storage.sync.set({ urls: Array.from(urls) });
+    await browser.tabs.reload();
 };
 
-const set = async function () {
-    const button = document.querySelector("#set");
-    const dashboard = {
-        title: button.dataset.title,
-        url: button.dataset.url,
-    };
-
-    const { dashboards } = await browser.storage.sync.get("dashboards");
-    const index = dashboards.findIndex((d) => dashboard.url === d.url);
-    if (-1 === index) {
-        dashboards.push(dashboard);
-        document.querySelector("ul").append(create(dashboard, true));
-    } else {
-        dashboards[index] = dashboard;
-        document.querySelector(`ul li:nth-child(${index}) span`).textContent =
-            dashboard.title;
+/**
+ * Ouvre un lien.
+ *
+ * @param {Event} event L'événement du clic sur le lien.
+ */
+const open = async (event) => {
+    const [{ url }] = await browser.tabs.query({
+        active: true,
+        currentWindow: true,
+    });
+    const a = event.target.closest("a");
+
+    if (url !== a.href) {
+        await browser.tabs.create({ url: a.href });
     }
-    await browser.storage.sync.set({ dashboards });
-
-    button.textContent = "Mettre à jour";
+    close();
 };
 
-const { dashboards } = await browser.storage.sync.get("dashboards");
-// Récupérer le titre et l'URL de l'onglet courant.
+// Récupérer l'URL de l'onglet courant.
 // Attention avec Chromium ! Quand la popup est ouverte dans un onglet : la
-// méthode retourne un élément, mais sans titre, ni URL.
-const [{ title, url }] = await browser.tabs.query({
+// méthode retourne un élément, mais sans URL.
+const [{ url }] = await browser.tabs.query({
     active: true,
     currentWindow: true,
 });
-
-const button = document.querySelector("#set");
 if (check(url)) {
-    if (dashboards.some((d) => url === d.url)) {
-        button.textContent = "Mettre à jour";
-    }
-
-    button.dataset.title = title;
-    button.dataset.url = url;
-    button.addEventListener("click", set);
-    button.disabled = false;
+    const config = await browser.storage.sync.get("urls");
+    const urls = new Set(config.urls);
+
+    document.querySelector("#ok a:has(code)").href = url;
+    document.querySelector("#ok code").textContent = url;
+    document.querySelector("#ok input").checked = urls.has(url);
+    document.querySelector("#ok input").addEventListener("change", change);
+    document.querySelector("#ok").classList.add("visible");
 } else {
-    button.textContent = "(Impossible pour cette page)";
+    document.querySelector("#forbidden a:has(code)").href = url;
+    document.querySelector("#forbidden code").textContent = url;
+    document.querySelector("#forbidden").classList.add("visible");
 }
 
-const ul = document.querySelector("ul");
-for (const dashboard of dashboards) {
-    ul.append(create(dashboard, url === dashboard.url));
-}
+document
+    .querySelectorAll("a")
+    .forEach((a) => a.addEventListener("click", open));
diff --git a/src/extension/firefox/popup/style.css b/src/extension/firefox/popup/style.css
index 65164af..bae136c 100644
--- a/src/extension/firefox/popup/style.css
+++ b/src/extension/firefox/popup/style.css
@@ -1,67 +1,125 @@
+:root {
+    --background-color: white;
+    --inactive-color: #bbbbc4;
+    --inactive-color-hover: #8f8f9d;
+    --color: #15141a;
+    --accent-color: #0060df;
+    --accent-color-hover: #0250bb;
+    --line-color: #5e5e5e;
+}
+@media (prefers-color-scheme: dark) {
+    :root {
+        --background-color: #272727;
+        --inactive-color: #484854;
+        --inactive-color-hover: #5c5c6a;
+        --color: white;
+        --accent-color: #00ddff;
+        --accent-color-hover: #80ebff;
+        --line-color: #5e5e5e;
+    }
+}
+
 body {
-    font-family: system-ui;
+    background-color: var(--background-color);
+    color: var(--color);
+    font-family: sans-serif;
     font-size: 14px;
-    min-width: 200px;
 }
 
-button.icon {
-    background: transparent;
-    border: none;
-    border-radius: 4px;
-    height: 34px;
-    width: 34px;
+a,
+a:visited {
+    color: var(--accent-color);
 }
-button.icon:hover {
-    background-color: rgba(0 0 0 / 6%);
+a:hover {
+    color: var(--accent-color-hover);
 }
 
-button.outlined {
-    background: transparent;
-    border: 1px solid rgba(0 0 0 / 12%);
-    border-radius: 4px;
-    color: rgba(0 0 0 / 87%);
-    line-height: 34px;
-    padding: 0 15px;
+header {
+    border-bottom: 1px solid var(--line-color);
     text-align: center;
-    text-transform: uppercase;
 }
-button.outlined::-moz-focus-inner {
-    border: none;
+h1 {
+    font-size: 14px;
 }
-button.outlined:hover {
-    background-color: rgba(0 0 0 / 6%);
+
+main {
+    display: none;
+    margin: 0 8px;
+    width: 340px;
+}
+main.visible {
+    display: block;
 }
 
-ul {
-    list-style-type: none;
-    margin-bottom: 0;
-    margin-top: 0;
-    padding-left: 0;
+form {
+    display: flex;
+    justify-content: center;
+    margin: 28px;
 }
-li {
+
+label.switch {
     align-items: center;
+    background-color: var(--inactive-color);
+    border-radius: 64px;
+    color: var(--color);
     display: flex;
-    height: 34px;
+    font-size: 22px;
+    font-weight: 600;
+    height: 64px;
+    position: relative;
+    transition: 0.4s;
+    width: 164px;
+}
+
+label.switch input {
+    display: none;
 }
-span {
-    flex-grow: 1;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    /* Ne pas sélectionner un mot durant un double-clic (pour copier l'URL dans
-       le presse-papier). */
-    user-select: none;
-    white-space: nowrap;
+
+label.switch::before {
+    background: url("./img/checkmark.svg") center / 50% no-repeat var(--color);
+    border-radius: 50%;
+    bottom: 8px;
+    content: "";
+    height: 48px;
+    left: 8px;
+    position: absolute;
+    transition: 0.4s;
+    width: 48px;
 }
-span.active {
-    font-weight: bold;
+
+label.switch:has(input:checked) {
+    background-color: var(--accent-color);
+    color: var(--background-color);
 }
-li button {
-    display: none;
+label.switch:has(input:hover) {
+    background-color: var(--inactive-color-hover);
 }
-li:hover button {
-    display: block;
+label.switch:has(input:checked:hover) {
+    background-color: var(--accent-color-hover);
+}
+label.switch:has(input:checked)::before {
+    background-color: var(--background-color);
+    transform: translateX(98px);
 }
 
-#set {
+label.switch input ~ span {
+    box-sizing: border-box;
+    padding: 0 25px;
+    position: absolute;
+    transition: 0.4s;
     width: 100%;
 }
+label.switch input ~ span:first-of-type {
+    text-align: right;
+}
+label.switch input ~ span:last-of-type {
+    text-align: left;
+}
+label.switch input ~ span:last-of-type,
+label.switch input:checked ~ span:first-of-type {
+    opacity: 0%;
+}
+label.switch input ~ span:first-of-type,
+label.switch input:checked ~ span:last-of-type {
+    opacity: 100%;
+}

From 7efa071f11786bfe1be28fe0c530e0dd5e70c2f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sat, 9 Nov 2024 15:27:44 +0100
Subject: [PATCH 36/38] chore: Remplacer les templates par des exemples.

---
 .metalint/metalint.config.js        |   2 +-
 README.md                           |  22 ++++++------
 examples/.gitignore                 |   4 +++
 examples/gout-dashboard-example.zip | Bin 0 -> 2822 bytes
 template/dashboard/3-columns.html   |  50 --------------------------
 template/dashboard/4-columns.html   |  54 ----------------------------
 template/dashboard/README.md        |   8 -----
 7 files changed, 17 insertions(+), 123 deletions(-)
 create mode 100644 examples/.gitignore
 create mode 100644 examples/gout-dashboard-example.zip
 delete mode 100644 template/dashboard/3-columns.html
 delete mode 100644 template/dashboard/4-columns.html
 delete mode 100644 template/dashboard/README.md

diff --git a/.metalint/metalint.config.js b/.metalint/metalint.config.js
index f5684eb..13913a0 100644
--- a/.metalint/metalint.config.js
+++ b/.metalint/metalint.config.js
@@ -74,7 +74,7 @@ export default {
             linters: ["prettier", "htmlhint"],
             overrides: [
                 {
-                    patterns: "/template/dashboard/**",
+                    patterns: "/examples/**",
                     linters: "htmlhint_dashboard",
                 },
             ],
diff --git a/README.md b/README.md
index a961fdf..d4cd8f9 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,18 @@ une page Web. Les [dashboards](#dashboard) sont ces pages Web avec du
 pour définir le format d'affichage ; et des [scrapers](#scraper) pour extraire
 des données.
 
+## Démarrage rapide
+
+- Installez l'extension Gout depuis le [**Firefox Browser
+  Add-ons**][link-firefox].
+- Téléchargez et décompressez le zip
+  [`gout-dashboard-example.zip`](./examples/gout-dashboard-example.zip).
+- Ouvrez le fichier `gout-dashboard-example/index.html` dans Firefox.
+- Ouvrez la popup de l'extension Gout et activez Gout pour la page courant.
+- Découvrez les widgets qui s'affichent.
+
+## Composants
+
 ### Dashboard
 
 Un dashboard est une page Web qui contient des widgets. Elle doit importer le
@@ -201,16 +213,6 @@ Si vous voulez des scrapers, vous pouvez chercher
 [_gout-scraper_](https://github.com/search?q=%22+gout-scraper%22+language%3AMarkdown&type=Code&l=Markdown)
 dans GitHub.
 
-## Installation
-
-L'extension est disponible sur [**Firefox Browser Add-ons**][link-firefox].
-Après l'avoir installée, téléchargez un
-[template d'un dashboard](https://github.com/regseb/gout/tree/HEAD/template/dashboard).
-Ouvrez le fichier avec un éditeur de texte. Ajoutez les widgets que vous
-souhaitez dans le code HTML. Ouvrez le fichier avec votre navigateur et ajoutez
-la page dans l'extension (en cliquant sur l'icône de l'extension dans la barre
-d'outils du navigateur). Actualisez la page pour voir apparaitre les widgets.
-
 [img-firefox]:
   https://img.shields.io/amo/v/gout.svg?label=add-on&logo=firefox-browser&logoColor=whitesmoke
 [img-build]:
diff --git a/examples/.gitignore b/examples/.gitignore
new file mode 100644
index 0000000..09668ff
--- /dev/null
+++ b/examples/.gitignore
@@ -0,0 +1,4 @@
+# Ignorer tous les fichiers / répertoires sauf les archives.
+*
+!.gitignore
+!*.zip
diff --git a/examples/gout-dashboard-example.zip b/examples/gout-dashboard-example.zip
new file mode 100644
index 0000000000000000000000000000000000000000..4cfeb0d8ae43b7f815c79086a5fccc1fd50daf9e
GIT binary patch
literal 2822
zcmbW34LFl~8^E7oXrV%skJlz2Gx>;!h~bD?zQPJewqhpVGmIouNHy}+kt38v@{t;1
z%G(Ojhm<oalUm4|5#G*@v78>g%GLFDPVaj^*Z=?Qxt{B~@9Tbk`~R-n4J#@p4}hVc
zs_nh><3F1s00)91Vkmk6glN+K2m(1kFOW(Iiwq4k@bZ)fB;xUd#E&}+g1~zWbu|DH
zdn*b6OPkwLQb|A(2&D#pN$Q{o0Eq7=4Gs?or0SC>VWCUut3wQeme)7wIeR(bFHGfc
zO?gBrHJ%hv_|2@#s3+Ef64FwpdbR9D7}~=@RxZ;M(`~IQ&}VX@C)#6?-L(?~m|so8
zj5ZcHPQSNEA3NLk{-kGgQ)RMzZ64RbZV{eyIZ;0F6907*X(1z<0NMOOI<#PT!z-w<
z!XUEBk8N>6GE9Q*rs#Y!n}s&bgpHvrO7kjER!usNTTJRj9A;CM?&<9!)rRmlm$4&Z
zC`DK$G8%OQS6@8pzB&j^Q}-otsk{s|=}p*2E@rE^9(UDu%y3n@omkmvO(`t$CR9HQ
z(c}wL#Ahez6!s4xQ87MP$*GPz1qZvH=@sl=Yt%cQ+8SbUtel0*(G%CmHC(JcEWCxa
z*m-U|#@O-cJ30%9v%La&<-?}8h)fsU*xAFjiK@T<L3;d&d)j$-W@67J#72ALGcEhk
zGPGNn1p*T9N!1yzeEDDFag^Im&FY&pNYtzUlH09p4nO3xrPNKQIwV}xPJrEWzJW(Z
z98+$4|8@&6xAT=^&FQnDR&a-R9*jQmvBbHs1S!llm#Lfl(Nw<eytl0Ncqd_9WrxbR
z6!!QdDGwDARWg74x&}tTc|5I%D)hpeDzKUPFyHD@y8|_g5tUIDD1)Lf)1r18>b4KB
z4|Jy2K$JI4%2IY*FufSxM%|~wxPo0p$LT!wu^BWQf+eIMXykI4XLnU5(45>2uP@p&
z5bfyJPDF6Z#(j(|=_4(x`C)V8us-@Ik7HglcYJYd`)EtK>r2`Y^xihS(|nTL`m?w(
z^MPa`ByE~1dSV)j_unQyL!fR{sK7%v+cfK`UmW{`m9db77XNsp%D|3tZEq}fU`j1w
z)3coW)$gl?$)_8-EKp_M1%7h9Yf5D__IRe`^1J{U0fx+IfZctFOE=;ULx_{m)P6aV
z<yKKgz2Z!H#_2J7VkYw^I{N$x%D?AlpSj*F(XMFQdw8Gj2lCA8L+4wq7GfegZ>F?0
z7{wIxa8ABG9U(2z#;*(s$2zT)LcLOLsYioG_1Q0BO~&k6eKA+7Lx{DS_g~EKb1$4Y
z)%~%PR>7-XCsyMBp3xk0tWB+JlB@gsum=ivaB!+hMYIC*oHOL&<<EWB6~vDznJ>CN
z$%&v!dH(a~ih9@Asm;cxm|;4Xo1Q!W!R0qP+g8YG6{VMrG`uV$%}X3Leh|+Q#9Omy
z*oOuzp^fj{okE3$sa(~EY+CaLfptkrUaVU^Wv&%d;BuQBz=vIj<0Wc5l~*fk`HPcO
zI{T9{2L@dtiBbU>PQu?QhXvi5GFffr!`gh^NtJ}?=tGa)`_F~920r%hxn0K5t<I{n
z9FfZQLEvYFPnmYzp<8+%l$YDe$(EEIm`ShY$yk=3W0eHh44CJnPJgtwh5LwPF3iTE
zR6J<#L@g>J`^`vEf8A@p8O(I!PV~tKQQcxTCKnd$$+%gORL`OQgX7H@1$GWgrj-bZ
z+k-ZB#ale-%ubssvQx4uT3qdhm5`J;9@&N$0{~E3pLGUmQT(#!7oCC6Du1D~0}<h$
zMXBnwJ_r;gc>l&^UqyK->Z>T9Kmb7JZ!#0elt6z&LqlWz=-8koVUGJ71TC*`$~d3t
z31=Bfbxc_v&oAa~f27taH*(eQ#soCBXoId}ARMiiWnJ;K9230I9-K5cQ62FV=%2kY
z#hKn}_6u!(Ze-!DDg>gfEc1_w>3KHujxZ^HvL*g}6peaIMpe!|2x#(#R2!)AkJ=~q
z4BdowRIS@!@}?iYmp(p_y{frSOTI7=1_|jqT8Cui_Bi^)y*ZOg?Z|e!mW70hkgKfl
z@Y{}EdF1-K5zo^ZdAwgPTsqZgs=wG?<J>%<)BrSydhSqI|I+lDp9aRzvEfSI#tYuM
zqncXB(a0@={g+9jUAyqRO$xWh>*hL-UPb>ljC(ZWFsqrb%<NL?8xBpor=HJVOBB{M
z5ziKNA=!s@wG(X0BngB?{UOeiH+5XI-zU5F!5e>S@~(N|5sI@0>9->H!}LB;07-mh
zRJVdr@25A&A7Ml!62Bl4d_uImzKh5{ubBIMC87b?N<>2Qnj=eyhWvWCd#17~ZpJ;G
z4oNb%PRNo`)%G3Q;lkzD@YCmoGlMa+mUmQMC350UWfVgeh$Dl7nJDYMl*#M-h`Vkk
z+r{Y%P9k3CXwrqr*f84^Z!Pso_cdjylCB8RgB${&u}UfrP0oO~uZyfoNp^$pH=_SM
z5qzj>r`QABrBa=vBON1cHyZZnGk5CA_(Ir#y(VMLGnpI>^llz9Ft)dP{j6;6cH8U?
zcJ(!+(cWEXkP$Q_*O};3dN491Xzt=%PWNd}fToFA5rUCHmp<mb_^#&J2+=6h`Q`Hy
zHfY1`J_BuCO#d`XmCky;>m5Tz>x*hOPs{X*8i)w?F|r3l1cGqGLPX?6zdy!+M->dA
z4Y>c`L(S(R%VW(-Lx5w=axhZ7zF*|Whn$r?{Wt9_mlN7(K)>5l@Q+F8Yh$2>R{r@x
z4J`*FCFyS}{ZCR_ZV>#Q;K^DE6g*kW!AMb;`0ECj%KqRvbHhT#!OYN4m#zo^v`d0d
Fe*&6`avcBw

literal 0
HcmV?d00001

diff --git a/template/dashboard/3-columns.html b/template/dashboard/3-columns.html
deleted file mode 100644
index 86a2ff5..0000000
--- a/template/dashboard/3-columns.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!doctype html>
-<html lang="fr-FR">
-  <head>
-    <meta charset="utf-8" />
-    <link
-      href="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg"
-      rel="shortcut icon"
-    />
-    <title>Gout</title>
-    <script
-      src="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js"
-      type="module"
-    ></script>
-    <style>
-      body {
-        display: flex;
-      }
-      div {
-        display: flex;
-        flex-direction: column;
-      }
-    </style>
-  </head>
-  <body>
-    <!-- Les largeurs des colonnes sont modifiables en changeant la valeur de
-         la propriété width. -->
-    <div style="width: 33%">
-      <!--
-        Les widgets sont à ajouter dans ce div pour les afficher dans la
-        première colonne. Voici un exemple de structure d'un widget :
-          <script type="application/yaml">
-            module:
-              url: # ...
-              options: # ...
-              scrapers:
-                - url: # ...
-                  options: # ...
-          </script>
-      -->
-    </div>
-    <div style="width: 33%">
-      <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
-           colonne du milieu. -->
-    </div>
-    <div style="width: 33%">
-      <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
-           dernière colonne. -->
-    </div>
-  </body>
-</html>
diff --git a/template/dashboard/4-columns.html b/template/dashboard/4-columns.html
deleted file mode 100644
index 237ec04..0000000
--- a/template/dashboard/4-columns.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!doctype html>
-<html lang="fr-FR">
-  <head>
-    <meta charset="utf-8" />
-    <link
-      href="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/img/icon.svg"
-      rel="shortcut icon"
-    />
-    <title>Gout</title>
-    <script
-      src="https://cdn.jsdelivr.net/gh/regseb/gout@0/src/engine/script.js"
-      type="module"
-    ></script>
-    <style>
-      body {
-        display: flex;
-      }
-      div {
-        display: flex;
-        flex-direction: column;
-      }
-    </style>
-  </head>
-  <body>
-    <!-- Les largeurs des colonnes sont modifiables en changeant la valeur de
-         la propriété width. -->
-    <div style="width: 25%">
-      <!--
-        Les widgets sont à ajouter dans ce div pour les afficher dans la
-        première colonne. Voici un exemple de structure d'un widget :
-          <script type="application/yaml">
-            module:
-              url: # ...
-              options: # ...
-              scrapers:
-                - url: # ...
-                  options: # ...
-          </script>
-      -->
-    </div>
-    <div style="width: 25%">
-      <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
-           deuxième colonne. -->
-    </div>
-    <div style="width: 25%">
-      <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
-           troisième colonne. -->
-    </div>
-    <div style="width: 25%">
-      <!-- Les widgets sont à ajouter dans ce div pour les afficher dans la
-           dernière colonne. -->
-    </div>
-  </body>
-</html>
diff --git a/template/dashboard/README.md b/template/dashboard/README.md
deleted file mode 100644
index b88dea8..0000000
--- a/template/dashboard/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Templates de dashboards
-
-Ce répertoire contient des templates basiques pour vos dashboards.
-
-- [_3-columns.html_](3-columns.html) : un dashboard avec trois colonnes de
-  largeur identique ;
-- [_4-columns.html_](3-columns.html) : un dashboard avec quatre colonnes de
-  largeur identique.

From c4a57a40283476d48b6e6afd990670ca22801e9e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20R=C3=A8gne?= <regseb@gmail.com>
Date: Sat, 9 Nov 2024 16:15:26 +0100
Subject: [PATCH 37/38] =?UTF-8?q?chore:=20Mettre=20=C3=A0=20jour=20les=20d?=
 =?UTF-8?q?=C3=A9pendances.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/ISSUE_TEMPLATE/bug_report.md          |    4 +-
 .github/ISSUE_TEMPLATE/feature_request.md     |    4 +-
 .metalint/addons-linter_mv3.config.js         |   11 -
 .metalint/eslint.config.js                    |   68 +-
 .metalint/eslint_browser.config.js            |   22 +-
 .metalint/eslint_node.config.js               |    4 +
 .metalint/eslint_test.config.js               |   23 +-
 .metalint/eslint_webext.config.js             |   17 +-
 .metalint/markdownlint.config.js              |    5 +-
 .metalint/metalint.config.js                  |    6 +-
 README.md                                     |   10 +-
 package-lock.json                             | 5196 +++++++++--------
 package.json                                  |   41 +-
 src/module/image/README.md                    |    2 +-
 src/module/list/README.md                     |   23 +-
 src/module/podcast/README.md                  |    2 +-
 src/module/search/search.js                   |    2 +-
 src/module/search/search.tpl                  |    2 +-
 src/module/single/README.md                   |    2 +-
 src/module/tools/contrast/README.md           |    3 +-
 src/scraper/examples/README.md                |   11 +-
 src/scraper/examples/days/README.md           |   34 +-
 src/scraper/examples/helloworld/README.md     |    6 +-
 .../examples/jsonplaceholder/README.md        |   15 +-
 src/scraper/icon/ping/README.md               |    7 +-
 src/scraper/icon/ping/ping.js                 |    2 +-
 src/scraper/list/jsonfeed/README.md           |   10 +-
 src/scraper/list/rss/README.md                |   17 +-
 src/scraper/search/opensearch/README.md       |    5 +-
 src/scraper/tools/complements/README.md       |    3 +-
 src/scraper/tools/filter/README.md            |    3 +-
 31 files changed, 2822 insertions(+), 2738 deletions(-)
 delete mode 100644 .metalint/addons-linter_mv3.config.js

diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index aee414e..a7c8287 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -28,8 +28,8 @@ Steps to reproduce the behavior:
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.12.1 -->:
-- Browser version<!-- e.g. Chrome 127.0.6533.88, Firefox 129.0 -->:
+- Gout extension version<!-- e.g. 0.13.0 -->:
+- Browser version<!-- e.g. Chrome 130.0.6723.91, Firefox 132.0 -->:
 
 ### Additional context
 
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 0e496e2..de2b543 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -17,8 +17,8 @@ assignees: ""
 
 ### Environment
 
-- Gout extension version<!-- e.g. 0.12.1 -->:
-- Browser version<!-- e.g. Chrome 127.0.6533.88, Firefox 129.0 -->:
+- Gout extension version<!-- e.g. 0.13.0 -->:
+- Browser version<!-- e.g. Chrome 130.0.6723.91, Firefox 132.0 -->:
 
 ### Additional context
 
diff --git a/.metalint/addons-linter_mv3.config.js b/.metalint/addons-linter_mv3.config.js
deleted file mode 100644
index fca28cf..0000000
--- a/.metalint/addons-linter_mv3.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @module
- * @license MIT
- * @author Sébastien Règne
- */
-
-export default {
-    // Autoriser la propriété "service_worker" pour le "background".
-    // https://github.com/mozilla/addons-linter/issues/5152
-    enableBackgroundServiceWorker: true,
-};
diff --git a/.metalint/eslint.config.js b/.metalint/eslint.config.js
index 5943807..f1b7f60 100644
--- a/.metalint/eslint.config.js
+++ b/.metalint/eslint.config.js
@@ -3,6 +3,21 @@
  * @author Sébastien Règne
  */
 
+// @ts-expect-error -- Le plugin array-func ne fournit pas de types.
+import arrayFunc from "eslint-plugin-array-func";
+// @ts-expect-error -- Le plugin eslint-comments ne fournit pas de types.
+import eslintComments from "eslint-plugin-eslint-comments";
+// @ts-expect-error -- Le plugin import ne fournit pas de types.
+import importPlugin from "eslint-plugin-import";
+import jsdoc from "eslint-plugin-jsdoc";
+// @ts-expect-error -- Le plugin no-unsanitized ne fournit pas de types.
+import noUnsanitized from "eslint-plugin-no-unsanitized";
+// @ts-expect-error -- Le plugin promise ne fournit pas de types.
+import promise from "eslint-plugin-promise";
+import regexp from "eslint-plugin-regexp";
+import unicorn from "eslint-plugin-unicorn";
+import globals from "globals";
+
 /**
  * @import { Linter } from "eslint"
  */
@@ -11,26 +26,19 @@
  * @type {Linter.Config}
  */
 export default {
-    plugins: [
-        "array-func",
-        "eslint-comments",
-        "import",
-        "jsdoc",
-        "mocha",
-        "n",
-        "no-unsanitized",
-        "promise",
-        "regexp",
-        "unicorn",
-    ],
-
-    parserOptions: {
-        sourceType: "module",
+    languageOptions: {
+        globals: { ...globals["shared-node-browser"] },
     },
 
-    env: {
-        "shared-node-browser": true,
-        es2023: true,
+    plugins: {
+        "array-func": arrayFunc,
+        "eslint-comments": eslintComments,
+        import: importPlugin,
+        jsdoc,
+        "no-unsanitized": noUnsanitized,
+        promise,
+        regexp,
+        unicorn,
     },
 
     rules: {
@@ -74,7 +82,7 @@ export default {
             },
         ],
         "no-loss-of-precision": "error",
-        "no-misleading-character-class": "error",
+        "no-misleading-character-class": ["error", { allowEscape: true }],
         "no-new-native-nonconstructor": "error",
         "no-new-symbol": "error",
         "no-obj-calls": "error",
@@ -105,7 +113,6 @@ export default {
             {
                 args: "all",
                 argsIgnorePattern: "^_",
-                caughtErrors: "all",
                 caughtErrorsIgnorePattern: "^_",
             },
         ],
@@ -135,7 +142,7 @@ export default {
             },
         ],
         "class-methods-use-this": "error",
-        complexity: ["warn", { max: 50 }],
+        complexity: ["warn", { max: 50, variant: "modified" }],
         "consistent-return": "error",
         "consistent-this": "error",
         curly: "error",
@@ -181,7 +188,6 @@ export default {
         "max-nested-callbacks": "warn",
         "max-params": ["warn", { max: 5 }],
         "max-statements": ["warn", { max: 50 }],
-        "multiline-comment-style": ["error", "separate-lines"],
         "new-cap": "error",
         "no-alert": "error",
         "no-array-constructor": "error",
@@ -200,7 +206,10 @@ export default {
         "no-eval": "error",
         "no-extend-native": "error",
         "no-extra-bind": "error",
-        "no-extra-boolean-cast": "error",
+        "no-extra-boolean-cast": [
+            "error",
+            { enforceForInnerExpressions: true },
+        ],
         "no-extra-label": "error",
         "no-global-assign": "error",
         "no-implicit-coercion": ["error", { disallowTemplateShorthand: true }],
@@ -308,7 +317,7 @@ export default {
         "prefer-template": "off",
         radix: "error",
         "require-await": "error",
-        "require-unicode-regexp": "error",
+        "require-unicode-regexp": ["error", { requireFlag: "v" }],
         "require-yield": "error",
         "sort-imports": [
             "error",
@@ -326,7 +335,6 @@ export default {
         yoda: ["error", "always"],
 
         // Layout & Formatting.
-        "line-comment-position": "error",
         "unicode-bom": "error",
 
         // Plugin eslint-plugin-array-func.
@@ -621,7 +629,10 @@ export default {
         "regexp/prefer-regexp-exec": "error",
         "regexp/prefer-regexp-test": "error",
         "regexp/prefer-set-operation": "error",
-        "regexp/require-unicode-regexp": "error",
+        // Désactiver cette règle qui est quasi-identique à la règle
+        // "require-unicode-regexp" (seule la position de la notification est
+        // différente).
+        "regexp/require-unicode-regexp": "off",
         "regexp/simplify-set-operations": "error",
         "regexp/sort-alternatives": "error",
         "regexp/use-ignore-case": "error",
@@ -658,9 +669,10 @@ export default {
 
         // Plugin eslint-plugin-unicorn.
         "unicorn/better-regex": "error",
-        "unicorn/catch-error-name": ["error", { ignore: [/^err$/u, /^e$/u] }],
+        "unicorn/catch-error-name": ["error", { ignore: [/^err$/v, /^e$/v] }],
         "unicorn/consistent-destructuring": "error",
         "unicorn/consistent-empty-array-spread": "error",
+        "unicorn/consistent-existence-index-check": "error",
         "unicorn/consistent-function-scoping": "error",
         "unicorn/custom-error-definition": "error",
         // Laisser Prettier gérer cette règle.
@@ -743,10 +755,12 @@ export default {
         "unicorn/prefer-dom-node-text-content": "error",
         "unicorn/prefer-event-target": "error",
         "unicorn/prefer-export-from": ["error", { ignoreUsedVariables: true }],
+        "unicorn/prefer-global-this": "error",
         "unicorn/prefer-includes": "error",
         "unicorn/prefer-json-parse-buffer": "off",
         "unicorn/prefer-keyboard-event-key": "error",
         "unicorn/prefer-logical-operator-over-ternary": "error",
+        "unicorn/prefer-math-min-max": "error",
         "unicorn/prefer-math-trunc": "error",
         "unicorn/prefer-modern-dom-apis": "error",
         "unicorn/prefer-modern-math-apis": "error",
diff --git a/.metalint/eslint_browser.config.js b/.metalint/eslint_browser.config.js
index 3bd93f0..9be989d 100644
--- a/.metalint/eslint_browser.config.js
+++ b/.metalint/eslint_browser.config.js
@@ -3,12 +3,20 @@
  * @author Sébastien Règne
  */
 
+import globals from "globals";
+
+/**
+ * @import { Linter } from "eslint"
+ */
+
 /**
- * @type {import("eslint").Linter.Config}
+ * @type {Linter.Config}
  */
 export default {
-    env: {
-        browser: true,
+    languageOptions: {
+        globals: {
+            ...globals.browser,
+        },
     },
 
     rules: {
@@ -17,7 +25,13 @@ export default {
         "import/no-unresolved": [
             "error",
             {
-                ignore: [String.raw`^https://esm\.sh/`],
+                // Utiliser des chaines de caractères, car les expressions
+                // rationnelles ne sont pas supportées.
+                // https://github.com/import-js/eslint-plugin-import/issues/3087
+                // Ne pas utiliser le drapeau "v", car la RegExp est créée sans
+                // drapeau (dans le eslint-plugin-import).
+                // eslint-disable-next-line require-unicode-regexp
+                ignore: [/^https:\/\/esm\.sh\//.source],
                 caseSensitiveStrict: true,
             },
         ],
diff --git a/.metalint/eslint_node.config.js b/.metalint/eslint_node.config.js
index 113f4b6..439fb2e 100644
--- a/.metalint/eslint_node.config.js
+++ b/.metalint/eslint_node.config.js
@@ -3,6 +3,8 @@
  * @author Sébastien Règne
  */
 
+import n from "eslint-plugin-n";
+
 /**
  * @import { Linter } from "eslint"
  */
@@ -11,6 +13,8 @@
  * @type {Linter.Config}
  */
 export default {
+    plugins: { n },
+
     rules: {
         // Suggestions.
         "no-restricted-properties": [
diff --git a/.metalint/eslint_test.config.js b/.metalint/eslint_test.config.js
index da02fe4..5533755 100644
--- a/.metalint/eslint_test.config.js
+++ b/.metalint/eslint_test.config.js
@@ -3,6 +3,10 @@
  * @author Sébastien Règne
  */
 
+// @ts-expect-error -- Le plugin mocha ne fournit pas de types.
+import mocha from "eslint-plugin-mocha";
+import globals from "globals";
+
 /**
  * @import { Linter } from "eslint"
  */
@@ -11,12 +15,14 @@
  * @type {Linter.Config}
  */
 export default {
-    env: {
-        browser: true,
-        mocha: true,
-        webextensions: true,
+    languageOptions: {
+        globals: {
+            ...globals.mocha,
+        },
     },
 
+    plugins: { mocha },
+
     rules: {
         // Suggestions.
         complexity: "off",
@@ -36,8 +42,13 @@ export default {
         "mocha/no-exclusive-tests": "error",
         "mocha/no-exports": "error",
         "mocha/no-global-tests": "error",
-        "mocha/no-hooks": "error",
-        "mocha/no-hooks-for-single-case": "error",
+        // Autoriser les hooks "afterEach", car ils sont toujours exécuter après
+        // les tests (pour nettoyer l'environnement) même si les tests ont
+        // échoués.
+        "mocha/no-hooks": ["error", { allow: ["afterEach"] }],
+        // Désactiver cette règle, car il n'y a pas de condition différente avec
+        // la règle "no-hook".
+        "mocha/no-hooks-for-single-case": "off",
         "mocha/no-identical-title": "error",
         "mocha/no-mocha-arrows": "error",
         "mocha/no-nested-tests": "error",
diff --git a/.metalint/eslint_webext.config.js b/.metalint/eslint_webext.config.js
index 0a4f4b1..483148e 100644
--- a/.metalint/eslint_webext.config.js
+++ b/.metalint/eslint_webext.config.js
@@ -3,6 +3,8 @@
  * @author Sébastien Règne
  */
 
+import globals from "globals";
+
 /**
  * @import { Linter } from "eslint"
  */
@@ -11,8 +13,17 @@
  * @type {Linter.Config}
  */
 export default {
-    env: {
-        browser: true,
-        webextensions: true,
+    languageOptions: {
+        globals: {
+            ...globals.browser,
+            ...globals.webextensions,
+        },
+    },
+
+    rules: {
+        // Suggestions.
+        // Ne pas utiliser le drapeau "v", car Add-ons Linter ne le supporte
+        // pas. https://github.com/mozilla/addons-linter/issues/5462
+        "require-unicode-regexp": ["error", { requireFlag: "u" }],
     },
 };
diff --git a/.metalint/markdownlint.config.js b/.metalint/markdownlint.config.js
index aa3c839..ee85bad 100644
--- a/.metalint/markdownlint.config.js
+++ b/.metalint/markdownlint.config.js
@@ -4,11 +4,11 @@
  */
 
 /**
- * @import { Configuration } from "markdownlint"
+ * @import { ConfigurationStrict } from "markdownlint"
  */
 
 /**
- * @type {Configuration}
+ * @type {ConfigurationStrict}
  */
 export default {
     "heading-increment": true,
@@ -80,4 +80,5 @@ export default {
     "link-image-style": { shortcut: false, url_inline: false },
     "table-pipe-style": { style: "leading_and_trailing" },
     "table-column-count": true,
+    "blanks-around-tables": false,
 };
diff --git a/.metalint/metalint.config.js b/.metalint/metalint.config.js
index 13913a0..de82070 100644
--- a/.metalint/metalint.config.js
+++ b/.metalint/metalint.config.js
@@ -32,12 +32,8 @@ export default {
     ],
     checkers: [
         {
-            patterns: ["/build/*.zip", "/src/extension/*/"],
+            patterns: ["/build/*/*.zip", "/src/extension/*/"],
             linters: "addons-linter",
-            overrides: {
-                patterns: "/src/extension/chromium/",
-                linters: "addons-linter_mv3",
-            },
         },
         {
             patterns: "*.js",
diff --git a/README.md b/README.md
index d4cd8f9..2362704 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ des données.
 - Installez l'extension Gout depuis le [**Firefox Browser
   Add-ons**][link-firefox].
 - Téléchargez et décompressez le zip
-  [`gout-dashboard-example.zip`](./examples/gout-dashboard-example.zip).
+  [`gout-dashboard-example.zip`](examples/gout-dashboard-example.zip).
 - Ouvrez le fichier `gout-dashboard-example/index.html` dans Firefox.
 - Ouvrez la popup de l'extension Gout et activez Gout pour la page courant.
 - Découvrez les widgets qui s'affichent.
@@ -148,12 +148,12 @@ dans GitHub.
 
 ### Module
 
-Les modules sont les composants du widget définissant comment les données sont
+Les modules sont les composants des widgets définissant comment les données sont
 affichées (une liste de liens, une image...). La configuration d'un module a
 trois propriétés :
 
 - `url` : L'URL du fichier JavaScript du module (par exemple pour le module
-  [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) :
+  [_list_](src/module/list#readme) :
   `"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/module/list/list.js"`).
 - `options` : Les options du module (qui sont spécifiques pour chaque module).
 - `scrapers` : La liste des [scrapers](#scraper) associés au module.
@@ -186,8 +186,8 @@ peuvent être associés avec un module. Dans la configuration du widget, les
 scrapers sont définis dans une liste ou chaque élément a deux propriétés :
 
 - `url` : L'URL du fichier JavaScript du scraper (par exemple pour le scraper
-  [_list/rss_](https://github.com/regseb/gout/tree/HEAD/src/scraper/list/rss#readme)
-  : `"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"`).
+  [_list/rss_](src/scraper/list/rss#readme) :
+  `"https://cdn.jsdelivr.net/gh/regseb/gout@0/src/scraper/list/rss/rss.js"`).
 - `options` : Les options du scraper (qui sont spécifiques pour chaque scraper).
 
 Dans cet exemple, deux scrapers sont définis pour récupérer les dernières vidéos
diff --git a/package-lock.json b/package-lock.json
index 08eb603..ebe9921 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,39 +15,40 @@
       "devDependencies": {
         "@prantlf/jsonlint": "16.0.0",
         "@prettier/plugin-xml": "3.4.1",
-        "@stryker-mutator/core": "8.4.0",
-        "@stryker-mutator/mocha-runner": "8.4.0",
-        "@types/eslint": "9.6.0",
-        "@types/mocha": "10.0.7",
-        "addons-linter": "6.33.0",
-        "eslint": "8.57.0",
-        "eslint-plugin-array-func": "4.0.0",
+        "@stryker-mutator/core": "8.6.0",
+        "@stryker-mutator/mocha-runner": "8.6.0",
+        "@types/firefox-webext-browser": "120.0.4",
+        "@types/mocha": "10.0.9",
+        "addons-linter": "7.3.0",
+        "eslint": "9.14.0",
+        "eslint-plugin-array-func": "5.0.2",
         "eslint-plugin-eslint-comments": "3.2.0",
-        "eslint-plugin-import": "2.29.1",
-        "eslint-plugin-jsdoc": "50.0.1",
+        "eslint-plugin-import": "2.31.0",
+        "eslint-plugin-jsdoc": "50.4.3",
         "eslint-plugin-mocha": "10.5.0",
-        "eslint-plugin-n": "17.10.2",
-        "eslint-plugin-no-unsanitized": "4.0.2",
+        "eslint-plugin-n": "17.13.1",
+        "eslint-plugin-no-unsanitized": "4.1.2",
         "eslint-plugin-promise": "7.1.0",
         "eslint-plugin-regexp": "2.6.0",
-        "eslint-plugin-unicorn": "55.0.0",
+        "eslint-plugin-unicorn": "56.0.0",
+        "globals": "15.12.0",
         "htmlhint": "1.1.4",
         "http-server": "14.1.1",
-        "markdownlint": "0.34.0",
-        "metalint": "0.17.0",
-        "mocha": "10.7.3",
+        "markdownlint": "0.36.1",
+        "metalint": "0.18.0",
+        "mocha": "10.8.2",
         "npm-package-json-lint": "8.0.0",
         "prettier": "3.3.3",
         "purgecss": "6.0.0",
-        "stylelint": "16.8.1",
+        "stylelint": "16.10.0",
         "stylelint-order": "6.0.4",
-        "typedoc": "0.26.5",
-        "typescript": "5.5.4",
-        "web-ext": "8.2.0",
+        "typedoc": "0.26.11",
+        "typescript": "5.6.3",
+        "web-ext": "8.3.0",
         "yaml-lint": "1.7.0"
       },
       "engines": {
-        "node": ">=22.1.0"
+        "node": ">=22.10"
       }
     },
     "node_modules/@ampproject/remapping": {
@@ -65,13 +66,14 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.26.2",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+      "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.9",
+        "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -79,9 +81,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
-      "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
+      "version": "7.26.2",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz",
+      "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -89,22 +91,22 @@
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.9.tgz",
+      "integrity": "sha512-WYvQviPw+Qyib0v92AwNIrdLISTp7RfDkM7bPqBvpbnhY4wq8HvHBZREVdYDXk98C8BkOIVnHAY3yvj7AVISxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
+        "@babel/code-frame": "^7.25.9",
+        "@babel/generator": "^7.25.9",
+        "@babel/helper-compilation-targets": "^7.25.9",
+        "@babel/helper-module-transforms": "^7.25.9",
+        "@babel/helpers": "^7.25.9",
+        "@babel/parser": "^7.25.9",
+        "@babel/template": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -130,44 +132,44 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
-      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.9.tgz",
+      "integrity": "sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.0",
+        "@babel/types": "^7.25.9",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
+      "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
+      "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.9",
+        "@babel/helper-validator-option": "^7.25.9",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -186,18 +188,18 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
-      "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
+      "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.0",
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-member-expression-to-functions": "^7.25.9",
+        "@babel/helper-optimise-call-expression": "^7.25.9",
+        "@babel/helper-replace-supers": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+        "@babel/traverse": "^7.25.9",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -218,44 +220,43 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
+      "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+      "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+      "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.9",
+        "@babel/helper-validator-identifier": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -265,22 +266,22 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
+      "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
+      "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -288,15 +289,15 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
+      "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.9",
+        "@babel/helper-optimise-call-expression": "^7.25.9",
+        "@babel/traverse": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -306,37 +307,37 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz",
+      "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
+      "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.9",
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+      "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -344,9 +345,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+      "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -354,9 +355,9 @@
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+      "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -364,121 +365,27 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
-      "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
+      "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "chalk": "^2.4.2",
-        "js-tokens": "^4.0.0",
-        "picocolors": "^1.0.0"
+        "@babel/template": "^7.25.9",
+        "@babel/types": "^7.26.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/highlight/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/@babel/parser": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
-      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.9.tgz",
+      "integrity": "sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.2"
+        "@babel/types": "^7.25.9"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -506,14 +413,13 @@
       }
     },
     "node_modules/@babel/plugin-proposal-explicit-resource-management": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-explicit-resource-management/-/plugin-proposal-explicit-resource-management-7.24.7.tgz",
-      "integrity": "sha512-sYvUjHrKctxFiNe/YFyzNyXoblzP4YaZrWSk0js7QU3Lw2lYjLAxnzV8l/4+7PB5+NDFKGblPUq2YbdTxs3Ppg==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-explicit-resource-management/-/plugin-proposal-explicit-resource-management-7.25.9.tgz",
+      "integrity": "sha512-EbtfSvb6s4lZwef1nH52nw4DTUAvHY6bl1mbLgEHUkR6L8j4WY70mM/InB8Ozgdlok/7etbiSW+Wc88ZebZAKQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-explicit-resource-management": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -523,29 +429,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
-      "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-explicit-resource-management": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-explicit-resource-management/-/plugin-syntax-explicit-resource-management-7.24.7.tgz",
-      "integrity": "sha512-gEl7s4tkyWl3EcfUCLVcJJRSogDQju6qX2hdJmZVO0wdpVGzss5bJU8wySoZ7JQw1jBjztEY1a/eYstgv+AQkA==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz",
+      "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -555,13 +445,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
-      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
+      "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -571,13 +461,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz",
-      "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
+      "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -587,15 +477,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz",
+      "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-simple-access": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -605,17 +495,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz",
-      "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz",
+      "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-typescript": "^7.24.7"
+        "@babel/helper-annotate-as-pure": "^7.25.9",
+        "@babel/helper-create-class-features-plugin": "^7.25.9",
+        "@babel/helper-plugin-utils": "^7.25.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+        "@babel/plugin-syntax-typescript": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -645,9 +535,9 @@
       }
     },
     "node_modules/@babel/runtime": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz",
-      "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
+      "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -658,32 +548,32 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
+      "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.9",
+        "@babel/parser": "^7.25.9",
+        "@babel/types": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
-      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+      "version": "7.25.9",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
+      "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/parser": "^7.25.3",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.2",
+        "@babel/code-frame": "^7.25.9",
+        "@babel/generator": "^7.25.9",
+        "@babel/parser": "^7.25.9",
+        "@babel/template": "^7.25.9",
+        "@babel/types": "^7.25.9",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -691,25 +581,34 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/traverse/node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/@babel/types": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
-      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
+      "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/helper-string-parser": "^7.25.9",
+        "@babel/helper-validator-identifier": "^7.25.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz",
-      "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+      "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
       "dev": true,
       "funding": [
         {
@@ -723,16 +622,16 @@
       ],
       "license": "MIT",
       "engines": {
-        "node": "^14 || ^16 || >=18"
+        "node": ">=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.4.1"
+        "@csstools/css-tokenizer": "^3.0.3"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz",
-      "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+      "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
       "dev": true,
       "funding": [
         {
@@ -746,13 +645,13 @@
       ],
       "license": "MIT",
       "engines": {
-        "node": "^14 || ^16 || >=18"
+        "node": ">=18"
       }
     },
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.13",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz",
-      "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz",
+      "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==",
       "dev": true,
       "funding": [
         {
@@ -766,17 +665,17 @@
       ],
       "license": "MIT",
       "engines": {
-        "node": "^14 || ^16 || >=18"
+        "node": ">=18"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.7.1",
-        "@csstools/css-tokenizer": "^2.4.1"
+        "@csstools/css-parser-algorithms": "^3.0.1",
+        "@csstools/css-tokenizer": "^3.0.1"
       }
     },
     "node_modules/@csstools/selector-specificity": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
-      "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-4.0.0.tgz",
+      "integrity": "sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==",
       "dev": true,
       "funding": [
         {
@@ -790,10 +689,10 @@
       ],
       "license": "MIT-0",
       "engines": {
-        "node": "^14 || ^16 || >=18"
+        "node": ">=18"
       },
       "peerDependencies": {
-        "postcss-selector-parser": "^6.0.13"
+        "postcss-selector-parser": "^6.1.0"
       }
     },
     "node_modules/@devicefarmer/adbkit": {
@@ -860,32 +759,35 @@
       }
     },
     "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.46.0",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz",
-      "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==",
+      "version": "0.49.0",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz",
+      "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "comment-parser": "1.4.1",
         "esquery": "^1.6.0",
-        "jsdoc-type-pratt-parser": "~4.0.0"
+        "jsdoc-type-pratt-parser": "~4.1.0"
       },
       "engines": {
         "node": ">=16"
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
-      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
+      "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "eslint-visitor-keys": "^3.3.0"
+        "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      },
       "peerDependencies": {
         "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
       }
@@ -904,26 +806,75 @@
       }
     },
     "node_modules/@eslint-community/regexpp": {
-      "version": "4.11.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
-      "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
+      "version": "4.12.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+      "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
+    "node_modules/@eslint/config-array": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
+      "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@eslint/object-schema": "^2.1.4",
+        "debug": "^4.3.1",
+        "minimatch": "^3.1.2"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/@eslint/config-array/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/@eslint/core": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
+      "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
         "js-yaml": "^4.1.0",
@@ -931,7 +882,7 @@
         "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -965,48 +916,14 @@
         "concat-map": "0.0.1"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.9.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -1032,27 +949,37 @@
         "node": "*"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+    "node_modules/@eslint/js": {
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz",
+      "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==",
       "dev": true,
-      "license": "(MIT OR CC0-1.0)",
+      "license": "MIT",
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@eslint/js": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+    "node_modules/@eslint/object-schema": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+      "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/plugin-kit": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
+      "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "levn": "^0.4.1"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
     "node_modules/@fluent/syntax": {
@@ -1066,20 +993,68 @@
         "npm": ">=7.0.0"
       }
     },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.14",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
-      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
-      "deprecated": "Use @eslint/config-array instead",
+    "node_modules/@fregante/relaxed-json": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@fregante/relaxed-json/-/relaxed-json-2.0.0.tgz",
+      "integrity": "sha512-PyUXQWB42s4jBli435TDiYuVsadwRHnMc27YaLouINktvTWsL3FcKrRMGawTayFk46X+n5bE23RjUTWQwrukWw==",
       "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.2",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
-      },
+      "license": "BSD-3-Clause",
       "engines": {
-        "node": ">=10.10.0"
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/@humanfs/core": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+      "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/@humanfs/node": {
+      "version": "0.16.6",
+      "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+      "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@humanfs/core": "^0.19.1",
+        "@humanwhocodes/retry": "^0.3.0"
+      },
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+      "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.13.0",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+      "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+      "deprecated": "Use @eslint/config-array instead",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^2.0.3",
+        "debug": "^4.3.1",
+        "minimatch": "^3.0.5"
+      },
+      "engines": {
+        "node": ">=10.10.0"
       }
     },
     "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
@@ -1128,16 +1103,30 @@
       "dev": true,
       "license": "BSD-3-Clause"
     },
+    "node_modules/@humanwhocodes/retry": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
+      "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
     "node_modules/@inquirer/checkbox": {
-      "version": "2.4.7",
-      "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.4.7.tgz",
-      "integrity": "sha512-5YwCySyV1UEgqzz34gNsC38eKxRBtlRDpJLlKcRtTjlYA/yDKuc1rfw+hjw+2WJxbAZtaDPsRl5Zk7J14SBoBw==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-3.0.1.tgz",
+      "integrity": "sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/figures": "^1.0.5",
-        "@inquirer/type": "^1.5.2",
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/figures": "^1.0.6",
+        "@inquirer/type": "^2.0.0",
         "ansi-escapes": "^4.3.2",
         "yoctocolors-cjs": "^2.1.2"
       },
@@ -1146,33 +1135,32 @@
       }
     },
     "node_modules/@inquirer/confirm": {
-      "version": "3.1.22",
-      "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz",
-      "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-4.0.1.tgz",
+      "integrity": "sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/type": "^1.5.2"
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/type": "^2.0.0"
       },
       "engines": {
         "node": ">=18"
       }
     },
     "node_modules/@inquirer/core": {
-      "version": "9.0.10",
-      "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.10.tgz",
-      "integrity": "sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==",
+      "version": "9.2.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz",
+      "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/figures": "^1.0.5",
-        "@inquirer/type": "^1.5.2",
+        "@inquirer/figures": "^1.0.6",
+        "@inquirer/type": "^2.0.0",
         "@types/mute-stream": "^0.0.4",
-        "@types/node": "^22.1.0",
+        "@types/node": "^22.5.5",
         "@types/wrap-ansi": "^3.0.0",
         "ansi-escapes": "^4.3.2",
-        "cli-spinners": "^2.9.2",
         "cli-width": "^4.1.0",
         "mute-stream": "^1.0.0",
         "signal-exit": "^4.1.0",
@@ -1185,14 +1173,14 @@
       }
     },
     "node_modules/@inquirer/editor": {
-      "version": "2.1.22",
-      "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.1.22.tgz",
-      "integrity": "sha512-K1QwTu7GCK+nKOVRBp5HY9jt3DXOfPGPr6WRDrPImkcJRelG9UTx2cAtK1liXmibRrzJlTWOwqgWT3k2XnS62w==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-3.0.1.tgz",
+      "integrity": "sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/type": "^1.5.2",
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/type": "^2.0.0",
         "external-editor": "^3.1.0"
       },
       "engines": {
@@ -1200,14 +1188,14 @@
       }
     },
     "node_modules/@inquirer/expand": {
-      "version": "2.1.22",
-      "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.1.22.tgz",
-      "integrity": "sha512-wTZOBkzH+ItPuZ3ZPa9lynBsdMp6kQ9zbjVPYEtSBG7UulGjg2kQiAnUjgyG4SlntpTce5bOmXAPvE4sguXjpA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-3.0.1.tgz",
+      "integrity": "sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/type": "^1.5.2",
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/type": "^2.0.0",
         "yoctocolors-cjs": "^2.1.2"
       },
       "engines": {
@@ -1215,9 +1203,9 @@
       }
     },
     "node_modules/@inquirer/figures": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz",
-      "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz",
+      "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1225,42 +1213,42 @@
       }
     },
     "node_modules/@inquirer/input": {
-      "version": "2.2.9",
-      "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.2.9.tgz",
-      "integrity": "sha512-7Z6N+uzkWM7+xsE+3rJdhdG/+mQgejOVqspoW+w0AbSZnL6nq5tGMEVASaYVWbkoSzecABWwmludO2evU3d31g==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-3.0.1.tgz",
+      "integrity": "sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/type": "^1.5.2"
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/type": "^2.0.0"
       },
       "engines": {
         "node": ">=18"
       }
     },
     "node_modules/@inquirer/number": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.0.10.tgz",
-      "integrity": "sha512-kWTxRF8zHjQOn2TJs+XttLioBih6bdc5CcosXIzZsrTY383PXI35DuhIllZKu7CdXFi2rz2BWPN9l0dPsvrQOA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-2.0.1.tgz",
+      "integrity": "sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/type": "^1.5.2"
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/type": "^2.0.0"
       },
       "engines": {
         "node": ">=18"
       }
     },
     "node_modules/@inquirer/password": {
-      "version": "2.1.22",
-      "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.1.22.tgz",
-      "integrity": "sha512-5Fxt1L9vh3rAKqjYwqsjU4DZsEvY/2Gll+QkqR4yEpy6wvzLxdSgFhUcxfDAOtO4BEoTreWoznC0phagwLU5Kw==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-3.0.1.tgz",
+      "integrity": "sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/type": "^1.5.2",
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/type": "^2.0.0",
         "ansi-escapes": "^4.3.2"
       },
       "engines": {
@@ -1268,36 +1256,36 @@
       }
     },
     "node_modules/@inquirer/prompts": {
-      "version": "5.3.8",
-      "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz",
-      "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-6.0.1.tgz",
+      "integrity": "sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/checkbox": "^2.4.7",
-        "@inquirer/confirm": "^3.1.22",
-        "@inquirer/editor": "^2.1.22",
-        "@inquirer/expand": "^2.1.22",
-        "@inquirer/input": "^2.2.9",
-        "@inquirer/number": "^1.0.10",
-        "@inquirer/password": "^2.1.22",
-        "@inquirer/rawlist": "^2.2.4",
-        "@inquirer/search": "^1.0.7",
-        "@inquirer/select": "^2.4.7"
+        "@inquirer/checkbox": "^3.0.1",
+        "@inquirer/confirm": "^4.0.1",
+        "@inquirer/editor": "^3.0.1",
+        "@inquirer/expand": "^3.0.1",
+        "@inquirer/input": "^3.0.1",
+        "@inquirer/number": "^2.0.1",
+        "@inquirer/password": "^3.0.1",
+        "@inquirer/rawlist": "^3.0.1",
+        "@inquirer/search": "^2.0.1",
+        "@inquirer/select": "^3.0.1"
       },
       "engines": {
         "node": ">=18"
       }
     },
     "node_modules/@inquirer/rawlist": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.2.4.tgz",
-      "integrity": "sha512-pb6w9pWrm7EfnYDgQObOurh2d2YH07+eDo3xQBsNAM2GRhliz6wFXGi1thKQ4bN6B0xDd6C3tBsjdr3obsCl3Q==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-3.0.1.tgz",
+      "integrity": "sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/type": "^1.5.2",
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/type": "^2.0.0",
         "yoctocolors-cjs": "^2.1.2"
       },
       "engines": {
@@ -1305,15 +1293,15 @@
       }
     },
     "node_modules/@inquirer/search": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.0.7.tgz",
-      "integrity": "sha512-p1wpV+3gd1eST/o5N3yQpYEdFNCzSP0Klrl+5bfD3cTTz8BGG6nf4Z07aBW0xjlKIj1Rp0y3x/X4cZYi6TfcLw==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-2.0.1.tgz",
+      "integrity": "sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/figures": "^1.0.5",
-        "@inquirer/type": "^1.5.2",
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/figures": "^1.0.6",
+        "@inquirer/type": "^2.0.0",
         "yoctocolors-cjs": "^2.1.2"
       },
       "engines": {
@@ -1321,15 +1309,15 @@
       }
     },
     "node_modules/@inquirer/select": {
-      "version": "2.4.7",
-      "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.4.7.tgz",
-      "integrity": "sha512-JH7XqPEkBpNWp3gPCqWqY8ECbyMoFcCZANlL6pV9hf59qK6dGmkOlx1ydyhY+KZ0c5X74+W6Mtp+nm2QX0/MAQ==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-3.0.1.tgz",
+      "integrity": "sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@inquirer/core": "^9.0.10",
-        "@inquirer/figures": "^1.0.5",
-        "@inquirer/type": "^1.5.2",
+        "@inquirer/core": "^9.2.1",
+        "@inquirer/figures": "^1.0.6",
+        "@inquirer/type": "^2.0.0",
         "ansi-escapes": "^4.3.2",
         "yoctocolors-cjs": "^2.1.2"
       },
@@ -1338,9 +1326,9 @@
       }
     },
     "node_modules/@inquirer/type": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz",
-      "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz",
+      "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1369,9 +1357,9 @@
       }
     },
     "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1394,6 +1382,31 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
+    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@isaacs/cliui/node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
@@ -1482,9 +1495,9 @@
       }
     },
     "node_modules/@mdn/browser-compat-data": {
-      "version": "5.5.40",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.40.tgz",
-      "integrity": "sha512-5hByR+TGX/iKG7Uv3Zk8f+aUftkBcHqWE3Ym229jxm+cRjeJSBZzUKPm6H+p46vaeooql72kydrqpz0B3UrErw==",
+      "version": "5.6.5",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.5.tgz",
+      "integrity": "sha512-5fwVfdYQ/CnsK1r3DiOfhib46gUr8v0aeJaXt+PQ4aYvZNaBB3hg+3fS+OHdnJkNfm6QdBNjgBNdyV+mBMfBOA==",
       "dev": true,
       "license": "CC0-1.0"
     },
@@ -1628,6 +1641,13 @@
         "prettier": "^3.0.0"
       }
     },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@sec-ant/readable-stream": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
@@ -1636,28 +1656,61 @@
       "license": "MIT"
     },
     "node_modules/@shikijs/core": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.12.1.tgz",
-      "integrity": "sha512-biCz/mnkMktImI6hMfMX3H9kOeqsInxWEyCHbSlL8C/2TR1FqfmGxTLRNwYCKsyCyxWLbB8rEqXRVZuyxuLFmA==",
+      "version": "1.22.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.22.2.tgz",
+      "integrity": "sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/hast": "^3.0.4"
+        "@shikijs/engine-javascript": "1.22.2",
+        "@shikijs/engine-oniguruma": "1.22.2",
+        "@shikijs/types": "1.22.2",
+        "@shikijs/vscode-textmate": "^9.3.0",
+        "@types/hast": "^3.0.4",
+        "hast-util-to-html": "^9.0.3"
       }
     },
-    "node_modules/@sindresorhus/is": {
-      "version": "5.6.0",
-      "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
-      "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==",
+    "node_modules/@shikijs/engine-javascript": {
+      "version": "1.22.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.22.2.tgz",
+      "integrity": "sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=14.16"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/is?sponsor=1"
+      "dependencies": {
+        "@shikijs/types": "1.22.2",
+        "@shikijs/vscode-textmate": "^9.3.0",
+        "oniguruma-to-js": "0.4.3"
+      }
+    },
+    "node_modules/@shikijs/engine-oniguruma": {
+      "version": "1.22.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.22.2.tgz",
+      "integrity": "sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "1.22.2",
+        "@shikijs/vscode-textmate": "^9.3.0"
       }
     },
+    "node_modules/@shikijs/types": {
+      "version": "1.22.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.22.2.tgz",
+      "integrity": "sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/vscode-textmate": "^9.3.0",
+        "@types/hast": "^3.0.4"
+      }
+    },
+    "node_modules/@shikijs/vscode-textmate": {
+      "version": "9.3.0",
+      "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz",
+      "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@sindresorhus/merge-streams": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
@@ -1672,15 +1725,15 @@
       }
     },
     "node_modules/@stryker-mutator/api": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-8.4.0.tgz",
-      "integrity": "sha512-VccQ0s4WOxVkIN0slBNM4CIo5jMf46Mc6gazwIWyyng/MvjuEaXO/yYl3ihL9wFww41FDKXiTy3alOc4WWyIVQ==",
+      "version": "8.6.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/api/-/api-8.6.0.tgz",
+      "integrity": "sha512-iEZYV40zpSJBDXombffbLuEVr0j/rJseEgmDcfGJQfSc0yxuEg7+MEFRweUQCaJICXu+2A10o9TnCWTyqK5OKg==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "mutation-testing-metrics": "3.1.1",
-        "mutation-testing-report-schema": "3.1.1",
-        "tslib": "~2.6.3",
+        "mutation-testing-metrics": "3.3.0",
+        "mutation-testing-report-schema": "3.3.0",
+        "tslib": "~2.7.0",
         "typed-inject": "~4.0.0"
       },
       "engines": {
@@ -1688,39 +1741,39 @@
       }
     },
     "node_modules/@stryker-mutator/core": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-8.4.0.tgz",
-      "integrity": "sha512-vqdggnLFpr6uG/JOwiRYmk62xDJmTrj42gx7Kvth1AAj8txIVeCxcmh0o6gMG31vS22NGkkSzW8uYIxT/gfyKg==",
+      "version": "8.6.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/core/-/core-8.6.0.tgz",
+      "integrity": "sha512-ZuXDf/qd9UBSmqRybbnHKm8FGkYJH6tSY0yZ6LRezWknpHlNX+rQ1NMqVaT8i+Ay1BIZUArVUSRcbI8DOwIdlQ==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@inquirer/prompts": "^5.3.6",
-        "@stryker-mutator/api": "8.4.0",
-        "@stryker-mutator/instrumenter": "8.4.0",
-        "@stryker-mutator/util": "8.4.0",
+        "@inquirer/prompts": "^6.0.0",
+        "@stryker-mutator/api": "8.6.0",
+        "@stryker-mutator/instrumenter": "8.6.0",
+        "@stryker-mutator/util": "8.6.0",
         "ajv": "~8.17.1",
         "chalk": "~5.3.0",
         "commander": "~12.1.0",
         "diff-match-patch": "1.0.5",
-        "emoji-regex": "~10.3.0",
-        "execa": "~9.3.0",
+        "emoji-regex": "~10.4.0",
+        "execa": "~9.4.0",
         "file-url": "~4.0.0",
         "get-port": "~7.1.0",
         "lodash.groupby": "~4.6.0",
         "log4js": "~6.9.1",
         "minimatch": "~9.0.5",
-        "mutation-testing-elements": "3.1.1",
-        "mutation-testing-metrics": "3.1.1",
-        "mutation-testing-report-schema": "3.1.1",
-        "npm-run-path": "~5.3.0",
+        "mutation-testing-elements": "3.3.0",
+        "mutation-testing-metrics": "3.3.0",
+        "mutation-testing-report-schema": "3.3.0",
+        "npm-run-path": "~6.0.0",
         "progress": "~2.0.3",
         "rxjs": "~7.8.1",
         "semver": "^7.6.3",
         "source-map": "~0.7.4",
         "tree-kill": "~1.2.2",
-        "tslib": "2.6.3",
+        "tslib": "2.7.0",
         "typed-inject": "~4.0.0",
-        "typed-rest-client": "~2.0.2"
+        "typed-rest-client": "~2.1.0"
       },
       "bin": {
         "stryker": "bin/stryker.js"
@@ -1730,9 +1783,9 @@
       }
     },
     "node_modules/@stryker-mutator/instrumenter": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-8.4.0.tgz",
-      "integrity": "sha512-thLblaLuH+hIWk53bVxFJ9gfpnlOY+zNSxGV09986QoztYXejSSqRUWe8cxPc7PKF5xVewEh4yMTJaewX7Nzfw==",
+      "version": "8.6.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/instrumenter/-/instrumenter-8.6.0.tgz",
+      "integrity": "sha512-ynRfpURhuUu9aJLDw2osfnzCTfPGou8hZnqpPuYv6m5UbiGX5+YKC4U35uYSBYA7hlwGqsSTOdClhypi1ASrKg==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -1742,8 +1795,8 @@
         "@babel/plugin-proposal-decorators": "~7.24.7",
         "@babel/plugin-proposal-explicit-resource-management": "^7.24.7",
         "@babel/preset-typescript": "~7.24.7",
-        "@stryker-mutator/api": "8.4.0",
-        "@stryker-mutator/util": "8.4.0",
+        "@stryker-mutator/api": "8.6.0",
+        "@stryker-mutator/util": "8.6.0",
         "angular-html-parser": "~6.0.2",
         "semver": "~7.6.3",
         "weapon-regex": "~1.3.2"
@@ -1753,59 +1806,42 @@
       }
     },
     "node_modules/@stryker-mutator/mocha-runner": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-8.4.0.tgz",
-      "integrity": "sha512-7A83OFZO7vx6U63TF3NLGzEVWZeEPFA9NR925KaX+4u/5pl8UbAP9L3jJLnPQrkZJnFivb4KXXaHZQkaKqcX/A==",
+      "version": "8.6.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/mocha-runner/-/mocha-runner-8.6.0.tgz",
+      "integrity": "sha512-ZUk6c/DJTe270KdPuGZK2MTot94aVe4byFZ8myMmZvRbt4wHK5JTm37oCrQf1sj4SXuDMpHUXGIk/aRTwLrZaQ==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@stryker-mutator/api": "8.4.0",
-        "@stryker-mutator/util": "8.4.0",
-        "tslib": "~2.6.3"
+        "@stryker-mutator/api": "8.6.0",
+        "@stryker-mutator/util": "8.6.0",
+        "tslib": "~2.7.0"
       },
       "engines": {
         "node": ">=18.0.0"
       },
       "peerDependencies": {
-        "@stryker-mutator/core": "~8.4.0",
+        "@stryker-mutator/core": "~8.6.0",
         "mocha": ">= 7.2 < 11"
       }
     },
     "node_modules/@stryker-mutator/util": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-8.4.0.tgz",
-      "integrity": "sha512-dvDBmIrKpkqICO/7kcmfTzs+dsS1dA61q6XbbF+uB+WSsNLUHMfft0XKQg6BwLY+NLlis4pFN5CJz6gI7bfwxA==",
+      "version": "8.6.0",
+      "resolved": "https://registry.npmjs.org/@stryker-mutator/util/-/util-8.6.0.tgz",
+      "integrity": "sha512-SruyNDhioBTR7Eq1sSxr9YYBLGHF5s999W63xcOJ+4RdRwyLwNUX1H8DiYnjQC5vs5X/Ap/UsmGwyVnv1ObSnQ==",
       "dev": true,
       "license": "Apache-2.0"
     },
-    "node_modules/@szmarczak/http-timer": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
-      "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "defer-to-connect": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=14.16"
-      }
-    },
-    "node_modules/@types/eslint": {
-      "version": "9.6.0",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
-      "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
+    "node_modules/@types/estree": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+      "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "*",
-        "@types/json-schema": "*"
-      }
+      "license": "MIT"
     },
-    "node_modules/@types/estree": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+    "node_modules/@types/firefox-webext-browser": {
+      "version": "120.0.4",
+      "resolved": "https://registry.npmjs.org/@types/firefox-webext-browser/-/firefox-webext-browser-120.0.4.tgz",
+      "integrity": "sha512-lBrpf08xhiZBigrtdQfUaqX1UauwZ+skbFiL8u2Tdra/rklkKadYmIzTwkNZSWtuZ7OKpFqbE2HHfDoFqvZf6w==",
       "dev": true,
       "license": "MIT"
     },
@@ -1819,13 +1855,6 @@
         "@types/unist": "*"
       }
     },
-    "node_modules/@types/http-cache-semantics": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
-      "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@types/json-schema": {
       "version": "7.0.15",
       "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -1840,6 +1869,16 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/@types/mdast": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+      "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
     "node_modules/@types/minimatch": {
       "version": "3.0.5",
       "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
@@ -1855,9 +1894,9 @@
       "license": "MIT"
     },
     "node_modules/@types/mocha": {
-      "version": "10.0.7",
-      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz",
-      "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==",
+      "version": "10.0.9",
+      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz",
+      "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==",
       "dev": true,
       "license": "MIT"
     },
@@ -1872,13 +1911,13 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.2.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
-      "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
+      "version": "22.9.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
+      "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "undici-types": "~6.13.0"
+        "undici-types": "~6.19.8"
       }
     },
     "node_modules/@types/normalize-package-data": {
@@ -1889,9 +1928,9 @@
       "license": "MIT"
     },
     "node_modules/@types/unist": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
-      "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+      "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
       "dev": true,
       "license": "MIT"
     },
@@ -1943,9 +1982,9 @@
       }
     },
     "node_modules/acorn": {
-      "version": "8.12.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
-      "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+      "version": "8.14.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+      "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -1966,40 +2005,36 @@
       }
     },
     "node_modules/addons-linter": {
-      "version": "6.33.0",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.33.0.tgz",
-      "integrity": "sha512-FOXyI3v4HTUFCmKdyUH2eC1a6Efekuknq7yqMEIX1pl05USZuUtVO/0Mh+ZbA28Am26S62G5RbQghK7GTxtLhQ==",
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-7.3.0.tgz",
+      "integrity": "sha512-10FNXtpp6nN0hUya4yzrKWVs/82VgqNVUnGI5xsiU6B5oxk8uzGN0s7QaPOOURT5qp67KetXaw8a+lb6C6IydQ==",
       "dev": true,
       "license": "MPL-2.0",
       "dependencies": {
         "@fluent/syntax": "0.19.0",
-        "@mdn/browser-compat-data": "5.5.40",
+        "@fregante/relaxed-json": "2.0.0",
+        "@mdn/browser-compat-data": "5.6.5",
         "addons-moz-compare": "1.3.0",
-        "addons-scanner-utils": "9.11.0",
+        "addons-scanner-utils": "9.12.0",
         "ajv": "8.17.1",
         "chalk": "4.1.2",
         "cheerio": "1.0.0-rc.12",
         "columnify": "1.6.0",
         "common-tags": "1.8.2",
         "deepmerge": "4.3.1",
-        "eslint": "8.57.0",
-        "eslint-plugin-no-unsanitized": "4.0.2",
-        "eslint-visitor-keys": "4.0.0",
-        "espree": "10.1.0",
+        "eslint": "8.57.1",
+        "eslint-plugin-no-unsanitized": "4.1.2",
+        "eslint-visitor-keys": "4.1.0",
+        "espree": "10.2.0",
         "esprima": "4.0.1",
         "fast-json-patch": "3.1.1",
-        "glob": "11.0.0",
         "image-size": "1.1.1",
-        "is-mergeable-object": "1.1.1",
         "jed": "1.1.1",
         "json-merge-patch": "1.0.2",
         "os-locale": "5.0.0",
         "pino": "8.20.0",
-        "relaxed-json": "1.0.3",
         "semver": "7.6.3",
-        "sha.js": "2.4.11",
         "source-map-support": "0.5.21",
-        "tosource": "1.0.0",
         "upath": "2.0.1",
         "yargs": "17.7.2",
         "yauzl": "2.10.0"
@@ -2008,99 +2043,414 @@
         "addons-linter": "bin/addons-linter"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=18.0.0"
       }
     },
-    "node_modules/addons-linter/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+    "node_modules/addons-linter/node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/addons-linter/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+    "node_modules/addons-linter/node_modules/@eslint/eslintrc/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "has-flag": "^4.0.0"
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       },
-      "engines": {
-        "node": ">=8"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/addons-moz-compare": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz",
-      "integrity": "sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==",
+    "node_modules/addons-linter/node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
       "dev": true,
-      "license": "MPL-2.0"
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
     },
-    "node_modules/addons-scanner-utils": {
-      "version": "9.11.0",
-      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.11.0.tgz",
-      "integrity": "sha512-X95V8ymnue9EHmOLz3zJTGHvHDFlWKiavlH+kJKOlv2sJDWFvD3TWeJMHJgxS9GKOqT/545mOXvX3vuuGGum+g==",
+    "node_modules/addons-linter/node_modules/@eslint/eslintrc/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
       "dev": true,
-      "license": "MPL-2.0",
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "@types/yauzl": "2.10.3",
-        "common-tags": "1.8.2",
-        "first-chunk-stream": "3.0.0",
-        "strip-bom-stream": "4.0.0",
-        "upath": "2.0.1",
-        "yauzl": "2.10.0"
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
       },
-      "peerDependencies": {
-        "body-parser": "1.20.2",
-        "express": "4.19.2",
-        "node-fetch": "2.6.11",
-        "safe-compare": "1.1.4"
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
-      "peerDependenciesMeta": {
-        "body-parser": {
-          "optional": true
-        },
-        "express": {
-          "optional": true
-        },
-        "node-fetch": {
-          "optional": true
-        },
-        "safe-compare": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/adm-zip": {
-      "version": "0.5.15",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.15.tgz",
-      "integrity": "sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==",
+    "node_modules/addons-linter/node_modules/@eslint/js": {
+      "version": "8.57.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+      "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=12.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
-    "node_modules/agent-base": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
-      "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+    "node_modules/addons-linter/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "debug": "^4.3.4"
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/addons-linter/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/addons-linter/node_modules/doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/addons-linter/node_modules/eslint": {
+      "version": "8.57.1",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+      "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/js": "8.57.1",
+        "@humanwhocodes/config-array": "^0.13.0",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@nodelib/fs.walk": "^1.2.8",
+        "@ungap/structured-clone": "^1.2.0",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
+        "esquery": "^1.4.2",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "globals": "^13.19.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3",
+        "strip-ansi": "^6.0.1",
+        "text-table": "^0.2.0"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/addons-linter/node_modules/eslint-scope": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/addons-linter/node_modules/eslint/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/addons-linter/node_modules/eslint/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/addons-linter/node_modules/eslint/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/addons-linter/node_modules/file-entry-cache": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "flat-cache": "^3.0.4"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/addons-linter/node_modules/flat-cache": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.3",
+        "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/addons-linter/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/addons-linter/node_modules/is-path-inside": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/addons-linter/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/addons-linter/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/addons-linter/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/addons-linter/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/addons-moz-compare": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz",
+      "integrity": "sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==",
+      "dev": true,
+      "license": "MPL-2.0"
+    },
+    "node_modules/addons-scanner-utils": {
+      "version": "9.12.0",
+      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.12.0.tgz",
+      "integrity": "sha512-Nn+mOgJhdSZKkycXd5GYfSfoyT1lEGbCVoCBKriEFceuP0dJxVBuFwuRD8+PuXegQQBw7COTS5DwM4nj+bK8Mg==",
+      "dev": true,
+      "license": "MPL-2.0",
+      "dependencies": {
+        "@types/yauzl": "2.10.3",
+        "common-tags": "1.8.2",
+        "first-chunk-stream": "3.0.0",
+        "strip-bom-stream": "4.0.0",
+        "upath": "2.0.1",
+        "yauzl": "2.10.0"
+      },
+      "peerDependencies": {
+        "body-parser": "1.20.3",
+        "express": "4.21.0",
+        "node-fetch": "2.6.11",
+        "safe-compare": "1.1.4"
+      },
+      "peerDependenciesMeta": {
+        "body-parser": {
+          "optional": true
+        },
+        "express": {
+          "optional": true
+        },
+        "node-fetch": {
+          "optional": true
+        },
+        "safe-compare": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/adm-zip": {
+      "version": "0.5.16",
+      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
+      "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.0"
+      }
+    },
+    "node_modules/agent-base": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+      "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^4.3.4"
       },
       "engines": {
         "node": ">= 14"
@@ -2171,28 +2521,6 @@
         "string-width": "^4.1.0"
       }
     },
-    "node_modules/ansi-align/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/ansi-align/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/ansi-colors": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
@@ -2245,13 +2573,6 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/any-promise": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
-      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/anymatch": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -2453,16 +2774,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/at-least-node": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
-      "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
     "node_modules/atomic-sleep": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
@@ -2473,6 +2784,16 @@
         "node": ">=8.0.0"
       }
     },
+    "node_modules/atomically": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz",
+      "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==",
+      "dev": true,
+      "dependencies": {
+        "stubborn-fs": "^1.2.5",
+        "when-exit": "^2.1.1"
+      }
+    },
     "node_modules/available-typed-arrays": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -2568,32 +2889,32 @@
       "license": "ISC"
     },
     "node_modules/boxen": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz",
-      "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==",
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz",
+      "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "ansi-align": "^3.0.1",
-        "camelcase": "^7.0.1",
-        "chalk": "^5.2.0",
+        "camelcase": "^8.0.0",
+        "chalk": "^5.3.0",
         "cli-boxes": "^3.0.0",
-        "string-width": "^5.1.2",
-        "type-fest": "^2.13.0",
-        "widest-line": "^4.0.1",
-        "wrap-ansi": "^8.1.0"
+        "string-width": "^7.2.0",
+        "type-fest": "^4.21.0",
+        "widest-line": "^5.0.0",
+        "wrap-ansi": "^9.0.0"
       },
       "engines": {
-        "node": ">=14.16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/boxen/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2617,13 +2938,31 @@
       }
     },
     "node_modules/boxen/node_modules/camelcase": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
-      "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
+      "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=14.16"
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/boxen/node_modules/string-width": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^10.3.0",
+        "get-east-asian-width": "^1.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -2646,31 +2985,31 @@
       }
     },
     "node_modules/boxen/node_modules/type-fest": {
-      "version": "2.19.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
-      "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+      "version": "4.26.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz",
+      "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==",
       "dev": true,
       "license": "(MIT OR CC0-1.0)",
       "engines": {
-        "node": ">=12.20"
+        "node": ">=16"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/boxen/node_modules/wrap-ansi": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
-      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
+      "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ansi-styles": "^6.1.0",
-        "string-width": "^5.0.1",
-        "strip-ansi": "^7.0.1"
+        "ansi-styles": "^6.2.1",
+        "string-width": "^7.0.0",
+        "strip-ansi": "^7.1.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
@@ -2720,9 +3059,9 @@
       "license": "ISC"
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.2",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
+      "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
       "dev": true,
       "funding": [
         {
@@ -2740,10 +3079,10 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001669",
+        "electron-to-chromium": "^1.5.41",
         "node-releases": "^2.0.18",
-        "update-browserslist-db": "^1.1.0"
+        "update-browserslist-db": "^1.1.1"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -2823,67 +3162,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/bunyan": {
-      "version": "1.8.15",
-      "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
-      "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==",
-      "dev": true,
-      "engines": [
-        "node >=0.10.0"
-      ],
-      "license": "MIT",
-      "bin": {
-        "bunyan": "bin/bunyan"
-      },
-      "optionalDependencies": {
-        "dtrace-provider": "~0.8",
-        "moment": "^2.19.3",
-        "mv": "~2",
-        "safe-json-stringify": "~1"
-      }
-    },
-    "node_modules/cacheable-lookup": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
-      "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=14.16"
-      }
-    },
-    "node_modules/cacheable-request": {
-      "version": "10.2.14",
-      "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
-      "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/http-cache-semantics": "^4.0.2",
-        "get-stream": "^6.0.1",
-        "http-cache-semantics": "^4.1.1",
-        "keyv": "^4.5.3",
-        "mimic-response": "^4.0.0",
-        "normalize-url": "^8.0.0",
-        "responselike": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=14.16"
-      }
-    },
-    "node_modules/cacheable-request/node_modules/get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/call-bind": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
@@ -2943,9 +3221,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001651",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
-      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
+      "version": "1.0.30001679",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001679.tgz",
+      "integrity": "sha512-j2YqID/YwpLnKzCmBOS4tlZdWprXm3ZmQLBH9ZBXFOhoxLA46fwyBvx6toCBWBmnuwUY/qB3kEU6gFx8qgCroA==",
       "dev": true,
       "funding": [
         {
@@ -2963,6 +3241,17 @@
       ],
       "license": "CC-BY-4.0"
     },
+    "node_modules/ccount": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+      "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/chalk": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
@@ -2976,6 +3265,28 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
+    "node_modules/character-entities-html4": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+      "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/character-entities-legacy": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+      "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/chardet": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
@@ -3072,16 +3383,16 @@
       }
     },
     "node_modules/chrome-launcher": {
-      "version": "0.15.1",
-      "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz",
-      "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.1.2.tgz",
+      "integrity": "sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
         "@types/node": "*",
         "escape-string-regexp": "^4.0.0",
         "is-wsl": "^2.2.0",
-        "lighthouse-logger": "^1.0.0"
+        "lighthouse-logger": "^2.0.1"
       },
       "bin": {
         "print-chrome-path": "bin/print-chrome-path.js"
@@ -3142,19 +3453,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/cli-spinners": {
-      "version": "2.9.2",
-      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
-      "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/cli-width": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
@@ -3180,28 +3478,6 @@
         "node": ">=12"
       }
     },
-    "node_modules/cliui/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/cliui/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/cliui/node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -3271,6 +3547,17 @@
         "node": ">=8.0.0"
       }
     },
+    "node_modules/comma-separated-tokens": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+      "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/commander": {
       "version": "12.1.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
@@ -3369,45 +3656,24 @@
       }
     },
     "node_modules/configstore": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz",
-      "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz",
+      "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "dot-prop": "^6.0.1",
-        "graceful-fs": "^4.2.6",
-        "unique-string": "^3.0.0",
-        "write-file-atomic": "^3.0.3",
-        "xdg-basedir": "^5.0.1"
+        "atomically": "^2.0.3",
+        "dot-prop": "^9.0.0",
+        "graceful-fs": "^4.2.11",
+        "xdg-basedir": "^5.1.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/yeoman/configstore?sponsor=1"
       }
     },
-    "node_modules/configstore/node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/configstore/node_modules/write-file-atomic": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
-      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "imurmurhash": "^0.1.4",
-        "is-typedarray": "^1.0.0",
-        "signal-exit": "^3.0.2",
-        "typedarray-to-buffer": "^3.1.5"
-      }
-    },
     "node_modules/consola": {
       "version": "2.15.3",
       "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
@@ -3423,13 +3689,13 @@
       "license": "MIT"
     },
     "node_modules/core-js-compat": {
-      "version": "3.38.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
-      "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
+      "version": "3.39.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz",
+      "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.3"
+        "browserslist": "^4.24.2"
       },
       "funding": {
         "type": "opencollective",
@@ -3481,9 +3747,9 @@
       }
     },
     "node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
+      "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3495,39 +3761,10 @@
         "node": ">= 8"
       }
     },
-    "node_modules/crypto-random-string": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz",
-      "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "type-fest": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/crypto-random-string/node_modules/type-fest": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
-      "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
-      "dev": true,
-      "license": "(MIT OR CC0-1.0)",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/css-functions-list": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
-      "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+      "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3552,13 +3789,13 @@
       }
     },
     "node_modules/css-tree": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
-      "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.0.1.tgz",
+      "integrity": "sha512-8Fxxv+tGhORlshCdCwnNJytvlvq46sOLSYEx2ZIGurahWvMucSRnyjPA3AmrMq4VPRYbHVpWj5VkiVasrM2H4Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "mdn-data": "2.0.30",
+        "mdn-data": "2.12.1",
         "source-map-js": "^1.0.1"
       },
       "engines": {
@@ -3591,16 +3828,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/data-uri-to-buffer": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
-      "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 12"
-      }
-    },
     "node_modules/data-view-buffer": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
@@ -3673,13 +3900,13 @@
       "license": "MIT"
     },
     "node_modules/debug": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ms": "2.1.2"
+        "ms": "^2.1.3"
       },
       "engines": {
         "node": ">=6.0"
@@ -3727,35 +3954,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/decompress-response": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
-      "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "mimic-response": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/decompress-response/node_modules/mimic-response": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
-      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/deep-extend": {
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
@@ -3879,6 +4077,35 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/default-browser/node_modules/npm-run-path": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+      "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/default-browser/node_modules/path-key": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/default-browser/node_modules/signal-exit": {
       "version": "3.0.7",
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -3912,16 +4139,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/defer-to-connect": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
-      "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/define-data-property": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -3971,6 +4188,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/dequal": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/des.js": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz",
@@ -3982,6 +4209,20 @@
         "minimalistic-assert": "^1.0.0"
       }
     },
+    "node_modules/devlop": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+      "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "dequal": "^2.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/diff": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
@@ -4013,16 +4254,16 @@
       }
     },
     "node_modules/doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
         "esutils": "^2.0.2"
       },
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=0.10.0"
       }
     },
     "node_modules/dom-serializer": {
@@ -4085,34 +4326,32 @@
       }
     },
     "node_modules/dot-prop": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
-      "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz",
+      "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "is-obj": "^2.0.0"
+        "type-fest": "^4.18.2"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/dtrace-provider": {
-      "version": "0.8.8",
-      "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
-      "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
+    "node_modules/dot-prop/node_modules/type-fest": {
+      "version": "4.26.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz",
+      "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==",
       "dev": true,
-      "hasInstallScript": true,
-      "license": "BSD-2-Clause",
-      "optional": true,
-      "dependencies": {
-        "nan": "^2.14.0"
-      },
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
-        "node": ">=0.10"
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/eastasianwidth": {
@@ -4123,16 +4362,16 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.6",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
-      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
+      "version": "1.5.55",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz",
+      "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==",
       "dev": true,
       "license": "ISC"
     },
     "node_modules/emoji-regex": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
-      "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
+      "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
       "dev": true,
       "license": "MIT"
     },
@@ -4348,9 +4587,9 @@
       "license": "MIT"
     },
     "node_modules/escalade": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
-      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -4384,59 +4623,64 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
-      "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz",
+      "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.57.0",
-        "@humanwhocodes/config-array": "^0.11.14",
+        "@eslint-community/regexpp": "^4.12.1",
+        "@eslint/config-array": "^0.18.0",
+        "@eslint/core": "^0.7.0",
+        "@eslint/eslintrc": "^3.1.0",
+        "@eslint/js": "9.14.0",
+        "@eslint/plugin-kit": "^0.2.0",
+        "@humanfs/node": "^0.16.6",
         "@humanwhocodes/module-importer": "^1.0.1",
-        "@nodelib/fs.walk": "^1.2.8",
-        "@ungap/structured-clone": "^1.2.0",
+        "@humanwhocodes/retry": "^0.4.0",
+        "@types/estree": "^1.0.6",
+        "@types/json-schema": "^7.0.15",
         "ajv": "^6.12.4",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
         "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.2.2",
-        "eslint-visitor-keys": "^3.4.3",
-        "espree": "^9.6.1",
-        "esquery": "^1.4.2",
+        "eslint-scope": "^8.2.0",
+        "eslint-visitor-keys": "^4.2.0",
+        "espree": "^10.3.0",
+        "esquery": "^1.5.0",
         "esutils": "^2.0.2",
         "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
+        "file-entry-cache": "^8.0.0",
         "find-up": "^5.0.0",
         "glob-parent": "^6.0.2",
-        "globals": "^13.19.0",
-        "graphemer": "^1.4.0",
         "ignore": "^5.2.0",
         "imurmurhash": "^0.1.4",
         "is-glob": "^4.0.0",
-        "is-path-inside": "^3.0.3",
-        "js-yaml": "^4.1.0",
         "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
         "lodash.merge": "^4.6.2",
         "minimatch": "^3.1.2",
         "natural-compare": "^1.4.0",
         "optionator": "^0.9.3",
-        "strip-ansi": "^6.0.1",
         "text-table": "^0.2.0"
       },
       "bin": {
         "eslint": "bin/eslint.js"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint"
+        "url": "https://eslint.org/donate"
+      },
+      "peerDependencies": {
+        "jiti": "*"
+      },
+      "peerDependenciesMeta": {
+        "jiti": {
+          "optional": true
+        }
       }
     },
     "node_modules/eslint-compat-utils": {
@@ -4478,9 +4722,9 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
-      "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
+      "version": "2.12.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4506,16 +4750,16 @@
       }
     },
     "node_modules/eslint-plugin-array-func": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-4.0.0.tgz",
-      "integrity": "sha512-p3NY2idNIvgmQLF2/62ZskYt8gOuUgQ51smRc3Lh7FtSozpNc2sg+lniz9VaCagLZHEZTl8qGJKqE7xy8O/D/g==",
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-5.0.2.tgz",
+      "integrity": "sha512-iyLex2+pTcxHZ6OLL80oMy+CtffpJ9j6A/57VQi1VN5bK1IS/0o+mWvezDHeAlwXjn6ksRO9L5SGU329BBuY8A==",
       "dev": true,
       "license": "MIT",
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "peerDependencies": {
-        "eslint": ">=8.40.0"
+        "eslint": ">=8.51.0"
       }
     },
     "node_modules/eslint-plugin-es-x": {
@@ -4571,35 +4815,37 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.29.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
-      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+      "version": "2.31.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "array-includes": "^3.1.7",
-        "array.prototype.findlastindex": "^1.2.3",
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.8",
+        "array.prototype.findlastindex": "^1.2.5",
         "array.prototype.flat": "^1.3.2",
         "array.prototype.flatmap": "^1.3.2",
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.8.0",
-        "hasown": "^2.0.0",
-        "is-core-module": "^2.13.1",
+        "eslint-module-utils": "^2.12.0",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
         "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.7",
-        "object.groupby": "^1.0.1",
-        "object.values": "^1.1.7",
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.0",
         "semver": "^6.3.1",
+        "string.prototype.trimend": "^1.0.8",
         "tsconfig-paths": "^3.15.0"
       },
       "engines": {
         "node": ">=4"
       },
       "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
       }
     },
     "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
@@ -4623,19 +4869,6 @@
         "ms": "^2.1.1"
       }
     },
-    "node_modules/eslint-plugin-import/node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/eslint-plugin-import/node_modules/minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -4660,16 +4893,16 @@
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
-      "version": "50.0.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.0.1.tgz",
-      "integrity": "sha512-UayhAysIk1Du8InV27WMbV4AMSJSu60+bekmeuGK2OUy4QJSFPr1srYT6AInykGkmMdRuHfDX6Q0tJEr8BtDtg==",
+      "version": "50.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.4.3.tgz",
+      "integrity": "sha512-uWtwFxGRv6B8sU63HZM5dAGDhgsatb+LONwmILZJhdRALLOkCX2HFZhdL/Kw2ls8SQMAVEfK+LmnEfxInRN8HA==",
       "dev": true,
       "license": "BSD-3-Clause",
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.46.0",
+        "@es-joy/jsdoccomment": "~0.49.0",
         "are-docs-informative": "^0.0.2",
         "comment-parser": "1.4.1",
-        "debug": "^4.3.5",
+        "debug": "^4.3.6",
         "escape-string-regexp": "^4.0.0",
         "espree": "^10.1.0",
         "esquery": "^1.6.0",
@@ -4733,20 +4966,20 @@
       }
     },
     "node_modules/eslint-plugin-n": {
-      "version": "17.10.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.2.tgz",
-      "integrity": "sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==",
+      "version": "17.13.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.13.1.tgz",
+      "integrity": "sha512-97qzhk1z3DdSJNCqT45EslwCu5+LB9GDadSyBItgKUfGsXAmN/aa7LRQ0ZxHffUxUzvgbTPJL27/pE9ZQWHy7A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "enhanced-resolve": "^5.17.0",
-        "eslint-plugin-es-x": "^7.5.0",
-        "get-tsconfig": "^4.7.0",
-        "globals": "^15.8.0",
-        "ignore": "^5.2.4",
+        "@eslint-community/eslint-utils": "^4.4.1",
+        "enhanced-resolve": "^5.17.1",
+        "eslint-plugin-es-x": "^7.8.0",
+        "get-tsconfig": "^4.8.1",
+        "globals": "^15.11.0",
+        "ignore": "^5.3.2",
         "minimatch": "^9.0.5",
-        "semver": "^7.5.3"
+        "semver": "^7.6.3"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4758,27 +4991,14 @@
         "eslint": ">=8.23.0"
       }
     },
-    "node_modules/eslint-plugin-n/node_modules/globals": {
-      "version": "15.9.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
-      "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/eslint-plugin-no-unsanitized": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz",
-      "integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.1.2.tgz",
+      "integrity": "sha512-ydF3PMFKEIkP71ZbLHFvu6/FW8SvRv6VV/gECfrQkqyD5+5oCAtPz8ZHy0GRuMDtNe2jsNdPCQXX4LSbkapAVQ==",
       "dev": true,
       "license": "MPL-2.0",
       "peerDependencies": {
-        "eslint": "^6 || ^7 || ^8"
+        "eslint": "^8 || ^9"
       }
     },
     "node_modules/eslint-plugin-promise": {
@@ -4820,19 +5040,19 @@
       }
     },
     "node_modules/eslint-plugin-unicorn": {
-      "version": "55.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-55.0.0.tgz",
-      "integrity": "sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==",
+      "version": "56.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.0.tgz",
+      "integrity": "sha512-aXpddVz/PQMmd69uxO98PA4iidiVNvA0xOtbpUoz1WhBd4RxOQQYqN618v68drY0hmy5uU2jy1bheKEVWBjlPw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.5",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "@eslint-community/eslint-utils": "^4.4.0",
         "ci-info": "^4.0.0",
         "clean-regexp": "^1.0.0",
-        "core-js-compat": "^3.37.0",
-        "esquery": "^1.5.0",
-        "globals": "^15.7.0",
+        "core-js-compat": "^3.38.1",
+        "esquery": "^1.6.0",
+        "globals": "^15.9.0",
         "indent-string": "^4.0.0",
         "is-builtin-module": "^3.2.1",
         "jsesc": "^3.0.2",
@@ -4840,7 +5060,7 @@
         "read-pkg-up": "^7.0.1",
         "regexp-tree": "^0.1.27",
         "regjsparser": "^0.10.0",
-        "semver": "^7.6.1",
+        "semver": "^7.6.3",
         "strip-indent": "^3.0.0"
       },
       "engines": {
@@ -4853,36 +5073,10 @@
         "eslint": ">=8.56.0"
       }
     },
-    "node_modules/eslint-plugin-unicorn/node_modules/globals": {
-      "version": "15.9.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
-      "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint-plugin-unicorn/node_modules/jsesc": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
-      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
+      "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -4890,7 +5084,7 @@
         "estraverse": "^5.2.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -4926,9 +5120,9 @@
       }
     },
     "node_modules/eslint-visitor-keys": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
-      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
+      "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
@@ -4984,50 +5178,34 @@
       }
     },
     "node_modules/eslint/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/eslint/node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "version": "10.3.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+      "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "acorn": "^8.9.0",
+        "acorn": "^8.14.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "type-fest": "^0.20.2"
+        "eslint-visitor-keys": "^4.2.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/eslint/node_modules/json-schema-traverse": {
@@ -5063,29 +5241,16 @@
         "node": ">=8"
       }
     },
-    "node_modules/eslint/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true,
-      "license": "(MIT OR CC0-1.0)",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/espree": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
-      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+      "version": "10.2.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz",
+      "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
         "acorn": "^8.12.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.0.0"
+        "eslint-visitor-keys": "^4.1.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5182,9 +5347,9 @@
       }
     },
     "node_modules/execa": {
-      "version": "9.3.0",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-9.3.0.tgz",
-      "integrity": "sha512-l6JFbqnHEadBoVAVpN5dl2yCyfX28WoBAGaoQcNmLLSedOxTxcn2Qa83s8I/PA5i56vWru2OHOtrwF7Om2vqlg==",
+      "version": "9.4.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-9.4.1.tgz",
+      "integrity": "sha512-5eo/BRqZm3GYce+1jqX/tJ7duA2AnE39i88fuedNFUV8XxGxUpF3aWkBRfbUcjV49gCkvS/pzc0YrCPhaIewdg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5192,10 +5357,10 @@
         "cross-spawn": "^7.0.3",
         "figures": "^6.1.0",
         "get-stream": "^9.0.0",
-        "human-signals": "^7.0.0",
+        "human-signals": "^8.0.0",
         "is-plain-obj": "^4.1.0",
         "is-stream": "^4.0.1",
-        "npm-run-path": "^5.2.0",
+        "npm-run-path": "^6.0.0",
         "pretty-ms": "^9.0.0",
         "signal-exit": "^4.1.0",
         "strip-final-newline": "^4.0.0",
@@ -5292,11 +5457,11 @@
       }
     },
     "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
+      "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==",
       "dev": true,
-      "license": "MIT"
+      "license": "BSD-3-Clause"
     },
     "node_modules/fastest-levenshtein": {
       "version": "1.0.16",
@@ -5328,30 +5493,6 @@
         "pend": "~1.2.0"
       }
     },
-    "node_modules/fetch-blob": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
-      "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/jimmywarting"
-        },
-        {
-          "type": "paypal",
-          "url": "https://paypal.me/jimmywarting"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "node-domexception": "^1.0.0",
-        "web-streams-polyfill": "^3.0.3"
-      },
-      "engines": {
-        "node": "^12.20 || >= 14.13"
-      }
-    },
     "node_modules/figures": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
@@ -5369,16 +5510,16 @@
       }
     },
     "node_modules/file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "flat-cache": "^3.0.4"
+        "flat-cache": "^4.0.0"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": ">=16.0.0"
       }
     },
     "node_modules/file-url": {
@@ -5425,46 +5566,48 @@
       }
     },
     "node_modules/firefox-profile": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.6.0.tgz",
-      "integrity": "sha512-I9rAm1w8U3CdhgO4EzTJsCvgcbvynZn9lOySkZf78wUdUIQH2w9QOKf3pAX+THt2XMSSR3kJSuM8P7bYux9j8g==",
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.7.0.tgz",
+      "integrity": "sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "adm-zip": "~0.5.x",
-        "fs-extra": "~9.0.1",
-        "ini": "~2.0.0",
-        "minimist": "^1.2.5",
-        "xml2js": "^0.5.0"
+        "fs-extra": "^11.2.0",
+        "ini": "^4.1.3",
+        "minimist": "^1.2.8",
+        "xml2js": "^0.6.2"
       },
       "bin": {
         "firefox-profile": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=18"
       }
     },
     "node_modules/firefox-profile/node_modules/fs-extra": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
-      "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
+      "version": "11.2.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "at-least-node": "^1.0.0",
         "graceful-fs": "^4.2.0",
         "jsonfile": "^6.0.1",
-        "universalify": "^1.0.0"
+        "universalify": "^2.0.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=14.14"
       }
     },
     "node_modules/firefox-profile/node_modules/ini": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
-      "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
+      "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": ">=10"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
     "node_modules/firefox-profile/node_modules/jsonfile": {
@@ -5480,7 +5623,7 @@
         "graceful-fs": "^4.1.6"
       }
     },
-    "node_modules/firefox-profile/node_modules/jsonfile/node_modules/universalify": {
+    "node_modules/firefox-profile/node_modules/universalify": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
       "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
@@ -5490,16 +5633,6 @@
         "node": ">= 10.0.0"
       }
     },
-    "node_modules/firefox-profile/node_modules/universalify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
-      "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 10.0.0"
-      }
-    },
     "node_modules/first-chunk-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz",
@@ -5521,18 +5654,17 @@
       }
     },
     "node_modules/flat-cache": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
-      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "flatted": "^3.2.9",
-        "keyv": "^4.5.3",
-        "rimraf": "^3.0.2"
+        "keyv": "^4.5.4"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": ">=16"
       }
     },
     "node_modules/flatted": {
@@ -5543,9 +5675,9 @@
       "license": "ISC"
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.6",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
-      "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+      "version": "1.15.9",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
       "dev": true,
       "funding": [
         {
@@ -5590,29 +5722,6 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/form-data-encoder": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz",
-      "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 14.17"
-      }
-    },
-    "node_modules/formdata-polyfill": {
-      "version": "4.0.10",
-      "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
-      "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fetch-blob": "^3.1.2"
-      },
-      "engines": {
-        "node": ">=12.20.0"
-      }
-    },
     "node_modules/fs-extra": {
       "version": "8.1.0",
       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
@@ -5761,6 +5870,19 @@
         "node": "6.* || 8.* || >= 10.*"
       }
     },
+    "node_modules/get-east-asian-width": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
+      "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/get-intrinsic": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
@@ -5830,9 +5952,9 @@
       }
     },
     "node_modules/get-tsconfig": {
-      "version": "4.7.6",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
-      "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
+      "version": "4.8.1",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz",
+      "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5843,24 +5965,22 @@
       }
     },
     "node_modules/glob": {
-      "version": "11.0.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
-      "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^4.0.1",
-        "minimatch": "^10.0.0",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^2.0.0"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
       },
       "engines": {
-        "node": "20 || >=22"
+        "node": "*"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -5886,46 +6006,54 @@
       "dev": true,
       "license": "BSD-2-Clause"
     },
+    "node_modules/glob/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
     "node_modules/glob/node_modules/minimatch": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
-      "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "brace-expansion": "^2.0.1"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": "20 || >=22"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "node": "*"
       }
     },
-    "node_modules/global-dirs": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
-      "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
+    "node_modules/global-directory": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz",
+      "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ini": "2.0.0"
+        "ini": "4.1.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/global-dirs/node_modules/ini": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
-      "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+    "node_modules/global-directory/node_modules/ini": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
+      "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": ">=10"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
     "node_modules/global-modules": {
@@ -5970,13 +6098,16 @@
       }
     },
     "node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "version": "15.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz",
+      "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/globalthis": {
@@ -6037,45 +6168,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/got": {
-      "version": "12.6.1",
-      "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz",
-      "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@sindresorhus/is": "^5.2.0",
-        "@szmarczak/http-timer": "^5.0.1",
-        "cacheable-lookup": "^7.0.0",
-        "cacheable-request": "^10.2.8",
-        "decompress-response": "^6.0.0",
-        "form-data-encoder": "^2.1.2",
-        "get-stream": "^6.0.1",
-        "http2-wrapper": "^2.1.10",
-        "lowercase-keys": "^3.0.0",
-        "p-cancelable": "^3.0.0",
-        "responselike": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=14.16"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/got?sponsor=1"
-      }
-    },
-    "node_modules/got/node_modules/get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/graceful-fs": {
       "version": "4.2.11",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -6189,19 +6281,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/has-yarn": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz",
-      "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/hasown": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -6215,6 +6294,44 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/hast-util-to-html": {
+      "version": "9.0.3",
+      "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz",
+      "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/unist": "^3.0.0",
+        "ccount": "^2.0.0",
+        "comma-separated-tokens": "^2.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "html-void-elements": "^3.0.0",
+        "mdast-util-to-hast": "^13.0.0",
+        "property-information": "^6.0.0",
+        "space-separated-tokens": "^2.0.0",
+        "stringify-entities": "^4.0.0",
+        "zwitch": "^2.0.4"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-whitespace": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+      "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
     "node_modules/he": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -6284,6 +6401,17 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/html-void-elements": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+      "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/htmlhint": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/htmlhint/-/htmlhint-1.1.4.tgz",
@@ -6304,17 +6432,6 @@
         "htmlhint": "bin/htmlhint"
       }
     },
-    "node_modules/htmlhint/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
     "node_modules/htmlhint/node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -6332,49 +6449,14 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/htmlhint/node_modules/commander": {
-      "version": "9.5.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
-      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || >=14"
-      }
-    },
-    "node_modules/htmlhint/node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.1.1",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/htmlhint/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/htmlhint/node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
+      "license": "MIT",
       "engines": {
-        "node": "*"
+        "node": "^12.20.0 || >=14"
       }
     },
     "node_modules/htmlhint/node_modules/strip-json-comments": {
@@ -6420,13 +6502,6 @@
         "entities": "^4.4.0"
       }
     },
-    "node_modules/http-cache-semantics": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
-      "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
-      "dev": true,
-      "license": "BSD-2-Clause"
-    },
     "node_modules/http-proxy": {
       "version": "1.18.1",
       "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
@@ -6500,33 +6575,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/http2-wrapper": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
-      "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "quick-lru": "^5.1.1",
-        "resolve-alpn": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=10.19.0"
-      }
-    },
-    "node_modules/http2-wrapper/node_modules/quick-lru": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/https-proxy-agent": {
       "version": "7.0.5",
       "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
@@ -6542,9 +6590,9 @@
       }
     },
     "node_modules/human-signals": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-7.0.0.tgz",
-      "integrity": "sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz",
+      "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
@@ -6586,9 +6634,9 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/ignore": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -6635,16 +6683,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/import-lazy": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
-      "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -6838,39 +6876,10 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-ci": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
-      "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ci-info": "^3.2.0"
-      },
-      "bin": {
-        "is-ci": "bin.js"
-      }
-    },
-    "node_modules/is-ci/node_modules/ci-info": {
-      "version": "3.9.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
-      "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/sibiraj-s"
-        }
-      ],
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/is-core-module": {
-      "version": "2.15.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
-      "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6964,6 +6973,22 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-in-ci": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz",
+      "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "is-in-ci": "cli.js"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/is-inside-container": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
@@ -7000,29 +7025,22 @@
       }
     },
     "node_modules/is-installed-globally": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
-      "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz",
+      "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "global-dirs": "^3.0.0",
-        "is-path-inside": "^3.0.2"
+        "global-directory": "^4.0.1",
+        "is-path-inside": "^4.0.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/is-mergeable-object": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz",
-      "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/is-negative-zero": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
@@ -7075,24 +7093,17 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-obj": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
-      "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/is-path-inside": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
+      "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/is-plain-obj": {
@@ -7221,17 +7232,10 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/is-unicode-supported": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz",
-      "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+      "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7274,16 +7278,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/is-yarn-global": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz",
-      "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/isarray": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
@@ -7299,17 +7293,14 @@
       "license": "ISC"
     },
     "node_modules/jackspeak": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz",
-      "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==",
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
       "dev": true,
       "license": "BlueOak-1.0.0",
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
       },
-      "engines": {
-        "node": "20 || >=22"
-      },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
       },
@@ -7325,9 +7316,9 @@
       "license": "MIT"
     },
     "node_modules/jose": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/jose/-/jose-5.4.1.tgz",
-      "integrity": "sha512-U6QajmpV/nhL9SyfAewo000fkiRQ+Yd2H0lBxJJ9apjpOgkOcBQJWOrMo917lxLptdS/n/o/xPzMkXhF46K8hQ==",
+      "version": "5.9.2",
+      "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.2.tgz",
+      "integrity": "sha512-ILI2xx/I57b20sd7rHZvgiiQrmp2mcotwsAH+5ajbpFQbrYVQdNHYlQhoA5cFb78CgtBOxtC05TeA+mcgkuCqQ==",
       "dev": true,
       "license": "MIT",
       "funding": {
@@ -7362,9 +7353,9 @@
       }
     },
     "node_modules/jsdoc-type-pratt-parser": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
-      "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz",
+      "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7372,16 +7363,16 @@
       }
     },
     "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "dev": true,
       "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
     "node_modules/json-buffer": {
@@ -7525,17 +7516,30 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/ky": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.2.tgz",
+      "integrity": "sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/ky?sponsor=1"
+      }
+    },
     "node_modules/latest-version": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz",
-      "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==",
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+      "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "package-json": "^8.1.0"
+        "package-json": "^10.0.0"
       },
       "engines": {
-        "node": ">=14.16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -7579,9 +7583,9 @@
       }
     },
     "node_modules/lighthouse-logger": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz",
-      "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.1.tgz",
+      "integrity": "sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -7744,19 +7748,6 @@
         "node": ">=8.0"
       }
     },
-    "node_modules/lowercase-keys": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
-      "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/lru-cache": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -7826,14 +7817,14 @@
       }
     },
     "node_modules/markdownlint": {
-      "version": "0.34.0",
-      "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.34.0.tgz",
-      "integrity": "sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==",
+      "version": "0.36.1",
+      "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.36.1.tgz",
+      "integrity": "sha512-s73fU2CQN7WCgjhaQUQ8wYESQNzGRNOKDd+3xgVqu8kuTEhmwepd/mxOv1LR2oV046ONrTLBFsM7IoKWNvmy5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "markdown-it": "14.1.0",
-        "markdownlint-micromark": "0.1.9"
+        "markdownlint-micromark": "0.1.12"
       },
       "engines": {
         "node": ">=18"
@@ -7843,9 +7834,9 @@
       }
     },
     "node_modules/markdownlint-micromark": {
-      "version": "0.1.9",
-      "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.9.tgz",
-      "integrity": "sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==",
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.12.tgz",
+      "integrity": "sha512-RlB6EwMGgc0sxcIhOQ2+aq7Zw1V2fBnzbXKGgYK/mVWdT7cz34fteKSwfYeo4rL6+L/q2tyC9QtD/PgZbkdyJQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7873,10 +7864,32 @@
         "url": "https://github.com/sponsors/wooorm"
       }
     },
+    "node_modules/mdast-util-to-hast": {
+      "version": "13.2.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+      "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "trim-lines": "^3.0.0",
+        "unist-util-position": "^5.0.0",
+        "unist-util-visit": "^5.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
     "node_modules/mdn-data": {
-      "version": "2.0.30",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
-      "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.1.tgz",
+      "integrity": "sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q==",
       "dev": true,
       "license": "CC0-1.0"
     },
@@ -7960,9 +7973,9 @@
       }
     },
     "node_modules/metalint": {
-      "version": "0.17.0",
-      "resolved": "https://registry.npmjs.org/metalint/-/metalint-0.17.0.tgz",
-      "integrity": "sha512-j76R59x8wfI9y1j80WtAdknJJntysTs5ddaljFMHQL36R2Xkp9CLAUhfPwYhxOeas/Tjde8uW+pdOz2PqhHwMw==",
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/metalint/-/metalint-0.18.0.tgz",
+      "integrity": "sha512-IjZHf8tODLP2wjYWmQFDfWQQ2uilD2qpf6Of8nxZrYVqjFT/i1TgFp11WNRIteQaocJlLGOmAfMXpgTJxtpEuA==",
       "dev": true,
       "funding": [
         "https://buymeacoffee.com/regseb",
@@ -7977,13 +7990,107 @@
         "metalint": "src/bin/index.js"
       },
       "engines": {
-        "node": ">=20.6.0"
+        "node": ">=22.1.0"
+      }
+    },
+    "node_modules/micromark-util-character": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
+      "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-encode": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
+      "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-sanitize-uri": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
+      "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-encode": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0"
       }
     },
+    "node_modules/micromark-util-symbol": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
+      "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-types": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
+      "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
     "node_modules/micromatch": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
-      "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8017,19 +8124,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/mimic-response": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
-      "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/min-indent": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -8122,9 +8216,9 @@
       }
     },
     "node_modules/mocha": {
-      "version": "10.7.3",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz",
-      "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==",
+      "version": "10.8.2",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
+      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8169,13 +8263,6 @@
         "wrap-ansi": "^7.0.0"
       }
     },
-    "node_modules/mocha/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/mocha/node_modules/glob": {
       "version": "8.1.0",
       "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
@@ -8197,39 +8284,17 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/mocha/node_modules/minimatch": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/mocha/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/mocha/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+    "node_modules/mocha/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
+        "brace-expansion": "^2.0.1"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=10"
       }
     },
     "node_modules/mocha/node_modules/wrap-ansi": {
@@ -8269,21 +8334,10 @@
         "node": ">=10"
       }
     },
-    "node_modules/moment": {
-      "version": "2.30.1",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
-      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true,
       "license": "MIT"
     },
@@ -8344,26 +8398,26 @@
       }
     },
     "node_modules/mutation-testing-elements": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.1.1.tgz",
-      "integrity": "sha512-pYkrxZJh2zqA8XRSjtkoDFuIbezY1/4kIYjxw+DM6h6WL5wntLVKP5y3vQT8miRz/ek/3MP0qm2tuvgPn1rjOQ==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/mutation-testing-elements/-/mutation-testing-elements-3.3.0.tgz",
+      "integrity": "sha512-YMBF+pfOHklpQebOYB/vgd5RXjcRy4TfrSMXaQbUGActfWvXQPJoN6TUtGw/oSv+12rfxXIQhsEd6MNi96yWew==",
       "dev": true,
       "license": "Apache-2.0"
     },
     "node_modules/mutation-testing-metrics": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.1.1.tgz",
-      "integrity": "sha512-AgXM0TAnwD4G5ml0pA4u4qZu6+EuKnFwDHKjwdipgxy6nZRvZzqj2JUOGfFvbTPyjFLeVbAxYMsedPQskxXyxw==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/mutation-testing-metrics/-/mutation-testing-metrics-3.3.0.tgz",
+      "integrity": "sha512-vZEJ84SpK3Rwyk7k28SORS5o6ZDtehwifLPH6fQULrozJqlz2Nj8vi52+CjA+aMZCyyKB+9eYUh1HtiWVo4o/A==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "mutation-testing-report-schema": "3.1.1"
+        "mutation-testing-report-schema": "3.3.0"
       }
     },
     "node_modules/mutation-testing-report-schema": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.1.1.tgz",
-      "integrity": "sha512-lWIbgUEnMEdsY2yymC7SZRBO+6dbZa5tY/Bmw+xjXYPdBxTVlnd2mjKRPZ6FUxgHJ9vMQmQnktMNAKCWZp1H0A==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/mutation-testing-report-schema/-/mutation-testing-report-schema-3.3.0.tgz",
+      "integrity": "sha512-DF56q0sb0GYzxYUYNdzlfQzyE5oJBEasz8zL76bt3OFJU8q4iHSdUDdihPWWJD+4JLxSs3neM/R968zYdy0SWQ==",
       "dev": true,
       "license": "Apache-2.0"
     },
@@ -8377,102 +8431,6 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/mv": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
-      "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "mkdirp": "~0.5.1",
-        "ncp": "~2.0.0",
-        "rimraf": "~2.4.0"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/mv/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/mv/node_modules/glob": {
-      "version": "6.0.4",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
-      "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "2 || 3",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/mv/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/mv/node_modules/rimraf": {
-      "version": "2.4.5",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
-      "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==",
-      "deprecated": "Rimraf versions prior to v4 are no longer supported",
-      "dev": true,
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "glob": "^6.0.1"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      }
-    },
-    "node_modules/mz": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
-      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "any-promise": "^1.0.0",
-        "object-assign": "^4.0.1",
-        "thenify-all": "^1.0.0"
-      }
-    },
-    "node_modules/nan": {
-      "version": "2.20.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
-      "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true
-    },
     "node_modules/nanoid": {
       "version": "3.3.7",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
@@ -8527,13 +8485,6 @@
         "wrap-ansi": "^7.0.0"
       }
     },
-    "node_modules/nconf/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/nconf/node_modules/ini": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
@@ -8544,21 +8495,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/nconf/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/nconf/node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -8596,37 +8532,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/ncp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
-      "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "bin": {
-        "ncp": "bin/ncp"
-      }
-    },
-    "node_modules/node-domexception": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
-      "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/jimmywarting"
-        },
-        {
-          "type": "github",
-          "url": "https://paypal.me/jimmywarting"
-        }
-      ],
-      "license": "MIT",
-      "engines": {
-        "node": ">=10.5.0"
-      }
-    },
     "node_modules/node-fetch": {
       "version": "2.6.11",
       "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
@@ -8706,19 +8611,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/normalize-url": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
-      "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=14.16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/npm-package-json-lint": {
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-8.0.0.tgz",
@@ -8847,9 +8739,9 @@
       }
     },
     "node_modules/npm-package-json-lint/node_modules/type-fest": {
-      "version": "4.24.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.24.0.tgz",
-      "integrity": "sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==",
+      "version": "4.26.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz",
+      "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==",
       "dev": true,
       "license": "(MIT OR CC0-1.0)",
       "engines": {
@@ -8860,16 +8752,17 @@
       }
     },
     "node_modules/npm-run-path": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
-      "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
+      "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "path-key": "^4.0.0"
+        "path-key": "^4.0.0",
+        "unicorn-magic": "^0.3.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -8901,20 +8794,10 @@
         "url": "https://github.com/fb55/nth-check?sponsor=1"
       }
     },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/object-inspect": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
-      "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+      "version": "1.13.3",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
+      "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -9054,6 +8937,19 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/oniguruma-to-js": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/oniguruma-to-js/-/oniguruma-to-js-0.4.3.tgz",
+      "integrity": "sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "regex": "^4.3.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
     "node_modules/open": {
       "version": "9.1.0",
       "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz",
@@ -9247,16 +9143,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/p-cancelable": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz",
-      "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12.20"
-      }
-    },
     "node_modules/p-defer": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
@@ -9320,28 +9206,28 @@
       }
     },
     "node_modules/package-json": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz",
-      "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==",
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+      "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "got": "^12.1.0",
-        "registry-auth-token": "^5.0.1",
-        "registry-url": "^6.0.0",
-        "semver": "^7.3.7"
+        "ky": "^1.2.0",
+        "registry-auth-token": "^5.0.2",
+        "registry-url": "^6.0.1",
+        "semver": "^7.6.0"
       },
       "engines": {
-        "node": ">=14.16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/package-json-from-dist": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
       "dev": true,
       "license": "BlueOak-1.0.0"
     },
@@ -9366,11 +9252,11 @@
       }
     },
     "node_modules/parse-imports": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz",
-      "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz",
+      "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "Apache-2.0 AND MIT",
       "dependencies": {
         "es-module-lexer": "^1.5.3",
         "slashes": "^3.0.12"
@@ -9412,26 +9298,26 @@
       }
     },
     "node_modules/parse5": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
-      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+      "version": "7.2.1",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
+      "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "entities": "^4.4.0"
+        "entities": "^4.5.0"
       },
       "funding": {
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
     "node_modules/parse5-htmlparser2-tree-adapter": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
-      "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
+      "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "domhandler": "^5.0.2",
+        "domhandler": "^5.0.3",
         "parse5": "^7.0.0"
       },
       "funding": {
@@ -9476,31 +9362,28 @@
       "license": "MIT"
     },
     "node_modules/path-scurry": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
-      "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
       "dev": true,
       "license": "BlueOak-1.0.0",
       "dependencies": {
-        "lru-cache": "^11.0.0",
-        "minipass": "^7.1.2"
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
       },
       "engines": {
-        "node": "20 || >=22"
+        "node": ">=16 || 14 >=14.18"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/path-scurry/node_modules/lru-cache": {
-      "version": "11.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz",
-      "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==",
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
       "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": "20 || >=22"
-      }
+      "license": "ISC"
     },
     "node_modules/path-type": {
       "version": "4.0.0",
@@ -9520,9 +9403,9 @@
       "license": "MIT"
     },
     "node_modules/picocolors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
       "dev": true,
       "license": "ISC"
     },
@@ -9652,9 +9535,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.47",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
+      "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
       "dev": true,
       "funding": [
         {
@@ -9673,24 +9556,24 @@
       "license": "MIT",
       "dependencies": {
         "nanoid": "^3.3.7",
-        "picocolors": "^1.0.1",
-        "source-map-js": "^1.2.0"
+        "picocolors": "^1.1.0",
+        "source-map-js": "^1.2.1"
       },
       "engines": {
         "node": "^10 || ^12 || >=14"
       }
     },
     "node_modules/postcss-resolve-nested-selector": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.5.tgz",
-      "integrity": "sha512-tum2m18S22ZSNjXatMG0FSk5ZL83pTttymeJx5Gzxg7RU0s1jNDU9rXltro4osQrukjyNormcb07IEjqEyPNaA==",
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz",
+      "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==",
       "dev": true,
       "license": "MIT"
     },
     "node_modules/postcss-safe-parser": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz",
-      "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+      "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
       "dev": true,
       "funding": [
         {
@@ -9715,9 +9598,9 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9834,6 +9717,17 @@
         "node": ">=6"
       }
     },
+    "node_modules/property-information": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
+      "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/proto-list": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
@@ -9842,9 +9736,9 @@
       "license": "ISC"
     },
     "node_modules/pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+      "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9898,68 +9792,28 @@
         "commander": "^12.0.0",
         "glob": "^10.3.10",
         "postcss": "^8.4.4",
-        "postcss-selector-parser": "^6.0.7"
-      },
-      "bin": {
-        "purgecss": "bin/purgecss.js"
-      }
-    },
-    "node_modules/purgecss/node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/purgecss/node_modules/jackspeak": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
-      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
-      "dev": true,
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "@isaacs/cliui": "^8.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "postcss-selector-parser": "^6.0.7"
       },
-      "optionalDependencies": {
-        "@pkgjs/parseargs": "^0.11.0"
+      "bin": {
+        "purgecss": "bin/purgecss.js"
       }
     },
-    "node_modules/purgecss/node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/purgecss/node_modules/path-scurry": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+    "node_modules/purgecss/node_modules/glob": {
+      "version": "10.4.5",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
       "dev": true,
-      "license": "BlueOak-1.0.0",
+      "license": "ISC",
       "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
       },
-      "engines": {
-        "node": ">=16 || 14 >=14.18"
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -10286,6 +10140,13 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/regex": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/regex/-/regex-4.4.0.tgz",
+      "integrity": "sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/regexp-ast-analysis": {
       "version": "0.7.1",
       "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz",
@@ -10318,16 +10179,16 @@
       }
     },
     "node_modules/regexp.prototype.flags": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
-      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
+      "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.6",
+        "call-bind": "^1.0.7",
         "define-properties": "^1.2.1",
         "es-errors": "^1.3.0",
-        "set-function-name": "^2.0.1"
+        "set-function-name": "^2.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -10534,13 +10395,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/resolve-alpn": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
-      "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/resolve-from": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -10561,22 +10415,6 @@
         "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
       }
     },
-    "node_modules/responselike": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
-      "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "lowercase-keys": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=14.16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/reusify": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -10612,52 +10450,6 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/rimraf/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/rimraf/node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.1.1",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/rimraf/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/run-applescript": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz",
@@ -10840,14 +10632,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/safe-json-stringify": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
-      "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true
-    },
     "node_modules/safe-regex-test": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
@@ -10867,9 +10651,9 @@
       }
     },
     "node_modules/safe-stable-stringify": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
-      "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+      "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -10932,22 +10716,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/semver-diff": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz",
-      "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "semver": "^7.3.5"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/serialize-javascript": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
@@ -10999,20 +10767,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/sha.js": {
-      "version": "2.4.11",
-      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
-      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
-      "dev": true,
-      "license": "(MIT AND BSD-3-Clause)",
-      "dependencies": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      },
-      "bin": {
-        "sha.js": "bin.js"
-      }
-    },
     "node_modules/shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -11051,13 +10805,17 @@
       "license": "MIT"
     },
     "node_modules/shiki": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.12.1.tgz",
-      "integrity": "sha512-nwmjbHKnOYYAe1aaQyEBHvQymJgfm86ZSS7fT8OaPRr4sbAcBNz7PbfAikMEFSDQ6se2j2zobkXvVKcBOm0ysg==",
+      "version": "1.22.2",
+      "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.22.2.tgz",
+      "integrity": "sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@shikijs/core": "1.12.1",
+        "@shikijs/core": "1.22.2",
+        "@shikijs/engine-javascript": "1.22.2",
+        "@shikijs/engine-oniguruma": "1.22.2",
+        "@shikijs/types": "1.22.2",
+        "@shikijs/vscode-textmate": "^9.3.0",
         "@types/hast": "^3.0.4"
       }
     },
@@ -11149,9 +10907,9 @@
       }
     },
     "node_modules/source-map-js": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
-      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "dev": true,
       "license": "BSD-3-Clause",
       "engines": {
@@ -11179,6 +10937,17 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/space-separated-tokens": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+      "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/spawn-sync": {
       "version": "1.0.15",
       "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
@@ -11232,9 +11001,9 @@
       }
     },
     "node_modules/spdx-license-ids": {
-      "version": "3.0.18",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
-      "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
+      "version": "3.0.20",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz",
+      "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==",
       "dev": true,
       "license": "CC0-1.0"
     },
@@ -11308,21 +11077,18 @@
       "license": "MIT"
     },
     "node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
     "node_modules/string-width-cjs": {
@@ -11348,42 +11114,13 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
     "node_modules/string-width/node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/string-width/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
-    },
     "node_modules/string.prototype.trim": {
       "version": "1.2.9",
       "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
@@ -11436,6 +11173,21 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/stringify-entities": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+      "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "character-entities-html4": "^2.0.0",
+        "character-entities-legacy": "^3.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/strip-ansi": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -11539,10 +11291,16 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/stubborn-fs": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz",
+      "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==",
+      "dev": true
+    },
     "node_modules/stylelint": {
-      "version": "16.8.1",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.8.1.tgz",
-      "integrity": "sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA==",
+      "version": "16.10.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.10.0.tgz",
+      "integrity": "sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==",
       "dev": true,
       "funding": [
         {
@@ -11556,42 +11314,41 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "@csstools/css-parser-algorithms": "^2.7.1",
-        "@csstools/css-tokenizer": "^2.4.1",
-        "@csstools/media-query-list-parser": "^2.1.13",
-        "@csstools/selector-specificity": "^3.1.1",
+        "@csstools/css-parser-algorithms": "^3.0.1",
+        "@csstools/css-tokenizer": "^3.0.1",
+        "@csstools/media-query-list-parser": "^3.0.1",
+        "@csstools/selector-specificity": "^4.0.0",
         "@dual-bundle/import-meta-resolve": "^4.1.0",
         "balanced-match": "^2.0.0",
         "colord": "^2.9.3",
         "cosmiconfig": "^9.0.0",
-        "css-functions-list": "^3.2.2",
-        "css-tree": "^2.3.1",
-        "debug": "^4.3.6",
+        "css-functions-list": "^3.2.3",
+        "css-tree": "^3.0.0",
+        "debug": "^4.3.7",
         "fast-glob": "^3.3.2",
         "fastest-levenshtein": "^1.0.16",
-        "file-entry-cache": "^9.0.0",
+        "file-entry-cache": "^9.1.0",
         "global-modules": "^2.0.0",
         "globby": "^11.1.0",
         "globjoin": "^0.1.4",
         "html-tags": "^3.3.1",
-        "ignore": "^5.3.1",
+        "ignore": "^6.0.2",
         "imurmurhash": "^0.1.4",
         "is-plain-object": "^5.0.0",
         "known-css-properties": "^0.34.0",
         "mathml-tag-names": "^2.1.3",
         "meow": "^13.2.0",
-        "micromatch": "^4.0.7",
+        "micromatch": "^4.0.8",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.0.1",
-        "postcss": "^8.4.40",
-        "postcss-resolve-nested-selector": "^0.1.4",
-        "postcss-safe-parser": "^7.0.0",
-        "postcss-selector-parser": "^6.1.1",
+        "postcss": "^8.4.47",
+        "postcss-resolve-nested-selector": "^0.1.6",
+        "postcss-safe-parser": "^7.0.1",
+        "postcss-selector-parser": "^6.1.2",
         "postcss-value-parser": "^4.2.0",
         "resolve-from": "^5.0.0",
         "string-width": "^4.2.3",
-        "strip-ansi": "^7.1.0",
-        "supports-hyperlinks": "^3.0.0",
+        "supports-hyperlinks": "^3.1.0",
         "svg-tags": "^1.0.0",
         "table": "^6.8.2",
         "write-file-atomic": "^5.0.1"
@@ -11624,17 +11381,10 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/stylelint/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/stylelint/node_modules/file-entry-cache": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz",
-      "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==",
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
+      "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11658,84 +11408,37 @@
         "node": ">=18"
       }
     },
-    "node_modules/stylelint/node_modules/meow": {
-      "version": "13.2.0",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
-      "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/stylelint/node_modules/resolve-from": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/stylelint/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/stylelint/node_modules/string-width/node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+    "node_modules/stylelint/node_modules/ignore": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
+      "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">= 4"
       }
     },
-    "node_modules/stylelint/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+    "node_modules/stylelint/node_modules/meow": {
+      "version": "13.2.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+      "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/stylelint/node_modules/strip-ansi/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+    "node_modules/stylelint/node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "node": ">=8"
       }
     },
     "node_modules/supports-color": {
@@ -11755,9 +11458,9 @@
       }
     },
     "node_modules/supports-hyperlinks": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
-      "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz",
+      "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11766,6 +11469,9 @@
       },
       "engines": {
         "node": ">=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/supports-hyperlinks/node_modules/supports-color": {
@@ -11801,9 +11507,9 @@
       "dev": true
     },
     "node_modules/synckit": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz",
-      "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==",
+      "version": "0.9.2",
+      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
+      "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11834,28 +11540,6 @@
         "node": ">=10.0.0"
       }
     },
-    "node_modules/table/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/table/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/tapable": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -11873,29 +11557,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/thenify": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
-      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "any-promise": "^1.0.0"
-      }
-    },
-    "node_modules/thenify-all": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
-      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "thenify": ">= 3.1.0 < 4"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
     "node_modules/thread-stream": {
       "version": "2.7.0",
       "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz",
@@ -11939,16 +11600,6 @@
         "node": ">=0.6.0"
       }
     },
-    "node_modules/to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -11962,15 +11613,6 @@
         "node": ">=8.0"
       }
     },
-    "node_modules/tosource": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz",
-      "integrity": "sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/tr46": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -11988,6 +11630,17 @@
         "tree-kill": "cli.js"
       }
     },
+    "node_modules/trim-lines": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+      "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/trim-newlines": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
@@ -12025,9 +11678,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+      "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
       "dev": true,
       "license": "0BSD"
     },
@@ -12155,9 +11808,9 @@
       }
     },
     "node_modules/typed-rest-client": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.0.2.tgz",
-      "integrity": "sha512-rmAQM2gZw/PQpK5+5aSs+I6ZBv4PFC2BT1o+0ADS1SgSejA+14EmbI2Lt8uXwkX7oeOMkwFmg0pHKwe8D9IT5A==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.1.0.tgz",
+      "integrity": "sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -12178,28 +11831,18 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/typedarray-to-buffer": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
-      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-typedarray": "^1.0.0"
-      }
-    },
     "node_modules/typedoc": {
-      "version": "0.26.5",
-      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.5.tgz",
-      "integrity": "sha512-Vn9YKdjKtDZqSk+by7beZ+xzkkr8T8CYoiasqyt4TTRFy5+UHzL/mF/o4wGBjRF+rlWQHDb0t6xCpA3JNL5phg==",
+      "version": "0.26.11",
+      "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.11.tgz",
+      "integrity": "sha512-sFEgRRtrcDl2FxVP58Ze++ZK2UQAEvtvvH8rRlig1Ja3o7dDaMHmaBfvJmdGnNEFaLTpQsN8dpvZaTqJSu/Ugw==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
         "lunr": "^2.3.9",
         "markdown-it": "^14.1.0",
         "minimatch": "^9.0.5",
-        "shiki": "^1.9.1",
-        "yaml": "^2.4.5"
+        "shiki": "^1.16.2",
+        "yaml": "^2.5.1"
       },
       "bin": {
         "typedoc": "bin/typedoc"
@@ -12208,13 +11851,13 @@
         "node": ">= 18"
       },
       "peerDependencies": {
-        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x"
+        "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x"
       }
     },
     "node_modules/typescript": {
-      "version": "5.5.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
-      "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "dev": true,
       "license": "Apache-2.0",
       "bin": {
@@ -12256,12 +11899,25 @@
       "license": "MIT"
     },
     "node_modules/undici-types": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
-      "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
+      "version": "6.19.8",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/unicorn-magic": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/union": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
@@ -12274,20 +11930,77 @@
         "node": ">= 0.8.0"
       }
     },
-    "node_modules/unique-string": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz",
-      "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==",
+    "node_modules/unist-util-is": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+      "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "crypto-random-string": "^4.0.0"
+        "@types/unist": "^3.0.0"
       },
-      "engines": {
-        "node": ">=12"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-position": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+      "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-stringify-position": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+      "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+      "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0",
+        "unist-util-visit-parents": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit-parents": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+      "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
     "node_modules/universalify": {
@@ -12322,9 +12035,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "dev": true,
       "funding": [
         {
@@ -12342,8 +12055,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -12353,29 +12066,25 @@
       }
     },
     "node_modules/update-notifier": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz",
-      "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==",
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz",
+      "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "boxen": "^7.0.0",
-        "chalk": "^5.0.1",
-        "configstore": "^6.0.0",
-        "has-yarn": "^3.0.0",
-        "import-lazy": "^4.0.0",
-        "is-ci": "^3.0.1",
-        "is-installed-globally": "^0.4.0",
+        "boxen": "^8.0.1",
+        "chalk": "^5.3.0",
+        "configstore": "^7.0.0",
+        "is-in-ci": "^1.0.0",
+        "is-installed-globally": "^1.0.0",
         "is-npm": "^6.0.0",
-        "is-yarn-global": "^0.4.0",
-        "latest-version": "^7.0.0",
+        "latest-version": "^9.0.0",
         "pupa": "^3.1.0",
-        "semver": "^7.3.7",
-        "semver-diff": "^4.0.0",
+        "semver": "^7.6.3",
         "xdg-basedir": "^5.1.0"
       },
       "engines": {
-        "node": ">=14.16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/yeoman/update-notifier?sponsor=1"
@@ -12447,10 +12156,40 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
+    "node_modules/vfile": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+      "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "vfile-message": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vfile-message": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
+      "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-stringify-position": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
     "node_modules/watchpack": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
-      "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
+      "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -12479,42 +12218,38 @@
       "license": "Apache-2.0"
     },
     "node_modules/web-ext": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-8.2.0.tgz",
-      "integrity": "sha512-krU7rmxaG96b3Q9Enbry9/pmE/5FUGkvajCGfJCD+J79rt7JFjhVpw1Dszz4BqQkTd3y8cG5wJ3p1uC6uyAwcA==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-8.3.0.tgz",
+      "integrity": "sha512-mXSOiDtmm3n0KNpSuQ65fJpypAoNLAmZv3QkdlVbJ6etn0BK+hl/k+tjHefSIKdbzGUIeFbhn2oxWMe9Tdyrdg==",
       "dev": true,
       "license": "MPL-2.0",
       "dependencies": {
-        "@babel/runtime": "7.24.7",
+        "@babel/runtime": "7.25.6",
         "@devicefarmer/adbkit": "3.2.6",
-        "addons-linter": "6.31.1",
-        "bunyan": "1.8.15",
+        "addons-linter": "7.1.0",
         "camelcase": "8.0.0",
-        "chrome-launcher": "0.15.1",
+        "chrome-launcher": "1.1.2",
         "debounce": "1.2.1",
         "decamelize": "6.0.0",
         "es6-error": "4.1.1",
-        "firefox-profile": "4.6.0",
-        "fs-extra": "11.2.0",
+        "firefox-profile": "4.7.0",
         "fx-runner": "1.4.0",
         "https-proxy-agent": "^7.0.0",
-        "jose": "5.4.1",
+        "jose": "5.9.2",
         "jszip": "3.10.1",
-        "mkdirp": "3.0.1",
         "multimatch": "6.0.0",
-        "mz": "2.7.0",
-        "node-fetch": "3.3.2",
         "node-notifier": "10.0.1",
         "open": "9.1.0",
         "parse-json": "7.1.1",
+        "pino": "9.4.0",
         "promise-toolbox": "0.21.0",
         "source-map-support": "0.5.21",
         "strip-bom": "5.0.0",
         "strip-json-comments": "5.0.1",
         "tmp": "0.2.3",
-        "update-notifier": "6.0.2",
-        "watchpack": "2.4.1",
-        "ws": "8.17.1",
+        "update-notifier": "7.3.1",
+        "watchpack": "2.4.2",
+        "ws": "8.18.0",
         "yargs": "17.7.2",
         "zip-dir": "2.0.0"
       },
@@ -12526,48 +12261,139 @@
         "npm": ">=8.0.0"
       }
     },
+    "node_modules/web-ext/node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/@eslint/eslintrc/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/web-ext/node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/@eslint/eslintrc/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/@eslint/eslintrc/node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/web-ext/node_modules/@eslint/js": {
+      "version": "8.57.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+      "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
     "node_modules/web-ext/node_modules/@mdn/browser-compat-data": {
-      "version": "5.5.34",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.34.tgz",
-      "integrity": "sha512-e8k7+8r3jiJuP7FMH6AL1OnmfQqLyABhTM+NmRDvFeAbMgtFcNQLHpmT7uza5cBnxI01+CAU3aSsIgcKGRdEBQ==",
+      "version": "5.6.0",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.0.tgz",
+      "integrity": "sha512-xArvLyzuk0r2m6hFVjTMYoLvhWwys3h7W8pO15tjSAea+U39cErWDNfoUs4g2C08HVg6bDHyDMBc0LC6FKRpVw==",
       "dev": true,
       "license": "CC0-1.0"
     },
     "node_modules/web-ext/node_modules/addons-linter": {
-      "version": "6.31.1",
-      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-6.31.1.tgz",
-      "integrity": "sha512-R9FCyVzqU/h5A2aB1t+jD8t4QKLuLxYqc1FjmjJ0nZrn1qNCna1jFOajt5R1T8pwt0H4WXgT+uwWSD2BdkBzqQ==",
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-7.1.0.tgz",
+      "integrity": "sha512-UmkUB3dZSpf8bqhlulGDbpoxBwcfOk8JvaJTRvJ+AAXKHvTjqeNlFC+GRMqa0EjJJh/0yqpBaJzyaUIx+fjl+A==",
       "dev": true,
       "license": "MPL-2.0",
       "dependencies": {
         "@fluent/syntax": "0.19.0",
-        "@mdn/browser-compat-data": "5.5.34",
+        "@mdn/browser-compat-data": "5.6.0",
         "addons-moz-compare": "1.3.0",
         "addons-scanner-utils": "9.11.0",
-        "ajv": "8.16.0",
+        "ajv": "8.17.1",
         "chalk": "4.1.2",
         "cheerio": "1.0.0-rc.12",
         "columnify": "1.6.0",
         "common-tags": "1.8.2",
         "deepmerge": "4.3.1",
-        "eslint": "8.57.0",
+        "eslint": "8.57.1",
         "eslint-plugin-no-unsanitized": "4.0.2",
         "eslint-visitor-keys": "4.0.0",
-        "espree": "10.0.1",
+        "espree": "10.1.0",
         "esprima": "4.0.1",
         "fast-json-patch": "3.1.1",
-        "glob": "10.4.2",
         "image-size": "1.1.1",
-        "is-mergeable-object": "1.1.1",
         "jed": "1.1.1",
         "json-merge-patch": "1.0.2",
         "os-locale": "5.0.0",
         "pino": "8.20.0",
         "relaxed-json": "1.0.3",
-        "semver": "7.6.2",
-        "sha.js": "2.4.11",
+        "semver": "7.6.3",
         "source-map-support": "0.5.21",
-        "tosource": "1.0.0",
         "upath": "2.0.1",
         "yargs": "17.7.2",
         "yauzl": "2.10.0"
@@ -12576,24 +12402,76 @@
         "addons-linter": "bin/addons-linter"
       },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=18.0.0"
       }
     },
-    "node_modules/web-ext/node_modules/ajv": {
-      "version": "8.16.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
-      "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
+    "node_modules/web-ext/node_modules/addons-linter/node_modules/pino": {
+      "version": "8.20.0",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz",
+      "integrity": "sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.4.1"
+        "atomic-sleep": "^1.0.0",
+        "fast-redact": "^3.1.1",
+        "on-exit-leak-free": "^2.1.0",
+        "pino-abstract-transport": "^1.1.0",
+        "pino-std-serializers": "^6.0.0",
+        "process-warning": "^3.0.0",
+        "quick-format-unescaped": "^4.0.3",
+        "real-require": "^0.2.0",
+        "safe-stable-stringify": "^2.3.1",
+        "sonic-boom": "^3.7.0",
+        "thread-stream": "^2.0.0"
       },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
+      "bin": {
+        "pino": "bin.js"
+      }
+    },
+    "node_modules/web-ext/node_modules/addons-scanner-utils": {
+      "version": "9.11.0",
+      "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-9.11.0.tgz",
+      "integrity": "sha512-X95V8ymnue9EHmOLz3zJTGHvHDFlWKiavlH+kJKOlv2sJDWFvD3TWeJMHJgxS9GKOqT/545mOXvX3vuuGGum+g==",
+      "dev": true,
+      "license": "MPL-2.0",
+      "dependencies": {
+        "@types/yauzl": "2.10.3",
+        "common-tags": "1.8.2",
+        "first-chunk-stream": "3.0.0",
+        "strip-bom-stream": "4.0.0",
+        "upath": "2.0.1",
+        "yauzl": "2.10.0"
+      },
+      "peerDependencies": {
+        "body-parser": "1.20.2",
+        "express": "4.19.2",
+        "node-fetch": "2.6.11",
+        "safe-compare": "1.1.4"
+      },
+      "peerDependenciesMeta": {
+        "body-parser": {
+          "optional": true
+        },
+        "express": {
+          "optional": true
+        },
+        "node-fetch": {
+          "optional": true
+        },
+        "safe-compare": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/web-ext/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
     "node_modules/web-ext/node_modules/camelcase": {
@@ -12639,14 +12517,172 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/web-ext/node_modules/doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/web-ext/node_modules/eslint": {
+      "version": "8.57.1",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+      "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/js": "8.57.1",
+        "@humanwhocodes/config-array": "^0.13.0",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@nodelib/fs.walk": "^1.2.8",
+        "@ungap/structured-clone": "^1.2.0",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
+        "esquery": "^1.4.2",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "globals": "^13.19.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3",
+        "strip-ansi": "^6.0.1",
+        "text-table": "^0.2.0"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/eslint-plugin-no-unsanitized": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz",
+      "integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==",
+      "dev": true,
+      "license": "MPL-2.0",
+      "peerDependencies": {
+        "eslint": "^6 || ^7 || ^8"
+      }
+    },
+    "node_modules/web-ext/node_modules/eslint-scope": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/eslint-visitor-keys": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/eslint/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/web-ext/node_modules/eslint/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/web-ext/node_modules/eslint/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/web-ext/node_modules/espree": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz",
-      "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "acorn": "^8.11.3",
+        "acorn": "^8.12.0",
         "acorn-jsx": "^5.3.2",
         "eslint-visitor-keys": "^4.0.0"
       },
@@ -12657,59 +12693,58 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/web-ext/node_modules/fs-extra": {
-      "version": "11.2.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
-      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+    "node_modules/web-ext/node_modules/file-entry-cache": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
+        "flat-cache": "^3.0.4"
       },
       "engines": {
-        "node": ">=14.14"
+        "node": "^10.12.0 || >=12.0.0"
       }
     },
-    "node_modules/web-ext/node_modules/glob": {
-      "version": "10.4.2",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
-      "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+    "node_modules/web-ext/node_modules/flat-cache": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.3",
+        "rimraf": "^3.0.2"
       },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/web-ext/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.20.2"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.18"
+        "node": ">=8"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/jackspeak": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
-      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+    "node_modules/web-ext/node_modules/is-path-inside": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
       "dev": true,
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "@isaacs/cliui": "^8.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      },
-      "optionalDependencies": {
-        "@pkgjs/parseargs": "^0.11.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/web-ext/node_modules/json-parse-even-better-errors": {
@@ -12722,18 +12757,12 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/web-ext/node_modules/jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+    "node_modules/web-ext/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "universalify": "^2.0.0"
-      },
-      "optionalDependencies": {
-        "graceful-fs": "^4.1.6"
-      }
+      "license": "MIT"
     },
     "node_modules/web-ext/node_modules/lines-and-columns": {
       "version": "2.0.4",
@@ -12745,46 +12774,17 @@
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       }
     },
-    "node_modules/web-ext/node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/web-ext/node_modules/mkdirp": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
-      "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "mkdirp": "dist/cjs/src/bin.js"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/web-ext/node_modules/node-fetch": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
-      "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+    "node_modules/web-ext/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "data-uri-to-buffer": "^4.0.0",
-        "fetch-blob": "^3.1.4",
-        "formdata-polyfill": "^4.0.10"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/node-fetch"
+        "node": "*"
       }
     },
     "node_modules/web-ext/node_modules/parse-json": {
@@ -12807,34 +12807,74 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/path-scurry": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+    "node_modules/web-ext/node_modules/parse-json/node_modules/type-fest": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+      "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
       "dev": true,
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
-      },
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
-        "node": ">=16 || 14 >=14.18"
+        "node": ">=14.16"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/semver": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+    "node_modules/web-ext/node_modules/pino": {
+      "version": "9.4.0",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-9.4.0.tgz",
+      "integrity": "sha512-nbkQb5+9YPhQRz/BeQmrWpEknAaqjpAqRK8NwJpmrX/JHu7JuZC5G1CeAwJDJfGes4h+YihC6in3Q2nGb+Y09w==",
       "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+      "license": "MIT",
+      "dependencies": {
+        "atomic-sleep": "^1.0.0",
+        "fast-redact": "^3.1.1",
+        "on-exit-leak-free": "^2.1.0",
+        "pino-abstract-transport": "^1.2.0",
+        "pino-std-serializers": "^7.0.0",
+        "process-warning": "^4.0.0",
+        "quick-format-unescaped": "^4.0.3",
+        "real-require": "^0.2.0",
+        "safe-stable-stringify": "^2.3.1",
+        "sonic-boom": "^4.0.1",
+        "thread-stream": "^3.0.0"
       },
-      "engines": {
-        "node": ">=10"
+      "bin": {
+        "pino": "bin.js"
+      }
+    },
+    "node_modules/web-ext/node_modules/pino/node_modules/pino-std-serializers": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
+      "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/web-ext/node_modules/pino/node_modules/process-warning": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz",
+      "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/web-ext/node_modules/pino/node_modules/sonic-boom": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz",
+      "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "atomic-sleep": "^1.0.0"
+      }
+    },
+    "node_modules/web-ext/node_modules/pino/node_modules/thread-stream": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
+      "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "real-require": "^0.2.0"
       }
     },
     "node_modules/web-ext/node_modules/strip-bom": {
@@ -12887,38 +12927,18 @@
       }
     },
     "node_modules/web-ext/node_modules/type-fest": {
-      "version": "3.13.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
-      "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
       "dev": true,
       "license": "(MIT OR CC0-1.0)",
       "engines": {
-        "node": ">=14.16"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/web-ext/node_modules/universalify": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
-      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 10.0.0"
-      }
-    },
-    "node_modules/web-streams-polyfill": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
-      "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/webidl-conversions": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
@@ -12970,6 +12990,12 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/when-exit": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.3.tgz",
+      "integrity": "sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==",
+      "dev": true
+    },
     "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -13024,21 +13050,68 @@
       }
     },
     "node_modules/widest-line": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz",
-      "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz",
+      "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "string-width": "^5.0.1"
+        "string-width": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=18"
       },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/widest-line/node_modules/ansi-regex": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+      "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/widest-line/node_modules/string-width": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^10.3.0",
+        "get-east-asian-width": "^1.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/widest-line/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
     "node_modules/winreg": {
       "version": "0.0.12",
       "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz",
@@ -13097,50 +13170,6 @@
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
-    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/wrap-ansi/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/wrap-ansi/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -13163,9 +13192,9 @@
       }
     },
     "node_modules/ws": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
-      "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+      "version": "8.18.0",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+      "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -13205,9 +13234,9 @@
       "license": "MIT"
     },
     "node_modules/xml2js": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
-      "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz",
+      "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13246,9 +13275,9 @@
       "license": "ISC"
     },
     "node_modules/yaml": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
-      "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
+      "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
       "dev": true,
       "license": "ISC",
       "bin": {
@@ -13355,28 +13384,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/yargs/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/yargs/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/yargs/node_modules/yargs-parser": {
       "version": "21.1.1",
       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
@@ -13447,6 +13454,17 @@
         "async": "^3.2.0",
         "jszip": "^3.2.2"
       }
+    },
+    "node_modules/zwitch": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+      "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
     }
   }
 }
diff --git a/package.json b/package.json
index cbbd8bd..ad28028 100644
--- a/package.json
+++ b/package.json
@@ -43,39 +43,40 @@
   "devDependencies": {
     "@prantlf/jsonlint": "16.0.0",
     "@prettier/plugin-xml": "3.4.1",
-    "@stryker-mutator/core": "8.4.0",
-    "@stryker-mutator/mocha-runner": "8.4.0",
-    "@types/eslint": "9.6.0",
-    "@types/mocha": "10.0.7",
-    "addons-linter": "6.33.0",
-    "eslint": "8.57.0",
-    "eslint-plugin-array-func": "4.0.0",
+    "@stryker-mutator/core": "8.6.0",
+    "@stryker-mutator/mocha-runner": "8.6.0",
+    "@types/firefox-webext-browser": "120.0.4",
+    "@types/mocha": "10.0.9",
+    "addons-linter": "7.3.0",
+    "eslint": "9.14.0",
+    "eslint-plugin-array-func": "5.0.2",
     "eslint-plugin-eslint-comments": "3.2.0",
-    "eslint-plugin-import": "2.29.1",
-    "eslint-plugin-jsdoc": "50.0.1",
+    "eslint-plugin-import": "2.31.0",
+    "eslint-plugin-jsdoc": "50.4.3",
     "eslint-plugin-mocha": "10.5.0",
-    "eslint-plugin-n": "17.10.2",
-    "eslint-plugin-no-unsanitized": "4.0.2",
+    "eslint-plugin-n": "17.13.1",
+    "eslint-plugin-no-unsanitized": "4.1.2",
     "eslint-plugin-promise": "7.1.0",
     "eslint-plugin-regexp": "2.6.0",
-    "eslint-plugin-unicorn": "55.0.0",
+    "eslint-plugin-unicorn": "56.0.0",
+    "globals": "15.12.0",
     "htmlhint": "1.1.4",
     "http-server": "14.1.1",
-    "markdownlint": "0.34.0",
-    "metalint": "0.17.0",
-    "mocha": "10.7.3",
+    "markdownlint": "0.36.1",
+    "metalint": "0.18.0",
+    "mocha": "10.8.2",
     "npm-package-json-lint": "8.0.0",
     "prettier": "3.3.3",
     "purgecss": "6.0.0",
-    "stylelint": "16.8.1",
+    "stylelint": "16.10.0",
     "stylelint-order": "6.0.4",
-    "typedoc": "0.26.5",
-    "typescript": "5.5.4",
-    "web-ext": "8.2.0",
+    "typedoc": "0.26.11",
+    "typescript": "5.6.3",
+    "web-ext": "8.3.0",
     "yaml-lint": "1.7.0"
   },
   "engines": {
-    "node": ">=22.1.0"
+    "node": ">=22.10"
   },
   "private": true
 }
diff --git a/src/module/image/README.md b/src/module/image/README.md
index 7501390..a82b504 100644
--- a/src/module/image/README.md
+++ b/src/module/image/README.md
@@ -32,7 +32,7 @@ suivantes :
              faux-positifs avec les expressions cron.
              https://github.com/DavidAnson/markdownlint/issues/427 -->
         <!-- markdownlint-disable-next-line no-space-in-emphasis -->
-        Exemple : <code>"*/5 * * * *"</code>
+        Exemple : <a href="https://crontab.guru/#*/5_*_*_*_*"><code>"*/5 * * * *"</code></a>
       </p>
     </td>
   </tr>
diff --git a/src/module/list/README.md b/src/module/list/README.md
index d71c9ad..0102e41 100644
--- a/src/module/list/README.md
+++ b/src/module/list/README.md
@@ -38,9 +38,10 @@ suivantes :
     <td>
       <p>
         La ou les
-        <a href="https://www.npmjs.com/package/cronnor#expression-cron">expressions
-        <em>cron</em></a> indiquant la fréquence de mise à jour. Sans cette
-        propriété, les données ne sont jamais mises à jour.
+        <a href="https://www.npmjs.com/package/cronnor#expression-cron"
+          >expressions<em>cron</em></a
+        > indiquant la fréquence de mise à jour. Sans cette propriété, les
+        données ne sont jamais mises à jour.
       </p>
       <p>
         <!-- Ne pas vérifier les espaces dans les éléments d'emphase car cette
@@ -48,7 +49,10 @@ suivantes :
              faux-positifs avec les expressions cron.
              https://github.com/DavidAnson/markdownlint/issues/427 -->
         <!-- markdownlint-disable-next-line no-space-in-emphasis -->
-        Exemple : <code>"*/5 * * * *"</code>
+        Exemple :
+        <a href="https://crontab.guru/#*/5_*_*_*_*"
+          ><code>"*/5 * * * *"</code></a
+        >
       </p>
     </td>
   </tr>
@@ -126,9 +130,10 @@ suivantes :
       <p>
         Le nombre de millisecondes depuis le 1<sup>er</sup> janvier 1970 à
         00:00:00 UTC (cf.
-        <a href="https://developer.mozilla.org/JavaScript/Reference/Global_Objects/Date/getTime"><code>Date.prototype.getTime()</code></a>).
-        Cette valeur est utilisée pour trier les éléments du plus récent au plus
-        ancien. Par défaut, le nombre <code>0</code> est utilisé.
+        <a href="https://developer.mozilla.org/JavaScript/Reference/Global_Objects/Date/getTime"
+          ><code>Date.prototype.getTime()</code></a
+        >). Cette valeur est utilisée pour trier les éléments du plus récent au
+        plus ancien. Par défaut, le nombre <code>0</code> est utilisé.
       </p>
       <p>
         Exemple : <code>900277200000</code>
@@ -198,7 +203,9 @@ suivantes :
     <td>
       <p>
         L'emplacement où sera ouvert le lien (cf. l'attribut
-        <a href="https://developer.mozilla.org/HTML/Element/a#attr-target"><code>target</code></a>
+        <a href="https://developer.mozilla.org/HTML/Element/a#attr-target"
+          ><code>target</code></a
+        >
         des liens HTML). Par défaut, les liens s'ouvrent dans un nouvel onglet.
       </p>
       <p>
diff --git a/src/module/podcast/README.md b/src/module/podcast/README.md
index 9b3dc43..09d42b2 100644
--- a/src/module/podcast/README.md
+++ b/src/module/podcast/README.md
@@ -47,7 +47,7 @@ suivantes :
              faux-positifs avec les expressions cron.
              https://github.com/DavidAnson/markdownlint/issues/427 -->
         <!-- markdownlint-disable-next-line no-space-in-emphasis -->
-        Exemple : <code>"*/5 * * * *"</code>
+        Exemple : <a href="https://crontab.guru/#*/5_*_*_*_*"><code>"*/5 * * * *"</code></a>
       </p>
     </td>
   </tr>
diff --git a/src/module/search/search.js b/src/module/search/search.js
index 482d307..deddb92 100644
--- a/src/module/search/search.js
+++ b/src/module/search/search.js
@@ -30,7 +30,7 @@ export default class SearchModule extends HTMLElement {
 
             this.shadowRoot.querySelector("datalist").replaceChildren();
         } else {
-            window.location.assign(url);
+            globalThis.location.assign(url);
         }
     }
 
diff --git a/src/module/search/search.tpl b/src/module/search/search.tpl
index 8e9fed0..f20098c 100644
--- a/src/module/search/search.tpl
+++ b/src/module/search/search.tpl
@@ -9,7 +9,7 @@
   <div>
     <form>
       <img />
-      <input name="" list="suggestions" placeholder="" />
+      <input name="" type="search" list="suggestions" placeholder="" />
       <datalist id="suggestions" />
     </form>
     <ul></ul>
diff --git a/src/module/single/README.md b/src/module/single/README.md
index 73baad3..775eabe 100644
--- a/src/module/single/README.md
+++ b/src/module/single/README.md
@@ -32,7 +32,7 @@ suivantes :
              faux-positifs avec les expressions cron.
              https://github.com/DavidAnson/markdownlint/issues/427 -->
         <!-- markdownlint-disable-next-line no-space-in-emphasis -->
-        Exemple : <code>"*/5 * * * *"</code>
+        Exemple : <a href="https://crontab.guru/#*/5_*_*_*_*"><code>"*/5 * * * *"</code></a>
       </p>
     </td>
   </tr>
diff --git a/src/module/tools/contrast/README.md b/src/module/tools/contrast/README.md
index 5c2227c..a393e8e 100644
--- a/src/module/tools/contrast/README.md
+++ b/src/module/tools/contrast/README.md
@@ -4,7 +4,8 @@
 
 Ce module affiche un champ pour saisir une couleur et il retourne la couleur la
 plus proche ayant un rapport de contraste supérieur à 4,5 avec le noir et le
-blanc.
+blanc (cf.
+[WebAIM: Contrast Checker](https://webaim.org/resources/contrastchecker/)).
 
 ## Options
 
diff --git a/src/scraper/examples/README.md b/src/scraper/examples/README.md
index 2ef8323..23fcb69 100644
--- a/src/scraper/examples/README.md
+++ b/src/scraper/examples/README.md
@@ -4,9 +4,8 @@ Ce répertoire regroupe des scrapers d'exemples pour comprendre le fonctionnemen
 d'un scraper et servir de base pour développer votre propre scraper. Ces
 scrapers n'ont aucune utilité dans un vrai dashboard.
 
-- [_examples/helloworld_](https://github.com/regseb/gout/tree/HEAD/src/scraper/examples/helloworld#readme)
-  : un scraper montrant le minimum pour retourner un élément.
-- [_examples/days_](https://github.com/regseb/gout/tree/HEAD/src/scraper/examples/days#readme)
-  : un scraper retournant plusieurs éléments.
-- [_examples/jsonplaceholder_](https://github.com/regseb/gout/tree/HEAD/src/scraper/examples/jsonplaceholder#readme)
-  : un scraper appelant une API REST (avec `fetch()`).
+- [_examples/helloworld_](helloworld#readme) : un scraper montrant le minimum
+  pour retourner un élément.
+- [_examples/days_](days#readme) : un scraper retournant plusieurs éléments.
+- [_examples/jsonplaceholder_](jsonplaceholder#readme) : un scraper appelant une
+  API REST (avec `fetch()`).
diff --git a/src/scraper/examples/days/README.md b/src/scraper/examples/days/README.md
index ff34dc4..c2f8b09 100644
--- a/src/scraper/examples/days/README.md
+++ b/src/scraper/examples/days/README.md
@@ -7,9 +7,9 @@ langue des noms est paramétrable dans les options du scraper.
 
 Il peut être utilisé avec les modules :
 
-- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) ;
-- [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
-  pour afficher seulement le dernier élément.
+- [_list_](../../../module/list#readme) ;
+- [_single_](../../../module/single#readme) pour afficher seulement le dernier
+  élément.
 
 ## Options
 
@@ -38,7 +38,33 @@ suivantes :
     </td>
   </tr>
   <tr>
-    TODO Ajouter les propriétés des scrapers FilterScraper et ComplementScraper.
+    <td><code>complements</code></td>
+    <td><code>object</code></td>
+    <td>
+      <p>
+        Des propriétés qui seront ajoutées dans les éléments retournés. Par
+        défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
+        scraper
+        <a href="../../tools/complements#readme"><em>tools/complements</em></a>.
+      </p>
+      <p>
+        Exemple : <code>target: "_top"</code>
+      </p>
+    </td>
+  </tr>
+  <tr>
+    <td><code>filter</code></td>
+    <td><code>string</code></td>
+    <td>
+      <p>
+        Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
+        filtre n'est appliqué. Pour plus de détails, voir le scraper
+        <a href="../../tools/filter#readme"><em>tools/filter</em></a>.
+      </p>
+      <p>
+        Exemple : <code>"title != 'Lundi'"</code>
+      </p>
+    </td>
   </tr>
 </table>
 
diff --git a/src/scraper/examples/helloworld/README.md b/src/scraper/examples/helloworld/README.md
index 19e9dfd..86e157e 100644
--- a/src/scraper/examples/helloworld/README.md
+++ b/src/scraper/examples/helloworld/README.md
@@ -7,10 +7,8 @@ dans les options du scraper.
 
 Il peut être utilisé avec les modules :
 
-- [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
-  ;
-- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) pour
-  afficher un seul élément.
+- [_single_](../../../module/single#readme) ;
+- [_list_](../../../module/list#readme) pour afficher un seul élément.
 
 ## Options
 
diff --git a/src/scraper/examples/jsonplaceholder/README.md b/src/scraper/examples/jsonplaceholder/README.md
index 75996d8..e87ba8d 100644
--- a/src/scraper/examples/jsonplaceholder/README.md
+++ b/src/scraper/examples/jsonplaceholder/README.md
@@ -9,12 +9,11 @@ scraper.
 
 Il peut être utilisé avec les modules :
 
-- [_image_](https://github.com/regseb/gout/tree/HEAD/src/module/image#readme) ;
-- [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
-  pour afficher seulement le nom de la dernière image (avec un lien vers
-  l'image) ;
-- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) pour
-  afficher seulement le nom des images (avec un lien pour voir chaque image).
+- [_image_](../../../module/image#readme) ;
+- [_single_](../../../module/single#readme) pour afficher seulement le nom de la
+  dernière image (avec un lien vers l'image) ;
+- [_list_](../../../module/list#readme) pour afficher seulement le nom des
+  images (avec un lien pour voir chaque image).
 
 ## Options
 
@@ -49,7 +48,7 @@ suivantes :
         Des propriétés qui seront ajoutées dans les éléments retournés. Par
         défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
         scraper
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
+        <a href="../../tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
         Exemple : <code>icon: "https://example.com/foo/bar.svg"</code>
@@ -63,7 +62,7 @@ suivantes :
       <p>
         Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
         filtre n'est appliqué. Pour plus de détails, voir le scraper
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
+        <a href="../../tools/filter#readme"><em>tools/filter</em></a>.
       </p>
       <p>
         Exemple : <code>"title != 'foo'"</code>
diff --git a/src/scraper/icon/ping/README.md b/src/scraper/icon/ping/README.md
index 68ba884..8c2f798 100644
--- a/src/scraper/icon/ping/README.md
+++ b/src/scraper/icon/ping/README.md
@@ -4,8 +4,7 @@
 
 Ce scraper vérifie si un serveur est toujours accessible.
 
-Il peut être utilisé avec le module
-[_icon_](https://github.com/regseb/gout/tree/HEAD/src/module/icon#readme).
+Il peut être utilisé avec le module [_icon_](../../../module/icon#readme).
 
 ## Options
 
@@ -66,7 +65,7 @@ xxx: gray
         Des propriétés qui seront ajoutées dans les éléments retournés. Par
         défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
         scraper
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
+        <a href="../../tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
         Exemple : <code>target: "_top"</code>
@@ -80,7 +79,7 @@ xxx: gray
       <p>
         Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
         filtre n'est appliqué. Pour plus de détails, voir le scraper
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
+        <a href="../../tools/filter#readme"><em>tools/filter</em></a>.
       </p>
       <p>
         Exemple : <code>"color != 'green'"</code>
diff --git a/src/scraper/icon/ping/ping.js b/src/scraper/icon/ping/ping.js
index ef12c2c..3e29ff9 100644
--- a/src/scraper/icon/ping/ping.js
+++ b/src/scraper/icon/ping/ping.js
@@ -35,7 +35,7 @@ const PingScraper = class {
         this.#colors = new Map(
             Object.entries({ ...colors, ...DEFAULT_COLORS })
                 .filter(([p]) => "xxx" !== p)
-                .map(([p, c]) => [new RegExp(p, "u"), c]),
+                .map(([p, c]) => [new RegExp(p, "v"), c]),
         );
         this.#defaultColor = colors?.xxx ?? DEFAULT_COLORS.xxx;
     }
diff --git a/src/scraper/list/jsonfeed/README.md b/src/scraper/list/jsonfeed/README.md
index e9d8739..4c80d06 100644
--- a/src/scraper/list/jsonfeed/README.md
+++ b/src/scraper/list/jsonfeed/README.md
@@ -8,9 +8,9 @@ Ce scraper récupère la liste des derniers éléments d'un flux
 
 Il peut être utilisé avec les modules :
 
-- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) ;
-- [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
-  pour afficher seulement le dernier élément.
+- [_list_](../../../module/list#readme) ;
+- [_single_](../../../module/single#readme) pour afficher seulement le dernier
+  élément.
 
 ## Options
 
@@ -44,7 +44,7 @@ suivantes :
         Des propriétés qui seront ajoutées dans les éléments retournés. Par
         défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
         scraper
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
+        <a href="../../tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
         Exemple : <code>icon: "https://example.com/foo/bar.svg"</code>
@@ -58,7 +58,7 @@ suivantes :
       <p>
         Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
         filtre n'est appliqué. Pour plus de détails, voir le scraper
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
+        <a href="../../tools/filter#readme"><em>tools/filter</em></a>.
       </p>
       <p>
         Exemple : <code>"title != 'foo'"</code>
diff --git a/src/scraper/list/rss/README.md b/src/scraper/list/rss/README.md
index 9f347c9..66b1b45 100644
--- a/src/scraper/list/rss/README.md
+++ b/src/scraper/list/rss/README.md
@@ -7,15 +7,14 @@ Ce scraper récupère les derniers éléments d'un flux **RSS** / **Atom**.
 
 Il peut être utilisé avec les modules :
 
-- [_list_](https://github.com/regseb/gout/tree/HEAD/src/module/list#readme) ;
-- [_single_](https://github.com/regseb/gout/tree/HEAD/src/module/single#readme)
-  pour afficher seulement le dernier élément ;
-- [_podcast_](https://github.com/regseb/gout/tree/HEAD/src/module/podcast#readme)
-  pour un flux RSS avec des
+- [_list_](../../../module/list#readme) ;
+- [_single_](../../../module/single#readme) pour afficher seulement le dernier
+  élément ;
+- [_podcast_](../../../module/podcast#readme) pour un flux RSS avec des
   [`enclosure`](https://www.rssboard.org/rss-specification#ltenclosuregtSubelementOfLtitemgt)
   de type `audio` ;
-- [_image_](https://github.com/regseb/gout/tree/HEAD/src/module/image#readme)
-  pour un flux RSS avec des `enclosure` de type `image`.
+- [_image_](../../../module/image#readme) pour un flux RSS avec des `enclosure`
+  de type `image`.
 
 ## Options
 
@@ -49,7 +48,7 @@ suivantes :
         Des propriétés qui seront ajoutées dans les éléments retournés. Par
         défaut aucune propriété n'est ajoutée. Pour plus de détails, voir le
         scraper
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/complements#readme"><em>tools/complements</em></a>.
+        <a href="../../tools/complements#readme"><em>tools/complements</em></a>.
       </p>
       <p>
         Exemple : <code>icon: "https://example.com/foo/bar.svg"</code>
@@ -63,7 +62,7 @@ suivantes :
       <p>
         Le filtre qui sera appliqué sur les éléments retournés. Par défaut aucun
         filtre n'est appliqué. Pour plus de détails, voir le scraper
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/scraper/tools/filter#readme"><em>tools/filter</em></a>.
+        <a href="../../tools/filter#readme"><em>tools/filter</em></a>.
       </p>
       <p>
         Exemple : <code>"title != 'foo'"</code>
diff --git a/src/scraper/search/opensearch/README.md b/src/scraper/search/opensearch/README.md
index 3b4b5f4..fce9913 100644
--- a/src/scraper/search/opensearch/README.md
+++ b/src/scraper/search/opensearch/README.md
@@ -6,8 +6,7 @@
 Ce scraper extrait les données au format
 [**OpenSearch**](https://github.com/dewitt/opensearch) d'un moteur de recherche.
 
-Il peut être utilisé avec le module
-[_search_](https://github.com/regseb/gout/tree/HEAD/src/module/search#readme).
+Il peut être utilisé avec le module [_search_](../../../module/search#readme).
 
 ## Options
 
@@ -55,7 +54,7 @@ suivantes :
     <td>
       <p>
         Des propriétés qui seront retournées par la méthode
-        <a href="https://github.com/regseb/gout/tree/HEAD/src/module/search#scrapers"><code>info()</code></a>.
+        <a href="../../../module/search#scrapers"><code>info()</code></a>.
       </p>
       <p>
         Exemple : <pre><code>
diff --git a/src/scraper/tools/complements/README.md b/src/scraper/tools/complements/README.md
index e20d800..ae6e81b 100644
--- a/src/scraper/tools/complements/README.md
+++ b/src/scraper/tools/complements/README.md
@@ -60,8 +60,7 @@ du tableau.
 Ce widget affiche les dernières vidéos de la chaine YouTube de
 [Arte](https://www.youtube.com/@arte) en ajoutant le logo de Arte à chaque
 élément. L'option `complements` est passée au scraper
-[_list/rss_](https://github.com/regseb/gout/tree/HEAD/src/scraper/list/rss#readme)
-car ce scraper utilise _tools/complements_.
+[_list/rss_](../../list/rss#readme) car ce scraper utilise _tools/complements_.
 
 ```html
 <script type="application/yaml">
diff --git a/src/scraper/tools/filter/README.md b/src/scraper/tools/filter/README.md
index 62ea321..d1e1054 100644
--- a/src/scraper/tools/filter/README.md
+++ b/src/scraper/tools/filter/README.md
@@ -99,8 +99,7 @@ tableau.
 
 Ce widget affiche les derniers reportages de la chaine YouTube de
 [Arte](https://www.youtube.com/@arte). L'option `filter` est passée au scraper
-[_list/rss_](https://github.com/regseb/gout/tree/HEAD/src/scraper/list/rss#readme)
-car ce scraper utilise _tools/filter_.
+[_list/rss_](../../list/rss#readme) car ce scraper utilise _tools/filter_.
 
 ```html
 <script type="application/yaml">

From d5cfcc1ab09847abbaaeef5ffe871ad18e20542c Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
 <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sat, 9 Nov 2024 18:04:32 +0100
Subject: [PATCH 38/38] chore(main): release 0.13.0 (#20)

---
 .release-please/manifest.json        |  2 +-
 CHANGELOG.md                         | 16 ++++++++++++++++
 package-lock.json                    |  4 ++--
 package.json                         |  2 +-
 src/extension/chromium/manifest.json |  2 +-
 src/extension/firefox/manifest.json  |  2 +-
 6 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/.release-please/manifest.json b/.release-please/manifest.json
index 9a1c691..5f36bca 100644
--- a/.release-please/manifest.json
+++ b/.release-please/manifest.json
@@ -1 +1 @@
-{ ".": "0.12.1" }
+{ ".": "0.13.0" }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 20e9b8e..965c4b5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,21 @@
 # Changelog
 
+## [0.13.0](https://github.com/regseb/gout/compare/v0.12.1...v0.13.0) (2024-11-09)
+
+### Features
+
+- Simplifier les images SVG.
+  ([75b0ec7](https://github.com/regseb/gout/commit/75b0ec7b16137c074f21de62d0afd34b744599bc))
+- **tools/filter:** Ajouter le support des RegExp.
+  ([f1dce28](https://github.com/regseb/gout/commit/f1dce28a5af028e6bd5e92acceb1821b110864d8))
+
+### Bug Fixes
+
+- Gérer les différents cas pour modifier les entêtes.
+  ([06ea93b](https://github.com/regseb/gout/commit/06ea93b0fa202297a88c2859c774aaa1657975af))
+- **list/rss:** Récupérer les données dans "updated".
+  ([48ae531](https://github.com/regseb/gout/commit/48ae5313d7c65176ac9db1fe61ebfcc85801401f))
+
 ## [0.12.1](https://github.com/regseb/gout/compare/v0.12.0...v0.12.1) (2024-08-11)
 
 ### Bug Fixes
diff --git a/package-lock.json b/package-lock.json
index ebe9921..8b27d76 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "gout",
-  "version": "0.12.1",
+  "version": "0.13.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "gout",
-      "version": "0.12.1",
+      "version": "0.13.0",
       "funding": [
         "https://buymeacoffee.com/regseb",
         "https://www.paypal.me/sebastienregne"
diff --git a/package.json b/package.json
index ad28028..44bb1b4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "gout",
-  "version": "0.12.1",
+  "version": "0.13.0",
   "description": "Agrégateur d'Internet (flux RSS et tout le reste).",
   "keywords": [
     "gout",
diff --git a/src/extension/chromium/manifest.json b/src/extension/chromium/manifest.json
index eae1e81..975d261 100644
--- a/src/extension/chromium/manifest.json
+++ b/src/extension/chromium/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 3,
   "name": "Gout",
-  "version": "0.12.1",
+  "version": "0.13.0",
   "action": {
     "default_icon": {
       "16": "img/icon16.png",
diff --git a/src/extension/firefox/manifest.json b/src/extension/firefox/manifest.json
index 61001fd..11779b5 100644
--- a/src/extension/firefox/manifest.json
+++ b/src/extension/firefox/manifest.json
@@ -7,7 +7,7 @@
   },
   "manifest_version": 2,
   "name": "Gout",
-  "version": "0.12.1",
+  "version": "0.13.0",
   "browser_action": {
     "default_icon": {
       "16": "img/icon16.png",