diff --git a/eslint.config.js b/eslint.config.js
index 598502eab2cfba0109b2b53b213fed8d590b8074..805dc6fc5c47ba85601b20a186df94f603a0e9f1 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -27,4 +27,7 @@ export default [
       "vue/require-prop-types": "off",
     },
   },
+  {
+    ignores: ["src/utils/md5.js"],
+  },
 ];
diff --git a/package-lock.json b/package-lock.json
index da62351ca6317c0874411306d9c64fe75b6c9bf9..df430f6f9973e4e4aec5bf381ac9762e338854ba 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -281,68 +281,68 @@
       }
     },
     "node_modules/@aws-sdk/client-s3": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.693.0.tgz",
-      "integrity": "sha512-vgGI2e0Q6pzyhqfrSysi+sk/i+Nl+lMon67oqj/57RcCw9daL1/inpS+ADuwHpiPWkrg+U0bOXnmHjkLeTslJg==",
+      "version": "3.697.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.697.0.tgz",
+      "integrity": "sha512-NJ5V9whlb99YVAG/b0nLSb9sM/ZrEJZC+JT3Skxu7dgo6LIFLavdXjEtkR+rFdG34Gps34jwJ7wvKG2mp1zKHg==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha1-browser": "5.2.0",
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.693.0",
-        "@aws-sdk/client-sts": "3.693.0",
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/credential-provider-node": "3.693.0",
-        "@aws-sdk/middleware-bucket-endpoint": "3.693.0",
-        "@aws-sdk/middleware-expect-continue": "3.693.0",
-        "@aws-sdk/middleware-flexible-checksums": "3.693.0",
-        "@aws-sdk/middleware-host-header": "3.693.0",
-        "@aws-sdk/middleware-location-constraint": "3.693.0",
-        "@aws-sdk/middleware-logger": "3.693.0",
-        "@aws-sdk/middleware-recursion-detection": "3.693.0",
-        "@aws-sdk/middleware-sdk-s3": "3.693.0",
-        "@aws-sdk/middleware-ssec": "3.693.0",
-        "@aws-sdk/middleware-user-agent": "3.693.0",
-        "@aws-sdk/region-config-resolver": "3.693.0",
-        "@aws-sdk/signature-v4-multi-region": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@aws-sdk/util-endpoints": "3.693.0",
-        "@aws-sdk/util-user-agent-browser": "3.693.0",
-        "@aws-sdk/util-user-agent-node": "3.693.0",
-        "@aws-sdk/xml-builder": "3.693.0",
-        "@smithy/config-resolver": "^3.0.11",
-        "@smithy/core": "^2.5.2",
-        "@smithy/eventstream-serde-browser": "^3.0.12",
-        "@smithy/eventstream-serde-config-resolver": "^3.0.9",
-        "@smithy/eventstream-serde-node": "^3.0.11",
-        "@smithy/fetch-http-handler": "^4.1.0",
-        "@smithy/hash-blob-browser": "^3.1.8",
-        "@smithy/hash-node": "^3.0.9",
-        "@smithy/hash-stream-node": "^3.1.8",
-        "@smithy/invalid-dependency": "^3.0.9",
-        "@smithy/md5-js": "^3.0.9",
-        "@smithy/middleware-content-length": "^3.0.11",
-        "@smithy/middleware-endpoint": "^3.2.2",
-        "@smithy/middleware-retry": "^3.0.26",
-        "@smithy/middleware-serde": "^3.0.9",
-        "@smithy/middleware-stack": "^3.0.9",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/node-http-handler": "^3.3.0",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/smithy-client": "^3.4.3",
-        "@smithy/types": "^3.7.0",
-        "@smithy/url-parser": "^3.0.9",
+        "@aws-sdk/client-sso-oidc": "3.696.0",
+        "@aws-sdk/client-sts": "3.696.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-node": "3.696.0",
+        "@aws-sdk/middleware-bucket-endpoint": "3.696.0",
+        "@aws-sdk/middleware-expect-continue": "3.696.0",
+        "@aws-sdk/middleware-flexible-checksums": "3.697.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-location-constraint": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-sdk-s3": "3.696.0",
+        "@aws-sdk/middleware-ssec": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/signature-v4-multi-region": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@aws-sdk/xml-builder": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/eventstream-serde-browser": "^3.0.13",
+        "@smithy/eventstream-serde-config-resolver": "^3.0.10",
+        "@smithy/eventstream-serde-node": "^3.0.12",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-blob-browser": "^3.1.9",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/hash-stream-node": "^3.1.9",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/md5-js": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.26",
-        "@smithy/util-defaults-mode-node": "^3.0.26",
-        "@smithy/util-endpoints": "^2.1.5",
-        "@smithy/util-middleware": "^3.0.9",
-        "@smithy/util-retry": "^3.0.9",
-        "@smithy/util-stream": "^3.3.0",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
+        "@smithy/util-stream": "^3.3.1",
         "@smithy/util-utf8": "^3.0.0",
-        "@smithy/util-waiter": "^3.1.8",
+        "@smithy/util-waiter": "^3.1.9",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -350,47 +350,47 @@
       }
     },
     "node_modules/@aws-sdk/client-sso": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz",
-      "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.696.0.tgz",
+      "integrity": "sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/middleware-host-header": "3.693.0",
-        "@aws-sdk/middleware-logger": "3.693.0",
-        "@aws-sdk/middleware-recursion-detection": "3.693.0",
-        "@aws-sdk/middleware-user-agent": "3.693.0",
-        "@aws-sdk/region-config-resolver": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@aws-sdk/util-endpoints": "3.693.0",
-        "@aws-sdk/util-user-agent-browser": "3.693.0",
-        "@aws-sdk/util-user-agent-node": "3.693.0",
-        "@smithy/config-resolver": "^3.0.11",
-        "@smithy/core": "^2.5.2",
-        "@smithy/fetch-http-handler": "^4.1.0",
-        "@smithy/hash-node": "^3.0.9",
-        "@smithy/invalid-dependency": "^3.0.9",
-        "@smithy/middleware-content-length": "^3.0.11",
-        "@smithy/middleware-endpoint": "^3.2.2",
-        "@smithy/middleware-retry": "^3.0.26",
-        "@smithy/middleware-serde": "^3.0.9",
-        "@smithy/middleware-stack": "^3.0.9",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/node-http-handler": "^3.3.0",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/smithy-client": "^3.4.3",
-        "@smithy/types": "^3.7.0",
-        "@smithy/url-parser": "^3.0.9",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.26",
-        "@smithy/util-defaults-mode-node": "^3.0.26",
-        "@smithy/util-endpoints": "^2.1.5",
-        "@smithy/util-middleware": "^3.0.9",
-        "@smithy/util-retry": "^3.0.9",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -399,48 +399,48 @@
       }
     },
     "node_modules/@aws-sdk/client-sso-oidc": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz",
-      "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.696.0.tgz",
+      "integrity": "sha512-ikxQ3mo86d1mAq5zTaQAh8rLBERwL+I4MUYu/IVYW2hhl9J2SDsl0SgnKeXQG6S8zWuHcBO587zsZaRta1MQ/g==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/credential-provider-node": "3.693.0",
-        "@aws-sdk/middleware-host-header": "3.693.0",
-        "@aws-sdk/middleware-logger": "3.693.0",
-        "@aws-sdk/middleware-recursion-detection": "3.693.0",
-        "@aws-sdk/middleware-user-agent": "3.693.0",
-        "@aws-sdk/region-config-resolver": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@aws-sdk/util-endpoints": "3.693.0",
-        "@aws-sdk/util-user-agent-browser": "3.693.0",
-        "@aws-sdk/util-user-agent-node": "3.693.0",
-        "@smithy/config-resolver": "^3.0.11",
-        "@smithy/core": "^2.5.2",
-        "@smithy/fetch-http-handler": "^4.1.0",
-        "@smithy/hash-node": "^3.0.9",
-        "@smithy/invalid-dependency": "^3.0.9",
-        "@smithy/middleware-content-length": "^3.0.11",
-        "@smithy/middleware-endpoint": "^3.2.2",
-        "@smithy/middleware-retry": "^3.0.26",
-        "@smithy/middleware-serde": "^3.0.9",
-        "@smithy/middleware-stack": "^3.0.9",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/node-http-handler": "^3.3.0",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/smithy-client": "^3.4.3",
-        "@smithy/types": "^3.7.0",
-        "@smithy/url-parser": "^3.0.9",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-node": "3.696.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.26",
-        "@smithy/util-defaults-mode-node": "^3.0.26",
-        "@smithy/util-endpoints": "^2.1.5",
-        "@smithy/util-middleware": "^3.0.9",
-        "@smithy/util-retry": "^3.0.9",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -448,53 +448,53 @@
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.693.0"
+        "@aws-sdk/client-sts": "^3.696.0"
       }
     },
     "node_modules/@aws-sdk/client-sts": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz",
-      "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.696.0.tgz",
+      "integrity": "sha512-eJOxR8/UyI7kGSRyE751Ea7MKEzllQs7eNveDJy9OP4t/jsN/P19HJ1YHeA1np40JRTUBfqa6WLAAiIXsk8rkg==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/sha256-browser": "5.2.0",
         "@aws-crypto/sha256-js": "5.2.0",
-        "@aws-sdk/client-sso-oidc": "3.693.0",
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/credential-provider-node": "3.693.0",
-        "@aws-sdk/middleware-host-header": "3.693.0",
-        "@aws-sdk/middleware-logger": "3.693.0",
-        "@aws-sdk/middleware-recursion-detection": "3.693.0",
-        "@aws-sdk/middleware-user-agent": "3.693.0",
-        "@aws-sdk/region-config-resolver": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@aws-sdk/util-endpoints": "3.693.0",
-        "@aws-sdk/util-user-agent-browser": "3.693.0",
-        "@aws-sdk/util-user-agent-node": "3.693.0",
-        "@smithy/config-resolver": "^3.0.11",
-        "@smithy/core": "^2.5.2",
-        "@smithy/fetch-http-handler": "^4.1.0",
-        "@smithy/hash-node": "^3.0.9",
-        "@smithy/invalid-dependency": "^3.0.9",
-        "@smithy/middleware-content-length": "^3.0.11",
-        "@smithy/middleware-endpoint": "^3.2.2",
-        "@smithy/middleware-retry": "^3.0.26",
-        "@smithy/middleware-serde": "^3.0.9",
-        "@smithy/middleware-stack": "^3.0.9",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/node-http-handler": "^3.3.0",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/smithy-client": "^3.4.3",
-        "@smithy/types": "^3.7.0",
-        "@smithy/url-parser": "^3.0.9",
+        "@aws-sdk/client-sso-oidc": "3.696.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-node": "3.696.0",
+        "@aws-sdk/middleware-host-header": "3.696.0",
+        "@aws-sdk/middleware-logger": "3.696.0",
+        "@aws-sdk/middleware-recursion-detection": "3.696.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/region-config-resolver": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@aws-sdk/util-user-agent-browser": "3.696.0",
+        "@aws-sdk/util-user-agent-node": "3.696.0",
+        "@smithy/config-resolver": "^3.0.12",
+        "@smithy/core": "^2.5.3",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/hash-node": "^3.0.10",
+        "@smithy/invalid-dependency": "^3.0.10",
+        "@smithy/middleware-content-length": "^3.0.12",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/middleware-retry": "^3.0.27",
+        "@smithy/middleware-serde": "^3.0.10",
+        "@smithy/middleware-stack": "^3.0.10",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/node-http-handler": "^3.3.1",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/url-parser": "^3.0.10",
         "@smithy/util-base64": "^3.0.0",
         "@smithy/util-body-length-browser": "^3.0.0",
         "@smithy/util-body-length-node": "^3.0.0",
-        "@smithy/util-defaults-mode-browser": "^3.0.26",
-        "@smithy/util-defaults-mode-node": "^3.0.26",
-        "@smithy/util-endpoints": "^2.1.5",
-        "@smithy/util-middleware": "^3.0.9",
-        "@smithy/util-retry": "^3.0.9",
+        "@smithy/util-defaults-mode-browser": "^3.0.27",
+        "@smithy/util-defaults-mode-node": "^3.0.27",
+        "@smithy/util-endpoints": "^2.1.6",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-retry": "^3.0.10",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -503,20 +503,20 @@
       }
     },
     "node_modules/@aws-sdk/core": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz",
-      "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.696.0.tgz",
+      "integrity": "sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/core": "^2.5.2",
-        "@smithy/node-config-provider": "^3.1.10",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/core": "^2.5.3",
+        "@smithy/node-config-provider": "^3.1.11",
         "@smithy/property-provider": "^3.1.9",
-        "@smithy/protocol-http": "^4.1.6",
+        "@smithy/protocol-http": "^4.1.7",
         "@smithy/signature-v4": "^4.2.2",
-        "@smithy/smithy-client": "^3.4.3",
-        "@smithy/types": "^3.7.0",
-        "@smithy/util-middleware": "^3.0.9",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-middleware": "^3.0.10",
         "fast-xml-parser": "4.4.1",
         "tslib": "^2.6.2"
       },
@@ -525,15 +525,15 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-env": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.693.0.tgz",
-      "integrity": "sha512-hMUZaRSF7+iBKZfBHNLihFs9zvpM1CB8MBOTnTp5NGCVkRYF3SB2LH+Kcippe0ats4qCyB1eEoyQX99rERp2iQ==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.696.0.tgz",
+      "integrity": "sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
         "@smithy/property-provider": "^3.1.9",
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -541,20 +541,20 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-http": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz",
-      "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.696.0.tgz",
+      "integrity": "sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/fetch-http-handler": "^4.1.0",
-        "@smithy/node-http-handler": "^3.3.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/fetch-http-handler": "^4.1.1",
+        "@smithy/node-http-handler": "^3.3.1",
         "@smithy/property-provider": "^3.1.9",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/smithy-client": "^3.4.3",
-        "@smithy/types": "^3.7.0",
-        "@smithy/util-stream": "^3.3.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-stream": "^3.3.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -562,48 +562,48 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-ini": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz",
-      "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.696.0.tgz",
+      "integrity": "sha512-9WsZZofjPjNAAZhIh7c7FOhLK8CR3RnGgUm1tdZzV6ZSM1BuS2m6rdwIilRxAh3fxxKDkmW/r/aYmmCYwA+AYA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/credential-provider-env": "3.693.0",
-        "@aws-sdk/credential-provider-http": "3.693.0",
-        "@aws-sdk/credential-provider-process": "3.693.0",
-        "@aws-sdk/credential-provider-sso": "3.693.0",
-        "@aws-sdk/credential-provider-web-identity": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/credential-provider-env": "3.696.0",
+        "@aws-sdk/credential-provider-http": "3.696.0",
+        "@aws-sdk/credential-provider-process": "3.696.0",
+        "@aws-sdk/credential-provider-sso": "3.696.0",
+        "@aws-sdk/credential-provider-web-identity": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
         "@smithy/credential-provider-imds": "^3.2.6",
         "@smithy/property-provider": "^3.1.9",
         "@smithy/shared-ini-file-loader": "^3.1.10",
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.693.0"
+        "@aws-sdk/client-sts": "^3.696.0"
       }
     },
     "node_modules/@aws-sdk/credential-provider-node": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz",
-      "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.696.0.tgz",
+      "integrity": "sha512-8F6y5FcfRuMJouC5s207Ko1mcVvOXReBOlJmhIwE4QH1CnO/CliIyepnAZrRQ659mo5wIuquz6gXnpYbitEVMg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/credential-provider-env": "3.693.0",
-        "@aws-sdk/credential-provider-http": "3.693.0",
-        "@aws-sdk/credential-provider-ini": "3.693.0",
-        "@aws-sdk/credential-provider-process": "3.693.0",
-        "@aws-sdk/credential-provider-sso": "3.693.0",
-        "@aws-sdk/credential-provider-web-identity": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/credential-provider-env": "3.696.0",
+        "@aws-sdk/credential-provider-http": "3.696.0",
+        "@aws-sdk/credential-provider-ini": "3.696.0",
+        "@aws-sdk/credential-provider-process": "3.696.0",
+        "@aws-sdk/credential-provider-sso": "3.696.0",
+        "@aws-sdk/credential-provider-web-identity": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
         "@smithy/credential-provider-imds": "^3.2.6",
         "@smithy/property-provider": "^3.1.9",
         "@smithy/shared-ini-file-loader": "^3.1.10",
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -611,16 +611,16 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-process": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.693.0.tgz",
-      "integrity": "sha512-cvxQkrTWHHjeHrPlj7EWXPnFSq8x7vMx+Zn1oTsMpCY445N9KuzjfJTkmNGwU2GT6rSZI9/0MM02aQvl5bBBTQ==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.696.0.tgz",
+      "integrity": "sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
         "@smithy/property-provider": "^3.1.9",
         "@smithy/shared-ini-file-loader": "^3.1.10",
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -628,18 +628,18 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-sso": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz",
-      "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.696.0.tgz",
+      "integrity": "sha512-4SSZ9Nk08JSu4/rX1a+dEac/Ims1HCXfV7YLUe5LGdtRLSKRoQQUy+hkFaGYoSugP/p1UfUPl3BuTO9Vv8z1pA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/client-sso": "3.693.0",
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/token-providers": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/client-sso": "3.696.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/token-providers": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
         "@smithy/property-provider": "^3.1.9",
         "@smithy/shared-ini-file-loader": "^3.1.10",
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -647,33 +647,33 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-web-identity": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz",
-      "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.696.0.tgz",
+      "integrity": "sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
         "@smithy/property-provider": "^3.1.9",
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sts": "^3.693.0"
+        "@aws-sdk/client-sts": "^3.696.0"
       }
     },
     "node_modules/@aws-sdk/lib-storage": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.693.0.tgz",
-      "integrity": "sha512-3sHR0Dnrz63kKyFNx5l2/50i4VnbfCjQbhPkkFwt2Cu/6DjtJp5J8eAr6DHK+vS4cEFkCTQZ7UOayPmHqTLeeQ==",
+      "version": "3.697.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.697.0.tgz",
+      "integrity": "sha512-P8WhrBFQ+7NADdeuuMv8o/IG7wwLG67u+ng1JrX4+QQdgoJYXoOceeVee8TjsYd4e+2i2zexIOnYTmpqwNtvxw==",
       "license": "Apache-2.0",
       "dependencies": {
         "@smithy/abort-controller": "^3.1.7",
-        "@smithy/middleware-endpoint": "^3.2.2",
-        "@smithy/smithy-client": "^3.4.3",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/smithy-client": "^3.4.4",
         "buffer": "5.6.0",
         "events": "3.3.0",
         "stream-browserify": "3.0.0",
@@ -683,20 +683,20 @@
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-s3": "^3.693.0"
+        "@aws-sdk/client-s3": "^3.697.0"
       }
     },
     "node_modules/@aws-sdk/middleware-bucket-endpoint": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.693.0.tgz",
-      "integrity": "sha512-cPIa+lxMYiFRHtxKfNIVSFGO6LSgZCk42pu3d7KGwD6hu6vXRD5B2/DD3rPcEH1zgl2j0Kx1oGAV7SRXKHSFag==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.696.0.tgz",
+      "integrity": "sha512-V07jishKHUS5heRNGFpCWCSTjRJyQLynS/ncUeE8ZYtG66StOOQWftTwDfFOSoXlIqrXgb4oT9atryzXq7Z4LQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/types": "3.696.0",
         "@aws-sdk/util-arn-parser": "3.693.0",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/types": "^3.7.0",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-config-provider": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -705,14 +705,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-expect-continue": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.693.0.tgz",
-      "integrity": "sha512-MuK/gsJWpHz6Tv0CqTCS+QNOxLa2RfPh1biVCu/uO3l7kA0TjQ/C+tfgKvLXeH103tuDrOVINK+bt2ENmI3SWg==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.696.0.tgz",
+      "integrity": "sha512-vpVukqY3U2pb+ULeX0shs6L0aadNep6kKzjme/MyulPjtUDJpD3AekHsXRrCCGLmOqSKqRgQn5zhV9pQhHsb6Q==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -720,22 +720,22 @@
       }
     },
     "node_modules/@aws-sdk/middleware-flexible-checksums": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.693.0.tgz",
-      "integrity": "sha512-xkS6zjuE11ob93H9t65kHzphXcUMnN2SmIm2wycUPg+hi8Q6DJA6U2p//6oXkrr9oHy1QvwtllRd7SAd63sFKQ==",
+      "version": "3.697.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.697.0.tgz",
+      "integrity": "sha512-K/y43P+NuHu5+21/29BoJSltcPekvcCU8i74KlGGHbW2Z105e5QVZlFjxivcPOjOA3gdC0W4SoFSIWam5RBhzw==",
       "license": "Apache-2.0",
       "dependencies": {
         "@aws-crypto/crc32": "5.2.0",
         "@aws-crypto/crc32c": "5.2.0",
         "@aws-crypto/util": "5.2.0",
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
         "@smithy/is-array-buffer": "^3.0.0",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/types": "^3.7.0",
-        "@smithy/util-middleware": "^3.0.9",
-        "@smithy/util-stream": "^3.3.0",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-stream": "^3.3.1",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -744,14 +744,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-host-header": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz",
-      "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.696.0.tgz",
+      "integrity": "sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -759,13 +759,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-location-constraint": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.693.0.tgz",
-      "integrity": "sha512-eDAExTZ9uNIP7vs2JCVCOuWJauGueisBSn+Ovt7UvvuEUp6KOIJqn8oFxWmyUQu2GvbG4OcaTLgbqD95YHTB0Q==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.696.0.tgz",
+      "integrity": "sha512-FgH12OB0q+DtTrP2aiDBddDKwL4BPOrm7w3VV9BJrSdkqQCNBPz8S1lb0y5eVH4tBG+2j7gKPlOv1wde4jF/iw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -773,13 +773,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-logger": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz",
-      "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.696.0.tgz",
+      "integrity": "sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -787,14 +787,14 @@
       }
     },
     "node_modules/@aws-sdk/middleware-recursion-detection": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz",
-      "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.696.0.tgz",
+      "integrity": "sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -802,23 +802,23 @@
       }
     },
     "node_modules/@aws-sdk/middleware-sdk-s3": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.693.0.tgz",
-      "integrity": "sha512-5A++RBjJ3guyq5pbYs+Oq5hMlA8CK2OWaHx09cxVfhHWl/RoaY8DXrft4gnhoUEBrrubyMw7r9j7RIMLvS58kg==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.696.0.tgz",
+      "integrity": "sha512-M7fEiAiN7DBMHflzOFzh1I2MNSlLpbiH2ubs87bdRc2wZsDPSbs4l3v6h3WLhxoQK0bq6vcfroudrLBgvCuX3Q==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
         "@aws-sdk/util-arn-parser": "3.693.0",
-        "@smithy/core": "^2.5.2",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/protocol-http": "^4.1.6",
+        "@smithy/core": "^2.5.3",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/protocol-http": "^4.1.7",
         "@smithy/signature-v4": "^4.2.2",
-        "@smithy/smithy-client": "^3.4.3",
-        "@smithy/types": "^3.7.0",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.9",
-        "@smithy/util-stream": "^3.3.0",
+        "@smithy/util-middleware": "^3.0.10",
+        "@smithy/util-stream": "^3.3.1",
         "@smithy/util-utf8": "^3.0.0",
         "tslib": "^2.6.2"
       },
@@ -827,13 +827,13 @@
       }
     },
     "node_modules/@aws-sdk/middleware-ssec": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.693.0.tgz",
-      "integrity": "sha512-Ro5vzI7SRgEeuoMk3fKqFjGv6mG4c7VsSCDwnkiasmafQFBTPvUIpgmu2FXMHqW/OthvoiOzpSrlJ9Bwlx2f8A==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.696.0.tgz",
+      "integrity": "sha512-w/d6O7AOZ7Pg3w2d3BxnX5RmGNWb5X4RNxF19rJqcgu/xqxxE/QwZTNd5a7eTsqLXAUIfbbR8hh0czVfC1pJLA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -841,17 +841,17 @@
       }
     },
     "node_modules/@aws-sdk/middleware-user-agent": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz",
-      "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.696.0.tgz",
+      "integrity": "sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/core": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@aws-sdk/util-endpoints": "3.693.0",
-        "@smithy/core": "^2.5.2",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/core": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-endpoints": "3.696.0",
+        "@smithy/core": "^2.5.3",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -859,16 +859,16 @@
       }
     },
     "node_modules/@aws-sdk/region-config-resolver": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz",
-      "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.696.0.tgz",
+      "integrity": "sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/types": "^3.7.1",
         "@smithy/util-config-provider": "^3.0.0",
-        "@smithy/util-middleware": "^3.0.9",
+        "@smithy/util-middleware": "^3.0.10",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -876,18 +876,18 @@
       }
     },
     "node_modules/@aws-sdk/s3-request-presigner": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.693.0.tgz",
-      "integrity": "sha512-I/TCM43kZn1xb+EWMAjkcisDVrq3mYsu0ZFP81J9K/PM6n3s9bK04jaY56c3pCl6btigIOHhreutYSRRBJsCDw==",
+      "version": "3.697.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.697.0.tgz",
+      "integrity": "sha512-bA70sQZHedI0zz4trESBfEtYMat8oV+ijxnGUWg6L7S3oNuEOh57V/LWz1jn+ieZPgXDrMfegXZm3BaYXxS1XQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/signature-v4-multi-region": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@aws-sdk/util-format-url": "3.693.0",
-        "@smithy/middleware-endpoint": "^3.2.2",
-        "@smithy/protocol-http": "^4.1.6",
-        "@smithy/smithy-client": "^3.4.3",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/signature-v4-multi-region": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@aws-sdk/util-format-url": "3.696.0",
+        "@smithy/middleware-endpoint": "^3.2.3",
+        "@smithy/protocol-http": "^4.1.7",
+        "@smithy/smithy-client": "^3.4.4",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -895,16 +895,16 @@
       }
     },
     "node_modules/@aws-sdk/signature-v4-multi-region": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.693.0.tgz",
-      "integrity": "sha512-s7zbbsoVIriTR4ZGaateKuTqz6ddpazAyHvjk7I9kd+NvGNPiuAI18UdbuiiRI6K5HuYKf1ah6mKWFGPG15/kQ==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.696.0.tgz",
+      "integrity": "sha512-ijPkoLjXuPtgxAYlDoYls8UaG/VKigROn9ebbvPL/orEY5umedd3iZTcS9T+uAf4Ur3GELLxMQiERZpfDKaz3g==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/middleware-sdk-s3": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/protocol-http": "^4.1.6",
+        "@aws-sdk/middleware-sdk-s3": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/protocol-http": "^4.1.7",
         "@smithy/signature-v4": "^4.2.2",
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -912,31 +912,31 @@
       }
     },
     "node_modules/@aws-sdk/token-providers": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz",
-      "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.696.0.tgz",
+      "integrity": "sha512-fvTcMADrkwRdNwVmJXi2pSPf1iizmUqczrR1KusH4XehI/KybS4U6ViskRT0v07vpxwL7x+iaD/8fR0PUu5L/g==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
+        "@aws-sdk/types": "3.696.0",
         "@smithy/property-provider": "^3.1.9",
         "@smithy/shared-ini-file-loader": "^3.1.10",
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
         "node": ">=16.0.0"
       },
       "peerDependencies": {
-        "@aws-sdk/client-sso-oidc": "^3.693.0"
+        "@aws-sdk/client-sso-oidc": "^3.696.0"
       }
     },
     "node_modules/@aws-sdk/types": {
-      "version": "3.692.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.692.0.tgz",
-      "integrity": "sha512-RpNvzD7zMEhiKgmlxGzyXaEcg2khvM7wd5sSHVapOcrde1awQSOMGI4zKBQ+wy5TnDfrm170ROz/ERLYtrjPZA==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz",
+      "integrity": "sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -956,14 +956,14 @@
       }
     },
     "node_modules/@aws-sdk/util-endpoints": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz",
-      "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.696.0.tgz",
+      "integrity": "sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/types": "^3.7.0",
-        "@smithy/util-endpoints": "^2.1.5",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/types": "^3.7.1",
+        "@smithy/util-endpoints": "^2.1.6",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -971,14 +971,14 @@
       }
     },
     "node_modules/@aws-sdk/util-format-url": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.693.0.tgz",
-      "integrity": "sha512-0O4fSq45GOwC89Os0f92z9kK1AV22+W980O+v+GkMLUkRG7/nsIJkq1LKiIPV+sbC+KC/HmW4yThxFzHO7GDxA==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.696.0.tgz",
+      "integrity": "sha512-R6yK1LozUD1GdAZRPhNsIow6VNFJUTyyoIar1OCWaknlucBMcq7musF3DN3TlORBwfFMj5buHc2ET9OtMtzvuA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/querystring-builder": "^3.0.9",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/querystring-builder": "^3.0.10",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -998,27 +998,27 @@
       }
     },
     "node_modules/@aws-sdk/util-user-agent-browser": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz",
-      "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.696.0.tgz",
+      "integrity": "sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/types": "^3.7.1",
         "bowser": "^2.11.0",
         "tslib": "^2.6.2"
       }
     },
     "node_modules/@aws-sdk/util-user-agent-node": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz",
-      "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.696.0.tgz",
+      "integrity": "sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@aws-sdk/middleware-user-agent": "3.693.0",
-        "@aws-sdk/types": "3.692.0",
-        "@smithy/node-config-provider": "^3.1.10",
-        "@smithy/types": "^3.7.0",
+        "@aws-sdk/middleware-user-agent": "3.696.0",
+        "@aws-sdk/types": "3.696.0",
+        "@smithy/node-config-provider": "^3.1.11",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1034,12 +1034,12 @@
       }
     },
     "node_modules/@aws-sdk/xml-builder": {
-      "version": "3.693.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.693.0.tgz",
-      "integrity": "sha512-C/rPwJcqnV8VDr2/VtcQnymSpcfEEgH1Jm6V0VmfXNZFv4Qzf1eCS8nsec0gipYgZB+cBBjfXw5dAk6pJ8ubpw==",
+      "version": "3.696.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.696.0.tgz",
+      "integrity": "sha512-dn1mX+EeqivoLYnY7p2qLrir0waPnCgS/0YdRCAVU2x14FgfUYCH6Im3w3oi2dMwhxfKY5lYVB5NKvZu7uI9lQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@smithy/types": "^3.7.0",
+        "@smithy/types": "^3.7.1",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -1685,9 +1685,9 @@
       }
     },
     "node_modules/@fortawesome/fontawesome-free": {
-      "version": "6.7.0",
-      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.0.tgz",
-      "integrity": "sha512-lXTP8oiLGM97Aqjn47nod9awKe574HRfCngFizr7FiHTadKTiPkoVn0Mzg+tZBLD1XpE4CRvcF7/UM3g1jyVYw==",
+      "version": "6.7.1",
+      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.1.tgz",
+      "integrity": "sha512-ALIk/MOh5gYe1TG/ieS5mVUsk7VUIJTJKPMK9rFFqOgfp0Q3d5QiBXbcOMwUvs37fyZVCz46YjOE6IFeOAXCHA==",
       "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)",
       "engines": {
         "node": ">=6"
@@ -1706,9 +1706,9 @@
       }
     },
     "node_modules/@hey-api/openapi-ts": {
-      "version": "0.56.1",
-      "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.56.1.tgz",
-      "integrity": "sha512-AGoFnI2Mx8p70L+yaVnrpVK39Jo9flP4JyUTc5pqyp3syBdfwNecnoCL/JOjMvOq4Jy3IHneRJr0mQXKXZsziA==",
+      "version": "0.56.2",
+      "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.56.2.tgz",
+      "integrity": "sha512-vIjrVt6N1PSmQosjh6FEhb+PSKl2pgUXIaiU32mPO6hRiX6/N4AZ3pRGAebypYXO9SuJKvFkym6onEXQNgsRDg==",
       "dev": true,
       "license": "FSL-1.1-MIT",
       "dependencies": {
@@ -1796,9 +1796,9 @@
       "license": "MIT"
     },
     "node_modules/@kurkle/color": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
-      "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==",
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
+      "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
       "license": "MIT"
     },
     "node_modules/@nodelib/fs.scandir": {
@@ -3228,9 +3228,9 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "22.9.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
-      "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
+      "version": "22.9.1",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz",
+      "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3269,7 +3269,7 @@
       "version": "2.0.7",
       "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
       "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT"
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
@@ -4629,10 +4629,13 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.0.tgz",
-      "integrity": "sha512-AMdOzK44oFWqHEi0wpOqix/fUNY707OmoeFDnbi3Q5I8uOpy21ufUA5cDJPr0bosxrflOVD/H2DMSvuGKJGfmQ==",
-      "license": "(MPL-2.0 OR Apache-2.0)"
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.1.tgz",
+      "integrity": "sha512-NBHEsc0/kzRYQd+AY6HR6B/IgsqzBABrqJbpCDQII/OK6h7B7LXzweZTDsqSW2LkTRpoxf18YUP+YjGySk6B3w==",
+      "license": "(MPL-2.0 OR Apache-2.0)",
+      "optionalDependencies": {
+        "@types/trusted-types": "^2.0.7"
+      }
     },
     "node_modules/dotenv": {
       "version": "16.4.5",
@@ -5694,9 +5697,9 @@
       }
     },
     "node_modules/immutable": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.2.tgz",
-      "integrity": "sha512-1NU7hWZDkV7hJ4PJ9dur9gTNQ4ePNPN4k9/0YhwjzykTi/+3Q5pF93YU5QoVj8BuOnhLgaY8gs0U2pj4kSYVcw==",
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz",
+      "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==",
       "dev": true,
       "license": "MIT"
     },
diff --git a/src/App.vue b/src/App.vue
index 64eb9a5147a8b52d93741c2bb3ba2f2ec5b6e867..f4297b18db393057bb3f5027a2036303a78283cd 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -65,9 +65,9 @@ onBeforeMount(() => {
     },
   );
   router.afterEach((to, from) => {
-    window._paq.push(["setReferrerUrl", from.path]);
-    window._paq.push(["deleteCustomVariables", "page"]);
-    window._paq.push(["deleteCustomDimension", 1]);
+    window._paq?.push(["setReferrerUrl", from.path]);
+    window._paq?.push(["deleteCustomVariables", "page"]);
+    window._paq?.push(["deleteCustomDimension", 1]);
     const mtm_query_keys = Object.keys(to.query ?? {}).filter((key) =>
       key.startsWith("mtm_"),
     );
@@ -80,13 +80,13 @@ onBeforeMount(() => {
               `?${mtm_query_keys[0]}=${to.query[mtm_query_keys[0]]}`,
             )
         : "";
-    window._paq.push(["setCustomUrl", to.path + mtm_query]);
-    window._paq.push(["setDocumentTitle", to.name]);
+    window._paq?.push(["setCustomUrl", to.path + mtm_query]);
+    window._paq?.push(["setDocumentTitle", to.name]);
     if (userRepository.currentUID.length > 0) {
-      window._paq.push(["setUserId", userRepository.currentUID]);
+      window._paq?.push(["setUserId", userRepository.currentUID]);
     }
-    window._paq.push(["trackPageView"]);
-    window._paq.push(["enableLinkTracking"]);
+    window._paq?.push(["trackPageView"]);
+    window._paq?.push(["enableLinkTracking"]);
   });
   router.beforeEach((to) => {
     // redirect path that start with '/dashboard' to ensure backwards compatibility
diff --git a/src/assets/base.css b/src/assets/base.css
index 2f1e22ec1c4e1794dea8ea209c3e7b5db2b99d86..660e9312b1a48369db524f44a184ddbc99207947 100644
--- a/src/assets/base.css
+++ b/src/assets/base.css
@@ -32,7 +32,6 @@
 
     --section-gap: 160px;
     --color-header: rgb(255, 177, 45);
-    --bs-cyan-rgb: rgb(29, 230, 230);
 }
 
 *,
@@ -71,14 +70,8 @@ header {
     --bs-box-shadow-lg: 0 1rem 3rem rgba(150, 150, 150, .575);
     --bs-box-shadow-inset: inset 0 1px 2px rgba(150, 150, 150, .475);
     --color-header: rgb(204, 129, 0);
-    --bs-cyan-rgb: rgb(0, 255, 255);
 }
 
 img {
     max-width: 100%;
 }
-
-.bg-cyan {
-    background-color: var(--bs-cyan-rgb) !important;
-    color: black;
-}
\ No newline at end of file
diff --git a/src/components/modals/BootstrapModal.vue b/src/components/modals/BootstrapModal.vue
index 3ddc22f8942e9eec1e149ea69a7e0c40c90868ff..84382c38a94160672caeb904b961f73a6d756565 100644
--- a/src/components/modals/BootstrapModal.vue
+++ b/src/components/modals/BootstrapModal.vue
@@ -20,7 +20,7 @@ const modalSizeClass = computed<string>(() => {
 });
 
 function trackModalShow() {
-  window._paq.push([
+  window._paq?.push([
     "trackEvent",
     "Modal",
     "Show " + props.modalLabel,
diff --git a/src/components/parameter-schema/GroupNav.vue b/src/components/parameter-schema/GroupNav.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fd1398f3041a31817c4b4a4554a20f6a0967114a
--- /dev/null
+++ b/src/components/parameter-schema/GroupNav.vue
@@ -0,0 +1,275 @@
+<script setup lang="ts">
+import { useRoute, useRouter } from "vue-router";
+import {
+  type NestedWorkflowParameters,
+  ParameterVisibility,
+  type ParameterVisibilityMapping,
+  type TemporaryParams,
+} from "@/types/WorkflowParameters.ts";
+import { computed, onMounted, ref, watch } from "vue";
+import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
+import type { ClowmInfo } from "@/types/ClowmInfo.ts";
+import LastParameterizationsModal from "@/components/parameter-schema/LastParameterizationsModal.vue";
+import UploadParameterFileModal from "@/components/parameter-schema/UploadParameterFileModal.vue";
+import { Tooltip } from "bootstrap";
+
+const props = defineProps<{
+  parameterGroups: object;
+  parameterVisibility: ParameterVisibilityMapping;
+  clowmInfo?: ClowmInfo;
+  launchable?: boolean;
+  formId?: string;
+  workflowId?: string;
+}>();
+
+const emit = defineEmits<{
+  (e: "change-view-mode", viewMode: ParameterVisibility): void;
+  (e: "load-parameters", tempParams: TemporaryParams): void;
+}>();
+
+const route = useRoute();
+const router = useRouter();
+
+const viewMode = ref<ParameterVisibility>(ParameterVisibility.SIMPLE);
+
+watch(
+  () => route.query?.viewMode,
+  (newVal, oldVal) => {
+    if (newVal != oldVal) {
+      /* eslint-disable @typescript-eslint/ban-ts-comment */
+      // @ts-ignore
+      setViewMode(newVal);
+    }
+  },
+);
+
+type ParameterGroup = {
+  group: string;
+  title: string;
+  icon?: string;
+};
+
+// Create a list with the names of all parameter groups
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-ignore
+const navParameterGroups = computed<ParameterGroup[]>(() => {
+  return Object.keys(props.parameterGroups)
+    .map((group) => {
+      return {
+        group: group,
+        /* eslint-disable @typescript-eslint/ban-ts-comment */
+        // @ts-ignore
+        title: props.parameterGroups[group]["title"],
+        /* eslint-disable @typescript-eslint/ban-ts-comment */
+        // @ts-ignore
+        icon: props.parameterGroups[group]["fa_icon"],
+      };
+    })
+    .filter(
+      (group) =>
+        /* eslint-disable @typescript-eslint/ban-ts-comment */
+        // @ts-ignore
+        Object.keys(props.parameterGroups[group.group]["properties"]).filter(
+          (key: string) =>
+            (props.parameterVisibility[key] ?? ParameterVisibility.SIMPLE) <=
+            viewMode.value,
+        ).length > 0,
+    );
+});
+
+function scroll(selectedAnchor: string) {
+  document.querySelector(selectedAnchor)?.scrollIntoView({
+    behavior: "smooth",
+  });
+}
+
+function setViewMode(viewModeString?: string | null) {
+  switch (viewModeString) {
+    case "simple": {
+      viewMode.value = ParameterVisibility.SIMPLE;
+      break;
+    }
+    case "advanced": {
+      viewMode.value = ParameterVisibility.ADVANCED;
+      break;
+    }
+    case "expert": {
+      viewMode.value = ParameterVisibility.EXPERT;
+      break;
+    }
+    default: {
+      viewMode.value = ParameterVisibility.SIMPLE;
+    }
+  }
+  emit("change-view-mode", viewMode.value);
+}
+
+onMounted(() => {
+  /* eslint-disable @typescript-eslint/ban-ts-comment */
+  // @ts-ignore
+  setViewMode(route.query?.["viewMode"]);
+  if (props.launchable && props.clowmInfo?.exampleParameters) {
+    Tooltip.getOrCreateInstance("#TryItOutButton");
+  }
+});
+</script>
+
+<template>
+  <upload-parameter-file-modal
+    v-if="props.launchable"
+    modal-id="parameterUploadModal"
+    @parameters-uploaded="
+      (params: NestedWorkflowParameters) =>
+        emit('load-parameters', {
+          params: params,
+          metaParams: {},
+        })
+    "
+  />
+  <last-parameterizations-modal
+    v-if="props.workflowId != undefined && props.launchable"
+    modal-id="last-parameterization-modal"
+    :workflow-id="props.workflowId"
+    @parameters-selected="(params) => emit('load-parameters', params)"
+  />
+  <div
+    class="col-3 sticky-top border shadow-sm rounded-1 px-0"
+    style="top: 70px !important; max-height: calc(100vh - 150px)"
+  >
+    <h5 class="mx-3 mt-2">Parameter View</h5>
+    <div class="mx-2">
+      <div
+        class="btn-group my-1 w-100"
+        role="group"
+        aria-label="Basic radio toggle button group"
+      >
+        <input
+          id="view-mode-simple"
+          type="radio"
+          class="btn-check"
+          name="view-mode"
+          autocomplete="off"
+          :checked="viewMode === ParameterVisibility.SIMPLE"
+          @click="
+            router.replace({
+              query: { ...route.query, viewMode: 'simple' },
+              hash: route.hash,
+            })
+          "
+        />
+        <label class="btn btn-outline-primary" for="view-mode-simple"
+          >Simple</label
+        >
+        <input
+          id="view-mode-advanced"
+          type="radio"
+          class="btn-check"
+          name="view-mode"
+          autocomplete="off"
+          :checked="viewMode === ParameterVisibility.ADVANCED"
+          @click="
+            router.replace({
+              query: { ...route.query, viewMode: 'advanced' },
+              hash: route.hash,
+            })
+          "
+        />
+        <label class="btn btn-outline-primary" for="view-mode-advanced"
+          >Advanced</label
+        >
+        <input
+          id="view-mode-expert"
+          type="radio"
+          class="btn-check"
+          name="view-mode"
+          autocomplete="off"
+          :checked="viewMode === ParameterVisibility.EXPERT"
+          @click="
+            router.replace({
+              query: { ...route.query, viewMode: 'expert' },
+              hash: route.hash,
+            })
+          "
+        />
+        <label class="btn btn-outline-primary" for="view-mode-expert"
+          >Expert</label
+        >
+      </div>
+    </div>
+    <nav class="h-100">
+      <nav class="nav">
+        <ul class="ps-0">
+          <li
+            v-for="group in navParameterGroups"
+            :key="group.group"
+            class="nav-link"
+          >
+            <router-link
+              :to="{ hash: '#' + group.group, query: route.query }"
+              replace
+              @click="scroll('#' + group.group)"
+            >
+              <font-awesome-icon
+                v-if="group.icon"
+                :icon="group.icon"
+                class="me-2"
+              />
+              {{ group.title }}
+            </router-link>
+          </li>
+          <li v-if="props.launchable" class="nav-link">
+            <router-link
+              :to="{ hash: '#pipelineGeneralOptions', query: route.query }"
+              replace
+              @click="scroll('#pipelineGeneralOptions')"
+            >
+              <font-awesome-icon icon="fa-solid fa-gear" class="me-2" />
+              General Pipeline Options
+            </router-link>
+          </li>
+        </ul>
+      </nav>
+    </nav>
+    <div v-if="props.launchable" class="d-grid gap-2 mb-2 px-2">
+      <button
+        v-if="props.clowmInfo?.exampleParameters"
+        id="TryItOutButton"
+        type="button"
+        class="btn btn-primary"
+        data-bs-toggle="tooltip"
+        data-bs-title="Load example parameters/data for this workflow"
+        @click="
+          emit(`load-parameters`, {
+            params: props.clowmInfo?.exampleParameters,
+            metaParams: {},
+          })
+        "
+      >
+        Try it out
+      </button>
+      <button
+        type="button"
+        class="btn btn-primary"
+        data-bs-toggle="modal"
+        data-bs-target="#last-parameterization-modal"
+      >
+        <font-awesome-icon icon="fas fa-user-gear" class="me-2" />
+        My last parameterizations
+      </button>
+      <button
+        class="btn btn-primary"
+        data-bs-toggle="modal"
+        data-bs-target="#parameterUploadModal"
+      >
+        <font-awesome-icon icon="fa-solid fa-upload" class="me-2" />
+        Upload Parameters
+      </button>
+      <button type="submit" :form="formId" class="btn btn-success btn-lg">
+        <font-awesome-icon icon="fa-solid fa-play" class="me-2" />
+        Launch
+      </button>
+    </div>
+  </div>
+</template>
+
+<style scoped></style>
diff --git a/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue b/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
index 9e401bef0ed515301edc01ba9cdbc981ac29cdba..50a3246f5546de3621b1c22e8a9645e57fe9b1d0 100644
--- a/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
+++ b/src/components/parameter-schema/ParameterSchemaDescriptionComponent.vue
@@ -1,8 +1,12 @@
 <script setup lang="ts">
 import { computed, type PropType, ref } from "vue";
 import ParameterGroupDescription from "@/components/parameter-schema/description-mode/ParameterGroupDescription.vue";
-import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import type { ClowmInfo } from "@/types/ClowmInfo";
+import {
+  ParameterVisibility,
+  type ParameterVisibilityMapping,
+} from "@/types/WorkflowParameters.ts";
+import GroupNav from "@/components/parameter-schema/GroupNav.vue";
 
 const props = defineProps({
   schema: {
@@ -13,38 +17,67 @@ const props = defineProps({
     type: Object as PropType<ClowmInfo>,
     required: false,
   },
+
+  parameterVisibility: {
+    type: Object as PropType<ParameterVisibilityMapping>,
+    required: false,
+  },
 });
 
-type ParameterGroup = {
-  group: string;
-  title: string;
-  icon?: string;
-};
+const viewMode = ref<ParameterVisibility>(ParameterVisibility.SIMPLE);
 
-const showHidden = ref<boolean>(false);
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-ignore
+const defaultParameterVisibility = computed<ParameterVisibilityMapping>(() => {
+  const mapping: ParameterVisibilityMapping = {};
+  const groups: object = schemaDefinitions.value;
+  for (const groupName of Object.keys(groups)) {
+    /* eslint-disable @typescript-eslint/ban-ts-comment */
+    // @ts-ignore
+    const group = groups[groupName];
+    const anyOfDeps: string[] = (group["anyOf"] ?? [])
+      .map((dep: Record<string, string[]>) => dep["required"])
+      .flat();
+    const oneOfDeps: string[] = (group["oneOf"] ?? [])
+      .map((dep: Record<string, string[]>) => dep["required"])
+      .flat();
+    const requiredDeps: string[] = group["required"] ?? [];
+    const temp: Record<string, string[]> =
+      group["dependentRequired"] ?? group["dependencies"] ?? {};
+    const parameterDeps: string[] = Object.keys(temp)
+      .map((param) => temp[param])
+      .flat();
 
-const navParameterGroups = computed<ParameterGroup[]>(() => {
-  let groups = Object.keys(parameterGroups.value).map((group) => {
-    return {
-      group: group,
-      title: parameterGroups.value[group]["title"],
-      icon: parameterGroups.value[group]["fa_icon"],
-    };
-  });
-  if (!showHidden.value) {
-    groups = groups.filter(
-      // filter all groups that have only hidden parameters
-      (group) =>
-        Object.keys(parameterGroups.value[group.group]["properties"]).filter(
-          (key) =>
-            !parameterGroups.value[group.group]["properties"][key]["hidden"],
-        ).length > 0,
-    );
+    for (const paramName of Object.keys(group["properties"] ?? {})) {
+      const param: { hidden?: boolean } = group["properties"][paramName];
+      if (
+        anyOfDeps.includes(paramName) ||
+        oneOfDeps.includes(paramName) ||
+        requiredDeps.includes(paramName) ||
+        parameterDeps.includes(paramName)
+      ) {
+        mapping[paramName] = ParameterVisibility.SIMPLE;
+      } else if (!(param.hidden ?? false)) {
+        mapping[paramName] = ParameterVisibility.ADVANCED;
+      } else {
+        mapping[paramName] = ParameterVisibility.EXPERT;
+      }
+    }
+  }
+  for (const paramName of Object.keys(props.schema["properties"] ?? {})) {
+    mapping[paramName] =
+      (props.schema["properties"][paramName]["hidden"] ?? false)
+        ? ParameterVisibility.EXPERT
+        : ParameterVisibility.ADVANCED;
   }
-  return groups;
+  return mapping;
 });
 
-const schemaDefinitions = computed<Record<string, never>>(
+const currentParameterVisibility = computed<ParameterVisibilityMapping>(
+  () => props.parameterVisibility ?? defaultParameterVisibility.value,
+);
+
+const schemaDefinitions = computed<Record<string, object>>(
   () => props.schema?.["definitions"] ?? props.schema?.["$defs"],
 );
 
@@ -73,51 +106,18 @@ const parameterGroups = computed<Record<string, never>>(() => {
           :schema-properties="parameterGroups"
           class="schema-group-description"
           :parameter-group-name="groupName"
-          :show-hidden="showHidden"
+          :parameter-visibility="currentParameterVisibility"
+          :current-visibility="viewMode"
           :resource-parameters="props.clowmInfo?.resourceParameters"
         />
       </div>
     </div>
-    <div
-      class="col-3 sticky-top"
-      style="top: 70px !important; max-height: calc(100vh - 150px)"
-    >
-      <nav class="h-100 rounded-1 border">
-        <nav class="nav">
-          <ul class="ps-0">
-            <li
-              v-for="group in navParameterGroups"
-              :key="group.group"
-              class="nav-link"
-            >
-              <a :href="'#' + group.group">
-                <font-awesome-icon
-                  v-if="group.icon"
-                  :icon="group.icon"
-                  class="me-2"
-                />
-                {{ group.title }}</a
-              >
-            </li>
-          </ul>
-          <div class="mx-auto mb-3">
-            <input
-              id="btn-check-outlined"
-              v-model="showHidden"
-              type="checkbox"
-              class="btn-check ms-1"
-              autocomplete="off"
-            />
-            <label class="btn btn-outline-primary" for="btn-check-outlined">
-              <font-awesome-icon
-                :icon="showHidden ? 'fa-solid fa-eye' : 'fa-solid fa-eye-slash'"
-              />
-              Show hidden Parameters
-            </label>
-          </div>
-        </nav>
-      </nav>
-    </div>
+    <group-nav
+      :parameter-groups="parameterGroups"
+      :parameter-visibility="currentParameterVisibility"
+      :clowm-info="props.clowmInfo"
+      @change-view-mode="(newViewMode) => (viewMode = newViewMode)"
+    />
   </div>
 </template>
 
diff --git a/src/components/parameter-schema/ParameterSchemaFormComponent.vue b/src/components/parameter-schema/ParameterSchemaFormComponent.vue
index 2ebc26f432ca2f1773017e3220e38646b90b587e..af6ad8a2ed62820e04c500d93f43d9922272d944 100644
--- a/src/components/parameter-schema/ParameterSchemaFormComponent.vue
+++ b/src/components/parameter-schema/ParameterSchemaFormComponent.vue
@@ -1,35 +1,33 @@
 <script setup lang="ts">
-import { computed, ref, reactive, watch, onMounted, type PropType } from "vue";
+import { computed, onMounted, type PropType, reactive, ref, watch } from "vue";
 import ParameterGroupForm from "@/components/parameter-schema/form-mode/ParameterGroupForm.vue";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
-import Ajv from "ajv";
 import type { ValidateFunction } from "ajv";
+import Ajv from "ajv";
 import ParameterInput from "@/components/parameter-schema/form-mode/ParameterInput.vue";
-import { Toast, Tooltip } from "bootstrap";
+import { Toast } from "bootstrap";
 import { useBucketStore } from "@/stores/buckets";
 import { useS3KeyStore } from "@/stores/s3keys";
 import BootstrapToast from "@/components/BootstrapToast.vue";
 import { useResourceStore } from "@/stores/resources";
-import { useRoute, useRouter } from "vue-router";
 import type { ClowmInfo } from "@/types/ClowmInfo";
-import UploadParameterFileModal from "@/components/parameter-schema/UploadParameterFileModal.vue";
-import type {
-  NestedWorkflowParameters,
-  TemporaryParams,
-  WorkflowMetaParameters,
-  FlatWorkflowParameters,
+import {
+  type FlatWorkflowParameters,
+  type NestedWorkflowParameters,
+  ParameterVisibility,
+  type ParameterVisibilityMapping,
+  type TemporaryParams,
+  type WorkflowMetaParameters,
 } from "@/types/WorkflowParameters";
 import { useWorkflowExecutionStore } from "@/stores/workflowExecutions";
 import { NextflowVersion, type ParameterExtension } from "@/client/types.gen";
 import { flattenParameters, nestParameters } from "@/utils/Workflow";
-import LastParameterizationsModal from "@/components/parameter-schema/LastParameterizationsModal.vue";
+import GroupNav from "@/components/parameter-schema/GroupNav.vue";
 
 const bucketRepository = useBucketStore();
 const resourceRepository = useResourceStore();
 const keyRepository = useS3KeyStore();
 const executionRepository = useWorkflowExecutionStore();
-const router = useRouter();
-const route = useRoute();
 
 // Props
 // =============================================================================
@@ -55,17 +53,14 @@ const props = defineProps({
     type: Object as PropType<NextflowVersion>,
     required: true,
   },
-  viewMode: {
-    type: String,
-    default: "simple",
-    validator(value: string) {
-      return ["simple", "advanced", "expert"].includes(value);
-    },
-  },
   workflowId: {
     type: String,
     required: false,
   },
+  parameterVisibility: {
+    type: Object as PropType<ParameterVisibilityMapping>,
+    required: false,
+  },
 });
 
 const emit = defineEmits<{
@@ -81,14 +76,6 @@ const emit = defineEmits<{
 let errorToast: Toast | null = null;
 let parameterLoadToast: Toast | null = null;
 
-// Types
-// =============================================================================
-type ParameterGroup = {
-  group: string;
-  title: string;
-  icon?: string;
-};
-
 // JSON Schema package
 // =============================================================================
 const schemaCompiler = new Ajv({
@@ -106,6 +93,7 @@ const formState = reactive<{
   validated: boolean;
   metaParameters: WorkflowMetaParameters;
   errorType?: string;
+  viewMode: ParameterVisibility;
 }>({
   formInput: {},
   validated: false,
@@ -116,14 +104,64 @@ const formState = reactive<{
     notes: undefined,
   },
   errorType: undefined,
+  viewMode: ParameterVisibility.SIMPLE,
 });
 
 // Computed Properties
 // =============================================================================
-const schemaDefinitions = computed<Record<string, never>>(
+const schemaDefinitions = computed<Record<string, object>>(
   () => props.schema?.["definitions"] ?? props.schema?.["$defs"],
 );
 
+const defaultParameterVisibility = computed<ParameterVisibilityMapping>(() => {
+  const mapping: ParameterVisibilityMapping = {};
+  const groups: object = schemaDefinitions.value;
+  for (const groupName of Object.keys(groups)) {
+    /* eslint-disable @typescript-eslint/ban-ts-comment */
+    // @ts-ignore
+    const group = groups[groupName];
+    const anyOfDeps: string[] = (group["anyOf"] ?? [])
+      .map((dep: Record<string, string[]>) => dep["required"])
+      .flat();
+    const oneOfDeps: string[] = (group["oneOf"] ?? [])
+      .map((dep: Record<string, string[]>) => dep["required"])
+      .flat();
+    const requiredDeps: string[] = group["required"] ?? [];
+    const temp: Record<string, string[]> =
+      group["dependentRequired"] ?? group["dependencies"] ?? {};
+    const parameterDeps: string[] = Object.keys(temp)
+      .map((param) => temp[param])
+      .flat();
+
+    for (const paramName of Object.keys(group["properties"] ?? {})) {
+      const param: { hidden?: boolean } = group["properties"][paramName];
+      if (
+        anyOfDeps.includes(paramName) ||
+        oneOfDeps.includes(paramName) ||
+        requiredDeps.includes(paramName) ||
+        parameterDeps.includes(paramName)
+      ) {
+        mapping[paramName] = ParameterVisibility.SIMPLE;
+      } else if (!(param.hidden ?? false)) {
+        mapping[paramName] = ParameterVisibility.ADVANCED;
+      } else {
+        mapping[paramName] = ParameterVisibility.EXPERT;
+      }
+    }
+  }
+  for (const paramName of Object.keys(props.schema?.["properties"] ?? {})) {
+    mapping[paramName] =
+      (props.schema?.["properties"][paramName]["hidden"] ?? false)
+        ? ParameterVisibility.EXPERT
+        : ParameterVisibility.ADVANCED;
+  }
+  return mapping;
+});
+
+const currentParameterVisibility = computed<ParameterVisibilityMapping>(
+  () => props.parameterVisibility ?? defaultParameterVisibility.value,
+);
+
 /* eslint-disable @typescript-eslint/ban-ts-comment */
 // @ts-ignore
 const parameterGroups = computed<Record<string, never>>(() => {
@@ -140,41 +178,6 @@ const parameterGroups = computed<Record<string, never>>(() => {
   return schemaDefinitions.value;
 });
 
-// Create a list with the names of all parameter groups
-const navParameterGroups = computed<ParameterGroup[]>(() => {
-  let groups = Object.keys(parameterGroups.value).map((group) => {
-    return {
-      group: group,
-      title: parameterGroups.value[group]["title"],
-      icon: parameterGroups.value[group]["fa_icon"],
-    };
-  });
-  if (!showHidden.value) {
-    groups = groups.filter(
-      // filter all groups that have only hidden parameters
-      (group) =>
-        Object.keys(parameterGroups.value[group.group]["properties"]).filter(
-          (key) =>
-            !parameterGroups.value[group.group]["properties"][key]["hidden"],
-        ).length > 0,
-    );
-  }
-  if (!showOptional.value) {
-    groups = groups.filter(
-      // filter all groups that have no required parameter
-      (group) =>
-        (
-          (parameterGroups.value[group.group]["required"] as Array<string>) ??
-          []
-        ).length > 0,
-    );
-  }
-  return groups;
-});
-
-const showHidden = computed<boolean>(() => props.viewMode === "expert");
-const showOptional = computed<boolean>(() => props.viewMode !== "simple");
-
 // Watchers
 // =============================================================================
 watch(
@@ -264,18 +267,10 @@ function loadParameters(
   }
 }
 
-function scroll(selectedAnchor: string) {
-  document.querySelector(selectedAnchor)?.scrollIntoView({
-    behavior: "smooth",
-  });
-}
-
 // Lifecycle Events
 // =============================================================================
 onMounted(() => {
   if (props.schema) updateSchema(props.schema);
-  if (props.clowmInfo?.exampleParameters)
-    Tooltip.getOrCreateInstance("#TryItOutButton");
   bucketRepository.fetchOwnBuckets();
   bucketRepository.fetchOwnPermissions();
   keyRepository.fetchS3Keys();
@@ -304,21 +299,6 @@ onMounted(() => {
       </template>
     </template>
   </bootstrap-toast>
-  <upload-parameter-file-modal
-    modal-id="parameterUploadModal"
-    @parameters-uploaded="
-      (params: NestedWorkflowParameters) =>
-        loadParameters({
-          params: params,
-          metaParams: {},
-        })
-    "
-  />
-  <last-parameterizations-modal
-    modal-id="last-parameterization-modal"
-    :workflow-id="workflowId"
-    @parameters-selected="loadParameters"
-  />
   <div class="row align-items-start">
     <form
       v-if="props.schema"
@@ -335,10 +315,10 @@ onMounted(() => {
           v-model="formState.formInput"
           :parameter-group-name="groupName"
           :schema-properties="parameterGroups"
-          :show-hidden="showHidden"
-          :show-optional="showOptional"
           :resource-parameters="props.clowmInfo?.resourceParameters"
           :mapping="parameterExtension?.mapping"
+          :parameter-visibility="currentParameterVisibility"
+          :current-visibility="formState.viewMode"
         />
       </template>
       <div class="card mb-3">
@@ -418,7 +398,7 @@ onMounted(() => {
               workflow execution
             </div>
           </div>
-          <div :hidden="!showHidden">
+          <div :hidden="formState.viewMode < ParameterVisibility.EXPERT">
             <code
               class="bg-secondary-subtle p-2 rounded-top border border-secondary"
               >--debug_s3_path</code
@@ -465,157 +445,17 @@ onMounted(() => {
         </div>
       </div>
     </div>
-    <div
-      class="col-3 sticky-top border shadow-sm rounded-1 px-0"
-      style="top: 70px !important; max-height: calc(100vh - 150px)"
-    >
-      <h5 class="mx-3 mt-2">Parameter View</h5>
-      <div class="mx-2">
-        <div
-          class="btn-group my-1 w-100"
-          role="group"
-          aria-label="Basic radio toggle button group"
-        >
-          <input
-            id="view-mode-simple"
-            type="radio"
-            class="btn-check"
-            name="view-mode"
-            autocomplete="off"
-            :checked="props.viewMode === 'simple'"
-            @click="
-              router.replace({
-                query: { ...route.query, viewMode: 'simple' },
-                hash: route.hash,
-              })
-            "
-          />
-          <label class="btn btn-outline-primary" for="view-mode-simple"
-            >Simple</label
-          >
-          <input
-            id="view-mode-advanced"
-            type="radio"
-            class="btn-check"
-            name="view-mode"
-            autocomplete="off"
-            :checked="props.viewMode === 'advanced'"
-            @click="
-              router.replace({
-                query: { ...route.query, viewMode: 'advanced' },
-                hash: route.hash,
-              })
-            "
-          />
-          <label class="btn btn-outline-primary" for="view-mode-advanced"
-            >Advanced</label
-          >
-          <input
-            id="view-mode-expert"
-            type="radio"
-            class="btn-check"
-            name="view-mode"
-            autocomplete="off"
-            :checked="props.viewMode === 'expert'"
-            @click="
-              router.replace({
-                query: { ...route.query, viewMode: 'expert' },
-                hash: route.hash,
-              })
-            "
-          />
-          <label class="btn btn-outline-primary" for="view-mode-expert"
-            >Expert</label
-          >
-        </div>
-      </div>
-      <nav class="h-100">
-        <nav v-if="props.schema" class="nav">
-          <ul class="ps-0">
-            <li
-              v-for="group in navParameterGroups"
-              :key="group.group"
-              class="nav-link"
-            >
-              <router-link
-                :to="{ hash: '#' + group.group, query: route.query }"
-                replace
-                @click="scroll('#' + group.group)"
-              >
-                <font-awesome-icon
-                  v-if="group.icon"
-                  :icon="group.icon"
-                  class="me-2"
-                />
-                {{ group.title }}
-              </router-link>
-            </li>
-            <li class="nav-link">
-              <router-link
-                :to="{ hash: '#pipelineGeneralOptions', query: route.query }"
-                replace
-                @click="scroll('#pipelineGeneralOptions')"
-              >
-                <font-awesome-icon icon="fa-solid fa-gear" class="me-2" />
-                General Pipeline Options
-              </router-link>
-            </li>
-          </ul>
-        </nav>
-        <!-- Loading nav links -->
-        <div v-else class="placeholder-glow ps-3 pt-3">
-          <span
-            v-for="n in 5"
-            :key="n"
-            class="placeholder col-8 mt-2 mb-3"
-          ></span>
-        </div>
-      </nav>
-      <div class="d-grid gap-2 mb-2 px-2">
-        <button
-          v-if="props.clowmInfo?.exampleParameters"
-          id="TryItOutButton"
-          type="button"
-          class="btn btn-primary"
-          data-bs-toggle="tooltip"
-          data-bs-title="Load example parameters/data for this workflow"
-          @click="
-            loadParameters({
-              params: props.clowmInfo?.exampleParameters,
-              metaParams: {},
-            })
-          "
-        >
-          Try it out
-        </button>
-        <button
-          type="button"
-          class="btn btn-primary"
-          data-bs-toggle="modal"
-          data-bs-target="#last-parameterization-modal"
-        >
-          <font-awesome-icon icon="fas fa-user-gear" class="me-2" />
-          My last parameterizations
-        </button>
-        <button
-          class="btn btn-primary"
-          data-bs-toggle="modal"
-          data-bs-target="#parameterUploadModal"
-        >
-          <font-awesome-icon icon="fa-solid fa-upload" class="me-2" />
-          Upload Parameters
-        </button>
-        <button
-          type="submit"
-          form="launchWorkflowForm"
-          class="btn btn-success btn-lg"
-          :disabled="props.loading || !props.schema"
-        >
-          <font-awesome-icon icon="fa-solid fa-play" class="me-2" />
-          Launch
-        </button>
-      </div>
-    </div>
+    <group-nav
+      v-if="props.schema != undefined"
+      :clowm-info="props.clowmInfo"
+      :parameter-groups="parameterGroups"
+      :parameter-visibility="currentParameterVisibility"
+      :workflow-id="workflowId"
+      launchable
+      form-id="launchWorkflowForm"
+      @load-parameters="loadParameters"
+      @change-view-mode="(viewMode) => (formState.viewMode = viewMode)"
+    />
   </div>
 </template>
 
diff --git a/src/components/parameter-schema/description-mode/ParameterDescription.vue b/src/components/parameter-schema/description-mode/ParameterDescription.vue
index 4e3bc3e9c0870ca76b695e8d35e7c95c7228f9f4..1e313b6550d76ceaf10d6cb086c674ebe6097b59 100644
--- a/src/components/parameter-schema/description-mode/ParameterDescription.vue
+++ b/src/components/parameter-schema/description-mode/ParameterDescription.vue
@@ -20,10 +20,6 @@ const props = defineProps({
     type: String,
     required: true,
   },
-  showHidden: {
-    type: Boolean,
-    default: false,
-  },
   clowmResource: {
     type: Boolean,
     default: false,
@@ -50,7 +46,6 @@ const defaultValue = computed<string | undefined>(() =>
 const enumValues = computed<string[] | undefined>(() =>
   props.parameter["enum"]?.map((val: string) => val.toString()),
 );
-const hidden = computed<boolean>(() => props.parameter["hidden"] ?? false);
 const parameterPattern = computed<string | undefined>(
   () => props.parameter["pattern"],
 );
@@ -118,11 +113,7 @@ onMounted(() => {
 </script>
 
 <template>
-  <div
-    :id="`parameter-${randomIDSuffix}`"
-    :hidden="!showHidden && hidden"
-    class="border-top"
-  >
+  <div :id="`parameter-${randomIDSuffix}`" class="border-top">
     <div class="d-flex pt-2 justify-content-between">
       <div class="flex-fill ps-2">
         <div class="row">
@@ -134,7 +125,7 @@ onMounted(() => {
           </span>
           <span
             v-if="anyOfTooltip != undefined"
-            class="rounded py-0 px-1 bg-cyan ms-2 label w-fit fs-6"
+            class="rounded py-0 px-1 bg-info ms-2 label w-fit fs-6"
             data-bs-toggle="tooltip"
             data-bs-placement="bottom"
             :data-bs-title="anyOfTooltip"
@@ -144,7 +135,7 @@ onMounted(() => {
           >
           <span
             v-if="oneOfTooltip != undefined"
-            class="rounded py-0 px-1 bg-cyan ms-2 label w-fit fs-6"
+            class="rounded py-0 px-1 bg-info ms-2 label w-fit fs-6"
             data-bs-toggle="tooltip"
             data-bs-placement="bottom"
             :data-bs-title="oneOfTooltip"
@@ -154,7 +145,7 @@ onMounted(() => {
           >
           <span
             v-if="dependentTooltip != undefined"
-            class="rounded py-0 px-1 bg-cyan ms-2 label w-fit fs-6"
+            class="rounded py-0 px-1 bg-info ms-2 label w-fit fs-6"
             data-bs-toggle="tooltip"
             data-bs-placement="bottom"
             :data-bs-title="dependentTooltip"
diff --git a/src/components/parameter-schema/description-mode/ParameterGroupDescription.vue b/src/components/parameter-schema/description-mode/ParameterGroupDescription.vue
index b85af8f614bac7111fd02f81dac11ff5097ce8a6..8323ef45c2d357284d7056bc5f0b30b298169ab6 100644
--- a/src/components/parameter-schema/description-mode/ParameterGroupDescription.vue
+++ b/src/components/parameter-schema/description-mode/ParameterGroupDescription.vue
@@ -2,7 +2,11 @@
 import { computed, type PropType } from "vue";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import ParameterDescription from "@/components/parameter-schema/description-mode/ParameterDescription.vue";
-import type { ParameterCombinationDependencies } from "@/types/WorkflowParameters.ts";
+import {
+  type ParameterCombinationDependencies,
+  ParameterVisibility,
+  type ParameterVisibilityMapping,
+} from "@/types/WorkflowParameters.ts";
 
 const props = defineProps({
   parameterGroupName: {
@@ -13,14 +17,18 @@ const props = defineProps({
     type: Object,
     required: true,
   },
-  showHidden: {
-    type: Boolean,
-    default: false,
-  },
   resourceParameters: {
     type: Array as PropType<string[]>,
     required: false,
   },
+  parameterVisibility: {
+    type: Object as PropType<ParameterVisibilityMapping>,
+    required: true,
+  },
+  currentVisibility: {
+    type: Number,
+    default: ParameterVisibility.SIMPLE,
+  },
 });
 
 const title = computed<string>(() => parameterGroup.value["title"]);
@@ -30,13 +38,6 @@ const parameters = computed<Record<string, never>>(
   () => parameterGroup.value["properties"],
 );
 
-const groupHidden = computed<boolean>(() =>
-  Object.keys(parameters.value).reduce(
-    (acc: boolean, val: string) => acc && parameters.value[val]["hidden"],
-    true,
-  ),
-);
-
 const parameterGroup = computed(
   () => props.schemaProperties[props.parameterGroupName],
 );
@@ -108,10 +109,21 @@ const parameterOneOfDependenciesPerParameter = computed<
   }
   return r;
 });
+
+function parameterVisible(paramName: string): boolean {
+  return props.parameterVisibility[paramName] <= props.currentVisibility;
+}
+
+const groupHidden = computed<boolean>(() =>
+  Object.keys(parameters.value).reduce(
+    (acc: boolean, val: string) => acc && !parameterVisible(val),
+    true,
+  ),
+);
 </script>
 
 <template>
-  <div :hidden="!props.showHidden && groupHidden" class="mb-5">
+  <div :hidden="groupHidden" class="mb-5">
     <div class="row">
       <h2 :id="props.parameterGroupName">
         <font-awesome-icon v-if="icon" :icon="icon" class="me-3" />
@@ -125,10 +137,10 @@ const parameterOneOfDependenciesPerParameter = computed<
     >
       <parameter-description
         v-if="parameter['type'] !== 'object'"
+        :hidden="!parameterVisible(parameterName)"
         :parameter-name="parameterName"
         :parameter="parameter"
         :required="parameterGroup['required']?.includes(parameterName) ?? false"
-        :show-hidden="showHidden"
         :clowm-resource="resourceParameters?.includes(parameterName)"
         :dependencies="parameterDependenciesPerParameter[parameterName]"
         :any-of-dependencies="
diff --git a/src/components/parameter-schema/form-mode/ParameterGroupForm.vue b/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
index 70ad2e6bbe99c9ec30a356dd14da972d11d3ffdd..a679a138eabd4ab99cf5ebf12d2a60449d5baafd 100644
--- a/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
+++ b/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
@@ -2,9 +2,11 @@
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import { computed, onMounted, type PropType } from "vue";
 import MarkdownRenderer from "@/components/MarkdownRenderer.vue";
-import type {
-  FlatWorkflowParameters,
-  ParameterCombinationDependencies,
+import {
+  type FlatWorkflowParameters,
+  type ParameterCombinationDependencies,
+  ParameterVisibility,
+  type ParameterVisibilityMapping,
 } from "@/types/WorkflowParameters";
 import ParameterInput from "@/components/parameter-schema/form-mode/ParameterInput.vue";
 import { Tooltip } from "bootstrap";
@@ -19,14 +21,7 @@ const props = defineProps({
     type: String,
     required: true,
   },
-  showHidden: {
-    type: Boolean,
-    default: false,
-  },
-  showOptional: {
-    type: Boolean,
-    default: false,
-  },
+
   resourceParameters: {
     type: Array as PropType<string[]>,
     required: false,
@@ -36,25 +31,24 @@ const props = defineProps({
     type: Object,
     required: true,
   },
+  parameterVisibility: {
+    type: Object as PropType<ParameterVisibilityMapping>,
+    required: true,
+  },
+  currentVisibility: {
+    type: Number,
+    default: ParameterVisibility.SIMPLE,
+  },
 });
 const title = computed<string>(() => parameterGroup.value["title"]);
 const icon = computed<string>(() => parameterGroup.value["fa_icon"]);
 const description = computed<string>(() => parameterGroup.value["description"]);
 const groupHidden = computed<boolean>(() =>
   Object.keys(parameters.value).reduce(
-    (acc: boolean, val: string) => acc && parameters.value[val]["hidden"],
+    (acc: boolean, val: string) => acc && !parameterVisible(val),
     true,
   ),
 );
-const groupRequired = computed<boolean>(
-  () =>
-    (
-      parameterGroup.value["required"] ??
-      parameterGroup.value["anyOf"] ??
-      parameterGroup.value["oneOf"] ??
-      []
-    ).length > 0,
-);
 const parameters = computed<Record<string, never>>(
   () => parameterGroup.value["properties"],
 );
@@ -294,6 +288,10 @@ const parameterIds = computed<Record<string, string>>(() => {
   return r;
 });
 
+function parameterVisible(paramName: string): boolean {
+  return props.parameterVisibility[paramName] <= props.currentVisibility;
+}
+
 onMounted(() => {
   document
     ?.querySelector(`#group-${groupId}`)
@@ -305,15 +303,8 @@ onMounted(() => {
 </script>
 
 <template>
-  <div
-    :id="`group-${groupId}`"
-    class="card mb-3"
-    :hidden="
-      (!props.showHidden && groupHidden) ||
-      (!props.showOptional && !groupRequired)
-    "
-  >
-    <h3 :id="parameterGroup.valueName" class="card-header">
+  <div :id="`group-${groupId}`" class="card mb-3" :hidden="groupHidden">
+    <h3 :id="props.parameterGroupName" class="card-header">
       <font-awesome-icon v-if="icon" :icon="icon" class="me-2" />
       {{ title }}
     </h3>
@@ -323,20 +314,7 @@ onMounted(() => {
         v-for="(parameter, parameterName) in parameters"
         :key="parameterName"
       >
-        <div
-          :hidden="
-            (!props.showHidden && parameter['hidden']) ||
-            (!props.showOptional &&
-              !(
-                parameterRequired[parameterName] ||
-                parameterAnyOfDependenciesPerParameter[parameterName] !=
-                  undefined ||
-                parameterOneOfDependenciesPerParameter[parameterName] !=
-                  undefined ||
-                parameterDependenciesPerParameter[parameterName] != undefined
-              ))
-          "
-        >
+        <div :hidden="!parameterVisible(parameterName)">
           <code
             class="p-2 rounded-top border-bottom-0 border bg-secondary-subtle border-secondary"
           >
@@ -350,7 +328,7 @@ onMounted(() => {
           </span>
           <span
             v-if="anyOfTooltip[parameterName] != undefined"
-            class="rounded p-1 bg-cyan ms-2 label"
+            class="rounded p-1 bg-info ms-2 label"
             data-bs-toggle="tooltip"
             data-bs-placement="bottom"
             :data-bs-title="anyOfTooltip[parameterName]"
@@ -360,7 +338,7 @@ onMounted(() => {
           >
           <span
             v-if="oneOfTooltip[parameterName] != undefined"
-            class="rounded p-1 bg-cyan ms-2 label"
+            class="rounded p-1 bg-info ms-2 label"
             data-bs-toggle="tooltip"
             data-bs-placement="bottom"
             :data-bs-title="oneOfTooltip[parameterName]"
@@ -370,7 +348,7 @@ onMounted(() => {
           >
           <span
             v-if="dependentTooltip[parameterName] != undefined"
-            class="rounded p-1 bg-cyan ms-2 label"
+            class="rounded p-1 bg-info ms-2 label"
             data-bs-toggle="tooltip"
             data-bs-placement="bottom"
             :data-bs-title="dependentTooltip[parameterName]"
@@ -398,7 +376,7 @@ onMounted(() => {
               :resource-parameter="
                 props.resourceParameters?.includes(parameterName)
               "
-              :allow-raw="props.showOptional"
+              :allow-raw="props.currentVisibility > ParameterVisibility.SIMPLE"
               :mapping="props.mapping?.[parameterName]"
               :custom-validity="oneOfValidity(parameterName)"
             />
diff --git a/src/components/workflows/WorkflowDocumentationTabs.vue b/src/components/workflows/WorkflowDocumentationTabs.vue
index f445a3175c374695bf3f8c906df148da9b27732d..b8e29e3c5f3770309862055f76341e73989f4682 100644
--- a/src/components/workflows/WorkflowDocumentationTabs.vue
+++ b/src/components/workflows/WorkflowDocumentationTabs.vue
@@ -120,7 +120,11 @@ const activeTab = computed<string>(
       ></span>
     </p>
   </div>
-  <div v-else class="px-2 pt-3 border border-top-0 overflow-x-auto">
+  <div
+    v-else
+    class="px-2 pt-3 border border-top-0"
+    :class="{ 'overflow-x-auto': activeTab !== 'parameters' }"
+  >
     <div v-if="activeTab === 'description'">
       <markdown-renderer
         v-if="props.descriptionMarkdown"
diff --git a/src/components/workflows/WorkflowWithVersionsCard.vue b/src/components/workflows/WorkflowWithVersionsCard.vue
index 0686107088fdec778f83e2834d48804e755fc851..726b88585cbacc4813312a2167b1320297982c89 100644
--- a/src/components/workflows/WorkflowWithVersionsCard.vue
+++ b/src/components/workflows/WorkflowWithVersionsCard.vue
@@ -376,6 +376,23 @@ onMounted(() => {
                         Update Metadata
                       </router-link>
                     </li>
+                    <li>
+                      <router-link
+                        class="dropdown-item"
+                        :to="{
+                          name: 'workflow-parameter-visibility',
+                          params: {
+                            workflowId: props.workflow.workflow_id,
+                            versionId: version.workflow_version_id,
+                          },
+                          query: {
+                            modeId: version.modes?.[0] ?? undefined,
+                          },
+                        }"
+                      >
+                        Edit Parameter Visibility
+                      </router-link>
+                    </li>
                   </ul>
                 </td>
               </tr>
diff --git a/src/components/workflows/modals/CreateWorkflowModal.vue b/src/components/workflows/modals/CreateWorkflowModal.vue
index 9964e73cb975d38e58c6ed3583775b2d55032171..88434fd72089844efdd8838baf3cb86ec5584159 100644
--- a/src/components/workflows/modals/CreateWorkflowModal.vue
+++ b/src/components/workflows/modals/CreateWorkflowModal.vue
@@ -551,14 +551,17 @@ onMounted(() => {
         <div class="mb-3">
           <div class="form-check fs-5">
             <input
-              id="privateRepositoryCheckbox"
+              id="createPrivateRepositoryCheckbox"
               v-model="repositoryCredentials.privateRepo"
               class="form-check-input"
               type="checkbox"
               aria-controls="#createWorkflowPrivateRepositoryCheckbox"
               @change="formState.allowUpload = false"
             />
-            <label class="form-check-label" for="privateRepositoryCheckbox">
+            <label
+              class="form-check-label"
+              for="createPrivateRepositoryCheckbox"
+            >
               Enable private Git Repository
             </label>
           </div>
diff --git a/src/stores/users.ts b/src/stores/users.ts
index e549fcb1780fd5261e595afa68b9068229447fa1..e0b4cb68c89df2c6fa42b51a9a5cd7231b21d244 100644
--- a/src/stores/users.ts
+++ b/src/stores/users.ts
@@ -105,7 +105,7 @@ export const useUserStore = defineStore({
       useNameStore().addNameToMapping(user.uid, user.display_name);
     },
     logout() {
-      window._paq.push(["resetUserId"]);
+      window._paq?.push(["resetUserId"]);
       this.$reset();
       const activeTheme = localStorage.getItem("theme");
       localStorage.clear();
diff --git a/src/types/WorkflowParameters.ts b/src/types/WorkflowParameters.ts
index 0328356bc8ec07f3bfa53ff1c46e5a3ca0b7c77d..62b02a2f4b08a5b78c589ed76f61ec6477fcc458 100644
--- a/src/types/WorkflowParameters.ts
+++ b/src/types/WorkflowParameters.ts
@@ -23,3 +23,12 @@ export interface ParameterCombinationDependencies {
   group: string[]; // AND group in OR combination
   dependencies: string[][]; // (X)OR combination to fulfill
 }
+
+export enum ParameterVisibility {
+  SIMPLE,
+  ADVANCED,
+  EXPERT,
+  IMPOSSIBLE,
+}
+
+export type ParameterVisibilityMapping = Record<string, ParameterVisibility>;
diff --git a/src/utils/md5.js b/src/utils/md5.js
index b464d8b698c97f9f96ff3136d3d1eee03dc9510c..61512f260b2480d47c695d2a4d5b2d174d5d3d6d 100644
--- a/src/utils/md5.js
+++ b/src/utils/md5.js
@@ -1,498 +1 @@
-export function md5(d) {
-  var r = M(V(Y(X(d), 8 * d.length)));
-  return r.toLowerCase();
-}
-
-function M(d) {
-  for (var _, m = "0123456789ABCDEF", f = "", r = 0; r < d.length; r++)
-    _ = d.charCodeAt(r);
-  f += m.charAt((_ >>> 4) & 15) + m.charAt(15 & _);
-  return f;
-}
-
-function X(d) {
-  for (var _ = Array(d.length >> 2), m = 0; m < _.length; m++) _[m] = 0;
-  for (m = 0; m < 8 * d.length; m += 8)
-    _[m >> 5] |= (255 & d.charCodeAt(m / 8)) << m % 32;
-  return _;
-}
-
-function V(d) {
-  for (var _ = "", m = 0; m < 32 * d.length; m += 8)
-    _ += String.fromCharCode((d[m >> 5] >>> m % 32) & 255);
-  return _;
-}
-
-function Y(d, _) {
-  d[_ >> 5] |= 128 << _ % 32;
-  d[14 + (((_ + 64) >>> 9) << 4)] = _;
-  for (
-    var m = 1732584193, f = -271733879, r = -1732584194, i = 271733878, n = 0;
-    n < d.length;
-    n += 16
-  ) {
-    var h = m,
-      t = f,
-      g = r,
-      e = i;
-    f = md5_ii(
-      (f = md5_ii(
-        (f = md5_ii(
-          (f = md5_ii(
-            (f = md5_hh(
-              (f = md5_hh(
-                (f = md5_hh(
-                  (f = md5_hh(
-                    (f = md5_gg(
-                      (f = md5_gg(
-                        (f = md5_gg(
-                          (f = md5_gg(
-                            (f = md5_ff(
-                              (f = md5_ff(
-                                (f = md5_ff(
-                                  (f = md5_ff(
-                                    f,
-                                    (r = md5_ff(
-                                      r,
-                                      (i = md5_ff(
-                                        i,
-                                        (m = md5_ff(
-                                          m,
-                                          f,
-                                          r,
-                                          i,
-                                          d[n + 0],
-                                          7,
-                                          -680876936,
-                                        )),
-                                        f,
-                                        r,
-                                        d[n + 1],
-                                        12,
-                                        -389564586,
-                                      )),
-                                      m,
-                                      f,
-                                      d[n + 2],
-                                      17,
-                                      606105819,
-                                    )),
-                                    i,
-                                    m,
-                                    d[n + 3],
-                                    22,
-                                    -1044525330,
-                                  )),
-                                  (r = md5_ff(
-                                    r,
-                                    (i = md5_ff(
-                                      i,
-                                      (m = md5_ff(
-                                        m,
-                                        f,
-                                        r,
-                                        i,
-                                        d[n + 4],
-                                        7,
-                                        -176418897,
-                                      )),
-                                      f,
-                                      r,
-                                      d[n + 5],
-                                      12,
-                                      1200080426,
-                                    )),
-                                    m,
-                                    f,
-                                    d[n + 6],
-                                    17,
-                                    -1473231341,
-                                  )),
-                                  i,
-                                  m,
-                                  d[n + 7],
-                                  22,
-                                  -45705983,
-                                )),
-                                (r = md5_ff(
-                                  r,
-                                  (i = md5_ff(
-                                    i,
-                                    (m = md5_ff(
-                                      m,
-                                      f,
-                                      r,
-                                      i,
-                                      d[n + 8],
-                                      7,
-                                      1770035416,
-                                    )),
-                                    f,
-                                    r,
-                                    d[n + 9],
-                                    12,
-                                    -1958414417,
-                                  )),
-                                  m,
-                                  f,
-                                  d[n + 10],
-                                  17,
-                                  -42063,
-                                )),
-                                i,
-                                m,
-                                d[n + 11],
-                                22,
-                                -1990404162,
-                              )),
-                              (r = md5_ff(
-                                r,
-                                (i = md5_ff(
-                                  i,
-                                  (m = md5_ff(
-                                    m,
-                                    f,
-                                    r,
-                                    i,
-                                    d[n + 12],
-                                    7,
-                                    1804603682,
-                                  )),
-                                  f,
-                                  r,
-                                  d[n + 13],
-                                  12,
-                                  -40341101,
-                                )),
-                                m,
-                                f,
-                                d[n + 14],
-                                17,
-                                -1502002290,
-                              )),
-                              i,
-                              m,
-                              d[n + 15],
-                              22,
-                              1236535329,
-                            )),
-                            (r = md5_gg(
-                              r,
-                              (i = md5_gg(
-                                i,
-                                (m = md5_gg(
-                                  m,
-                                  f,
-                                  r,
-                                  i,
-                                  d[n + 1],
-                                  5,
-                                  -165796510,
-                                )),
-                                f,
-                                r,
-                                d[n + 6],
-                                9,
-                                -1069501632,
-                              )),
-                              m,
-                              f,
-                              d[n + 11],
-                              14,
-                              643717713,
-                            )),
-                            i,
-                            m,
-                            d[n + 0],
-                            20,
-                            -373897302,
-                          )),
-                          (r = md5_gg(
-                            r,
-                            (i = md5_gg(
-                              i,
-                              (m = md5_gg(m, f, r, i, d[n + 5], 5, -701558691)),
-                              f,
-                              r,
-                              d[n + 10],
-                              9,
-                              38016083,
-                            )),
-                            m,
-                            f,
-                            d[n + 15],
-                            14,
-                            -660478335,
-                          )),
-                          i,
-                          m,
-                          d[n + 4],
-                          20,
-                          -405537848,
-                        )),
-                        (r = md5_gg(
-                          r,
-                          (i = md5_gg(
-                            i,
-                            (m = md5_gg(m, f, r, i, d[n + 9], 5, 568446438)),
-                            f,
-                            r,
-                            d[n + 14],
-                            9,
-                            -1019803690,
-                          )),
-                          m,
-                          f,
-                          d[n + 3],
-                          14,
-                          -187363961,
-                        )),
-                        i,
-                        m,
-                        d[n + 8],
-                        20,
-                        1163531501,
-                      )),
-                      (r = md5_gg(
-                        r,
-                        (i = md5_gg(
-                          i,
-                          (m = md5_gg(m, f, r, i, d[n + 13], 5, -1444681467)),
-                          f,
-                          r,
-                          d[n + 2],
-                          9,
-                          -51403784,
-                        )),
-                        m,
-                        f,
-                        d[n + 7],
-                        14,
-                        1735328473,
-                      )),
-                      i,
-                      m,
-                      d[n + 12],
-                      20,
-                      -1926607734,
-                    )),
-                    (r = md5_hh(
-                      r,
-                      (i = md5_hh(
-                        i,
-                        (m = md5_hh(m, f, r, i, d[n + 5], 4, -378558)),
-                        f,
-                        r,
-                        d[n + 8],
-                        11,
-                        -2022574463,
-                      )),
-                      m,
-                      f,
-                      d[n + 11],
-                      16,
-                      1839030562,
-                    )),
-                    i,
-                    m,
-                    d[n + 14],
-                    23,
-                    -35309556,
-                  )),
-                  (r = md5_hh(
-                    r,
-                    (i = md5_hh(
-                      i,
-                      (m = md5_hh(m, f, r, i, d[n + 1], 4, -1530992060)),
-                      f,
-                      r,
-                      d[n + 4],
-                      11,
-                      1272893353,
-                    )),
-                    m,
-                    f,
-                    d[n + 7],
-                    16,
-                    -155497632,
-                  )),
-                  i,
-                  m,
-                  d[n + 10],
-                  23,
-                  -1094730640,
-                )),
-                (r = md5_hh(
-                  r,
-                  (i = md5_hh(
-                    i,
-                    (m = md5_hh(m, f, r, i, d[n + 13], 4, 681279174)),
-                    f,
-                    r,
-                    d[n + 0],
-                    11,
-                    -358537222,
-                  )),
-                  m,
-                  f,
-                  d[n + 3],
-                  16,
-                  -722521979,
-                )),
-                i,
-                m,
-                d[n + 6],
-                23,
-                76029189,
-              )),
-              (r = md5_hh(
-                r,
-                (i = md5_hh(
-                  i,
-                  (m = md5_hh(m, f, r, i, d[n + 9], 4, -640364487)),
-                  f,
-                  r,
-                  d[n + 12],
-                  11,
-                  -421815835,
-                )),
-                m,
-                f,
-                d[n + 15],
-                16,
-                530742520,
-              )),
-              i,
-              m,
-              d[n + 2],
-              23,
-              -995338651,
-            )),
-            (r = md5_ii(
-              r,
-              (i = md5_ii(
-                i,
-                (m = md5_ii(m, f, r, i, d[n + 0], 6, -198630844)),
-                f,
-                r,
-                d[n + 7],
-                10,
-                1126891415,
-              )),
-              m,
-              f,
-              d[n + 14],
-              15,
-              -1416354905,
-            )),
-            i,
-            m,
-            d[n + 5],
-            21,
-            -57434055,
-          )),
-          (r = md5_ii(
-            r,
-            (i = md5_ii(
-              i,
-              (m = md5_ii(m, f, r, i, d[n + 12], 6, 1700485571)),
-              f,
-              r,
-              d[n + 3],
-              10,
-              -1894986606,
-            )),
-            m,
-            f,
-            d[n + 10],
-            15,
-            -1051523,
-          )),
-          i,
-          m,
-          d[n + 1],
-          21,
-          -2054922799,
-        )),
-        (r = md5_ii(
-          r,
-          (i = md5_ii(
-            i,
-            (m = md5_ii(m, f, r, i, d[n + 8], 6, 1873313359)),
-            f,
-            r,
-            d[n + 15],
-            10,
-            -30611744,
-          )),
-          m,
-          f,
-          d[n + 6],
-          15,
-          -1560198380,
-        )),
-        i,
-        m,
-        d[n + 13],
-        21,
-        1309151649,
-      )),
-      (r = md5_ii(
-        r,
-        (i = md5_ii(
-          i,
-          (m = md5_ii(m, f, r, i, d[n + 4], 6, -145523070)),
-          f,
-          r,
-          d[n + 11],
-          10,
-          -1120210379,
-        )),
-        m,
-        f,
-        d[n + 2],
-        15,
-        718787259,
-      )),
-      i,
-      m,
-      d[n + 9],
-      21,
-      -343485551,
-    );
-    m = safe_add(m, h);
-    f = safe_add(f, t);
-    r = safe_add(r, g);
-    i = safe_add(i, e);
-  }
-  return [m, f, r, i];
-}
-
-function md5_cmn(d, _, m, f, r, i) {
-  return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)), r), m);
-}
-
-function md5_ff(d, _, m, f, r, i, n) {
-  return md5_cmn((_ & m) | (~_ & f), d, _, r, i, n);
-}
-
-function md5_gg(d, _, m, f, r, i, n) {
-  return md5_cmn((_ & f) | (m & ~f), d, _, r, i, n);
-}
-
-function md5_hh(d, _, m, f, r, i, n) {
-  return md5_cmn(_ ^ m ^ f, d, _, r, i, n);
-}
-
-function md5_ii(d, _, m, f, r, i, n) {
-  return md5_cmn(m ^ (_ | ~f), d, _, r, i, n);
-}
-
-function safe_add(d, _) {
-  var m = (65535 & d) + (65535 & _);
-  return (((d >> 16) + (_ >> 16) + (m >> 16)) << 16) | (65535 & m);
-}
-
-function bit_rol(d, _) {
-  return (d << _) | (d >>> (32 - _));
-}
+export function md5(d){var r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}function V(d){for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}function md5_cmn(d,_,m,f,r,i){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}function md5_ff(d,_,m,f,r,i,n){return md5_cmn(_&m|~_&f,d,_,r,i,n)}function md5_gg(d,_,m,f,r,i,n){return md5_cmn(_&f|m&~f,d,_,r,i,n)}function md5_hh(d,_,m,f,r,i,n){return md5_cmn(_^m^f,d,_,r,i,n)}function md5_ii(d,_,m,f,r,i,n){return md5_cmn(m^(_|~f),d,_,r,i,n)}function safe_add(d,_){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_}
diff --git a/src/views/workflows/StartWorkflowView.vue b/src/views/workflows/StartWorkflowView.vue
index 5ea539f48a61626b958398b37f5a9f4e544ee30e..fa0d782a40492b923e842399cbb3652b15915887 100644
--- a/src/views/workflows/StartWorkflowView.vue
+++ b/src/views/workflows/StartWorkflowView.vue
@@ -18,7 +18,6 @@ const props = defineProps<{
   versionId: string;
   workflowId: string;
   workflowModeId?: string;
-  viewMode: string;
 }>();
 
 const router = useRouter();
@@ -123,7 +122,6 @@ onMounted(() => {
     :schema="versionState.parameterSchema"
     :loading="versionState.loading"
     allow-notes
-    :view-mode="viewMode"
     :nextflow-version="
       workflowRepository.versionMapping[versionId]?.nextflow_version ??
       NextflowVersion._24_04_2
diff --git a/tsconfig.config.json b/tsconfig.config.json
index 776b880013c18b169bc3d489f6a7df64d16d7f5b..e1f392aa943d7c48fa384e0a05314837297ceced 100644
--- a/tsconfig.config.json
+++ b/tsconfig.config.json
@@ -6,6 +6,7 @@
     "cypress.config.*"
   ],
   "compilerOptions": {
+    "suppressImplicitAnyIndexErrors": true,
     "composite": true,
     "types": [
       "node"