前后端登录注册连接成功

Change-Id: Ib5f9282fe7217b3363e542ce5c4e1c0d32619dcb
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..bbed15d
--- /dev/null
+++ b/.env.development
@@ -0,0 +1 @@
+VUE_APP_API_BASE_URL=http://localhost:8081
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 403adbc..978f3df 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,23 +1,23 @@
-.DS_Store
-node_modules
-/dist
-
-
-# local env files
-.env.local
-.env.*.local
-
-# Log files
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-# Editor directories and files
-.idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
+.DS_Store

+node_modules

+/dist

+

+

+# local env files

+.env.local

+.env.*.local

+

+# Log files

+npm-debug.log*

+yarn-debug.log*

+yarn-error.log*

+pnpm-debug.log*

+

+# Editor directories and files

+.idea

+.vscode

+*.suo

+*.ntvs*

+*.njsproj

+*.sln

+*.sw?

diff --git a/README.md b/README.md
index 6e0f518..a44d897 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,19 @@
-# pt
-
-## Project setup
-```
-npm install
-```
-
-### Compiles and hot-reloads for development
-```
-npm run serve
-```
-
-### Compiles and minifies for production
-```
-npm run build
-```
-
-### Customize configuration
-See [Configuration Reference](https://cli.vuejs.org/config/).
+# pt

+

+## Project setup

+```

+npm install

+```

+

+### Compiles and hot-reloads for development

+```

+npm run serve

+```

+

+### Compiles and minifies for production

+```

+npm run build

+```

+

+### Customize configuration

+See [Configuration Reference](https://cli.vuejs.org/config/).

diff --git a/babel.config.js b/babel.config.js
index e955840..a673655 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,5 +1,5 @@
-module.exports = {
-  presets: [
-    '@vue/cli-plugin-babel/preset'
-  ]
-}
+module.exports = {

+  presets: [

+    '@vue/cli-plugin-babel/preset'

+  ]

+}

diff --git a/jsconfig.json b/jsconfig.json
index 4aafc5f..fb41712 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -1,19 +1,19 @@
-{
-  "compilerOptions": {
-    "target": "es5",
-    "module": "esnext",
-    "baseUrl": "./",
-    "moduleResolution": "node",
-    "paths": {
-      "@/*": [
-        "src/*"
-      ]
-    },
-    "lib": [
-      "esnext",
-      "dom",
-      "dom.iterable",
-      "scripthost"
-    ]
-  }
-}
+{

+  "compilerOptions": {

+    "target": "es5",

+    "module": "esnext",

+    "baseUrl": "./",

+    "moduleResolution": "node",

+    "paths": {

+      "@/*": [

+        "src/*"

+      ]

+    },

+    "lib": [

+      "esnext",

+      "dom",

+      "dom.iterable",

+      "scripthost"

+    ]

+  }

+}

diff --git a/package-lock.json b/package-lock.json
index da8f006..accb0ed 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,11623 +1,11690 @@
-{
-  "name": "pt",
-  "version": "0.1.0",
-  "lockfileVersion": 3,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "pt",
-      "version": "0.1.0",
-      "dependencies": {
-        "@element-plus/icons-vue": "^2.3.1",
-        "core-js": "^3.8.3",
-        "element-plus": "^2.9.11",
-        "vue": "^3.5.16",
-        "vue-router": "^4.5.1",
-        "vuex": "^4.0.0"
-      },
-      "devDependencies": {
-        "@vitejs/plugin-vue": "^5.2.4",
-        "@vue/cli-plugin-babel": "~5.0.0",
-        "@vue/cli-plugin-router": "~5.0.0",
-        "@vue/cli-plugin-vuex": "~5.0.0",
-        "@vue/cli-service": "~5.0.0",
-        "sass": "^1.89.1",
-        "sass-loader": "^16.0.5",
-        "vite": "^6.3.5"
-      }
-    },
-    "node_modules/@achrinza/node-ipc": {
-      "version": "9.2.9",
-      "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.9.tgz",
-      "integrity": "sha512-7s0VcTwiK/0tNOVdSX9FWMeFdOEcsAOz9HesBldXxFMaGvIak7KC2z9tV9EgsQXn6KUsWsfIkViMNuIo0GoZDQ==",
-      "dev": true,
-      "dependencies": {
-        "@node-ipc/js-queue": "2.0.3",
-        "event-pubsub": "4.3.0",
-        "js-message": "1.0.7"
-      },
-      "engines": {
-        "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21 || 22"
-      }
-    },
-    "node_modules/@ampproject/remapping": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
-      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/code-frame": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz",
-      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.27.1",
-        "js-tokens": "^4.0.0",
-        "picocolors": "^1.1.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/compat-data": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.27.3.tgz",
-      "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/core": {
-      "version": "7.27.4",
-      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.27.4.tgz",
-      "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
-      "dev": true,
-      "dependencies": {
-        "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.27.1",
-        "@babel/generator": "^7.27.3",
-        "@babel/helper-compilation-targets": "^7.27.2",
-        "@babel/helper-module-transforms": "^7.27.3",
-        "@babel/helpers": "^7.27.4",
-        "@babel/parser": "^7.27.4",
-        "@babel/template": "^7.27.2",
-        "@babel/traverse": "^7.27.4",
-        "@babel/types": "^7.27.3",
-        "convert-source-map": "^2.0.0",
-        "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.3",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/babel"
-      }
-    },
-    "node_modules/@babel/generator": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.27.3.tgz",
-      "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/parser": "^7.27.3",
-        "@babel/types": "^7.27.3",
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
-      "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.27.3"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.27.2",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
-      "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/compat-data": "^7.27.2",
-        "@babel/helper-validator-option": "^7.27.1",
-        "browserslist": "^4.24.0",
-        "lru-cache": "^5.1.1",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz",
-      "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.27.1",
-        "@babel/helper-member-expression-to-functions": "^7.27.1",
-        "@babel/helper-optimise-call-expression": "^7.27.1",
-        "@babel/helper-replace-supers": "^7.27.1",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
-        "@babel/traverse": "^7.27.1",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz",
-      "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.27.1",
-        "regexpu-core": "^6.2.0",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-define-polyfill-provider": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz",
-      "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-compilation-targets": "^7.22.6",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "debug": "^4.1.1",
-        "lodash.debounce": "^4.0.8",
-        "resolve": "^1.14.2"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
-      }
-    },
-    "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
-      "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/traverse": "^7.27.1",
-        "@babel/types": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-module-imports": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
-      "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
-      "dev": true,
-      "dependencies": {
-        "@babel/traverse": "^7.27.1",
-        "@babel/types": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-module-transforms": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
-      "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.27.1",
-        "@babel/helper-validator-identifier": "^7.27.1",
-        "@babel/traverse": "^7.27.3"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
-      "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
-      "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz",
-      "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.27.1",
-        "@babel/helper-wrap-function": "^7.27.1",
-        "@babel/traverse": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-replace-supers": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
-      "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.27.1",
-        "@babel/helper-optimise-call-expression": "^7.27.1",
-        "@babel/traverse": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
-      "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/traverse": "^7.27.1",
-        "@babel/types": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-string-parser": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
-      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
-      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-option": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
-      "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-wrap-function": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz",
-      "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/template": "^7.27.1",
-        "@babel/traverse": "^7.27.1",
-        "@babel/types": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helpers": {
-      "version": "7.27.4",
-      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.4.tgz",
-      "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/template": "^7.27.2",
-        "@babel/types": "^7.27.3"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/parser": {
-      "version": "7.27.4",
-      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.4.tgz",
-      "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==",
-      "dependencies": {
-        "@babel/types": "^7.27.3"
-      },
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz",
-      "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/traverse": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz",
-      "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz",
-      "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",
-      "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
-        "@babel/plugin-transform-optional-chaining": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.13.0"
-      }
-    },
-    "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz",
-      "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/traverse": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-proposal-class-properties": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
-      "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
-      "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz",
-      "integrity": "sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/plugin-syntax-decorators": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-proposal-private-property-in-object": {
-      "version": "7.21.0-placeholder-for-preset-env.2",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
-      "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",
-      "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-dynamic-import": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz",
-      "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
-      "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
-      "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
-      "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz",
-      "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz",
-      "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-remap-async-to-generator": "^7.27.1",
-        "@babel/traverse": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz",
-      "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-remap-async-to-generator": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz",
-      "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.3.tgz",
-      "integrity": "sha512-+F8CnfhuLhwUACIJMLWnjz6zvzYM2r0yeIHKlbgfw7ml8rOMJsXNXV/hyRcb3nb493gRs4WvYpQAndWj/qQmkQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz",
-      "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz",
-      "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.12.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz",
-      "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.27.1",
-        "@babel/helper-compilation-targets": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-replace-supers": "^7.27.1",
-        "@babel/traverse": "^7.27.1",
-        "globals": "^11.1.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz",
-      "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/template": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz",
-      "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz",
-      "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz",
-      "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz",
-      "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz",
-      "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz",
-      "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz",
-      "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz",
-      "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz",
-      "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-compilation-targets": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/traverse": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz",
-      "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz",
-      "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz",
-      "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz",
-      "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz",
-      "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-transforms": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz",
-      "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-transforms": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz",
-      "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-transforms": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-validator-identifier": "^7.27.1",
-        "@babel/traverse": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz",
-      "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-transforms": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz",
-      "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz",
-      "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz",
-      "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz",
-      "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz",
-      "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-compilation-targets": "^7.27.2",
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/plugin-transform-destructuring": "^7.27.3",
-        "@babel/plugin-transform-parameters": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz",
-      "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-replace-supers": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz",
-      "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz",
-      "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz",
-      "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz",
-      "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz",
-      "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.27.1",
-        "@babel/helper-create-class-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz",
-      "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.27.4",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.4.tgz",
-      "integrity": "sha512-Glp/0n8xuj+E1588otw5rjJkTXfzW7FjH3IIUrfqiZOPQCd2vbg8e+DQE8jK9g4V5/zrxFW+D9WM9gboRPELpQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-regexp-modifiers": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz",
-      "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz",
-      "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.27.4",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz",
-      "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "babel-plugin-polyfill-corejs2": "^0.4.10",
-        "babel-plugin-polyfill-corejs3": "^0.11.0",
-        "babel-plugin-polyfill-regenerator": "^0.6.1",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz",
-      "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz",
-      "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz",
-      "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz",
-      "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz",
-      "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz",
-      "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz",
-      "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz",
-      "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz",
-      "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.27.1",
-        "@babel/helper-plugin-utils": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0"
-      }
-    },
-    "node_modules/@babel/preset-env": {
-      "version": "7.27.2",
-      "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.27.2.tgz",
-      "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/compat-data": "^7.27.2",
-        "@babel/helper-compilation-targets": "^7.27.2",
-        "@babel/helper-plugin-utils": "^7.27.1",
-        "@babel/helper-validator-option": "^7.27.1",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1",
-        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",
-        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1",
-        "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
-        "@babel/plugin-syntax-import-assertions": "^7.27.1",
-        "@babel/plugin-syntax-import-attributes": "^7.27.1",
-        "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-        "@babel/plugin-transform-arrow-functions": "^7.27.1",
-        "@babel/plugin-transform-async-generator-functions": "^7.27.1",
-        "@babel/plugin-transform-async-to-generator": "^7.27.1",
-        "@babel/plugin-transform-block-scoped-functions": "^7.27.1",
-        "@babel/plugin-transform-block-scoping": "^7.27.1",
-        "@babel/plugin-transform-class-properties": "^7.27.1",
-        "@babel/plugin-transform-class-static-block": "^7.27.1",
-        "@babel/plugin-transform-classes": "^7.27.1",
-        "@babel/plugin-transform-computed-properties": "^7.27.1",
-        "@babel/plugin-transform-destructuring": "^7.27.1",
-        "@babel/plugin-transform-dotall-regex": "^7.27.1",
-        "@babel/plugin-transform-duplicate-keys": "^7.27.1",
-        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1",
-        "@babel/plugin-transform-dynamic-import": "^7.27.1",
-        "@babel/plugin-transform-exponentiation-operator": "^7.27.1",
-        "@babel/plugin-transform-export-namespace-from": "^7.27.1",
-        "@babel/plugin-transform-for-of": "^7.27.1",
-        "@babel/plugin-transform-function-name": "^7.27.1",
-        "@babel/plugin-transform-json-strings": "^7.27.1",
-        "@babel/plugin-transform-literals": "^7.27.1",
-        "@babel/plugin-transform-logical-assignment-operators": "^7.27.1",
-        "@babel/plugin-transform-member-expression-literals": "^7.27.1",
-        "@babel/plugin-transform-modules-amd": "^7.27.1",
-        "@babel/plugin-transform-modules-commonjs": "^7.27.1",
-        "@babel/plugin-transform-modules-systemjs": "^7.27.1",
-        "@babel/plugin-transform-modules-umd": "^7.27.1",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1",
-        "@babel/plugin-transform-new-target": "^7.27.1",
-        "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",
-        "@babel/plugin-transform-numeric-separator": "^7.27.1",
-        "@babel/plugin-transform-object-rest-spread": "^7.27.2",
-        "@babel/plugin-transform-object-super": "^7.27.1",
-        "@babel/plugin-transform-optional-catch-binding": "^7.27.1",
-        "@babel/plugin-transform-optional-chaining": "^7.27.1",
-        "@babel/plugin-transform-parameters": "^7.27.1",
-        "@babel/plugin-transform-private-methods": "^7.27.1",
-        "@babel/plugin-transform-private-property-in-object": "^7.27.1",
-        "@babel/plugin-transform-property-literals": "^7.27.1",
-        "@babel/plugin-transform-regenerator": "^7.27.1",
-        "@babel/plugin-transform-regexp-modifiers": "^7.27.1",
-        "@babel/plugin-transform-reserved-words": "^7.27.1",
-        "@babel/plugin-transform-shorthand-properties": "^7.27.1",
-        "@babel/plugin-transform-spread": "^7.27.1",
-        "@babel/plugin-transform-sticky-regex": "^7.27.1",
-        "@babel/plugin-transform-template-literals": "^7.27.1",
-        "@babel/plugin-transform-typeof-symbol": "^7.27.1",
-        "@babel/plugin-transform-unicode-escapes": "^7.27.1",
-        "@babel/plugin-transform-unicode-property-regex": "^7.27.1",
-        "@babel/plugin-transform-unicode-regex": "^7.27.1",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.27.1",
-        "@babel/preset-modules": "0.1.6-no-external-plugins",
-        "babel-plugin-polyfill-corejs2": "^0.4.10",
-        "babel-plugin-polyfill-corejs3": "^0.11.0",
-        "babel-plugin-polyfill-regenerator": "^0.6.1",
-        "core-js-compat": "^3.40.0",
-        "semver": "^6.3.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/preset-modules": {
-      "version": "0.1.6-no-external-plugins",
-      "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
-      "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/types": "^7.4.4",
-        "esutils": "^2.0.2"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
-      }
-    },
-    "node_modules/@babel/runtime": {
-      "version": "7.27.4",
-      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.4.tgz",
-      "integrity": "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/template": {
-      "version": "7.27.2",
-      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",
-      "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.27.1",
-        "@babel/parser": "^7.27.2",
-        "@babel/types": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse": {
-      "version": "7.27.4",
-      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.27.4.tgz",
-      "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.27.1",
-        "@babel/generator": "^7.27.3",
-        "@babel/parser": "^7.27.4",
-        "@babel/template": "^7.27.2",
-        "@babel/types": "^7.27.3",
-        "debug": "^4.3.1",
-        "globals": "^11.1.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/types": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.3.tgz",
-      "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==",
-      "dependencies": {
-        "@babel/helper-string-parser": "^7.27.1",
-        "@babel/helper-validator-identifier": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@ctrl/tinycolor": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
-      "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@discoveryjs/json-ext": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
-      "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/@element-plus/icons-vue": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
-      "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
-      "peerDependencies": {
-        "vue": "^3.2.0"
-      }
-    },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
-      "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
-      "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
-      "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
-      "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
-      "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
-      "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
-      "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
-      "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
-      "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
-      "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
-      "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
-      "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
-      "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
-      "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
-      "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
-      "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/netbsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
-      "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
-      "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
-      "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
-      "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
-      "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
-      "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@floating-ui/core": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.1.tgz",
-      "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==",
-      "dependencies": {
-        "@floating-ui/utils": "^0.2.9"
-      }
-    },
-    "node_modules/@floating-ui/dom": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.1.tgz",
-      "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==",
-      "dependencies": {
-        "@floating-ui/core": "^1.7.1",
-        "@floating-ui/utils": "^0.2.9"
-      }
-    },
-    "node_modules/@floating-ui/utils": {
-      "version": "0.2.9",
-      "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz",
-      "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="
-    },
-    "node_modules/@hapi/hoek": {
-      "version": "9.3.0",
-      "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz",
-      "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
-      "dev": true
-    },
-    "node_modules/@hapi/topo": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz",
-      "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
-      "dev": true,
-      "dependencies": {
-        "@hapi/hoek": "^9.0.0"
-      }
-    },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
-      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/set-array": "^1.2.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/source-map": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz",
-      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25"
-      }
-    },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.25",
-      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
-      }
-    },
-    "node_modules/@leichtgewicht/ip-codec": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
-      "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
-      "dev": true
-    },
-    "node_modules/@node-ipc/js-queue": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz",
-      "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==",
-      "dev": true,
-      "dependencies": {
-        "easy-stack": "1.0.1"
-      },
-      "engines": {
-        "node": ">=1.0.0"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@parcel/watcher": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.1.tgz",
-      "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "dependencies": {
-        "detect-libc": "^1.0.3",
-        "is-glob": "^4.0.3",
-        "micromatch": "^4.0.5",
-        "node-addon-api": "^7.0.0"
-      },
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      },
-      "optionalDependencies": {
-        "@parcel/watcher-android-arm64": "2.5.1",
-        "@parcel/watcher-darwin-arm64": "2.5.1",
-        "@parcel/watcher-darwin-x64": "2.5.1",
-        "@parcel/watcher-freebsd-x64": "2.5.1",
-        "@parcel/watcher-linux-arm-glibc": "2.5.1",
-        "@parcel/watcher-linux-arm-musl": "2.5.1",
-        "@parcel/watcher-linux-arm64-glibc": "2.5.1",
-        "@parcel/watcher-linux-arm64-musl": "2.5.1",
-        "@parcel/watcher-linux-x64-glibc": "2.5.1",
-        "@parcel/watcher-linux-x64-musl": "2.5.1",
-        "@parcel/watcher-win32-arm64": "2.5.1",
-        "@parcel/watcher-win32-ia32": "2.5.1",
-        "@parcel/watcher-win32-x64": "2.5.1"
-      }
-    },
-    "node_modules/@parcel/watcher-android-arm64": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
-      "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-darwin-arm64": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
-      "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-darwin-x64": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
-      "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-freebsd-x64": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
-      "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-linux-arm-glibc": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
-      "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-linux-arm-musl": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
-      "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-linux-arm64-glibc": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
-      "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-linux-arm64-musl": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
-      "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-linux-x64-glibc": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
-      "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-linux-x64-musl": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
-      "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-win32-arm64": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
-      "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-win32-ia32": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
-      "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/watcher-win32-x64": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
-      "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@polka/url": {
-      "version": "1.0.0-next.29",
-      "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz",
-      "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
-      "dev": true
-    },
-    "node_modules/@popperjs/core": {
-      "name": "@sxzz/popperjs-es",
-      "version": "2.11.7",
-      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
-      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/popperjs"
-      }
-    },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",
-      "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",
-      "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",
-      "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
-      "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",
-      "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",
-      "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",
-      "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",
-      "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",
-      "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",
-      "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",
-      "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",
-      "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",
-      "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",
-      "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",
-      "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",
-      "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",
-      "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",
-      "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",
-      "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",
-      "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@sideway/address": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz",
-      "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
-      "dev": true,
-      "dependencies": {
-        "@hapi/hoek": "^9.0.0"
-      }
-    },
-    "node_modules/@sideway/formula": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz",
-      "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
-      "dev": true
-    },
-    "node_modules/@sideway/pinpoint": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
-      "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
-      "dev": true
-    },
-    "node_modules/@soda/friendly-errors-webpack-plugin": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz",
-      "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^3.0.0",
-        "error-stack-parser": "^2.0.6",
-        "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      },
-      "peerDependencies": {
-        "webpack": "^4.0.0 || ^5.0.0"
-      }
-    },
-    "node_modules/@soda/get-current-script": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz",
-      "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==",
-      "dev": true
-    },
-    "node_modules/@trysound/sax": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz",
-      "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/@types/body-parser": {
-      "version": "1.19.5",
-      "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz",
-      "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
-      "dev": true,
-      "dependencies": {
-        "@types/connect": "*",
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/bonjour": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.13.tgz",
-      "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/connect": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz",
-      "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/connect-history-api-fallback": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
-      "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
-      "dev": true,
-      "dependencies": {
-        "@types/express-serve-static-core": "*",
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/eslint": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz",
-      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
-      "dev": true,
-      "dependencies": {
-        "@types/estree": "*",
-        "@types/json-schema": "*"
-      }
-    },
-    "node_modules/@types/eslint-scope": {
-      "version": "3.7.7",
-      "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
-      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
-      "dev": true,
-      "dependencies": {
-        "@types/eslint": "*",
-        "@types/estree": "*"
-      }
-    },
-    "node_modules/@types/estree": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.7.tgz",
-      "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
-      "dev": true
-    },
-    "node_modules/@types/express": {
-      "version": "4.17.22",
-      "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.22.tgz",
-      "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==",
-      "dev": true,
-      "dependencies": {
-        "@types/body-parser": "*",
-        "@types/express-serve-static-core": "^4.17.33",
-        "@types/qs": "*",
-        "@types/serve-static": "*"
-      }
-    },
-    "node_modules/@types/express-serve-static-core": {
-      "version": "5.0.6",
-      "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz",
-      "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "@types/qs": "*",
-        "@types/range-parser": "*",
-        "@types/send": "*"
-      }
-    },
-    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
-      "version": "4.19.6",
-      "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
-      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "@types/qs": "*",
-        "@types/range-parser": "*",
-        "@types/send": "*"
-      }
-    },
-    "node_modules/@types/html-minifier-terser": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
-      "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==",
-      "dev": true
-    },
-    "node_modules/@types/http-errors": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz",
-      "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
-      "dev": true
-    },
-    "node_modules/@types/http-proxy": {
-      "version": "1.17.16",
-      "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.16.tgz",
-      "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/json-schema": {
-      "version": "7.0.15",
-      "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
-      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
-      "dev": true
-    },
-    "node_modules/@types/lodash": {
-      "version": "4.17.17",
-      "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.17.tgz",
-      "integrity": "sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ=="
-    },
-    "node_modules/@types/lodash-es": {
-      "version": "4.17.12",
-      "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
-      "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
-      "dependencies": {
-        "@types/lodash": "*"
-      }
-    },
-    "node_modules/@types/mime": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz",
-      "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
-      "dev": true
-    },
-    "node_modules/@types/minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
-      "dev": true
-    },
-    "node_modules/@types/node": {
-      "version": "22.15.29",
-      "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.15.29.tgz",
-      "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==",
-      "dev": true,
-      "dependencies": {
-        "undici-types": "~6.21.0"
-      }
-    },
-    "node_modules/@types/node-forge": {
-      "version": "1.3.11",
-      "resolved": "https://registry.npmmirror.com/@types/node-forge/-/node-forge-1.3.11.tgz",
-      "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/normalize-package-data": {
-      "version": "2.4.4",
-      "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
-      "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
-      "dev": true
-    },
-    "node_modules/@types/parse-json": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz",
-      "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
-      "dev": true
-    },
-    "node_modules/@types/qs": {
-      "version": "6.14.0",
-      "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.14.0.tgz",
-      "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
-      "dev": true
-    },
-    "node_modules/@types/range-parser": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz",
-      "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
-      "dev": true
-    },
-    "node_modules/@types/retry": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz",
-      "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
-      "dev": true
-    },
-    "node_modules/@types/send": {
-      "version": "0.17.4",
-      "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz",
-      "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
-      "dev": true,
-      "dependencies": {
-        "@types/mime": "^1",
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/serve-index": {
-      "version": "1.9.4",
-      "resolved": "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.4.tgz",
-      "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",
-      "dev": true,
-      "dependencies": {
-        "@types/express": "*"
-      }
-    },
-    "node_modules/@types/serve-static": {
-      "version": "1.15.7",
-      "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz",
-      "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
-      "dev": true,
-      "dependencies": {
-        "@types/http-errors": "*",
-        "@types/node": "*",
-        "@types/send": "*"
-      }
-    },
-    "node_modules/@types/sockjs": {
-      "version": "0.3.36",
-      "resolved": "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.36.tgz",
-      "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/web-bluetooth": {
-      "version": "0.0.16",
-      "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
-      "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
-    },
-    "node_modules/@types/ws": {
-      "version": "8.18.1",
-      "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.18.1.tgz",
-      "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@vitejs/plugin-vue": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
-      "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
-      "dev": true,
-      "engines": {
-        "node": "^18.0.0 || >=20.0.0"
-      },
-      "peerDependencies": {
-        "vite": "^5.0.0 || ^6.0.0",
-        "vue": "^3.2.25"
-      }
-    },
-    "node_modules/@vue/babel-helper-vue-jsx-merge-props": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz",
-      "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==",
-      "dev": true
-    },
-    "node_modules/@vue/babel-helper-vue-transform-on": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz",
-      "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==",
-      "dev": true
-    },
-    "node_modules/@vue/babel-plugin-jsx": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz",
-      "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.25.9",
-        "@babel/helper-plugin-utils": "^7.26.5",
-        "@babel/plugin-syntax-jsx": "^7.25.9",
-        "@babel/template": "^7.26.9",
-        "@babel/traverse": "^7.26.9",
-        "@babel/types": "^7.26.9",
-        "@vue/babel-helper-vue-transform-on": "1.4.0",
-        "@vue/babel-plugin-resolve-type": "1.4.0",
-        "@vue/shared": "^3.5.13"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      },
-      "peerDependenciesMeta": {
-        "@babel/core": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vue/babel-plugin-resolve-type": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz",
-      "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.26.2",
-        "@babel/helper-module-imports": "^7.25.9",
-        "@babel/helper-plugin-utils": "^7.26.5",
-        "@babel/parser": "^7.26.9",
-        "@vue/compiler-sfc": "^3.5.13"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sxzz"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@vue/babel-plugin-transform-vue-jsx": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz",
-      "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-module-imports": "^7.0.0",
-        "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",
-        "html-tags": "^2.0.0",
-        "lodash.kebabcase": "^4.1.1",
-        "svg-tags": "^1.0.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@vue/babel-preset-app": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz",
-      "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.12.16",
-        "@babel/helper-compilation-targets": "^7.12.16",
-        "@babel/helper-module-imports": "^7.12.13",
-        "@babel/plugin-proposal-class-properties": "^7.12.13",
-        "@babel/plugin-proposal-decorators": "^7.12.13",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-        "@babel/plugin-syntax-jsx": "^7.12.13",
-        "@babel/plugin-transform-runtime": "^7.12.15",
-        "@babel/preset-env": "^7.12.16",
-        "@babel/runtime": "^7.12.13",
-        "@vue/babel-plugin-jsx": "^1.0.3",
-        "@vue/babel-preset-jsx": "^1.1.2",
-        "babel-plugin-dynamic-import-node": "^2.3.3",
-        "core-js": "^3.8.3",
-        "core-js-compat": "^3.8.3",
-        "semver": "^7.3.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "*",
-        "core-js": "^3",
-        "vue": "^2 || ^3.2.13"
-      },
-      "peerDependenciesMeta": {
-        "core-js": {
-          "optional": true
-        },
-        "vue": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vue/babel-preset-app/node_modules/semver": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",
-      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@vue/babel-preset-jsx": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz",
-      "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==",
-      "dev": true,
-      "dependencies": {
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.4.0",
-        "@vue/babel-sugar-composition-api-inject-h": "^1.4.0",
-        "@vue/babel-sugar-composition-api-render-instance": "^1.4.0",
-        "@vue/babel-sugar-functional-vue": "^1.4.0",
-        "@vue/babel-sugar-inject-h": "^1.4.0",
-        "@vue/babel-sugar-v-model": "^1.4.0",
-        "@vue/babel-sugar-v-on": "^1.4.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0",
-        "vue": "*"
-      },
-      "peerDependenciesMeta": {
-        "vue": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vue/babel-sugar-composition-api-inject-h": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz",
-      "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/plugin-syntax-jsx": "^7.2.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@vue/babel-sugar-composition-api-render-instance": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz",
-      "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/plugin-syntax-jsx": "^7.2.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@vue/babel-sugar-functional-vue": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz",
-      "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/plugin-syntax-jsx": "^7.2.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@vue/babel-sugar-inject-h": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz",
-      "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/plugin-syntax-jsx": "^7.2.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@vue/babel-sugar-v-model": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz",
-      "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.4.0",
-        "camelcase": "^5.0.0",
-        "html-tags": "^2.0.0",
-        "svg-tags": "^1.0.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@vue/babel-sugar-v-on": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz",
-      "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.4.0",
-        "camelcase": "^5.0.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@vue/cli-overlay": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz",
-      "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==",
-      "dev": true
-    },
-    "node_modules/@vue/cli-plugin-babel": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz",
-      "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/core": "^7.12.16",
-        "@vue/babel-preset-app": "^5.0.8",
-        "@vue/cli-shared-utils": "^5.0.8",
-        "babel-loader": "^8.2.2",
-        "thread-loader": "^3.0.0",
-        "webpack": "^5.54.0"
-      },
-      "peerDependencies": {
-        "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0"
-      }
-    },
-    "node_modules/@vue/cli-plugin-router": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz",
-      "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==",
-      "dev": true,
-      "dependencies": {
-        "@vue/cli-shared-utils": "^5.0.8"
-      },
-      "peerDependencies": {
-        "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0"
-      }
-    },
-    "node_modules/@vue/cli-plugin-vuex": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz",
-      "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==",
-      "dev": true,
-      "peerDependencies": {
-        "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0"
-      }
-    },
-    "node_modules/@vue/cli-service": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz",
-      "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-compilation-targets": "^7.12.16",
-        "@soda/friendly-errors-webpack-plugin": "^1.8.0",
-        "@soda/get-current-script": "^1.0.2",
-        "@types/minimist": "^1.2.0",
-        "@vue/cli-overlay": "^5.0.8",
-        "@vue/cli-plugin-router": "^5.0.8",
-        "@vue/cli-plugin-vuex": "^5.0.8",
-        "@vue/cli-shared-utils": "^5.0.8",
-        "@vue/component-compiler-utils": "^3.3.0",
-        "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7",
-        "@vue/web-component-wrapper": "^1.3.0",
-        "acorn": "^8.0.5",
-        "acorn-walk": "^8.0.2",
-        "address": "^1.1.2",
-        "autoprefixer": "^10.2.4",
-        "browserslist": "^4.16.3",
-        "case-sensitive-paths-webpack-plugin": "^2.3.0",
-        "cli-highlight": "^2.1.10",
-        "clipboardy": "^2.3.0",
-        "cliui": "^7.0.4",
-        "copy-webpack-plugin": "^9.0.1",
-        "css-loader": "^6.5.0",
-        "css-minimizer-webpack-plugin": "^3.0.2",
-        "cssnano": "^5.0.0",
-        "debug": "^4.1.1",
-        "default-gateway": "^6.0.3",
-        "dotenv": "^10.0.0",
-        "dotenv-expand": "^5.1.0",
-        "fs-extra": "^9.1.0",
-        "globby": "^11.0.2",
-        "hash-sum": "^2.0.0",
-        "html-webpack-plugin": "^5.1.0",
-        "is-file-esm": "^1.0.0",
-        "launch-editor-middleware": "^2.2.1",
-        "lodash.defaultsdeep": "^4.6.1",
-        "lodash.mapvalues": "^4.6.0",
-        "mini-css-extract-plugin": "^2.5.3",
-        "minimist": "^1.2.5",
-        "module-alias": "^2.2.2",
-        "portfinder": "^1.0.26",
-        "postcss": "^8.2.6",
-        "postcss-loader": "^6.1.1",
-        "progress-webpack-plugin": "^1.0.12",
-        "ssri": "^8.0.1",
-        "terser-webpack-plugin": "^5.1.1",
-        "thread-loader": "^3.0.0",
-        "vue-loader": "^17.0.0",
-        "vue-style-loader": "^4.1.3",
-        "webpack": "^5.54.0",
-        "webpack-bundle-analyzer": "^4.4.0",
-        "webpack-chain": "^6.5.1",
-        "webpack-dev-server": "^4.7.3",
-        "webpack-merge": "^5.7.3",
-        "webpack-virtual-modules": "^0.4.2",
-        "whatwg-fetch": "^3.6.2"
-      },
-      "bin": {
-        "vue-cli-service": "bin/vue-cli-service.js"
-      },
-      "engines": {
-        "node": "^12.0.0 || >= 14.0.0"
-      },
-      "peerDependencies": {
-        "vue-template-compiler": "^2.0.0",
-        "webpack-sources": "*"
-      },
-      "peerDependenciesMeta": {
-        "cache-loader": {
-          "optional": true
-        },
-        "less-loader": {
-          "optional": true
-        },
-        "pug-plain-loader": {
-          "optional": true
-        },
-        "raw-loader": {
-          "optional": true
-        },
-        "sass-loader": {
-          "optional": true
-        },
-        "stylus-loader": {
-          "optional": true
-        },
-        "vue-template-compiler": {
-          "optional": true
-        },
-        "webpack-sources": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vue/cli-shared-utils": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz",
-      "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==",
-      "dev": true,
-      "dependencies": {
-        "@achrinza/node-ipc": "^9.2.5",
-        "chalk": "^4.1.2",
-        "execa": "^1.0.0",
-        "joi": "^17.4.0",
-        "launch-editor": "^2.2.1",
-        "lru-cache": "^6.0.0",
-        "node-fetch": "^2.6.7",
-        "open": "^8.0.2",
-        "ora": "^5.3.0",
-        "read-pkg": "^5.1.1",
-        "semver": "^7.3.4",
-        "strip-ansi": "^6.0.0"
-      }
-    },
-    "node_modules/@vue/cli-shared-utils/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/@vue/cli-shared-utils/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@vue/cli-shared-utils/node_modules/semver": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",
-      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@vue/cli-shared-utils/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    },
-    "node_modules/@vue/compiler-core": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.16.tgz",
-      "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==",
-      "dependencies": {
-        "@babel/parser": "^7.27.2",
-        "@vue/shared": "3.5.16",
-        "entities": "^4.5.0",
-        "estree-walker": "^2.0.2",
-        "source-map-js": "^1.2.1"
-      }
-    },
-    "node_modules/@vue/compiler-dom": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz",
-      "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==",
-      "dependencies": {
-        "@vue/compiler-core": "3.5.16",
-        "@vue/shared": "3.5.16"
-      }
-    },
-    "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz",
-      "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==",
-      "dependencies": {
-        "@babel/parser": "^7.27.2",
-        "@vue/compiler-core": "3.5.16",
-        "@vue/compiler-dom": "3.5.16",
-        "@vue/compiler-ssr": "3.5.16",
-        "@vue/shared": "3.5.16",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.30.17",
-        "postcss": "^8.5.3",
-        "source-map-js": "^1.2.1"
-      }
-    },
-    "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz",
-      "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==",
-      "dependencies": {
-        "@vue/compiler-dom": "3.5.16",
-        "@vue/shared": "3.5.16"
-      }
-    },
-    "node_modules/@vue/component-compiler-utils": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
-      "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==",
-      "dev": true,
-      "dependencies": {
-        "consolidate": "^0.15.1",
-        "hash-sum": "^1.0.2",
-        "lru-cache": "^4.1.2",
-        "merge-source-map": "^1.1.0",
-        "postcss": "^7.0.36",
-        "postcss-selector-parser": "^6.0.2",
-        "source-map": "~0.6.1",
-        "vue-template-es2015-compiler": "^1.9.0"
-      },
-      "optionalDependencies": {
-        "prettier": "^1.18.2 || ^2.0.0"
-      }
-    },
-    "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
-      "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-      "dev": true
-    },
-    "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-      "dev": true,
-      "dependencies": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
-      }
-    },
-    "node_modules/@vue/component-compiler-utils/node_modules/picocolors": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz",
-      "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-      "dev": true
-    },
-    "node_modules/@vue/component-compiler-utils/node_modules/postcss": {
-      "version": "7.0.39",
-      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz",
-      "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-      "dev": true,
-      "dependencies": {
-        "picocolors": "^0.2.1",
-        "source-map": "^0.6.1"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      }
-    },
-    "node_modules/@vue/component-compiler-utils/node_modules/yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
-      "dev": true
-    },
-    "node_modules/@vue/devtools-api": {
-      "version": "6.6.4",
-      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
-      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
-    },
-    "node_modules/@vue/reactivity": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.16.tgz",
-      "integrity": "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==",
-      "dependencies": {
-        "@vue/shared": "3.5.16"
-      }
-    },
-    "node_modules/@vue/runtime-core": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.16.tgz",
-      "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==",
-      "dependencies": {
-        "@vue/reactivity": "3.5.16",
-        "@vue/shared": "3.5.16"
-      }
-    },
-    "node_modules/@vue/runtime-dom": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz",
-      "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==",
-      "dependencies": {
-        "@vue/reactivity": "3.5.16",
-        "@vue/runtime-core": "3.5.16",
-        "@vue/shared": "3.5.16",
-        "csstype": "^3.1.3"
-      }
-    },
-    "node_modules/@vue/server-renderer": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.16.tgz",
-      "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==",
-      "dependencies": {
-        "@vue/compiler-ssr": "3.5.16",
-        "@vue/shared": "3.5.16"
-      },
-      "peerDependencies": {
-        "vue": "3.5.16"
-      }
-    },
-    "node_modules/@vue/shared": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.16.tgz",
-      "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg=="
-    },
-    "node_modules/@vue/vue-loader-v15": {
-      "name": "vue-loader",
-      "version": "15.11.1",
-      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz",
-      "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==",
-      "dev": true,
-      "dependencies": {
-        "@vue/component-compiler-utils": "^3.1.0",
-        "hash-sum": "^1.0.2",
-        "loader-utils": "^1.1.0",
-        "vue-hot-reload-api": "^2.3.0",
-        "vue-style-loader": "^4.1.0"
-      },
-      "peerDependencies": {
-        "css-loader": "*",
-        "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0"
-      },
-      "peerDependenciesMeta": {
-        "cache-loader": {
-          "optional": true
-        },
-        "prettier": {
-          "optional": true
-        },
-        "vue-template-compiler": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
-      "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-      "dev": true
-    },
-    "node_modules/@vue/web-component-wrapper": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
-      "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==",
-      "dev": true
-    },
-    "node_modules/@vueuse/core": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
-      "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
-      "dependencies": {
-        "@types/web-bluetooth": "^0.0.16",
-        "@vueuse/metadata": "9.13.0",
-        "@vueuse/shared": "9.13.0",
-        "vue-demi": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/@vueuse/core/node_modules/vue-demi": {
-      "version": "0.14.10",
-      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
-      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
-      "hasInstallScript": true,
-      "bin": {
-        "vue-demi-fix": "bin/vue-demi-fix.js",
-        "vue-demi-switch": "bin/vue-demi-switch.js"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      },
-      "peerDependencies": {
-        "@vue/composition-api": "^1.0.0-rc.1",
-        "vue": "^3.0.0-0 || ^2.6.0"
-      },
-      "peerDependenciesMeta": {
-        "@vue/composition-api": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vueuse/metadata": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
-      "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/@vueuse/shared": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
-      "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
-      "dependencies": {
-        "vue-demi": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
-    "node_modules/@vueuse/shared/node_modules/vue-demi": {
-      "version": "0.14.10",
-      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
-      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
-      "hasInstallScript": true,
-      "bin": {
-        "vue-demi-fix": "bin/vue-demi-fix.js",
-        "vue-demi-switch": "bin/vue-demi-switch.js"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      },
-      "peerDependencies": {
-        "@vue/composition-api": "^1.0.0-rc.1",
-        "vue": "^3.0.0-0 || ^2.6.0"
-      },
-      "peerDependenciesMeta": {
-        "@vue/composition-api": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@webassemblyjs/ast": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz",
-      "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
-      "dev": true,
-      "dependencies": {
-        "@webassemblyjs/helper-numbers": "1.13.2",
-        "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
-      }
-    },
-    "node_modules/@webassemblyjs/floating-point-hex-parser": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
-      "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
-      "dev": true
-    },
-    "node_modules/@webassemblyjs/helper-api-error": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
-      "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
-      "dev": true
-    },
-    "node_modules/@webassemblyjs/helper-buffer": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
-      "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
-      "dev": true
-    },
-    "node_modules/@webassemblyjs/helper-numbers": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
-      "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
-      "dev": true,
-      "dependencies": {
-        "@webassemblyjs/floating-point-hex-parser": "1.13.2",
-        "@webassemblyjs/helper-api-error": "1.13.2",
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
-      "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
-      "dev": true
-    },
-    "node_modules/@webassemblyjs/helper-wasm-section": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
-      "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
-      "dev": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.14.1",
-        "@webassemblyjs/helper-buffer": "1.14.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
-        "@webassemblyjs/wasm-gen": "1.14.1"
-      }
-    },
-    "node_modules/@webassemblyjs/ieee754": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
-      "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
-      "dev": true,
-      "dependencies": {
-        "@xtuc/ieee754": "^1.2.0"
-      }
-    },
-    "node_modules/@webassemblyjs/leb128": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
-      "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
-      "dev": true,
-      "dependencies": {
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "node_modules/@webassemblyjs/utf8": {
-      "version": "1.13.2",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
-      "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
-      "dev": true
-    },
-    "node_modules/@webassemblyjs/wasm-edit": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
-      "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
-      "dev": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.14.1",
-        "@webassemblyjs/helper-buffer": "1.14.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
-        "@webassemblyjs/helper-wasm-section": "1.14.1",
-        "@webassemblyjs/wasm-gen": "1.14.1",
-        "@webassemblyjs/wasm-opt": "1.14.1",
-        "@webassemblyjs/wasm-parser": "1.14.1",
-        "@webassemblyjs/wast-printer": "1.14.1"
-      }
-    },
-    "node_modules/@webassemblyjs/wasm-gen": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
-      "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
-      "dev": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.14.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
-        "@webassemblyjs/ieee754": "1.13.2",
-        "@webassemblyjs/leb128": "1.13.2",
-        "@webassemblyjs/utf8": "1.13.2"
-      }
-    },
-    "node_modules/@webassemblyjs/wasm-opt": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
-      "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
-      "dev": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.14.1",
-        "@webassemblyjs/helper-buffer": "1.14.1",
-        "@webassemblyjs/wasm-gen": "1.14.1",
-        "@webassemblyjs/wasm-parser": "1.14.1"
-      }
-    },
-    "node_modules/@webassemblyjs/wasm-parser": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
-      "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
-      "dev": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.14.1",
-        "@webassemblyjs/helper-api-error": "1.13.2",
-        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
-        "@webassemblyjs/ieee754": "1.13.2",
-        "@webassemblyjs/leb128": "1.13.2",
-        "@webassemblyjs/utf8": "1.13.2"
-      }
-    },
-    "node_modules/@webassemblyjs/wast-printer": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
-      "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
-      "dev": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.14.1",
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "node_modules/@xtuc/ieee754": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-      "dev": true
-    },
-    "node_modules/@xtuc/long": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
-      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
-      "dev": true
-    },
-    "node_modules/accepts": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
-      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
-      "dev": true,
-      "dependencies": {
-        "mime-types": "~2.1.34",
-        "negotiator": "0.6.3"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/accepts/node_modules/negotiator": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
-      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/acorn": {
-      "version": "8.14.1",
-      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz",
-      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-walk": {
-      "version": "8.3.4",
-      "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz",
-      "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^8.11.0"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/address": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz",
-      "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10.0.0"
-      }
-    },
-    "node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/ajv-formats": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz",
-      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^8.0.0"
-      },
-      "peerDependencies": {
-        "ajv": "^8.0.0"
-      },
-      "peerDependenciesMeta": {
-        "ajv": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/ajv-formats/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/ajv-formats/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/ajv-keywords": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-      "dev": true,
-      "peerDependencies": {
-        "ajv": "^6.9.1"
-      }
-    },
-    "node_modules/ansi-escapes": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
-      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/ansi-html-community": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
-      "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
-      "dev": true,
-      "engines": [
-        "node >= 0.8.0"
-      ],
-      "bin": {
-        "ansi-html": "bin/ansi-html"
-      }
-    },
-    "node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/any-promise": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",
-      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
-      "dev": true
-    },
-    "node_modules/anymatch": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
-      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
-      "dev": true,
-      "dependencies": {
-        "normalize-path": "^3.0.0",
-        "picomatch": "^2.0.4"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/arch": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz",
-      "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/array-flatten": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",
-      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
-      "dev": true
-    },
-    "node_modules/array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/async": {
-      "version": "3.2.6",
-      "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz",
-      "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
-      "dev": true
-    },
-    "node_modules/async-validator": {
-      "version": "4.2.5",
-      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
-      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
-    },
-    "node_modules/at-least-node": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
-      "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
-    "node_modules/autoprefixer": {
-      "version": "10.4.21",
-      "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.21.tgz",
-      "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/autoprefixer"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "browserslist": "^4.24.4",
-        "caniuse-lite": "^1.0.30001702",
-        "fraction.js": "^4.3.7",
-        "normalize-range": "^0.1.2",
-        "picocolors": "^1.1.1",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "bin": {
-        "autoprefixer": "bin/autoprefixer"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      },
-      "peerDependencies": {
-        "postcss": "^8.1.0"
-      }
-    },
-    "node_modules/babel-loader": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz",
-      "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==",
-      "dev": true,
-      "dependencies": {
-        "find-cache-dir": "^3.3.1",
-        "loader-utils": "^2.0.4",
-        "make-dir": "^3.1.0",
-        "schema-utils": "^2.6.5"
-      },
-      "engines": {
-        "node": ">= 8.9"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0",
-        "webpack": ">=2"
-      }
-    },
-    "node_modules/babel-loader/node_modules/loader-utils": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
-      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-      "dev": true,
-      "dependencies": {
-        "big.js": "^5.2.2",
-        "emojis-list": "^3.0.0",
-        "json5": "^2.1.2"
-      },
-      "engines": {
-        "node": ">=8.9.0"
-      }
-    },
-    "node_modules/babel-plugin-dynamic-import-node": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-      "dev": true,
-      "dependencies": {
-        "object.assign": "^4.1.0"
-      }
-    },
-    "node_modules/babel-plugin-polyfill-corejs2": {
-      "version": "0.4.13",
-      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz",
-      "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/compat-data": "^7.22.6",
-        "@babel/helper-define-polyfill-provider": "^0.6.4",
-        "semver": "^6.3.1"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
-      }
-    },
-    "node_modules/babel-plugin-polyfill-corejs3": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz",
-      "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-define-polyfill-provider": "^0.6.3",
-        "core-js-compat": "^3.40.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
-      }
-    },
-    "node_modules/babel-plugin-polyfill-regenerator": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz",
-      "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-define-polyfill-provider": "^0.6.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
-      }
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
-    },
-    "node_modules/base64-js": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
-      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/batch": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz",
-      "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
-      "dev": true
-    },
-    "node_modules/big.js": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz",
-      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/binary-extensions": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
-      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/bl": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
-      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
-      "dev": true,
-      "dependencies": {
-        "buffer": "^5.5.0",
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.4.0"
-      }
-    },
-    "node_modules/bluebird": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz",
-      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
-      "dev": true
-    },
-    "node_modules/body-parser": {
-      "version": "1.20.3",
-      "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz",
-      "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
-      "dev": true,
-      "dependencies": {
-        "bytes": "3.1.2",
-        "content-type": "~1.0.5",
-        "debug": "2.6.9",
-        "depd": "2.0.0",
-        "destroy": "1.2.0",
-        "http-errors": "2.0.0",
-        "iconv-lite": "0.4.24",
-        "on-finished": "2.4.1",
-        "qs": "6.13.0",
-        "raw-body": "2.5.2",
-        "type-is": "~1.6.18",
-        "unpipe": "1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8",
-        "npm": "1.2.8000 || >= 1.4.16"
-      }
-    },
-    "node_modules/body-parser/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/body-parser/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
-    },
-    "node_modules/bonjour-service": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.3.0.tgz",
-      "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "multicast-dns": "^7.2.5"
-      }
-    },
-    "node_modules/boolbase": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
-      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
-      "dev": true
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
-      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
-      "dev": true,
-      "dependencies": {
-        "fill-range": "^7.1.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/browserslist": {
-      "version": "4.25.0",
-      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.0.tgz",
-      "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "caniuse-lite": "^1.0.30001718",
-        "electron-to-chromium": "^1.5.160",
-        "node-releases": "^2.0.19",
-        "update-browserslist-db": "^1.1.3"
-      },
-      "bin": {
-        "browserslist": "cli.js"
-      },
-      "engines": {
-        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-      }
-    },
-    "node_modules/buffer": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",
-      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "base64-js": "^1.3.1",
-        "ieee754": "^1.1.13"
-      }
-    },
-    "node_modules/buffer-from": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "dev": true
-    },
-    "node_modules/bytes": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
-      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz",
-      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
-      "dev": true,
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.0",
-        "es-define-property": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "set-function-length": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/call-bind-apply-helpers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
-      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
-      "dev": true,
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/call-bound": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz",
-      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "get-intrinsic": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/camel-case": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz",
-      "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
-      "dev": true,
-      "dependencies": {
-        "pascal-case": "^3.1.2",
-        "tslib": "^2.0.3"
-      }
-    },
-    "node_modules/camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/caniuse-api": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz",
-      "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.0.0",
-        "caniuse-lite": "^1.0.0",
-        "lodash.memoize": "^4.1.2",
-        "lodash.uniq": "^4.5.0"
-      }
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001720",
-      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz",
-      "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ]
-    },
-    "node_modules/case-sensitive-paths-webpack-plugin": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
-      "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/chalk": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz",
-      "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/chokidar": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
-      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
-      "dev": true,
-      "dependencies": {
-        "anymatch": "~3.1.2",
-        "braces": "~3.0.2",
-        "glob-parent": "~5.1.2",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.6.0"
-      },
-      "engines": {
-        "node": ">= 8.10.0"
-      },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/chokidar/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/chrome-trace-event": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
-      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0"
-      }
-    },
-    "node_modules/clean-css": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz",
-      "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
-      "dev": true,
-      "dependencies": {
-        "source-map": "~0.6.0"
-      },
-      "engines": {
-        "node": ">= 10.0"
-      }
-    },
-    "node_modules/cli-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz",
-      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-      "dev": true,
-      "dependencies": {
-        "restore-cursor": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/cli-highlight": {
-      "version": "2.1.11",
-      "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz",
-      "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.0.0",
-        "highlight.js": "^10.7.1",
-        "mz": "^2.4.0",
-        "parse5": "^5.1.1",
-        "parse5-htmlparser2-tree-adapter": "^6.0.0",
-        "yargs": "^16.0.0"
-      },
-      "bin": {
-        "highlight": "bin/highlight"
-      },
-      "engines": {
-        "node": ">=8.0.0",
-        "npm": ">=5.0.0"
-      }
-    },
-    "node_modules/cli-highlight/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/cli-spinners": {
-      "version": "2.9.2",
-      "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz",
-      "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/clipboardy": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz",
-      "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
-      "dev": true,
-      "dependencies": {
-        "arch": "^2.1.1",
-        "execa": "^1.0.0",
-        "is-wsl": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/cliui": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz",
-      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0",
-        "wrap-ansi": "^7.0.0"
-      }
-    },
-    "node_modules/clone": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz",
-      "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/clone-deep": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz",
-      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
-      "dev": true,
-      "dependencies": {
-        "is-plain-object": "^2.0.4",
-        "kind-of": "^6.0.2",
-        "shallow-clone": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "node_modules/colord": {
-      "version": "2.9.3",
-      "resolved": "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz",
-      "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
-      "dev": true
-    },
-    "node_modules/colorette": {
-      "version": "2.0.20",
-      "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz",
-      "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
-      "dev": true
-    },
-    "node_modules/commander": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz",
-      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
-      "dev": true,
-      "engines": {
-        "node": ">= 12"
-      }
-    },
-    "node_modules/commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
-      "dev": true
-    },
-    "node_modules/compressible": {
-      "version": "2.0.18",
-      "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz",
-      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
-      "dev": true,
-      "dependencies": {
-        "mime-db": ">= 1.43.0 < 2"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/compression": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmmirror.com/compression/-/compression-1.8.0.tgz",
-      "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==",
-      "dev": true,
-      "dependencies": {
-        "bytes": "3.1.2",
-        "compressible": "~2.0.18",
-        "debug": "2.6.9",
-        "negotiator": "~0.6.4",
-        "on-headers": "~1.0.2",
-        "safe-buffer": "5.2.1",
-        "vary": "~1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/compression/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/compression/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-      "dev": true
-    },
-    "node_modules/connect-history-api-fallback": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
-      "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/consolidate": {
-      "version": "0.15.1",
-      "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz",
-      "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
-      "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog",
-      "dev": true,
-      "dependencies": {
-        "bluebird": "^3.1.1"
-      },
-      "engines": {
-        "node": ">= 0.10.0"
-      }
-    },
-    "node_modules/content-disposition": {
-      "version": "0.5.4",
-      "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
-      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "5.2.1"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/content-type": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
-      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/convert-source-map": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
-      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
-      "dev": true
-    },
-    "node_modules/cookie": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz",
-      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/cookie-signature": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
-      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
-      "dev": true
-    },
-    "node_modules/copy-webpack-plugin": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz",
-      "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==",
-      "dev": true,
-      "dependencies": {
-        "fast-glob": "^3.2.7",
-        "glob-parent": "^6.0.1",
-        "globby": "^11.0.3",
-        "normalize-path": "^3.0.0",
-        "schema-utils": "^3.1.1",
-        "serialize-javascript": "^6.0.0"
-      },
-      "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^5.1.0"
-      }
-    },
-    "node_modules/copy-webpack-plugin/node_modules/schema-utils": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
-      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.8",
-        "ajv": "^6.12.5",
-        "ajv-keywords": "^3.5.2"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/core-js": {
-      "version": "3.42.0",
-      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.42.0.tgz",
-      "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==",
-      "hasInstallScript": true,
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/core-js"
-      }
-    },
-    "node_modules/core-js-compat": {
-      "version": "3.42.0",
-      "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.42.0.tgz",
-      "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.24.4"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/core-js"
-      }
-    },
-    "node_modules/core-util-is": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
-      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-      "dev": true
-    },
-    "node_modules/cosmiconfig": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
-      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
-      "dev": true,
-      "dependencies": {
-        "@types/parse-json": "^4.0.0",
-        "import-fresh": "^3.2.1",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0",
-        "yaml": "^1.10.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/cosmiconfig/node_modules/yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/cross-spawn": {
-      "version": "6.0.6",
-      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.6.tgz",
-      "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
-      "dev": true,
-      "dependencies": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
-      },
-      "engines": {
-        "node": ">=4.8"
-      }
-    },
-    "node_modules/cross-spawn/node_modules/semver": {
-      "version": "5.7.2",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",
-      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
-    "node_modules/css-declaration-sorter": {
-      "version": "6.4.1",
-      "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
-      "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      },
-      "peerDependencies": {
-        "postcss": "^8.0.9"
-      }
-    },
-    "node_modules/css-loader": {
-      "version": "6.11.0",
-      "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz",
-      "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",
-      "dev": true,
-      "dependencies": {
-        "icss-utils": "^5.1.0",
-        "postcss": "^8.4.33",
-        "postcss-modules-extract-imports": "^3.1.0",
-        "postcss-modules-local-by-default": "^4.0.5",
-        "postcss-modules-scope": "^3.2.0",
-        "postcss-modules-values": "^4.0.0",
-        "postcss-value-parser": "^4.2.0",
-        "semver": "^7.5.4"
-      },
-      "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "@rspack/core": "0.x || 1.x",
-        "webpack": "^5.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@rspack/core": {
-          "optional": true
-        },
-        "webpack": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/css-loader/node_modules/semver": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",
-      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/css-minimizer-webpack-plugin": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz",
-      "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==",
-      "dev": true,
-      "dependencies": {
-        "cssnano": "^5.0.6",
-        "jest-worker": "^27.0.2",
-        "postcss": "^8.3.5",
-        "schema-utils": "^4.0.0",
-        "serialize-javascript": "^6.0.0",
-        "source-map": "^0.6.1"
-      },
-      "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^5.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@parcel/css": {
-          "optional": true
-        },
-        "clean-css": {
-          "optional": true
-        },
-        "csso": {
-          "optional": true
-        },
-        "esbuild": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3"
-      },
-      "peerDependencies": {
-        "ajv": "^8.8.2"
-      }
-    },
-    "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",
-      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.9",
-        "ajv": "^8.9.0",
-        "ajv-formats": "^2.1.1",
-        "ajv-keywords": "^5.1.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/css-select": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz",
-      "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
-      "dev": true,
-      "dependencies": {
-        "boolbase": "^1.0.0",
-        "css-what": "^6.0.1",
-        "domhandler": "^4.3.1",
-        "domutils": "^2.8.0",
-        "nth-check": "^2.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/fb55"
-      }
-    },
-    "node_modules/css-tree": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz",
-      "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
-      "dev": true,
-      "dependencies": {
-        "mdn-data": "2.0.14",
-        "source-map": "^0.6.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/css-what": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz",
-      "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/fb55"
-      }
-    },
-    "node_modules/cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-      "dev": true,
-      "bin": {
-        "cssesc": "bin/cssesc"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/cssnano": {
-      "version": "5.1.15",
-      "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz",
-      "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-preset-default": "^5.2.14",
-        "lilconfig": "^2.0.3",
-        "yaml": "^1.10.2"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/cssnano"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/cssnano-preset-default": {
-      "version": "5.2.14",
-      "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz",
-      "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==",
-      "dev": true,
-      "dependencies": {
-        "css-declaration-sorter": "^6.3.1",
-        "cssnano-utils": "^3.1.0",
-        "postcss-calc": "^8.2.3",
-        "postcss-colormin": "^5.3.1",
-        "postcss-convert-values": "^5.1.3",
-        "postcss-discard-comments": "^5.1.2",
-        "postcss-discard-duplicates": "^5.1.0",
-        "postcss-discard-empty": "^5.1.1",
-        "postcss-discard-overridden": "^5.1.0",
-        "postcss-merge-longhand": "^5.1.7",
-        "postcss-merge-rules": "^5.1.4",
-        "postcss-minify-font-values": "^5.1.0",
-        "postcss-minify-gradients": "^5.1.1",
-        "postcss-minify-params": "^5.1.4",
-        "postcss-minify-selectors": "^5.2.1",
-        "postcss-normalize-charset": "^5.1.0",
-        "postcss-normalize-display-values": "^5.1.0",
-        "postcss-normalize-positions": "^5.1.1",
-        "postcss-normalize-repeat-style": "^5.1.1",
-        "postcss-normalize-string": "^5.1.0",
-        "postcss-normalize-timing-functions": "^5.1.0",
-        "postcss-normalize-unicode": "^5.1.1",
-        "postcss-normalize-url": "^5.1.0",
-        "postcss-normalize-whitespace": "^5.1.1",
-        "postcss-ordered-values": "^5.1.3",
-        "postcss-reduce-initial": "^5.1.2",
-        "postcss-reduce-transforms": "^5.1.0",
-        "postcss-svgo": "^5.1.0",
-        "postcss-unique-selectors": "^5.1.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/cssnano-utils": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
-      "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/cssnano/node_modules/yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/csso": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz",
-      "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
-      "dev": true,
-      "dependencies": {
-        "css-tree": "^1.1.2"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/csstype": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
-      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
-    },
-    "node_modules/dayjs": {
-      "version": "1.11.13",
-      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
-      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
-    },
-    "node_modules/debounce": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz",
-      "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
-      "dev": true
-    },
-    "node_modules/debug": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
-      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.3"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/deepmerge": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz",
-      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/default-gateway": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz",
-      "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
-      "dev": true,
-      "dependencies": {
-        "execa": "^5.0.0"
-      },
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/default-gateway/node_modules/cross-spawn": {
-      "version": "7.0.6",
-      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
-      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/default-gateway/node_modules/execa": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz",
-      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
-      "dev": true,
-      "dependencies": {
-        "cross-spawn": "^7.0.3",
-        "get-stream": "^6.0.0",
-        "human-signals": "^2.1.0",
-        "is-stream": "^2.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^4.0.1",
-        "onetime": "^5.1.2",
-        "signal-exit": "^3.0.3",
-        "strip-final-newline": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/execa?sponsor=1"
-      }
-    },
-    "node_modules/default-gateway/node_modules/get-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz",
-      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/default-gateway/node_modules/is-stream": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz",
-      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/default-gateway/node_modules/npm-run-path": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",
-      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/default-gateway/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/default-gateway/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/default-gateway/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/default-gateway/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/defaults": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz",
-      "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
-      "dev": true,
-      "dependencies": {
-        "clone": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/define-data-property": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz",
-      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
-      "dev": true,
-      "dependencies": {
-        "es-define-property": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/define-lazy-prop": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
-      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/define-properties": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz",
-      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
-      "dev": true,
-      "dependencies": {
-        "define-data-property": "^1.0.1",
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/depd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
-      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/destroy": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
-      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8",
-        "npm": "1.2.8000 || >= 1.4.16"
-      }
-    },
-    "node_modules/detect-libc": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz",
-      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
-      "dev": true,
-      "optional": true,
-      "bin": {
-        "detect-libc": "bin/detect-libc.js"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/detect-node": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz",
-      "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
-      "dev": true
-    },
-    "node_modules/dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "dependencies": {
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/dns-packet": {
-      "version": "5.6.1",
-      "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz",
-      "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
-      "dev": true,
-      "dependencies": {
-        "@leichtgewicht/ip-codec": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/dom-converter": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz",
-      "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
-      "dev": true,
-      "dependencies": {
-        "utila": "~0.4"
-      }
-    },
-    "node_modules/dom-serializer": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz",
-      "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
-      "dev": true,
-      "dependencies": {
-        "domelementtype": "^2.0.1",
-        "domhandler": "^4.2.0",
-        "entities": "^2.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
-      }
-    },
-    "node_modules/dom-serializer/node_modules/entities": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",
-      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
-    "node_modules/domelementtype": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz",
-      "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/fb55"
-        }
-      ]
-    },
-    "node_modules/domhandler": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz",
-      "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
-      "dev": true,
-      "dependencies": {
-        "domelementtype": "^2.2.0"
-      },
-      "engines": {
-        "node": ">= 4"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/domhandler?sponsor=1"
-      }
-    },
-    "node_modules/domutils": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz",
-      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
-      "dev": true,
-      "dependencies": {
-        "dom-serializer": "^1.0.1",
-        "domelementtype": "^2.2.0",
-        "domhandler": "^4.2.0"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/domutils?sponsor=1"
-      }
-    },
-    "node_modules/dot-case": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz",
-      "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
-      "dev": true,
-      "dependencies": {
-        "no-case": "^3.0.4",
-        "tslib": "^2.0.3"
-      }
-    },
-    "node_modules/dotenv": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz",
-      "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/dotenv-expand": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
-      "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
-      "dev": true
-    },
-    "node_modules/dunder-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
-      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
-      "dev": true,
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/duplexer": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz",
-      "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
-      "dev": true
-    },
-    "node_modules/easy-stack": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz",
-      "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
-      "dev": true
-    },
-    "node_modules/electron-to-chromium": {
-      "version": "1.5.161",
-      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz",
-      "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==",
-      "dev": true
-    },
-    "node_modules/element-plus": {
-      "version": "2.9.11",
-      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.11.tgz",
-      "integrity": "sha512-x4L/6YC8de4JtuE3vpaEugJdQIeHQaHtIYKyk67IeF6dTIiVax45aX4nWOygnh+xX+0gTvL6xO+9BZhPA3G82w==",
-      "dependencies": {
-        "@ctrl/tinycolor": "^3.4.1",
-        "@element-plus/icons-vue": "^2.3.1",
-        "@floating-ui/dom": "^1.0.1",
-        "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
-        "@types/lodash": "^4.14.182",
-        "@types/lodash-es": "^4.17.6",
-        "@vueuse/core": "^9.1.0",
-        "async-validator": "^4.2.5",
-        "dayjs": "^1.11.13",
-        "escape-html": "^1.0.3",
-        "lodash": "^4.17.21",
-        "lodash-es": "^4.17.21",
-        "lodash-unified": "^1.0.2",
-        "memoize-one": "^6.0.0",
-        "normalize-wheel-es": "^1.2.0"
-      },
-      "peerDependencies": {
-        "vue": "^3.2.0"
-      }
-    },
-    "node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
-    },
-    "node_modules/emojis-list": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz",
-      "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/encodeurl": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz",
-      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/end-of-stream": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz",
-      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.4.0"
-      }
-    },
-    "node_modules/enhanced-resolve": {
-      "version": "5.18.1",
-      "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
-      "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.2.4",
-        "tapable": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
-    "node_modules/error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dev": true,
-      "dependencies": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "node_modules/error-stack-parser": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
-      "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
-      "dev": true,
-      "dependencies": {
-        "stackframe": "^1.3.4"
-      }
-    },
-    "node_modules/es-define-property": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
-      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-errors": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
-      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-module-lexer": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
-      "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
-      "dev": true
-    },
-    "node_modules/es-object-atoms": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
-      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
-      "dev": true,
-      "dependencies": {
-        "es-errors": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/esbuild": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.5.tgz",
-      "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
-      "dev": true,
-      "hasInstallScript": true,
-      "bin": {
-        "esbuild": "bin/esbuild"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.25.5",
-        "@esbuild/android-arm": "0.25.5",
-        "@esbuild/android-arm64": "0.25.5",
-        "@esbuild/android-x64": "0.25.5",
-        "@esbuild/darwin-arm64": "0.25.5",
-        "@esbuild/darwin-x64": "0.25.5",
-        "@esbuild/freebsd-arm64": "0.25.5",
-        "@esbuild/freebsd-x64": "0.25.5",
-        "@esbuild/linux-arm": "0.25.5",
-        "@esbuild/linux-arm64": "0.25.5",
-        "@esbuild/linux-ia32": "0.25.5",
-        "@esbuild/linux-loong64": "0.25.5",
-        "@esbuild/linux-mips64el": "0.25.5",
-        "@esbuild/linux-ppc64": "0.25.5",
-        "@esbuild/linux-riscv64": "0.25.5",
-        "@esbuild/linux-s390x": "0.25.5",
-        "@esbuild/linux-x64": "0.25.5",
-        "@esbuild/netbsd-arm64": "0.25.5",
-        "@esbuild/netbsd-x64": "0.25.5",
-        "@esbuild/openbsd-arm64": "0.25.5",
-        "@esbuild/openbsd-x64": "0.25.5",
-        "@esbuild/sunos-x64": "0.25.5",
-        "@esbuild/win32-arm64": "0.25.5",
-        "@esbuild/win32-ia32": "0.25.5",
-        "@esbuild/win32-x64": "0.25.5"
-      }
-    },
-    "node_modules/escalade": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
-      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-      "dev": true,
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esrecurse/node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/etag": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
-      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/event-pubsub": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz",
-      "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/eventemitter3": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz",
-      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
-      "dev": true
-    },
-    "node_modules/events": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
-      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.x"
-      }
-    },
-    "node_modules/execa": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz",
-      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-      "dev": true,
-      "dependencies": {
-        "cross-spawn": "^6.0.0",
-        "get-stream": "^4.0.0",
-        "is-stream": "^1.1.0",
-        "npm-run-path": "^2.0.0",
-        "p-finally": "^1.0.0",
-        "signal-exit": "^3.0.0",
-        "strip-eof": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/express": {
-      "version": "4.21.2",
-      "resolved": "https://registry.npmmirror.com/express/-/express-4.21.2.tgz",
-      "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
-      "dev": true,
-      "dependencies": {
-        "accepts": "~1.3.8",
-        "array-flatten": "1.1.1",
-        "body-parser": "1.20.3",
-        "content-disposition": "0.5.4",
-        "content-type": "~1.0.4",
-        "cookie": "0.7.1",
-        "cookie-signature": "1.0.6",
-        "debug": "2.6.9",
-        "depd": "2.0.0",
-        "encodeurl": "~2.0.0",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "finalhandler": "1.3.1",
-        "fresh": "0.5.2",
-        "http-errors": "2.0.0",
-        "merge-descriptors": "1.0.3",
-        "methods": "~1.1.2",
-        "on-finished": "2.4.1",
-        "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.12",
-        "proxy-addr": "~2.0.7",
-        "qs": "6.13.0",
-        "range-parser": "~1.2.1",
-        "safe-buffer": "5.2.1",
-        "send": "0.19.0",
-        "serve-static": "1.16.2",
-        "setprototypeof": "1.2.0",
-        "statuses": "2.0.1",
-        "type-is": "~1.6.18",
-        "utils-merge": "1.0.1",
-        "vary": "~1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.10.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/express"
-      }
-    },
-    "node_modules/express/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/express/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true
-    },
-    "node_modules/fast-glob": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
-      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.8"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fast-glob/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true
-    },
-    "node_modules/fast-uri": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.6.tgz",
-      "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/fastify"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/fastify"
-        }
-      ]
-    },
-    "node_modules/fastq": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz",
-      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
-      "dev": true,
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/faye-websocket": {
-      "version": "0.11.4",
-      "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz",
-      "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
-      "dev": true,
-      "dependencies": {
-        "websocket-driver": ">=0.5.1"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/figures": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz",
-      "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
-      "dev": true,
-      "dependencies": {
-        "escape-string-regexp": "^1.0.5"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
-      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
-      "dev": true,
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/finalhandler": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz",
-      "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
-      "dev": true,
-      "dependencies": {
-        "debug": "2.6.9",
-        "encodeurl": "~2.0.0",
-        "escape-html": "~1.0.3",
-        "on-finished": "2.4.1",
-        "parseurl": "~1.3.3",
-        "statuses": "2.0.1",
-        "unpipe": "~1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/finalhandler/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/finalhandler/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
-    },
-    "node_modules/find-cache-dir": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
-      "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
-      "dev": true,
-      "dependencies": {
-        "commondir": "^1.0.1",
-        "make-dir": "^3.0.2",
-        "pkg-dir": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
-      }
-    },
-    "node_modules/find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/flat": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz",
-      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
-      "dev": true,
-      "bin": {
-        "flat": "cli.js"
-      }
-    },
-    "node_modules/follow-redirects": {
-      "version": "1.15.9",
-      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
-      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://github.com/sponsors/RubenVerborgh"
-        }
-      ],
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependenciesMeta": {
-        "debug": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/forwarded": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
-      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/fraction.js": {
-      "version": "4.3.7",
-      "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz",
-      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "type": "patreon",
-        "url": "https://github.com/sponsors/rawify"
-      }
-    },
-    "node_modules/fresh": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
-      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/fs-extra": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz",
-      "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
-      "dev": true,
-      "dependencies": {
-        "at-least-node": "^1.0.0",
-        "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/fs-monkey": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.6.tgz",
-      "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==",
-      "dev": true
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-      "dev": true
-    },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
-      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/gensync": {
-      "version": "1.0.0-beta.2",
-      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
-      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/get-caller-file": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
-      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-      "dev": true,
-      "engines": {
-        "node": "6.* || 8.* || >= 10.*"
-      }
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
-      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "es-define-property": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "function-bind": "^1.1.2",
-        "get-proto": "^1.0.1",
-        "gopd": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "hasown": "^2.0.2",
-        "math-intrinsics": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
-      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
-      "dev": true,
-      "dependencies": {
-        "dunder-proto": "^1.0.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/get-stream": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz",
-      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-      "dev": true,
-      "dependencies": {
-        "pump": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.1.1",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/glob-to-regexp": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-      "dev": true
-    },
-    "node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/gopd": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
-      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/graceful-fs": {
-      "version": "4.2.11",
-      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
-      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-      "dev": true
-    },
-    "node_modules/gzip-size": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz",
-      "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
-      "dev": true,
-      "dependencies": {
-        "duplexer": "^0.1.2"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/handle-thing": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz",
-      "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
-      "dev": true
-    },
-    "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/has-property-descriptors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
-      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
-      "dev": true,
-      "dependencies": {
-        "es-define-property": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
-      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/hash-sum": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
-      "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
-      "dev": true
-    },
-    "node_modules/hasown": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
-      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/he": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
-      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
-      "dev": true,
-      "bin": {
-        "he": "bin/he"
-      }
-    },
-    "node_modules/highlight.js": {
-      "version": "10.7.3",
-      "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz",
-      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
-      "dev": true,
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/hosted-git-info": {
-      "version": "2.8.9",
-      "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-      "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-      "dev": true
-    },
-    "node_modules/hpack.js": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz",
-      "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.1",
-        "obuf": "^1.0.0",
-        "readable-stream": "^2.0.1",
-        "wbuf": "^1.1.0"
-      }
-    },
-    "node_modules/hpack.js/node_modules/readable-stream": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
-      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
-      "dev": true,
-      "dependencies": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "node_modules/hpack.js/node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-      "dev": true
-    },
-    "node_modules/hpack.js/node_modules/string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "node_modules/html-entities": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.6.0.tgz",
-      "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/mdevils"
-        },
-        {
-          "type": "patreon",
-          "url": "https://patreon.com/mdevils"
-        }
-      ]
-    },
-    "node_modules/html-escaper": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz",
-      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
-      "dev": true
-    },
-    "node_modules/html-minifier-terser": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
-      "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==",
-      "dev": true,
-      "dependencies": {
-        "camel-case": "^4.1.2",
-        "clean-css": "^5.2.2",
-        "commander": "^8.3.0",
-        "he": "^1.2.0",
-        "param-case": "^3.0.4",
-        "relateurl": "^0.2.7",
-        "terser": "^5.10.0"
-      },
-      "bin": {
-        "html-minifier-terser": "cli.js"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/html-tags": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz",
-      "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/html-webpack-plugin": {
-      "version": "5.6.3",
-      "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz",
-      "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==",
-      "dev": true,
-      "dependencies": {
-        "@types/html-minifier-terser": "^6.0.0",
-        "html-minifier-terser": "^6.0.2",
-        "lodash": "^4.17.21",
-        "pretty-error": "^4.0.0",
-        "tapable": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/html-webpack-plugin"
-      },
-      "peerDependencies": {
-        "@rspack/core": "0.x || 1.x",
-        "webpack": "^5.20.0"
-      },
-      "peerDependenciesMeta": {
-        "@rspack/core": {
-          "optional": true
-        },
-        "webpack": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/htmlparser2": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz",
-      "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
-      "dev": true,
-      "funding": [
-        "https://github.com/fb55/htmlparser2?sponsor=1",
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/fb55"
-        }
-      ],
-      "dependencies": {
-        "domelementtype": "^2.0.1",
-        "domhandler": "^4.0.0",
-        "domutils": "^2.5.2",
-        "entities": "^2.0.0"
-      }
-    },
-    "node_modules/htmlparser2/node_modules/entities": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",
-      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
-    "node_modules/http-deceiver": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz",
-      "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
-      "dev": true
-    },
-    "node_modules/http-errors": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
-      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
-      "dev": true,
-      "dependencies": {
-        "depd": "2.0.0",
-        "inherits": "2.0.4",
-        "setprototypeof": "1.2.0",
-        "statuses": "2.0.1",
-        "toidentifier": "1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/http-parser-js": {
-      "version": "0.5.10",
-      "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.10.tgz",
-      "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==",
-      "dev": true
-    },
-    "node_modules/http-proxy": {
-      "version": "1.18.1",
-      "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz",
-      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
-      "dev": true,
-      "dependencies": {
-        "eventemitter3": "^4.0.0",
-        "follow-redirects": "^1.0.0",
-        "requires-port": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/http-proxy-middleware": {
-      "version": "2.0.9",
-      "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",
-      "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==",
-      "dev": true,
-      "dependencies": {
-        "@types/http-proxy": "^1.17.8",
-        "http-proxy": "^1.18.1",
-        "is-glob": "^4.0.1",
-        "is-plain-obj": "^3.0.0",
-        "micromatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "peerDependencies": {
-        "@types/express": "^4.17.13"
-      },
-      "peerDependenciesMeta": {
-        "@types/express": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/human-signals": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",
-      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.17.0"
-      }
-    },
-    "node_modules/iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/icss-utils": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz",
-      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >= 14"
-      },
-      "peerDependencies": {
-        "postcss": "^8.1.0"
-      }
-    },
-    "node_modules/ieee754": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
-      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/ignore": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz",
-      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/immutable": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.2.tgz",
-      "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==",
-      "dev": true
-    },
-    "node_modules/import-fresh": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz",
-      "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
-      "dev": true,
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
-    },
-    "node_modules/ipaddr.js": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
-      "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
-      "dev": true
-    },
-    "node_modules/is-binary-path": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
-      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-      "dev": true,
-      "dependencies": {
-        "binary-extensions": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.16.1",
-      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz",
-      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
-      "dev": true,
-      "dependencies": {
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-docker": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",
-      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
-      "dev": true,
-      "bin": {
-        "is-docker": "cli.js"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-file-esm": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz",
-      "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==",
-      "dev": true,
-      "dependencies": {
-        "read-pkg-up": "^7.0.1"
-      }
-    },
-    "node_modules/is-fullwidth-code-point": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-interactive": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz",
-      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-plain-obj": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
-      "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz",
-      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-      "dev": true,
-      "dependencies": {
-        "isobject": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-stream": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-unicode-supported": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-wsl": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",
-      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
-      "dev": true,
-      "dependencies": {
-        "is-docker": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-      "dev": true
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true
-    },
-    "node_modules/isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz",
-      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/javascript-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
-      "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
-      "dev": true
-    },
-    "node_modules/jest-worker": {
-      "version": "27.5.1",
-      "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
-      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      }
-    },
-    "node_modules/jest-worker/node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
-      }
-    },
-    "node_modules/joi": {
-      "version": "17.13.3",
-      "resolved": "https://registry.npmmirror.com/joi/-/joi-17.13.3.tgz",
-      "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
-      "dev": true,
-      "dependencies": {
-        "@hapi/hoek": "^9.3.0",
-        "@hapi/topo": "^5.1.0",
-        "@sideway/address": "^4.1.5",
-        "@sideway/formula": "^3.0.1",
-        "@sideway/pinpoint": "^2.0.0"
-      }
-    },
-    "node_modules/js-message": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",
-      "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6.0"
-      }
-    },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true
-    },
-    "node_modules/jsesc": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",
-      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-      "dev": true
-    },
-    "node_modules/json-parse-even-better-errors": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-      "dev": true
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
-    },
-    "node_modules/json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-      "dev": true,
-      "bin": {
-        "json5": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
-      "dev": true,
-      "dependencies": {
-        "universalify": "^2.0.0"
-      },
-      "optionalDependencies": {
-        "graceful-fs": "^4.1.6"
-      }
-    },
-    "node_modules/kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz",
-      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/klona": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
-      "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/launch-editor": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.10.0.tgz",
-      "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==",
-      "dev": true,
-      "dependencies": {
-        "picocolors": "^1.0.0",
-        "shell-quote": "^1.8.1"
-      }
-    },
-    "node_modules/launch-editor-middleware": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.10.0.tgz",
-      "integrity": "sha512-RzZu7MeVlE3p1H6Sadc2BhuDGAj7bkeDCBpNq/zSENP4ohJGhso00k5+iYaRwKshIpiOAhMmimce+5D389xmSg==",
-      "dev": true,
-      "dependencies": {
-        "launch-editor": "^2.10.0"
-      }
-    },
-    "node_modules/lilconfig": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
-      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/lines-and-columns": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
-      "dev": true
-    },
-    "node_modules/loader-runner": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",
-      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.11.5"
-      }
-    },
-    "node_modules/loader-utils": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz",
-      "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-      "dev": true,
-      "dependencies": {
-        "big.js": "^5.2.2",
-        "emojis-list": "^3.0.0",
-        "json5": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/loader-utils/node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
-    },
-    "node_modules/lodash-es": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
-      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
-    },
-    "node_modules/lodash-unified": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz",
-      "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
-      "peerDependencies": {
-        "@types/lodash-es": "*",
-        "lodash": "*",
-        "lodash-es": "*"
-      }
-    },
-    "node_modules/lodash.debounce": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
-      "dev": true
-    },
-    "node_modules/lodash.defaultsdeep": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
-      "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
-      "dev": true
-    },
-    "node_modules/lodash.kebabcase": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
-      "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
-      "dev": true
-    },
-    "node_modules/lodash.mapvalues": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
-      "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==",
-      "dev": true
-    },
-    "node_modules/lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
-      "dev": true
-    },
-    "node_modules/lodash.uniq": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-      "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
-      "dev": true
-    },
-    "node_modules/log-symbols": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz",
-      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.1.0",
-        "is-unicode-supported": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/log-symbols/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/log-update": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz",
-      "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==",
-      "dev": true,
-      "dependencies": {
-        "ansi-escapes": "^3.0.0",
-        "cli-cursor": "^2.0.0",
-        "wrap-ansi": "^3.0.1"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/ansi-regex": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz",
-      "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/cli-cursor": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz",
-      "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
-      "dev": true,
-      "dependencies": {
-        "restore-cursor": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/is-fullwidth-code-point": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/mimic-fn": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz",
-      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/onetime": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz",
-      "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
-      "dev": true,
-      "dependencies": {
-        "mimic-fn": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/restore-cursor": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz",
-      "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
-      "dev": true,
-      "dependencies": {
-        "onetime": "^2.0.0",
-        "signal-exit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz",
-      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
-      "dev": true,
-      "dependencies": {
-        "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/strip-ansi": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz",
-      "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/log-update/node_modules/wrap-ansi": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
-      "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^2.1.1",
-        "strip-ansi": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/lower-case": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz",
-      "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^2.0.3"
-      }
-    },
-    "node_modules/lru-cache": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
-      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^3.0.2"
-      }
-    },
-    "node_modules/magic-string": {
-      "version": "0.30.17",
-      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
-      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.0"
-      }
-    },
-    "node_modules/make-dir": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz",
-      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-      "dev": true,
-      "dependencies": {
-        "semver": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/math-intrinsics": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
-      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/mdn-data": {
-      "version": "2.0.14",
-      "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz",
-      "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
-      "dev": true
-    },
-    "node_modules/media-typer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
-      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/memfs": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz",
-      "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
-      "dev": true,
-      "dependencies": {
-        "fs-monkey": "^1.0.4"
-      },
-      "engines": {
-        "node": ">= 4.0.0"
-      }
-    },
-    "node_modules/memoize-one": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
-      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
-    },
-    "node_modules/merge-descriptors": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
-      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/merge-source-map": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz",
-      "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
-      "dev": true,
-      "dependencies": {
-        "source-map": "^0.6.1"
-      }
-    },
-    "node_modules/merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "dev": true
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/methods": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
-      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
-      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
-      "dev": true,
-      "dependencies": {
-        "braces": "^3.0.3",
-        "picomatch": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
-      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
-      "dev": true,
-      "bin": {
-        "mime": "cli.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
-      "dependencies": {
-        "mime-db": "1.52.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/mini-css-extract-plugin": {
-      "version": "2.9.2",
-      "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz",
-      "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==",
-      "dev": true,
-      "dependencies": {
-        "schema-utils": "^4.0.0",
-        "tapable": "^2.2.1"
-      },
-      "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^5.0.0"
-      }
-    },
-    "node_modules/mini-css-extract-plugin/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3"
-      },
-      "peerDependencies": {
-        "ajv": "^8.8.2"
-      }
-    },
-    "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",
-      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.9",
-        "ajv": "^8.9.0",
-        "ajv-formats": "^2.1.1",
-        "ajv-keywords": "^5.1.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/minimalistic-assert": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
-      "dev": true
-    },
-    "node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/minipass/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    },
-    "node_modules/module-alias": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz",
-      "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==",
-      "dev": true
-    },
-    "node_modules/mrmime": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz",
-      "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true
-    },
-    "node_modules/multicast-dns": {
-      "version": "7.2.5",
-      "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz",
-      "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
-      "dev": true,
-      "dependencies": {
-        "dns-packet": "^5.2.2",
-        "thunky": "^1.0.2"
-      },
-      "bin": {
-        "multicast-dns": "cli.js"
-      }
-    },
-    "node_modules/mz": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz",
-      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
-      "dev": true,
-      "dependencies": {
-        "any-promise": "^1.0.0",
-        "object-assign": "^4.0.1",
-        "thenify-all": "^1.0.0"
-      }
-    },
-    "node_modules/nanoid": {
-      "version": "3.3.11",
-      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
-      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/negotiator": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz",
-      "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/neo-async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
-      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-      "dev": true
-    },
-    "node_modules/nice-try": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-      "dev": true
-    },
-    "node_modules/no-case": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz",
-      "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
-      "dev": true,
-      "dependencies": {
-        "lower-case": "^2.0.2",
-        "tslib": "^2.0.3"
-      }
-    },
-    "node_modules/node-addon-api": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz",
-      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
-      "dev": true,
-      "optional": true
-    },
-    "node_modules/node-fetch": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
-      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
-      "dev": true,
-      "dependencies": {
-        "whatwg-url": "^5.0.0"
-      },
-      "engines": {
-        "node": "4.x || >=6.0.0"
-      },
-      "peerDependencies": {
-        "encoding": "^0.1.0"
-      },
-      "peerDependenciesMeta": {
-        "encoding": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/node-forge": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz",
-      "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 6.13.0"
-      }
-    },
-    "node_modules/node-releases": {
-      "version": "2.0.19",
-      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
-      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
-      "dev": true
-    },
-    "node_modules/normalize-package-data": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
-      "dev": true,
-      "dependencies": {
-        "hosted-git-info": "^2.1.4",
-        "resolve": "^1.10.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      }
-    },
-    "node_modules/normalize-package-data/node_modules/semver": {
-      "version": "5.7.2",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",
-      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
-    "node_modules/normalize-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
-      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/normalize-range": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz",
-      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/normalize-url": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz",
-      "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/normalize-wheel-es": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
-      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
-    },
-    "node_modules/npm-run-path": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz",
-      "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/nth-check": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
-      "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
-      "dev": true,
-      "dependencies": {
-        "boolbase": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/nth-check?sponsor=1"
-      }
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-inspect": {
-      "version": "1.13.4",
-      "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz",
-      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.7",
-      "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.7.tgz",
-      "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0",
-        "has-symbols": "^1.1.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/obuf": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz",
-      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
-      "dev": true
-    },
-    "node_modules/on-finished": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
-      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
-      "dev": true,
-      "dependencies": {
-        "ee-first": "1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/on-headers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz",
-      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
-      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "dev": true,
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/onetime": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz",
-      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
-      "dev": true,
-      "dependencies": {
-        "mimic-fn": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/open": {
-      "version": "8.4.2",
-      "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz",
-      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
-      "dev": true,
-      "dependencies": {
-        "define-lazy-prop": "^2.0.0",
-        "is-docker": "^2.1.1",
-        "is-wsl": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/opener": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz",
-      "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
-      "dev": true,
-      "bin": {
-        "opener": "bin/opener-bin.js"
-      }
-    },
-    "node_modules/ora": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz",
-      "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
-      "dev": true,
-      "dependencies": {
-        "bl": "^4.1.0",
-        "chalk": "^4.1.0",
-        "cli-cursor": "^3.1.0",
-        "cli-spinners": "^2.5.0",
-        "is-interactive": "^1.0.0",
-        "is-unicode-supported": "^0.1.0",
-        "log-symbols": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "wcwidth": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/ora/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/p-finally": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz",
-      "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/p-retry": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz",
-      "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/retry": "0.12.0",
-        "retry": "^0.13.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/param-case": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",
-      "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
-      "dev": true,
-      "dependencies": {
-        "dot-case": "^3.0.4",
-        "tslib": "^2.0.3"
-      }
-    },
-    "node_modules/parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dev": true,
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/parse-json": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz",
-      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.0.0",
-        "error-ex": "^1.3.1",
-        "json-parse-even-better-errors": "^2.3.0",
-        "lines-and-columns": "^1.1.6"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/parse5": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz",
-      "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
-      "dev": true
-    },
-    "node_modules/parse5-htmlparser2-tree-adapter": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
-      "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
-      "dev": true,
-      "dependencies": {
-        "parse5": "^6.0.1"
-      }
-    },
-    "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz",
-      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
-      "dev": true
-    },
-    "node_modules/parseurl": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
-      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/pascal-case": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz",
-      "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
-      "dev": true,
-      "dependencies": {
-        "no-case": "^3.0.4",
-        "tslib": "^2.0.3"
-      }
-    },
-    "node_modules/path-exists": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
-      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
-    },
-    "node_modules/path-to-regexp": {
-      "version": "0.1.12",
-      "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
-      "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
-      "dev": true
-    },
-    "node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/picocolors": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
-      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
-    },
-    "node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/pkg-dir": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz",
-      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/portfinder": {
-      "version": "1.0.37",
-      "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.37.tgz",
-      "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==",
-      "dev": true,
-      "dependencies": {
-        "async": "^3.2.6",
-        "debug": "^4.3.6"
-      },
-      "engines": {
-        "node": ">= 10.12"
-      }
-    },
-    "node_modules/postcss": {
-      "version": "8.5.4",
-      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.4.tgz",
-      "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "nanoid": "^3.3.11",
-        "picocolors": "^1.1.1",
-        "source-map-js": "^1.2.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      }
-    },
-    "node_modules/postcss-calc": {
-      "version": "8.2.4",
-      "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz",
-      "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
-      "dev": true,
-      "dependencies": {
-        "postcss-selector-parser": "^6.0.9",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.2"
-      }
-    },
-    "node_modules/postcss-colormin": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz",
-      "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.21.4",
-        "caniuse-api": "^3.0.0",
-        "colord": "^2.9.1",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-convert-values": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz",
-      "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.21.4",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-discard-comments": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
-      "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-discard-duplicates": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
-      "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-discard-empty": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
-      "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-discard-overridden": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
-      "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-loader": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz",
-      "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==",
-      "dev": true,
-      "dependencies": {
-        "cosmiconfig": "^7.0.0",
-        "klona": "^2.0.5",
-        "semver": "^7.3.5"
-      },
-      "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "postcss": "^7.0.0 || ^8.0.1",
-        "webpack": "^5.0.0"
-      }
-    },
-    "node_modules/postcss-loader/node_modules/semver": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",
-      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/postcss-merge-longhand": {
-      "version": "5.1.7",
-      "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz",
-      "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0",
-        "stylehacks": "^5.1.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-merge-rules": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz",
-      "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.21.4",
-        "caniuse-api": "^3.0.0",
-        "cssnano-utils": "^3.1.0",
-        "postcss-selector-parser": "^6.0.5"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-minify-font-values": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz",
-      "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-minify-gradients": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz",
-      "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==",
-      "dev": true,
-      "dependencies": {
-        "colord": "^2.9.1",
-        "cssnano-utils": "^3.1.0",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-minify-params": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz",
-      "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.21.4",
-        "cssnano-utils": "^3.1.0",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-minify-selectors": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz",
-      "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==",
-      "dev": true,
-      "dependencies": {
-        "postcss-selector-parser": "^6.0.5"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-modules-extract-imports": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
-      "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >= 14"
-      },
-      "peerDependencies": {
-        "postcss": "^8.1.0"
-      }
-    },
-    "node_modules/postcss-modules-local-by-default": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz",
-      "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==",
-      "dev": true,
-      "dependencies": {
-        "icss-utils": "^5.0.0",
-        "postcss-selector-parser": "^7.0.0",
-        "postcss-value-parser": "^4.1.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >= 14"
-      },
-      "peerDependencies": {
-        "postcss": "^8.1.0"
-      }
-    },
-    "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
-      "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
-      "dev": true,
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/postcss-modules-scope": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
-      "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",
-      "dev": true,
-      "dependencies": {
-        "postcss-selector-parser": "^7.0.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >= 14"
-      },
-      "peerDependencies": {
-        "postcss": "^8.1.0"
-      }
-    },
-    "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
-      "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
-      "dev": true,
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/postcss-modules-values": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
-      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
-      "dev": true,
-      "dependencies": {
-        "icss-utils": "^5.0.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >= 14"
-      },
-      "peerDependencies": {
-        "postcss": "^8.1.0"
-      }
-    },
-    "node_modules/postcss-normalize-charset": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
-      "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
-      "dev": true,
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-normalize-display-values": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz",
-      "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-normalize-positions": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz",
-      "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-normalize-repeat-style": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz",
-      "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-normalize-string": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz",
-      "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-normalize-timing-functions": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz",
-      "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-normalize-unicode": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz",
-      "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.21.4",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-normalize-url": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz",
-      "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==",
-      "dev": true,
-      "dependencies": {
-        "normalize-url": "^6.0.1",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-normalize-whitespace": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz",
-      "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-ordered-values": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz",
-      "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==",
-      "dev": true,
-      "dependencies": {
-        "cssnano-utils": "^3.1.0",
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-reduce-initial": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz",
-      "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.21.4",
-        "caniuse-api": "^3.0.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-reduce-transforms": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz",
-      "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-selector-parser": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
-      "dev": true,
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/postcss-svgo": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz",
-      "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==",
-      "dev": true,
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0",
-        "svgo": "^2.7.0"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-unique-selectors": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz",
-      "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==",
-      "dev": true,
-      "dependencies": {
-        "postcss-selector-parser": "^6.0.5"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/postcss-value-parser": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-      "dev": true
-    },
-    "node_modules/prettier": {
-      "version": "2.8.8",
-      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
-      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
-      "dev": true,
-      "optional": true,
-      "bin": {
-        "prettier": "bin-prettier.js"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      },
-      "funding": {
-        "url": "https://github.com/prettier/prettier?sponsor=1"
-      }
-    },
-    "node_modules/pretty-error": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz",
-      "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==",
-      "dev": true,
-      "dependencies": {
-        "lodash": "^4.17.20",
-        "renderkid": "^3.0.0"
-      }
-    },
-    "node_modules/process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-      "dev": true
-    },
-    "node_modules/progress-webpack-plugin": {
-      "version": "1.0.16",
-      "resolved": "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz",
-      "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^2.1.0",
-        "figures": "^2.0.0",
-        "log-update": "^2.3.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "peerDependencies": {
-        "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0"
-      }
-    },
-    "node_modules/progress-webpack-plugin/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/progress-webpack-plugin/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/progress-webpack-plugin/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/progress-webpack-plugin/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true
-    },
-    "node_modules/progress-webpack-plugin/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/progress-webpack-plugin/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/proxy-addr": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
-      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
-      "dev": true,
-      "dependencies": {
-        "forwarded": "0.2.0",
-        "ipaddr.js": "1.9.1"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/proxy-addr/node_modules/ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
-      "dev": true
-    },
-    "node_modules/pump": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz",
-      "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
-      "dev": true,
-      "dependencies": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
-    "node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/qs": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz",
-      "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
-      "dev": true,
-      "dependencies": {
-        "side-channel": "^1.0.6"
-      },
-      "engines": {
-        "node": ">=0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
-      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "^5.1.0"
-      }
-    },
-    "node_modules/range-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
-      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/raw-body": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz",
-      "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
-      "dev": true,
-      "dependencies": {
-        "bytes": "3.1.2",
-        "http-errors": "2.0.0",
-        "iconv-lite": "0.4.24",
-        "unpipe": "1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/read-pkg": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz",
-      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
-      "dev": true,
-      "dependencies": {
-        "@types/normalize-package-data": "^2.4.0",
-        "normalize-package-data": "^2.5.0",
-        "parse-json": "^5.0.0",
-        "type-fest": "^0.6.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/read-pkg-up": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
-      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^4.1.0",
-        "read-pkg": "^5.2.0",
-        "type-fest": "^0.8.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/read-pkg-up/node_modules/type-fest": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz",
-      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/readable-stream": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
-      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "dev": true,
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/readdirp": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
-      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-      "dev": true,
-      "dependencies": {
-        "picomatch": "^2.2.1"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      }
-    },
-    "node_modules/regenerate": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz",
-      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
-      "dev": true
-    },
-    "node_modules/regenerate-unicode-properties": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
-      "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
-      "dev": true,
-      "dependencies": {
-        "regenerate": "^1.4.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/regexpu-core": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-6.2.0.tgz",
-      "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
-      "dev": true,
-      "dependencies": {
-        "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.2.0",
-        "regjsgen": "^0.8.0",
-        "regjsparser": "^0.12.0",
-        "unicode-match-property-ecmascript": "^2.0.0",
-        "unicode-match-property-value-ecmascript": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
-      "dev": true
-    },
-    "node_modules/regjsparser": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.12.0.tgz",
-      "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
-      "dev": true,
-      "dependencies": {
-        "jsesc": "~3.0.2"
-      },
-      "bin": {
-        "regjsparser": "bin/parser"
-      }
-    },
-    "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.0.2.tgz",
-      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/relateurl": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz",
-      "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/renderkid": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz",
-      "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==",
-      "dev": true,
-      "dependencies": {
-        "css-select": "^4.1.3",
-        "dom-converter": "^0.2.0",
-        "htmlparser2": "^6.1.0",
-        "lodash": "^4.17.21",
-        "strip-ansi": "^6.0.1"
-      }
-    },
-    "node_modules/require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/require-from-string": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
-      "dev": true
-    },
-    "node_modules/resolve": {
-      "version": "1.22.10",
-      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz",
-      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.16.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/restore-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz",
-      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-      "dev": true,
-      "dependencies": {
-        "onetime": "^5.1.0",
-        "signal-exit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/retry": {
-      "version": "0.13.1",
-      "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz",
-      "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",
-      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
-      "dev": true,
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "deprecated": "Rimraf versions prior to v4 are no longer supported",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/rollup": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.41.1.tgz",
-      "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
-      "dev": true,
-      "dependencies": {
-        "@types/estree": "1.0.7"
-      },
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
-      "engines": {
-        "node": ">=18.0.0",
-        "npm": ">=8.0.0"
-      },
-      "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.41.1",
-        "@rollup/rollup-android-arm64": "4.41.1",
-        "@rollup/rollup-darwin-arm64": "4.41.1",
-        "@rollup/rollup-darwin-x64": "4.41.1",
-        "@rollup/rollup-freebsd-arm64": "4.41.1",
-        "@rollup/rollup-freebsd-x64": "4.41.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.41.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.41.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.41.1",
-        "@rollup/rollup-linux-arm64-musl": "4.41.1",
-        "@rollup/rollup-linux-loongarch64-gnu": "4.41.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.41.1",
-        "@rollup/rollup-linux-riscv64-musl": "4.41.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.41.1",
-        "@rollup/rollup-linux-x64-gnu": "4.41.1",
-        "@rollup/rollup-linux-x64-musl": "4.41.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.41.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.41.1",
-        "@rollup/rollup-win32-x64-msvc": "4.41.1",
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
-    },
-    "node_modules/sass": {
-      "version": "1.89.1",
-      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.89.1.tgz",
-      "integrity": "sha512-eMLLkl+qz7tx/0cJ9wI+w09GQ2zodTkcE/aVfywwdlRcI3EO19xGnbmJwg/JMIm+5MxVJ6outddLZ4Von4E++Q==",
-      "dev": true,
-      "dependencies": {
-        "chokidar": "^4.0.0",
-        "immutable": "^5.0.2",
-        "source-map-js": ">=0.6.2 <2.0.0"
-      },
-      "bin": {
-        "sass": "sass.js"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "optionalDependencies": {
-        "@parcel/watcher": "^2.4.1"
-      }
-    },
-    "node_modules/sass-loader": {
-      "version": "16.0.5",
-      "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-16.0.5.tgz",
-      "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==",
-      "dev": true,
-      "dependencies": {
-        "neo-async": "^2.6.2"
-      },
-      "engines": {
-        "node": ">= 18.12.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "@rspack/core": "0.x || 1.x",
-        "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
-        "sass": "^1.3.0",
-        "sass-embedded": "*",
-        "webpack": "^5.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@rspack/core": {
-          "optional": true
-        },
-        "node-sass": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        },
-        "sass-embedded": {
-          "optional": true
-        },
-        "webpack": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/sass/node_modules/chokidar": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz",
-      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
-      "dev": true,
-      "dependencies": {
-        "readdirp": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 14.16.0"
-      },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
-    "node_modules/sass/node_modules/readdirp": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz",
-      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 14.18.0"
-      },
-      "funding": {
-        "type": "individual",
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
-    "node_modules/schema-utils": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz",
-      "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.5",
-        "ajv": "^6.12.4",
-        "ajv-keywords": "^3.5.2"
-      },
-      "engines": {
-        "node": ">= 8.9.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/select-hose": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz",
-      "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
-      "dev": true
-    },
-    "node_modules/selfsigned": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.4.1.tgz",
-      "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
-      "dev": true,
-      "dependencies": {
-        "@types/node-forge": "^1.3.0",
-        "node-forge": "^1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/send": {
-      "version": "0.19.0",
-      "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz",
-      "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "2.6.9",
-        "depd": "2.0.0",
-        "destroy": "1.2.0",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "fresh": "0.5.2",
-        "http-errors": "2.0.0",
-        "mime": "1.6.0",
-        "ms": "2.1.3",
-        "on-finished": "2.4.1",
-        "range-parser": "~1.2.1",
-        "statuses": "2.0.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/send/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/send/node_modules/debug/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
-    },
-    "node_modules/send/node_modules/encodeurl": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
-      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/serialize-javascript": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
-      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
-      "dev": true,
-      "dependencies": {
-        "randombytes": "^2.1.0"
-      }
-    },
-    "node_modules/serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
-      "dev": true,
-      "dependencies": {
-        "accepts": "~1.3.4",
-        "batch": "0.6.1",
-        "debug": "2.6.9",
-        "escape-html": "~1.0.3",
-        "http-errors": "~1.6.2",
-        "mime-types": "~2.1.17",
-        "parseurl": "~1.3.2"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/serve-index/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/serve-index/node_modules/depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/serve-index/node_modules/http-errors": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz",
-      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
-      "dev": true,
-      "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.0",
-        "statuses": ">= 1.4.0 < 2"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/serve-index/node_modules/inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-      "dev": true
-    },
-    "node_modules/serve-index/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-      "dev": true
-    },
-    "node_modules/serve-index/node_modules/setprototypeof": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz",
-      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-      "dev": true
-    },
-    "node_modules/serve-index/node_modules/statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/serve-static": {
-      "version": "1.16.2",
-      "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz",
-      "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
-      "dev": true,
-      "dependencies": {
-        "encodeurl": "~2.0.0",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.3",
-        "send": "0.19.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/set-function-length": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz",
-      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
-      "dev": true,
-      "dependencies": {
-        "define-data-property": "^1.1.4",
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2",
-        "get-intrinsic": "^1.2.4",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/setprototypeof": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
-      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
-      "dev": true
-    },
-    "node_modules/shallow-clone": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz",
-      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.2"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/shell-quote": {
-      "version": "1.8.3",
-      "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.3.tgz",
-      "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz",
-      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
-      "dev": true,
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "object-inspect": "^1.13.3",
-        "side-channel-list": "^1.0.0",
-        "side-channel-map": "^1.0.1",
-        "side-channel-weakmap": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-list": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz",
-      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
-      "dev": true,
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "object-inspect": "^1.13.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz",
-      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
-      "dev": true,
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.5",
-        "object-inspect": "^1.13.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-weakmap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
-      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
-      "dev": true,
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.5",
-        "object-inspect": "^1.13.3",
-        "side-channel-map": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true
-    },
-    "node_modules/sirv": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmmirror.com/sirv/-/sirv-2.0.4.tgz",
-      "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
-      "dev": true,
-      "dependencies": {
-        "@polka/url": "^1.0.0-next.24",
-        "mrmime": "^2.0.0",
-        "totalist": "^3.0.0"
-      },
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/sockjs": {
-      "version": "0.3.24",
-      "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz",
-      "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
-      "dev": true,
-      "dependencies": {
-        "faye-websocket": "^0.11.3",
-        "uuid": "^8.3.2",
-        "websocket-driver": "^0.7.4"
-      }
-    },
-    "node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-js": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
-      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-support": {
-      "version": "0.5.21",
-      "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
-      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
-      "dev": true,
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      }
-    },
-    "node_modules/spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-      "dev": true,
-      "dependencies": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-exceptions": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
-      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
-      "dev": true
-    },
-    "node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-      "dev": true,
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-license-ids": {
-      "version": "3.0.21",
-      "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
-      "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
-      "dev": true
-    },
-    "node_modules/spdy": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz",
-      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.1.0",
-        "handle-thing": "^2.0.0",
-        "http-deceiver": "^1.2.7",
-        "select-hose": "^2.0.0",
-        "spdy-transport": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/spdy-transport": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz",
-      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.1.0",
-        "detect-node": "^2.0.4",
-        "hpack.js": "^2.1.6",
-        "obuf": "^1.1.2",
-        "readable-stream": "^3.0.6",
-        "wbuf": "^1.7.3"
-      }
-    },
-    "node_modules/ssri": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz",
-      "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
-      "dev": true,
-      "dependencies": {
-        "minipass": "^3.1.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/stable": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz",
-      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
-      "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",
-      "dev": true
-    },
-    "node_modules/stackframe": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz",
-      "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
-      "dev": true
-    },
-    "node_modules/statuses": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
-      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/string_decoder": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
-      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "~5.2.0"
-      }
-    },
-    "node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-eof": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz",
-      "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/strip-final-newline": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/stylehacks": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz",
-      "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==",
-      "dev": true,
-      "dependencies": {
-        "browserslist": "^4.21.4",
-        "postcss-selector-parser": "^6.0.4"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.15"
-      }
-    },
-    "node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/svg-tags": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz",
-      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
-      "dev": true
-    },
-    "node_modules/svgo": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz",
-      "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
-      "dev": true,
-      "dependencies": {
-        "@trysound/sax": "0.2.0",
-        "commander": "^7.2.0",
-        "css-select": "^4.1.3",
-        "css-tree": "^1.1.3",
-        "csso": "^4.2.0",
-        "picocolors": "^1.0.0",
-        "stable": "^0.1.8"
-      },
-      "bin": {
-        "svgo": "bin/svgo"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/svgo/node_modules/commander": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz",
-      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/tapable": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.2.tgz",
-      "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/terser": {
-      "version": "5.40.0",
-      "resolved": "https://registry.npmmirror.com/terser/-/terser-5.40.0.tgz",
-      "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/source-map": "^0.3.3",
-        "acorn": "^8.14.0",
-        "commander": "^2.20.0",
-        "source-map-support": "~0.5.20"
-      },
-      "bin": {
-        "terser": "bin/terser"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/terser-webpack-plugin": {
-      "version": "5.3.14",
-      "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",
-      "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jest-worker": "^27.4.5",
-        "schema-utils": "^4.3.0",
-        "serialize-javascript": "^6.0.2",
-        "terser": "^5.31.1"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^5.1.0"
-      },
-      "peerDependenciesMeta": {
-        "@swc/core": {
-          "optional": true
-        },
-        "esbuild": {
-          "optional": true
-        },
-        "uglify-js": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/terser-webpack-plugin/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3"
-      },
-      "peerDependencies": {
-        "ajv": "^8.8.2"
-      }
-    },
-    "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",
-      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.9",
-        "ajv": "^8.9.0",
-        "ajv-formats": "^2.1.1",
-        "ajv-keywords": "^5.1.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/terser/node_modules/commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true
-    },
-    "node_modules/thenify": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz",
-      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
-      "dev": true,
-      "dependencies": {
-        "any-promise": "^1.0.0"
-      }
-    },
-    "node_modules/thenify-all": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz",
-      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
-      "dev": true,
-      "dependencies": {
-        "thenify": ">= 3.1.0 < 4"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/thread-loader": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz",
-      "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==",
-      "dev": true,
-      "dependencies": {
-        "json-parse-better-errors": "^1.0.2",
-        "loader-runner": "^4.1.0",
-        "loader-utils": "^2.0.0",
-        "neo-async": "^2.6.2",
-        "schema-utils": "^3.0.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^4.27.0 || ^5.0.0"
-      }
-    },
-    "node_modules/thread-loader/node_modules/loader-utils": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
-      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-      "dev": true,
-      "dependencies": {
-        "big.js": "^5.2.2",
-        "emojis-list": "^3.0.0",
-        "json5": "^2.1.2"
-      },
-      "engines": {
-        "node": ">=8.9.0"
-      }
-    },
-    "node_modules/thread-loader/node_modules/schema-utils": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
-      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.8",
-        "ajv": "^6.12.5",
-        "ajv-keywords": "^3.5.2"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/thunky": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz",
-      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
-      "dev": true
-    },
-    "node_modules/tinyglobby": {
-      "version": "0.2.14",
-      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz",
-      "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
-      "dev": true,
-      "dependencies": {
-        "fdir": "^6.4.4",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/SuperchupuDev"
-      }
-    },
-    "node_modules/tinyglobby/node_modules/fdir": {
-      "version": "6.4.5",
-      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.5.tgz",
-      "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
-      "dev": true,
-      "peerDependencies": {
-        "picomatch": "^3 || ^4"
-      },
-      "peerDependenciesMeta": {
-        "picomatch": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/tinyglobby/node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/toidentifier": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
-      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/totalist": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",
-      "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/tr46": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-      "dev": true
-    },
-    "node_modules/tslib": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
-      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-      "dev": true
-    },
-    "node_modules/type-fest": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz",
-      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/type-is": {
-      "version": "1.6.18",
-      "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",
-      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
-      "dev": true,
-      "dependencies": {
-        "media-typer": "0.3.0",
-        "mime-types": "~2.1.24"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/undici-types": {
-      "version": "6.21.0",
-      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz",
-      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
-      "dev": true
-    },
-    "node_modules/unicode-canonical-property-names-ecmascript": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
-      "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/unicode-match-property-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
-      "dev": true,
-      "dependencies": {
-        "unicode-canonical-property-names-ecmascript": "^2.0.0",
-        "unicode-property-aliases-ecmascript": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/unicode-match-property-value-ecmascript": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
-      "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/unicode-property-aliases-ecmascript": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
-      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/universalify": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
-      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10.0.0"
-      }
-    },
-    "node_modules/unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/update-browserslist-db": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
-      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "dependencies": {
-        "escalade": "^3.2.0",
-        "picocolors": "^1.1.1"
-      },
-      "bin": {
-        "update-browserslist-db": "cli.js"
-      },
-      "peerDependencies": {
-        "browserslist": ">= 4.21.0"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "dev": true
-    },
-    "node_modules/utila": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz",
-      "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==",
-      "dev": true
-    },
-    "node_modules/utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-      "dev": true,
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
-    "node_modules/validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-      "dev": true,
-      "dependencies": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "node_modules/vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/vite": {
-      "version": "6.3.5",
-      "resolved": "https://registry.npmmirror.com/vite/-/vite-6.3.5.tgz",
-      "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
-      "dev": true,
-      "dependencies": {
-        "esbuild": "^0.25.0",
-        "fdir": "^6.4.4",
-        "picomatch": "^4.0.2",
-        "postcss": "^8.5.3",
-        "rollup": "^4.34.9",
-        "tinyglobby": "^0.2.13"
-      },
-      "bin": {
-        "vite": "bin/vite.js"
-      },
-      "engines": {
-        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/vitejs/vite?sponsor=1"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.3"
-      },
-      "peerDependencies": {
-        "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
-        "jiti": ">=1.21.0",
-        "less": "*",
-        "lightningcss": "^1.21.0",
-        "sass": "*",
-        "sass-embedded": "*",
-        "stylus": "*",
-        "sugarss": "*",
-        "terser": "^5.16.0",
-        "tsx": "^4.8.1",
-        "yaml": "^2.4.2"
-      },
-      "peerDependenciesMeta": {
-        "@types/node": {
-          "optional": true
-        },
-        "jiti": {
-          "optional": true
-        },
-        "less": {
-          "optional": true
-        },
-        "lightningcss": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        },
-        "sass-embedded": {
-          "optional": true
-        },
-        "stylus": {
-          "optional": true
-        },
-        "sugarss": {
-          "optional": true
-        },
-        "terser": {
-          "optional": true
-        },
-        "tsx": {
-          "optional": true
-        },
-        "yaml": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vite/node_modules/fdir": {
-      "version": "6.4.5",
-      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.5.tgz",
-      "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
-      "dev": true,
-      "peerDependencies": {
-        "picomatch": "^3 || ^4"
-      },
-      "peerDependenciesMeta": {
-        "picomatch": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vite/node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/vue": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.16.tgz",
-      "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==",
-      "dependencies": {
-        "@vue/compiler-dom": "3.5.16",
-        "@vue/compiler-sfc": "3.5.16",
-        "@vue/runtime-dom": "3.5.16",
-        "@vue/server-renderer": "3.5.16",
-        "@vue/shared": "3.5.16"
-      },
-      "peerDependencies": {
-        "typescript": "*"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vue-hot-reload-api": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
-      "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
-      "dev": true
-    },
-    "node_modules/vue-loader": {
-      "version": "17.4.2",
-      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.4.2.tgz",
-      "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==",
-      "dev": true,
-      "dependencies": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "watchpack": "^2.4.0"
-      },
-      "peerDependencies": {
-        "webpack": "^4.1.0 || ^5.0.0-0"
-      },
-      "peerDependenciesMeta": {
-        "@vue/compiler-sfc": {
-          "optional": true
-        },
-        "vue": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vue-loader/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/vue-router": {
-      "version": "4.5.1",
-      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz",
-      "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==",
-      "dependencies": {
-        "@vue/devtools-api": "^6.6.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/posva"
-      },
-      "peerDependencies": {
-        "vue": "^3.2.0"
-      }
-    },
-    "node_modules/vue-style-loader": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
-      "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==",
-      "dev": true,
-      "dependencies": {
-        "hash-sum": "^1.0.2",
-        "loader-utils": "^1.0.2"
-      }
-    },
-    "node_modules/vue-style-loader/node_modules/hash-sum": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
-      "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-      "dev": true
-    },
-    "node_modules/vue-template-es2015-compiler": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
-      "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
-      "dev": true
-    },
-    "node_modules/vuex": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz",
-      "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
-      "dependencies": {
-        "@vue/devtools-api": "^6.0.0-beta.11"
-      },
-      "peerDependencies": {
-        "vue": "^3.2.0"
-      }
-    },
-    "node_modules/watchpack": {
-      "version": "2.4.4",
-      "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.4.tgz",
-      "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
-      "dev": true,
-      "dependencies": {
-        "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.1.2"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/wbuf": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz",
-      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
-      "dev": true,
-      "dependencies": {
-        "minimalistic-assert": "^1.0.0"
-      }
-    },
-    "node_modules/wcwidth": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz",
-      "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
-      "dev": true,
-      "dependencies": {
-        "defaults": "^1.0.3"
-      }
-    },
-    "node_modules/webidl-conversions": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-      "dev": true
-    },
-    "node_modules/webpack": {
-      "version": "5.99.9",
-      "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.99.9.tgz",
-      "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==",
-      "dev": true,
-      "dependencies": {
-        "@types/eslint-scope": "^3.7.7",
-        "@types/estree": "^1.0.6",
-        "@types/json-schema": "^7.0.15",
-        "@webassemblyjs/ast": "^1.14.1",
-        "@webassemblyjs/wasm-edit": "^1.14.1",
-        "@webassemblyjs/wasm-parser": "^1.14.1",
-        "acorn": "^8.14.0",
-        "browserslist": "^4.24.0",
-        "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.17.1",
-        "es-module-lexer": "^1.2.1",
-        "eslint-scope": "5.1.1",
-        "events": "^3.2.0",
-        "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.2.11",
-        "json-parse-even-better-errors": "^2.3.1",
-        "loader-runner": "^4.2.0",
-        "mime-types": "^2.1.27",
-        "neo-async": "^2.6.2",
-        "schema-utils": "^4.3.2",
-        "tapable": "^2.1.1",
-        "terser-webpack-plugin": "^5.3.11",
-        "watchpack": "^2.4.1",
-        "webpack-sources": "^3.2.3"
-      },
-      "bin": {
-        "webpack": "bin/webpack.js"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependenciesMeta": {
-        "webpack-cli": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/webpack-bundle-analyzer": {
-      "version": "4.10.2",
-      "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz",
-      "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==",
-      "dev": true,
-      "dependencies": {
-        "@discoveryjs/json-ext": "0.5.7",
-        "acorn": "^8.0.4",
-        "acorn-walk": "^8.0.0",
-        "commander": "^7.2.0",
-        "debounce": "^1.2.1",
-        "escape-string-regexp": "^4.0.0",
-        "gzip-size": "^6.0.0",
-        "html-escaper": "^2.0.2",
-        "opener": "^1.5.2",
-        "picocolors": "^1.0.0",
-        "sirv": "^2.0.3",
-        "ws": "^7.3.1"
-      },
-      "bin": {
-        "webpack-bundle-analyzer": "lib/bin/analyzer.js"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      }
-    },
-    "node_modules/webpack-bundle-analyzer/node_modules/commander": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz",
-      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/webpack-chain": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz",
-      "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==",
-      "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
-      "dev": true,
-      "dependencies": {
-        "deepmerge": "^1.5.2",
-        "javascript-stringify": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/webpack-dev-middleware": {
-      "version": "5.3.4",
-      "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
-      "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
-      "dev": true,
-      "dependencies": {
-        "colorette": "^2.0.10",
-        "memfs": "^3.4.3",
-        "mime-types": "^2.1.31",
-        "range-parser": "^1.2.1",
-        "schema-utils": "^4.0.0"
-      },
-      "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^4.0.0 || ^5.0.0"
-      }
-    },
-    "node_modules/webpack-dev-middleware/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3"
-      },
-      "peerDependencies": {
-        "ajv": "^8.8.2"
-      }
-    },
-    "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/webpack-dev-middleware/node_modules/schema-utils": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",
-      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.9",
-        "ajv": "^8.9.0",
-        "ajv-formats": "^2.1.1",
-        "ajv-keywords": "^5.1.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/webpack-dev-server": {
-      "version": "4.15.2",
-      "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
-      "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
-      "dev": true,
-      "dependencies": {
-        "@types/bonjour": "^3.5.9",
-        "@types/connect-history-api-fallback": "^1.3.5",
-        "@types/express": "^4.17.13",
-        "@types/serve-index": "^1.9.1",
-        "@types/serve-static": "^1.13.10",
-        "@types/sockjs": "^0.3.33",
-        "@types/ws": "^8.5.5",
-        "ansi-html-community": "^0.0.8",
-        "bonjour-service": "^1.0.11",
-        "chokidar": "^3.5.3",
-        "colorette": "^2.0.10",
-        "compression": "^1.7.4",
-        "connect-history-api-fallback": "^2.0.0",
-        "default-gateway": "^6.0.3",
-        "express": "^4.17.3",
-        "graceful-fs": "^4.2.6",
-        "html-entities": "^2.3.2",
-        "http-proxy-middleware": "^2.0.3",
-        "ipaddr.js": "^2.0.1",
-        "launch-editor": "^2.6.0",
-        "open": "^8.0.9",
-        "p-retry": "^4.5.0",
-        "rimraf": "^3.0.2",
-        "schema-utils": "^4.0.0",
-        "selfsigned": "^2.1.1",
-        "serve-index": "^1.9.1",
-        "sockjs": "^0.3.24",
-        "spdy": "^4.0.2",
-        "webpack-dev-middleware": "^5.3.4",
-        "ws": "^8.13.0"
-      },
-      "bin": {
-        "webpack-dev-server": "bin/webpack-dev-server.js"
-      },
-      "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^4.37.0 || ^5.0.0"
-      },
-      "peerDependenciesMeta": {
-        "webpack": {
-          "optional": true
-        },
-        "webpack-cli": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/ajv-keywords": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3"
-      },
-      "peerDependencies": {
-        "ajv": "^8.8.2"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/webpack-dev-server/node_modules/schema-utils": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",
-      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.9",
-        "ajv": "^8.9.0",
-        "ajv-formats": "^2.1.1",
-        "ajv-keywords": "^5.1.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/webpack-dev-server/node_modules/ws": {
-      "version": "8.18.2",
-      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.2.tgz",
-      "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "peerDependencies": {
-        "bufferutil": "^4.0.1",
-        "utf-8-validate": ">=5.0.2"
-      },
-      "peerDependenciesMeta": {
-        "bufferutil": {
-          "optional": true
-        },
-        "utf-8-validate": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/webpack-merge": {
-      "version": "5.10.0",
-      "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz",
-      "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
-      "dev": true,
-      "dependencies": {
-        "clone-deep": "^4.0.1",
-        "flat": "^5.0.2",
-        "wildcard": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/webpack-sources": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.3.1.tgz",
-      "integrity": "sha512-EWzBqw2ZH/hIXIWIdOTvFHij6MuYdDHZVL12bZb921CrmP9UqYhK9+a3OC/onMGeBYrt2aOivHCLy5E+x5wYOA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/webpack-virtual-modules": {
-      "version": "0.4.6",
-      "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz",
-      "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==",
-      "dev": true
-    },
-    "node_modules/webpack/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/webpack/node_modules/ajv-keywords": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-      "dev": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3"
-      },
-      "peerDependencies": {
-        "ajv": "^8.8.2"
-      }
-    },
-    "node_modules/webpack/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
-    },
-    "node_modules/webpack/node_modules/schema-utils": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",
-      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.9",
-        "ajv": "^8.9.0",
-        "ajv-formats": "^2.1.1",
-        "ajv-keywords": "^5.1.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/websocket-driver": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz",
-      "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
-      "dev": true,
-      "dependencies": {
-        "http-parser-js": ">=0.5.1",
-        "safe-buffer": ">=5.1.0",
-        "websocket-extensions": ">=0.1.1"
-      },
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/websocket-extensions": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
-      "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/whatwg-fetch": {
-      "version": "3.6.20",
-      "resolved": "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
-      "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==",
-      "dev": true
-    },
-    "node_modules/whatwg-url": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
-      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-      "dev": true,
-      "dependencies": {
-        "tr46": "~0.0.3",
-        "webidl-conversions": "^3.0.0"
-      }
-    },
-    "node_modules/which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz",
-      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "which": "bin/which"
-      }
-    },
-    "node_modules/wildcard": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz",
-      "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
-      "dev": true
-    },
-    "node_modules/wrap-ansi": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "dev": true
-    },
-    "node_modules/ws": {
-      "version": "7.5.10",
-      "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz",
-      "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.3.0"
-      },
-      "peerDependencies": {
-        "bufferutil": "^4.0.1",
-        "utf-8-validate": "^5.0.2"
-      },
-      "peerDependenciesMeta": {
-        "bufferutil": {
-          "optional": true
-        },
-        "utf-8-validate": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/y18n": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
-      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/yallist": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
-      "dev": true
-    },
-    "node_modules/yaml": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.8.0.tgz",
-      "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
-      "dev": true,
-      "optional": true,
-      "peer": true,
-      "bin": {
-        "yaml": "bin.mjs"
-      },
-      "engines": {
-        "node": ">= 14.6"
-      }
-    },
-    "node_modules/yargs": {
-      "version": "16.2.0",
-      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz",
-      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^7.0.2",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.0",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^20.2.2"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/yargs-parser": {
-      "version": "20.2.9",
-      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
-      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    }
-  }
-}
+{

+  "name": "pt",

+  "version": "0.1.0",

+  "lockfileVersion": 3,

+  "requires": true,

+  "packages": {

+    "": {

+      "name": "pt",

+      "version": "0.1.0",

+      "dependencies": {

+        "@element-plus/icons-vue": "^2.3.1",

+        "axios": "^1.9.0",

+        "core-js": "^3.8.3",

+        "element-plus": "^2.9.11",

+        "vue": "^3.5.16",

+        "vue-router": "^4.5.1",

+        "vuex": "^4.1.0"

+      },

+      "devDependencies": {

+        "@vitejs/plugin-vue": "^5.2.4",

+        "@vue/cli-plugin-babel": "~5.0.0",

+        "@vue/cli-plugin-router": "~5.0.0",

+        "@vue/cli-plugin-vuex": "~5.0.0",

+        "@vue/cli-service": "~5.0.0",

+        "sass": "^1.89.1",

+        "sass-loader": "^16.0.5",

+        "vite": "^6.3.5"

+      }

+    },

+    "node_modules/@achrinza/node-ipc": {

+      "version": "9.2.9",

+      "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.9.tgz",

+      "integrity": "sha512-7s0VcTwiK/0tNOVdSX9FWMeFdOEcsAOz9HesBldXxFMaGvIak7KC2z9tV9EgsQXn6KUsWsfIkViMNuIo0GoZDQ==",

+      "dev": true,

+      "dependencies": {

+        "@node-ipc/js-queue": "2.0.3",

+        "event-pubsub": "4.3.0",

+        "js-message": "1.0.7"

+      },

+      "engines": {

+        "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21 || 22"

+      }

+    },

+    "node_modules/@ampproject/remapping": {

+      "version": "2.3.0",

+      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",

+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",

+      "dev": true,

+      "dependencies": {

+        "@jridgewell/gen-mapping": "^0.3.5",

+        "@jridgewell/trace-mapping": "^0.3.24"

+      },

+      "engines": {

+        "node": ">=6.0.0"

+      }

+    },

+    "node_modules/@babel/code-frame": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz",

+      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-validator-identifier": "^7.27.1",

+        "js-tokens": "^4.0.0",

+        "picocolors": "^1.1.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/compat-data": {

+      "version": "7.27.3",

+      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.27.3.tgz",

+      "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/core": {

+      "version": "7.27.4",

+      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.27.4.tgz",

+      "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",

+      "dev": true,

+      "dependencies": {

+        "@ampproject/remapping": "^2.2.0",

+        "@babel/code-frame": "^7.27.1",

+        "@babel/generator": "^7.27.3",

+        "@babel/helper-compilation-targets": "^7.27.2",

+        "@babel/helper-module-transforms": "^7.27.3",

+        "@babel/helpers": "^7.27.4",

+        "@babel/parser": "^7.27.4",

+        "@babel/template": "^7.27.2",

+        "@babel/traverse": "^7.27.4",

+        "@babel/types": "^7.27.3",

+        "convert-source-map": "^2.0.0",

+        "debug": "^4.1.0",

+        "gensync": "^1.0.0-beta.2",

+        "json5": "^2.2.3",

+        "semver": "^6.3.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/babel"

+      }

+    },

+    "node_modules/@babel/generator": {

+      "version": "7.27.3",

+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.27.3.tgz",

+      "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==",

+      "dev": true,

+      "dependencies": {

+        "@babel/parser": "^7.27.3",

+        "@babel/types": "^7.27.3",

+        "@jridgewell/gen-mapping": "^0.3.5",

+        "@jridgewell/trace-mapping": "^0.3.25",

+        "jsesc": "^3.0.2"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-annotate-as-pure": {

+      "version": "7.27.3",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",

+      "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/types": "^7.27.3"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-compilation-targets": {

+      "version": "7.27.2",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",

+      "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/compat-data": "^7.27.2",

+        "@babel/helper-validator-option": "^7.27.1",

+        "browserslist": "^4.24.0",

+        "lru-cache": "^5.1.1",

+        "semver": "^6.3.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-create-class-features-plugin": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz",

+      "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-annotate-as-pure": "^7.27.1",

+        "@babel/helper-member-expression-to-functions": "^7.27.1",

+        "@babel/helper-optimise-call-expression": "^7.27.1",

+        "@babel/helper-replace-supers": "^7.27.1",

+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",

+        "@babel/traverse": "^7.27.1",

+        "semver": "^6.3.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/helper-create-regexp-features-plugin": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz",

+      "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-annotate-as-pure": "^7.27.1",

+        "regexpu-core": "^6.2.0",

+        "semver": "^6.3.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/helper-define-polyfill-provider": {

+      "version": "0.6.4",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz",

+      "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-compilation-targets": "^7.22.6",

+        "@babel/helper-plugin-utils": "^7.22.5",

+        "debug": "^4.1.1",

+        "lodash.debounce": "^4.0.8",

+        "resolve": "^1.14.2"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"

+      }

+    },

+    "node_modules/@babel/helper-member-expression-to-functions": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",

+      "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/traverse": "^7.27.1",

+        "@babel/types": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-module-imports": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",

+      "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",

+      "dev": true,

+      "dependencies": {

+        "@babel/traverse": "^7.27.1",

+        "@babel/types": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-module-transforms": {

+      "version": "7.27.3",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",

+      "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-imports": "^7.27.1",

+        "@babel/helper-validator-identifier": "^7.27.1",

+        "@babel/traverse": "^7.27.3"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/helper-optimise-call-expression": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",

+      "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/types": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-plugin-utils": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",

+      "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-remap-async-to-generator": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz",

+      "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-annotate-as-pure": "^7.27.1",

+        "@babel/helper-wrap-function": "^7.27.1",

+        "@babel/traverse": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/helper-replace-supers": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",

+      "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-member-expression-to-functions": "^7.27.1",

+        "@babel/helper-optimise-call-expression": "^7.27.1",

+        "@babel/traverse": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",

+      "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/traverse": "^7.27.1",

+        "@babel/types": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-string-parser": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",

+      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-validator-identifier": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",

+      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-validator-option": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",

+      "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helper-wrap-function": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz",

+      "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/template": "^7.27.1",

+        "@babel/traverse": "^7.27.1",

+        "@babel/types": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/helpers": {

+      "version": "7.27.4",

+      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.4.tgz",

+      "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/template": "^7.27.2",

+        "@babel/types": "^7.27.3"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/parser": {

+      "version": "7.27.4",

+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.4.tgz",

+      "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==",

+      "dependencies": {

+        "@babel/types": "^7.27.3"

+      },

+      "bin": {

+        "parser": "bin/babel-parser.js"

+      },

+      "engines": {

+        "node": ">=6.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz",

+      "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/traverse": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz",

+      "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz",

+      "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",

+      "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",

+        "@babel/plugin-transform-optional-chaining": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.13.0"

+      }

+    },

+    "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz",

+      "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/traverse": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-proposal-class-properties": {

+      "version": "7.18.6",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",

+      "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",

+      "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-class-features-plugin": "^7.18.6",

+        "@babel/helper-plugin-utils": "^7.18.6"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-proposal-decorators": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz",

+      "integrity": "sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-class-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/plugin-syntax-decorators": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-proposal-private-property-in-object": {

+      "version": "7.21.0-placeholder-for-preset-env.2",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",

+      "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-syntax-decorators": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",

+      "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-syntax-dynamic-import": {

+      "version": "7.8.3",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",

+      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.8.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-syntax-import-assertions": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz",

+      "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-syntax-import-attributes": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",

+      "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-syntax-jsx": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",

+      "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-syntax-unicode-sets-regex": {

+      "version": "7.18.6",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",

+      "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",

+        "@babel/helper-plugin-utils": "^7.18.6"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-arrow-functions": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz",

+      "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-async-generator-functions": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz",

+      "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-remap-async-to-generator": "^7.27.1",

+        "@babel/traverse": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-async-to-generator": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz",

+      "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-imports": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-remap-async-to-generator": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-block-scoped-functions": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz",

+      "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-block-scoping": {

+      "version": "7.27.3",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.3.tgz",

+      "integrity": "sha512-+F8CnfhuLhwUACIJMLWnjz6zvzYM2r0yeIHKlbgfw7ml8rOMJsXNXV/hyRcb3nb493gRs4WvYpQAndWj/qQmkQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-class-properties": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz",

+      "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-class-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-class-static-block": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz",

+      "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-class-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.12.0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-classes": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz",

+      "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-annotate-as-pure": "^7.27.1",

+        "@babel/helper-compilation-targets": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-replace-supers": "^7.27.1",

+        "@babel/traverse": "^7.27.1",

+        "globals": "^11.1.0"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-computed-properties": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz",

+      "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/template": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-destructuring": {

+      "version": "7.27.3",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz",

+      "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-dotall-regex": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz",

+      "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-regexp-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-duplicate-keys": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz",

+      "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz",

+      "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-regexp-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-dynamic-import": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz",

+      "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-exponentiation-operator": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz",

+      "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-export-namespace-from": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz",

+      "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-for-of": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz",

+      "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-function-name": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz",

+      "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-compilation-targets": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/traverse": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-json-strings": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz",

+      "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-literals": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz",

+      "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-logical-assignment-operators": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz",

+      "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-member-expression-literals": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz",

+      "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-modules-amd": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz",

+      "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-transforms": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-modules-commonjs": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz",

+      "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-transforms": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-modules-systemjs": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz",

+      "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-transforms": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-validator-identifier": "^7.27.1",

+        "@babel/traverse": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-modules-umd": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz",

+      "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-transforms": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz",

+      "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-regexp-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-new-target": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz",

+      "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz",

+      "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-numeric-separator": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz",

+      "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-object-rest-spread": {

+      "version": "7.27.3",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz",

+      "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-compilation-targets": "^7.27.2",

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/plugin-transform-destructuring": "^7.27.3",

+        "@babel/plugin-transform-parameters": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-object-super": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz",

+      "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-replace-supers": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-optional-catch-binding": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz",

+      "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-optional-chaining": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz",

+      "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-parameters": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz",

+      "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-private-methods": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz",

+      "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-class-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-private-property-in-object": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz",

+      "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-annotate-as-pure": "^7.27.1",

+        "@babel/helper-create-class-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-property-literals": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz",

+      "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-regenerator": {

+      "version": "7.27.4",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.4.tgz",

+      "integrity": "sha512-Glp/0n8xuj+E1588otw5rjJkTXfzW7FjH3IIUrfqiZOPQCd2vbg8e+DQE8jK9g4V5/zrxFW+D9WM9gboRPELpQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-regexp-modifiers": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz",

+      "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-regexp-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-reserved-words": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz",

+      "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-runtime": {

+      "version": "7.27.4",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz",

+      "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-imports": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "babel-plugin-polyfill-corejs2": "^0.4.10",

+        "babel-plugin-polyfill-corejs3": "^0.11.0",

+        "babel-plugin-polyfill-regenerator": "^0.6.1",

+        "semver": "^6.3.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-shorthand-properties": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz",

+      "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-spread": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz",

+      "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-sticky-regex": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz",

+      "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-template-literals": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz",

+      "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-typeof-symbol": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz",

+      "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-unicode-escapes": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz",

+      "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-unicode-property-regex": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz",

+      "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-regexp-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-unicode-regex": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz",

+      "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-regexp-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/plugin-transform-unicode-sets-regex": {

+      "version": "7.27.1",

+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz",

+      "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-create-regexp-features-plugin": "^7.27.1",

+        "@babel/helper-plugin-utils": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0"

+      }

+    },

+    "node_modules/@babel/preset-env": {

+      "version": "7.27.2",

+      "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.27.2.tgz",

+      "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/compat-data": "^7.27.2",

+        "@babel/helper-compilation-targets": "^7.27.2",

+        "@babel/helper-plugin-utils": "^7.27.1",

+        "@babel/helper-validator-option": "^7.27.1",

+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1",

+        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",

+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",

+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",

+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1",

+        "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",

+        "@babel/plugin-syntax-import-assertions": "^7.27.1",

+        "@babel/plugin-syntax-import-attributes": "^7.27.1",

+        "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",

+        "@babel/plugin-transform-arrow-functions": "^7.27.1",

+        "@babel/plugin-transform-async-generator-functions": "^7.27.1",

+        "@babel/plugin-transform-async-to-generator": "^7.27.1",

+        "@babel/plugin-transform-block-scoped-functions": "^7.27.1",

+        "@babel/plugin-transform-block-scoping": "^7.27.1",

+        "@babel/plugin-transform-class-properties": "^7.27.1",

+        "@babel/plugin-transform-class-static-block": "^7.27.1",

+        "@babel/plugin-transform-classes": "^7.27.1",

+        "@babel/plugin-transform-computed-properties": "^7.27.1",

+        "@babel/plugin-transform-destructuring": "^7.27.1",

+        "@babel/plugin-transform-dotall-regex": "^7.27.1",

+        "@babel/plugin-transform-duplicate-keys": "^7.27.1",

+        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1",

+        "@babel/plugin-transform-dynamic-import": "^7.27.1",

+        "@babel/plugin-transform-exponentiation-operator": "^7.27.1",

+        "@babel/plugin-transform-export-namespace-from": "^7.27.1",

+        "@babel/plugin-transform-for-of": "^7.27.1",

+        "@babel/plugin-transform-function-name": "^7.27.1",

+        "@babel/plugin-transform-json-strings": "^7.27.1",

+        "@babel/plugin-transform-literals": "^7.27.1",

+        "@babel/plugin-transform-logical-assignment-operators": "^7.27.1",

+        "@babel/plugin-transform-member-expression-literals": "^7.27.1",

+        "@babel/plugin-transform-modules-amd": "^7.27.1",

+        "@babel/plugin-transform-modules-commonjs": "^7.27.1",

+        "@babel/plugin-transform-modules-systemjs": "^7.27.1",

+        "@babel/plugin-transform-modules-umd": "^7.27.1",

+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1",

+        "@babel/plugin-transform-new-target": "^7.27.1",

+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",

+        "@babel/plugin-transform-numeric-separator": "^7.27.1",

+        "@babel/plugin-transform-object-rest-spread": "^7.27.2",

+        "@babel/plugin-transform-object-super": "^7.27.1",

+        "@babel/plugin-transform-optional-catch-binding": "^7.27.1",

+        "@babel/plugin-transform-optional-chaining": "^7.27.1",

+        "@babel/plugin-transform-parameters": "^7.27.1",

+        "@babel/plugin-transform-private-methods": "^7.27.1",

+        "@babel/plugin-transform-private-property-in-object": "^7.27.1",

+        "@babel/plugin-transform-property-literals": "^7.27.1",

+        "@babel/plugin-transform-regenerator": "^7.27.1",

+        "@babel/plugin-transform-regexp-modifiers": "^7.27.1",

+        "@babel/plugin-transform-reserved-words": "^7.27.1",

+        "@babel/plugin-transform-shorthand-properties": "^7.27.1",

+        "@babel/plugin-transform-spread": "^7.27.1",

+        "@babel/plugin-transform-sticky-regex": "^7.27.1",

+        "@babel/plugin-transform-template-literals": "^7.27.1",

+        "@babel/plugin-transform-typeof-symbol": "^7.27.1",

+        "@babel/plugin-transform-unicode-escapes": "^7.27.1",

+        "@babel/plugin-transform-unicode-property-regex": "^7.27.1",

+        "@babel/plugin-transform-unicode-regex": "^7.27.1",

+        "@babel/plugin-transform-unicode-sets-regex": "^7.27.1",

+        "@babel/preset-modules": "0.1.6-no-external-plugins",

+        "babel-plugin-polyfill-corejs2": "^0.4.10",

+        "babel-plugin-polyfill-corejs3": "^0.11.0",

+        "babel-plugin-polyfill-regenerator": "^0.6.1",

+        "core-js-compat": "^3.40.0",

+        "semver": "^6.3.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@babel/preset-modules": {

+      "version": "0.1.6-no-external-plugins",

+      "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",

+      "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-plugin-utils": "^7.0.0",

+        "@babel/types": "^7.4.4",

+        "esutils": "^2.0.2"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"

+      }

+    },

+    "node_modules/@babel/runtime": {

+      "version": "7.27.4",

+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.4.tgz",

+      "integrity": "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/template": {

+      "version": "7.27.2",

+      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",

+      "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/code-frame": "^7.27.1",

+        "@babel/parser": "^7.27.2",

+        "@babel/types": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/traverse": {

+      "version": "7.27.4",

+      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.27.4.tgz",

+      "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/code-frame": "^7.27.1",

+        "@babel/generator": "^7.27.3",

+        "@babel/parser": "^7.27.4",

+        "@babel/template": "^7.27.2",

+        "@babel/types": "^7.27.3",

+        "debug": "^4.3.1",

+        "globals": "^11.1.0"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@babel/types": {

+      "version": "7.27.3",

+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.3.tgz",

+      "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==",

+      "dependencies": {

+        "@babel/helper-string-parser": "^7.27.1",

+        "@babel/helper-validator-identifier": "^7.27.1"

+      },

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/@ctrl/tinycolor": {

+      "version": "3.6.1",

+      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",

+      "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/@discoveryjs/json-ext": {

+      "version": "0.5.7",

+      "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",

+      "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",

+      "dev": true,

+      "engines": {

+        "node": ">=10.0.0"

+      }

+    },

+    "node_modules/@element-plus/icons-vue": {

+      "version": "2.3.1",

+      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",

+      "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",

+      "peerDependencies": {

+        "vue": "^3.2.0"

+      }

+    },

+    "node_modules/@esbuild/aix-ppc64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",

+      "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",

+      "cpu": [

+        "ppc64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "aix"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/android-arm": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz",

+      "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",

+      "cpu": [

+        "arm"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "android"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/android-arm64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",

+      "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "android"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/android-x64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz",

+      "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "android"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/darwin-arm64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",

+      "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "darwin"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/darwin-x64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",

+      "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "darwin"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/freebsd-arm64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",

+      "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "freebsd"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/freebsd-x64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",

+      "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "freebsd"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-arm": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",

+      "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",

+      "cpu": [

+        "arm"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-arm64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",

+      "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-ia32": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",

+      "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",

+      "cpu": [

+        "ia32"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-loong64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",

+      "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",

+      "cpu": [

+        "loong64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-mips64el": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",

+      "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",

+      "cpu": [

+        "mips64el"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-ppc64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",

+      "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",

+      "cpu": [

+        "ppc64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-riscv64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",

+      "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",

+      "cpu": [

+        "riscv64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-s390x": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",

+      "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",

+      "cpu": [

+        "s390x"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/linux-x64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",

+      "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/netbsd-arm64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",

+      "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "netbsd"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/netbsd-x64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",

+      "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "netbsd"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/openbsd-arm64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",

+      "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "openbsd"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/openbsd-x64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",

+      "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "openbsd"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/sunos-x64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",

+      "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "sunos"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/win32-arm64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",

+      "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/win32-ia32": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",

+      "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",

+      "cpu": [

+        "ia32"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@esbuild/win32-x64": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",

+      "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ],

+      "engines": {

+        "node": ">=18"

+      }

+    },

+    "node_modules/@floating-ui/core": {

+      "version": "1.7.1",

+      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.1.tgz",

+      "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==",

+      "dependencies": {

+        "@floating-ui/utils": "^0.2.9"

+      }

+    },

+    "node_modules/@floating-ui/dom": {

+      "version": "1.7.1",

+      "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.1.tgz",

+      "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==",

+      "dependencies": {

+        "@floating-ui/core": "^1.7.1",

+        "@floating-ui/utils": "^0.2.9"

+      }

+    },

+    "node_modules/@floating-ui/utils": {

+      "version": "0.2.9",

+      "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz",

+      "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="

+    },

+    "node_modules/@hapi/hoek": {

+      "version": "9.3.0",

+      "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz",

+      "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",

+      "dev": true

+    },

+    "node_modules/@hapi/topo": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz",

+      "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",

+      "dev": true,

+      "dependencies": {

+        "@hapi/hoek": "^9.0.0"

+      }

+    },

+    "node_modules/@jridgewell/gen-mapping": {

+      "version": "0.3.8",

+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",

+      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",

+      "dev": true,

+      "dependencies": {

+        "@jridgewell/set-array": "^1.2.1",

+        "@jridgewell/sourcemap-codec": "^1.4.10",

+        "@jridgewell/trace-mapping": "^0.3.24"

+      },

+      "engines": {

+        "node": ">=6.0.0"

+      }

+    },

+    "node_modules/@jridgewell/resolve-uri": {

+      "version": "3.1.2",

+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",

+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.0.0"

+      }

+    },

+    "node_modules/@jridgewell/set-array": {

+      "version": "1.2.1",

+      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",

+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.0.0"

+      }

+    },

+    "node_modules/@jridgewell/source-map": {

+      "version": "0.3.6",

+      "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz",

+      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",

+      "dev": true,

+      "dependencies": {

+        "@jridgewell/gen-mapping": "^0.3.5",

+        "@jridgewell/trace-mapping": "^0.3.25"

+      }

+    },

+    "node_modules/@jridgewell/sourcemap-codec": {

+      "version": "1.5.0",

+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",

+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="

+    },

+    "node_modules/@jridgewell/trace-mapping": {

+      "version": "0.3.25",

+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",

+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",

+      "dev": true,

+      "dependencies": {

+        "@jridgewell/resolve-uri": "^3.1.0",

+        "@jridgewell/sourcemap-codec": "^1.4.14"

+      }

+    },

+    "node_modules/@leichtgewicht/ip-codec": {

+      "version": "2.0.5",

+      "resolved": "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",

+      "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",

+      "dev": true

+    },

+    "node_modules/@node-ipc/js-queue": {

+      "version": "2.0.3",

+      "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz",

+      "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==",

+      "dev": true,

+      "dependencies": {

+        "easy-stack": "1.0.1"

+      },

+      "engines": {

+        "node": ">=1.0.0"

+      }

+    },

+    "node_modules/@nodelib/fs.scandir": {

+      "version": "2.1.5",

+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",

+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",

+      "dev": true,

+      "dependencies": {

+        "@nodelib/fs.stat": "2.0.5",

+        "run-parallel": "^1.1.9"

+      },

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/@nodelib/fs.stat": {

+      "version": "2.0.5",

+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",

+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",

+      "dev": true,

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/@nodelib/fs.walk": {

+      "version": "1.2.8",

+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",

+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",

+      "dev": true,

+      "dependencies": {

+        "@nodelib/fs.scandir": "2.1.5",

+        "fastq": "^1.6.0"

+      },

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/@parcel/watcher": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.1.tgz",

+      "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",

+      "dev": true,

+      "hasInstallScript": true,

+      "optional": true,

+      "dependencies": {

+        "detect-libc": "^1.0.3",

+        "is-glob": "^4.0.3",

+        "micromatch": "^4.0.5",

+        "node-addon-api": "^7.0.0"

+      },

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      },

+      "optionalDependencies": {

+        "@parcel/watcher-android-arm64": "2.5.1",

+        "@parcel/watcher-darwin-arm64": "2.5.1",

+        "@parcel/watcher-darwin-x64": "2.5.1",

+        "@parcel/watcher-freebsd-x64": "2.5.1",

+        "@parcel/watcher-linux-arm-glibc": "2.5.1",

+        "@parcel/watcher-linux-arm-musl": "2.5.1",

+        "@parcel/watcher-linux-arm64-glibc": "2.5.1",

+        "@parcel/watcher-linux-arm64-musl": "2.5.1",

+        "@parcel/watcher-linux-x64-glibc": "2.5.1",

+        "@parcel/watcher-linux-x64-musl": "2.5.1",

+        "@parcel/watcher-win32-arm64": "2.5.1",

+        "@parcel/watcher-win32-ia32": "2.5.1",

+        "@parcel/watcher-win32-x64": "2.5.1"

+      }

+    },

+    "node_modules/@parcel/watcher-android-arm64": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",

+      "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "android"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-darwin-arm64": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",

+      "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "darwin"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-darwin-x64": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",

+      "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "darwin"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-freebsd-x64": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",

+      "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "freebsd"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-linux-arm-glibc": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",

+      "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",

+      "cpu": [

+        "arm"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-linux-arm-musl": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",

+      "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",

+      "cpu": [

+        "arm"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-linux-arm64-glibc": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",

+      "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-linux-arm64-musl": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",

+      "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-linux-x64-glibc": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",

+      "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-linux-x64-musl": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",

+      "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-win32-arm64": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",

+      "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-win32-ia32": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",

+      "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",

+      "cpu": [

+        "ia32"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@parcel/watcher-win32-x64": {

+      "version": "2.5.1",

+      "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",

+      "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ],

+      "engines": {

+        "node": ">= 10.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/parcel"

+      }

+    },

+    "node_modules/@polka/url": {

+      "version": "1.0.0-next.29",

+      "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz",

+      "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",

+      "dev": true

+    },

+    "node_modules/@popperjs/core": {

+      "name": "@sxzz/popperjs-es",

+      "version": "2.11.7",

+      "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",

+      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/popperjs"

+      }

+    },

+    "node_modules/@rollup/rollup-android-arm-eabi": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",

+      "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",

+      "cpu": [

+        "arm"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "android"

+      ]

+    },

+    "node_modules/@rollup/rollup-android-arm64": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",

+      "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "android"

+      ]

+    },

+    "node_modules/@rollup/rollup-darwin-arm64": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",

+      "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "darwin"

+      ]

+    },

+    "node_modules/@rollup/rollup-darwin-x64": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",

+      "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "darwin"

+      ]

+    },

+    "node_modules/@rollup/rollup-freebsd-arm64": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",

+      "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "freebsd"

+      ]

+    },

+    "node_modules/@rollup/rollup-freebsd-x64": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",

+      "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "freebsd"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",

+      "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",

+      "cpu": [

+        "arm"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-arm-musleabihf": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",

+      "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",

+      "cpu": [

+        "arm"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-arm64-gnu": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",

+      "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-arm64-musl": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",

+      "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",

+      "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",

+      "cpu": [

+        "loong64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",

+      "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",

+      "cpu": [

+        "ppc64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-riscv64-gnu": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",

+      "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",

+      "cpu": [

+        "riscv64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-riscv64-musl": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",

+      "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",

+      "cpu": [

+        "riscv64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-s390x-gnu": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",

+      "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",

+      "cpu": [

+        "s390x"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-x64-gnu": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",

+      "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-linux-x64-musl": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",

+      "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "linux"

+      ]

+    },

+    "node_modules/@rollup/rollup-win32-arm64-msvc": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",

+      "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",

+      "cpu": [

+        "arm64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ]

+    },

+    "node_modules/@rollup/rollup-win32-ia32-msvc": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",

+      "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",

+      "cpu": [

+        "ia32"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ]

+    },

+    "node_modules/@rollup/rollup-win32-x64-msvc": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",

+      "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",

+      "cpu": [

+        "x64"

+      ],

+      "dev": true,

+      "optional": true,

+      "os": [

+        "win32"

+      ]

+    },

+    "node_modules/@sideway/address": {

+      "version": "4.1.5",

+      "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz",

+      "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",

+      "dev": true,

+      "dependencies": {

+        "@hapi/hoek": "^9.0.0"

+      }

+    },

+    "node_modules/@sideway/formula": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz",

+      "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",

+      "dev": true

+    },

+    "node_modules/@sideway/pinpoint": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",

+      "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",

+      "dev": true

+    },

+    "node_modules/@soda/friendly-errors-webpack-plugin": {

+      "version": "1.8.1",

+      "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz",

+      "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==",

+      "dev": true,

+      "dependencies": {

+        "chalk": "^3.0.0",

+        "error-stack-parser": "^2.0.6",

+        "string-width": "^4.2.3",

+        "strip-ansi": "^6.0.1"

+      },

+      "engines": {

+        "node": ">=8.0.0"

+      },

+      "peerDependencies": {

+        "webpack": "^4.0.0 || ^5.0.0"

+      }

+    },

+    "node_modules/@soda/get-current-script": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz",

+      "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==",

+      "dev": true

+    },

+    "node_modules/@trysound/sax": {

+      "version": "0.2.0",

+      "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz",

+      "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",

+      "dev": true,

+      "engines": {

+        "node": ">=10.13.0"

+      }

+    },

+    "node_modules/@types/body-parser": {

+      "version": "1.19.5",

+      "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz",

+      "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",

+      "dev": true,

+      "dependencies": {

+        "@types/connect": "*",

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@types/bonjour": {

+      "version": "3.5.13",

+      "resolved": "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.13.tgz",

+      "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@types/connect": {

+      "version": "3.4.38",

+      "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz",

+      "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@types/connect-history-api-fallback": {

+      "version": "1.5.4",

+      "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",

+      "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",

+      "dev": true,

+      "dependencies": {

+        "@types/express-serve-static-core": "*",

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@types/eslint": {

+      "version": "9.6.1",

+      "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz",

+      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",

+      "dev": true,

+      "dependencies": {

+        "@types/estree": "*",

+        "@types/json-schema": "*"

+      }

+    },

+    "node_modules/@types/eslint-scope": {

+      "version": "3.7.7",

+      "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",

+      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",

+      "dev": true,

+      "dependencies": {

+        "@types/eslint": "*",

+        "@types/estree": "*"

+      }

+    },

+    "node_modules/@types/estree": {

+      "version": "1.0.7",

+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.7.tgz",

+      "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",

+      "dev": true

+    },

+    "node_modules/@types/express": {

+      "version": "4.17.22",

+      "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.22.tgz",

+      "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==",

+      "dev": true,

+      "dependencies": {

+        "@types/body-parser": "*",

+        "@types/express-serve-static-core": "^4.17.33",

+        "@types/qs": "*",

+        "@types/serve-static": "*"

+      }

+    },

+    "node_modules/@types/express-serve-static-core": {

+      "version": "5.0.6",

+      "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz",

+      "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*",

+        "@types/qs": "*",

+        "@types/range-parser": "*",

+        "@types/send": "*"

+      }

+    },

+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {

+      "version": "4.19.6",

+      "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",

+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*",

+        "@types/qs": "*",

+        "@types/range-parser": "*",

+        "@types/send": "*"

+      }

+    },

+    "node_modules/@types/html-minifier-terser": {

+      "version": "6.1.0",

+      "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",

+      "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==",

+      "dev": true

+    },

+    "node_modules/@types/http-errors": {

+      "version": "2.0.4",

+      "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz",

+      "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",

+      "dev": true

+    },

+    "node_modules/@types/http-proxy": {

+      "version": "1.17.16",

+      "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.16.tgz",

+      "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@types/json-schema": {

+      "version": "7.0.15",

+      "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",

+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",

+      "dev": true

+    },

+    "node_modules/@types/lodash": {

+      "version": "4.17.17",

+      "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.17.tgz",

+      "integrity": "sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ=="

+    },

+    "node_modules/@types/lodash-es": {

+      "version": "4.17.12",

+      "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",

+      "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",

+      "dependencies": {

+        "@types/lodash": "*"

+      }

+    },

+    "node_modules/@types/mime": {

+      "version": "1.3.5",

+      "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz",

+      "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",

+      "dev": true

+    },

+    "node_modules/@types/minimist": {

+      "version": "1.2.5",

+      "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.5.tgz",

+      "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",

+      "dev": true

+    },

+    "node_modules/@types/node": {

+      "version": "22.15.29",

+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.15.29.tgz",

+      "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==",

+      "dev": true,

+      "dependencies": {

+        "undici-types": "~6.21.0"

+      }

+    },

+    "node_modules/@types/node-forge": {

+      "version": "1.3.11",

+      "resolved": "https://registry.npmmirror.com/@types/node-forge/-/node-forge-1.3.11.tgz",

+      "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@types/normalize-package-data": {

+      "version": "2.4.4",

+      "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",

+      "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",

+      "dev": true

+    },

+    "node_modules/@types/parse-json": {

+      "version": "4.0.2",

+      "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz",

+      "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",

+      "dev": true

+    },

+    "node_modules/@types/qs": {

+      "version": "6.14.0",

+      "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.14.0.tgz",

+      "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",

+      "dev": true

+    },

+    "node_modules/@types/range-parser": {

+      "version": "1.2.7",

+      "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz",

+      "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",

+      "dev": true

+    },

+    "node_modules/@types/retry": {

+      "version": "0.12.0",

+      "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz",

+      "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",

+      "dev": true

+    },

+    "node_modules/@types/send": {

+      "version": "0.17.4",

+      "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz",

+      "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",

+      "dev": true,

+      "dependencies": {

+        "@types/mime": "^1",

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@types/serve-index": {

+      "version": "1.9.4",

+      "resolved": "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.4.tgz",

+      "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",

+      "dev": true,

+      "dependencies": {

+        "@types/express": "*"

+      }

+    },

+    "node_modules/@types/serve-static": {

+      "version": "1.15.7",

+      "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz",

+      "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",

+      "dev": true,

+      "dependencies": {

+        "@types/http-errors": "*",

+        "@types/node": "*",

+        "@types/send": "*"

+      }

+    },

+    "node_modules/@types/sockjs": {

+      "version": "0.3.36",

+      "resolved": "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.36.tgz",

+      "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@types/web-bluetooth": {

+      "version": "0.0.16",

+      "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",

+      "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="

+    },

+    "node_modules/@types/ws": {

+      "version": "8.18.1",

+      "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.18.1.tgz",

+      "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*"

+      }

+    },

+    "node_modules/@vitejs/plugin-vue": {

+      "version": "5.2.4",

+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",

+      "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",

+      "dev": true,

+      "engines": {

+        "node": "^18.0.0 || >=20.0.0"

+      },

+      "peerDependencies": {

+        "vite": "^5.0.0 || ^6.0.0",

+        "vue": "^3.2.25"

+      }

+    },

+    "node_modules/@vue/babel-helper-vue-jsx-merge-props": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz",

+      "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==",

+      "dev": true

+    },

+    "node_modules/@vue/babel-helper-vue-transform-on": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz",

+      "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==",

+      "dev": true

+    },

+    "node_modules/@vue/babel-plugin-jsx": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz",

+      "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-imports": "^7.25.9",

+        "@babel/helper-plugin-utils": "^7.26.5",

+        "@babel/plugin-syntax-jsx": "^7.25.9",

+        "@babel/template": "^7.26.9",

+        "@babel/traverse": "^7.26.9",

+        "@babel/types": "^7.26.9",

+        "@vue/babel-helper-vue-transform-on": "1.4.0",

+        "@vue/babel-plugin-resolve-type": "1.4.0",

+        "@vue/shared": "^3.5.13"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      },

+      "peerDependenciesMeta": {

+        "@babel/core": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/@vue/babel-plugin-resolve-type": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz",

+      "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/code-frame": "^7.26.2",

+        "@babel/helper-module-imports": "^7.25.9",

+        "@babel/helper-plugin-utils": "^7.26.5",

+        "@babel/parser": "^7.26.9",

+        "@vue/compiler-sfc": "^3.5.13"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sxzz"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@vue/babel-plugin-transform-vue-jsx": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz",

+      "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-module-imports": "^7.0.0",

+        "@babel/plugin-syntax-jsx": "^7.2.0",

+        "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",

+        "html-tags": "^2.0.0",

+        "lodash.kebabcase": "^4.1.1",

+        "svg-tags": "^1.0.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@vue/babel-preset-app": {

+      "version": "5.0.8",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz",

+      "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/core": "^7.12.16",

+        "@babel/helper-compilation-targets": "^7.12.16",

+        "@babel/helper-module-imports": "^7.12.13",

+        "@babel/plugin-proposal-class-properties": "^7.12.13",

+        "@babel/plugin-proposal-decorators": "^7.12.13",

+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",

+        "@babel/plugin-syntax-jsx": "^7.12.13",

+        "@babel/plugin-transform-runtime": "^7.12.15",

+        "@babel/preset-env": "^7.12.16",

+        "@babel/runtime": "^7.12.13",

+        "@vue/babel-plugin-jsx": "^1.0.3",

+        "@vue/babel-preset-jsx": "^1.1.2",

+        "babel-plugin-dynamic-import-node": "^2.3.3",

+        "core-js": "^3.8.3",

+        "core-js-compat": "^3.8.3",

+        "semver": "^7.3.4"

+      },

+      "peerDependencies": {

+        "@babel/core": "*",

+        "core-js": "^3",

+        "vue": "^2 || ^3.2.13"

+      },

+      "peerDependenciesMeta": {

+        "core-js": {

+          "optional": true

+        },

+        "vue": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/@vue/babel-preset-app/node_modules/semver": {

+      "version": "7.7.2",

+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",

+      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",

+      "dev": true,

+      "bin": {

+        "semver": "bin/semver.js"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/@vue/babel-preset-jsx": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz",

+      "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==",

+      "dev": true,

+      "dependencies": {

+        "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",

+        "@vue/babel-plugin-transform-vue-jsx": "^1.4.0",

+        "@vue/babel-sugar-composition-api-inject-h": "^1.4.0",

+        "@vue/babel-sugar-composition-api-render-instance": "^1.4.0",

+        "@vue/babel-sugar-functional-vue": "^1.4.0",

+        "@vue/babel-sugar-inject-h": "^1.4.0",

+        "@vue/babel-sugar-v-model": "^1.4.0",

+        "@vue/babel-sugar-v-on": "^1.4.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0",

+        "vue": "*"

+      },

+      "peerDependenciesMeta": {

+        "vue": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/@vue/babel-sugar-composition-api-inject-h": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz",

+      "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==",

+      "dev": true,

+      "dependencies": {

+        "@babel/plugin-syntax-jsx": "^7.2.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@vue/babel-sugar-composition-api-render-instance": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz",

+      "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==",

+      "dev": true,

+      "dependencies": {

+        "@babel/plugin-syntax-jsx": "^7.2.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@vue/babel-sugar-functional-vue": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz",

+      "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/plugin-syntax-jsx": "^7.2.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@vue/babel-sugar-inject-h": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz",

+      "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/plugin-syntax-jsx": "^7.2.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@vue/babel-sugar-v-model": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz",

+      "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/plugin-syntax-jsx": "^7.2.0",

+        "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",

+        "@vue/babel-plugin-transform-vue-jsx": "^1.4.0",

+        "camelcase": "^5.0.0",

+        "html-tags": "^2.0.0",

+        "svg-tags": "^1.0.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@vue/babel-sugar-v-on": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz",

+      "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==",

+      "dev": true,

+      "dependencies": {

+        "@babel/plugin-syntax-jsx": "^7.2.0",

+        "@vue/babel-plugin-transform-vue-jsx": "^1.4.0",

+        "camelcase": "^5.0.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0-0"

+      }

+    },

+    "node_modules/@vue/cli-overlay": {

+      "version": "5.0.8",

+      "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz",

+      "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==",

+      "dev": true

+    },

+    "node_modules/@vue/cli-plugin-babel": {

+      "version": "5.0.8",

+      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz",

+      "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/core": "^7.12.16",

+        "@vue/babel-preset-app": "^5.0.8",

+        "@vue/cli-shared-utils": "^5.0.8",

+        "babel-loader": "^8.2.2",

+        "thread-loader": "^3.0.0",

+        "webpack": "^5.54.0"

+      },

+      "peerDependencies": {

+        "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0"

+      }

+    },

+    "node_modules/@vue/cli-plugin-router": {

+      "version": "5.0.8",

+      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz",

+      "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==",

+      "dev": true,

+      "dependencies": {

+        "@vue/cli-shared-utils": "^5.0.8"

+      },

+      "peerDependencies": {

+        "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0"

+      }

+    },

+    "node_modules/@vue/cli-plugin-vuex": {

+      "version": "5.0.8",

+      "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz",

+      "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==",

+      "dev": true,

+      "peerDependencies": {

+        "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0"

+      }

+    },

+    "node_modules/@vue/cli-service": {

+      "version": "5.0.8",

+      "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz",

+      "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-compilation-targets": "^7.12.16",

+        "@soda/friendly-errors-webpack-plugin": "^1.8.0",

+        "@soda/get-current-script": "^1.0.2",

+        "@types/minimist": "^1.2.0",

+        "@vue/cli-overlay": "^5.0.8",

+        "@vue/cli-plugin-router": "^5.0.8",

+        "@vue/cli-plugin-vuex": "^5.0.8",

+        "@vue/cli-shared-utils": "^5.0.8",

+        "@vue/component-compiler-utils": "^3.3.0",

+        "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7",

+        "@vue/web-component-wrapper": "^1.3.0",

+        "acorn": "^8.0.5",

+        "acorn-walk": "^8.0.2",

+        "address": "^1.1.2",

+        "autoprefixer": "^10.2.4",

+        "browserslist": "^4.16.3",

+        "case-sensitive-paths-webpack-plugin": "^2.3.0",

+        "cli-highlight": "^2.1.10",

+        "clipboardy": "^2.3.0",

+        "cliui": "^7.0.4",

+        "copy-webpack-plugin": "^9.0.1",

+        "css-loader": "^6.5.0",

+        "css-minimizer-webpack-plugin": "^3.0.2",

+        "cssnano": "^5.0.0",

+        "debug": "^4.1.1",

+        "default-gateway": "^6.0.3",

+        "dotenv": "^10.0.0",

+        "dotenv-expand": "^5.1.0",

+        "fs-extra": "^9.1.0",

+        "globby": "^11.0.2",

+        "hash-sum": "^2.0.0",

+        "html-webpack-plugin": "^5.1.0",

+        "is-file-esm": "^1.0.0",

+        "launch-editor-middleware": "^2.2.1",

+        "lodash.defaultsdeep": "^4.6.1",

+        "lodash.mapvalues": "^4.6.0",

+        "mini-css-extract-plugin": "^2.5.3",

+        "minimist": "^1.2.5",

+        "module-alias": "^2.2.2",

+        "portfinder": "^1.0.26",

+        "postcss": "^8.2.6",

+        "postcss-loader": "^6.1.1",

+        "progress-webpack-plugin": "^1.0.12",

+        "ssri": "^8.0.1",

+        "terser-webpack-plugin": "^5.1.1",

+        "thread-loader": "^3.0.0",

+        "vue-loader": "^17.0.0",

+        "vue-style-loader": "^4.1.3",

+        "webpack": "^5.54.0",

+        "webpack-bundle-analyzer": "^4.4.0",

+        "webpack-chain": "^6.5.1",

+        "webpack-dev-server": "^4.7.3",

+        "webpack-merge": "^5.7.3",

+        "webpack-virtual-modules": "^0.4.2",

+        "whatwg-fetch": "^3.6.2"

+      },

+      "bin": {

+        "vue-cli-service": "bin/vue-cli-service.js"

+      },

+      "engines": {

+        "node": "^12.0.0 || >= 14.0.0"

+      },

+      "peerDependencies": {

+        "vue-template-compiler": "^2.0.0",

+        "webpack-sources": "*"

+      },

+      "peerDependenciesMeta": {

+        "cache-loader": {

+          "optional": true

+        },

+        "less-loader": {

+          "optional": true

+        },

+        "pug-plain-loader": {

+          "optional": true

+        },

+        "raw-loader": {

+          "optional": true

+        },

+        "sass-loader": {

+          "optional": true

+        },

+        "stylus-loader": {

+          "optional": true

+        },

+        "vue-template-compiler": {

+          "optional": true

+        },

+        "webpack-sources": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/@vue/cli-shared-utils": {

+      "version": "5.0.8",

+      "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz",

+      "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==",

+      "dev": true,

+      "dependencies": {

+        "@achrinza/node-ipc": "^9.2.5",

+        "chalk": "^4.1.2",

+        "execa": "^1.0.0",

+        "joi": "^17.4.0",

+        "launch-editor": "^2.2.1",

+        "lru-cache": "^6.0.0",

+        "node-fetch": "^2.6.7",

+        "open": "^8.0.2",

+        "ora": "^5.3.0",

+        "read-pkg": "^5.1.1",

+        "semver": "^7.3.4",

+        "strip-ansi": "^6.0.0"

+      }

+    },

+    "node_modules/@vue/cli-shared-utils/node_modules/chalk": {

+      "version": "4.1.2",

+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",

+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",

+      "dev": true,

+      "dependencies": {

+        "ansi-styles": "^4.1.0",

+        "supports-color": "^7.1.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/chalk/chalk?sponsor=1"

+      }

+    },

+    "node_modules/@vue/cli-shared-utils/node_modules/lru-cache": {

+      "version": "6.0.0",

+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",

+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",

+      "dev": true,

+      "dependencies": {

+        "yallist": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/@vue/cli-shared-utils/node_modules/semver": {

+      "version": "7.7.2",

+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",

+      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",

+      "dev": true,

+      "bin": {

+        "semver": "bin/semver.js"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/@vue/cli-shared-utils/node_modules/yallist": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",

+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",

+      "dev": true

+    },

+    "node_modules/@vue/compiler-core": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.16.tgz",

+      "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==",

+      "dependencies": {

+        "@babel/parser": "^7.27.2",

+        "@vue/shared": "3.5.16",

+        "entities": "^4.5.0",

+        "estree-walker": "^2.0.2",

+        "source-map-js": "^1.2.1"

+      }

+    },

+    "node_modules/@vue/compiler-dom": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz",

+      "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==",

+      "dependencies": {

+        "@vue/compiler-core": "3.5.16",

+        "@vue/shared": "3.5.16"

+      }

+    },

+    "node_modules/@vue/compiler-sfc": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz",

+      "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==",

+      "dependencies": {

+        "@babel/parser": "^7.27.2",

+        "@vue/compiler-core": "3.5.16",

+        "@vue/compiler-dom": "3.5.16",

+        "@vue/compiler-ssr": "3.5.16",

+        "@vue/shared": "3.5.16",

+        "estree-walker": "^2.0.2",

+        "magic-string": "^0.30.17",

+        "postcss": "^8.5.3",

+        "source-map-js": "^1.2.1"

+      }

+    },

+    "node_modules/@vue/compiler-ssr": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz",

+      "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==",

+      "dependencies": {

+        "@vue/compiler-dom": "3.5.16",

+        "@vue/shared": "3.5.16"

+      }

+    },

+    "node_modules/@vue/component-compiler-utils": {

+      "version": "3.3.0",

+      "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",

+      "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==",

+      "dev": true,

+      "dependencies": {

+        "consolidate": "^0.15.1",

+        "hash-sum": "^1.0.2",

+        "lru-cache": "^4.1.2",

+        "merge-source-map": "^1.1.0",

+        "postcss": "^7.0.36",

+        "postcss-selector-parser": "^6.0.2",

+        "source-map": "~0.6.1",

+        "vue-template-es2015-compiler": "^1.9.0"

+      },

+      "optionalDependencies": {

+        "prettier": "^1.18.2 || ^2.0.0"

+      }

+    },

+    "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",

+      "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",

+      "dev": true

+    },

+    "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": {

+      "version": "4.1.5",

+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz",

+      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",

+      "dev": true,

+      "dependencies": {

+        "pseudomap": "^1.0.2",

+        "yallist": "^2.1.2"

+      }

+    },

+    "node_modules/@vue/component-compiler-utils/node_modules/picocolors": {

+      "version": "0.2.1",

+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz",

+      "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",

+      "dev": true

+    },

+    "node_modules/@vue/component-compiler-utils/node_modules/postcss": {

+      "version": "7.0.39",

+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz",

+      "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",

+      "dev": true,

+      "dependencies": {

+        "picocolors": "^0.2.1",

+        "source-map": "^0.6.1"

+      },

+      "engines": {

+        "node": ">=6.0.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/postcss/"

+      }

+    },

+    "node_modules/@vue/component-compiler-utils/node_modules/yallist": {

+      "version": "2.1.2",

+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz",

+      "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",

+      "dev": true

+    },

+    "node_modules/@vue/devtools-api": {

+      "version": "6.6.4",

+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",

+      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="

+    },

+    "node_modules/@vue/reactivity": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.16.tgz",

+      "integrity": "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==",

+      "dependencies": {

+        "@vue/shared": "3.5.16"

+      }

+    },

+    "node_modules/@vue/runtime-core": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.16.tgz",

+      "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==",

+      "dependencies": {

+        "@vue/reactivity": "3.5.16",

+        "@vue/shared": "3.5.16"

+      }

+    },

+    "node_modules/@vue/runtime-dom": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz",

+      "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==",

+      "dependencies": {

+        "@vue/reactivity": "3.5.16",

+        "@vue/runtime-core": "3.5.16",

+        "@vue/shared": "3.5.16",

+        "csstype": "^3.1.3"

+      }

+    },

+    "node_modules/@vue/server-renderer": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.16.tgz",

+      "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==",

+      "dependencies": {

+        "@vue/compiler-ssr": "3.5.16",

+        "@vue/shared": "3.5.16"

+      },

+      "peerDependencies": {

+        "vue": "3.5.16"

+      }

+    },

+    "node_modules/@vue/shared": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.16.tgz",

+      "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg=="

+    },

+    "node_modules/@vue/vue-loader-v15": {

+      "name": "vue-loader",

+      "version": "15.11.1",

+      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz",

+      "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==",

+      "dev": true,

+      "dependencies": {

+        "@vue/component-compiler-utils": "^3.1.0",

+        "hash-sum": "^1.0.2",

+        "loader-utils": "^1.1.0",

+        "vue-hot-reload-api": "^2.3.0",

+        "vue-style-loader": "^4.1.0"

+      },

+      "peerDependencies": {

+        "css-loader": "*",

+        "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0"

+      },

+      "peerDependenciesMeta": {

+        "cache-loader": {

+          "optional": true

+        },

+        "prettier": {

+          "optional": true

+        },

+        "vue-template-compiler": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",

+      "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",

+      "dev": true

+    },

+    "node_modules/@vue/web-component-wrapper": {

+      "version": "1.3.0",

+      "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",

+      "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==",

+      "dev": true

+    },

+    "node_modules/@vueuse/core": {

+      "version": "9.13.0",

+      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",

+      "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",

+      "dependencies": {

+        "@types/web-bluetooth": "^0.0.16",

+        "@vueuse/metadata": "9.13.0",

+        "@vueuse/shared": "9.13.0",

+        "vue-demi": "*"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/antfu"

+      }

+    },

+    "node_modules/@vueuse/core/node_modules/vue-demi": {

+      "version": "0.14.10",

+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",

+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",

+      "hasInstallScript": true,

+      "bin": {

+        "vue-demi-fix": "bin/vue-demi-fix.js",

+        "vue-demi-switch": "bin/vue-demi-switch.js"

+      },

+      "engines": {

+        "node": ">=12"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/antfu"

+      },

+      "peerDependencies": {

+        "@vue/composition-api": "^1.0.0-rc.1",

+        "vue": "^3.0.0-0 || ^2.6.0"

+      },

+      "peerDependenciesMeta": {

+        "@vue/composition-api": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/@vueuse/metadata": {

+      "version": "9.13.0",

+      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",

+      "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",

+      "funding": {

+        "url": "https://github.com/sponsors/antfu"

+      }

+    },

+    "node_modules/@vueuse/shared": {

+      "version": "9.13.0",

+      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",

+      "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",

+      "dependencies": {

+        "vue-demi": "*"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/antfu"

+      }

+    },

+    "node_modules/@vueuse/shared/node_modules/vue-demi": {

+      "version": "0.14.10",

+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",

+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",

+      "hasInstallScript": true,

+      "bin": {

+        "vue-demi-fix": "bin/vue-demi-fix.js",

+        "vue-demi-switch": "bin/vue-demi-switch.js"

+      },

+      "engines": {

+        "node": ">=12"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/antfu"

+      },

+      "peerDependencies": {

+        "@vue/composition-api": "^1.0.0-rc.1",

+        "vue": "^3.0.0-0 || ^2.6.0"

+      },

+      "peerDependenciesMeta": {

+        "@vue/composition-api": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/@webassemblyjs/ast": {

+      "version": "1.14.1",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz",

+      "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",

+      "dev": true,

+      "dependencies": {

+        "@webassemblyjs/helper-numbers": "1.13.2",

+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2"

+      }

+    },

+    "node_modules/@webassemblyjs/floating-point-hex-parser": {

+      "version": "1.13.2",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",

+      "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",

+      "dev": true

+    },

+    "node_modules/@webassemblyjs/helper-api-error": {

+      "version": "1.13.2",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",

+      "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",

+      "dev": true

+    },

+    "node_modules/@webassemblyjs/helper-buffer": {

+      "version": "1.14.1",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",

+      "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",

+      "dev": true

+    },

+    "node_modules/@webassemblyjs/helper-numbers": {

+      "version": "1.13.2",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",

+      "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",

+      "dev": true,

+      "dependencies": {

+        "@webassemblyjs/floating-point-hex-parser": "1.13.2",

+        "@webassemblyjs/helper-api-error": "1.13.2",

+        "@xtuc/long": "4.2.2"

+      }

+    },

+    "node_modules/@webassemblyjs/helper-wasm-bytecode": {

+      "version": "1.13.2",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",

+      "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",

+      "dev": true

+    },

+    "node_modules/@webassemblyjs/helper-wasm-section": {

+      "version": "1.14.1",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",

+      "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",

+      "dev": true,

+      "dependencies": {

+        "@webassemblyjs/ast": "1.14.1",

+        "@webassemblyjs/helper-buffer": "1.14.1",

+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",

+        "@webassemblyjs/wasm-gen": "1.14.1"

+      }

+    },

+    "node_modules/@webassemblyjs/ieee754": {

+      "version": "1.13.2",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",

+      "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",

+      "dev": true,

+      "dependencies": {

+        "@xtuc/ieee754": "^1.2.0"

+      }

+    },

+    "node_modules/@webassemblyjs/leb128": {

+      "version": "1.13.2",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",

+      "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",

+      "dev": true,

+      "dependencies": {

+        "@xtuc/long": "4.2.2"

+      }

+    },

+    "node_modules/@webassemblyjs/utf8": {

+      "version": "1.13.2",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",

+      "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",

+      "dev": true

+    },

+    "node_modules/@webassemblyjs/wasm-edit": {

+      "version": "1.14.1",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",

+      "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",

+      "dev": true,

+      "dependencies": {

+        "@webassemblyjs/ast": "1.14.1",

+        "@webassemblyjs/helper-buffer": "1.14.1",

+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",

+        "@webassemblyjs/helper-wasm-section": "1.14.1",

+        "@webassemblyjs/wasm-gen": "1.14.1",

+        "@webassemblyjs/wasm-opt": "1.14.1",

+        "@webassemblyjs/wasm-parser": "1.14.1",

+        "@webassemblyjs/wast-printer": "1.14.1"

+      }

+    },

+    "node_modules/@webassemblyjs/wasm-gen": {

+      "version": "1.14.1",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",

+      "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",

+      "dev": true,

+      "dependencies": {

+        "@webassemblyjs/ast": "1.14.1",

+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",

+        "@webassemblyjs/ieee754": "1.13.2",

+        "@webassemblyjs/leb128": "1.13.2",

+        "@webassemblyjs/utf8": "1.13.2"

+      }

+    },

+    "node_modules/@webassemblyjs/wasm-opt": {

+      "version": "1.14.1",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",

+      "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",

+      "dev": true,

+      "dependencies": {

+        "@webassemblyjs/ast": "1.14.1",

+        "@webassemblyjs/helper-buffer": "1.14.1",

+        "@webassemblyjs/wasm-gen": "1.14.1",

+        "@webassemblyjs/wasm-parser": "1.14.1"

+      }

+    },

+    "node_modules/@webassemblyjs/wasm-parser": {

+      "version": "1.14.1",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",

+      "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",

+      "dev": true,

+      "dependencies": {

+        "@webassemblyjs/ast": "1.14.1",

+        "@webassemblyjs/helper-api-error": "1.13.2",

+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",

+        "@webassemblyjs/ieee754": "1.13.2",

+        "@webassemblyjs/leb128": "1.13.2",

+        "@webassemblyjs/utf8": "1.13.2"

+      }

+    },

+    "node_modules/@webassemblyjs/wast-printer": {

+      "version": "1.14.1",

+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",

+      "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",

+      "dev": true,

+      "dependencies": {

+        "@webassemblyjs/ast": "1.14.1",

+        "@xtuc/long": "4.2.2"

+      }

+    },

+    "node_modules/@xtuc/ieee754": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",

+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",

+      "dev": true

+    },

+    "node_modules/@xtuc/long": {

+      "version": "4.2.2",

+      "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",

+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",

+      "dev": true

+    },

+    "node_modules/accepts": {

+      "version": "1.3.8",

+      "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",

+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",

+      "dev": true,

+      "dependencies": {

+        "mime-types": "~2.1.34",

+        "negotiator": "0.6.3"

+      },

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/accepts/node_modules/negotiator": {

+      "version": "0.6.3",

+      "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",

+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/acorn": {

+      "version": "8.14.1",

+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz",

+      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",

+      "dev": true,

+      "bin": {

+        "acorn": "bin/acorn"

+      },

+      "engines": {

+        "node": ">=0.4.0"

+      }

+    },

+    "node_modules/acorn-walk": {

+      "version": "8.3.4",

+      "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz",

+      "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",

+      "dev": true,

+      "dependencies": {

+        "acorn": "^8.11.0"

+      },

+      "engines": {

+        "node": ">=0.4.0"

+      }

+    },

+    "node_modules/address": {

+      "version": "1.2.2",

+      "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz",

+      "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 10.0.0"

+      }

+    },

+    "node_modules/ajv": {

+      "version": "6.12.6",

+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",

+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.1",

+        "fast-json-stable-stringify": "^2.0.0",

+        "json-schema-traverse": "^0.4.1",

+        "uri-js": "^4.2.2"

+      },

+      "funding": {

+        "type": "github",

+        "url": "https://github.com/sponsors/epoberezkin"

+      }

+    },

+    "node_modules/ajv-formats": {

+      "version": "2.1.1",

+      "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz",

+      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",

+      "dev": true,

+      "dependencies": {

+        "ajv": "^8.0.0"

+      },

+      "peerDependencies": {

+        "ajv": "^8.0.0"

+      },

+      "peerDependenciesMeta": {

+        "ajv": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/ajv-formats/node_modules/ajv": {

+      "version": "8.17.1",

+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",

+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3",

+        "fast-uri": "^3.0.1",

+        "json-schema-traverse": "^1.0.0",

+        "require-from-string": "^2.0.2"

+      },

+      "funding": {

+        "type": "github",

+        "url": "https://github.com/sponsors/epoberezkin"

+      }

+    },

+    "node_modules/ajv-formats/node_modules/json-schema-traverse": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",

+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",

+      "dev": true

+    },

+    "node_modules/ajv-keywords": {

+      "version": "3.5.2",

+      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",

+      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",

+      "dev": true,

+      "peerDependencies": {

+        "ajv": "^6.9.1"

+      }

+    },

+    "node_modules/ansi-escapes": {

+      "version": "3.2.0",

+      "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz",

+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/ansi-html-community": {

+      "version": "0.0.8",

+      "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz",

+      "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",

+      "dev": true,

+      "engines": [

+        "node >= 0.8.0"

+      ],

+      "bin": {

+        "ansi-html": "bin/ansi-html"

+      }

+    },

+    "node_modules/ansi-regex": {

+      "version": "5.0.1",

+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",

+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/ansi-styles": {

+      "version": "4.3.0",

+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",

+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",

+      "dev": true,

+      "dependencies": {

+        "color-convert": "^2.0.1"

+      },

+      "engines": {

+        "node": ">=8"

+      },

+      "funding": {

+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"

+      }

+    },

+    "node_modules/any-promise": {

+      "version": "1.3.0",

+      "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",

+      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",

+      "dev": true

+    },

+    "node_modules/anymatch": {

+      "version": "3.1.3",

+      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",

+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",

+      "dev": true,

+      "dependencies": {

+        "normalize-path": "^3.0.0",

+        "picomatch": "^2.0.4"

+      },

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/arch": {

+      "version": "2.2.0",

+      "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz",

+      "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/feross"

+        },

+        {

+          "type": "patreon",

+          "url": "https://www.patreon.com/feross"

+        },

+        {

+          "type": "consulting",

+          "url": "https://feross.org/support"

+        }

+      ]

+    },

+    "node_modules/array-flatten": {

+      "version": "1.1.1",

+      "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",

+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",

+      "dev": true

+    },

+    "node_modules/array-union": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz",

+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/async": {

+      "version": "3.2.6",

+      "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz",

+      "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",

+      "dev": true

+    },

+    "node_modules/async-validator": {

+      "version": "4.2.5",

+      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",

+      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="

+    },

+    "node_modules/asynckit": {

+      "version": "0.4.0",

+      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",

+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="

+    },

+    "node_modules/at-least-node": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",

+      "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 4.0.0"

+      }

+    },

+    "node_modules/autoprefixer": {

+      "version": "10.4.21",

+      "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.21.tgz",

+      "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "opencollective",

+          "url": "https://opencollective.com/postcss/"

+        },

+        {

+          "type": "tidelift",

+          "url": "https://tidelift.com/funding/github/npm/autoprefixer"

+        },

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/ai"

+        }

+      ],

+      "dependencies": {

+        "browserslist": "^4.24.4",

+        "caniuse-lite": "^1.0.30001702",

+        "fraction.js": "^4.3.7",

+        "normalize-range": "^0.1.2",

+        "picocolors": "^1.1.1",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "bin": {

+        "autoprefixer": "bin/autoprefixer"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14"

+      },

+      "peerDependencies": {

+        "postcss": "^8.1.0"

+      }

+    },

+    "node_modules/axios": {

+      "version": "1.9.0",

+      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.9.0.tgz",

+      "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",

+      "dependencies": {

+        "follow-redirects": "^1.15.6",

+        "form-data": "^4.0.0",

+        "proxy-from-env": "^1.1.0"

+      }

+    },

+    "node_modules/babel-loader": {

+      "version": "8.4.1",

+      "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz",

+      "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==",

+      "dev": true,

+      "dependencies": {

+        "find-cache-dir": "^3.3.1",

+        "loader-utils": "^2.0.4",

+        "make-dir": "^3.1.0",

+        "schema-utils": "^2.6.5"

+      },

+      "engines": {

+        "node": ">= 8.9"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.0.0",

+        "webpack": ">=2"

+      }

+    },

+    "node_modules/babel-loader/node_modules/loader-utils": {

+      "version": "2.0.4",

+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",

+      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",

+      "dev": true,

+      "dependencies": {

+        "big.js": "^5.2.2",

+        "emojis-list": "^3.0.0",

+        "json5": "^2.1.2"

+      },

+      "engines": {

+        "node": ">=8.9.0"

+      }

+    },

+    "node_modules/babel-plugin-dynamic-import-node": {

+      "version": "2.3.3",

+      "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",

+      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",

+      "dev": true,

+      "dependencies": {

+        "object.assign": "^4.1.0"

+      }

+    },

+    "node_modules/babel-plugin-polyfill-corejs2": {

+      "version": "0.4.13",

+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz",

+      "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==",

+      "dev": true,

+      "dependencies": {

+        "@babel/compat-data": "^7.22.6",

+        "@babel/helper-define-polyfill-provider": "^0.6.4",

+        "semver": "^6.3.1"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"

+      }

+    },

+    "node_modules/babel-plugin-polyfill-corejs3": {

+      "version": "0.11.1",

+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz",

+      "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-define-polyfill-provider": "^0.6.3",

+        "core-js-compat": "^3.40.0"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"

+      }

+    },

+    "node_modules/babel-plugin-polyfill-regenerator": {

+      "version": "0.6.4",

+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz",

+      "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==",

+      "dev": true,

+      "dependencies": {

+        "@babel/helper-define-polyfill-provider": "^0.6.4"

+      },

+      "peerDependencies": {

+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"

+      }

+    },

+    "node_modules/balanced-match": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",

+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",

+      "dev": true

+    },

+    "node_modules/base64-js": {

+      "version": "1.5.1",

+      "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",

+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/feross"

+        },

+        {

+          "type": "patreon",

+          "url": "https://www.patreon.com/feross"

+        },

+        {

+          "type": "consulting",

+          "url": "https://feross.org/support"

+        }

+      ]

+    },

+    "node_modules/batch": {

+      "version": "0.6.1",

+      "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz",

+      "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",

+      "dev": true

+    },

+    "node_modules/big.js": {

+      "version": "5.2.2",

+      "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz",

+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",

+      "dev": true,

+      "engines": {

+        "node": "*"

+      }

+    },

+    "node_modules/binary-extensions": {

+      "version": "2.3.0",

+      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",

+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/bl": {

+      "version": "4.1.0",

+      "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",

+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",

+      "dev": true,

+      "dependencies": {

+        "buffer": "^5.5.0",

+        "inherits": "^2.0.4",

+        "readable-stream": "^3.4.0"

+      }

+    },

+    "node_modules/bluebird": {

+      "version": "3.7.2",

+      "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz",

+      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",

+      "dev": true

+    },

+    "node_modules/body-parser": {

+      "version": "1.20.3",

+      "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz",

+      "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",

+      "dev": true,

+      "dependencies": {

+        "bytes": "3.1.2",

+        "content-type": "~1.0.5",

+        "debug": "2.6.9",

+        "depd": "2.0.0",

+        "destroy": "1.2.0",

+        "http-errors": "2.0.0",

+        "iconv-lite": "0.4.24",

+        "on-finished": "2.4.1",

+        "qs": "6.13.0",

+        "raw-body": "2.5.2",

+        "type-is": "~1.6.18",

+        "unpipe": "1.0.0"

+      },

+      "engines": {

+        "node": ">= 0.8",

+        "npm": "1.2.8000 || >= 1.4.16"

+      }

+    },

+    "node_modules/body-parser/node_modules/debug": {

+      "version": "2.6.9",

+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",

+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",

+      "dev": true,

+      "dependencies": {

+        "ms": "2.0.0"

+      }

+    },

+    "node_modules/body-parser/node_modules/ms": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",

+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",

+      "dev": true

+    },

+    "node_modules/bonjour-service": {

+      "version": "1.3.0",

+      "resolved": "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.3.0.tgz",

+      "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3",

+        "multicast-dns": "^7.2.5"

+      }

+    },

+    "node_modules/boolbase": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",

+      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",

+      "dev": true

+    },

+    "node_modules/brace-expansion": {

+      "version": "1.1.11",

+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",

+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",

+      "dev": true,

+      "dependencies": {

+        "balanced-match": "^1.0.0",

+        "concat-map": "0.0.1"

+      }

+    },

+    "node_modules/braces": {

+      "version": "3.0.3",

+      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",

+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",

+      "dev": true,

+      "dependencies": {

+        "fill-range": "^7.1.1"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/browserslist": {

+      "version": "4.25.0",

+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.0.tgz",

+      "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "opencollective",

+          "url": "https://opencollective.com/browserslist"

+        },

+        {

+          "type": "tidelift",

+          "url": "https://tidelift.com/funding/github/npm/browserslist"

+        },

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/ai"

+        }

+      ],

+      "dependencies": {

+        "caniuse-lite": "^1.0.30001718",

+        "electron-to-chromium": "^1.5.160",

+        "node-releases": "^2.0.19",

+        "update-browserslist-db": "^1.1.3"

+      },

+      "bin": {

+        "browserslist": "cli.js"

+      },

+      "engines": {

+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"

+      }

+    },

+    "node_modules/buffer": {

+      "version": "5.7.1",

+      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",

+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/feross"

+        },

+        {

+          "type": "patreon",

+          "url": "https://www.patreon.com/feross"

+        },

+        {

+          "type": "consulting",

+          "url": "https://feross.org/support"

+        }

+      ],

+      "dependencies": {

+        "base64-js": "^1.3.1",

+        "ieee754": "^1.1.13"

+      }

+    },

+    "node_modules/buffer-from": {

+      "version": "1.1.2",

+      "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",

+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",

+      "dev": true

+    },

+    "node_modules/bytes": {

+      "version": "3.1.2",

+      "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",

+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/call-bind": {

+      "version": "1.0.8",

+      "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz",

+      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",

+      "dev": true,

+      "dependencies": {

+        "call-bind-apply-helpers": "^1.0.0",

+        "es-define-property": "^1.0.0",

+        "get-intrinsic": "^1.2.4",

+        "set-function-length": "^1.2.2"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/call-bind-apply-helpers": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",

+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",

+      "dependencies": {

+        "es-errors": "^1.3.0",

+        "function-bind": "^1.1.2"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/call-bound": {

+      "version": "1.0.4",

+      "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz",

+      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",

+      "dev": true,

+      "dependencies": {

+        "call-bind-apply-helpers": "^1.0.2",

+        "get-intrinsic": "^1.3.0"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/callsites": {

+      "version": "3.1.0",

+      "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",

+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/camel-case": {

+      "version": "4.1.2",

+      "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz",

+      "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",

+      "dev": true,

+      "dependencies": {

+        "pascal-case": "^3.1.2",

+        "tslib": "^2.0.3"

+      }

+    },

+    "node_modules/camelcase": {

+      "version": "5.3.1",

+      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",

+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/caniuse-api": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz",

+      "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.0.0",

+        "caniuse-lite": "^1.0.0",

+        "lodash.memoize": "^4.1.2",

+        "lodash.uniq": "^4.5.0"

+      }

+    },

+    "node_modules/caniuse-lite": {

+      "version": "1.0.30001720",

+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz",

+      "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "opencollective",

+          "url": "https://opencollective.com/browserslist"

+        },

+        {

+          "type": "tidelift",

+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"

+        },

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/ai"

+        }

+      ]

+    },

+    "node_modules/case-sensitive-paths-webpack-plugin": {

+      "version": "2.4.0",

+      "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",

+      "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/chalk": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz",

+      "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",

+      "dev": true,

+      "dependencies": {

+        "ansi-styles": "^4.1.0",

+        "supports-color": "^7.1.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/chokidar": {

+      "version": "3.6.0",

+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",

+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",

+      "dev": true,

+      "dependencies": {

+        "anymatch": "~3.1.2",

+        "braces": "~3.0.2",

+        "glob-parent": "~5.1.2",

+        "is-binary-path": "~2.1.0",

+        "is-glob": "~4.0.1",

+        "normalize-path": "~3.0.0",

+        "readdirp": "~3.6.0"

+      },

+      "engines": {

+        "node": ">= 8.10.0"

+      },

+      "funding": {

+        "url": "https://paulmillr.com/funding/"

+      },

+      "optionalDependencies": {

+        "fsevents": "~2.3.2"

+      }

+    },

+    "node_modules/chokidar/node_modules/glob-parent": {

+      "version": "5.1.2",

+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",

+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",

+      "dev": true,

+      "dependencies": {

+        "is-glob": "^4.0.1"

+      },

+      "engines": {

+        "node": ">= 6"

+      }

+    },

+    "node_modules/chrome-trace-event": {

+      "version": "1.0.4",

+      "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",

+      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.0"

+      }

+    },

+    "node_modules/clean-css": {

+      "version": "5.3.3",

+      "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz",

+      "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",

+      "dev": true,

+      "dependencies": {

+        "source-map": "~0.6.0"

+      },

+      "engines": {

+        "node": ">= 10.0"

+      }

+    },

+    "node_modules/cli-cursor": {

+      "version": "3.1.0",

+      "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz",

+      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",

+      "dev": true,

+      "dependencies": {

+        "restore-cursor": "^3.1.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/cli-highlight": {

+      "version": "2.1.11",

+      "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz",

+      "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",

+      "dev": true,

+      "dependencies": {

+        "chalk": "^4.0.0",

+        "highlight.js": "^10.7.1",

+        "mz": "^2.4.0",

+        "parse5": "^5.1.1",

+        "parse5-htmlparser2-tree-adapter": "^6.0.0",

+        "yargs": "^16.0.0"

+      },

+      "bin": {

+        "highlight": "bin/highlight"

+      },

+      "engines": {

+        "node": ">=8.0.0",

+        "npm": ">=5.0.0"

+      }

+    },

+    "node_modules/cli-highlight/node_modules/chalk": {

+      "version": "4.1.2",

+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",

+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",

+      "dev": true,

+      "dependencies": {

+        "ansi-styles": "^4.1.0",

+        "supports-color": "^7.1.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/chalk/chalk?sponsor=1"

+      }

+    },

+    "node_modules/cli-spinners": {

+      "version": "2.9.2",

+      "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz",

+      "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/clipboardy": {

+      "version": "2.3.0",

+      "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz",

+      "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",

+      "dev": true,

+      "dependencies": {

+        "arch": "^2.1.1",

+        "execa": "^1.0.0",

+        "is-wsl": "^2.1.1"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/cliui": {

+      "version": "7.0.4",

+      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz",

+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",

+      "dev": true,

+      "dependencies": {

+        "string-width": "^4.2.0",

+        "strip-ansi": "^6.0.0",

+        "wrap-ansi": "^7.0.0"

+      }

+    },

+    "node_modules/clone": {

+      "version": "1.0.4",

+      "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz",

+      "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.8"

+      }

+    },

+    "node_modules/clone-deep": {

+      "version": "4.0.1",

+      "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz",

+      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",

+      "dev": true,

+      "dependencies": {

+        "is-plain-object": "^2.0.4",

+        "kind-of": "^6.0.2",

+        "shallow-clone": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/color-convert": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",

+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",

+      "dev": true,

+      "dependencies": {

+        "color-name": "~1.1.4"

+      },

+      "engines": {

+        "node": ">=7.0.0"

+      }

+    },

+    "node_modules/color-name": {

+      "version": "1.1.4",

+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",

+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",

+      "dev": true

+    },

+    "node_modules/colord": {

+      "version": "2.9.3",

+      "resolved": "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz",

+      "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",

+      "dev": true

+    },

+    "node_modules/colorette": {

+      "version": "2.0.20",

+      "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz",

+      "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",

+      "dev": true

+    },

+    "node_modules/combined-stream": {

+      "version": "1.0.8",

+      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",

+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",

+      "dependencies": {

+        "delayed-stream": "~1.0.0"

+      },

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/commander": {

+      "version": "8.3.0",

+      "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz",

+      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",

+      "dev": true,

+      "engines": {

+        "node": ">= 12"

+      }

+    },

+    "node_modules/commondir": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz",

+      "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",

+      "dev": true

+    },

+    "node_modules/compressible": {

+      "version": "2.0.18",

+      "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz",

+      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",

+      "dev": true,

+      "dependencies": {

+        "mime-db": ">= 1.43.0 < 2"

+      },

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/compression": {

+      "version": "1.8.0",

+      "resolved": "https://registry.npmmirror.com/compression/-/compression-1.8.0.tgz",

+      "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==",

+      "dev": true,

+      "dependencies": {

+        "bytes": "3.1.2",

+        "compressible": "~2.0.18",

+        "debug": "2.6.9",

+        "negotiator": "~0.6.4",

+        "on-headers": "~1.0.2",

+        "safe-buffer": "5.2.1",

+        "vary": "~1.1.2"

+      },

+      "engines": {

+        "node": ">= 0.8.0"

+      }

+    },

+    "node_modules/compression/node_modules/debug": {

+      "version": "2.6.9",

+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",

+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",

+      "dev": true,

+      "dependencies": {

+        "ms": "2.0.0"

+      }

+    },

+    "node_modules/compression/node_modules/ms": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",

+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",

+      "dev": true

+    },

+    "node_modules/concat-map": {

+      "version": "0.0.1",

+      "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",

+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",

+      "dev": true

+    },

+    "node_modules/connect-history-api-fallback": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",

+      "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.8"

+      }

+    },

+    "node_modules/consolidate": {

+      "version": "0.15.1",

+      "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz",

+      "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",

+      "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog",

+      "dev": true,

+      "dependencies": {

+        "bluebird": "^3.1.1"

+      },

+      "engines": {

+        "node": ">= 0.10.0"

+      }

+    },

+    "node_modules/content-disposition": {

+      "version": "0.5.4",

+      "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",

+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",

+      "dev": true,

+      "dependencies": {

+        "safe-buffer": "5.2.1"

+      },

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/content-type": {

+      "version": "1.0.5",

+      "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",

+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/convert-source-map": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",

+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",

+      "dev": true

+    },

+    "node_modules/cookie": {

+      "version": "0.7.1",

+      "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz",

+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/cookie-signature": {

+      "version": "1.0.6",

+      "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",

+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",

+      "dev": true

+    },

+    "node_modules/copy-webpack-plugin": {

+      "version": "9.1.0",

+      "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz",

+      "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==",

+      "dev": true,

+      "dependencies": {

+        "fast-glob": "^3.2.7",

+        "glob-parent": "^6.0.1",

+        "globby": "^11.0.3",

+        "normalize-path": "^3.0.0",

+        "schema-utils": "^3.1.1",

+        "serialize-javascript": "^6.0.0"

+      },

+      "engines": {

+        "node": ">= 12.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "webpack": "^5.1.0"

+      }

+    },

+    "node_modules/copy-webpack-plugin/node_modules/schema-utils": {

+      "version": "3.3.0",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",

+      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.8",

+        "ajv": "^6.12.5",

+        "ajv-keywords": "^3.5.2"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/core-js": {

+      "version": "3.42.0",

+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.42.0.tgz",

+      "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==",

+      "hasInstallScript": true,

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/core-js"

+      }

+    },

+    "node_modules/core-js-compat": {

+      "version": "3.42.0",

+      "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.42.0.tgz",

+      "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.24.4"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/core-js"

+      }

+    },

+    "node_modules/core-util-is": {

+      "version": "1.0.3",

+      "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",

+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",

+      "dev": true

+    },

+    "node_modules/cosmiconfig": {

+      "version": "7.1.0",

+      "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz",

+      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",

+      "dev": true,

+      "dependencies": {

+        "@types/parse-json": "^4.0.0",

+        "import-fresh": "^3.2.1",

+        "parse-json": "^5.0.0",

+        "path-type": "^4.0.0",

+        "yaml": "^1.10.0"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/cosmiconfig/node_modules/yaml": {

+      "version": "1.10.2",

+      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz",

+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 6"

+      }

+    },

+    "node_modules/cross-spawn": {

+      "version": "6.0.6",

+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.6.tgz",

+      "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",

+      "dev": true,

+      "dependencies": {

+        "nice-try": "^1.0.4",

+        "path-key": "^2.0.1",

+        "semver": "^5.5.0",

+        "shebang-command": "^1.2.0",

+        "which": "^1.2.9"

+      },

+      "engines": {

+        "node": ">=4.8"

+      }

+    },

+    "node_modules/cross-spawn/node_modules/semver": {

+      "version": "5.7.2",

+      "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",

+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",

+      "dev": true,

+      "bin": {

+        "semver": "bin/semver"

+      }

+    },

+    "node_modules/css-declaration-sorter": {

+      "version": "6.4.1",

+      "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",

+      "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >=14"

+      },

+      "peerDependencies": {

+        "postcss": "^8.0.9"

+      }

+    },

+    "node_modules/css-loader": {

+      "version": "6.11.0",

+      "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz",

+      "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",

+      "dev": true,

+      "dependencies": {

+        "icss-utils": "^5.1.0",

+        "postcss": "^8.4.33",

+        "postcss-modules-extract-imports": "^3.1.0",

+        "postcss-modules-local-by-default": "^4.0.5",

+        "postcss-modules-scope": "^3.2.0",

+        "postcss-modules-values": "^4.0.0",

+        "postcss-value-parser": "^4.2.0",

+        "semver": "^7.5.4"

+      },

+      "engines": {

+        "node": ">= 12.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "@rspack/core": "0.x || 1.x",

+        "webpack": "^5.0.0"

+      },

+      "peerDependenciesMeta": {

+        "@rspack/core": {

+          "optional": true

+        },

+        "webpack": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/css-loader/node_modules/semver": {

+      "version": "7.7.2",

+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",

+      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",

+      "dev": true,

+      "bin": {

+        "semver": "bin/semver.js"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/css-minimizer-webpack-plugin": {

+      "version": "3.4.1",

+      "resolved": "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz",

+      "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==",

+      "dev": true,

+      "dependencies": {

+        "cssnano": "^5.0.6",

+        "jest-worker": "^27.0.2",

+        "postcss": "^8.3.5",

+        "schema-utils": "^4.0.0",

+        "serialize-javascript": "^6.0.0",

+        "source-map": "^0.6.1"

+      },

+      "engines": {

+        "node": ">= 12.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "webpack": "^5.0.0"

+      },

+      "peerDependenciesMeta": {

+        "@parcel/css": {

+          "optional": true

+        },

+        "clean-css": {

+          "optional": true

+        },

+        "csso": {

+          "optional": true

+        },

+        "esbuild": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": {

+      "version": "8.17.1",

+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",

+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3",

+        "fast-uri": "^3.0.1",

+        "json-schema-traverse": "^1.0.0",

+        "require-from-string": "^2.0.2"

+      },

+      "funding": {

+        "type": "github",

+        "url": "https://github.com/sponsors/epoberezkin"

+      }

+    },

+    "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",

+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3"

+      },

+      "peerDependencies": {

+        "ajv": "^8.8.2"

+      }

+    },

+    "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",

+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",

+      "dev": true

+    },

+    "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": {

+      "version": "4.3.2",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",

+      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.9",

+        "ajv": "^8.9.0",

+        "ajv-formats": "^2.1.1",

+        "ajv-keywords": "^5.1.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/css-select": {

+      "version": "4.3.0",

+      "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz",

+      "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",

+      "dev": true,

+      "dependencies": {

+        "boolbase": "^1.0.0",

+        "css-what": "^6.0.1",

+        "domhandler": "^4.3.1",

+        "domutils": "^2.8.0",

+        "nth-check": "^2.0.1"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/fb55"

+      }

+    },

+    "node_modules/css-tree": {

+      "version": "1.1.3",

+      "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz",

+      "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",

+      "dev": true,

+      "dependencies": {

+        "mdn-data": "2.0.14",

+        "source-map": "^0.6.1"

+      },

+      "engines": {

+        "node": ">=8.0.0"

+      }

+    },

+    "node_modules/css-what": {

+      "version": "6.1.0",

+      "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz",

+      "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",

+      "dev": true,

+      "engines": {

+        "node": ">= 6"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/fb55"

+      }

+    },

+    "node_modules/cssesc": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",

+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",

+      "dev": true,

+      "bin": {

+        "cssesc": "bin/cssesc"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/cssnano": {

+      "version": "5.1.15",

+      "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz",

+      "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==",

+      "dev": true,

+      "dependencies": {

+        "cssnano-preset-default": "^5.2.14",

+        "lilconfig": "^2.0.3",

+        "yaml": "^1.10.2"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/cssnano"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/cssnano-preset-default": {

+      "version": "5.2.14",

+      "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz",

+      "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==",

+      "dev": true,

+      "dependencies": {

+        "css-declaration-sorter": "^6.3.1",

+        "cssnano-utils": "^3.1.0",

+        "postcss-calc": "^8.2.3",

+        "postcss-colormin": "^5.3.1",

+        "postcss-convert-values": "^5.1.3",

+        "postcss-discard-comments": "^5.1.2",

+        "postcss-discard-duplicates": "^5.1.0",

+        "postcss-discard-empty": "^5.1.1",

+        "postcss-discard-overridden": "^5.1.0",

+        "postcss-merge-longhand": "^5.1.7",

+        "postcss-merge-rules": "^5.1.4",

+        "postcss-minify-font-values": "^5.1.0",

+        "postcss-minify-gradients": "^5.1.1",

+        "postcss-minify-params": "^5.1.4",

+        "postcss-minify-selectors": "^5.2.1",

+        "postcss-normalize-charset": "^5.1.0",

+        "postcss-normalize-display-values": "^5.1.0",

+        "postcss-normalize-positions": "^5.1.1",

+        "postcss-normalize-repeat-style": "^5.1.1",

+        "postcss-normalize-string": "^5.1.0",

+        "postcss-normalize-timing-functions": "^5.1.0",

+        "postcss-normalize-unicode": "^5.1.1",

+        "postcss-normalize-url": "^5.1.0",

+        "postcss-normalize-whitespace": "^5.1.1",

+        "postcss-ordered-values": "^5.1.3",

+        "postcss-reduce-initial": "^5.1.2",

+        "postcss-reduce-transforms": "^5.1.0",

+        "postcss-svgo": "^5.1.0",

+        "postcss-unique-selectors": "^5.1.1"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/cssnano-utils": {

+      "version": "3.1.0",

+      "resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz",

+      "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/cssnano/node_modules/yaml": {

+      "version": "1.10.2",

+      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz",

+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 6"

+      }

+    },

+    "node_modules/csso": {

+      "version": "4.2.0",

+      "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz",

+      "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",

+      "dev": true,

+      "dependencies": {

+        "css-tree": "^1.1.2"

+      },

+      "engines": {

+        "node": ">=8.0.0"

+      }

+    },

+    "node_modules/csstype": {

+      "version": "3.1.3",

+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",

+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="

+    },

+    "node_modules/dayjs": {

+      "version": "1.11.13",

+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",

+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="

+    },

+    "node_modules/debounce": {

+      "version": "1.2.1",

+      "resolved": "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz",

+      "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",

+      "dev": true

+    },

+    "node_modules/debug": {

+      "version": "4.4.1",

+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",

+      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",

+      "dev": true,

+      "dependencies": {

+        "ms": "^2.1.3"

+      },

+      "engines": {

+        "node": ">=6.0"

+      },

+      "peerDependenciesMeta": {

+        "supports-color": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/deepmerge": {

+      "version": "1.5.2",

+      "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz",

+      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/default-gateway": {

+      "version": "6.0.3",

+      "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz",

+      "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",

+      "dev": true,

+      "dependencies": {

+        "execa": "^5.0.0"

+      },

+      "engines": {

+        "node": ">= 10"

+      }

+    },

+    "node_modules/default-gateway/node_modules/cross-spawn": {

+      "version": "7.0.6",

+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",

+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",

+      "dev": true,

+      "dependencies": {

+        "path-key": "^3.1.0",

+        "shebang-command": "^2.0.0",

+        "which": "^2.0.1"

+      },

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/default-gateway/node_modules/execa": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz",

+      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",

+      "dev": true,

+      "dependencies": {

+        "cross-spawn": "^7.0.3",

+        "get-stream": "^6.0.0",

+        "human-signals": "^2.1.0",

+        "is-stream": "^2.0.0",

+        "merge-stream": "^2.0.0",

+        "npm-run-path": "^4.0.1",

+        "onetime": "^5.1.2",

+        "signal-exit": "^3.0.3",

+        "strip-final-newline": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sindresorhus/execa?sponsor=1"

+      }

+    },

+    "node_modules/default-gateway/node_modules/get-stream": {

+      "version": "6.0.1",

+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz",

+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/default-gateway/node_modules/is-stream": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz",

+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/default-gateway/node_modules/npm-run-path": {

+      "version": "4.0.1",

+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",

+      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",

+      "dev": true,

+      "dependencies": {

+        "path-key": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/default-gateway/node_modules/path-key": {

+      "version": "3.1.1",

+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",

+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/default-gateway/node_modules/shebang-command": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",

+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",

+      "dev": true,

+      "dependencies": {

+        "shebang-regex": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/default-gateway/node_modules/shebang-regex": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",

+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/default-gateway/node_modules/which": {

+      "version": "2.0.2",

+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",

+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",

+      "dev": true,

+      "dependencies": {

+        "isexe": "^2.0.0"

+      },

+      "bin": {

+        "node-which": "bin/node-which"

+      },

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/defaults": {

+      "version": "1.0.4",

+      "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz",

+      "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",

+      "dev": true,

+      "dependencies": {

+        "clone": "^1.0.2"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/define-data-property": {

+      "version": "1.1.4",

+      "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz",

+      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",

+      "dev": true,

+      "dependencies": {

+        "es-define-property": "^1.0.0",

+        "es-errors": "^1.3.0",

+        "gopd": "^1.0.1"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/define-lazy-prop": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",

+      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/define-properties": {

+      "version": "1.2.1",

+      "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz",

+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",

+      "dev": true,

+      "dependencies": {

+        "define-data-property": "^1.0.1",

+        "has-property-descriptors": "^1.0.0",

+        "object-keys": "^1.1.1"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/delayed-stream": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",

+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",

+      "engines": {

+        "node": ">=0.4.0"

+      }

+    },

+    "node_modules/depd": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",

+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/destroy": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",

+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8",

+        "npm": "1.2.8000 || >= 1.4.16"

+      }

+    },

+    "node_modules/detect-libc": {

+      "version": "1.0.3",

+      "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz",

+      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",

+      "dev": true,

+      "optional": true,

+      "bin": {

+        "detect-libc": "bin/detect-libc.js"

+      },

+      "engines": {

+        "node": ">=0.10"

+      }

+    },

+    "node_modules/detect-node": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz",

+      "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",

+      "dev": true

+    },

+    "node_modules/dir-glob": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz",

+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",

+      "dev": true,

+      "dependencies": {

+        "path-type": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/dns-packet": {

+      "version": "5.6.1",

+      "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz",

+      "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",

+      "dev": true,

+      "dependencies": {

+        "@leichtgewicht/ip-codec": "^2.0.1"

+      },

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/dom-converter": {

+      "version": "0.2.0",

+      "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz",

+      "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",

+      "dev": true,

+      "dependencies": {

+        "utila": "~0.4"

+      }

+    },

+    "node_modules/dom-serializer": {

+      "version": "1.4.1",

+      "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz",

+      "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",

+      "dev": true,

+      "dependencies": {

+        "domelementtype": "^2.0.1",

+        "domhandler": "^4.2.0",

+        "entities": "^2.0.0"

+      },

+      "funding": {

+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"

+      }

+    },

+    "node_modules/dom-serializer/node_modules/entities": {

+      "version": "2.2.0",

+      "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",

+      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",

+      "dev": true,

+      "funding": {

+        "url": "https://github.com/fb55/entities?sponsor=1"

+      }

+    },

+    "node_modules/domelementtype": {

+      "version": "2.3.0",

+      "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz",

+      "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/fb55"

+        }

+      ]

+    },

+    "node_modules/domhandler": {

+      "version": "4.3.1",

+      "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz",

+      "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",

+      "dev": true,

+      "dependencies": {

+        "domelementtype": "^2.2.0"

+      },

+      "engines": {

+        "node": ">= 4"

+      },

+      "funding": {

+        "url": "https://github.com/fb55/domhandler?sponsor=1"

+      }

+    },

+    "node_modules/domutils": {

+      "version": "2.8.0",

+      "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz",

+      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",

+      "dev": true,

+      "dependencies": {

+        "dom-serializer": "^1.0.1",

+        "domelementtype": "^2.2.0",

+        "domhandler": "^4.2.0"

+      },

+      "funding": {

+        "url": "https://github.com/fb55/domutils?sponsor=1"

+      }

+    },

+    "node_modules/dot-case": {

+      "version": "3.0.4",

+      "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz",

+      "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",

+      "dev": true,

+      "dependencies": {

+        "no-case": "^3.0.4",

+        "tslib": "^2.0.3"

+      }

+    },

+    "node_modules/dotenv": {

+      "version": "10.0.0",

+      "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz",

+      "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/dotenv-expand": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz",

+      "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",

+      "dev": true

+    },

+    "node_modules/dunder-proto": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",

+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",

+      "dependencies": {

+        "call-bind-apply-helpers": "^1.0.1",

+        "es-errors": "^1.3.0",

+        "gopd": "^1.2.0"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/duplexer": {

+      "version": "0.1.2",

+      "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz",

+      "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",

+      "dev": true

+    },

+    "node_modules/easy-stack": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz",

+      "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.0.0"

+      }

+    },

+    "node_modules/ee-first": {

+      "version": "1.1.1",

+      "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",

+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",

+      "dev": true

+    },

+    "node_modules/electron-to-chromium": {

+      "version": "1.5.161",

+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz",

+      "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==",

+      "dev": true

+    },

+    "node_modules/element-plus": {

+      "version": "2.9.11",

+      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.11.tgz",

+      "integrity": "sha512-x4L/6YC8de4JtuE3vpaEugJdQIeHQaHtIYKyk67IeF6dTIiVax45aX4nWOygnh+xX+0gTvL6xO+9BZhPA3G82w==",

+      "dependencies": {

+        "@ctrl/tinycolor": "^3.4.1",

+        "@element-plus/icons-vue": "^2.3.1",

+        "@floating-ui/dom": "^1.0.1",

+        "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",

+        "@types/lodash": "^4.14.182",

+        "@types/lodash-es": "^4.17.6",

+        "@vueuse/core": "^9.1.0",

+        "async-validator": "^4.2.5",

+        "dayjs": "^1.11.13",

+        "escape-html": "^1.0.3",

+        "lodash": "^4.17.21",

+        "lodash-es": "^4.17.21",

+        "lodash-unified": "^1.0.2",

+        "memoize-one": "^6.0.0",

+        "normalize-wheel-es": "^1.2.0"

+      },

+      "peerDependencies": {

+        "vue": "^3.2.0"

+      }

+    },

+    "node_modules/emoji-regex": {

+      "version": "8.0.0",

+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",

+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",

+      "dev": true

+    },

+    "node_modules/emojis-list": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz",

+      "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",

+      "dev": true,

+      "engines": {

+        "node": ">= 4"

+      }

+    },

+    "node_modules/encodeurl": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz",

+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/end-of-stream": {

+      "version": "1.4.4",

+      "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz",

+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",

+      "dev": true,

+      "dependencies": {

+        "once": "^1.4.0"

+      }

+    },

+    "node_modules/enhanced-resolve": {

+      "version": "5.18.1",

+      "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",

+      "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",

+      "dev": true,

+      "dependencies": {

+        "graceful-fs": "^4.2.4",

+        "tapable": "^2.2.0"

+      },

+      "engines": {

+        "node": ">=10.13.0"

+      }

+    },

+    "node_modules/entities": {

+      "version": "4.5.0",

+      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",

+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",

+      "engines": {

+        "node": ">=0.12"

+      },

+      "funding": {

+        "url": "https://github.com/fb55/entities?sponsor=1"

+      }

+    },

+    "node_modules/error-ex": {

+      "version": "1.3.2",

+      "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz",

+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",

+      "dev": true,

+      "dependencies": {

+        "is-arrayish": "^0.2.1"

+      }

+    },

+    "node_modules/error-stack-parser": {

+      "version": "2.1.4",

+      "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz",

+      "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",

+      "dev": true,

+      "dependencies": {

+        "stackframe": "^1.3.4"

+      }

+    },

+    "node_modules/es-define-property": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",

+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/es-errors": {

+      "version": "1.3.0",

+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",

+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/es-module-lexer": {

+      "version": "1.7.0",

+      "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz",

+      "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",

+      "dev": true

+    },

+    "node_modules/es-object-atoms": {

+      "version": "1.1.1",

+      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",

+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",

+      "dependencies": {

+        "es-errors": "^1.3.0"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/es-set-tostringtag": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",

+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",

+      "dependencies": {

+        "es-errors": "^1.3.0",

+        "get-intrinsic": "^1.2.6",

+        "has-tostringtag": "^1.0.2",

+        "hasown": "^2.0.2"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/esbuild": {

+      "version": "0.25.5",

+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.5.tgz",

+      "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",

+      "dev": true,

+      "hasInstallScript": true,

+      "bin": {

+        "esbuild": "bin/esbuild"

+      },

+      "engines": {

+        "node": ">=18"

+      },

+      "optionalDependencies": {

+        "@esbuild/aix-ppc64": "0.25.5",

+        "@esbuild/android-arm": "0.25.5",

+        "@esbuild/android-arm64": "0.25.5",

+        "@esbuild/android-x64": "0.25.5",

+        "@esbuild/darwin-arm64": "0.25.5",

+        "@esbuild/darwin-x64": "0.25.5",

+        "@esbuild/freebsd-arm64": "0.25.5",

+        "@esbuild/freebsd-x64": "0.25.5",

+        "@esbuild/linux-arm": "0.25.5",

+        "@esbuild/linux-arm64": "0.25.5",

+        "@esbuild/linux-ia32": "0.25.5",

+        "@esbuild/linux-loong64": "0.25.5",

+        "@esbuild/linux-mips64el": "0.25.5",

+        "@esbuild/linux-ppc64": "0.25.5",

+        "@esbuild/linux-riscv64": "0.25.5",

+        "@esbuild/linux-s390x": "0.25.5",

+        "@esbuild/linux-x64": "0.25.5",

+        "@esbuild/netbsd-arm64": "0.25.5",

+        "@esbuild/netbsd-x64": "0.25.5",

+        "@esbuild/openbsd-arm64": "0.25.5",

+        "@esbuild/openbsd-x64": "0.25.5",

+        "@esbuild/sunos-x64": "0.25.5",

+        "@esbuild/win32-arm64": "0.25.5",

+        "@esbuild/win32-ia32": "0.25.5",

+        "@esbuild/win32-x64": "0.25.5"

+      }

+    },

+    "node_modules/escalade": {

+      "version": "3.2.0",

+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",

+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/escape-html": {

+      "version": "1.0.3",

+      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",

+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="

+    },

+    "node_modules/escape-string-regexp": {

+      "version": "1.0.5",

+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",

+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.8.0"

+      }

+    },

+    "node_modules/eslint-scope": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",

+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",

+      "dev": true,

+      "dependencies": {

+        "esrecurse": "^4.3.0",

+        "estraverse": "^4.1.1"

+      },

+      "engines": {

+        "node": ">=8.0.0"

+      }

+    },

+    "node_modules/esrecurse": {

+      "version": "4.3.0",

+      "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",

+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",

+      "dev": true,

+      "dependencies": {

+        "estraverse": "^5.2.0"

+      },

+      "engines": {

+        "node": ">=4.0"

+      }

+    },

+    "node_modules/esrecurse/node_modules/estraverse": {

+      "version": "5.3.0",

+      "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",

+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",

+      "dev": true,

+      "engines": {

+        "node": ">=4.0"

+      }

+    },

+    "node_modules/estraverse": {

+      "version": "4.3.0",

+      "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",

+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",

+      "dev": true,

+      "engines": {

+        "node": ">=4.0"

+      }

+    },

+    "node_modules/estree-walker": {

+      "version": "2.0.2",

+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",

+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="

+    },

+    "node_modules/esutils": {

+      "version": "2.0.3",

+      "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz",

+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/etag": {

+      "version": "1.8.1",

+      "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",

+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/event-pubsub": {

+      "version": "4.3.0",

+      "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz",

+      "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=4.0.0"

+      }

+    },

+    "node_modules/eventemitter3": {

+      "version": "4.0.7",

+      "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz",

+      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",

+      "dev": true

+    },

+    "node_modules/events": {

+      "version": "3.3.0",

+      "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",

+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.8.x"

+      }

+    },

+    "node_modules/execa": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz",

+      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",

+      "dev": true,

+      "dependencies": {

+        "cross-spawn": "^6.0.0",

+        "get-stream": "^4.0.0",

+        "is-stream": "^1.1.0",

+        "npm-run-path": "^2.0.0",

+        "p-finally": "^1.0.0",

+        "signal-exit": "^3.0.0",

+        "strip-eof": "^1.0.0"

+      },

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/express": {

+      "version": "4.21.2",

+      "resolved": "https://registry.npmmirror.com/express/-/express-4.21.2.tgz",

+      "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",

+      "dev": true,

+      "dependencies": {

+        "accepts": "~1.3.8",

+        "array-flatten": "1.1.1",

+        "body-parser": "1.20.3",

+        "content-disposition": "0.5.4",

+        "content-type": "~1.0.4",

+        "cookie": "0.7.1",

+        "cookie-signature": "1.0.6",

+        "debug": "2.6.9",

+        "depd": "2.0.0",

+        "encodeurl": "~2.0.0",

+        "escape-html": "~1.0.3",

+        "etag": "~1.8.1",

+        "finalhandler": "1.3.1",

+        "fresh": "0.5.2",

+        "http-errors": "2.0.0",

+        "merge-descriptors": "1.0.3",

+        "methods": "~1.1.2",

+        "on-finished": "2.4.1",

+        "parseurl": "~1.3.3",

+        "path-to-regexp": "0.1.12",

+        "proxy-addr": "~2.0.7",

+        "qs": "6.13.0",

+        "range-parser": "~1.2.1",

+        "safe-buffer": "5.2.1",

+        "send": "0.19.0",

+        "serve-static": "1.16.2",

+        "setprototypeof": "1.2.0",

+        "statuses": "2.0.1",

+        "type-is": "~1.6.18",

+        "utils-merge": "1.0.1",

+        "vary": "~1.1.2"

+      },

+      "engines": {

+        "node": ">= 0.10.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/express"

+      }

+    },

+    "node_modules/express/node_modules/debug": {

+      "version": "2.6.9",

+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",

+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",

+      "dev": true,

+      "dependencies": {

+        "ms": "2.0.0"

+      }

+    },

+    "node_modules/express/node_modules/ms": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",

+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",

+      "dev": true

+    },

+    "node_modules/fast-deep-equal": {

+      "version": "3.1.3",

+      "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",

+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",

+      "dev": true

+    },

+    "node_modules/fast-glob": {

+      "version": "3.3.3",

+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",

+      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",

+      "dev": true,

+      "dependencies": {

+        "@nodelib/fs.stat": "^2.0.2",

+        "@nodelib/fs.walk": "^1.2.3",

+        "glob-parent": "^5.1.2",

+        "merge2": "^1.3.0",

+        "micromatch": "^4.0.8"

+      },

+      "engines": {

+        "node": ">=8.6.0"

+      }

+    },

+    "node_modules/fast-glob/node_modules/glob-parent": {

+      "version": "5.1.2",

+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",

+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",

+      "dev": true,

+      "dependencies": {

+        "is-glob": "^4.0.1"

+      },

+      "engines": {

+        "node": ">= 6"

+      }

+    },

+    "node_modules/fast-json-stable-stringify": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",

+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",

+      "dev": true

+    },

+    "node_modules/fast-uri": {

+      "version": "3.0.6",

+      "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.6.tgz",

+      "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/fastify"

+        },

+        {

+          "type": "opencollective",

+          "url": "https://opencollective.com/fastify"

+        }

+      ]

+    },

+    "node_modules/fastq": {

+      "version": "1.19.1",

+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz",

+      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",

+      "dev": true,

+      "dependencies": {

+        "reusify": "^1.0.4"

+      }

+    },

+    "node_modules/faye-websocket": {

+      "version": "0.11.4",

+      "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz",

+      "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",

+      "dev": true,

+      "dependencies": {

+        "websocket-driver": ">=0.5.1"

+      },

+      "engines": {

+        "node": ">=0.8.0"

+      }

+    },

+    "node_modules/figures": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz",

+      "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",

+      "dev": true,

+      "dependencies": {

+        "escape-string-regexp": "^1.0.5"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/fill-range": {

+      "version": "7.1.1",

+      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",

+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",

+      "dev": true,

+      "dependencies": {

+        "to-regex-range": "^5.0.1"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/finalhandler": {

+      "version": "1.3.1",

+      "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz",

+      "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",

+      "dev": true,

+      "dependencies": {

+        "debug": "2.6.9",

+        "encodeurl": "~2.0.0",

+        "escape-html": "~1.0.3",

+        "on-finished": "2.4.1",

+        "parseurl": "~1.3.3",

+        "statuses": "2.0.1",

+        "unpipe": "~1.0.0"

+      },

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/finalhandler/node_modules/debug": {

+      "version": "2.6.9",

+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",

+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",

+      "dev": true,

+      "dependencies": {

+        "ms": "2.0.0"

+      }

+    },

+    "node_modules/finalhandler/node_modules/ms": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",

+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",

+      "dev": true

+    },

+    "node_modules/find-cache-dir": {

+      "version": "3.3.2",

+      "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz",

+      "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",

+      "dev": true,

+      "dependencies": {

+        "commondir": "^1.0.1",

+        "make-dir": "^3.0.2",

+        "pkg-dir": "^4.1.0"

+      },

+      "engines": {

+        "node": ">=8"

+      },

+      "funding": {

+        "url": "https://github.com/avajs/find-cache-dir?sponsor=1"

+      }

+    },

+    "node_modules/find-up": {

+      "version": "4.1.0",

+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",

+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",

+      "dev": true,

+      "dependencies": {

+        "locate-path": "^5.0.0",

+        "path-exists": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/flat": {

+      "version": "5.0.2",

+      "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz",

+      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",

+      "dev": true,

+      "bin": {

+        "flat": "cli.js"

+      }

+    },

+    "node_modules/follow-redirects": {

+      "version": "1.15.9",

+      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",

+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",

+      "funding": [

+        {

+          "type": "individual",

+          "url": "https://github.com/sponsors/RubenVerborgh"

+        }

+      ],

+      "engines": {

+        "node": ">=4.0"

+      },

+      "peerDependenciesMeta": {

+        "debug": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/form-data": {

+      "version": "4.0.2",

+      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz",

+      "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",

+      "dependencies": {

+        "asynckit": "^0.4.0",

+        "combined-stream": "^1.0.8",

+        "es-set-tostringtag": "^2.1.0",

+        "mime-types": "^2.1.12"

+      },

+      "engines": {

+        "node": ">= 6"

+      }

+    },

+    "node_modules/forwarded": {

+      "version": "0.2.0",

+      "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",

+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/fraction.js": {

+      "version": "4.3.7",

+      "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz",

+      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",

+      "dev": true,

+      "engines": {

+        "node": "*"

+      },

+      "funding": {

+        "type": "patreon",

+        "url": "https://github.com/sponsors/rawify"

+      }

+    },

+    "node_modules/fresh": {

+      "version": "0.5.2",

+      "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",

+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/fs-extra": {

+      "version": "9.1.0",

+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz",

+      "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",

+      "dev": true,

+      "dependencies": {

+        "at-least-node": "^1.0.0",

+        "graceful-fs": "^4.2.0",

+        "jsonfile": "^6.0.1",

+        "universalify": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/fs-monkey": {

+      "version": "1.0.6",

+      "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.6.tgz",

+      "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==",

+      "dev": true

+    },

+    "node_modules/fs.realpath": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",

+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",

+      "dev": true

+    },

+    "node_modules/fsevents": {

+      "version": "2.3.3",

+      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",

+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",

+      "dev": true,

+      "hasInstallScript": true,

+      "optional": true,

+      "os": [

+        "darwin"

+      ],

+      "engines": {

+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"

+      }

+    },

+    "node_modules/function-bind": {

+      "version": "1.1.2",

+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",

+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/gensync": {

+      "version": "1.0.0-beta.2",

+      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",

+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.9.0"

+      }

+    },

+    "node_modules/get-caller-file": {

+      "version": "2.0.5",

+      "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",

+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",

+      "dev": true,

+      "engines": {

+        "node": "6.* || 8.* || >= 10.*"

+      }

+    },

+    "node_modules/get-intrinsic": {

+      "version": "1.3.0",

+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",

+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",

+      "dependencies": {

+        "call-bind-apply-helpers": "^1.0.2",

+        "es-define-property": "^1.0.1",

+        "es-errors": "^1.3.0",

+        "es-object-atoms": "^1.1.1",

+        "function-bind": "^1.1.2",

+        "get-proto": "^1.0.1",

+        "gopd": "^1.2.0",

+        "has-symbols": "^1.1.0",

+        "hasown": "^2.0.2",

+        "math-intrinsics": "^1.1.0"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/get-proto": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",

+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",

+      "dependencies": {

+        "dunder-proto": "^1.0.1",

+        "es-object-atoms": "^1.0.0"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/get-stream": {

+      "version": "4.1.0",

+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz",

+      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",

+      "dev": true,

+      "dependencies": {

+        "pump": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/glob": {

+      "version": "7.2.3",

+      "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",

+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",

+      "deprecated": "Glob versions prior to v9 are no longer supported",

+      "dev": true,

+      "dependencies": {

+        "fs.realpath": "^1.0.0",

+        "inflight": "^1.0.4",

+        "inherits": "2",

+        "minimatch": "^3.1.1",

+        "once": "^1.3.0",

+        "path-is-absolute": "^1.0.0"

+      },

+      "engines": {

+        "node": "*"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/isaacs"

+      }

+    },

+    "node_modules/glob-parent": {

+      "version": "6.0.2",

+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",

+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",

+      "dev": true,

+      "dependencies": {

+        "is-glob": "^4.0.3"

+      },

+      "engines": {

+        "node": ">=10.13.0"

+      }

+    },

+    "node_modules/glob-to-regexp": {

+      "version": "0.4.1",

+      "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",

+      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",

+      "dev": true

+    },

+    "node_modules/globals": {

+      "version": "11.12.0",

+      "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",

+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/globby": {

+      "version": "11.1.0",

+      "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz",

+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",

+      "dev": true,

+      "dependencies": {

+        "array-union": "^2.1.0",

+        "dir-glob": "^3.0.1",

+        "fast-glob": "^3.2.9",

+        "ignore": "^5.2.0",

+        "merge2": "^1.4.1",

+        "slash": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/gopd": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",

+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/graceful-fs": {

+      "version": "4.2.11",

+      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",

+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",

+      "dev": true

+    },

+    "node_modules/gzip-size": {

+      "version": "6.0.0",

+      "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz",

+      "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",

+      "dev": true,

+      "dependencies": {

+        "duplexer": "^0.1.2"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/handle-thing": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz",

+      "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",

+      "dev": true

+    },

+    "node_modules/has-flag": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",

+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/has-property-descriptors": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",

+      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",

+      "dev": true,

+      "dependencies": {

+        "es-define-property": "^1.0.0"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/has-symbols": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",

+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/has-tostringtag": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",

+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",

+      "dependencies": {

+        "has-symbols": "^1.0.3"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/hash-sum": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",

+      "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",

+      "dev": true

+    },

+    "node_modules/hasown": {

+      "version": "2.0.2",

+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",

+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",

+      "dependencies": {

+        "function-bind": "^1.1.2"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/he": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",

+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",

+      "dev": true,

+      "bin": {

+        "he": "bin/he"

+      }

+    },

+    "node_modules/highlight.js": {

+      "version": "10.7.3",

+      "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz",

+      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",

+      "dev": true,

+      "engines": {

+        "node": "*"

+      }

+    },

+    "node_modules/hosted-git-info": {

+      "version": "2.8.9",

+      "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz",

+      "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",

+      "dev": true

+    },

+    "node_modules/hpack.js": {

+      "version": "2.1.6",

+      "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz",

+      "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",

+      "dev": true,

+      "dependencies": {

+        "inherits": "^2.0.1",

+        "obuf": "^1.0.0",

+        "readable-stream": "^2.0.1",

+        "wbuf": "^1.1.0"

+      }

+    },

+    "node_modules/hpack.js/node_modules/readable-stream": {

+      "version": "2.3.8",

+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",

+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",

+      "dev": true,

+      "dependencies": {

+        "core-util-is": "~1.0.0",

+        "inherits": "~2.0.3",

+        "isarray": "~1.0.0",

+        "process-nextick-args": "~2.0.0",

+        "safe-buffer": "~5.1.1",

+        "string_decoder": "~1.1.1",

+        "util-deprecate": "~1.0.1"

+      }

+    },

+    "node_modules/hpack.js/node_modules/safe-buffer": {

+      "version": "5.1.2",

+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",

+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",

+      "dev": true

+    },

+    "node_modules/hpack.js/node_modules/string_decoder": {

+      "version": "1.1.1",

+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",

+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",

+      "dev": true,

+      "dependencies": {

+        "safe-buffer": "~5.1.0"

+      }

+    },

+    "node_modules/html-entities": {

+      "version": "2.6.0",

+      "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.6.0.tgz",

+      "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/mdevils"

+        },

+        {

+          "type": "patreon",

+          "url": "https://patreon.com/mdevils"

+        }

+      ]

+    },

+    "node_modules/html-escaper": {

+      "version": "2.0.2",

+      "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz",

+      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",

+      "dev": true

+    },

+    "node_modules/html-minifier-terser": {

+      "version": "6.1.0",

+      "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",

+      "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==",

+      "dev": true,

+      "dependencies": {

+        "camel-case": "^4.1.2",

+        "clean-css": "^5.2.2",

+        "commander": "^8.3.0",

+        "he": "^1.2.0",

+        "param-case": "^3.0.4",

+        "relateurl": "^0.2.7",

+        "terser": "^5.10.0"

+      },

+      "bin": {

+        "html-minifier-terser": "cli.js"

+      },

+      "engines": {

+        "node": ">=12"

+      }

+    },

+    "node_modules/html-tags": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz",

+      "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/html-webpack-plugin": {

+      "version": "5.6.3",

+      "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz",

+      "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==",

+      "dev": true,

+      "dependencies": {

+        "@types/html-minifier-terser": "^6.0.0",

+        "html-minifier-terser": "^6.0.2",

+        "lodash": "^4.17.21",

+        "pretty-error": "^4.0.0",

+        "tapable": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/html-webpack-plugin"

+      },

+      "peerDependencies": {

+        "@rspack/core": "0.x || 1.x",

+        "webpack": "^5.20.0"

+      },

+      "peerDependenciesMeta": {

+        "@rspack/core": {

+          "optional": true

+        },

+        "webpack": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/htmlparser2": {

+      "version": "6.1.0",

+      "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz",

+      "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",

+      "dev": true,

+      "funding": [

+        "https://github.com/fb55/htmlparser2?sponsor=1",

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/fb55"

+        }

+      ],

+      "dependencies": {

+        "domelementtype": "^2.0.1",

+        "domhandler": "^4.0.0",

+        "domutils": "^2.5.2",

+        "entities": "^2.0.0"

+      }

+    },

+    "node_modules/htmlparser2/node_modules/entities": {

+      "version": "2.2.0",

+      "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",

+      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",

+      "dev": true,

+      "funding": {

+        "url": "https://github.com/fb55/entities?sponsor=1"

+      }

+    },

+    "node_modules/http-deceiver": {

+      "version": "1.2.7",

+      "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz",

+      "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",

+      "dev": true

+    },

+    "node_modules/http-errors": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",

+      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",

+      "dev": true,

+      "dependencies": {

+        "depd": "2.0.0",

+        "inherits": "2.0.4",

+        "setprototypeof": "1.2.0",

+        "statuses": "2.0.1",

+        "toidentifier": "1.0.1"

+      },

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/http-parser-js": {

+      "version": "0.5.10",

+      "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.10.tgz",

+      "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==",

+      "dev": true

+    },

+    "node_modules/http-proxy": {

+      "version": "1.18.1",

+      "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz",

+      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",

+      "dev": true,

+      "dependencies": {

+        "eventemitter3": "^4.0.0",

+        "follow-redirects": "^1.0.0",

+        "requires-port": "^1.0.0"

+      },

+      "engines": {

+        "node": ">=8.0.0"

+      }

+    },

+    "node_modules/http-proxy-middleware": {

+      "version": "2.0.9",

+      "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",

+      "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==",

+      "dev": true,

+      "dependencies": {

+        "@types/http-proxy": "^1.17.8",

+        "http-proxy": "^1.18.1",

+        "is-glob": "^4.0.1",

+        "is-plain-obj": "^3.0.0",

+        "micromatch": "^4.0.2"

+      },

+      "engines": {

+        "node": ">=12.0.0"

+      },

+      "peerDependencies": {

+        "@types/express": "^4.17.13"

+      },

+      "peerDependenciesMeta": {

+        "@types/express": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/human-signals": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",

+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",

+      "dev": true,

+      "engines": {

+        "node": ">=10.17.0"

+      }

+    },

+    "node_modules/iconv-lite": {

+      "version": "0.4.24",

+      "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",

+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",

+      "dev": true,

+      "dependencies": {

+        "safer-buffer": ">= 2.1.2 < 3"

+      },

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/icss-utils": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz",

+      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >= 14"

+      },

+      "peerDependencies": {

+        "postcss": "^8.1.0"

+      }

+    },

+    "node_modules/ieee754": {

+      "version": "1.2.1",

+      "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",

+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/feross"

+        },

+        {

+          "type": "patreon",

+          "url": "https://www.patreon.com/feross"

+        },

+        {

+          "type": "consulting",

+          "url": "https://feross.org/support"

+        }

+      ]

+    },

+    "node_modules/ignore": {

+      "version": "5.3.2",

+      "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz",

+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",

+      "dev": true,

+      "engines": {

+        "node": ">= 4"

+      }

+    },

+    "node_modules/immutable": {

+      "version": "5.1.2",

+      "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.2.tgz",

+      "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==",

+      "dev": true

+    },

+    "node_modules/import-fresh": {

+      "version": "3.3.1",

+      "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz",

+      "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",

+      "dev": true,

+      "dependencies": {

+        "parent-module": "^1.0.0",

+        "resolve-from": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=6"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/inflight": {

+      "version": "1.0.6",

+      "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",

+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",

+      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",

+      "dev": true,

+      "dependencies": {

+        "once": "^1.3.0",

+        "wrappy": "1"

+      }

+    },

+    "node_modules/inherits": {

+      "version": "2.0.4",

+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",

+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",

+      "dev": true

+    },

+    "node_modules/ipaddr.js": {

+      "version": "2.2.0",

+      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz",

+      "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 10"

+      }

+    },

+    "node_modules/is-arrayish": {

+      "version": "0.2.1",

+      "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz",

+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",

+      "dev": true

+    },

+    "node_modules/is-binary-path": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",

+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",

+      "dev": true,

+      "dependencies": {

+        "binary-extensions": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/is-core-module": {

+      "version": "2.16.1",

+      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz",

+      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",

+      "dev": true,

+      "dependencies": {

+        "hasown": "^2.0.2"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/is-docker": {

+      "version": "2.2.1",

+      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",

+      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",

+      "dev": true,

+      "bin": {

+        "is-docker": "cli.js"

+      },

+      "engines": {

+        "node": ">=8"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/is-extglob": {

+      "version": "2.1.1",

+      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",

+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/is-file-esm": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz",

+      "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==",

+      "dev": true,

+      "dependencies": {

+        "read-pkg-up": "^7.0.1"

+      }

+    },

+    "node_modules/is-fullwidth-code-point": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",

+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/is-glob": {

+      "version": "4.0.3",

+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",

+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",

+      "dev": true,

+      "dependencies": {

+        "is-extglob": "^2.1.1"

+      },

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/is-interactive": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz",

+      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/is-number": {

+      "version": "7.0.0",

+      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",

+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.12.0"

+      }

+    },

+    "node_modules/is-plain-obj": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz",

+      "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/is-plain-object": {

+      "version": "2.0.4",

+      "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz",

+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",

+      "dev": true,

+      "dependencies": {

+        "isobject": "^3.0.1"

+      },

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/is-stream": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz",

+      "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/is-unicode-supported": {

+      "version": "0.1.0",

+      "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",

+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/is-wsl": {

+      "version": "2.2.0",

+      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",

+      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",

+      "dev": true,

+      "dependencies": {

+        "is-docker": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/isarray": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",

+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",

+      "dev": true

+    },

+    "node_modules/isexe": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",

+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",

+      "dev": true

+    },

+    "node_modules/isobject": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz",

+      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/javascript-stringify": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz",

+      "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",

+      "dev": true

+    },

+    "node_modules/jest-worker": {

+      "version": "27.5.1",

+      "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",

+      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",

+      "dev": true,

+      "dependencies": {

+        "@types/node": "*",

+        "merge-stream": "^2.0.0",

+        "supports-color": "^8.0.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      }

+    },

+    "node_modules/jest-worker/node_modules/supports-color": {

+      "version": "8.1.1",

+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",

+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",

+      "dev": true,

+      "dependencies": {

+        "has-flag": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/chalk/supports-color?sponsor=1"

+      }

+    },

+    "node_modules/joi": {

+      "version": "17.13.3",

+      "resolved": "https://registry.npmmirror.com/joi/-/joi-17.13.3.tgz",

+      "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",

+      "dev": true,

+      "dependencies": {

+        "@hapi/hoek": "^9.3.0",

+        "@hapi/topo": "^5.1.0",

+        "@sideway/address": "^4.1.5",

+        "@sideway/formula": "^3.0.1",

+        "@sideway/pinpoint": "^2.0.0"

+      }

+    },

+    "node_modules/js-message": {

+      "version": "1.0.7",

+      "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",

+      "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.6.0"

+      }

+    },

+    "node_modules/js-tokens": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",

+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",

+      "dev": true

+    },

+    "node_modules/jsesc": {

+      "version": "3.1.0",

+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",

+      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",

+      "dev": true,

+      "bin": {

+        "jsesc": "bin/jsesc"

+      },

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/json-parse-better-errors": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",

+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",

+      "dev": true

+    },

+    "node_modules/json-parse-even-better-errors": {

+      "version": "2.3.1",

+      "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",

+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",

+      "dev": true

+    },

+    "node_modules/json-schema-traverse": {

+      "version": "0.4.1",

+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",

+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",

+      "dev": true

+    },

+    "node_modules/json5": {

+      "version": "2.2.3",

+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",

+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",

+      "dev": true,

+      "bin": {

+        "json5": "lib/cli.js"

+      },

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/jsonfile": {

+      "version": "6.1.0",

+      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",

+      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",

+      "dev": true,

+      "dependencies": {

+        "universalify": "^2.0.0"

+      },

+      "optionalDependencies": {

+        "graceful-fs": "^4.1.6"

+      }

+    },

+    "node_modules/kind-of": {

+      "version": "6.0.3",

+      "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz",

+      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/klona": {

+      "version": "2.0.6",

+      "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",

+      "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/launch-editor": {

+      "version": "2.10.0",

+      "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.10.0.tgz",

+      "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==",

+      "dev": true,

+      "dependencies": {

+        "picocolors": "^1.0.0",

+        "shell-quote": "^1.8.1"

+      }

+    },

+    "node_modules/launch-editor-middleware": {

+      "version": "2.10.0",

+      "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.10.0.tgz",

+      "integrity": "sha512-RzZu7MeVlE3p1H6Sadc2BhuDGAj7bkeDCBpNq/zSENP4ohJGhso00k5+iYaRwKshIpiOAhMmimce+5D389xmSg==",

+      "dev": true,

+      "dependencies": {

+        "launch-editor": "^2.10.0"

+      }

+    },

+    "node_modules/lilconfig": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",

+      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/lines-and-columns": {

+      "version": "1.2.4",

+      "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz",

+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",

+      "dev": true

+    },

+    "node_modules/loader-runner": {

+      "version": "4.3.0",

+      "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",

+      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",

+      "dev": true,

+      "engines": {

+        "node": ">=6.11.5"

+      }

+    },

+    "node_modules/loader-utils": {

+      "version": "1.4.2",

+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz",

+      "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",

+      "dev": true,

+      "dependencies": {

+        "big.js": "^5.2.2",

+        "emojis-list": "^3.0.0",

+        "json5": "^1.0.1"

+      },

+      "engines": {

+        "node": ">=4.0.0"

+      }

+    },

+    "node_modules/loader-utils/node_modules/json5": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",

+      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",

+      "dev": true,

+      "dependencies": {

+        "minimist": "^1.2.0"

+      },

+      "bin": {

+        "json5": "lib/cli.js"

+      }

+    },

+    "node_modules/locate-path": {

+      "version": "5.0.0",

+      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",

+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",

+      "dev": true,

+      "dependencies": {

+        "p-locate": "^4.1.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/lodash": {

+      "version": "4.17.21",

+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",

+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="

+    },

+    "node_modules/lodash-es": {

+      "version": "4.17.21",

+      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",

+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="

+    },

+    "node_modules/lodash-unified": {

+      "version": "1.0.3",

+      "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz",

+      "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",

+      "peerDependencies": {

+        "@types/lodash-es": "*",

+        "lodash": "*",

+        "lodash-es": "*"

+      }

+    },

+    "node_modules/lodash.debounce": {

+      "version": "4.0.8",

+      "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",

+      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",

+      "dev": true

+    },

+    "node_modules/lodash.defaultsdeep": {

+      "version": "4.6.1",

+      "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",

+      "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",

+      "dev": true

+    },

+    "node_modules/lodash.kebabcase": {

+      "version": "4.1.1",

+      "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",

+      "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",

+      "dev": true

+    },

+    "node_modules/lodash.mapvalues": {

+      "version": "4.6.0",

+      "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",

+      "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==",

+      "dev": true

+    },

+    "node_modules/lodash.memoize": {

+      "version": "4.1.2",

+      "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz",

+      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",

+      "dev": true

+    },

+    "node_modules/lodash.uniq": {

+      "version": "4.5.0",

+      "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz",

+      "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",

+      "dev": true

+    },

+    "node_modules/log-symbols": {

+      "version": "4.1.0",

+      "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz",

+      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",

+      "dev": true,

+      "dependencies": {

+        "chalk": "^4.1.0",

+        "is-unicode-supported": "^0.1.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/log-symbols/node_modules/chalk": {

+      "version": "4.1.2",

+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",

+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",

+      "dev": true,

+      "dependencies": {

+        "ansi-styles": "^4.1.0",

+        "supports-color": "^7.1.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/chalk/chalk?sponsor=1"

+      }

+    },

+    "node_modules/log-update": {

+      "version": "2.3.0",

+      "resolved": "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz",

+      "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==",

+      "dev": true,

+      "dependencies": {

+        "ansi-escapes": "^3.0.0",

+        "cli-cursor": "^2.0.0",

+        "wrap-ansi": "^3.0.1"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/ansi-regex": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz",

+      "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/cli-cursor": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz",

+      "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",

+      "dev": true,

+      "dependencies": {

+        "restore-cursor": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/is-fullwidth-code-point": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",

+      "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/mimic-fn": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz",

+      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/onetime": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz",

+      "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",

+      "dev": true,

+      "dependencies": {

+        "mimic-fn": "^1.0.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/restore-cursor": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz",

+      "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",

+      "dev": true,

+      "dependencies": {

+        "onetime": "^2.0.0",

+        "signal-exit": "^3.0.2"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/string-width": {

+      "version": "2.1.1",

+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz",

+      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",

+      "dev": true,

+      "dependencies": {

+        "is-fullwidth-code-point": "^2.0.0",

+        "strip-ansi": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/strip-ansi": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz",

+      "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",

+      "dev": true,

+      "dependencies": {

+        "ansi-regex": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/log-update/node_modules/wrap-ansi": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz",

+      "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==",

+      "dev": true,

+      "dependencies": {

+        "string-width": "^2.1.1",

+        "strip-ansi": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/lower-case": {

+      "version": "2.0.2",

+      "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz",

+      "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",

+      "dev": true,

+      "dependencies": {

+        "tslib": "^2.0.3"

+      }

+    },

+    "node_modules/lru-cache": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",

+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",

+      "dev": true,

+      "dependencies": {

+        "yallist": "^3.0.2"

+      }

+    },

+    "node_modules/magic-string": {

+      "version": "0.30.17",

+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",

+      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",

+      "dependencies": {

+        "@jridgewell/sourcemap-codec": "^1.5.0"

+      }

+    },

+    "node_modules/make-dir": {

+      "version": "3.1.0",

+      "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz",

+      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",

+      "dev": true,

+      "dependencies": {

+        "semver": "^6.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/math-intrinsics": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",

+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/mdn-data": {

+      "version": "2.0.14",

+      "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz",

+      "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",

+      "dev": true

+    },

+    "node_modules/media-typer": {

+      "version": "0.3.0",

+      "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",

+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/memfs": {

+      "version": "3.5.3",

+      "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz",

+      "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",

+      "dev": true,

+      "dependencies": {

+        "fs-monkey": "^1.0.4"

+      },

+      "engines": {

+        "node": ">= 4.0.0"

+      }

+    },

+    "node_modules/memoize-one": {

+      "version": "6.0.0",

+      "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",

+      "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="

+    },

+    "node_modules/merge-descriptors": {

+      "version": "1.0.3",

+      "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz",

+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",

+      "dev": true,

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/merge-source-map": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz",

+      "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",

+      "dev": true,

+      "dependencies": {

+        "source-map": "^0.6.1"

+      }

+    },

+    "node_modules/merge-stream": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",

+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",

+      "dev": true

+    },

+    "node_modules/merge2": {

+      "version": "1.4.1",

+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",

+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/methods": {

+      "version": "1.1.2",

+      "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",

+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/micromatch": {

+      "version": "4.0.8",

+      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",

+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",

+      "dev": true,

+      "dependencies": {

+        "braces": "^3.0.3",

+        "picomatch": "^2.3.1"

+      },

+      "engines": {

+        "node": ">=8.6"

+      }

+    },

+    "node_modules/mime": {

+      "version": "1.6.0",

+      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",

+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",

+      "dev": true,

+      "bin": {

+        "mime": "cli.js"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/mime-db": {

+      "version": "1.52.0",

+      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",

+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/mime-types": {

+      "version": "2.1.35",

+      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",

+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",

+      "dependencies": {

+        "mime-db": "1.52.0"

+      },

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/mimic-fn": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz",

+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/mini-css-extract-plugin": {

+      "version": "2.9.2",

+      "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz",

+      "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==",

+      "dev": true,

+      "dependencies": {

+        "schema-utils": "^4.0.0",

+        "tapable": "^2.2.1"

+      },

+      "engines": {

+        "node": ">= 12.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "webpack": "^5.0.0"

+      }

+    },

+    "node_modules/mini-css-extract-plugin/node_modules/ajv": {

+      "version": "8.17.1",

+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",

+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3",

+        "fast-uri": "^3.0.1",

+        "json-schema-traverse": "^1.0.0",

+        "require-from-string": "^2.0.2"

+      },

+      "funding": {

+        "type": "github",

+        "url": "https://github.com/sponsors/epoberezkin"

+      }

+    },

+    "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",

+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3"

+      },

+      "peerDependencies": {

+        "ajv": "^8.8.2"

+      }

+    },

+    "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",

+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",

+      "dev": true

+    },

+    "node_modules/mini-css-extract-plugin/node_modules/schema-utils": {

+      "version": "4.3.2",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",

+      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.9",

+        "ajv": "^8.9.0",

+        "ajv-formats": "^2.1.1",

+        "ajv-keywords": "^5.1.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/minimalistic-assert": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",

+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",

+      "dev": true

+    },

+    "node_modules/minimatch": {

+      "version": "3.1.2",

+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",

+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",

+      "dev": true,

+      "dependencies": {

+        "brace-expansion": "^1.1.7"

+      },

+      "engines": {

+        "node": "*"

+      }

+    },

+    "node_modules/minimist": {

+      "version": "1.2.8",

+      "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",

+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",

+      "dev": true,

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/minipass": {

+      "version": "3.3.6",

+      "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz",

+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",

+      "dev": true,

+      "dependencies": {

+        "yallist": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/minipass/node_modules/yallist": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",

+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",

+      "dev": true

+    },

+    "node_modules/module-alias": {

+      "version": "2.2.3",

+      "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz",

+      "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==",

+      "dev": true

+    },

+    "node_modules/mrmime": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz",

+      "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/ms": {

+      "version": "2.1.3",

+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",

+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",

+      "dev": true

+    },

+    "node_modules/multicast-dns": {

+      "version": "7.2.5",

+      "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz",

+      "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",

+      "dev": true,

+      "dependencies": {

+        "dns-packet": "^5.2.2",

+        "thunky": "^1.0.2"

+      },

+      "bin": {

+        "multicast-dns": "cli.js"

+      }

+    },

+    "node_modules/mz": {

+      "version": "2.7.0",

+      "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz",

+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",

+      "dev": true,

+      "dependencies": {

+        "any-promise": "^1.0.0",

+        "object-assign": "^4.0.1",

+        "thenify-all": "^1.0.0"

+      }

+    },

+    "node_modules/nanoid": {

+      "version": "3.3.11",

+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",

+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/ai"

+        }

+      ],

+      "bin": {

+        "nanoid": "bin/nanoid.cjs"

+      },

+      "engines": {

+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"

+      }

+    },

+    "node_modules/negotiator": {

+      "version": "0.6.4",

+      "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz",

+      "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/neo-async": {

+      "version": "2.6.2",

+      "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",

+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",

+      "dev": true

+    },

+    "node_modules/nice-try": {

+      "version": "1.0.5",

+      "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz",

+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",

+      "dev": true

+    },

+    "node_modules/no-case": {

+      "version": "3.0.4",

+      "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz",

+      "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",

+      "dev": true,

+      "dependencies": {

+        "lower-case": "^2.0.2",

+        "tslib": "^2.0.3"

+      }

+    },

+    "node_modules/node-addon-api": {

+      "version": "7.1.1",

+      "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz",

+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",

+      "dev": true,

+      "optional": true

+    },

+    "node_modules/node-fetch": {

+      "version": "2.7.0",

+      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",

+      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",

+      "dev": true,

+      "dependencies": {

+        "whatwg-url": "^5.0.0"

+      },

+      "engines": {

+        "node": "4.x || >=6.0.0"

+      },

+      "peerDependencies": {

+        "encoding": "^0.1.0"

+      },

+      "peerDependenciesMeta": {

+        "encoding": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/node-forge": {

+      "version": "1.3.1",

+      "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz",

+      "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 6.13.0"

+      }

+    },

+    "node_modules/node-releases": {

+      "version": "2.0.19",

+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",

+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",

+      "dev": true

+    },

+    "node_modules/normalize-package-data": {

+      "version": "2.5.0",

+      "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz",

+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",

+      "dev": true,

+      "dependencies": {

+        "hosted-git-info": "^2.1.4",

+        "resolve": "^1.10.0",

+        "semver": "2 || 3 || 4 || 5",

+        "validate-npm-package-license": "^3.0.1"

+      }

+    },

+    "node_modules/normalize-package-data/node_modules/semver": {

+      "version": "5.7.2",

+      "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",

+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",

+      "dev": true,

+      "bin": {

+        "semver": "bin/semver"

+      }

+    },

+    "node_modules/normalize-path": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",

+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/normalize-range": {

+      "version": "0.1.2",

+      "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz",

+      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/normalize-url": {

+      "version": "6.1.0",

+      "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz",

+      "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/normalize-wheel-es": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",

+      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="

+    },

+    "node_modules/npm-run-path": {

+      "version": "2.0.2",

+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz",

+      "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",

+      "dev": true,

+      "dependencies": {

+        "path-key": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/nth-check": {

+      "version": "2.1.1",

+      "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",

+      "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",

+      "dev": true,

+      "dependencies": {

+        "boolbase": "^1.0.0"

+      },

+      "funding": {

+        "url": "https://github.com/fb55/nth-check?sponsor=1"

+      }

+    },

+    "node_modules/object-assign": {

+      "version": "4.1.1",

+      "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",

+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/object-inspect": {

+      "version": "1.13.4",

+      "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz",

+      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/object-keys": {

+      "version": "1.1.1",

+      "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",

+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/object.assign": {

+      "version": "4.1.7",

+      "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.7.tgz",

+      "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",

+      "dev": true,

+      "dependencies": {

+        "call-bind": "^1.0.8",

+        "call-bound": "^1.0.3",

+        "define-properties": "^1.2.1",

+        "es-object-atoms": "^1.0.0",

+        "has-symbols": "^1.1.0",

+        "object-keys": "^1.1.1"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/obuf": {

+      "version": "1.1.2",

+      "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz",

+      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",

+      "dev": true

+    },

+    "node_modules/on-finished": {

+      "version": "2.4.1",

+      "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",

+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",

+      "dev": true,

+      "dependencies": {

+        "ee-first": "1.1.1"

+      },

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/on-headers": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz",

+      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/once": {

+      "version": "1.4.0",

+      "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",

+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",

+      "dev": true,

+      "dependencies": {

+        "wrappy": "1"

+      }

+    },

+    "node_modules/onetime": {

+      "version": "5.1.2",

+      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz",

+      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",

+      "dev": true,

+      "dependencies": {

+        "mimic-fn": "^2.1.0"

+      },

+      "engines": {

+        "node": ">=6"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/open": {

+      "version": "8.4.2",

+      "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz",

+      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",

+      "dev": true,

+      "dependencies": {

+        "define-lazy-prop": "^2.0.0",

+        "is-docker": "^2.1.1",

+        "is-wsl": "^2.2.0"

+      },

+      "engines": {

+        "node": ">=12"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/opener": {

+      "version": "1.5.2",

+      "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz",

+      "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",

+      "dev": true,

+      "bin": {

+        "opener": "bin/opener-bin.js"

+      }

+    },

+    "node_modules/ora": {

+      "version": "5.4.1",

+      "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz",

+      "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",

+      "dev": true,

+      "dependencies": {

+        "bl": "^4.1.0",

+        "chalk": "^4.1.0",

+        "cli-cursor": "^3.1.0",

+        "cli-spinners": "^2.5.0",

+        "is-interactive": "^1.0.0",

+        "is-unicode-supported": "^0.1.0",

+        "log-symbols": "^4.1.0",

+        "strip-ansi": "^6.0.0",

+        "wcwidth": "^1.0.1"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/ora/node_modules/chalk": {

+      "version": "4.1.2",

+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",

+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",

+      "dev": true,

+      "dependencies": {

+        "ansi-styles": "^4.1.0",

+        "supports-color": "^7.1.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/chalk/chalk?sponsor=1"

+      }

+    },

+    "node_modules/p-finally": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz",

+      "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/p-limit": {

+      "version": "2.3.0",

+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",

+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",

+      "dev": true,

+      "dependencies": {

+        "p-try": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=6"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/p-locate": {

+      "version": "4.1.0",

+      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",

+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",

+      "dev": true,

+      "dependencies": {

+        "p-limit": "^2.2.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/p-retry": {

+      "version": "4.6.2",

+      "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz",

+      "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/retry": "0.12.0",

+        "retry": "^0.13.1"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/p-try": {

+      "version": "2.2.0",

+      "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",

+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/param-case": {

+      "version": "3.0.4",

+      "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",

+      "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",

+      "dev": true,

+      "dependencies": {

+        "dot-case": "^3.0.4",

+        "tslib": "^2.0.3"

+      }

+    },

+    "node_modules/parent-module": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",

+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",

+      "dev": true,

+      "dependencies": {

+        "callsites": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/parse-json": {

+      "version": "5.2.0",

+      "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz",

+      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",

+      "dev": true,

+      "dependencies": {

+        "@babel/code-frame": "^7.0.0",

+        "error-ex": "^1.3.1",

+        "json-parse-even-better-errors": "^2.3.0",

+        "lines-and-columns": "^1.1.6"

+      },

+      "engines": {

+        "node": ">=8"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/parse5": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz",

+      "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",

+      "dev": true

+    },

+    "node_modules/parse5-htmlparser2-tree-adapter": {

+      "version": "6.0.1",

+      "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",

+      "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",

+      "dev": true,

+      "dependencies": {

+        "parse5": "^6.0.1"

+      }

+    },

+    "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": {

+      "version": "6.0.1",

+      "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz",

+      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",

+      "dev": true

+    },

+    "node_modules/parseurl": {

+      "version": "1.3.3",

+      "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",

+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/pascal-case": {

+      "version": "3.1.2",

+      "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz",

+      "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",

+      "dev": true,

+      "dependencies": {

+        "no-case": "^3.0.4",

+        "tslib": "^2.0.3"

+      }

+    },

+    "node_modules/path-exists": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",

+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/path-is-absolute": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",

+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/path-key": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz",

+      "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/path-parse": {

+      "version": "1.0.7",

+      "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",

+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",

+      "dev": true

+    },

+    "node_modules/path-to-regexp": {

+      "version": "0.1.12",

+      "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz",

+      "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",

+      "dev": true

+    },

+    "node_modules/path-type": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz",

+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/picocolors": {

+      "version": "1.1.1",

+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",

+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="

+    },

+    "node_modules/picomatch": {

+      "version": "2.3.1",

+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",

+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",

+      "dev": true,

+      "engines": {

+        "node": ">=8.6"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/jonschlinkert"

+      }

+    },

+    "node_modules/pkg-dir": {

+      "version": "4.2.0",

+      "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz",

+      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",

+      "dev": true,

+      "dependencies": {

+        "find-up": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/portfinder": {

+      "version": "1.0.37",

+      "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.37.tgz",

+      "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==",

+      "dev": true,

+      "dependencies": {

+        "async": "^3.2.6",

+        "debug": "^4.3.6"

+      },

+      "engines": {

+        "node": ">= 10.12"

+      }

+    },

+    "node_modules/postcss": {

+      "version": "8.5.4",

+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.4.tgz",

+      "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==",

+      "funding": [

+        {

+          "type": "opencollective",

+          "url": "https://opencollective.com/postcss/"

+        },

+        {

+          "type": "tidelift",

+          "url": "https://tidelift.com/funding/github/npm/postcss"

+        },

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/ai"

+        }

+      ],

+      "dependencies": {

+        "nanoid": "^3.3.11",

+        "picocolors": "^1.1.1",

+        "source-map-js": "^1.2.1"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14"

+      }

+    },

+    "node_modules/postcss-calc": {

+      "version": "8.2.4",

+      "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz",

+      "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",

+      "dev": true,

+      "dependencies": {

+        "postcss-selector-parser": "^6.0.9",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.2"

+      }

+    },

+    "node_modules/postcss-colormin": {

+      "version": "5.3.1",

+      "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz",

+      "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.21.4",

+        "caniuse-api": "^3.0.0",

+        "colord": "^2.9.1",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-convert-values": {

+      "version": "5.1.3",

+      "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz",

+      "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.21.4",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-discard-comments": {

+      "version": "5.1.2",

+      "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",

+      "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-discard-duplicates": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",

+      "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-discard-empty": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",

+      "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-discard-overridden": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",

+      "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-loader": {

+      "version": "6.2.1",

+      "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz",

+      "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==",

+      "dev": true,

+      "dependencies": {

+        "cosmiconfig": "^7.0.0",

+        "klona": "^2.0.5",

+        "semver": "^7.3.5"

+      },

+      "engines": {

+        "node": ">= 12.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "postcss": "^7.0.0 || ^8.0.1",

+        "webpack": "^5.0.0"

+      }

+    },

+    "node_modules/postcss-loader/node_modules/semver": {

+      "version": "7.7.2",

+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",

+      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",

+      "dev": true,

+      "bin": {

+        "semver": "bin/semver.js"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/postcss-merge-longhand": {

+      "version": "5.1.7",

+      "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz",

+      "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0",

+        "stylehacks": "^5.1.1"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-merge-rules": {

+      "version": "5.1.4",

+      "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz",

+      "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.21.4",

+        "caniuse-api": "^3.0.0",

+        "cssnano-utils": "^3.1.0",

+        "postcss-selector-parser": "^6.0.5"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-minify-font-values": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz",

+      "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-minify-gradients": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz",

+      "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==",

+      "dev": true,

+      "dependencies": {

+        "colord": "^2.9.1",

+        "cssnano-utils": "^3.1.0",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-minify-params": {

+      "version": "5.1.4",

+      "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz",

+      "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.21.4",

+        "cssnano-utils": "^3.1.0",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-minify-selectors": {

+      "version": "5.2.1",

+      "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz",

+      "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==",

+      "dev": true,

+      "dependencies": {

+        "postcss-selector-parser": "^6.0.5"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-modules-extract-imports": {

+      "version": "3.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",

+      "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >= 14"

+      },

+      "peerDependencies": {

+        "postcss": "^8.1.0"

+      }

+    },

+    "node_modules/postcss-modules-local-by-default": {

+      "version": "4.2.0",

+      "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz",

+      "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==",

+      "dev": true,

+      "dependencies": {

+        "icss-utils": "^5.0.0",

+        "postcss-selector-parser": "^7.0.0",

+        "postcss-value-parser": "^4.1.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >= 14"

+      },

+      "peerDependencies": {

+        "postcss": "^8.1.0"

+      }

+    },

+    "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": {

+      "version": "7.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",

+      "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",

+      "dev": true,

+      "dependencies": {

+        "cssesc": "^3.0.0",

+        "util-deprecate": "^1.0.2"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/postcss-modules-scope": {

+      "version": "3.2.1",

+      "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",

+      "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",

+      "dev": true,

+      "dependencies": {

+        "postcss-selector-parser": "^7.0.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >= 14"

+      },

+      "peerDependencies": {

+        "postcss": "^8.1.0"

+      }

+    },

+    "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": {

+      "version": "7.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",

+      "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",

+      "dev": true,

+      "dependencies": {

+        "cssesc": "^3.0.0",

+        "util-deprecate": "^1.0.2"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/postcss-modules-values": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",

+      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",

+      "dev": true,

+      "dependencies": {

+        "icss-utils": "^5.0.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >= 14"

+      },

+      "peerDependencies": {

+        "postcss": "^8.1.0"

+      }

+    },

+    "node_modules/postcss-normalize-charset": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",

+      "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",

+      "dev": true,

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-normalize-display-values": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz",

+      "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-normalize-positions": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz",

+      "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-normalize-repeat-style": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz",

+      "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-normalize-string": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz",

+      "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-normalize-timing-functions": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz",

+      "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-normalize-unicode": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz",

+      "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.21.4",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-normalize-url": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz",

+      "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==",

+      "dev": true,

+      "dependencies": {

+        "normalize-url": "^6.0.1",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-normalize-whitespace": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz",

+      "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-ordered-values": {

+      "version": "5.1.3",

+      "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz",

+      "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==",

+      "dev": true,

+      "dependencies": {

+        "cssnano-utils": "^3.1.0",

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-reduce-initial": {

+      "version": "5.1.2",

+      "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz",

+      "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.21.4",

+        "caniuse-api": "^3.0.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-reduce-transforms": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz",

+      "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-selector-parser": {

+      "version": "6.1.2",

+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",

+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",

+      "dev": true,

+      "dependencies": {

+        "cssesc": "^3.0.0",

+        "util-deprecate": "^1.0.2"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/postcss-svgo": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz",

+      "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==",

+      "dev": true,

+      "dependencies": {

+        "postcss-value-parser": "^4.2.0",

+        "svgo": "^2.7.0"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-unique-selectors": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz",

+      "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==",

+      "dev": true,

+      "dependencies": {

+        "postcss-selector-parser": "^6.0.5"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/postcss-value-parser": {

+      "version": "4.2.0",

+      "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",

+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",

+      "dev": true

+    },

+    "node_modules/prettier": {

+      "version": "2.8.8",

+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",

+      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",

+      "dev": true,

+      "optional": true,

+      "bin": {

+        "prettier": "bin-prettier.js"

+      },

+      "engines": {

+        "node": ">=10.13.0"

+      },

+      "funding": {

+        "url": "https://github.com/prettier/prettier?sponsor=1"

+      }

+    },

+    "node_modules/pretty-error": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz",

+      "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==",

+      "dev": true,

+      "dependencies": {

+        "lodash": "^4.17.20",

+        "renderkid": "^3.0.0"

+      }

+    },

+    "node_modules/process-nextick-args": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",

+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",

+      "dev": true

+    },

+    "node_modules/progress-webpack-plugin": {

+      "version": "1.0.16",

+      "resolved": "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz",

+      "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==",

+      "dev": true,

+      "dependencies": {

+        "chalk": "^2.1.0",

+        "figures": "^2.0.0",

+        "log-update": "^2.3.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "peerDependencies": {

+        "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0"

+      }

+    },

+    "node_modules/progress-webpack-plugin/node_modules/ansi-styles": {

+      "version": "3.2.1",

+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",

+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",

+      "dev": true,

+      "dependencies": {

+        "color-convert": "^1.9.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/progress-webpack-plugin/node_modules/chalk": {

+      "version": "2.4.2",

+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",

+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",

+      "dev": true,

+      "dependencies": {

+        "ansi-styles": "^3.2.1",

+        "escape-string-regexp": "^1.0.5",

+        "supports-color": "^5.3.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/progress-webpack-plugin/node_modules/color-convert": {

+      "version": "1.9.3",

+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",

+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",

+      "dev": true,

+      "dependencies": {

+        "color-name": "1.1.3"

+      }

+    },

+    "node_modules/progress-webpack-plugin/node_modules/color-name": {

+      "version": "1.1.3",

+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz",

+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",

+      "dev": true

+    },

+    "node_modules/progress-webpack-plugin/node_modules/has-flag": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz",

+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/progress-webpack-plugin/node_modules/supports-color": {

+      "version": "5.5.0",

+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz",

+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",

+      "dev": true,

+      "dependencies": {

+        "has-flag": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/proxy-addr": {

+      "version": "2.0.7",

+      "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",

+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",

+      "dev": true,

+      "dependencies": {

+        "forwarded": "0.2.0",

+        "ipaddr.js": "1.9.1"

+      },

+      "engines": {

+        "node": ">= 0.10"

+      }

+    },

+    "node_modules/proxy-addr/node_modules/ipaddr.js": {

+      "version": "1.9.1",

+      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",

+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.10"

+      }

+    },

+    "node_modules/proxy-from-env": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",

+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="

+    },

+    "node_modules/pseudomap": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",

+      "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",

+      "dev": true

+    },

+    "node_modules/pump": {

+      "version": "3.0.2",

+      "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz",

+      "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",

+      "dev": true,

+      "dependencies": {

+        "end-of-stream": "^1.1.0",

+        "once": "^1.3.1"

+      }

+    },

+    "node_modules/punycode": {

+      "version": "2.3.1",

+      "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",

+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/qs": {

+      "version": "6.13.0",

+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz",

+      "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",

+      "dev": true,

+      "dependencies": {

+        "side-channel": "^1.0.6"

+      },

+      "engines": {

+        "node": ">=0.6"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/queue-microtask": {

+      "version": "1.2.3",

+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",

+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/feross"

+        },

+        {

+          "type": "patreon",

+          "url": "https://www.patreon.com/feross"

+        },

+        {

+          "type": "consulting",

+          "url": "https://feross.org/support"

+        }

+      ]

+    },

+    "node_modules/randombytes": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",

+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",

+      "dev": true,

+      "dependencies": {

+        "safe-buffer": "^5.1.0"

+      }

+    },

+    "node_modules/range-parser": {

+      "version": "1.2.1",

+      "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",

+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/raw-body": {

+      "version": "2.5.2",

+      "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz",

+      "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",

+      "dev": true,

+      "dependencies": {

+        "bytes": "3.1.2",

+        "http-errors": "2.0.0",

+        "iconv-lite": "0.4.24",

+        "unpipe": "1.0.0"

+      },

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/read-pkg": {

+      "version": "5.2.0",

+      "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz",

+      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",

+      "dev": true,

+      "dependencies": {

+        "@types/normalize-package-data": "^2.4.0",

+        "normalize-package-data": "^2.5.0",

+        "parse-json": "^5.0.0",

+        "type-fest": "^0.6.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/read-pkg-up": {

+      "version": "7.0.1",

+      "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz",

+      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",

+      "dev": true,

+      "dependencies": {

+        "find-up": "^4.1.0",

+        "read-pkg": "^5.2.0",

+        "type-fest": "^0.8.1"

+      },

+      "engines": {

+        "node": ">=8"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/read-pkg-up/node_modules/type-fest": {

+      "version": "0.8.1",

+      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz",

+      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/readable-stream": {

+      "version": "3.6.2",

+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",

+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",

+      "dev": true,

+      "dependencies": {

+        "inherits": "^2.0.3",

+        "string_decoder": "^1.1.1",

+        "util-deprecate": "^1.0.1"

+      },

+      "engines": {

+        "node": ">= 6"

+      }

+    },

+    "node_modules/readdirp": {

+      "version": "3.6.0",

+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",

+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",

+      "dev": true,

+      "dependencies": {

+        "picomatch": "^2.2.1"

+      },

+      "engines": {

+        "node": ">=8.10.0"

+      }

+    },

+    "node_modules/regenerate": {

+      "version": "1.4.2",

+      "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz",

+      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",

+      "dev": true

+    },

+    "node_modules/regenerate-unicode-properties": {

+      "version": "10.2.0",

+      "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",

+      "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",

+      "dev": true,

+      "dependencies": {

+        "regenerate": "^1.4.2"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/regexpu-core": {

+      "version": "6.2.0",

+      "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-6.2.0.tgz",

+      "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",

+      "dev": true,

+      "dependencies": {

+        "regenerate": "^1.4.2",

+        "regenerate-unicode-properties": "^10.2.0",

+        "regjsgen": "^0.8.0",

+        "regjsparser": "^0.12.0",

+        "unicode-match-property-ecmascript": "^2.0.0",

+        "unicode-match-property-value-ecmascript": "^2.1.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/regjsgen": {

+      "version": "0.8.0",

+      "resolved": "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.8.0.tgz",

+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",

+      "dev": true

+    },

+    "node_modules/regjsparser": {

+      "version": "0.12.0",

+      "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.12.0.tgz",

+      "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",

+      "dev": true,

+      "dependencies": {

+        "jsesc": "~3.0.2"

+      },

+      "bin": {

+        "regjsparser": "bin/parser"

+      }

+    },

+    "node_modules/regjsparser/node_modules/jsesc": {

+      "version": "3.0.2",

+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.0.2.tgz",

+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",

+      "dev": true,

+      "bin": {

+        "jsesc": "bin/jsesc"

+      },

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/relateurl": {

+      "version": "0.2.7",

+      "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz",

+      "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.10"

+      }

+    },

+    "node_modules/renderkid": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz",

+      "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==",

+      "dev": true,

+      "dependencies": {

+        "css-select": "^4.1.3",

+        "dom-converter": "^0.2.0",

+        "htmlparser2": "^6.1.0",

+        "lodash": "^4.17.21",

+        "strip-ansi": "^6.0.1"

+      }

+    },

+    "node_modules/require-directory": {

+      "version": "2.1.1",

+      "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",

+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/require-from-string": {

+      "version": "2.0.2",

+      "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",

+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/requires-port": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz",

+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",

+      "dev": true

+    },

+    "node_modules/resolve": {

+      "version": "1.22.10",

+      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz",

+      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",

+      "dev": true,

+      "dependencies": {

+        "is-core-module": "^2.16.0",

+        "path-parse": "^1.0.7",

+        "supports-preserve-symlinks-flag": "^1.0.0"

+      },

+      "bin": {

+        "resolve": "bin/resolve"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/resolve-from": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz",

+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/restore-cursor": {

+      "version": "3.1.0",

+      "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz",

+      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",

+      "dev": true,

+      "dependencies": {

+        "onetime": "^5.1.0",

+        "signal-exit": "^3.0.2"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/retry": {

+      "version": "0.13.1",

+      "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz",

+      "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 4"

+      }

+    },

+    "node_modules/reusify": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",

+      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",

+      "dev": true,

+      "engines": {

+        "iojs": ">=1.0.0",

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/rimraf": {

+      "version": "3.0.2",

+      "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",

+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",

+      "deprecated": "Rimraf versions prior to v4 are no longer supported",

+      "dev": true,

+      "dependencies": {

+        "glob": "^7.1.3"

+      },

+      "bin": {

+        "rimraf": "bin.js"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/isaacs"

+      }

+    },

+    "node_modules/rollup": {

+      "version": "4.41.1",

+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.41.1.tgz",

+      "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",

+      "dev": true,

+      "dependencies": {

+        "@types/estree": "1.0.7"

+      },

+      "bin": {

+        "rollup": "dist/bin/rollup"

+      },

+      "engines": {

+        "node": ">=18.0.0",

+        "npm": ">=8.0.0"

+      },

+      "optionalDependencies": {

+        "@rollup/rollup-android-arm-eabi": "4.41.1",

+        "@rollup/rollup-android-arm64": "4.41.1",

+        "@rollup/rollup-darwin-arm64": "4.41.1",

+        "@rollup/rollup-darwin-x64": "4.41.1",

+        "@rollup/rollup-freebsd-arm64": "4.41.1",

+        "@rollup/rollup-freebsd-x64": "4.41.1",

+        "@rollup/rollup-linux-arm-gnueabihf": "4.41.1",

+        "@rollup/rollup-linux-arm-musleabihf": "4.41.1",

+        "@rollup/rollup-linux-arm64-gnu": "4.41.1",

+        "@rollup/rollup-linux-arm64-musl": "4.41.1",

+        "@rollup/rollup-linux-loongarch64-gnu": "4.41.1",

+        "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",

+        "@rollup/rollup-linux-riscv64-gnu": "4.41.1",

+        "@rollup/rollup-linux-riscv64-musl": "4.41.1",

+        "@rollup/rollup-linux-s390x-gnu": "4.41.1",

+        "@rollup/rollup-linux-x64-gnu": "4.41.1",

+        "@rollup/rollup-linux-x64-musl": "4.41.1",

+        "@rollup/rollup-win32-arm64-msvc": "4.41.1",

+        "@rollup/rollup-win32-ia32-msvc": "4.41.1",

+        "@rollup/rollup-win32-x64-msvc": "4.41.1",

+        "fsevents": "~2.3.2"

+      }

+    },

+    "node_modules/run-parallel": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",

+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/feross"

+        },

+        {

+          "type": "patreon",

+          "url": "https://www.patreon.com/feross"

+        },

+        {

+          "type": "consulting",

+          "url": "https://feross.org/support"

+        }

+      ],

+      "dependencies": {

+        "queue-microtask": "^1.2.2"

+      }

+    },

+    "node_modules/safe-buffer": {

+      "version": "5.2.1",

+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",

+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/feross"

+        },

+        {

+          "type": "patreon",

+          "url": "https://www.patreon.com/feross"

+        },

+        {

+          "type": "consulting",

+          "url": "https://feross.org/support"

+        }

+      ]

+    },

+    "node_modules/safer-buffer": {

+      "version": "2.1.2",

+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",

+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",

+      "dev": true

+    },

+    "node_modules/sass": {

+      "version": "1.89.1",

+      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.89.1.tgz",

+      "integrity": "sha512-eMLLkl+qz7tx/0cJ9wI+w09GQ2zodTkcE/aVfywwdlRcI3EO19xGnbmJwg/JMIm+5MxVJ6outddLZ4Von4E++Q==",

+      "dev": true,

+      "dependencies": {

+        "chokidar": "^4.0.0",

+        "immutable": "^5.0.2",

+        "source-map-js": ">=0.6.2 <2.0.0"

+      },

+      "bin": {

+        "sass": "sass.js"

+      },

+      "engines": {

+        "node": ">=14.0.0"

+      },

+      "optionalDependencies": {

+        "@parcel/watcher": "^2.4.1"

+      }

+    },

+    "node_modules/sass-loader": {

+      "version": "16.0.5",

+      "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-16.0.5.tgz",

+      "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==",

+      "dev": true,

+      "dependencies": {

+        "neo-async": "^2.6.2"

+      },

+      "engines": {

+        "node": ">= 18.12.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "@rspack/core": "0.x || 1.x",

+        "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",

+        "sass": "^1.3.0",

+        "sass-embedded": "*",

+        "webpack": "^5.0.0"

+      },

+      "peerDependenciesMeta": {

+        "@rspack/core": {

+          "optional": true

+        },

+        "node-sass": {

+          "optional": true

+        },

+        "sass": {

+          "optional": true

+        },

+        "sass-embedded": {

+          "optional": true

+        },

+        "webpack": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/sass/node_modules/chokidar": {

+      "version": "4.0.3",

+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz",

+      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",

+      "dev": true,

+      "dependencies": {

+        "readdirp": "^4.0.1"

+      },

+      "engines": {

+        "node": ">= 14.16.0"

+      },

+      "funding": {

+        "url": "https://paulmillr.com/funding/"

+      }

+    },

+    "node_modules/sass/node_modules/readdirp": {

+      "version": "4.1.2",

+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz",

+      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 14.18.0"

+      },

+      "funding": {

+        "type": "individual",

+        "url": "https://paulmillr.com/funding/"

+      }

+    },

+    "node_modules/schema-utils": {

+      "version": "2.7.1",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz",

+      "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.5",

+        "ajv": "^6.12.4",

+        "ajv-keywords": "^3.5.2"

+      },

+      "engines": {

+        "node": ">= 8.9.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/select-hose": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz",

+      "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",

+      "dev": true

+    },

+    "node_modules/selfsigned": {

+      "version": "2.4.1",

+      "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.4.1.tgz",

+      "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",

+      "dev": true,

+      "dependencies": {

+        "@types/node-forge": "^1.3.0",

+        "node-forge": "^1"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/semver": {

+      "version": "6.3.1",

+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",

+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",

+      "dev": true,

+      "bin": {

+        "semver": "bin/semver.js"

+      }

+    },

+    "node_modules/send": {

+      "version": "0.19.0",

+      "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz",

+      "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",

+      "dev": true,

+      "dependencies": {

+        "debug": "2.6.9",

+        "depd": "2.0.0",

+        "destroy": "1.2.0",

+        "encodeurl": "~1.0.2",

+        "escape-html": "~1.0.3",

+        "etag": "~1.8.1",

+        "fresh": "0.5.2",

+        "http-errors": "2.0.0",

+        "mime": "1.6.0",

+        "ms": "2.1.3",

+        "on-finished": "2.4.1",

+        "range-parser": "~1.2.1",

+        "statuses": "2.0.1"

+      },

+      "engines": {

+        "node": ">= 0.8.0"

+      }

+    },

+    "node_modules/send/node_modules/debug": {

+      "version": "2.6.9",

+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",

+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",

+      "dev": true,

+      "dependencies": {

+        "ms": "2.0.0"

+      }

+    },

+    "node_modules/send/node_modules/debug/node_modules/ms": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",

+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",

+      "dev": true

+    },

+    "node_modules/send/node_modules/encodeurl": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",

+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/serialize-javascript": {

+      "version": "6.0.2",

+      "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz",

+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",

+      "dev": true,

+      "dependencies": {

+        "randombytes": "^2.1.0"

+      }

+    },

+    "node_modules/serve-index": {

+      "version": "1.9.1",

+      "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz",

+      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",

+      "dev": true,

+      "dependencies": {

+        "accepts": "~1.3.4",

+        "batch": "0.6.1",

+        "debug": "2.6.9",

+        "escape-html": "~1.0.3",

+        "http-errors": "~1.6.2",

+        "mime-types": "~2.1.17",

+        "parseurl": "~1.3.2"

+      },

+      "engines": {

+        "node": ">= 0.8.0"

+      }

+    },

+    "node_modules/serve-index/node_modules/debug": {

+      "version": "2.6.9",

+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",

+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",

+      "dev": true,

+      "dependencies": {

+        "ms": "2.0.0"

+      }

+    },

+    "node_modules/serve-index/node_modules/depd": {

+      "version": "1.1.2",

+      "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz",

+      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/serve-index/node_modules/http-errors": {

+      "version": "1.6.3",

+      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz",

+      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",

+      "dev": true,

+      "dependencies": {

+        "depd": "~1.1.2",

+        "inherits": "2.0.3",

+        "setprototypeof": "1.1.0",

+        "statuses": ">= 1.4.0 < 2"

+      },

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/serve-index/node_modules/inherits": {

+      "version": "2.0.3",

+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz",

+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",

+      "dev": true

+    },

+    "node_modules/serve-index/node_modules/ms": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",

+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",

+      "dev": true

+    },

+    "node_modules/serve-index/node_modules/setprototypeof": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz",

+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",

+      "dev": true

+    },

+    "node_modules/serve-index/node_modules/statuses": {

+      "version": "1.5.0",

+      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",

+      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/serve-static": {

+      "version": "1.16.2",

+      "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz",

+      "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",

+      "dev": true,

+      "dependencies": {

+        "encodeurl": "~2.0.0",

+        "escape-html": "~1.0.3",

+        "parseurl": "~1.3.3",

+        "send": "0.19.0"

+      },

+      "engines": {

+        "node": ">= 0.8.0"

+      }

+    },

+    "node_modules/set-function-length": {

+      "version": "1.2.2",

+      "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz",

+      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",

+      "dev": true,

+      "dependencies": {

+        "define-data-property": "^1.1.4",

+        "es-errors": "^1.3.0",

+        "function-bind": "^1.1.2",

+        "get-intrinsic": "^1.2.4",

+        "gopd": "^1.0.1",

+        "has-property-descriptors": "^1.0.2"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      }

+    },

+    "node_modules/setprototypeof": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",

+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",

+      "dev": true

+    },

+    "node_modules/shallow-clone": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz",

+      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",

+      "dev": true,

+      "dependencies": {

+        "kind-of": "^6.0.2"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/shebang-command": {

+      "version": "1.2.0",

+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz",

+      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",

+      "dev": true,

+      "dependencies": {

+        "shebang-regex": "^1.0.0"

+      },

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/shebang-regex": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz",

+      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/shell-quote": {

+      "version": "1.8.3",

+      "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.3.tgz",

+      "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/side-channel": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz",

+      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",

+      "dev": true,

+      "dependencies": {

+        "es-errors": "^1.3.0",

+        "object-inspect": "^1.13.3",

+        "side-channel-list": "^1.0.0",

+        "side-channel-map": "^1.0.1",

+        "side-channel-weakmap": "^1.0.2"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/side-channel-list": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz",

+      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",

+      "dev": true,

+      "dependencies": {

+        "es-errors": "^1.3.0",

+        "object-inspect": "^1.13.3"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/side-channel-map": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz",

+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",

+      "dev": true,

+      "dependencies": {

+        "call-bound": "^1.0.2",

+        "es-errors": "^1.3.0",

+        "get-intrinsic": "^1.2.5",

+        "object-inspect": "^1.13.3"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/side-channel-weakmap": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",

+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",

+      "dev": true,

+      "dependencies": {

+        "call-bound": "^1.0.2",

+        "es-errors": "^1.3.0",

+        "get-intrinsic": "^1.2.5",

+        "object-inspect": "^1.13.3",

+        "side-channel-map": "^1.0.1"

+      },

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/signal-exit": {

+      "version": "3.0.7",

+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",

+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",

+      "dev": true

+    },

+    "node_modules/sirv": {

+      "version": "2.0.4",

+      "resolved": "https://registry.npmmirror.com/sirv/-/sirv-2.0.4.tgz",

+      "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",

+      "dev": true,

+      "dependencies": {

+        "@polka/url": "^1.0.0-next.24",

+        "mrmime": "^2.0.0",

+        "totalist": "^3.0.0"

+      },

+      "engines": {

+        "node": ">= 10"

+      }

+    },

+    "node_modules/slash": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz",

+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/sockjs": {

+      "version": "0.3.24",

+      "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz",

+      "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",

+      "dev": true,

+      "dependencies": {

+        "faye-websocket": "^0.11.3",

+        "uuid": "^8.3.2",

+        "websocket-driver": "^0.7.4"

+      }

+    },

+    "node_modules/source-map": {

+      "version": "0.6.1",

+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",

+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/source-map-js": {

+      "version": "1.2.1",

+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",

+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/source-map-support": {

+      "version": "0.5.21",

+      "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",

+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",

+      "dev": true,

+      "dependencies": {

+        "buffer-from": "^1.0.0",

+        "source-map": "^0.6.0"

+      }

+    },

+    "node_modules/spdx-correct": {

+      "version": "3.2.0",

+      "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz",

+      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",

+      "dev": true,

+      "dependencies": {

+        "spdx-expression-parse": "^3.0.0",

+        "spdx-license-ids": "^3.0.0"

+      }

+    },

+    "node_modules/spdx-exceptions": {

+      "version": "2.5.0",

+      "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",

+      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",

+      "dev": true

+    },

+    "node_modules/spdx-expression-parse": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",

+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",

+      "dev": true,

+      "dependencies": {

+        "spdx-exceptions": "^2.1.0",

+        "spdx-license-ids": "^3.0.0"

+      }

+    },

+    "node_modules/spdx-license-ids": {

+      "version": "3.0.21",

+      "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",

+      "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",

+      "dev": true

+    },

+    "node_modules/spdy": {

+      "version": "4.0.2",

+      "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz",

+      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",

+      "dev": true,

+      "dependencies": {

+        "debug": "^4.1.0",

+        "handle-thing": "^2.0.0",

+        "http-deceiver": "^1.2.7",

+        "select-hose": "^2.0.0",

+        "spdy-transport": "^3.0.0"

+      },

+      "engines": {

+        "node": ">=6.0.0"

+      }

+    },

+    "node_modules/spdy-transport": {

+      "version": "3.0.0",

+      "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz",

+      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",

+      "dev": true,

+      "dependencies": {

+        "debug": "^4.1.0",

+        "detect-node": "^2.0.4",

+        "hpack.js": "^2.1.6",

+        "obuf": "^1.1.2",

+        "readable-stream": "^3.0.6",

+        "wbuf": "^1.7.3"

+      }

+    },

+    "node_modules/ssri": {

+      "version": "8.0.1",

+      "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz",

+      "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",

+      "dev": true,

+      "dependencies": {

+        "minipass": "^3.1.1"

+      },

+      "engines": {

+        "node": ">= 8"

+      }

+    },

+    "node_modules/stable": {

+      "version": "0.1.8",

+      "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz",

+      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",

+      "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",

+      "dev": true

+    },

+    "node_modules/stackframe": {

+      "version": "1.3.4",

+      "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz",

+      "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",

+      "dev": true

+    },

+    "node_modules/statuses": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",

+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/string_decoder": {

+      "version": "1.3.0",

+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",

+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",

+      "dev": true,

+      "dependencies": {

+        "safe-buffer": "~5.2.0"

+      }

+    },

+    "node_modules/string-width": {

+      "version": "4.2.3",

+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",

+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",

+      "dev": true,

+      "dependencies": {

+        "emoji-regex": "^8.0.0",

+        "is-fullwidth-code-point": "^3.0.0",

+        "strip-ansi": "^6.0.1"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/strip-ansi": {

+      "version": "6.0.1",

+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",

+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",

+      "dev": true,

+      "dependencies": {

+        "ansi-regex": "^5.0.1"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/strip-eof": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz",

+      "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.10.0"

+      }

+    },

+    "node_modules/strip-final-newline": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz",

+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/stylehacks": {

+      "version": "5.1.1",

+      "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz",

+      "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==",

+      "dev": true,

+      "dependencies": {

+        "browserslist": "^4.21.4",

+        "postcss-selector-parser": "^6.0.4"

+      },

+      "engines": {

+        "node": "^10 || ^12 || >=14.0"

+      },

+      "peerDependencies": {

+        "postcss": "^8.2.15"

+      }

+    },

+    "node_modules/supports-color": {

+      "version": "7.2.0",

+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",

+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",

+      "dev": true,

+      "dependencies": {

+        "has-flag": "^4.0.0"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/supports-preserve-symlinks-flag": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",

+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/ljharb"

+      }

+    },

+    "node_modules/svg-tags": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz",

+      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",

+      "dev": true

+    },

+    "node_modules/svgo": {

+      "version": "2.8.0",

+      "resolved": "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz",

+      "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",

+      "dev": true,

+      "dependencies": {

+        "@trysound/sax": "0.2.0",

+        "commander": "^7.2.0",

+        "css-select": "^4.1.3",

+        "css-tree": "^1.1.3",

+        "csso": "^4.2.0",

+        "picocolors": "^1.0.0",

+        "stable": "^0.1.8"

+      },

+      "bin": {

+        "svgo": "bin/svgo"

+      },

+      "engines": {

+        "node": ">=10.13.0"

+      }

+    },

+    "node_modules/svgo/node_modules/commander": {

+      "version": "7.2.0",

+      "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz",

+      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",

+      "dev": true,

+      "engines": {

+        "node": ">= 10"

+      }

+    },

+    "node_modules/tapable": {

+      "version": "2.2.2",

+      "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.2.tgz",

+      "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/terser": {

+      "version": "5.40.0",

+      "resolved": "https://registry.npmmirror.com/terser/-/terser-5.40.0.tgz",

+      "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==",

+      "dev": true,

+      "dependencies": {

+        "@jridgewell/source-map": "^0.3.3",

+        "acorn": "^8.14.0",

+        "commander": "^2.20.0",

+        "source-map-support": "~0.5.20"

+      },

+      "bin": {

+        "terser": "bin/terser"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/terser-webpack-plugin": {

+      "version": "5.3.14",

+      "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",

+      "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",

+      "dev": true,

+      "dependencies": {

+        "@jridgewell/trace-mapping": "^0.3.25",

+        "jest-worker": "^27.4.5",

+        "schema-utils": "^4.3.0",

+        "serialize-javascript": "^6.0.2",

+        "terser": "^5.31.1"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "webpack": "^5.1.0"

+      },

+      "peerDependenciesMeta": {

+        "@swc/core": {

+          "optional": true

+        },

+        "esbuild": {

+          "optional": true

+        },

+        "uglify-js": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/terser-webpack-plugin/node_modules/ajv": {

+      "version": "8.17.1",

+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",

+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3",

+        "fast-uri": "^3.0.1",

+        "json-schema-traverse": "^1.0.0",

+        "require-from-string": "^2.0.2"

+      },

+      "funding": {

+        "type": "github",

+        "url": "https://github.com/sponsors/epoberezkin"

+      }

+    },

+    "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",

+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3"

+      },

+      "peerDependencies": {

+        "ajv": "^8.8.2"

+      }

+    },

+    "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",

+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",

+      "dev": true

+    },

+    "node_modules/terser-webpack-plugin/node_modules/schema-utils": {

+      "version": "4.3.2",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",

+      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.9",

+        "ajv": "^8.9.0",

+        "ajv-formats": "^2.1.1",

+        "ajv-keywords": "^5.1.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/terser/node_modules/commander": {

+      "version": "2.20.3",

+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",

+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",

+      "dev": true

+    },

+    "node_modules/thenify": {

+      "version": "3.3.1",

+      "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz",

+      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",

+      "dev": true,

+      "dependencies": {

+        "any-promise": "^1.0.0"

+      }

+    },

+    "node_modules/thenify-all": {

+      "version": "1.6.0",

+      "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz",

+      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",

+      "dev": true,

+      "dependencies": {

+        "thenify": ">= 3.1.0 < 4"

+      },

+      "engines": {

+        "node": ">=0.8"

+      }

+    },

+    "node_modules/thread-loader": {

+      "version": "3.0.4",

+      "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz",

+      "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==",

+      "dev": true,

+      "dependencies": {

+        "json-parse-better-errors": "^1.0.2",

+        "loader-runner": "^4.1.0",

+        "loader-utils": "^2.0.0",

+        "neo-async": "^2.6.2",

+        "schema-utils": "^3.0.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "webpack": "^4.27.0 || ^5.0.0"

+      }

+    },

+    "node_modules/thread-loader/node_modules/loader-utils": {

+      "version": "2.0.4",

+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",

+      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",

+      "dev": true,

+      "dependencies": {

+        "big.js": "^5.2.2",

+        "emojis-list": "^3.0.0",

+        "json5": "^2.1.2"

+      },

+      "engines": {

+        "node": ">=8.9.0"

+      }

+    },

+    "node_modules/thread-loader/node_modules/schema-utils": {

+      "version": "3.3.0",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",

+      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.8",

+        "ajv": "^6.12.5",

+        "ajv-keywords": "^3.5.2"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/thunky": {

+      "version": "1.1.0",

+      "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz",

+      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",

+      "dev": true

+    },

+    "node_modules/tinyglobby": {

+      "version": "0.2.14",

+      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz",

+      "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",

+      "dev": true,

+      "dependencies": {

+        "fdir": "^6.4.4",

+        "picomatch": "^4.0.2"

+      },

+      "engines": {

+        "node": ">=12.0.0"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/SuperchupuDev"

+      }

+    },

+    "node_modules/tinyglobby/node_modules/fdir": {

+      "version": "6.4.5",

+      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.5.tgz",

+      "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",

+      "dev": true,

+      "peerDependencies": {

+        "picomatch": "^3 || ^4"

+      },

+      "peerDependenciesMeta": {

+        "picomatch": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/tinyglobby/node_modules/picomatch": {

+      "version": "4.0.2",

+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",

+      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",

+      "dev": true,

+      "engines": {

+        "node": ">=12"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/jonschlinkert"

+      }

+    },

+    "node_modules/to-regex-range": {

+      "version": "5.0.1",

+      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",

+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",

+      "dev": true,

+      "dependencies": {

+        "is-number": "^7.0.0"

+      },

+      "engines": {

+        "node": ">=8.0"

+      }

+    },

+    "node_modules/toidentifier": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",

+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.6"

+      }

+    },

+    "node_modules/totalist": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",

+      "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=6"

+      }

+    },

+    "node_modules/tr46": {

+      "version": "0.0.3",

+      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",

+      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",

+      "dev": true

+    },

+    "node_modules/tslib": {

+      "version": "2.8.1",

+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",

+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",

+      "dev": true

+    },

+    "node_modules/type-fest": {

+      "version": "0.6.0",

+      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz",

+      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",

+      "dev": true,

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/type-is": {

+      "version": "1.6.18",

+      "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",

+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",

+      "dev": true,

+      "dependencies": {

+        "media-typer": "0.3.0",

+        "mime-types": "~2.1.24"

+      },

+      "engines": {

+        "node": ">= 0.6"

+      }

+    },

+    "node_modules/undici-types": {

+      "version": "6.21.0",

+      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz",

+      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",

+      "dev": true

+    },

+    "node_modules/unicode-canonical-property-names-ecmascript": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",

+      "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/unicode-match-property-ecmascript": {

+      "version": "2.0.0",

+      "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",

+      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",

+      "dev": true,

+      "dependencies": {

+        "unicode-canonical-property-names-ecmascript": "^2.0.0",

+        "unicode-property-aliases-ecmascript": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/unicode-match-property-value-ecmascript": {

+      "version": "2.2.0",

+      "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",

+      "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/unicode-property-aliases-ecmascript": {

+      "version": "2.1.0",

+      "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",

+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",

+      "dev": true,

+      "engines": {

+        "node": ">=4"

+      }

+    },

+    "node_modules/universalify": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",

+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",

+      "dev": true,

+      "engines": {

+        "node": ">= 10.0.0"

+      }

+    },

+    "node_modules/unpipe": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",

+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/update-browserslist-db": {

+      "version": "1.1.3",

+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",

+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",

+      "dev": true,

+      "funding": [

+        {

+          "type": "opencollective",

+          "url": "https://opencollective.com/browserslist"

+        },

+        {

+          "type": "tidelift",

+          "url": "https://tidelift.com/funding/github/npm/browserslist"

+        },

+        {

+          "type": "github",

+          "url": "https://github.com/sponsors/ai"

+        }

+      ],

+      "dependencies": {

+        "escalade": "^3.2.0",

+        "picocolors": "^1.1.1"

+      },

+      "bin": {

+        "update-browserslist-db": "cli.js"

+      },

+      "peerDependencies": {

+        "browserslist": ">= 4.21.0"

+      }

+    },

+    "node_modules/uri-js": {

+      "version": "4.4.1",

+      "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",

+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",

+      "dev": true,

+      "dependencies": {

+        "punycode": "^2.1.0"

+      }

+    },

+    "node_modules/util-deprecate": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",

+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",

+      "dev": true

+    },

+    "node_modules/utila": {

+      "version": "0.4.0",

+      "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz",

+      "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==",

+      "dev": true

+    },

+    "node_modules/utils-merge": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",

+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.4.0"

+      }

+    },

+    "node_modules/uuid": {

+      "version": "8.3.2",

+      "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",

+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",

+      "dev": true,

+      "bin": {

+        "uuid": "dist/bin/uuid"

+      }

+    },

+    "node_modules/validate-npm-package-license": {

+      "version": "3.0.4",

+      "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",

+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",

+      "dev": true,

+      "dependencies": {

+        "spdx-correct": "^3.0.0",

+        "spdx-expression-parse": "^3.0.0"

+      }

+    },

+    "node_modules/vary": {

+      "version": "1.1.2",

+      "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",

+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",

+      "dev": true,

+      "engines": {

+        "node": ">= 0.8"

+      }

+    },

+    "node_modules/vite": {

+      "version": "6.3.5",

+      "resolved": "https://registry.npmmirror.com/vite/-/vite-6.3.5.tgz",

+      "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",

+      "dev": true,

+      "dependencies": {

+        "esbuild": "^0.25.0",

+        "fdir": "^6.4.4",

+        "picomatch": "^4.0.2",

+        "postcss": "^8.5.3",

+        "rollup": "^4.34.9",

+        "tinyglobby": "^0.2.13"

+      },

+      "bin": {

+        "vite": "bin/vite.js"

+      },

+      "engines": {

+        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"

+      },

+      "funding": {

+        "url": "https://github.com/vitejs/vite?sponsor=1"

+      },

+      "optionalDependencies": {

+        "fsevents": "~2.3.3"

+      },

+      "peerDependencies": {

+        "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",

+        "jiti": ">=1.21.0",

+        "less": "*",

+        "lightningcss": "^1.21.0",

+        "sass": "*",

+        "sass-embedded": "*",

+        "stylus": "*",

+        "sugarss": "*",

+        "terser": "^5.16.0",

+        "tsx": "^4.8.1",

+        "yaml": "^2.4.2"

+      },

+      "peerDependenciesMeta": {

+        "@types/node": {

+          "optional": true

+        },

+        "jiti": {

+          "optional": true

+        },

+        "less": {

+          "optional": true

+        },

+        "lightningcss": {

+          "optional": true

+        },

+        "sass": {

+          "optional": true

+        },

+        "sass-embedded": {

+          "optional": true

+        },

+        "stylus": {

+          "optional": true

+        },

+        "sugarss": {

+          "optional": true

+        },

+        "terser": {

+          "optional": true

+        },

+        "tsx": {

+          "optional": true

+        },

+        "yaml": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/vite/node_modules/fdir": {

+      "version": "6.4.5",

+      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.5.tgz",

+      "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",

+      "dev": true,

+      "peerDependencies": {

+        "picomatch": "^3 || ^4"

+      },

+      "peerDependenciesMeta": {

+        "picomatch": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/vite/node_modules/picomatch": {

+      "version": "4.0.2",

+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",

+      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",

+      "dev": true,

+      "engines": {

+        "node": ">=12"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/jonschlinkert"

+      }

+    },

+    "node_modules/vue": {

+      "version": "3.5.16",

+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.16.tgz",

+      "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==",

+      "dependencies": {

+        "@vue/compiler-dom": "3.5.16",

+        "@vue/compiler-sfc": "3.5.16",

+        "@vue/runtime-dom": "3.5.16",

+        "@vue/server-renderer": "3.5.16",

+        "@vue/shared": "3.5.16"

+      },

+      "peerDependencies": {

+        "typescript": "*"

+      },

+      "peerDependenciesMeta": {

+        "typescript": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/vue-hot-reload-api": {

+      "version": "2.3.4",

+      "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",

+      "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",

+      "dev": true

+    },

+    "node_modules/vue-loader": {

+      "version": "17.4.2",

+      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.4.2.tgz",

+      "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==",

+      "dev": true,

+      "dependencies": {

+        "chalk": "^4.1.0",

+        "hash-sum": "^2.0.0",

+        "watchpack": "^2.4.0"

+      },

+      "peerDependencies": {

+        "webpack": "^4.1.0 || ^5.0.0-0"

+      },

+      "peerDependenciesMeta": {

+        "@vue/compiler-sfc": {

+          "optional": true

+        },

+        "vue": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/vue-loader/node_modules/chalk": {

+      "version": "4.1.2",

+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",

+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",

+      "dev": true,

+      "dependencies": {

+        "ansi-styles": "^4.1.0",

+        "supports-color": "^7.1.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/chalk/chalk?sponsor=1"

+      }

+    },

+    "node_modules/vue-router": {

+      "version": "4.5.1",

+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz",

+      "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==",

+      "dependencies": {

+        "@vue/devtools-api": "^6.6.4"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/posva"

+      },

+      "peerDependencies": {

+        "vue": "^3.2.0"

+      }

+    },

+    "node_modules/vue-style-loader": {

+      "version": "4.1.3",

+      "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz",

+      "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==",

+      "dev": true,

+      "dependencies": {

+        "hash-sum": "^1.0.2",

+        "loader-utils": "^1.0.2"

+      }

+    },

+    "node_modules/vue-style-loader/node_modules/hash-sum": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",

+      "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",

+      "dev": true

+    },

+    "node_modules/vue-template-es2015-compiler": {

+      "version": "1.9.1",

+      "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",

+      "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",

+      "dev": true

+    },

+    "node_modules/vuex": {

+      "version": "4.1.0",

+      "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz",

+      "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",

+      "dependencies": {

+        "@vue/devtools-api": "^6.0.0-beta.11"

+      },

+      "peerDependencies": {

+        "vue": "^3.2.0"

+      }

+    },

+    "node_modules/watchpack": {

+      "version": "2.4.4",

+      "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.4.tgz",

+      "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",

+      "dev": true,

+      "dependencies": {

+        "glob-to-regexp": "^0.4.1",

+        "graceful-fs": "^4.1.2"

+      },

+      "engines": {

+        "node": ">=10.13.0"

+      }

+    },

+    "node_modules/wbuf": {

+      "version": "1.7.3",

+      "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz",

+      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",

+      "dev": true,

+      "dependencies": {

+        "minimalistic-assert": "^1.0.0"

+      }

+    },

+    "node_modules/wcwidth": {

+      "version": "1.0.1",

+      "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz",

+      "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",

+      "dev": true,

+      "dependencies": {

+        "defaults": "^1.0.3"

+      }

+    },

+    "node_modules/webidl-conversions": {

+      "version": "3.0.1",

+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",

+      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",

+      "dev": true

+    },

+    "node_modules/webpack": {

+      "version": "5.99.9",

+      "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.99.9.tgz",

+      "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==",

+      "dev": true,

+      "dependencies": {

+        "@types/eslint-scope": "^3.7.7",

+        "@types/estree": "^1.0.6",

+        "@types/json-schema": "^7.0.15",

+        "@webassemblyjs/ast": "^1.14.1",

+        "@webassemblyjs/wasm-edit": "^1.14.1",

+        "@webassemblyjs/wasm-parser": "^1.14.1",

+        "acorn": "^8.14.0",

+        "browserslist": "^4.24.0",

+        "chrome-trace-event": "^1.0.2",

+        "enhanced-resolve": "^5.17.1",

+        "es-module-lexer": "^1.2.1",

+        "eslint-scope": "5.1.1",

+        "events": "^3.2.0",

+        "glob-to-regexp": "^0.4.1",

+        "graceful-fs": "^4.2.11",

+        "json-parse-even-better-errors": "^2.3.1",

+        "loader-runner": "^4.2.0",

+        "mime-types": "^2.1.27",

+        "neo-async": "^2.6.2",

+        "schema-utils": "^4.3.2",

+        "tapable": "^2.1.1",

+        "terser-webpack-plugin": "^5.3.11",

+        "watchpack": "^2.4.1",

+        "webpack-sources": "^3.2.3"

+      },

+      "bin": {

+        "webpack": "bin/webpack.js"

+      },

+      "engines": {

+        "node": ">=10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependenciesMeta": {

+        "webpack-cli": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/webpack-bundle-analyzer": {

+      "version": "4.10.2",

+      "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz",

+      "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==",

+      "dev": true,

+      "dependencies": {

+        "@discoveryjs/json-ext": "0.5.7",

+        "acorn": "^8.0.4",

+        "acorn-walk": "^8.0.0",

+        "commander": "^7.2.0",

+        "debounce": "^1.2.1",

+        "escape-string-regexp": "^4.0.0",

+        "gzip-size": "^6.0.0",

+        "html-escaper": "^2.0.2",

+        "opener": "^1.5.2",

+        "picocolors": "^1.0.0",

+        "sirv": "^2.0.3",

+        "ws": "^7.3.1"

+      },

+      "bin": {

+        "webpack-bundle-analyzer": "lib/bin/analyzer.js"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      }

+    },

+    "node_modules/webpack-bundle-analyzer/node_modules/commander": {

+      "version": "7.2.0",

+      "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz",

+      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",

+      "dev": true,

+      "engines": {

+        "node": ">= 10"

+      }

+    },

+    "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": {

+      "version": "4.0.0",

+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",

+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/sponsors/sindresorhus"

+      }

+    },

+    "node_modules/webpack-chain": {

+      "version": "6.5.1",

+      "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz",

+      "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==",

+      "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",

+      "dev": true,

+      "dependencies": {

+        "deepmerge": "^1.5.2",

+        "javascript-stringify": "^2.0.1"

+      },

+      "engines": {

+        "node": ">=8"

+      }

+    },

+    "node_modules/webpack-dev-middleware": {

+      "version": "5.3.4",

+      "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",

+      "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",

+      "dev": true,

+      "dependencies": {

+        "colorette": "^2.0.10",

+        "memfs": "^3.4.3",

+        "mime-types": "^2.1.31",

+        "range-parser": "^1.2.1",

+        "schema-utils": "^4.0.0"

+      },

+      "engines": {

+        "node": ">= 12.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "webpack": "^4.0.0 || ^5.0.0"

+      }

+    },

+    "node_modules/webpack-dev-middleware/node_modules/ajv": {

+      "version": "8.17.1",

+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",

+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3",

+        "fast-uri": "^3.0.1",

+        "json-schema-traverse": "^1.0.0",

+        "require-from-string": "^2.0.2"

+      },

+      "funding": {

+        "type": "github",

+        "url": "https://github.com/sponsors/epoberezkin"

+      }

+    },

+    "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",

+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3"

+      },

+      "peerDependencies": {

+        "ajv": "^8.8.2"

+      }

+    },

+    "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",

+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",

+      "dev": true

+    },

+    "node_modules/webpack-dev-middleware/node_modules/schema-utils": {

+      "version": "4.3.2",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",

+      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.9",

+        "ajv": "^8.9.0",

+        "ajv-formats": "^2.1.1",

+        "ajv-keywords": "^5.1.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/webpack-dev-server": {

+      "version": "4.15.2",

+      "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",

+      "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",

+      "dev": true,

+      "dependencies": {

+        "@types/bonjour": "^3.5.9",

+        "@types/connect-history-api-fallback": "^1.3.5",

+        "@types/express": "^4.17.13",

+        "@types/serve-index": "^1.9.1",

+        "@types/serve-static": "^1.13.10",

+        "@types/sockjs": "^0.3.33",

+        "@types/ws": "^8.5.5",

+        "ansi-html-community": "^0.0.8",

+        "bonjour-service": "^1.0.11",

+        "chokidar": "^3.5.3",

+        "colorette": "^2.0.10",

+        "compression": "^1.7.4",

+        "connect-history-api-fallback": "^2.0.0",

+        "default-gateway": "^6.0.3",

+        "express": "^4.17.3",

+        "graceful-fs": "^4.2.6",

+        "html-entities": "^2.3.2",

+        "http-proxy-middleware": "^2.0.3",

+        "ipaddr.js": "^2.0.1",

+        "launch-editor": "^2.6.0",

+        "open": "^8.0.9",

+        "p-retry": "^4.5.0",

+        "rimraf": "^3.0.2",

+        "schema-utils": "^4.0.0",

+        "selfsigned": "^2.1.1",

+        "serve-index": "^1.9.1",

+        "sockjs": "^0.3.24",

+        "spdy": "^4.0.2",

+        "webpack-dev-middleware": "^5.3.4",

+        "ws": "^8.13.0"

+      },

+      "bin": {

+        "webpack-dev-server": "bin/webpack-dev-server.js"

+      },

+      "engines": {

+        "node": ">= 12.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      },

+      "peerDependencies": {

+        "webpack": "^4.37.0 || ^5.0.0"

+      },

+      "peerDependenciesMeta": {

+        "webpack": {

+          "optional": true

+        },

+        "webpack-cli": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/webpack-dev-server/node_modules/ajv": {

+      "version": "8.17.1",

+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",

+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3",

+        "fast-uri": "^3.0.1",

+        "json-schema-traverse": "^1.0.0",

+        "require-from-string": "^2.0.2"

+      },

+      "funding": {

+        "type": "github",

+        "url": "https://github.com/sponsors/epoberezkin"

+      }

+    },

+    "node_modules/webpack-dev-server/node_modules/ajv-keywords": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",

+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3"

+      },

+      "peerDependencies": {

+        "ajv": "^8.8.2"

+      }

+    },

+    "node_modules/webpack-dev-server/node_modules/json-schema-traverse": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",

+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",

+      "dev": true

+    },

+    "node_modules/webpack-dev-server/node_modules/schema-utils": {

+      "version": "4.3.2",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",

+      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.9",

+        "ajv": "^8.9.0",

+        "ajv-formats": "^2.1.1",

+        "ajv-keywords": "^5.1.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/webpack-dev-server/node_modules/ws": {

+      "version": "8.18.2",

+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.2.tgz",

+      "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=10.0.0"

+      },

+      "peerDependencies": {

+        "bufferutil": "^4.0.1",

+        "utf-8-validate": ">=5.0.2"

+      },

+      "peerDependenciesMeta": {

+        "bufferutil": {

+          "optional": true

+        },

+        "utf-8-validate": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/webpack-merge": {

+      "version": "5.10.0",

+      "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz",

+      "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",

+      "dev": true,

+      "dependencies": {

+        "clone-deep": "^4.0.1",

+        "flat": "^5.0.2",

+        "wildcard": "^2.0.0"

+      },

+      "engines": {

+        "node": ">=10.0.0"

+      }

+    },

+    "node_modules/webpack-sources": {

+      "version": "3.3.1",

+      "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.3.1.tgz",

+      "integrity": "sha512-EWzBqw2ZH/hIXIWIdOTvFHij6MuYdDHZVL12bZb921CrmP9UqYhK9+a3OC/onMGeBYrt2aOivHCLy5E+x5wYOA==",

+      "dev": true,

+      "engines": {

+        "node": ">=10.13.0"

+      }

+    },

+    "node_modules/webpack-virtual-modules": {

+      "version": "0.4.6",

+      "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz",

+      "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==",

+      "dev": true

+    },

+    "node_modules/webpack/node_modules/ajv": {

+      "version": "8.17.1",

+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",

+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3",

+        "fast-uri": "^3.0.1",

+        "json-schema-traverse": "^1.0.0",

+        "require-from-string": "^2.0.2"

+      },

+      "funding": {

+        "type": "github",

+        "url": "https://github.com/sponsors/epoberezkin"

+      }

+    },

+    "node_modules/webpack/node_modules/ajv-keywords": {

+      "version": "5.1.0",

+      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",

+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",

+      "dev": true,

+      "dependencies": {

+        "fast-deep-equal": "^3.1.3"

+      },

+      "peerDependencies": {

+        "ajv": "^8.8.2"

+      }

+    },

+    "node_modules/webpack/node_modules/json-schema-traverse": {

+      "version": "1.0.0",

+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",

+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",

+      "dev": true

+    },

+    "node_modules/webpack/node_modules/schema-utils": {

+      "version": "4.3.2",

+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.2.tgz",

+      "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",

+      "dev": true,

+      "dependencies": {

+        "@types/json-schema": "^7.0.9",

+        "ajv": "^8.9.0",

+        "ajv-formats": "^2.1.1",

+        "ajv-keywords": "^5.1.0"

+      },

+      "engines": {

+        "node": ">= 10.13.0"

+      },

+      "funding": {

+        "type": "opencollective",

+        "url": "https://opencollective.com/webpack"

+      }

+    },

+    "node_modules/websocket-driver": {

+      "version": "0.7.4",

+      "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz",

+      "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",

+      "dev": true,

+      "dependencies": {

+        "http-parser-js": ">=0.5.1",

+        "safe-buffer": ">=5.1.0",

+        "websocket-extensions": ">=0.1.1"

+      },

+      "engines": {

+        "node": ">=0.8.0"

+      }

+    },

+    "node_modules/websocket-extensions": {

+      "version": "0.1.4",

+      "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz",

+      "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",

+      "dev": true,

+      "engines": {

+        "node": ">=0.8.0"

+      }

+    },

+    "node_modules/whatwg-fetch": {

+      "version": "3.6.20",

+      "resolved": "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",

+      "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==",

+      "dev": true

+    },

+    "node_modules/whatwg-url": {

+      "version": "5.0.0",

+      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",

+      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",

+      "dev": true,

+      "dependencies": {

+        "tr46": "~0.0.3",

+        "webidl-conversions": "^3.0.0"

+      }

+    },

+    "node_modules/which": {

+      "version": "1.3.1",

+      "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz",

+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",

+      "dev": true,

+      "dependencies": {

+        "isexe": "^2.0.0"

+      },

+      "bin": {

+        "which": "bin/which"

+      }

+    },

+    "node_modules/wildcard": {

+      "version": "2.0.1",

+      "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz",

+      "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",

+      "dev": true

+    },

+    "node_modules/wrap-ansi": {

+      "version": "7.0.0",

+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",

+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",

+      "dev": true,

+      "dependencies": {

+        "ansi-styles": "^4.0.0",

+        "string-width": "^4.1.0",

+        "strip-ansi": "^6.0.0"

+      },

+      "engines": {

+        "node": ">=10"

+      },

+      "funding": {

+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"

+      }

+    },

+    "node_modules/wrappy": {

+      "version": "1.0.2",

+      "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",

+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",

+      "dev": true

+    },

+    "node_modules/ws": {

+      "version": "7.5.10",

+      "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz",

+      "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",

+      "dev": true,

+      "engines": {

+        "node": ">=8.3.0"

+      },

+      "peerDependencies": {

+        "bufferutil": "^4.0.1",

+        "utf-8-validate": "^5.0.2"

+      },

+      "peerDependenciesMeta": {

+        "bufferutil": {

+          "optional": true

+        },

+        "utf-8-validate": {

+          "optional": true

+        }

+      }

+    },

+    "node_modules/y18n": {

+      "version": "5.0.8",

+      "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",

+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/yallist": {

+      "version": "3.1.1",

+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",

+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",

+      "dev": true

+    },

+    "node_modules/yaml": {

+      "version": "2.8.0",

+      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.8.0.tgz",

+      "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",

+      "dev": true,

+      "optional": true,

+      "peer": true,

+      "bin": {

+        "yaml": "bin.mjs"

+      },

+      "engines": {

+        "node": ">= 14.6"

+      }

+    },

+    "node_modules/yargs": {

+      "version": "16.2.0",

+      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz",

+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",

+      "dev": true,

+      "dependencies": {

+        "cliui": "^7.0.2",

+        "escalade": "^3.1.1",

+        "get-caller-file": "^2.0.5",

+        "require-directory": "^2.1.1",

+        "string-width": "^4.2.0",

+        "y18n": "^5.0.5",

+        "yargs-parser": "^20.2.2"

+      },

+      "engines": {

+        "node": ">=10"

+      }

+    },

+    "node_modules/yargs-parser": {

+      "version": "20.2.9",

+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",

+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",

+      "dev": true,

+      "engines": {

+        "node": ">=10"

+      }

+    }

+  }

+}

diff --git a/package.json b/package.json
index a992a02..2c493a2 100644
--- a/package.json
+++ b/package.json
@@ -1,33 +1,34 @@
-{
-  "name": "pt",
-  "version": "0.1.0",
-  "private": true,
-  "scripts": {
-    "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build"
-  },
-  "dependencies": {
-    "@element-plus/icons-vue": "^2.3.1",
-    "core-js": "^3.8.3",
-    "element-plus": "^2.9.11",
-    "vue": "^3.5.16",
-    "vue-router": "^4.5.1",
-    "vuex": "^4.0.0"
-  },
-  "devDependencies": {
-    "@vitejs/plugin-vue": "^5.2.4",
-    "@vue/cli-plugin-babel": "~5.0.0",
-    "@vue/cli-plugin-router": "~5.0.0",
-    "@vue/cli-plugin-vuex": "~5.0.0",
-    "@vue/cli-service": "~5.0.0",
-    "sass": "^1.89.1",
-    "sass-loader": "^16.0.5",
-    "vite": "^6.3.5"
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions",
-    "not dead",
-    "not ie 11"
-  ]
-}
+{

+  "name": "pt",

+  "version": "0.1.0",

+  "private": true,

+  "scripts": {

+    "serve": "vue-cli-service serve",

+    "build": "vue-cli-service build"

+  },

+  "dependencies": {

+    "@element-plus/icons-vue": "^2.3.1",

+    "axios": "^1.9.0",

+    "core-js": "^3.8.3",

+    "element-plus": "^2.9.11",

+    "vue": "^3.5.16",

+    "vue-router": "^4.5.1",

+    "vuex": "^4.1.0"

+  },

+  "devDependencies": {

+    "@vitejs/plugin-vue": "^5.2.4",

+    "@vue/cli-plugin-babel": "~5.0.0",

+    "@vue/cli-plugin-router": "~5.0.0",

+    "@vue/cli-plugin-vuex": "~5.0.0",

+    "@vue/cli-service": "~5.0.0",

+    "sass": "^1.89.1",

+    "sass-loader": "^16.0.5",

+    "vite": "^6.3.5"

+  },

+  "browserslist": [

+    "> 1%",

+    "last 2 versions",

+    "not dead",

+    "not ie 11"

+  ]

+}

diff --git a/public/index.html b/public/index.html
index 3e5a139..d2c9d76 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1,17 +1,17 @@
-<!DOCTYPE html>
-<html lang="">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <title><%= htmlWebpackPlugin.options.title %></title>
-  </head>
-  <body>
-    <noscript>
-      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
-    </noscript>
-    <div id="app"></div>
-    <!-- built files will be auto injected -->
-  </body>
-</html>
+<!DOCTYPE html>

+<html lang="">

+  <head>

+    <meta charset="utf-8">

+    <meta http-equiv="X-UA-Compatible" content="IE=edge">

+    <meta name="viewport" content="width=device-width,initial-scale=1.0">

+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">

+    <title><%= htmlWebpackPlugin.options.title %></title>

+  </head>

+  <body>

+    <noscript>

+      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>

+    </noscript>

+    <div id="app"></div>

+    <!-- built files will be auto injected -->

+  </body>

+</html>

diff --git a/src/App.vue b/src/App.vue
index cfa631b..787103e 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,36 +1,36 @@
-<template>
-  <div id="app">
-    <router-view />
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'App'
-}
-</script>
-
-<style>
-#app {
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  margin: 0;
-  padding: 0;
-  height: 100vh;
-  width: 100%;
-}
-
-* {
-  margin: 0;
-  padding: 0;
-  box-sizing: border-box;
-}
-
-body {
-  margin: 0;
-  padding: 0;
-  height: 100vh;
-  overflow-x: hidden;
-}
-</style>
+<template>

+  <div id="app">

+    <router-view />

+  </div>

+</template>

+

+<script>

+export default {

+  name: 'App'

+}

+</script>

+

+<style>

+#app {

+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;

+  -webkit-font-smoothing: antialiased;

+  -moz-osx-font-smoothing: grayscale;

+  margin: 0;

+  padding: 0;

+  height: 100vh;

+  width: 100%;

+}

+

+* {

+  margin: 0;

+  padding: 0;

+  box-sizing: border-box;

+}

+

+body {

+  margin: 0;

+  padding: 0;

+  height: 100vh;

+  overflow-x: hidden;

+}

+</style>

diff --git a/src/api/auth.js b/src/api/auth.js
new file mode 100644
index 0000000..a3c672a
--- /dev/null
+++ b/src/api/auth.js
@@ -0,0 +1,62 @@
+import request from './request'

+

+export const authApi = {

+  /**

+   * 用户登录

+   */

+  async login(loginData) {

+    console.log('📤 发送登录数据:', loginData)

+    

+    const requestData = {

+      user: loginData.user,

+      password: loginData.password

+    }

+    

+    return request({

+      url: '/api/auth/login',  // 需要 /api 前缀

+      method: 'post',

+      data: requestData

+    })

+  },

+

+  /**

+   * 用户注册

+   */

+  async register(registerData) {

+    console.log('📤 发送注册数据:', registerData)

+    

+    const requestData = {

+      username: registerData.username,

+      email: registerData.email,

+      password: registerData.password

+    }

+    

+    return request({

+      url: '/api/auth/register',  // 需要 /api 前缀

+      method: 'post',

+      data: requestData

+    })

+  },

+

+  /**

+   * 用户登出

+   */

+  logout() {

+    return request({

+      url: '/api/auth/logout',  // 需要 /api 前缀

+      method: 'post'

+    })

+  },

+

+  /**

+   * 获取登录状态

+   */

+  getStatus() {

+    return request({

+      url: '/api/auth/status',  // 需要 /api 前缀

+      method: 'get'

+    })

+  }

+}

+

+export default authApi
\ No newline at end of file
diff --git a/src/api/index.js b/src/api/index.js
new file mode 100644
index 0000000..6a72540
--- /dev/null
+++ b/src/api/index.js
@@ -0,0 +1,219 @@
+export { authApi } from './auth'

+export { userApi } from './user'

+

+// 默认导出request实例,方便其他地方使用

+export { default as request } from './request'

+

+// ===========================================

+

+// src/store/modules/auth.js - 认证状态管理

+import { authApi } from '@/api/auth'

+import { ElMessage } from 'element-plus'

+

+const state = {

+  // 登录状态

+  isLoggedIn: false,

+  // 用户信息

+  userInfo: null,

+  // Token信息

+  token: null,

+  // 登录加载状态

+  loginLoading: false

+}

+

+const getters = {

+  // 是否已登录

+  isAuthenticated: state => state.isLoggedIn,

+  // 获取用户信息

+  userInfo: state => state.userInfo,

+  // 获取用户名

+  username: state => state.userInfo?.user?.username || '',

+  // 获取用户头像

+  avatar: state => state.userInfo?.user?.avatar || '',

+  // 获取用户组信息

+  userGroup: state => state.userInfo?.user?.group || null,

+  // 登录加载状态

+  loginLoading: state => state.loginLoading

+}

+

+const mutations = {

+  // 设置登录状态

+  SET_LOGIN_STATUS(state, status) {

+    state.isLoggedIn = status

+  },

+  

+  // 设置用户信息

+  SET_USER_INFO(state, userInfo) {

+    state.userInfo = userInfo

+  },

+  

+  // 设置Token

+  SET_TOKEN(state, token) {

+    state.token = token

+  },

+  

+  // 设置登录加载状态

+  SET_LOGIN_LOADING(state, loading) {

+    state.loginLoading = loading

+  },

+  

+  // 清除用户数据

+  CLEAR_USER_DATA(state) {

+    state.isLoggedIn = false

+    state.userInfo = null

+    state.token = null

+    state.loginLoading = false

+  }

+}

+

+const actions = {

+  // 用户登录

+  async login({ commit }, loginData) {

+    try {

+      commit('SET_LOGIN_LOADING', true)

+      

+      const response = await authApi.login(loginData)

+      

+      if (response) {

+        // 保存Token

+        const tokenInfo = response.token

+        if (tokenInfo && tokenInfo.tokenValue) {

+          localStorage.setItem('token', tokenInfo.tokenValue)

+          localStorage.setItem('tokenInfo', JSON.stringify(tokenInfo))

+          commit('SET_TOKEN', tokenInfo)

+        }

+        

+        // 保存用户信息

+        localStorage.setItem('userInfo', JSON.stringify(response))

+        localStorage.setItem('isLoggedIn', 'true')

+        

+        commit('SET_USER_INFO', response)

+        commit('SET_LOGIN_STATUS', true)

+        

+        ElMessage.success('登录成功!')

+        return response

+      }

+    } catch (error) {

+      console.error('登录失败:', error)

+      throw error

+    } finally {

+      commit('SET_LOGIN_LOADING', false)

+    }

+  },

+  

+  // 用户注册

+  async register({ commit }, registerData) {

+    try {

+      commit('SET_LOGIN_LOADING', true)

+      

+      const response = await authApi.register(registerData)

+      

+      if (response) {

+        // 注册成功后自动登录

+        const tokenInfo = response.token

+        if (tokenInfo && tokenInfo.tokenValue) {

+          localStorage.setItem('token', tokenInfo.tokenValue)

+          localStorage.setItem('tokenInfo', JSON.stringify(tokenInfo))

+          commit('SET_TOKEN', tokenInfo)

+        }

+        

+        localStorage.setItem('userInfo', JSON.stringify(response))

+        localStorage.setItem('isLoggedIn', 'true')

+        

+        commit('SET_USER_INFO', response)

+        commit('SET_LOGIN_STATUS', true)

+        

+        ElMessage.success('注册成功!')

+        return response

+      }

+    } catch (error) {

+      console.error('注册失败:', error)

+      throw error

+    } finally {

+      commit('SET_LOGIN_LOADING', false)

+    }

+  },

+  

+  // 用户登出

+  async logout({ commit }) {

+    try {

+      await authApi.logout()

+    } catch (error) {

+      console.error('登出请求失败:', error)

+      // 即使登出请求失败,也要清除本地数据

+    } finally {

+      // 清除本地存储

+      localStorage.removeItem('token')

+      localStorage.removeItem('tokenInfo')

+      localStorage.removeItem('userInfo')

+      localStorage.removeItem('isLoggedIn')

+      

+      // 清除状态

+      commit('CLEAR_USER_DATA')

+      

+      ElMessage.success('已退出登录')

+    }

+  },

+  

+  // 检查登录状态

+  async checkLoginStatus({ commit }) {

+    try {

+      const response = await authApi.getStatus()

+      

+      if (response && response.isLoggedIn && response.user) {

+        // 更新用户信息

+        localStorage.setItem('userInfo', JSON.stringify(response.user))

+        localStorage.setItem('isLoggedIn', 'true')

+        

+        commit('SET_USER_INFO', response.user)

+        commit('SET_LOGIN_STATUS', true)

+        

+        return true

+      } else {

+        // 登录状态无效,清除本地数据

+        commit('CLEAR_USER_DATA')

+        localStorage.removeItem('token')

+        localStorage.removeItem('tokenInfo')

+        localStorage.removeItem('userInfo')

+        localStorage.removeItem('isLoggedIn')

+        

+        return false

+      }

+    } catch (error) {

+      console.error('检查登录状态失败:', error)

+      commit('CLEAR_USER_DATA')

+      return false

+    }

+  },

+  

+  // 从本地存储恢复登录状态

+  restoreLoginState({ commit }) {

+    const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true'

+    const userInfo = localStorage.getItem('userInfo')

+    const tokenInfo = localStorage.getItem('tokenInfo')

+    

+    if (isLoggedIn && userInfo) {

+      try {

+        const parsedUserInfo = JSON.parse(userInfo)

+        const parsedTokenInfo = tokenInfo ? JSON.parse(tokenInfo) : null

+        

+        commit('SET_USER_INFO', parsedUserInfo)

+        commit('SET_TOKEN', parsedTokenInfo)

+        commit('SET_LOGIN_STATUS', true)

+        

+        console.log('✅ 已从本地存储恢复登录状态')

+      } catch (error) {

+        console.error('❌ 恢复登录状态失败:', error)

+        commit('CLEAR_USER_DATA')

+      }

+    }

+  }

+}

+

+export default {

+  namespaced: true,

+  state,

+  getters,

+  mutations,

+  actions

+}
\ No newline at end of file
diff --git a/src/api/request.js b/src/api/request.js
new file mode 100644
index 0000000..dd5aade
--- /dev/null
+++ b/src/api/request.js
@@ -0,0 +1,76 @@
+import axios from 'axios'

+import { ElMessage } from 'element-plus'

+import router from '@/router'

+

+const request = axios.create({

+  // 关键:不要设置baseURL,或者设置为空字符串

+  // 这样请求会发送到当前域名(8080),然后被代理转发到8081

+  baseURL: '',

+  timeout: 10000,

+  headers: {

+    'Content-Type': 'application/json'

+  }

+})

+

+request.interceptors.request.use(

+  config => {

+    const token = localStorage.getItem('token')

+    if (token) {

+      config.headers.Authorization = `Bearer ${token}`

+    }

+    

+    console.log('🚀 发送请求:', config.method?.toUpperCase(), config.url)

+    console.log('📤 请求数据:', config.data)

+    

+    return config

+  },

+  error => {

+    console.error('❌ 请求错误:', error)

+    return Promise.reject(error)

+  }

+)

+

+request.interceptors.response.use(

+  response => {

+    console.log('✅ 响应成功:', response.status, response.data)

+    return response.data

+  },

+  error => {

+    console.error('❌ 响应错误:', error)

+    

+    if (error.response) {

+      const { status, data } = error.response

+      

+      switch (status) {

+        case 401:

+          localStorage.removeItem('token')

+          localStorage.removeItem('isLoggedIn') 

+          localStorage.removeItem('userInfo')

+          ElMessage.error('登录已过期,请重新登录')

+          router.push('/login')

+          break

+        case 403:

+          ElMessage.error('权限不足')

+          break

+        case 404:

+          ElMessage.error('API接口不存在')

+          console.error('❌ 请求的URL:', error.config.url)

+          break

+        case 500:

+          ElMessage.error('服务器内部错误')

+          break

+        default:

+          const errorMessage = data?.message || `请求失败 (${status})`

+          ElMessage.error(errorMessage)

+      }

+    } else if (error.request) {

+      ElMessage.error('无法连接到服务器,请检查网络')

+    } else {

+      ElMessage.error('请求配置错误')

+    }

+    

+    return Promise.reject(error)

+  }

+)

+

+export default request
\ No newline at end of file
diff --git a/src/api/user.js b/src/api/user.js
new file mode 100644
index 0000000..2cfb40c
--- /dev/null
+++ b/src/api/user.js
@@ -0,0 +1,115 @@
+import request from './request'

+

+export const userApi = {

+  /**

+   * 获取当前用户信息

+   * @returns {Promise<Object>} 用户信息

+   */

+  getCurrentUser() {

+    return request({

+      url: '/user/profile',

+      method: 'get'

+    })

+  },

+

+  /**

+   * 更新用户资料

+   * @param {Object} profileData - 用户资料数据

+   * @returns {Promise<Object>} 更新响应

+   */

+  updateProfile(profileData) {

+    return request({

+      url: '/user/profile',

+      method: 'put',

+      data: profileData

+    })

+  },

+

+  /**

+   * 修改密码

+   * @param {Object} passwordData - 密码数据

+   * @param {string} passwordData.currentPassword - 当前密码

+   * @param {string} passwordData.newPassword - 新密码

+   * @returns {Promise<Object>} 修改响应

+   */

+  changePassword(passwordData) {

+    return request({

+      url: '/user/password',

+      method: 'put',

+      data: passwordData

+    })

+  },

+

+  /**

+   * 上传头像

+   * @param {FormData} formData - 包含头像文件的FormData

+   * @returns {Promise<Object>} 上传响应

+   */

+  uploadAvatar(formData) {

+    return request({

+      url: '/user/avatar',

+      method: 'post',

+      data: formData,

+      headers: {

+        'Content-Type': 'multipart/form-data'

+      }

+    })

+  },

+

+  /**

+   * 获取用户统计信息

+   * @returns {Promise<Object>} 统计信息

+   */

+  getUserStats() {

+    return request({

+      url: '/user/stats',

+      method: 'get'

+    })

+  },

+

+  /**

+   * 获取用户活动记录

+   * @param {Object} params - 查询参数

+   * @param {string} params.type - 活动类型

+   * @param {number} params.page - 页码

+   * @param {number} params.size - 每页大小

+   * @returns {Promise<Object>} 活动记录

+   */

+  getUserActivities(params = {}) {

+    return request({

+      url: '/user/activities',

+      method: 'get',

+      params

+    })

+  },

+

+  /**

+   * 获取用户上传的种子

+   * @param {Object} params - 查询参数

+   * @param {number} params.page - 页码

+   * @param {number} params.size - 每页大小

+   * @returns {Promise<Object>} 种子列表

+   */

+  getUserTorrents(params = {}) {

+    return request({

+      url: '/user/torrents',

+      method: 'get',

+      params

+    })

+  },

+

+  /**

+   * 获取登录历史

+   * @param {Object} params - 查询参数

+   * @param {number} params.page - 页码

+   * @param {number} params.size - 每页大小

+   * @returns {Promise<Object>} 登录历史

+   */

+  getLoginHistory(params = {}) {

+    return request({

+      url: '/user/login-history',

+      method: 'get',

+      params

+    })

+  }

+}

diff --git a/src/assets/styles/global.css b/src/assets/styles/global.css
index 2627700..733af3f 100644
--- a/src/assets/styles/global.css
+++ b/src/assets/styles/global.css
@@ -1,60 +1,60 @@
-/* 全局样式文件 */
-:root {
-  --primary-color: #667eea;
-  --primary-dark: #5a6fd8;
-  --secondary-color: #764ba2;
-  --success-color: #67c23a;
-  --warning-color: #e6a23c;
-  --danger-color: #f56c6c;
-  --info-color: #909399;
-  
-  --text-primary: #303133;
-  --text-regular: #606266;
-  --text-secondary: #909399;
-  --text-placeholder: #c0c4cc;
-  
-  --border-color: #dcdfe6;
-  --bg-color: #f5f7fa;
-}
-
-/* 滚动条美化 */
-::-webkit-scrollbar {
-  width: 6px;
-  height: 6px;
-}
-
-::-webkit-scrollbar-track {
-  background: #f1f1f1;
-  border-radius: 3px;
-}
-
-::-webkit-scrollbar-thumb {
-  background: #c1c1c1;
-  border-radius: 3px;
-}
-
-::-webkit-scrollbar-thumb:hover {
-  background: #a1a1a1;
-}
-
-/* 通用动画 */
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.3s ease;
-}
-
-.fade-enter-from,
-.fade-leave-to {
-  opacity: 0;
-}
-
-/* 通用工具类 */
-.text-center {
-  text-align: center;
-}
-
-.flex-center {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
+/* 全局样式文件 */

+:root {

+  --primary-color: #667eea;

+  --primary-dark: #5a6fd8;

+  --secondary-color: #764ba2;

+  --success-color: #67c23a;

+  --warning-color: #e6a23c;

+  --danger-color: #f56c6c;

+  --info-color: #909399;

+  

+  --text-primary: #303133;

+  --text-regular: #606266;

+  --text-secondary: #909399;

+  --text-placeholder: #c0c4cc;

+  

+  --border-color: #dcdfe6;

+  --bg-color: #f5f7fa;

+}

+

+/* 滚动条美化 */

+::-webkit-scrollbar {

+  width: 6px;

+  height: 6px;

+}

+

+::-webkit-scrollbar-track {

+  background: #f1f1f1;

+  border-radius: 3px;

+}

+

+::-webkit-scrollbar-thumb {

+  background: #c1c1c1;

+  border-radius: 3px;

+}

+

+::-webkit-scrollbar-thumb:hover {

+  background: #a1a1a1;

+}

+

+/* 通用动画 */

+.fade-enter-active,

+.fade-leave-active {

+  transition: opacity 0.3s ease;

+}

+

+.fade-enter-from,

+.fade-leave-to {

+  opacity: 0;

+}

+

+/* 通用工具类 */

+.text-center {

+  text-align: center;

+}

+

+.flex-center {

+  display: flex;

+  align-items: center;

+  justify-content: center;

+}

diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue
index b9f3c7d..48d8769 100644
--- a/src/components/HelloWorld.vue
+++ b/src/components/HelloWorld.vue
@@ -1,59 +1,59 @@
-<template>
-  <div class="hello">
-    <h1>{{ msg }}</h1>
-    <p>
-      For a guide and recipes on how to configure / customize this project,<br>
-      check out the
-      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
-    </p>
-    <h3>Installed CLI Plugins</h3>
-    <ul>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" target="_blank" rel="noopener">vuex</a></li>
-    </ul>
-    <h3>Essential Links</h3>
-    <ul>
-      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
-      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
-      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
-      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
-      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
-    </ul>
-    <h3>Ecosystem</h3>
-    <ul>
-      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
-      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
-      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
-      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
-      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
-    </ul>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'HelloWorld',
-  props: {
-    msg: String
-  }
-}
-</script>
-
-<!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped>
-h3 {
-  margin: 40px 0 0;
-}
-ul {
-  list-style-type: none;
-  padding: 0;
-}
-li {
-  display: inline-block;
-  margin: 0 10px;
-}
-a {
-  color: #42b983;
-}
-</style>
+<template>

+  <div class="hello">

+    <h1>{{ msg }}</h1>

+    <p>

+      For a guide and recipes on how to configure / customize this project,<br>

+      check out the

+      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.

+    </p>

+    <h3>Installed CLI Plugins</h3>

+    <ul>

+      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>

+      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>

+      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" target="_blank" rel="noopener">vuex</a></li>

+    </ul>

+    <h3>Essential Links</h3>

+    <ul>

+      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>

+      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>

+      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>

+      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>

+      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>

+    </ul>

+    <h3>Ecosystem</h3>

+    <ul>

+      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>

+      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>

+      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>

+      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>

+      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>

+    </ul>

+  </div>

+</template>

+

+<script>

+export default {

+  name: 'HelloWorld',

+  props: {

+    msg: String

+  }

+}

+</script>

+

+<!-- Add "scoped" attribute to limit CSS to this component only -->

+<style scoped>

+h3 {

+  margin: 40px 0 0;

+}

+ul {

+  list-style-type: none;

+  padding: 0;

+}

+li {

+  display: inline-block;

+  margin: 0 10px;

+}

+a {

+  color: #42b983;

+}

+</style>

diff --git a/src/main.js b/src/main.js
index 4aac723..1f1b08f 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,22 +1,27 @@
-import { createApp } from 'vue'
-import App from './App.vue'
-import router from './router'
-
-// 引入Element Plus
-import ElementPlus from 'element-plus'
-import 'element-plus/dist/index.css'
-import * as ElementPlusIconsVue from '@element-plus/icons-vue'
-
-// 全局样式
-import './assets/styles/global.css'
-
-const app = createApp(App)
-
-// 注册所有Element Plus图标
-for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
-  app.component(key, component)
-}
-
-app.use(ElementPlus)
-app.use(router)
+import { createApp } from 'vue'

+import App from './App.vue'

+import router from './router'

+import store from './store'

+

+// 引入Element Plus

+import ElementPlus from 'element-plus'

+import 'element-plus/dist/index.css'

+import * as ElementPlusIconsVue from '@element-plus/icons-vue'

+

+const app = createApp(App)

+

+// 注册所有Element Plus图标

+for (const [key, component] of Object.entries(ElementPlusIconsVue)) {

+  app.component(key, component)

+}

+

+app.use(ElementPlus)

+app.use(store)  // 确保这行存在且在 router 之前

+app.use(router)

+

+// 应用启动时恢复登录状态

+if (store && store.dispatch) {

+  store.dispatch('auth/restoreLoginState')

+}

+

 app.mount('#app')
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index 1beac1f..9bf3278 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,151 +1,165 @@
-import { createRouter, createWebHistory } from 'vue-router'
-import { ElMessage } from 'element-plus'
-
-// 路由组件
-import LoginView from '@/views/auth/LoginView.vue'
-import RegisterView from '@/views/auth/RegisterView.vue'
-import HomeView from '@/views/HomeView.vue'
-
-const routes = [
-  {
-    path: '/',
-    redirect: '/login'
-  },
-  {
-    path: '/login',
-    name: 'Login',
-    component: LoginView,
-    meta: {
-      title: 'PT Tracker - 登录',
-      requiresGuest: true
-    }
-  },
-  {
-    path: '/register',
-    name: 'Register',
-    component: RegisterView,
-    meta: {
-      title: 'PT Tracker - 注册',
-      requiresGuest: true
-    }
-  },
-  {
-    path: '/home',
-    name: 'Home',
-    component: HomeView,
-    meta: {
-      title: 'PT Tracker - 首页',
-      requiresAuth: true
-    }
-  },
-  {
-    path: '/:pathMatch(.*)*',
-    redirect: '/login'
-  },
-  {
-  path: '/torrents',
-  name: 'Torrents',
-  component: () => import('@/views/torrent/TorrentsView.vue'),
-  meta: {
-    title: 'PT Tracker - 种子浏览',
-    requiresAuth: true
-  }
-},
-{
-  path: '/upload',
-  name: 'Upload',
-  component: () => import('@/views/torrent/UploadView.vue'),
-  meta: {
-    title: 'PT Tracker - 上传种子',
-    requiresAuth: true
-  }
-},
-{
-  path: '/torrent/:id',
-  name: 'TorrentDetail',
-  component: () => import('@/views/torrent/TorrentDetailView.vue'),
-  meta: {
-    title: 'PT Tracker - 种子详情',
-    requiresAuth: true
-  }
-},
-{
-  path: '/forum',
-  name: 'Forum',
-  component: () => import('@/views/forum/ForumView.vue'),
-  meta: {
-    title: 'PT Tracker - 论坛',
-    requiresAuth: true
-  }
-},
-{
-  path: '/forum/section/:id',
-  name: 'ForumSection',
-  component: () => import('@/views/forum/ForumSectionView.vue'),
-  meta: {
-    title: 'PT Tracker - 版块',
-    requiresAuth: true
-  }
-},
-{
-  path: '/forum/topic/:id',
-  name: 'ForumTopic',
-  component: () => import('@/views/forum/ForumTopicView.vue'),
-  meta: {
-    title: 'PT Tracker - 主题详情',
-    requiresAuth: true
-  }
-},
-// {
-//   path: '/forum/topics',
-//   name: 'ForumTopics',
-//   component: () => impor@/views/forum/ForumTopicView.vue'),
-//   meta: {
-//     title: 'PT Tracker - 所有主题',
-//     requiresAuth: true
-//   }
-// },
-{
-  path: '/profile',
-  name: 'Profile',
-  component: () => import('@/views/auth/ProfileView.vue'),
-  meta: {
-    title: 'PT Tracker - 个人资料',
-    requiresAuth: true
-  }
-}]
-
-const router = createRouter({
-  history: createWebHistory(),
-  routes
-})
-
-// 路由守卫
-router.beforeEach((to, from, next) => {
-  // 设置页面标题
-  if (to.meta.title) {
-    document.title = to.meta.title
-  }
-  
-  // 检查登录状态
-  const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true'
-  
-  console.log(`路由跳转: ${from.path} -> ${to.path}, 登录状态: ${isLoggedIn}`)
-  
-  // 需要登录但未登录
-  if (to.meta.requiresAuth && !isLoggedIn) {
-    ElMessage.warning('请先登录')
-    next('/login')
-    return
-  }
-  
-  // 已登录但访问登录/注册页
-  if (to.meta.requiresGuest && isLoggedIn) {
-    next('/home')
-    return
-  }
-  
-  next()
-})
-
-export default router
+import { createRouter, createWebHistory } from 'vue-router'

+import { ElMessage } from 'element-plus'

+import store from '@/store'

+

+// 路由组件

+import LoginView from '@/views/auth/LoginView.vue'

+import RegisterView from '@/views/auth/RegisterView.vue'

+import HomeView from '@/views/HomeView.vue'

+

+const routes = [

+  {

+    path: '/',

+    redirect: '/login'

+  },

+  {

+    path: '/login',

+    name: 'Login',

+    component: LoginView,

+    meta: {

+      title: 'PT Tracker - 登录',

+      requiresGuest: true

+    }

+  },

+  {

+    path: '/register',

+    name: 'Register',

+    component: RegisterView,

+    meta: {

+      title: 'PT Tracker - 注册',

+      requiresGuest: true

+    }

+  },

+  {

+    path: '/home',

+    name: 'Home',

+    component: HomeView,

+    meta: {

+      title: 'PT Tracker - 首页',

+      requiresAuth: true

+    }

+  },

+  {

+    path: '/profile',

+    name: 'Profile',

+    component: () => import('@/views/auth/ProfileView.vue'),

+    meta: {

+      title: 'PT Tracker - 个人资料',

+      requiresAuth: true

+    }

+  },

+  // 种子相关路由

+  {

+    path: '/torrents',

+    name: 'Torrents',

+    component: () => import('@/views/torrent/TorrentsView.vue'),

+    meta: {

+      title: 'PT Tracker - 种子浏览',

+      requiresAuth: true

+    }

+  },

+  {

+    path: '/upload',

+    name: 'Upload',

+    component: () => import('@/views/torrent/UploadView.vue'),

+    meta: {

+      title: 'PT Tracker - 上传种子',

+      requiresAuth: true

+    }

+  },

+  {

+    path: '/torrent/:id',

+    name: 'TorrentDetail',

+    component: () => import('@/views/torrent/TorrentDetailView.vue'),

+    meta: {

+      title: 'PT Tracker - 种子详情',

+      requiresAuth: true

+    }

+  },

+  // 论坛相关路由

+  {

+    path: '/forum',

+    name: 'Forum',

+    component: () => import('@/views/forum/ForumView.vue'),

+    meta: {

+      title: 'PT Tracker - 论坛',

+      requiresAuth: true

+    }

+  },

+  {

+    path: '/forum/section/:id',

+    name: 'ForumSection',

+    component: () => import('@/views/forum/ForumSectionView.vue'),

+    meta: {

+      title: 'PT Tracker - 版块',

+      requiresAuth: true

+    }

+  },

+  {

+    path: '/forum/topic/:id',

+    name: 'ForumTopic',

+    component: () => import('@/views/forum/ForumTopicView.vue'),

+    meta: {

+      title: 'PT Tracker - 主题详情',

+      requiresAuth: true

+    }

+  },

+  // 404页面

+  {

+    path: '/:pathMatch(.*)*',

+    redirect: '/login'

+  }

+]

+

+const router = createRouter({

+  history: createWebHistory(),

+  routes

+})

+

+// 更新路由守卫

+router.beforeEach(async (to, from, next) => {

+  // 设置页面标题

+  if (to.meta.title) {

+    document.title = to.meta.title

+  }

+  

+  console.log(`路由跳转: ${from.path} -> ${to.path}`)

+  

+  // 恢复登录状态(仅在应用启动时执行一次)

+  if (!store.state.auth.isLoggedIn && localStorage.getItem('isLoggedIn') === 'true') {

+    store.dispatch('auth/restoreLoginState')

+  }

+  

+  const isLoggedIn = store.getters['auth/isAuthenticated']

+  

+  // 需要登录但未登录

+  if (to.meta.requiresAuth && !isLoggedIn) {

+    // 尝试检查服务器端的登录状态

+    try {

+      const isValid = await store.dispatch('auth/checkLoginStatus')

+      if (isValid) {

+        // 服务器确认已登录,继续跳转

+        next()

+      } else {

+        // 服务器确认未登录,跳转到登录页

+        ElMessage.warning('请先登录')

+        next('/login')

+      }

+    } catch (error) {

+      // 检查失败,跳转到登录页

+      ElMessage.warning('请先登录')

+      next('/login')

+    }

+    return

+  }

+  

+  // 已登录但访问登录/注册页

+  if (to.meta.requiresGuest && isLoggedIn) {

+    next('/home')

+    return

+  }

+  

+  next()

+})

+

+export default router
\ No newline at end of file
diff --git a/src/store/index.js b/src/store/index.js
index 7f5b89c..d252e96 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1,14 +1,20 @@
-import { createStore } from 'vuex'
-
-export default createStore({
-  state: {
-  },
-  getters: {
-  },
-  mutations: {
-  },
-  actions: {
-  },
-  modules: {
-  }
-})
+import { createStore } from 'vuex'

+import auth from './modules/auth'

+

+export default createStore({

+  state: {

+    // 可以为空

+  },

+  getters: {

+    // 可以为空,因为 auth 模块有自己的 getters

+  },

+  mutations: {

+    // 可以为空

+  },

+  actions: {

+    // 可以为空

+  },

+  modules: {

+    auth

+  }

+})
\ No newline at end of file
diff --git a/src/store/modules/auth.js b/src/store/modules/auth.js
new file mode 100644
index 0000000..69efc6b
--- /dev/null
+++ b/src/store/modules/auth.js
@@ -0,0 +1,210 @@
+import { authApi } from '@/api/auth'

+import { ElMessage } from 'element-plus'

+

+const state = {

+  // 登录状态

+  isLoggedIn: false,

+  // 用户信息

+  userInfo: null,

+  // Token信息

+  token: null,

+  // 登录加载状态

+  loginLoading: false

+}

+

+const getters = {

+  // 是否已登录

+  isAuthenticated: state => state.isLoggedIn,

+  // 获取用户信息

+  userInfo: state => state.userInfo,

+  // 获取用户名

+  username: state => state.userInfo?.user?.username || '',

+  // 获取用户头像

+  avatar: state => state.userInfo?.user?.avatar || '',

+  // 获取用户组信息

+  userGroup: state => state.userInfo?.user?.group || null,

+  // 登录加载状态

+  loginLoading: state => state.loginLoading

+}

+

+const mutations = {

+  // 设置登录状态

+  SET_LOGIN_STATUS(state, status) {

+    state.isLoggedIn = status

+  },

+  

+  // 设置用户信息

+  SET_USER_INFO(state, userInfo) {

+    state.userInfo = userInfo

+  },

+  

+  // 设置Token

+  SET_TOKEN(state, token) {

+    state.token = token

+  },

+  

+  // 设置登录加载状态

+  SET_LOGIN_LOADING(state, loading) {

+    state.loginLoading = loading

+  },

+  

+  // 清除用户数据

+  CLEAR_USER_DATA(state) {

+    state.isLoggedIn = false

+    state.userInfo = null

+    state.token = null

+    state.loginLoading = false

+  }

+}

+

+const actions = {

+  // 用户登录

+  async login({ commit }, loginData) {

+    try {

+      commit('SET_LOGIN_LOADING', true)

+      

+      const response = await authApi.login(loginData)

+      

+      if (response) {

+        // 保存Token

+        const tokenInfo = response.token

+        if (tokenInfo && tokenInfo.tokenValue) {

+          localStorage.setItem('token', tokenInfo.tokenValue)

+          localStorage.setItem('tokenInfo', JSON.stringify(tokenInfo))

+          commit('SET_TOKEN', tokenInfo)

+        }

+        

+        // 保存用户信息

+        localStorage.setItem('userInfo', JSON.stringify(response))

+        localStorage.setItem('isLoggedIn', 'true')

+        

+        commit('SET_USER_INFO', response)

+        commit('SET_LOGIN_STATUS', true)

+        

+        ElMessage.success('登录成功!')

+        return response

+      }

+    } catch (error) {

+      console.error('登录失败:', error)

+      throw error

+    } finally {

+      commit('SET_LOGIN_LOADING', false)

+    }

+  },

+  

+  // 用户注册

+  async register({ commit }, registerData) {

+    try {

+      commit('SET_LOGIN_LOADING', true)

+      

+      const response = await authApi.register(registerData)

+      

+      if (response) {

+        // 注册成功后自动登录

+        const tokenInfo = response.token

+        if (tokenInfo && tokenInfo.tokenValue) {

+          localStorage.setItem('token', tokenInfo.tokenValue)

+          localStorage.setItem('tokenInfo', JSON.stringify(tokenInfo))

+          commit('SET_TOKEN', tokenInfo)

+        }

+        

+        localStorage.setItem('userInfo', JSON.stringify(response))

+        localStorage.setItem('isLoggedIn', 'true')

+        

+        commit('SET_USER_INFO', response)

+        commit('SET_LOGIN_STATUS', true)

+        

+        ElMessage.success('注册成功!')

+        return response

+      }

+    } catch (error) {

+      console.error('注册失败:', error)

+      throw error

+    } finally {

+      commit('SET_LOGIN_LOADING', false)

+    }

+  },

+  

+  // 用户登出

+  async logout({ commit }) {

+    try {

+      await authApi.logout()

+    } catch (error) {

+      console.error('登出请求失败:', error)

+      // 即使登出请求失败,也要清除本地数据

+    } finally {

+      // 清除本地存储

+      localStorage.removeItem('token')

+      localStorage.removeItem('tokenInfo')

+      localStorage.removeItem('userInfo')

+      localStorage.removeItem('isLoggedIn')

+      

+      // 清除状态

+      commit('CLEAR_USER_DATA')

+      

+      ElMessage.success('已退出登录')

+    }

+  },

+  

+  // 检查登录状态

+  async checkLoginStatus({ commit }) {

+    try {

+      const response = await authApi.getStatus()

+      

+      if (response && response.isLoggedIn && response.user) {

+        // 更新用户信息

+        localStorage.setItem('userInfo', JSON.stringify(response.user))

+        localStorage.setItem('isLoggedIn', 'true')

+        

+        commit('SET_USER_INFO', response.user)

+        commit('SET_LOGIN_STATUS', true)

+        

+        return true

+      } else {

+        // 登录状态无效,清除本地数据

+        commit('CLEAR_USER_DATA')

+        localStorage.removeItem('token')

+        localStorage.removeItem('tokenInfo')

+        localStorage.removeItem('userInfo')

+        localStorage.removeItem('isLoggedIn')

+        

+        return false

+      }

+    } catch (error) {

+      console.error('检查登录状态失败:', error)

+      commit('CLEAR_USER_DATA')

+      return false

+    }

+  },

+  

+  // 从本地存储恢复登录状态

+  restoreLoginState({ commit }) {

+    const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true'

+    const userInfo = localStorage.getItem('userInfo')

+    const tokenInfo = localStorage.getItem('tokenInfo')

+    

+    if (isLoggedIn && userInfo) {

+      try {

+        const parsedUserInfo = JSON.parse(userInfo)

+        const parsedTokenInfo = tokenInfo ? JSON.parse(tokenInfo) : null

+        

+        commit('SET_USER_INFO', parsedUserInfo)

+        commit('SET_TOKEN', parsedTokenInfo)

+        commit('SET_LOGIN_STATUS', true)

+        

+        console.log('✅ 已从本地存储恢复登录状态')

+      } catch (error) {

+        console.error('❌ 恢复登录状态失败:', error)

+        commit('CLEAR_USER_DATA')

+      }

+    }

+  }

+}

+

+export default {

+  namespaced: true,

+  state,

+  getters,

+  mutations,

+  actions

+}
\ No newline at end of file
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index c4e0ec7..7a728b1 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -1,777 +1,665 @@
-<template>
-  <div class="home-page">
-    <div class="home-container">
-      <!-- 用户信息和导航 -->
-      <header class="site-header">
-        <div class="header-content">
-          <div class="logo-section">
-            <h2 class="site-logo">🚀 PT Tracker</h2>
-          </div>
-          <div class="user-section">
-            <div class="user-stats">
-              <div class="stat-item">
-                <span class="stat-label">上传:</span>
-                <span class="stat-value">{{ userStats.uploaded }}</span>
-              </div>
-              <div class="stat-item">
-                <span class="stat-label">下载:</span>
-                <span class="stat-value">{{ userStats.downloaded }}</span>
-              </div>
-              <div class="stat-item">
-                <span class="stat-label">分享率:</span>
-                <span class="stat-value ratio" :class="getRatioClass(userStats.ratio)">
-                  {{ userStats.ratio }}
-                </span>
-              </div>
-            </div>
-            <div class="user-info">
-              <el-avatar :size="40" :icon="UserFilled" />
-              <span class="username">{{ userInfo.username }}</span>
-              <el-dropdown @command="handleUserCommand">
-                <el-icon class="dropdown-icon"><ArrowDown /></el-icon>
-                <template #dropdown>
-                  <el-dropdown-menu>
-                    <el-dropdown-item command="profile">个人资料</el-dropdown-item>
-                    <el-dropdown-item command="settings">设置</el-dropdown-item>
-                    <el-dropdown-item command="logout" divided>退出登录</el-dropdown-item>
-                  </el-dropdown-menu>
-                </template>
-              </el-dropdown>
-            </div>
-          </div>
-        </div>
-      </header>
-
-      <!-- 主要内容区域 -->
-      <main class="main-content">
-        <!-- 统计概览 -->
-        <section class="stats-overview">
-          <div class="stats-grid">
-            <div class="stat-card">
-              <div class="stat-icon">
-                <el-icon size="32" color="#67c23a"><Download /></el-icon>
-              </div>
-              <div class="stat-info">
-                <h3>{{ siteStats.totalTorrents }}</h3>
-                <p>种子总数</p>
-              </div>
-            </div>
-            <div class="stat-card">
-              <div class="stat-icon">
-                <el-icon size="32" color="#409eff"><User /></el-icon>
-              </div>
-              <div class="stat-info">
-                <h3>{{ siteStats.totalUsers }}</h3>
-                <p>注册用户</p>
-              </div>
-            </div>
-            <div class="stat-card">
-              <div class="stat-icon">
-                <el-icon size="32" color="#f56c6c"><Upload /></el-icon>
-              </div>
-              <div class="stat-info">
-                <h3>{{ siteStats.totalSize }}</h3>
-                <p>数据总量</p>
-              </div>
-            </div>
-          </div>
-        </section>
-
-        <!-- 快速操作 -->
-        <section class="quick-actions">
-          <h2 class="section-title">快速操作</h2>
-          <div class="action-grid">
-            <div class="action-card" @click="navigateTo('/torrents')">
-              <el-icon size="48" color="#409eff"><Search /></el-icon>
-              <h3>浏览种子</h3>
-              <p>搜索和浏览所有可用的种子资源</p>
-            </div>
-            <div class="action-card" @click="navigateTo('/upload')">
-              <el-icon size="48" color="#67c23a"><Upload /></el-icon>
-              <h3>上传资源</h3>
-              <p>分享你的资源,为社区做贡献</p>
-            </div>
-            <div class="action-card" @click="navigateTo('/forum')">
-              <el-icon size="48" color="#e6a23c"><ChatDotRound /></el-icon>
-              <h3>论坛交流</h3>
-              <p>与其他用户交流讨论</p>
-            </div>
-            <div class="action-card" @click="navigateTo('/rankings')">
-              <el-icon size="48" color="#f56c6c"><TrophyBase /></el-icon>
-              <h3>排行榜</h3>
-              <p>查看用户和资源排行</p>
-            </div>
-          </div>
-        </section>
-
-        <!-- 最新种子 -->
-        <section class="latest-torrents">
-          <div class="section-header">
-            <h2 class="section-title">最新种子</h2>
-            <el-button type="primary" text @click="navigateTo('/torrents')">
-              查看更多 <el-icon><ArrowRight /></el-icon>
-            </el-button>
-          </div>
-          <div class="torrents-list">
-            <div 
-              v-for="torrent in latestTorrents" 
-              :key="torrent.id" 
-              class="torrent-item"
-              @click="navigateTo(`/torrent/${torrent.id}`)"
-            >
-              <div class="torrent-info">
-                <div class="torrent-category">
-                  <el-tag :type="getCategoryType(torrent.category)" size="small">
-                    {{ torrent.category }}
-                  </el-tag>
-                </div>
-                <h4 class="torrent-title">{{ torrent.title }}</h4>
-                <div class="torrent-meta">
-                  <span class="meta-item">
-                    <el-icon><User /></el-icon>
-                    {{ torrent.uploader }}
-                  </span>
-                  <span class="meta-item">
-                    <el-icon><Clock /></el-icon>
-                    {{ formatTime(torrent.uploadTime) }}
-                  </span>
-                  <span class="meta-item">
-                    <el-icon><Coin /></el-icon>
-                    {{ torrent.size }}
-                  </span>
-                </div>
-              </div>
-              <div class="torrent-stats">
-                <div class="stat-group">
-                  <span class="stat-number seeders">{{ torrent.seeders }}</span>
-                  <span class="stat-label">做种</span>
-                </div>
-                <div class="stat-group">
-                  <span class="stat-number leechers">{{ torrent.leechers }}</span>
-                  <span class="stat-label">下载</span>
-                </div>
-                <div class="stat-group">
-                  <span class="stat-number">{{ torrent.downloads }}</span>
-                  <span class="stat-label">完成</span>
-                </div>
-              </div>
-            </div>
-          </div>
-        </section>
-
-        <!-- 个人活动 -->
-        <section class="user-activity">
-          <h2 class="section-title">我的活动</h2>
-          <div class="activity-grid">
-            <div class="activity-card">
-              <h3>我的种子</h3>
-              <div class="activity-stats">
-                <div class="activity-item">
-                  <span class="activity-label">正在做种:</span>
-                  <span class="activity-value">{{ userActivity.seeding }}</span>
-                </div>
-                <div class="activity-item">
-                  <span class="activity-label">正在下载:</span>
-                  <span class="activity-value">{{ userActivity.downloading }}</span>
-                </div>
-                <div class="activity-item">
-                  <span class="activity-label">已上传:</span>
-                  <span class="activity-value">{{ userActivity.uploaded }}</span>
-                </div>
-              </div>
-              <el-button type="primary" size="small" @click="navigateTo('/my-torrents')">
-                查看详情
-              </el-button>
-            </div>
-            
-            <div class="activity-card">
-              <h3>邀请管理</h3>
-              <div class="activity-stats">
-                <div class="activity-item">
-                  <span class="activity-label">可用邀请:</span>
-                  <span class="activity-value">{{ userActivity.invitations }}</span>
-                </div>
-                <div class="activity-item">
-                  <span class="activity-label">已邀请:</span>
-                  <span class="activity-value">{{ userActivity.invited }}</span>
-                </div>
-              </div>
-              <el-button type="success" size="small" @click="navigateTo('/invitations')">
-                管理邀请
-              </el-button>
-            </div>
-          </div>
-        </section>
-      </main>
-    </div>
-  </div>
-</template>
-
-<script>
-import { ref, onMounted } from 'vue'
-import { useRouter } from 'vue-router'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import {
-  UserFilled,
-  ArrowDown,
-  Download,
-  Upload,
-  ChatDotRound,
-  Search,
-  User,
-  Connection,
-  TrophyBase,
-  ArrowRight,
-  Clock,
-  Coin
-} from '@element-plus/icons-vue'
-
-export default {
-  name: 'HomeView',
-  components: {
-    UserFilled,
-    ArrowDown
-  },
-  setup() {
-    const router = useRouter()
-    
-    const userInfo = ref({
-      username: '',
-      loginTime: ''
-    })
-    
-    const userStats = ref({
-      uploaded: '128.5 GB',
-      downloaded: '45.2 GB',
-      ratio: '2.84'
-    })
-    
-    const siteStats = ref({
-      totalTorrents: '12,458',
-      totalUsers: '8,924',
-      onlineUsers: '342',
-      totalSize: '45.2 TB'
-    })
-    
-    const userActivity = ref({
-      seeding: 15,
-      downloading: 3,
-      uploaded: 8,
-      invitations: 5,
-      invited: 12
-    })
-    
-    const latestTorrents = ref([
-      {
-        id: 1,
-        title: '[4K蓝光原盘] 阿凡达:水之道 Avatar: The Way of Water (2022)',
-        category: '电影',
-        uploader: 'MovieMaster',
-        uploadTime: '2025-06-03T10:30:00',
-        size: '85.6 GB',
-        seeders: 128,
-        leechers: 45,
-        downloads: 892
-      },
-      {
-        id: 2,
-        title: '[FLAC] Taylor Swift - Midnights (Deluxe Edition) [2022]',
-        category: '音乐',
-        uploader: 'MusicLover',
-        uploadTime: '2025-06-03T09:15:00',
-        size: '1.2 GB',
-        seeders: 67,
-        leechers: 12,
-        downloads: 456
-      },
-      {
-        id: 3,
-        title: '[合集] Adobe Creative Suite 2025 完整版',
-        category: '软件',
-        uploader: 'TechGuru',
-        uploadTime: '2025-06-03T08:45:00',
-        size: '12.8 GB',
-        seeders: 234,
-        leechers: 89,
-        downloads: 1205
-      }
-    ])
-    
-    onMounted(() => {
-      userInfo.value = {
-        username: localStorage.getItem('username') || '用户',
-        loginTime: localStorage.getItem('loginTime') || ''
-      }
-      
-      // 模拟获取用户数据
-      fetchUserData()
-    })
-    
-    const fetchUserData = () => {
-      // 这里应该是API调用,现在使用模拟数据
-      console.log('获取用户数据...')
-    }
-    
-    const formatTime = (timeString) => {
-      if (!timeString) return ''
-      const date = new Date(timeString)
-      const now = new Date()
-      const diff = now - date
-      const hours = Math.floor(diff / (1000 * 60 * 60))
-      
-      if (hours < 1) return '刚刚'
-      if (hours < 24) return `${hours}小时前`
-      const days = Math.floor(hours / 24)
-      return `${days}天前`
-    }
-    
-    const getRatioClass = (ratio) => {
-      const r = parseFloat(ratio)
-      if (r >= 2) return 'excellent'
-      if (r >= 1) return 'good'
-      return 'warning'
-    }
-    
-    const getCategoryType = (category) => {
-      const types = {
-        '电影': 'primary',
-        '音乐': 'success',
-        '软件': 'warning',
-        '游戏': 'danger',
-        '电视剧': 'info'
-      }
-      return types[category] || 'default'
-    }
-    
-    const navigateTo = (path) => {
-      router.push(path)
-    }
-    
-    const handleUserCommand = async (command) => {
-      switch (command) {
-        case 'profile':
-          navigateTo('/profile')
-          break
-        case 'settings':
-          navigateTo('/settings')
-          break
-        case 'logout':
-          await handleLogout()
-          break
-      }
-    }
-    
-    const handleLogout = async () => {
-      try {
-        await ElMessageBox.confirm(
-          '确定要退出登录吗?',
-          '提示',
-          {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning'
-          }
-        )
-        
-        localStorage.removeItem('isLoggedIn')
-        localStorage.removeItem('username')
-        localStorage.removeItem('loginTime')
-        localStorage.removeItem('rememberLogin')
-        
-        ElMessage.success('已安全退出')
-        router.push('/login')
-        
-      } catch {
-        // 用户取消退出
-      }
-    }
-    
-    return {
-      userInfo,
-      userStats,
-      siteStats,
-      userActivity,
-      latestTorrents,
-      formatTime,
-      getRatioClass,
-      getCategoryType,
-      navigateTo,
-      handleUserCommand,
-      handleLogout,
-      Download,
-      Upload,
-      ChatDotRound,
-      Search,
-      User,
-      Connection,
-      TrophyBase,
-      ArrowRight,
-      Clock,
-      Coin
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.home-page {
-  min-height: 100vh;
-  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-  padding: 0;
-}
-
-.home-container {
-  max-width: 1200px;
-  margin: 0 auto;
-  background: #fff;
-  min-height: 100vh;
-}
-
-// 网站头部
-.site-header {
-  background: #fff;
-  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
-  position: sticky;
-  top: 0;
-  z-index: 100;
-  
-  .header-content {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 16px 24px;
-    
-    .logo-section {
-      .site-logo {
-        margin: 0;
-        font-size: 24px;
-        font-weight: bold;
-        color: #667eea;
-      }
-    }
-    
-    .user-section {
-      display: flex;
-      align-items: center;
-      gap: 24px;
-      
-      .user-stats {
-        display: flex;
-        gap: 16px;
-        
-        .stat-item {
-          font-size: 14px;
-          
-          .stat-label {
-            color: #909399;
-            margin-right: 4px;
-          }
-          
-          .stat-value {
-            font-weight: 600;
-            color: #2c3e50;
-            
-            &.ratio {
-              &.excellent { color: #67c23a; }
-              &.good { color: #e6a23c; }
-              &.warning { color: #f56c6c; }
-            }
-          }
-        }
-      }
-      
-      .user-info {
-        display: flex;
-        align-items: center;
-        gap: 8px;
-        cursor: pointer;
-        
-        .username {
-          font-weight: 500;
-          color: #2c3e50;
-        }
-        
-        .dropdown-icon {
-          color: #909399;
-          transition: transform 0.3s ease;
-          
-          &:hover {
-            transform: rotate(180deg);
-          }
-        }
-      }
-    }
-  }
-}
-
-// 主要内容
-.main-content {
-  padding: 24px;
-}
-
-.section-title {
-  font-size: 20px;
-  font-weight: 600;
-  color: #2c3e50;
-  margin-bottom: 16px;
-}
-
-.section-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 16px;
-}
-
-// 统计概览
-.stats-overview {
-  margin-bottom: 32px;
-  
-  .stats-grid {
-    display: grid;
-    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
-    gap: 16px;
-    
-    .stat-card {
-      background: #fff;
-      border-radius: 12px;
-      padding: 24px;
-      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-      border: 1px solid #f0f0f0;
-      display: flex;
-      align-items: center;
-      gap: 16px;
-      transition: all 0.3s ease;
-      
-      &:hover {
-        transform: translateY(-2px);
-        box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
-      }
-      
-      .stat-info {
-        h3 {
-          font-size: 24px;
-          font-weight: bold;
-          color: #2c3e50;
-          margin: 0 0 4px 0;
-        }
-        
-        p {
-          font-size: 14px;
-          color: #909399;
-          margin: 0;
-        }
-      }
-    }
-  }
-}
-
-// 快速操作
-.quick-actions {
-  margin-bottom: 32px;
-  
-  .action-grid {
-    display: grid;
-    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
-    gap: 20px;
-    
-    .action-card {
-      background: #fff;
-      border-radius: 12px;
-      padding: 32px 24px;
-      text-align: center;
-      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-      border: 1px solid #f0f0f0;
-      cursor: pointer;
-      transition: all 0.3s ease;
-      
-      &:hover {
-        transform: translateY(-4px);
-        box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15);
-      }
-      
-      h3 {
-        font-size: 18px;
-        font-weight: 600;
-        color: #2c3e50;
-        margin: 16px 0 8px 0;
-      }
-      
-      p {
-        font-size: 14px;
-        color: #7f8c8d;
-        line-height: 1.5;
-        margin: 0;
-      }
-    }
-  }
-}
-
-// 最新种子
-.latest-torrents {
-  margin-bottom: 32px;
-  
-  .torrents-list {
-    background: #fff;
-    border-radius: 12px;
-    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-    border: 1px solid #f0f0f0;
-    overflow: hidden;
-    
-    .torrent-item {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 20px 24px;
-      border-bottom: 1px solid #f5f5f5;
-      cursor: pointer;
-      transition: background-color 0.3s ease;
-      
-      &:hover {
-        background-color: #f8f9fa;
-      }
-      
-      &:last-child {
-        border-bottom: none;
-      }
-      
-      .torrent-info {
-        flex: 1;
-        
-        .torrent-category {
-          margin-bottom: 8px;
-        }
-        
-        .torrent-title {
-          font-size: 16px;
-          font-weight: 500;
-          color: #2c3e50;
-          margin: 0 0 8px 0;
-          line-height: 1.4;
-        }
-        
-        .torrent-meta {
-          display: flex;
-          gap: 16px;
-          
-          .meta-item {
-            display: flex;
-            align-items: center;
-            gap: 4px;
-            font-size: 12px;
-            color: #909399;
-            
-            .el-icon {
-              font-size: 12px;
-            }
-          }
-        }
-      }
-      
-      .torrent-stats {
-        display: flex;
-        gap: 24px;
-        
-        .stat-group {
-          text-align: center;
-          
-          .stat-number {
-            display: block;
-            font-size: 16px;
-            font-weight: 600;
-            
-            &.seeders { color: #67c23a; }
-            &.leechers { color: #f56c6c; }
-          }
-          
-          .stat-label {
-            font-size: 12px;
-            color: #909399;
-          }
-        }
-      }
-    }
-  }
-}
-
-// 用户活动
-.user-activity {
-  .activity-grid {
-    display: grid;
-    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
-    gap: 20px;
-    
-    .activity-card {
-      background: #fff;
-      border-radius: 12px;
-      padding: 24px;
-      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-      border: 1px solid #f0f0f0;
-      
-      h3 {
-        font-size: 18px;
-        font-weight: 600;
-        color: #2c3e50;
-        margin: 0 0 16px 0;
-      }
-      
-      .activity-stats {
-        margin-bottom: 16px;
-        
-        .activity-item {
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
-          padding: 8px 0;
-          
-          .activity-label {
-            font-size: 14px;
-            color: #7f8c8d;
-          }
-          
-          .activity-value {
-            font-size: 14px;
-            font-weight: 600;
-            color: #2c3e50;
-          }
-        }
-      }
-    }
-  }
-}
-
-// 响应式设计
-@media (max-width: 768px) {
-  .header-content {
-    flex-direction: column;
-    gap: 16px;
-    
-    .user-stats {
-      flex-direction: column;
-      gap: 8px;
-      text-align: center;
-    }
-  }
-  
-  .main-content {
-    padding: 16px;
-  }
-  
-  .stats-grid,
-  .action-grid,
-  .activity-grid {
-    grid-template-columns: 1fr;
-  }
-  
-  .torrent-item {
-    flex-direction: column;
-    align-items: flex-start;
-    gap: 16px;
-    
-    .torrent-stats {
-      width: 100%;
-      justify-content: space-around;
-    }
-  }
-}
+<template>

+  <div class="home-page">

+    <!-- 导航栏 -->

+    <div class="navbar">

+      <router-link to="/home" class="navbar-brand">PT Tracker</router-link>

+      <div class="navbar-nav">

+        <router-link to="/home" class="navbar-item">首页</router-link>

+        <router-link to="/torrents" class="navbar-item">种子</router-link>

+        <router-link to="/forum" class="navbar-item">论坛</router-link>

+        <el-dropdown @command="handleUserCommand">

+          <span class="navbar-user">

+            <el-avatar :size="32" :src="userAvatar">

+              {{ username.charAt(0).toUpperCase() }}

+            </el-avatar>

+            <span class="username">{{ username }}</span>

+            <el-icon><ArrowDown /></el-icon>

+          </span>

+          <template #dropdown>

+            <el-dropdown-menu>

+              <el-dropdown-item command="profile">

+                <el-icon><User /></el-icon>

+                个人资料

+              </el-dropdown-item>

+              <el-dropdown-item command="settings">

+                <el-icon><Setting /></el-icon>

+                设置

+              </el-dropdown-item>

+              <el-dropdown-item divided command="logout">

+                <el-icon><SwitchButton /></el-icon>

+                退出登录

+              </el-dropdown-item>

+            </el-dropdown-menu>

+          </template>

+        </el-dropdown>

+      </div>

+    </div>

+

+    <!-- 主内容区 -->

+    <div class="main-content">

+      <!-- 欢迎卡片 -->

+      <div class="welcome-card">

+        <div class="welcome-header">

+          <h1>欢迎回来,{{ username }}!</h1>

+          <p>当前时间:{{ currentTime }}</p>

+        </div>

+        

+        <!-- 用户统计概览 -->

+        <div class="stats-overview" v-if="userInfo">

+          <div class="stat-item">

+            <div class="stat-icon upload">

+              <el-icon size="24"><Upload /></el-icon>

+            </div>

+            <div class="stat-content">

+              <h3>{{ formatBytes(userInfo.user.uploaded) }}</h3>

+              <p>总上传</p>

+            </div>

+          </div>

+          

+          <div class="stat-item">

+            <div class="stat-icon download">

+              <el-icon size="24"><Download /></el-icon>

+            </div>

+            <div class="stat-content">

+              <h3>{{ formatBytes(userInfo.user.downloaded) }}</h3>

+              <p>总下载</p>

+            </div>

+          </div>

+          

+          <div class="stat-item">

+            <div class="stat-icon ratio">

+              <el-icon size="24"><TrendCharts /></el-icon>

+            </div>

+            <div class="stat-content">

+              <h3>{{ calculateRatio(userInfo.user.uploaded, userInfo.user.downloaded) }}</h3>

+              <p>分享率</p>

+            </div>

+          </div>

+          

+          <div class="stat-item">

+            <div class="stat-icon points">

+              <el-icon size="24"><Star /></el-icon>

+            </div>

+            <div class="stat-content">

+              <h3>{{ userInfo.user.karma || '0' }}</h3>

+              <p>积分</p>

+            </div>

+          </div>

+        </div>

+      </div>

+

+      <!-- 功能快捷入口 -->

+      <div class="quick-actions">

+        <h2>快捷操作</h2>

+        <div class="actions-grid">

+          <div class="action-card" @click="$router.push('/upload')">

+            <el-icon size="32" color="#67c23a"><Upload /></el-icon>

+            <h3>上传种子</h3>

+            <p>分享你的资源</p>

+          </div>

+          

+          <div class="action-card" @click="$router.push('/torrents')">

+            <el-icon size="32" color="#409eff"><Search /></el-icon>

+            <h3>浏览种子</h3>

+            <p>发现新内容</p>

+          </div>

+          

+          <div class="action-card" @click="$router.push('/forum')">

+            <el-icon size="32" color="#e6a23c"><ChatDotRound /></el-icon>

+            <h3>社区论坛</h3>

+            <p>交流讨论</p>

+          </div>

+          

+          <div class="action-card" @click="$router.push('/profile')">

+            <el-icon size="32" color="#f56c6c"><User /></el-icon>

+            <h3>个人中心</h3>

+            <p>管理账户</p>

+          </div>

+        </div>

+      </div>

+

+      <!-- API连接状态测试 -->

+      <div class="api-status-card">

+        <h2>API连接状态</h2>

+        <div class="status-items">

+          <div class="status-item">

+            <el-icon :color="loginStatusColor"><CircleCheck /></el-icon>

+            <span>登录状态:{{ loginStatusText }}</span>

+            <el-button size="small" @click="checkLoginStatus">检查状态</el-button>

+          </div>

+          

+          <div class="status-item">

+            <el-icon :color="userInfoStatusColor"><User /></el-icon>

+            <span>用户信息:{{ userInfoStatusText }}</span>

+            <el-button size="small" @click="refreshUserInfo">刷新信息</el-button>

+          </div>

+        </div>

+        

+        <!-- 用户详细信息展示 -->

+        <div class="user-details" v-if="userInfo">

+          <h3>用户详细信息</h3>

+          <div class="details-grid">

+            <div class="detail-item">

+              <label>用户ID:</label>

+              <span>{{ userInfo.user.id }}</span>

+            </div>

+            <div class="detail-item">

+              <label>用户名:</label>

+              <span>{{ userInfo.user.username }}</span>

+            </div>

+            <div class="detail-item">

+              <label>邮箱:</label>

+              <span>{{ userInfo.user.email }}</span>

+            </div>

+            <div class="detail-item">

+              <label>用户组:</label>

+              <span>{{ userInfo.user.group?.displayName || '未知' }}</span>

+            </div>

+            <div class="detail-item">

+              <label>注册时间:</label>

+              <span>{{ formatDate(userInfo.user.createdAt) }}</span>

+            </div>

+            <div class="detail-item">

+              <label>个性签名:</label>

+              <span>{{ userInfo.user.signature || '这个用户很懒,还没有个性签名' }}</span>

+            </div>

+          </div>

+        </div>

+      </div>

+    </div>

+  </div>

+</template>

+

+<script>

+import { ref, computed, onMounted, onUnmounted } from 'vue'

+import { useRouter } from 'vue-router'

+import { useStore } from 'vuex'

+import { ElMessage, ElMessageBox } from 'element-plus'

+import {

+  ArrowDown,

+  User,

+  Setting,

+  SwitchButton,

+  Upload,

+  Download,

+  TrendCharts,

+  Star,

+  Search,

+  ChatDotRound,

+  CircleCheck

+} from '@element-plus/icons-vue'

+

+export default {

+  name: 'HomeView',

+  components: {

+    ArrowDown,

+    User,

+    Setting,

+    SwitchButton,

+    Upload,

+    Download,

+    TrendCharts,

+    Star,

+    Search,

+    ChatDotRound,

+    CircleCheck

+  },

+  setup() {

+    const router = useRouter()

+    const store = useStore()

+    

+    const currentTime = ref('')

+    const timeInterval = ref(null)

+    

+    // 从store获取用户信息

+    const userInfo = computed(() => store.getters['auth/userInfo'])

+    const username = computed(() => store.getters['auth/username'])

+    const userAvatar = computed(() => store.getters['auth/avatar'])

+    const isAuthenticated = computed(() => store.getters['auth/isAuthenticated'])

+    

+    // API状态

+    const loginStatusColor = computed(() => isAuthenticated.value ? '#67c23a' : '#f56c6c')

+    const loginStatusText = computed(() => isAuthenticated.value ? '已登录' : '未登录')

+    

+    const userInfoStatusColor = computed(() => userInfo.value ? '#67c23a' : '#f56c6c')

+    const userInfoStatusText = computed(() => userInfo.value ? '已获取' : '未获取')

+    

+    // 更新当前时间

+    const updateCurrentTime = () => {

+      currentTime.value = new Date().toLocaleString('zh-CN')

+    }

+    

+    // 格式化字节数

+    const formatBytes = (bytes) => {

+      if (!bytes || bytes === 0) return '0 B'

+      

+      const sizes = ['B', 'KB', 'MB', 'GB', 'TB']

+      const i = Math.floor(Math.log(bytes) / Math.log(1024))

+      const size = (bytes / Math.pow(1024, i)).toFixed(2)

+      

+      return `${size} ${sizes[i]}`

+    }

+    

+    // 计算分享率

+    const calculateRatio = (uploaded, downloaded) => {

+      if (!uploaded || !downloaded || downloaded === 0) {

+        return uploaded > 0 ? '∞' : '0.00'

+      }

+      return (uploaded / downloaded).toFixed(2)

+    }

+    

+    // 格式化日期

+    const formatDate = (timestamp) => {

+      if (!timestamp) return '未知'

+      return new Date(timestamp).toLocaleDateString('zh-CN')

+    }

+    

+    // 检查登录状态

+    const checkLoginStatus = async () => {

+      try {

+        await store.dispatch('auth/checkLoginStatus')

+        ElMessage.success('登录状态检查完成')

+      } catch (error) {

+        console.error('检查登录状态失败:', error)

+        ElMessage.error('检查登录状态失败')

+      }

+    }

+    

+    // 刷新用户信息

+    const refreshUserInfo = async () => {

+      try {

+        await store.dispatch('auth/checkLoginStatus')

+        ElMessage.success('用户信息刷新成功')

+      } catch (error) {

+        console.error('刷新用户信息失败:', error)

+        ElMessage.error('刷新用户信息失败')

+      }

+    }

+    

+    // 处理用户菜单命令

+    const handleUserCommand = async (command) => {

+      switch (command) {

+        case 'profile':

+          router.push('/profile')

+          break

+        case 'settings':

+          ElMessage.info('设置功能开发中...')

+          break

+        case 'logout':

+          try {

+            await ElMessageBox.confirm('确定要退出登录吗?', '提示', {

+              confirmButtonText: '确定',

+              cancelButtonText: '取消',

+              type: 'warning'

+            })

+            

+            await store.dispatch('auth/logout')

+            router.push('/login')

+          } catch (error) {

+            // 用户取消操作

+            if (error !== 'cancel') {

+              console.error('退出登录失败:', error)

+            }

+          }

+          break

+      }

+    }

+    

+    onMounted(() => {

+      // 开始时间更新

+      updateCurrentTime()

+      timeInterval.value = setInterval(updateCurrentTime, 1000)

+      

+      // 检查登录状态

+      if (!isAuthenticated.value) {

+        checkLoginStatus()

+      }

+    })

+    

+    onUnmounted(() => {

+      // 清理定时器

+      if (timeInterval.value) {

+        clearInterval(timeInterval.value)

+      }

+    })

+    

+    return {

+      currentTime,

+      userInfo,

+      username,

+      userAvatar,

+      isAuthenticated,

+      loginStatusColor,

+      loginStatusText,

+      userInfoStatusColor,

+      userInfoStatusText,

+      formatBytes,

+      calculateRatio,

+      formatDate,

+      checkLoginStatus,

+      refreshUserInfo,

+      handleUserCommand

+    }

+  }

+}

+</script>

+

+<style lang="scss" scoped>

+.home-page {

+  min-height: 100vh;

+  background: #f5f5f5;

+}

+

+.navbar {

+  background: #fff;

+  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);

+  height: 60px;

+  display: flex;

+  align-items: center;

+  justify-content: space-between;

+  padding: 0 24px;

+  position: sticky;

+  top: 0;

+  z-index: 1000;

+}

+

+.navbar-brand {

+  font-size: 20px;

+  font-weight: 700;

+  color: #409eff;

+  text-decoration: none;

+}

+

+.navbar-nav {

+  display: flex;

+  align-items: center;

+  gap: 24px;

+}

+

+.navbar-item {

+  color: #606266;

+  text-decoration: none;

+  font-weight: 500;

+  transition: color 0.3s;

+  

+  &:hover {

+    color: #409eff;

+  }

+}

+

+.navbar-user {

+  display: flex;

+  align-items: center;

+  gap: 8px;

+  cursor: pointer;

+  padding: 8px;

+  border-radius: 6px;

+  transition: background-color 0.3s;

+  

+  &:hover {

+    background-color: #f5f7fa;

+  }

+  

+  .username {

+    font-weight: 500;

+    color: #303133;

+  }

+}

+

+.main-content {

+  max-width: 1200px;

+  margin: 0 auto;

+  padding: 24px;

+}

+

+.welcome-card {

+  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);

+  color: white;

+  border-radius: 12px;

+  padding: 32px;

+  margin-bottom: 24px;

+  

+  .welcome-header {

+    text-align: center;

+    margin-bottom: 24px;

+    

+    h1 {

+      font-size: 28px;

+      margin-bottom: 8px;

+    }

+    

+    p {

+      opacity: 0.9;

+      font-size: 14px;

+    }

+  }

+  

+  .stats-overview {

+    display: grid;

+    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));

+    gap: 16px;

+    

+    .stat-item {

+      background: rgba(255, 255, 255, 0.1);

+      backdrop-filter: blur(10px);

+      border-radius: 8px;

+      padding: 20px;

+      display: flex;

+      align-items: center;

+      gap: 16px;

+      

+      .stat-icon {

+        width: 48px;

+        height: 48px;

+        border-radius: 50%;

+        background: rgba(255, 255, 255, 0.2);

+        display: flex;

+        align-items: center;

+        justify-content: center;

+      }

+      

+      .stat-content {

+        h3 {

+          font-size: 20px;

+          font-weight: 600;

+          margin: 0 0 4px 0;

+        }

+        

+        p {

+          font-size: 14px;

+          opacity: 0.8;

+          margin: 0;

+        }

+      }

+    }

+  }

+}

+

+.quick-actions {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  h2 {

+    font-size: 20px;

+    color: #303133;

+    margin: 0 0 20px 0;

+  }

+  

+  .actions-grid {

+    display: grid;

+    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));

+    gap: 16px;

+    

+    .action-card {

+      background: #f8f9fa;

+      border-radius: 8px;

+      padding: 24px;

+      text-align: center;

+      cursor: pointer;

+      transition: all 0.3s;

+      border: 2px solid transparent;

+      

+      &:hover {

+        transform: translateY(-2px);

+        box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);

+        border-color: #409eff;

+      }

+      

+      h3 {

+        font-size: 16px;

+        color: #303133;

+        margin: 12px 0 8px 0;

+      }

+      

+      p {

+        font-size: 14px;

+        color: #909399;

+        margin: 0;

+      }

+    }

+  }

+}

+

+.api-status-card {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  h2 {

+    font-size: 20px;

+    color: #303133;

+    margin: 0 0 20px 0;

+  }

+  

+  .status-items {

+    margin-bottom: 24px;

+    

+    .status-item {

+      display: flex;

+      align-items: center;

+      gap: 12px;

+      padding: 12px 0;

+      border-bottom: 1px solid #ebeef5;

+      

+      &:last-child {

+        border-bottom: none;

+      }

+      

+      span {

+        flex: 1;

+        font-size: 14px;

+        color: #606266;

+      }

+    }

+  }

+  

+  .user-details {

+    border-top: 1px solid #ebeef5;

+    padding-top: 20px;

+    

+    h3 {

+      font-size: 16px;

+      color: #303133;

+      margin: 0 0 16px 0;

+    }

+    

+    .details-grid {

+      display: grid;

+      grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));

+      gap: 12px;

+      

+      .detail-item {

+        display: flex;

+        align-items: center;

+        padding: 8px 0;

+        

+        label {

+          font-weight: 500;

+          color: #909399;

+          min-width: 80px;

+          font-size: 14px;

+        }

+        

+        span {

+          color: #606266;

+          font-size: 14px;

+        }

+      }

+    }

+  }

+}

+

+@media (max-width: 768px) {

+  .navbar {

+    padding: 0 16px;

+    

+    .navbar-nav {

+      gap: 16px;

+    }

+    

+    .navbar-user .username {

+      display: none;

+    }

+  }

+  

+  .main-content {

+    padding: 16px;

+  }

+  

+  .welcome-card {

+    padding: 24px 16px;

+    

+    .welcome-header h1 {

+      font-size: 24px;

+    }

+    

+    .stats-overview {

+      grid-template-columns: repeat(2, 1fr);

+      gap: 12px;

+      

+      .stat-item {

+        padding: 16px;

+        

+        .stat-content h3 {

+          font-size: 16px;

+        }

+      }

+    }

+  }

+  

+  .actions-grid {

+    grid-template-columns: repeat(2, 1fr);

+    gap: 12px;

+    

+    .action-card {

+      padding: 16px;

+      

+      h3 {

+        font-size: 14px;

+      }

+      

+      p {

+        font-size: 12px;

+      }

+    }

+  }

+  

+  .details-grid {

+    grid-template-columns: 1fr;

+  }

+}

+

+@media (max-width: 480px) {

+  .stats-overview {

+    grid-template-columns: 1fr;

+  }

+  

+  .actions-grid {

+    grid-template-columns: 1fr;

+  }

+}

 </style>
\ No newline at end of file
diff --git a/src/views/auth/LoginView.vue b/src/views/auth/LoginView.vue
index fb85c70..8ab8577 100644
--- a/src/views/auth/LoginView.vue
+++ b/src/views/auth/LoginView.vue
@@ -1,343 +1,183 @@
-<template>
-  <div class="login-page">
-    <!-- 背景装饰 -->
-    <div class="bg-decoration">
-      <div class="shape shape-1"></div>
-      <div class="shape shape-2"></div>
-      <div class="shape shape-3"></div>
-    </div>
-    
-    <!-- 登录表单容器 -->
-    <div class="login-container">
-      <div class="login-card">
-        <!-- 头部信息 -->
-        <div class="login-header">
-          <div class="logo">
-            <el-icon size="48" color="#667eea"><Operation /></el-icon>
-          </div>
-          <h1 class="title">PT Tracker</h1>
-          <p class="subtitle">私有种子分享社区</p>
-        </div>
-        
-        <!-- 登录表单 -->
-        <el-form
-          ref="loginFormRef"
-          :model="loginForm"
-          :rules="loginRules"
-          class="login-form"
-          size="large"
-        >
-          <el-form-item prop="username">
-            <el-input
-              v-model="loginForm.username"
-              placeholder="请输入用户名或邮箱"
-              clearable
-              :prefix-icon="User"
-            />
-          </el-form-item>
-          
-          <el-form-item prop="password">
-            <el-input
-              v-model="loginForm.password"
-              type="password"
-              placeholder="请输入密码"
-              show-password
-              :prefix-icon="Lock"
-              @keyup.enter="handleLogin"
-            />
-          </el-form-item>
-          
-          <el-form-item>
-            <div class="login-options">
-              <el-checkbox v-model="rememberMe">记住登录</el-checkbox>
-              <el-link type="primary" :underline="false">忘记密码?</el-link>
-            </div>
-          </el-form-item>
-          
-          <el-form-item>
-            <el-button
-              type="primary"
-              :loading="loading"
-              style="width: 100%"
-              @click="handleLogin"
-            >
-              <span v-if="!loading">登录</span>
-              <span v-else>登录中...</span>
-            </el-button>
-          </el-form-item>
-        </el-form>
-        
-        <!-- 底部链接 -->
-        <div class="login-footer">
-          <span class="footer-text">还没有账号?</span>
-          <el-link 
-            type="primary" 
-            :underline="false"
-            @click="$router.push('/register')"
-          >
-            立即注册
-          </el-link>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { ref, reactive } from 'vue'
-import { useRouter } from 'vue-router'
-import { ElMessage } from 'element-plus'
-import { User, Lock, Operation } from '@element-plus/icons-vue'
-
-export default {
-  name: 'LoginView',
-  components: {
-    Operation
-  },
-  setup() {
-    const router = useRouter()
-    const loginFormRef = ref()
-    const loading = ref(false)
-    const rememberMe = ref(false)
-    
-    // 表单数据
-    const loginForm = reactive({
-      username: '',
-      password: ''
-    })
-    
-    // 验证规则
-    const loginRules = {
-      username: [
-        { required: true, message: '请输入用户名或邮箱', trigger: 'blur' },
-        { min: 3, message: '用户名至少3个字符', trigger: 'blur' }
-      ],
-      password: [
-        { required: true, message: '请输入密码', trigger: 'blur' },
-        { min: 6, message: '密码至少6个字符', trigger: 'blur' }
-      ]
-    }
-    
-    // 登录处理
-    const handleLogin = async () => {
-      try {
-        // 表单验证
-        const valid = await loginFormRef.value.validate()
-        if (!valid) return
-        
-        loading.value = true
-        
-        // 模拟登录API请求
-        await new Promise(resolve => setTimeout(resolve, 1000))
-        
-        // 简单的登录验证(实际项目中应该调用后端API)
-        if (loginForm.username === 'admin' && loginForm.password === '123456') {
-          // 登录成功
-          localStorage.setItem('isLoggedIn', 'true')
-          localStorage.setItem('username', loginForm.username)
-          localStorage.setItem('loginTime', new Date().toISOString())
-          
-          if (rememberMe.value) {
-            localStorage.setItem('rememberLogin', 'true')
-          }
-          
-          ElMessage.success('登录成功!欢迎回来')
-          router.push('/home')
-        } else {
-          ElMessage.error('用户名或密码错误,请重试')
-        }
-        
-      } catch (error) {
-        console.error('登录失败:', error)
-        ElMessage.error('登录失败,请稍后重试')
-      } finally {
-        loading.value = false
-      }
-    }
-    
-    return {
-      loginFormRef,
-      loginForm,
-      loginRules,
-      loading,
-      rememberMe,
-      handleLogin,
-      User,
-      Lock
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.login-page {
-  min-height: 100vh;
-  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-  position: relative;
-  overflow: hidden;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  padding: 20px;
-}
-
-// 背景装饰
-.bg-decoration {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  overflow: hidden;
-  z-index: 1;
-  
-  .shape {
-    position: absolute;
-    border-radius: 50%;
-    background: rgba(255, 255, 255, 0.1);
-    animation: float 6s ease-in-out infinite;
-    
-    &.shape-1 {
-      width: 200px;
-      height: 200px;
-      top: 10%;
-      left: 10%;
-      animation-delay: 0s;
-    }
-    
-    &.shape-2 {
-      width: 150px;
-      height: 150px;
-      top: 60%;
-      right: 10%;
-      animation-delay: -2s;
-    }
-    
-    &.shape-3 {
-      width: 100px;
-      height: 100px;
-      bottom: 20%;
-      left: 20%;
-      animation-delay: -4s;
-    }
-  }
-}
-
-@keyframes float {
-  0%, 100% {
-    transform: translateY(0px) rotate(0deg);
-  }
-  50% {
-    transform: translateY(-20px) rotate(180deg);
-  }
-}
-
-// 登录容器
-.login-container {
-  position: relative;
-  z-index: 10;
-  width: 100%;
-  max-width: 420px;
-}
-
-.login-card {
-  background: rgba(255, 255, 255, 0.95);
-  backdrop-filter: blur(10px);
-  border-radius: 16px;
-  padding: 40px;
-  box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
-  border: 1px solid rgba(255, 255, 255, 0.2);
-  
-  .login-header {
-    text-align: center;
-    margin-bottom: 32px;
-    
-    .logo {
-      margin-bottom: 16px;
-    }
-    
-    .title {
-      font-size: 32px;
-      font-weight: 700;
-      color: #2c3e50;
-      margin-bottom: 8px;
-      letter-spacing: -0.5px;
-    }
-    
-    .subtitle {
-      font-size: 15px;
-      color: #7f8c8d;
-      margin: 0;
-      font-weight: 400;
-    }
-  }
-  
-  .login-form {
-    .el-form-item {
-      margin-bottom: 24px;
-      
-      &:last-child {
-        margin-bottom: 0;
-      }
-    }
-    
-    .login-options {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      width: 100%;
-      
-      .el-checkbox {
-        :deep(.el-checkbox__label) {
-          font-size: 14px;
-          color: #606266;
-        }
-      }
-      
-      .el-link {
-        font-size: 14px;
-      }
-    }
-    
-    .el-button {
-      font-size: 16px;
-      font-weight: 500;
-      height: 48px;
-      border-radius: 8px;
-    }
-  }
-  
-  .login-footer {
-    text-align: center;
-    margin-top: 24px;
-    padding-top: 24px;
-    border-top: 1px solid #ebeef5;
-    
-    .footer-text {
-      color: #909399;
-      font-size: 14px;
-      margin-right: 8px;
-    }
-    
-    .el-link {
-      font-size: 14px;
-      font-weight: 500;
-    }
-  }
-}
-
-// 响应式设计
-@media (max-width: 768px) {
-  .login-page {
-    padding: 16px;
-  }
-  
-  .login-card {
-    padding: 32px 24px;
-    
-    .login-header .title {
-      font-size: 28px;
-    }
-  }
-}
-</style>
+<template>

+  <div class="login-page">

+    <!-- 背景装饰 -->

+    <div class="bg-decoration">

+      <div class="shape shape-1"></div>

+      <div class="shape shape-2"></div>

+      <div class="shape shape-3"></div>

+    </div>

+    

+    <!-- 登录表单容器 -->

+    <div class="login-container">

+      <div class="login-card">

+        <!-- 头部信息 -->

+        <div class="login-header">

+          <div class="logo">

+            <el-icon size="48" color="#667eea"><Operation /></el-icon>

+          </div>

+          <h1 class="title">PT Tracker</h1>

+          <p class="subtitle">私有种子分享社区</p>

+        </div>

+        

+        <!-- 登录表单 -->

+        <el-form

+          ref="loginFormRef"

+          :model="loginForm"

+          :rules="loginRules"

+          class="login-form"

+          size="large"

+        >

+          <el-form-item prop="user">

+            <el-input

+              v-model="loginForm.user"

+              placeholder="请输入用户名或邮箱"

+              clearable

+              :prefix-icon="User"

+              @keyup.enter="handleLogin"

+            />

+          </el-form-item>

+          

+          <el-form-item prop="password">

+            <el-input

+              v-model="loginForm.password"

+              type="password"

+              placeholder="请输入密码"

+              show-password

+              :prefix-icon="Lock"

+              @keyup.enter="handleLogin"

+            />

+          </el-form-item>

+          

+          <el-form-item>

+            <div class="login-options">

+              <el-checkbox v-model="rememberMe">记住登录</el-checkbox>

+              <el-link type="primary" :underline="false">忘记密码?</el-link>

+            </div>

+          </el-form-item>

+          

+          <el-form-item>

+            <el-button

+              type="primary"

+              :loading="loginLoading"

+              style="width: 100%"

+              @click="handleLogin"

+            >

+              <span v-if="!loginLoading">登录</span>

+              <span v-else>登录中...</span>

+            </el-button>

+          </el-form-item>

+        </el-form>

+        

+        <!-- 底部链接 -->

+        <div class="login-footer">

+          <span class="footer-text">还没有账号?</span>

+          <el-link 

+            type="primary" 

+            :underline="false"

+            @click="$router.push('/register')"

+          >

+            立即注册

+          </el-link>

+        </div>

+      </div>

+    </div>

+  </div>

+</template>

+

+<script>

+import { ref, reactive, computed } from 'vue'

+import { useRouter } from 'vue-router'

+import { useStore } from 'vuex'

+import { ElMessage } from 'element-plus'

+import { User, Lock, Operation } from '@element-plus/icons-vue'

+

+export default {

+  name: 'LoginView',

+  components: {

+    Operation

+  },

+  setup() {

+    const router = useRouter()

+    const store = useStore()

+    const loginFormRef = ref()

+    const rememberMe = ref(false)

+    

+    // 安全地从store获取登录加载状态,添加防护检查

+    const loginLoading = computed(() => {

+      try {

+        return store?.getters?.['auth/loginLoading'] || false

+      } catch (error) {

+        console.warn('获取 loginLoading 状态失败:', error)

+        return false

+      }

+    })

+    

+    // 表单数据

+    const loginForm = reactive({

+      user: '',

+      password: ''

+    })

+    

+    // 验证规则

+    const loginRules = {

+      user: [

+        { required: true, message: '请输入用户名或邮箱', trigger: 'blur' },

+        { min: 3, message: '用户名至少3个字符', trigger: 'blur' }

+      ],

+      password: [

+        { required: true, message: '请输入密码', trigger: 'blur' },

+        { min: 6, message: '密码至少6个字符', trigger: 'blur' }

+      ]

+    }

+    

+    // 登录处理

+    const handleLogin = async () => {

+      try {

+        // 表单验证

+        if (!loginFormRef.value) {

+          ElMessage.error('表单未准备就绪')

+          return

+        }

+        

+        const valid = await loginFormRef.value.validate()

+        if (!valid) return

+        

+        // 检查 store 是否可用

+        if (!store) {

+          ElMessage.error('系统初始化失败,请刷新页面重试')

+          return

+        }

+        

+        // 调用store的登录action

+        await store.dispatch('auth/login', {

+          user: loginForm.user,

+          password: loginForm.password

+        })

+        

+        // 如果选择记住登录,设置localStorage标记

+        if (rememberMe.value) {

+          localStorage.setItem('rememberLogin', 'true')

+        }

+        

+        // 登录成功,跳转到首页

+        router.push('/home')

+        

+      } catch (error) {

+        console.error('登录失败:', error)

+        ElMessage.error(error.message || '登录失败,请重试')

+      }

+    }

+    

+    return {

+      loginFormRef,

+      loginForm,

+      loginRules,

+      loginLoading,

+      rememberMe,

+      handleLogin,

+      User,

+      Lock

+    }

+  }

+}

+</script>
\ No newline at end of file
diff --git a/src/views/auth/ProfileView.vue b/src/views/auth/ProfileView.vue
index e1e2544..5d11acc 100644
--- a/src/views/auth/ProfileView.vue
+++ b/src/views/auth/ProfileView.vue
@@ -1,1343 +1,1343 @@
-<template>
-  <div class="profile-page">
-    <div class="page-container">
-      <!-- 个人信息卡片 -->
-      <div class="profile-header">
-        <div class="user-avatar-section">
-          <div class="avatar-container">
-            <el-avatar :size="120" :src="userProfile.avatar">
-              {{ userProfile.username.charAt(0).toUpperCase() }}
-            </el-avatar>
-            <el-button 
-              type="primary" 
-              size="small" 
-              class="change-avatar-btn"
-              @click="showAvatarDialog = true"
-            >
-              更换头像
-            </el-button>
-          </div>
-          
-          <div class="user-basic-info">
-            <h1 class="username">{{ userProfile.username }}</h1>
-            <div class="user-title">
-              <el-tag :type="getUserTitleType(userProfile.userLevel)" size="large">
-                {{ userProfile.userTitle }}
-              </el-tag>
-            </div>
-            <div class="join-info">
-              <el-icon><Calendar /></el-icon>
-              <span>加入时间:{{ formatDate(userProfile.joinDate) }}</span>
-            </div>
-            <div class="last-login">
-              <el-icon><Clock /></el-icon>
-              <span>最后登录:{{ formatTime(userProfile.lastLogin) }}</span>
-            </div>
-          </div>
-        </div>
-        
-        <div class="user-stats-overview">
-          <div class="stats-grid">
-            <div class="stat-card">
-              <div class="stat-icon upload">
-                <el-icon size="32"><Upload /></el-icon>
-              </div>
-              <div class="stat-info">
-                <h3>{{ userProfile.stats.uploaded }}</h3>
-                <p>上传量</p>
-              </div>
-            </div>
-            
-            <div class="stat-card">
-              <div class="stat-icon download">
-                <el-icon size="32"><Download /></el-icon>
-              </div>
-              <div class="stat-info">
-                <h3>{{ userProfile.stats.downloaded }}</h3>
-                <p>下载量</p>
-              </div>
-            </div>
-            
-            <div class="stat-card">
-              <div class="stat-icon ratio" :class="getRatioClass(userProfile.stats.ratio)">
-                <el-icon size="32"><TrendCharts /></el-icon>
-              </div>
-              <div class="stat-info">
-                <h3>{{ userProfile.stats.ratio }}</h3>
-                <p>分享率</p>
-              </div>
-            </div>
-            
-            <div class="stat-card">
-              <div class="stat-icon points">
-                <el-icon size="32"><Star /></el-icon>
-              </div>
-              <div class="stat-info">
-                <h3>{{ userProfile.stats.points }}</h3>
-                <p>积分</p>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-
-      <!-- 详细信息选项卡 -->
-      <div class="profile-content">
-        <el-tabs v-model="activeTab" type="border-card">
-          <!-- 个人信息 -->
-          <el-tab-pane label="个人信息" name="info">
-            <div class="info-section">
-              <el-form
-                ref="profileFormRef"
-                :model="editProfile"
-                :rules="profileRules"
-                label-width="120px"
-                size="large"
-              >
-                <div class="form-section">
-                  <h3>基本信息</h3>
-                  <el-form-item label="用户名">
-                    <el-input v-model="editProfile.username" disabled>
-                      <template #suffix>
-                        <el-tooltip content="用户名不可修改">
-                          <el-icon><QuestionFilled /></el-icon>
-                        </el-tooltip>
-                      </template>
-                    </el-input>
-                  </el-form-item>
-                  
-                  <el-form-item label="邮箱地址" prop="email">
-                    <el-input v-model="editProfile.email" type="email" />
-                  </el-form-item>
-                  
-                  <el-form-item label="真实姓名" prop="realName">
-                    <el-input v-model="editProfile.realName" placeholder="可选填写" />
-                  </el-form-item>
-                  
-                  <el-form-item label="所在地区">
-                    <el-cascader
-                      v-model="editProfile.location"
-                      :options="locationOptions"
-                      placeholder="请选择地区"
-                      clearable
-                    />
-                  </el-form-item>
-                </div>
-                
-                <div class="form-section">
-                  <h3>个人介绍</h3>
-                  <el-form-item label="个人签名">
-                    <el-input
-                      v-model="editProfile.signature"
-                      type="textarea"
-                      :rows="3"
-                      maxlength="200"
-                      show-word-limit
-                      placeholder="介绍一下自己吧..."
-                    />
-                  </el-form-item>
-                  
-                  <el-form-item label="个人网站">
-                    <el-input v-model="editProfile.website" placeholder="https://" />
-                  </el-form-item>
-                  
-                  <el-form-item label="兴趣爱好">
-                    <div class="interests-input">
-                      <el-tag
-                        v-for="interest in editProfile.interests"
-                        :key="interest"
-                        closable
-                        @close="removeInterest(interest)"
-                        class="interest-tag"
-                      >
-                        {{ interest }}
-                      </el-tag>
-                      <el-input
-                        v-if="interestInputVisible"
-                        ref="interestInputRef"
-                        v-model="interestInputValue"
-                        size="small"
-                        @keyup.enter="addInterest"
-                        @blur="addInterest"
-                        style="width: 120px;"
-                      />
-                      <el-button
-                        v-else
-                        size="small"
-                        @click="showInterestInput"
-                      >
-                        + 添加兴趣
-                      </el-button>
-                    </div>
-                  </el-form-item>
-                </div>
-                
-                <div class="form-section">
-                  <h3>隐私设置</h3>
-                  <el-form-item label="邮箱公开">
-                    <el-switch v-model="editProfile.emailPublic" />
-                    <span class="setting-tip">是否在个人资料中显示邮箱</span>
-                  </el-form-item>
-                  
-                  <el-form-item label="统计公开">
-                    <el-switch v-model="editProfile.statsPublic" />
-                    <span class="setting-tip">是否公开上传下载统计</span>
-                  </el-form-item>
-                  
-                  <el-form-item label="活动记录">
-                    <el-switch v-model="editProfile.activityPublic" />
-                    <span class="setting-tip">是否公开活动记录</span>
-                  </el-form-item>
-                </div>
-                
-                <div class="form-actions">
-                  <el-button @click="resetProfile">重置</el-button>
-                  <el-button type="primary" @click="saveProfile" :loading="saving">
-                    保存修改
-                  </el-button>
-                </div>
-              </el-form>
-            </div>
-          </el-tab-pane>
-          
-          <!-- 数据统计 -->
-          <el-tab-pane label="数据统计" name="stats">
-            <div class="stats-section">
-              <div class="stats-overview">
-                <div class="overview-grid">
-                  <div class="overview-card">
-                    <h3>上传统计</h3>
-                    <div class="stat-details">
-                      <div class="detail-item">
-                        <span class="label">总上传量:</span>
-                        <span class="value">{{ userProfile.detailedStats.totalUploaded }}</span>
-                      </div>
-                      <div class="detail-item">
-                        <span class="label">上传种子:</span>
-                        <span class="value">{{ userProfile.detailedStats.uploadedTorrents }} 个</span>
-                      </div>
-                      <div class="detail-item">
-                        <span class="label">平均大小:</span>
-                        <span class="value">{{ userProfile.detailedStats.avgUploadSize }}</span>
-                      </div>
-                    </div>
-                  </div>
-                  
-                  <div class="overview-card">
-                    <h3>下载统计</h3>
-                    <div class="stat-details">
-                      <div class="detail-item">
-                        <span class="label">总下载量:</span>
-                        <span class="value">{{ userProfile.detailedStats.totalDownloaded }}</span>
-                      </div>
-                      <div class="detail-item">
-                        <span class="label">下载种子:</span>
-                        <span class="value">{{ userProfile.detailedStats.downloadedTorrents }} 个</span>
-                      </div>
-                      <div class="detail-item">
-                        <span class="label">完成种子:</span>
-                        <span class="value">{{ userProfile.detailedStats.completedTorrents }} 个</span>
-                      </div>
-                    </div>
-                  </div>
-                  
-                  <div class="overview-card">
-                    <h3>做种统计</h3>
-                    <div class="stat-details">
-                      <div class="detail-item">
-                        <span class="label">正在做种:</span>
-                        <span class="value">{{ userProfile.detailedStats.seeding }} 个</span>
-                      </div>
-                      <div class="detail-item">
-                        <span class="label">做种时间:</span>
-                        <span class="value">{{ userProfile.detailedStats.seedingTime }}</span>
-                      </div>
-                      <div class="detail-item">
-                        <span class="label">做种排名:</span>
-                        <span class="value">第 {{ userProfile.detailedStats.seedingRank }} 名</span>
-                      </div>
-                    </div>
-                  </div>
-                  
-                  <div class="overview-card">
-                    <h3>积分记录</h3>
-                    <div class="stat-details">
-                      <div class="detail-item">
-                        <span class="label">当前积分:</span>
-                        <span class="value">{{ userProfile.stats.points }}</span>
-                      </div>
-                      <div class="detail-item">
-                        <span class="label">累计获得:</span>
-                        <span class="value">{{ userProfile.detailedStats.totalEarnedPoints }}</span>
-                      </div>
-                      <div class="detail-item">
-                        <span class="label">累计消费:</span>
-                        <span class="value">{{ userProfile.detailedStats.totalSpentPoints }}</span>
-                      </div>
-                    </div>
-                  </div>
-                </div>
-              </div>
-              
-              <!-- 数据图表 -->
-              <div class="charts-section">
-                <div class="chart-card">
-                  <h3>上传下载趋势</h3>
-                  <div class="chart-placeholder">
-                    <el-icon size="48" color="#e4e7ed"><TrendCharts /></el-icon>
-                    <p>图表功能开发中...</p>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </el-tab-pane>
-          
-          <!-- 我的种子 -->
-          <el-tab-pane label="我的种子" name="torrents">
-            <div class="torrents-section">
-              <div class="section-header">
-                <h3>我上传的种子</h3>
-                <el-button type="primary" :icon="Upload" @click="$router.push('/upload')">
-                  上传新种子
-                </el-button>
-              </div>
-              
-              <el-table :data="userTorrents" stripe>
-                <el-table-column label="种子名称" min-width="300">
-                  <template #default="{ row }">
-                    <div class="torrent-info">
-                      <el-tag :type="getCategoryType(row.category)" size="small">
-                        {{ getCategoryName(row.category) }}
-                      </el-tag>
-                      <span class="torrent-title">{{ row.title }}</span>
-                    </div>
-                  </template>
-                </el-table-column>
-                
-                <el-table-column label="大小" prop="size" width="100" />
-                <el-table-column label="做种" prop="seeders" width="80" align="center" />
-                <el-table-column label="下载" prop="leechers" width="80" align="center" />
-                <el-table-column label="完成" prop="downloads" width="80" align="center" />
-                <el-table-column label="上传时间" width="120">
-                  <template #default="{ row }">
-                    {{ formatDate(row.uploadTime) }}
-                  </template>
-                </el-table-column>
-                
-                <el-table-column label="操作" width="120" align="center">
-                  <template #default="{ row }">
-                    <el-button 
-                      type="primary" 
-                      size="small" 
-                      @click="$router.push(`/torrent/${row.id}`)"
-                    >
-                      查看
-                    </el-button>
-                  </template>
-                </el-table-column>
-              </el-table>
-              
-              <div class="pagination-wrapper">
-                <el-pagination
-                  v-model:current-page="torrentsPage"
-                  :page-size="10"
-                  :total="userTorrents.length"
-                  layout="prev, pager, next"
-                  small
-                />
-              </div>
-            </div>
-          </el-tab-pane>
-          
-          <!-- 活动记录 -->
-          <el-tab-pane label="活动记录" name="activity">
-            <div class="activity-section">
-              <div class="activity-filters">
-                <el-select v-model="activityFilter" placeholder="活动类型">
-                  <el-option label="全部活动" value="" />
-                  <el-option label="上传种子" value="upload" />
-                  <el-option label="下载种子" value="download" />
-                  <el-option label="论坛发帖" value="post" />
-                  <el-option label="积分变动" value="points" />
-                </el-select>
-              </div>
-              
-              <div class="activity-timeline">
-                <el-timeline>
-                  <el-timeline-item
-                    v-for="activity in filteredActivities"
-                    :key="activity.id"
-                    :timestamp="formatTime(activity.time)"
-                    :type="getActivityType(activity.type)"
-                  >
-                    <div class="activity-content">
-                      <div class="activity-header">
-                        <el-icon>
-                          <component :is="getActivityIcon(activity.type)" />
-                        </el-icon>
-                        <span class="activity-title">{{ activity.title }}</span>
-                      </div>
-                      <div class="activity-description">{{ activity.description }}</div>
-                    </div>
-                  </el-timeline-item>
-                </el-timeline>
-              </div>
-            </div>
-          </el-tab-pane>
-          
-          <!-- 安全设置 -->
-          <el-tab-pane label="安全设置" name="security">
-            <div class="security-section">
-              <div class="security-card">
-                <h3>修改密码</h3>
-                <el-form
-                  ref="passwordFormRef"
-                  :model="passwordForm"
-                  :rules="passwordRules"
-                  label-width="120px"
-                >
-                  <el-form-item label="当前密码" prop="currentPassword">
-                    <el-input
-                      v-model="passwordForm.currentPassword"
-                      type="password"
-                      show-password
-                      placeholder="请输入当前密码"
-                    />
-                  </el-form-item>
-                  
-                  <el-form-item label="新密码" prop="newPassword">
-                    <el-input
-                      v-model="passwordForm.newPassword"
-                      type="password"
-                      show-password
-                      placeholder="请输入新密码"
-                    />
-                  </el-form-item>
-                  
-                  <el-form-item label="确认密码" prop="confirmPassword">
-                    <el-input
-                      v-model="passwordForm.confirmPassword"
-                      type="password"
-                      show-password
-                      placeholder="请再次输入新密码"
-                    />
-                  </el-form-item>
-                  
-                  <el-form-item>
-                    <el-button type="primary" @click="changePassword" :loading="changingPassword">
-                      修改密码
-                    </el-button>
-                  </el-form-item>
-                </el-form>
-              </div>
-              
-              <div class="security-card">
-                <h3>登录记录</h3>
-                <el-table :data="loginHistory" stripe>
-                  <el-table-column label="登录时间" width="180">
-                    <template #default="{ row }">
-                      {{ formatDateTime(row.time) }}
-                    </template>
-                  </el-table-column>
-                  <el-table-column label="IP地址" prop="ip" width="150" />
-                  <el-table-column label="设备信息" prop="device" />
-                  <el-table-column label="登录结果" width="100">
-                    <template #default="{ row }">
-                      <el-tag :type="row.success ? 'success' : 'danger'" size="small">
-                        {{ row.success ? '成功' : '失败' }}
-                      </el-tag>
-                    </template>
-                  </el-table-column>
-                </el-table>
-              </div>
-            </div>
-          </el-tab-pane>
-        </el-tabs>
-      </div>
-    </div>
-
-    <!-- 更换头像对话框 -->
-    <el-dialog v-model="showAvatarDialog" title="更换头像" width="400px">
-      <div class="avatar-upload">
-        <el-upload
-          ref="avatarUploadRef"
-          :auto-upload="false"
-          :limit="1"
-          accept="image/*"
-          :on-change="handleAvatarChange"
-          list-type="picture-card"
-          class="avatar-uploader"
-        >
-          <el-icon><Plus /></el-icon>
-        </el-upload>
-        <div class="upload-tips">
-          <p>支持 JPG、PNG 格式</p>
-          <p>建议尺寸 200x200 像素</p>
-          <p>文件大小不超过 2MB</p>
-        </div>
-      </div>
-      
-      <template #footer>
-        <el-button @click="showAvatarDialog = false">取消</el-button>
-        <el-button type="primary" @click="uploadAvatar" :loading="uploadingAvatar">
-          上传头像
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { ref, reactive, computed, onMounted, nextTick } from 'vue'
-import { useRouter } from 'vue-router'
-import { ElMessage } from 'element-plus'
-import {
-  Calendar,
-  Clock,
-  Upload,
-  Download,
-  TrendCharts,
-  Star,
-  QuestionFilled,
-  Plus,
-  ChatDotRound,
-  Flag,
-  Coin
-} from '@element-plus/icons-vue'
-
-export default {
-  name: 'ProfileView',
-  setup() {
-    const router = useRouter()
-    const profileFormRef = ref(null)
-    const passwordFormRef = ref(null)
-    const avatarUploadRef = ref(null)
-    const interestInputRef = ref(null)
-    
-    const activeTab = ref('info')
-    const showAvatarDialog = ref(false)
-    const saving = ref(false)
-    const changingPassword = ref(false)
-    const uploadingAvatar = ref(false)
-    const interestInputVisible = ref(false)
-    const interestInputValue = ref('')
-    const activityFilter = ref('')
-    const torrentsPage = ref(1)
-    
-    const userProfile = ref({
-      username: 'MovieExpert',
-      email: 'movieexpert@example.com',
-      realName: '',
-      avatar: '',
-      userLevel: 5,
-      userTitle: '资深会员',
-      joinDate: '2023-01-15T10:00:00',
-      lastLogin: '2025-06-03T14:30:00',
-      location: ['北京市', '朝阳区'],
-      signature: '热爱电影,分享快乐!',
-      website: 'https://movieblog.com',
-      interests: ['电影', '音乐', '科技', '摄影'],
-      emailPublic: false,
-      statsPublic: true,
-      activityPublic: true,
-      stats: {
-        uploaded: '256.8 GB',
-        downloaded: '89.6 GB',
-        ratio: '2.87',
-        points: '15,680'
-      },
-      detailedStats: {
-        totalUploaded: '256.8 GB',
-        uploadedTorrents: 45,
-        avgUploadSize: '5.7 GB',
-        totalDownloaded: '89.6 GB',
-        downloadedTorrents: 123,
-        completedTorrents: 118,
-        seeding: 32,
-        seedingTime: '1,245 小时',
-        seedingRank: 86,
-        totalEarnedPoints: '28,940',
-        totalSpentPoints: '13,260'
-      }
-    })
-    
-    const editProfile = reactive({
-      username: '',
-      email: '',
-      realName: '',
-      location: [],
-      signature: '',
-      website: '',
-      interests: [],
-      emailPublic: false,
-      statsPublic: true,
-      activityPublic: true
-    })
-    
-    const passwordForm = reactive({
-      currentPassword: '',
-      newPassword: '',
-      confirmPassword: ''
-    })
-    
-    const profileRules = {
-      email: [
-        { required: true, message: '请输入邮箱地址', trigger: 'blur' },
-        { type: 'email', message: '请输入正确的邮箱格式', trigger: 'blur' }
-      ]
-    }
-    
-    const passwordRules = {
-      currentPassword: [
-        { required: true, message: '请输入当前密码', trigger: 'blur' }
-      ],
-      newPassword: [
-        { required: true, message: '请输入新密码', trigger: 'blur' },
-        { min: 6, message: '密码长度至少6个字符', trigger: 'blur' }
-      ],
-      confirmPassword: [
-        { required: true, message: '请确认新密码', trigger: 'blur' },
-        {
-          validator: (rule, value, callback) => {
-            if (value !== passwordForm.newPassword) {
-              callback(new Error('两次输入的密码不一致'))
-            } else {
-              callback()
-            }
-          },
-          trigger: 'blur'
-        }
-      ]
-    }
-    
-    const locationOptions = [
-      {
-        value: '北京市',
-        label: '北京市',
-        children: [
-          { value: '朝阳区', label: '朝阳区' },
-          { value: '海淀区', label: '海淀区' },
-          { value: '丰台区', label: '丰台区' }
-        ]
-      },
-      {
-        value: '上海市',
-        label: '上海市',
-        children: [
-          { value: '浦东新区', label: '浦东新区' },
-          { value: '黄浦区', label: '黄浦区' },
-          { value: '静安区', label: '静安区' }
-        ]
-      }
-    ]
-    
-    const userTorrents = ref([
-      {
-        id: 1,
-        title: '[4K蓝光原盘] 阿凡达:水之道',
-        category: 'movie',
-        size: '85.6 GB',
-        seeders: 45,
-        leechers: 12,
-        downloads: 234,
-        uploadTime: '2025-05-15T10:00:00'
-      },
-      {
-        id: 2,
-        title: '[FLAC] 古典音乐合集',
-        category: 'music',
-        size: '2.3 GB',
-        seeders: 23,
-        leechers: 5,
-        downloads: 89,
-        uploadTime: '2025-04-20T15:30:00'
-      }
-    ])
-    
-    const activities = ref([
-      {
-        id: 1,
-        type: 'upload',
-        title: '上传种子',
-        description: '上传了《阿凡达:水之道》4K蓝光原盘',
-        time: '2025-06-03T10:30:00'
-      },
-      {
-        id: 2,
-        type: 'download',
-        title: '下载种子',
-        description: '下载了《星际穿越》IMAX版本',
-        time: '2025-06-02T14:20:00'
-      },
-      {
-        id: 3,
-        type: 'post',
-        title: '发布主题',
-        description: '在电影讨论区发布了新主题',
-        time: '2025-06-01T16:45:00'
-      },
-      {
-        id: 4,
-        type: 'points',
-        title: '积分变动',
-        description: '做种奖励获得 +50 积分',
-        time: '2025-05-31T09:15:00'
-      }
-    ])
-    
-    const loginHistory = ref([
-      {
-        time: '2025-06-03T14:30:00',
-        ip: '192.168.1.100',
-        device: 'Windows 11 / Chrome 120',
-        success: true
-      },
-      {
-        time: '2025-06-02T09:15:00',
-        ip: '192.168.1.100',
-        device: 'Windows 11 / Chrome 120',
-        success: true
-      },
-      {
-        time: '2025-06-01T22:30:00',
-        ip: '192.168.1.100',
-        device: 'Android / Chrome Mobile',
-        success: true
-      }
-    ])
-    
-    const filteredActivities = computed(() => {
-      if (!activityFilter.value) return activities.value
-      return activities.value.filter(activity => activity.type === activityFilter.value)
-    })
-    
-    onMounted(() => {
-      loadUserProfile()
-    })
-    
-    const loadUserProfile = () => {
-      // 加载用户资料到编辑表单
-      Object.assign(editProfile, {
-        username: userProfile.value.username,
-        email: userProfile.value.email,
-        realName: userProfile.value.realName,
-        location: userProfile.value.location,
-        signature: userProfile.value.signature,
-        website: userProfile.value.website,
-        interests: [...userProfile.value.interests],
-        emailPublic: userProfile.value.emailPublic,
-        statsPublic: userProfile.value.statsPublic,
-        activityPublic: userProfile.value.activityPublic
-      })
-    }
-    
-    const formatDate = (dateString) => {
-      const date = new Date(dateString)
-      return date.toLocaleDateString('zh-CN')
-    }
-    
-    const formatTime = (timeString) => {
-      const date = new Date(timeString)
-      const now = new Date()
-      const diff = now - date
-      const hours = Math.floor(diff / (1000 * 60 * 60))
-      
-      if (hours < 1) return '刚刚'
-      if (hours < 24) return `${hours}小时前`
-      const days = Math.floor(hours / 24)
-      if (days < 7) return `${days}天前`
-      
-      return date.toLocaleDateString('zh-CN')
-    }
-    
-    const formatDateTime = (dateString) => {
-      const date = new Date(dateString)
-      return date.toLocaleString('zh-CN')
-    }
-    
-    const getUserTitleType = (level) => {
-      if (level >= 8) return 'danger'  // 管理员
-      if (level >= 6) return 'warning' // 资深会员
-      if (level >= 4) return 'success' // 正式会员
-      if (level >= 2) return 'info'    // 初级会员
-      return 'default' // 新手
-    }
-    
-    const getRatioClass = (ratio) => {
-      const r = parseFloat(ratio)
-      if (r >= 2) return 'excellent'
-      if (r >= 1) return 'good'
-      return 'warning'
-    }
-    
-    const getCategoryType = (category) => {
-      const types = {
-        'movie': 'primary',
-        'tv': 'info',
-        'music': 'success',
-        'software': 'warning',
-        'game': 'danger'
-      }
-      return types[category] || 'default'
-    }
-    
-    const getCategoryName = (category) => {
-      const names = {
-        'movie': '电影',
-        'tv': '电视剧',
-        'music': '音乐',
-        'software': '软件',
-        'game': '游戏'
-      }
-      return names[category] || category
-    }
-    
-    const getActivityType = (type) => {
-      const types = {
-        'upload': 'success',
-        'download': 'primary',
-        'post': 'warning',
-        'points': 'info'
-      }
-      return types[type] || 'primary'
-    }
-    
-    const getActivityIcon = (type) => {
-      const icons = {
-        'upload': 'Upload',
-        'download': 'Download',
-        'post': 'ChatDotRound',
-        'points': 'Coin'
-      }
-      return icons[type] || 'Star'
-    }
-    
-    const showInterestInput = () => {
-      interestInputVisible.value = true
-      nextTick(() => {
-        interestInputRef.value?.focus()
-      })
-    }
-    
-    const addInterest = () => {
-      const interest = interestInputValue.value.trim()
-      if (interest && !editProfile.interests.includes(interest)) {
-        editProfile.interests.push(interest)
-      }
-      interestInputVisible.value = false
-      interestInputValue.value = ''
-    }
-    
-    const removeInterest = (interest) => {
-      const index = editProfile.interests.indexOf(interest)
-      if (index > -1) {
-        editProfile.interests.splice(index, 1)
-      }
-    }
-    
-    const saveProfile = async () => {
-      try {
-        await profileFormRef.value?.validate()
-        
-        saving.value = true
-        
-        // 模拟保存过程
-        await new Promise(resolve => setTimeout(resolve, 1500))
-        
-        // 更新用户资料
-        Object.assign(userProfile.value, editProfile)
-        
-        ElMessage.success('个人资料保存成功')
-        
-      } catch (error) {
-        console.error('表单验证失败:', error)
-      } finally {
-        saving.value = false
-      }
-    }
-    
-    const resetProfile = () => {
-      loadUserProfile()
-      ElMessage.info('已重置为原始数据')
-    }
-    
-    const changePassword = async () => {
-      try {
-        await passwordFormRef.value?.validate()
-        
-        changingPassword.value = true
-        
-        // 模拟密码修改过程
-        await new Promise(resolve => setTimeout(resolve, 1500))
-        
-        // 重置表单
-        passwordFormRef.value?.resetFields()
-        Object.assign(passwordForm, {
-          currentPassword: '',
-          newPassword: '',
-          confirmPassword: ''
-        })
-        
-        ElMessage.success('密码修改成功')
-        
-      } catch (error) {
-        console.error('表单验证失败:', error)
-      } finally {
-        changingPassword.value = false
-      }
-    }
-    
-    const handleAvatarChange = (file) => {
-      const isImage = file.raw.type.startsWith('image/')
-      const isLt2M = file.raw.size / 1024 / 1024 < 2
-      
-      if (!isImage) {
-        ElMessage.error('只能上传图片文件!')
-        return false
-      }
-      if (!isLt2M) {
-        ElMessage.error('图片大小不能超过 2MB!')
-        return false
-      }
-      
-      return true
-    }
-    
-    const uploadAvatar = async () => {
-      const files = avatarUploadRef.value?.uploadFiles
-      if (!files || files.length === 0) {
-        ElMessage.warning('请选择头像文件')
-        return
-      }
-      
-      uploadingAvatar.value = true
-      try {
-        // 模拟上传过程
-        await new Promise(resolve => setTimeout(resolve, 2000))
-        
-        // 更新头像URL
-        userProfile.value.avatar = URL.createObjectURL(files[0].raw)
-        
-        ElMessage.success('头像上传成功')
-        showAvatarDialog.value = false
-        avatarUploadRef.value?.clearFiles()
-        
-      } catch (error) {
-        ElMessage.error('头像上传失败')
-      } finally {
-        uploadingAvatar.value = false
-      }
-    }
-    
-    return {
-      activeTab,
-      showAvatarDialog,
-      saving,
-      changingPassword,
-      uploadingAvatar,
-      interestInputVisible,
-      interestInputValue,
-      activityFilter,
-      torrentsPage,
-      userProfile,
-      editProfile,
-      passwordForm,
-      profileRules,
-      passwordRules,
-      locationOptions,
-      userTorrents,
-      filteredActivities,
-      loginHistory,
-      profileFormRef,
-      passwordFormRef,
-      avatarUploadRef,
-      interestInputRef,
-      formatDate,
-      formatTime,
-      formatDateTime,
-      getUserTitleType,
-      getRatioClass,
-      getCategoryType,
-      getCategoryName,
-      getActivityType,
-      getActivityIcon,
-      showInterestInput,
-      addInterest,
-      removeInterest,
-      saveProfile,
-      resetProfile,
-      changePassword,
-      handleAvatarChange,
-      uploadAvatar,
-      Calendar,
-      Clock,
-      Upload,
-      Download,
-      TrendCharts,
-      Star,
-      QuestionFilled,
-      Plus,
-      ChatDotRound,
-      Flag,
-      Coin
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.profile-page {
-  max-width: 1200px;
-  margin: 0 auto;
-  padding: 24px;
-  background: #f5f5f5;
-  min-height: 100vh;
-}
-
-.profile-header {
-  background: #fff;
-  border-radius: 12px;
-  padding: 32px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  display: grid;
-  grid-template-columns: 1fr 1fr;
-  gap: 32px;
-  
-  .user-avatar-section {
-    display: flex;
-    gap: 24px;
-    
-    .avatar-container {
-      text-align: center;
-      
-      .change-avatar-btn {
-        margin-top: 12px;
-      }
-    }
-    
-    .user-basic-info {
-      flex: 1;
-      
-      .username {
-        font-size: 28px;
-        font-weight: 600;
-        color: #2c3e50;
-        margin: 0 0 12px 0;
-      }
-      
-      .user-title {
-        margin-bottom: 16px;
-      }
-      
-      .join-info, .last-login {
-        display: flex;
-        align-items: center;
-        gap: 8px;
-        font-size: 14px;
-        color: #7f8c8d;
-        margin-bottom: 8px;
-      }
-    }
-  }
-  
-  .user-stats-overview {
-    .stats-grid {
-      display: grid;
-      grid-template-columns: repeat(2, 1fr);
-      gap: 16px;
-      
-      .stat-card {
-        background: #f8f9fa;
-        border-radius: 8px;
-        padding: 20px;
-        display: flex;
-        align-items: center;
-        gap: 16px;
-        
-        .stat-icon {
-          width: 48px;
-          height: 48px;
-          border-radius: 50%;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          
-          &.upload { background: rgba(103, 194, 58, 0.1); color: #67c23a; }
-          &.download { background: rgba(64, 158, 255, 0.1); color: #409eff; }
-          &.ratio {
-            &.excellent { background: rgba(103, 194, 58, 0.1); color: #67c23a; }
-            &.good { background: rgba(230, 162, 60, 0.1); color: #e6a23c; }
-            &.warning { background: rgba(245, 108, 108, 0.1); color: #f56c6c; }
-          }
-          &.points { background: rgba(245, 108, 108, 0.1); color: #f56c6c; }
-        }
-        
-        .stat-info {
-          h3 {
-            font-size: 20px;
-            font-weight: 600;
-            color: #2c3e50;
-            margin: 0 0 4px 0;
-          }
-          
-          p {
-            font-size: 14px;
-            color: #7f8c8d;
-            margin: 0;
-          }
-        }
-      }
-    }
-  }
-}
-
-.profile-content {
-  background: #fff;
-  border-radius: 12px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  :deep(.el-tabs__content) {
-    padding: 24px;
-  }
-}
-
-.info-section {
-  .form-section {
-    margin-bottom: 32px;
-    
-    h3 {
-      font-size: 18px;
-      font-weight: 600;
-      color: #2c3e50;
-      margin: 0 0 20px 0;
-      padding-bottom: 8px;
-      border-bottom: 2px solid #f0f0f0;
-    }
-  }
-  
-  .interests-input {
-    display: flex;
-    flex-wrap: wrap;
-    gap: 8px;
-    align-items: center;
-    
-    .interest-tag {
-      margin: 0;
-    }
-  }
-  
-  .setting-tip {
-    margin-left: 12px;
-    font-size: 12px;
-    color: #909399;
-  }
-  
-  .form-actions {
-    text-align: center;
-    margin-top: 32px;
-    
-    .el-button {
-      margin: 0 8px;
-      min-width: 100px;
-    }
-  }
-}
-
-.stats-section {
-  .stats-overview {
-    margin-bottom: 32px;
-    
-    .overview-grid {
-      display: grid;
-      grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
-      gap: 20px;
-      
-      .overview-card {
-        background: #f8f9fa;
-        border-radius: 8px;
-        padding: 24px;
-        
-        h3 {
-          font-size: 16px;
-          font-weight: 600;
-          color: #2c3e50;
-          margin: 0 0 16px 0;
-        }
-        
-        .stat-details {
-          .detail-item {
-            display: flex;
-            justify-content: space-between;
-            align-items: center;
-            margin-bottom: 12px;
-            
-            .label {
-              font-size: 14px;
-              color: #7f8c8d;
-            }
-            
-            .value {
-              font-size: 14px;
-              font-weight: 600;
-              color: #2c3e50;
-            }
-          }
-        }
-      }
-    }
-  }
-  
-  .charts-section {
-    .chart-card {
-      background: #f8f9fa;
-      border-radius: 8px;
-      padding: 24px;
-      
-      h3 {
-        font-size: 16px;
-        font-weight: 600;
-        color: #2c3e50;
-        margin: 0 0 20px 0;
-      }
-      
-      .chart-placeholder {
-        text-align: center;
-        padding: 60px 0;
-        color: #909399;
-        
-        p {
-          margin: 12px 0 0 0;
-        }
-      }
-    }
-  }
-}
-
-.torrents-section {
-  .section-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 20px;
-    
-    h3 {
-      font-size: 18px;
-      font-weight: 600;
-      color: #2c3e50;
-      margin: 0;
-    }
-  }
-  
-  .torrent-info {
-    display: flex;
-    align-items: center;
-    gap: 12px;
-    
-    .torrent-title {
-      font-weight: 500;
-    }
-  }
-  
-  .pagination-wrapper {
-    margin-top: 16px;
-    text-align: center;
-  }
-}
-
-.activity-section {
-  .activity-filters {
-    margin-bottom: 24px;
-    
-    .el-select {
-      width: 150px;
-    }
-  }
-  
-  .activity-timeline {
-    .activity-content {
-      .activity-header {
-        display: flex;
-        align-items: center;
-        gap: 8px;
-        margin-bottom: 8px;
-        
-        .activity-title {
-          font-weight: 600;
-          color: #2c3e50;
-        }
-      }
-      
-      .activity-description {
-        font-size: 14px;
-        color: #7f8c8d;
-        line-height: 1.5;
-      }
-    }
-  }
-}
-
-.security-section {
-  .security-card {
-    background: #f8f9fa;
-    border-radius: 8px;
-    padding: 24px;
-    margin-bottom: 24px;
-    
-    h3 {
-      font-size: 18px;
-      font-weight: 600;
-      color: #2c3e50;
-      margin: 0 0 20px 0;
-    }
-  }
-}
-
-.avatar-upload {
-  text-align: center;
-  
-  .avatar-uploader {
-    margin-bottom: 16px;
-  }
-  
-  .upload-tips {
-    font-size: 12px;
-    color: #909399;
-    
-    p {
-      margin: 4px 0;
-    }
-  }
-}
-
-@media (max-width: 768px) {
-  .profile-page {
-    padding: 16px;
-  }
-  
-  .profile-header {
-    grid-template-columns: 1fr;
-    gap: 24px;
-    
-    .user-avatar-section {
-      flex-direction: column;
-      text-align: center;
-    }
-    
-    .user-stats-overview .stats-grid {
-      grid-template-columns: 1fr;
-    }
-  }
-  
-  .stats-overview .overview-grid {
-    grid-template-columns: 1fr;
-  }
-  
-  .torrents-section .section-header {
-    flex-direction: column;
-    gap: 16px;
-    align-items: flex-start;
-  }
-}
+<template>

+  <div class="profile-page">

+    <div class="page-container">

+      <!-- 个人信息卡片 -->

+      <div class="profile-header">

+        <div class="user-avatar-section">

+          <div class="avatar-container">

+            <el-avatar :size="120" :src="userProfile.avatar">

+              {{ userProfile.username.charAt(0).toUpperCase() }}

+            </el-avatar>

+            <el-button 

+              type="primary" 

+              size="small" 

+              class="change-avatar-btn"

+              @click="showAvatarDialog = true"

+            >

+              更换头像

+            </el-button>

+          </div>

+          

+          <div class="user-basic-info">

+            <h1 class="username">{{ userProfile.username }}</h1>

+            <div class="user-title">

+              <el-tag :type="getUserTitleType(userProfile.userLevel)" size="large">

+                {{ userProfile.userTitle }}

+              </el-tag>

+            </div>

+            <div class="join-info">

+              <el-icon><Calendar /></el-icon>

+              <span>加入时间:{{ formatDate(userProfile.joinDate) }}</span>

+            </div>

+            <div class="last-login">

+              <el-icon><Clock /></el-icon>

+              <span>最后登录:{{ formatTime(userProfile.lastLogin) }}</span>

+            </div>

+          </div>

+        </div>

+        

+        <div class="user-stats-overview">

+          <div class="stats-grid">

+            <div class="stat-card">

+              <div class="stat-icon upload">

+                <el-icon size="32"><Upload /></el-icon>

+              </div>

+              <div class="stat-info">

+                <h3>{{ userProfile.stats.uploaded }}</h3>

+                <p>上传量</p>

+              </div>

+            </div>

+            

+            <div class="stat-card">

+              <div class="stat-icon download">

+                <el-icon size="32"><Download /></el-icon>

+              </div>

+              <div class="stat-info">

+                <h3>{{ userProfile.stats.downloaded }}</h3>

+                <p>下载量</p>

+              </div>

+            </div>

+            

+            <div class="stat-card">

+              <div class="stat-icon ratio" :class="getRatioClass(userProfile.stats.ratio)">

+                <el-icon size="32"><TrendCharts /></el-icon>

+              </div>

+              <div class="stat-info">

+                <h3>{{ userProfile.stats.ratio }}</h3>

+                <p>分享率</p>

+              </div>

+            </div>

+            

+            <div class="stat-card">

+              <div class="stat-icon points">

+                <el-icon size="32"><Star /></el-icon>

+              </div>

+              <div class="stat-info">

+                <h3>{{ userProfile.stats.points }}</h3>

+                <p>积分</p>

+              </div>

+            </div>

+          </div>

+        </div>

+      </div>

+

+      <!-- 详细信息选项卡 -->

+      <div class="profile-content">

+        <el-tabs v-model="activeTab" type="border-card">

+          <!-- 个人信息 -->

+          <el-tab-pane label="个人信息" name="info">

+            <div class="info-section">

+              <el-form

+                ref="profileFormRef"

+                :model="editProfile"

+                :rules="profileRules"

+                label-width="120px"

+                size="large"

+              >

+                <div class="form-section">

+                  <h3>基本信息</h3>

+                  <el-form-item label="用户名">

+                    <el-input v-model="editProfile.username" disabled>

+                      <template #suffix>

+                        <el-tooltip content="用户名不可修改">

+                          <el-icon><QuestionFilled /></el-icon>

+                        </el-tooltip>

+                      </template>

+                    </el-input>

+                  </el-form-item>

+                  

+                  <el-form-item label="邮箱地址" prop="email">

+                    <el-input v-model="editProfile.email" type="email" />

+                  </el-form-item>

+                  

+                  <el-form-item label="真实姓名" prop="realName">

+                    <el-input v-model="editProfile.realName" placeholder="可选填写" />

+                  </el-form-item>

+                  

+                  <el-form-item label="所在地区">

+                    <el-cascader

+                      v-model="editProfile.location"

+                      :options="locationOptions"

+                      placeholder="请选择地区"

+                      clearable

+                    />

+                  </el-form-item>

+                </div>

+                

+                <div class="form-section">

+                  <h3>个人介绍</h3>

+                  <el-form-item label="个人签名">

+                    <el-input

+                      v-model="editProfile.signature"

+                      type="textarea"

+                      :rows="3"

+                      maxlength="200"

+                      show-word-limit

+                      placeholder="介绍一下自己吧..."

+                    />

+                  </el-form-item>

+                  

+                  <el-form-item label="个人网站">

+                    <el-input v-model="editProfile.website" placeholder="https://" />

+                  </el-form-item>

+                  

+                  <el-form-item label="兴趣爱好">

+                    <div class="interests-input">

+                      <el-tag

+                        v-for="interest in editProfile.interests"

+                        :key="interest"

+                        closable

+                        @close="removeInterest(interest)"

+                        class="interest-tag"

+                      >

+                        {{ interest }}

+                      </el-tag>

+                      <el-input

+                        v-if="interestInputVisible"

+                        ref="interestInputRef"

+                        v-model="interestInputValue"

+                        size="small"

+                        @keyup.enter="addInterest"

+                        @blur="addInterest"

+                        style="width: 120px;"

+                      />

+                      <el-button

+                        v-else

+                        size="small"

+                        @click="showInterestInput"

+                      >

+                        + 添加兴趣

+                      </el-button>

+                    </div>

+                  </el-form-item>

+                </div>

+                

+                <div class="form-section">

+                  <h3>隐私设置</h3>

+                  <el-form-item label="邮箱公开">

+                    <el-switch v-model="editProfile.emailPublic" />

+                    <span class="setting-tip">是否在个人资料中显示邮箱</span>

+                  </el-form-item>

+                  

+                  <el-form-item label="统计公开">

+                    <el-switch v-model="editProfile.statsPublic" />

+                    <span class="setting-tip">是否公开上传下载统计</span>

+                  </el-form-item>

+                  

+                  <el-form-item label="活动记录">

+                    <el-switch v-model="editProfile.activityPublic" />

+                    <span class="setting-tip">是否公开活动记录</span>

+                  </el-form-item>

+                </div>

+                

+                <div class="form-actions">

+                  <el-button @click="resetProfile">重置</el-button>

+                  <el-button type="primary" @click="saveProfile" :loading="saving">

+                    保存修改

+                  </el-button>

+                </div>

+              </el-form>

+            </div>

+          </el-tab-pane>

+          

+          <!-- 数据统计 -->

+          <el-tab-pane label="数据统计" name="stats">

+            <div class="stats-section">

+              <div class="stats-overview">

+                <div class="overview-grid">

+                  <div class="overview-card">

+                    <h3>上传统计</h3>

+                    <div class="stat-details">

+                      <div class="detail-item">

+                        <span class="label">总上传量:</span>

+                        <span class="value">{{ userProfile.detailedStats.totalUploaded }}</span>

+                      </div>

+                      <div class="detail-item">

+                        <span class="label">上传种子:</span>

+                        <span class="value">{{ userProfile.detailedStats.uploadedTorrents }} 个</span>

+                      </div>

+                      <div class="detail-item">

+                        <span class="label">平均大小:</span>

+                        <span class="value">{{ userProfile.detailedStats.avgUploadSize }}</span>

+                      </div>

+                    </div>

+                  </div>

+                  

+                  <div class="overview-card">

+                    <h3>下载统计</h3>

+                    <div class="stat-details">

+                      <div class="detail-item">

+                        <span class="label">总下载量:</span>

+                        <span class="value">{{ userProfile.detailedStats.totalDownloaded }}</span>

+                      </div>

+                      <div class="detail-item">

+                        <span class="label">下载种子:</span>

+                        <span class="value">{{ userProfile.detailedStats.downloadedTorrents }} 个</span>

+                      </div>

+                      <div class="detail-item">

+                        <span class="label">完成种子:</span>

+                        <span class="value">{{ userProfile.detailedStats.completedTorrents }} 个</span>

+                      </div>

+                    </div>

+                  </div>

+                  

+                  <div class="overview-card">

+                    <h3>做种统计</h3>

+                    <div class="stat-details">

+                      <div class="detail-item">

+                        <span class="label">正在做种:</span>

+                        <span class="value">{{ userProfile.detailedStats.seeding }} 个</span>

+                      </div>

+                      <div class="detail-item">

+                        <span class="label">做种时间:</span>

+                        <span class="value">{{ userProfile.detailedStats.seedingTime }}</span>

+                      </div>

+                      <div class="detail-item">

+                        <span class="label">做种排名:</span>

+                        <span class="value">第 {{ userProfile.detailedStats.seedingRank }} 名</span>

+                      </div>

+                    </div>

+                  </div>

+                  

+                  <div class="overview-card">

+                    <h3>积分记录</h3>

+                    <div class="stat-details">

+                      <div class="detail-item">

+                        <span class="label">当前积分:</span>

+                        <span class="value">{{ userProfile.stats.points }}</span>

+                      </div>

+                      <div class="detail-item">

+                        <span class="label">累计获得:</span>

+                        <span class="value">{{ userProfile.detailedStats.totalEarnedPoints }}</span>

+                      </div>

+                      <div class="detail-item">

+                        <span class="label">累计消费:</span>

+                        <span class="value">{{ userProfile.detailedStats.totalSpentPoints }}</span>

+                      </div>

+                    </div>

+                  </div>

+                </div>

+              </div>

+              

+              <!-- 数据图表 -->

+              <div class="charts-section">

+                <div class="chart-card">

+                  <h3>上传下载趋势</h3>

+                  <div class="chart-placeholder">

+                    <el-icon size="48" color="#e4e7ed"><TrendCharts /></el-icon>

+                    <p>图表功能开发中...</p>

+                  </div>

+                </div>

+              </div>

+            </div>

+          </el-tab-pane>

+          

+          <!-- 我的种子 -->

+          <el-tab-pane label="我的种子" name="torrents">

+            <div class="torrents-section">

+              <div class="section-header">

+                <h3>我上传的种子</h3>

+                <el-button type="primary" :icon="Upload" @click="$router.push('/upload')">

+                  上传新种子

+                </el-button>

+              </div>

+              

+              <el-table :data="userTorrents" stripe>

+                <el-table-column label="种子名称" min-width="300">

+                  <template #default="{ row }">

+                    <div class="torrent-info">

+                      <el-tag :type="getCategoryType(row.category)" size="small">

+                        {{ getCategoryName(row.category) }}

+                      </el-tag>

+                      <span class="torrent-title">{{ row.title }}</span>

+                    </div>

+                  </template>

+                </el-table-column>

+                

+                <el-table-column label="大小" prop="size" width="100" />

+                <el-table-column label="做种" prop="seeders" width="80" align="center" />

+                <el-table-column label="下载" prop="leechers" width="80" align="center" />

+                <el-table-column label="完成" prop="downloads" width="80" align="center" />

+                <el-table-column label="上传时间" width="120">

+                  <template #default="{ row }">

+                    {{ formatDate(row.uploadTime) }}

+                  </template>

+                </el-table-column>

+                

+                <el-table-column label="操作" width="120" align="center">

+                  <template #default="{ row }">

+                    <el-button 

+                      type="primary" 

+                      size="small" 

+                      @click="$router.push(`/torrent/${row.id}`)"

+                    >

+                      查看

+                    </el-button>

+                  </template>

+                </el-table-column>

+              </el-table>

+              

+              <div class="pagination-wrapper">

+                <el-pagination

+                  v-model:current-page="torrentsPage"

+                  :page-size="10"

+                  :total="userTorrents.length"

+                  layout="prev, pager, next"

+                  small

+                />

+              </div>

+            </div>

+          </el-tab-pane>

+          

+          <!-- 活动记录 -->

+          <el-tab-pane label="活动记录" name="activity">

+            <div class="activity-section">

+              <div class="activity-filters">

+                <el-select v-model="activityFilter" placeholder="活动类型">

+                  <el-option label="全部活动" value="" />

+                  <el-option label="上传种子" value="upload" />

+                  <el-option label="下载种子" value="download" />

+                  <el-option label="论坛发帖" value="post" />

+                  <el-option label="积分变动" value="points" />

+                </el-select>

+              </div>

+              

+              <div class="activity-timeline">

+                <el-timeline>

+                  <el-timeline-item

+                    v-for="activity in filteredActivities"

+                    :key="activity.id"

+                    :timestamp="formatTime(activity.time)"

+                    :type="getActivityType(activity.type)"

+                  >

+                    <div class="activity-content">

+                      <div class="activity-header">

+                        <el-icon>

+                          <component :is="getActivityIcon(activity.type)" />

+                        </el-icon>

+                        <span class="activity-title">{{ activity.title }}</span>

+                      </div>

+                      <div class="activity-description">{{ activity.description }}</div>

+                    </div>

+                  </el-timeline-item>

+                </el-timeline>

+              </div>

+            </div>

+          </el-tab-pane>

+          

+          <!-- 安全设置 -->

+          <el-tab-pane label="安全设置" name="security">

+            <div class="security-section">

+              <div class="security-card">

+                <h3>修改密码</h3>

+                <el-form

+                  ref="passwordFormRef"

+                  :model="passwordForm"

+                  :rules="passwordRules"

+                  label-width="120px"

+                >

+                  <el-form-item label="当前密码" prop="currentPassword">

+                    <el-input

+                      v-model="passwordForm.currentPassword"

+                      type="password"

+                      show-password

+                      placeholder="请输入当前密码"

+                    />

+                  </el-form-item>

+                  

+                  <el-form-item label="新密码" prop="newPassword">

+                    <el-input

+                      v-model="passwordForm.newPassword"

+                      type="password"

+                      show-password

+                      placeholder="请输入新密码"

+                    />

+                  </el-form-item>

+                  

+                  <el-form-item label="确认密码" prop="confirmPassword">

+                    <el-input

+                      v-model="passwordForm.confirmPassword"

+                      type="password"

+                      show-password

+                      placeholder="请再次输入新密码"

+                    />

+                  </el-form-item>

+                  

+                  <el-form-item>

+                    <el-button type="primary" @click="changePassword" :loading="changingPassword">

+                      修改密码

+                    </el-button>

+                  </el-form-item>

+                </el-form>

+              </div>

+              

+              <div class="security-card">

+                <h3>登录记录</h3>

+                <el-table :data="loginHistory" stripe>

+                  <el-table-column label="登录时间" width="180">

+                    <template #default="{ row }">

+                      {{ formatDateTime(row.time) }}

+                    </template>

+                  </el-table-column>

+                  <el-table-column label="IP地址" prop="ip" width="150" />

+                  <el-table-column label="设备信息" prop="device" />

+                  <el-table-column label="登录结果" width="100">

+                    <template #default="{ row }">

+                      <el-tag :type="row.success ? 'success' : 'danger'" size="small">

+                        {{ row.success ? '成功' : '失败' }}

+                      </el-tag>

+                    </template>

+                  </el-table-column>

+                </el-table>

+              </div>

+            </div>

+          </el-tab-pane>

+        </el-tabs>

+      </div>

+    </div>

+

+    <!-- 更换头像对话框 -->

+    <el-dialog v-model="showAvatarDialog" title="更换头像" width="400px">

+      <div class="avatar-upload">

+        <el-upload

+          ref="avatarUploadRef"

+          :auto-upload="false"

+          :limit="1"

+          accept="image/*"

+          :on-change="handleAvatarChange"

+          list-type="picture-card"

+          class="avatar-uploader"

+        >

+          <el-icon><Plus /></el-icon>

+        </el-upload>

+        <div class="upload-tips">

+          <p>支持 JPG、PNG 格式</p>

+          <p>建议尺寸 200x200 像素</p>

+          <p>文件大小不超过 2MB</p>

+        </div>

+      </div>

+      

+      <template #footer>

+        <el-button @click="showAvatarDialog = false">取消</el-button>

+        <el-button type="primary" @click="uploadAvatar" :loading="uploadingAvatar">

+          上传头像

+        </el-button>

+      </template>

+    </el-dialog>

+  </div>

+</template>

+

+<script>

+import { ref, reactive, computed, onMounted, nextTick } from 'vue'

+import { useRouter } from 'vue-router'

+import { ElMessage } from 'element-plus'

+import {

+  Calendar,

+  Clock,

+  Upload,

+  Download,

+  TrendCharts,

+  Star,

+  QuestionFilled,

+  Plus,

+  ChatDotRound,

+  Flag,

+  Coin

+} from '@element-plus/icons-vue'

+

+export default {

+  name: 'ProfileView',

+  setup() {

+    const router = useRouter()

+    const profileFormRef = ref(null)

+    const passwordFormRef = ref(null)

+    const avatarUploadRef = ref(null)

+    const interestInputRef = ref(null)

+    

+    const activeTab = ref('info')

+    const showAvatarDialog = ref(false)

+    const saving = ref(false)

+    const changingPassword = ref(false)

+    const uploadingAvatar = ref(false)

+    const interestInputVisible = ref(false)

+    const interestInputValue = ref('')

+    const activityFilter = ref('')

+    const torrentsPage = ref(1)

+    

+    const userProfile = ref({

+      username: 'MovieExpert',

+      email: 'movieexpert@example.com',

+      realName: '',

+      avatar: '',

+      userLevel: 5,

+      userTitle: '资深会员',

+      joinDate: '2023-01-15T10:00:00',

+      lastLogin: '2025-06-03T14:30:00',

+      location: ['北京市', '朝阳区'],

+      signature: '热爱电影,分享快乐!',

+      website: 'https://movieblog.com',

+      interests: ['电影', '音乐', '科技', '摄影'],

+      emailPublic: false,

+      statsPublic: true,

+      activityPublic: true,

+      stats: {

+        uploaded: '256.8 GB',

+        downloaded: '89.6 GB',

+        ratio: '2.87',

+        points: '15,680'

+      },

+      detailedStats: {

+        totalUploaded: '256.8 GB',

+        uploadedTorrents: 45,

+        avgUploadSize: '5.7 GB',

+        totalDownloaded: '89.6 GB',

+        downloadedTorrents: 123,

+        completedTorrents: 118,

+        seeding: 32,

+        seedingTime: '1,245 小时',

+        seedingRank: 86,

+        totalEarnedPoints: '28,940',

+        totalSpentPoints: '13,260'

+      }

+    })

+    

+    const editProfile = reactive({

+      username: '',

+      email: '',

+      realName: '',

+      location: [],

+      signature: '',

+      website: '',

+      interests: [],

+      emailPublic: false,

+      statsPublic: true,

+      activityPublic: true

+    })

+    

+    const passwordForm = reactive({

+      currentPassword: '',

+      newPassword: '',

+      confirmPassword: ''

+    })

+    

+    const profileRules = {

+      email: [

+        { required: true, message: '请输入邮箱地址', trigger: 'blur' },

+        { type: 'email', message: '请输入正确的邮箱格式', trigger: 'blur' }

+      ]

+    }

+    

+    const passwordRules = {

+      currentPassword: [

+        { required: true, message: '请输入当前密码', trigger: 'blur' }

+      ],

+      newPassword: [

+        { required: true, message: '请输入新密码', trigger: 'blur' },

+        { min: 6, message: '密码长度至少6个字符', trigger: 'blur' }

+      ],

+      confirmPassword: [

+        { required: true, message: '请确认新密码', trigger: 'blur' },

+        {

+          validator: (rule, value, callback) => {

+            if (value !== passwordForm.newPassword) {

+              callback(new Error('两次输入的密码不一致'))

+            } else {

+              callback()

+            }

+          },

+          trigger: 'blur'

+        }

+      ]

+    }

+    

+    const locationOptions = [

+      {

+        value: '北京市',

+        label: '北京市',

+        children: [

+          { value: '朝阳区', label: '朝阳区' },

+          { value: '海淀区', label: '海淀区' },

+          { value: '丰台区', label: '丰台区' }

+        ]

+      },

+      {

+        value: '上海市',

+        label: '上海市',

+        children: [

+          { value: '浦东新区', label: '浦东新区' },

+          { value: '黄浦区', label: '黄浦区' },

+          { value: '静安区', label: '静安区' }

+        ]

+      }

+    ]

+    

+    const userTorrents = ref([

+      {

+        id: 1,

+        title: '[4K蓝光原盘] 阿凡达:水之道',

+        category: 'movie',

+        size: '85.6 GB',

+        seeders: 45,

+        leechers: 12,

+        downloads: 234,

+        uploadTime: '2025-05-15T10:00:00'

+      },

+      {

+        id: 2,

+        title: '[FLAC] 古典音乐合集',

+        category: 'music',

+        size: '2.3 GB',

+        seeders: 23,

+        leechers: 5,

+        downloads: 89,

+        uploadTime: '2025-04-20T15:30:00'

+      }

+    ])

+    

+    const activities = ref([

+      {

+        id: 1,

+        type: 'upload',

+        title: '上传种子',

+        description: '上传了《阿凡达:水之道》4K蓝光原盘',

+        time: '2025-06-03T10:30:00'

+      },

+      {

+        id: 2,

+        type: 'download',

+        title: '下载种子',

+        description: '下载了《星际穿越》IMAX版本',

+        time: '2025-06-02T14:20:00'

+      },

+      {

+        id: 3,

+        type: 'post',

+        title: '发布主题',

+        description: '在电影讨论区发布了新主题',

+        time: '2025-06-01T16:45:00'

+      },

+      {

+        id: 4,

+        type: 'points',

+        title: '积分变动',

+        description: '做种奖励获得 +50 积分',

+        time: '2025-05-31T09:15:00'

+      }

+    ])

+    

+    const loginHistory = ref([

+      {

+        time: '2025-06-03T14:30:00',

+        ip: '192.168.1.100',

+        device: 'Windows 11 / Chrome 120',

+        success: true

+      },

+      {

+        time: '2025-06-02T09:15:00',

+        ip: '192.168.1.100',

+        device: 'Windows 11 / Chrome 120',

+        success: true

+      },

+      {

+        time: '2025-06-01T22:30:00',

+        ip: '192.168.1.100',

+        device: 'Android / Chrome Mobile',

+        success: true

+      }

+    ])

+    

+    const filteredActivities = computed(() => {

+      if (!activityFilter.value) return activities.value

+      return activities.value.filter(activity => activity.type === activityFilter.value)

+    })

+    

+    onMounted(() => {

+      loadUserProfile()

+    })

+    

+    const loadUserProfile = () => {

+      // 加载用户资料到编辑表单

+      Object.assign(editProfile, {

+        username: userProfile.value.username,

+        email: userProfile.value.email,

+        realName: userProfile.value.realName,

+        location: userProfile.value.location,

+        signature: userProfile.value.signature,

+        website: userProfile.value.website,

+        interests: [...userProfile.value.interests],

+        emailPublic: userProfile.value.emailPublic,

+        statsPublic: userProfile.value.statsPublic,

+        activityPublic: userProfile.value.activityPublic

+      })

+    }

+    

+    const formatDate = (dateString) => {

+      const date = new Date(dateString)

+      return date.toLocaleDateString('zh-CN')

+    }

+    

+    const formatTime = (timeString) => {

+      const date = new Date(timeString)

+      const now = new Date()

+      const diff = now - date

+      const hours = Math.floor(diff / (1000 * 60 * 60))

+      

+      if (hours < 1) return '刚刚'

+      if (hours < 24) return `${hours}小时前`

+      const days = Math.floor(hours / 24)

+      if (days < 7) return `${days}天前`

+      

+      return date.toLocaleDateString('zh-CN')

+    }

+    

+    const formatDateTime = (dateString) => {

+      const date = new Date(dateString)

+      return date.toLocaleString('zh-CN')

+    }

+    

+    const getUserTitleType = (level) => {

+      if (level >= 8) return 'danger'  // 管理员

+      if (level >= 6) return 'warning' // 资深会员

+      if (level >= 4) return 'success' // 正式会员

+      if (level >= 2) return 'info'    // 初级会员

+      return 'default' // 新手

+    }

+    

+    const getRatioClass = (ratio) => {

+      const r = parseFloat(ratio)

+      if (r >= 2) return 'excellent'

+      if (r >= 1) return 'good'

+      return 'warning'

+    }

+    

+    const getCategoryType = (category) => {

+      const types = {

+        'movie': 'primary',

+        'tv': 'info',

+        'music': 'success',

+        'software': 'warning',

+        'game': 'danger'

+      }

+      return types[category] || 'default'

+    }

+    

+    const getCategoryName = (category) => {

+      const names = {

+        'movie': '电影',

+        'tv': '电视剧',

+        'music': '音乐',

+        'software': '软件',

+        'game': '游戏'

+      }

+      return names[category] || category

+    }

+    

+    const getActivityType = (type) => {

+      const types = {

+        'upload': 'success',

+        'download': 'primary',

+        'post': 'warning',

+        'points': 'info'

+      }

+      return types[type] || 'primary'

+    }

+    

+    const getActivityIcon = (type) => {

+      const icons = {

+        'upload': 'Upload',

+        'download': 'Download',

+        'post': 'ChatDotRound',

+        'points': 'Coin'

+      }

+      return icons[type] || 'Star'

+    }

+    

+    const showInterestInput = () => {

+      interestInputVisible.value = true

+      nextTick(() => {

+        interestInputRef.value?.focus()

+      })

+    }

+    

+    const addInterest = () => {

+      const interest = interestInputValue.value.trim()

+      if (interest && !editProfile.interests.includes(interest)) {

+        editProfile.interests.push(interest)

+      }

+      interestInputVisible.value = false

+      interestInputValue.value = ''

+    }

+    

+    const removeInterest = (interest) => {

+      const index = editProfile.interests.indexOf(interest)

+      if (index > -1) {

+        editProfile.interests.splice(index, 1)

+      }

+    }

+    

+    const saveProfile = async () => {

+      try {

+        await profileFormRef.value?.validate()

+        

+        saving.value = true

+        

+        // 模拟保存过程

+        await new Promise(resolve => setTimeout(resolve, 1500))

+        

+        // 更新用户资料

+        Object.assign(userProfile.value, editProfile)

+        

+        ElMessage.success('个人资料保存成功')

+        

+      } catch (error) {

+        console.error('表单验证失败:', error)

+      } finally {

+        saving.value = false

+      }

+    }

+    

+    const resetProfile = () => {

+      loadUserProfile()

+      ElMessage.info('已重置为原始数据')

+    }

+    

+    const changePassword = async () => {

+      try {

+        await passwordFormRef.value?.validate()

+        

+        changingPassword.value = true

+        

+        // 模拟密码修改过程

+        await new Promise(resolve => setTimeout(resolve, 1500))

+        

+        // 重置表单

+        passwordFormRef.value?.resetFields()

+        Object.assign(passwordForm, {

+          currentPassword: '',

+          newPassword: '',

+          confirmPassword: ''

+        })

+        

+        ElMessage.success('密码修改成功')

+        

+      } catch (error) {

+        console.error('表单验证失败:', error)

+      } finally {

+        changingPassword.value = false

+      }

+    }

+    

+    const handleAvatarChange = (file) => {

+      const isImage = file.raw.type.startsWith('image/')

+      const isLt2M = file.raw.size / 1024 / 1024 < 2

+      

+      if (!isImage) {

+        ElMessage.error('只能上传图片文件!')

+        return false

+      }

+      if (!isLt2M) {

+        ElMessage.error('图片大小不能超过 2MB!')

+        return false

+      }

+      

+      return true

+    }

+    

+    const uploadAvatar = async () => {

+      const files = avatarUploadRef.value?.uploadFiles

+      if (!files || files.length === 0) {

+        ElMessage.warning('请选择头像文件')

+        return

+      }

+      

+      uploadingAvatar.value = true

+      try {

+        // 模拟上传过程

+        await new Promise(resolve => setTimeout(resolve, 2000))

+        

+        // 更新头像URL

+        userProfile.value.avatar = URL.createObjectURL(files[0].raw)

+        

+        ElMessage.success('头像上传成功')

+        showAvatarDialog.value = false

+        avatarUploadRef.value?.clearFiles()

+        

+      } catch (error) {

+        ElMessage.error('头像上传失败')

+      } finally {

+        uploadingAvatar.value = false

+      }

+    }

+    

+    return {

+      activeTab,

+      showAvatarDialog,

+      saving,

+      changingPassword,

+      uploadingAvatar,

+      interestInputVisible,

+      interestInputValue,

+      activityFilter,

+      torrentsPage,

+      userProfile,

+      editProfile,

+      passwordForm,

+      profileRules,

+      passwordRules,

+      locationOptions,

+      userTorrents,

+      filteredActivities,

+      loginHistory,

+      profileFormRef,

+      passwordFormRef,

+      avatarUploadRef,

+      interestInputRef,

+      formatDate,

+      formatTime,

+      formatDateTime,

+      getUserTitleType,

+      getRatioClass,

+      getCategoryType,

+      getCategoryName,

+      getActivityType,

+      getActivityIcon,

+      showInterestInput,

+      addInterest,

+      removeInterest,

+      saveProfile,

+      resetProfile,

+      changePassword,

+      handleAvatarChange,

+      uploadAvatar,

+      Calendar,

+      Clock,

+      Upload,

+      Download,

+      TrendCharts,

+      Star,

+      QuestionFilled,

+      Plus,

+      ChatDotRound,

+      Flag,

+      Coin

+    }

+  }

+}

+</script>

+

+<style lang="scss" scoped>

+.profile-page {

+  max-width: 1200px;

+  margin: 0 auto;

+  padding: 24px;

+  background: #f5f5f5;

+  min-height: 100vh;

+}

+

+.profile-header {

+  background: #fff;

+  border-radius: 12px;

+  padding: 32px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  display: grid;

+  grid-template-columns: 1fr 1fr;

+  gap: 32px;

+  

+  .user-avatar-section {

+    display: flex;

+    gap: 24px;

+    

+    .avatar-container {

+      text-align: center;

+      

+      .change-avatar-btn {

+        margin-top: 12px;

+      }

+    }

+    

+    .user-basic-info {

+      flex: 1;

+      

+      .username {

+        font-size: 28px;

+        font-weight: 600;

+        color: #2c3e50;

+        margin: 0 0 12px 0;

+      }

+      

+      .user-title {

+        margin-bottom: 16px;

+      }

+      

+      .join-info, .last-login {

+        display: flex;

+        align-items: center;

+        gap: 8px;

+        font-size: 14px;

+        color: #7f8c8d;

+        margin-bottom: 8px;

+      }

+    }

+  }

+  

+  .user-stats-overview {

+    .stats-grid {

+      display: grid;

+      grid-template-columns: repeat(2, 1fr);

+      gap: 16px;

+      

+      .stat-card {

+        background: #f8f9fa;

+        border-radius: 8px;

+        padding: 20px;

+        display: flex;

+        align-items: center;

+        gap: 16px;

+        

+        .stat-icon {

+          width: 48px;

+          height: 48px;

+          border-radius: 50%;

+          display: flex;

+          align-items: center;

+          justify-content: center;

+          

+          &.upload { background: rgba(103, 194, 58, 0.1); color: #67c23a; }

+          &.download { background: rgba(64, 158, 255, 0.1); color: #409eff; }

+          &.ratio {

+            &.excellent { background: rgba(103, 194, 58, 0.1); color: #67c23a; }

+            &.good { background: rgba(230, 162, 60, 0.1); color: #e6a23c; }

+            &.warning { background: rgba(245, 108, 108, 0.1); color: #f56c6c; }

+          }

+          &.points { background: rgba(245, 108, 108, 0.1); color: #f56c6c; }

+        }

+        

+        .stat-info {

+          h3 {

+            font-size: 20px;

+            font-weight: 600;

+            color: #2c3e50;

+            margin: 0 0 4px 0;

+          }

+          

+          p {

+            font-size: 14px;

+            color: #7f8c8d;

+            margin: 0;

+          }

+        }

+      }

+    }

+  }

+}

+

+.profile-content {

+  background: #fff;

+  border-radius: 12px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  :deep(.el-tabs__content) {

+    padding: 24px;

+  }

+}

+

+.info-section {

+  .form-section {

+    margin-bottom: 32px;

+    

+    h3 {

+      font-size: 18px;

+      font-weight: 600;

+      color: #2c3e50;

+      margin: 0 0 20px 0;

+      padding-bottom: 8px;

+      border-bottom: 2px solid #f0f0f0;

+    }

+  }

+  

+  .interests-input {

+    display: flex;

+    flex-wrap: wrap;

+    gap: 8px;

+    align-items: center;

+    

+    .interest-tag {

+      margin: 0;

+    }

+  }

+  

+  .setting-tip {

+    margin-left: 12px;

+    font-size: 12px;

+    color: #909399;

+  }

+  

+  .form-actions {

+    text-align: center;

+    margin-top: 32px;

+    

+    .el-button {

+      margin: 0 8px;

+      min-width: 100px;

+    }

+  }

+}

+

+.stats-section {

+  .stats-overview {

+    margin-bottom: 32px;

+    

+    .overview-grid {

+      display: grid;

+      grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));

+      gap: 20px;

+      

+      .overview-card {

+        background: #f8f9fa;

+        border-radius: 8px;

+        padding: 24px;

+        

+        h3 {

+          font-size: 16px;

+          font-weight: 600;

+          color: #2c3e50;

+          margin: 0 0 16px 0;

+        }

+        

+        .stat-details {

+          .detail-item {

+            display: flex;

+            justify-content: space-between;

+            align-items: center;

+            margin-bottom: 12px;

+            

+            .label {

+              font-size: 14px;

+              color: #7f8c8d;

+            }

+            

+            .value {

+              font-size: 14px;

+              font-weight: 600;

+              color: #2c3e50;

+            }

+          }

+        }

+      }

+    }

+  }

+  

+  .charts-section {

+    .chart-card {

+      background: #f8f9fa;

+      border-radius: 8px;

+      padding: 24px;

+      

+      h3 {

+        font-size: 16px;

+        font-weight: 600;

+        color: #2c3e50;

+        margin: 0 0 20px 0;

+      }

+      

+      .chart-placeholder {

+        text-align: center;

+        padding: 60px 0;

+        color: #909399;

+        

+        p {

+          margin: 12px 0 0 0;

+        }

+      }

+    }

+  }

+}

+

+.torrents-section {

+  .section-header {

+    display: flex;

+    justify-content: space-between;

+    align-items: center;

+    margin-bottom: 20px;

+    

+    h3 {

+      font-size: 18px;

+      font-weight: 600;

+      color: #2c3e50;

+      margin: 0;

+    }

+  }

+  

+  .torrent-info {

+    display: flex;

+    align-items: center;

+    gap: 12px;

+    

+    .torrent-title {

+      font-weight: 500;

+    }

+  }

+  

+  .pagination-wrapper {

+    margin-top: 16px;

+    text-align: center;

+  }

+}

+

+.activity-section {

+  .activity-filters {

+    margin-bottom: 24px;

+    

+    .el-select {

+      width: 150px;

+    }

+  }

+  

+  .activity-timeline {

+    .activity-content {

+      .activity-header {

+        display: flex;

+        align-items: center;

+        gap: 8px;

+        margin-bottom: 8px;

+        

+        .activity-title {

+          font-weight: 600;

+          color: #2c3e50;

+        }

+      }

+      

+      .activity-description {

+        font-size: 14px;

+        color: #7f8c8d;

+        line-height: 1.5;

+      }

+    }

+  }

+}

+

+.security-section {

+  .security-card {

+    background: #f8f9fa;

+    border-radius: 8px;

+    padding: 24px;

+    margin-bottom: 24px;

+    

+    h3 {

+      font-size: 18px;

+      font-weight: 600;

+      color: #2c3e50;

+      margin: 0 0 20px 0;

+    }

+  }

+}

+

+.avatar-upload {

+  text-align: center;

+  

+  .avatar-uploader {

+    margin-bottom: 16px;

+  }

+  

+  .upload-tips {

+    font-size: 12px;

+    color: #909399;

+    

+    p {

+      margin: 4px 0;

+    }

+  }

+}

+

+@media (max-width: 768px) {

+  .profile-page {

+    padding: 16px;

+  }

+  

+  .profile-header {

+    grid-template-columns: 1fr;

+    gap: 24px;

+    

+    .user-avatar-section {

+      flex-direction: column;

+      text-align: center;

+    }

+    

+    .user-stats-overview .stats-grid {

+      grid-template-columns: 1fr;

+    }

+  }

+  

+  .stats-overview .overview-grid {

+    grid-template-columns: 1fr;

+  }

+  

+  .torrents-section .section-header {

+    flex-direction: column;

+    gap: 16px;

+    align-items: flex-start;

+  }

+}

 </style>
\ No newline at end of file
diff --git a/src/views/auth/RegisterView.vue b/src/views/auth/RegisterView.vue
index ad3461d..67a262f 100644
--- a/src/views/auth/RegisterView.vue
+++ b/src/views/auth/RegisterView.vue
@@ -1,375 +1,207 @@
-<template>
-  <div class="register-page">
-    <!-- 背景装饰 -->
-    <div class="bg-decoration">
-      <div class="shape shape-1"></div>
-      <div class="shape shape-2"></div>
-      <div class="shape shape-3"></div>
-    </div>
-    
-    <!-- 注册表单容器 -->
-    <div class="register-container">
-      <div class="register-card">
-        <!-- 头部信息 -->
-        <div class="register-header">
-          <div class="logo">
-            <el-icon size="48" color="#a8edea"><UserFilled /></el-icon>
-          </div>
-          <h1 class="title">加入 PT Tracker</h1>
-          <p class="subtitle">开始你的资源分享之旅</p>
-        </div>
-        
-        <!-- 注册表单 -->
-        <el-form
-          ref="registerFormRef"
-          :model="registerForm"
-          :rules="registerRules"
-          class="register-form"
-          size="large"
-        >
-          <el-form-item prop="username">
-            <el-input
-              v-model="registerForm.username"
-              placeholder="请输入用户名"
-              clearable
-              :prefix-icon="User"
-            />
-          </el-form-item>
-          
-          <el-form-item prop="email">
-            <el-input
-              v-model="registerForm.email"
-              placeholder="请输入邮箱地址"
-              clearable
-              :prefix-icon="Message"
-            />
-          </el-form-item>
-          
-          <el-form-item prop="password">
-            <el-input
-              v-model="registerForm.password"
-              type="password"
-              placeholder="请输入密码"
-              show-password
-              :prefix-icon="Lock"
-            />
-          </el-form-item>
-          
-          <el-form-item prop="confirmPassword">
-            <el-input
-              v-model="registerForm.confirmPassword"
-              type="password"
-              placeholder="请确认密码"
-              show-password
-              :prefix-icon="Lock"
-            />
-          </el-form-item>
-          
-          <el-form-item prop="agreement">
-            <el-checkbox v-model="registerForm.agreement">
-              我已阅读并同意
-              <el-link type="primary" :underline="false">《用户协议》</el-link>
-              和
-              <el-link type="primary" :underline="false">《隐私政策》</el-link>
-            </el-checkbox>
-          </el-form-item>
-          
-          <el-form-item>
-            <el-button
-              type="primary"
-              :loading="loading"
-              style="width: 100%"
-              @click="handleRegister"
-            >
-              <span v-if="!loading">注册</span>
-              <span v-else>注册中...</span>
-            </el-button>
-          </el-form-item>
-        </el-form>
-        
-        <!-- 底部链接 -->
-        <div class="register-footer">
-          <span class="footer-text">已有账号?</span>
-          <el-link 
-            type="primary" 
-            :underline="false"
-            @click="$router.push('/login')"
-          >
-            立即登录
-          </el-link>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { ref, reactive } from 'vue'
-import { useRouter } from 'vue-router'
-import { ElMessage } from 'element-plus'
-import { User, Lock, Message, UserFilled } from '@element-plus/icons-vue'
-
-export default {
-  name: 'RegisterView',
-  components: {
-    UserFilled
-  },
-  setup() {
-    const router = useRouter()
-    const registerFormRef = ref()
-    const loading = ref(false)
-    
-    // 表单数据
-    const registerForm = reactive({
-      username: '',
-      email: '',
-      password: '',
-      confirmPassword: '',
-      agreement: false
-    })
-    
-    // 自定义验证规则
-    const validateConfirmPassword = (rule, value, callback) => {
-      if (value === '') {
-        callback(new Error('请再次输入密码'))
-      } else if (value !== registerForm.password) {
-        callback(new Error('两次输入密码不一致'))
-      } else {
-        callback()
-      }
-    }
-    
-    const validateAgreement = (rule, value, callback) => {
-      if (!value) {
-        callback(new Error('请先同意用户协议和隐私政策'))
-      } else {
-        callback()
-      }
-    }
-    
-    // 验证规则
-    const registerRules = {
-      username: [
-        { required: true, message: '请输入用户名', trigger: 'blur' },
-        { min: 3, max: 20, message: '用户名长度在3到20个字符', trigger: 'blur' },
-        { pattern: /^[a-zA-Z0-9_]+$/, message: '用户名只能包含字母、数字和下划线', trigger: 'blur' }
-      ],
-      email: [
-        { required: true, message: '请输入邮箱地址', trigger: 'blur' },
-        { type: 'email', message: '请输入正确的邮箱格式', trigger: 'blur' }
-      ],
-      password: [
-        { required: true, message: '请输入密码', trigger: 'blur' },
-        { min: 6, max: 20, message: '密码长度在6到20个字符', trigger: 'blur' },
-        { pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]/, message: '密码必须包含大小写字母和数字', trigger: 'blur' }
-      ],
-      confirmPassword: [
-        { required: true, validator: validateConfirmPassword, trigger: 'blur' }
-      ],
-      agreement: [
-        { required: true, validator: validateAgreement, trigger: 'change' }
-      ]
-    }
-    
-    // 注册处理
-    const handleRegister = async () => {
-      try {
-        // 表单验证
-        const valid = await registerFormRef.value.validate()
-        if (!valid) return
-        
-        loading.value = true
-        
-        // 模拟注册API请求
-        await new Promise(resolve => setTimeout(resolve, 1500))
-        
-        // 模拟注册成功
-        ElMessage.success('注册成功!请登录您的账号')
-        
-        // 跳转到登录页
-        router.push('/login')
-        
-      } catch (error) {
-        console.error('注册失败:', error)
-        ElMessage.error('注册失败,请稍后重试')
-      } finally {
-        loading.value = false
-      }
-    }
-    
-    return {
-      registerFormRef,
-      registerForm,
-      registerRules,
-      loading,
-      handleRegister,
-      User,
-      Lock,
-      Message
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.register-page {
-  min-height: 100vh;
-  background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);
-  position: relative;
-  overflow: hidden;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  padding: 20px;
-}
-
-// 背景装饰(与登录页相同的动画效果)
-.bg-decoration {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  overflow: hidden;
-  z-index: 1;
-  
-  .shape {
-    position: absolute;
-    border-radius: 50%;
-    background: rgba(255, 255, 255, 0.15);
-    animation: float 8s ease-in-out infinite;
-    
-    &.shape-1 {
-      width: 180px;
-      height: 180px;
-      top: 15%;
-      left: 15%;
-      animation-delay: 0s;
-    }
-    
-    &.shape-2 {
-      width: 120px;
-      height: 120px;
-      top: 50%;
-      right: 15%;
-      animation-delay: -3s;
-    }
-    
-    &.shape-3 {
-      width: 90px;
-      height: 90px;
-      bottom: 25%;
-      left: 25%;
-      animation-delay: -6s;
-    }
-  }
-}
-
-@keyframes float {
-  0%, 100% {
-    transform: translateY(0px) rotate(0deg);
-  }
-  50% {
-    transform: translateY(-15px) rotate(180deg);
-  }
-}
-
-// 注册容器
-.register-container {
-  position: relative;
-  z-index: 10;
-  width: 100%;
-  max-width: 420px;
-}
-
-.register-card {
-  background: rgba(255, 255, 255, 0.95);
-  backdrop-filter: blur(10px);
-  border-radius: 16px;
-  padding: 40px;
-  box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
-  border: 1px solid rgba(255, 255, 255, 0.2);
-  
-  .register-header {
-    text-align: center;
-    margin-bottom: 32px;
-    
-    .logo {
-      margin-bottom: 16px;
-    }
-    
-    .title {
-      font-size: 32px;
-      font-weight: 700;
-      color: #2c3e50;
-      margin-bottom: 8px;
-      letter-spacing: -0.5px;
-    }
-    
-    .subtitle {
-      font-size: 15px;
-      color: #7f8c8d;
-      margin: 0;
-      font-weight: 400;
-    }
-  }
-  
-  .register-form {
-    .el-form-item {
-      margin-bottom: 20px;
-      
-      &:last-child {
-        margin-bottom: 0;
-      }
-    }
-    
-    .el-checkbox {
-      :deep(.el-checkbox__label) {
-        font-size: 14px;
-        color: #606266;
-        line-height: 1.5;
-      }
-    }
-    
-    .el-button {
-      font-size: 16px;
-      font-weight: 500;
-      height: 48px;
-      border-radius: 8px;
-    }
-  }
-  
-  .register-footer {
-    text-align: center;
-    margin-top: 24px;
-    padding-top: 24px;
-    border-top: 1px solid #ebeef5;
-    
-    .footer-text {
-      color: #909399;
-      font-size: 14px;
-      margin-right: 8px;
-    }
-    
-    .el-link {
-      font-size: 14px;
-      font-weight: 500;
-    }
-  }
-}
-
-// 响应式设计
-@media (max-width: 768px) {
-  .register-page {
-    padding: 16px;
-  }
-  
-  .register-card {
-    padding: 32px 24px;
-    
-    .register-header .title {
-      font-size: 28px;
-    }
-  }
-}
-</style>
\ No newline at end of file
+<template>

+  <div class="register-page">

+    <div class="bg-decoration">

+      <div class="shape shape-1"></div>

+      <div class="shape shape-2"></div>

+      <div class="shape shape-3"></div>

+    </div>

+    

+    <div class="register-container">

+      <div class="register-card">

+        <div class="register-header">

+          <div class="logo">

+            <el-icon size="48" color="#a8edea"><UserFilled /></el-icon>

+          </div>

+          <h1 class="title">加入 PT Tracker</h1>

+          <p class="subtitle">开始你的资源分享之旅</p>

+        </div>

+        

+        <!-- 注册表单 -->

+        <el-form

+          ref="registerFormRef"

+          :model="registerForm"

+          :rules="registerRules"

+          class="register-form"

+          size="large"

+        >

+          <el-form-item prop="username">

+            <el-input

+              v-model="registerForm.username"

+              placeholder="请输入用户名"

+              clearable

+              :prefix-icon="User"

+            />

+          </el-form-item>

+          

+          <el-form-item prop="email">

+            <el-input

+              v-model="registerForm.email"

+              placeholder="请输入邮箱地址"

+              clearable

+              :prefix-icon="Message"

+            />

+          </el-form-item>

+          

+          <el-form-item prop="password">

+            <el-input

+              v-model="registerForm.password"

+              type="password"

+              placeholder="请输入密码"

+              show-password

+              :prefix-icon="Lock"

+            />

+          </el-form-item>

+          

+          <el-form-item prop="confirmPassword">

+            <el-input

+              v-model="registerForm.confirmPassword"

+              type="password"

+              placeholder="请确认密码"

+              show-password

+              :prefix-icon="Lock"

+            />

+          </el-form-item>

+          

+          <el-form-item prop="agreement">

+            <el-checkbox v-model="registerForm.agreement">

+              我已阅读并同意

+              <el-link type="primary" :underline="false">《用户协议》</el-link>

+              和

+              <el-link type="primary" :underline="false">《隐私政策》</el-link>

+            </el-checkbox>

+          </el-form-item>

+          

+          <el-form-item>

+            <el-button

+              type="primary"

+              :loading="registerLoading"

+              style="width: 100%"

+              @click="handleRegister"

+            >

+              <span v-if="!registerLoading">注册</span>

+              <span v-else>注册中...</span>

+            </el-button>

+          </el-form-item>

+        </el-form>

+        

+        <div class="register-footer">

+          <span class="footer-text">已有账号?</span>

+          <el-link 

+            type="primary" 

+            :underline="false"

+            @click="$router.push('/login')"

+          >

+            立即登录

+          </el-link>

+        </div>

+      </div>

+    </div>

+  </div>

+</template>

+

+<script>

+import { ref, reactive, computed } from 'vue'

+import { useRouter } from 'vue-router'

+import { useStore } from 'vuex'

+import { User, Lock, Message, UserFilled } from '@element-plus/icons-vue'

+

+export default {

+  name: 'RegisterView',

+  components: {

+    UserFilled

+  },

+  setup() {

+    const router = useRouter()

+    const store = useStore()

+    const registerFormRef = ref()

+    

+    // 从store获取登录加载状态(注册和登录共用同一个loading状态)

+    const registerLoading = computed(() => store.getters['auth/loginLoading'])

+    

+    // 表单数据

+    const registerForm = reactive({

+      username: '',

+      email: '',

+      password: '',

+      confirmPassword: '',

+      agreement: false

+    })

+    

+    // 自定义验证规则

+    const validateConfirmPassword = (rule, value, callback) => {

+      if (value === '') {

+        callback(new Error('请再次输入密码'))

+      } else if (value !== registerForm.password) {

+        callback(new Error('两次输入密码不一致'))

+      } else {

+        callback()

+      }

+    }

+    

+    const validateAgreement = (rule, value, callback) => {

+      if (!value) {

+        callback(new Error('请先同意用户协议和隐私政策'))

+      } else {

+        callback()

+      }

+    }

+    

+    // 验证规则

+    const registerRules = {

+      username: [

+        { required: true, message: '请输入用户名', trigger: 'blur' },

+        { min: 3, max: 20, message: '用户名长度在3到20个字符', trigger: 'blur' },

+        { pattern: /^[a-zA-Z0-9_]+$/, message: '用户名只能包含字母、数字和下划线', trigger: 'blur' }

+      ],

+      email: [

+        { required: true, message: '请输入邮箱地址', trigger: 'blur' },

+        { type: 'email', message: '请输入正确的邮箱格式', trigger: 'blur' }

+      ],

+      password: [

+        { required: true, message: '请输入密码', trigger: 'blur' },

+        { min: 6, max: 20, message: '密码长度在6到20个字符', trigger: 'blur' }

+      ],

+      confirmPassword: [

+        { required: true, validator: validateConfirmPassword, trigger: 'blur' }

+      ],

+      agreement: [

+        { required: true, validator: validateAgreement, trigger: 'change' }

+      ]

+    }

+    

+    // 注册处理

+    const handleRegister = async () => {

+      try {

+        // 表单验证

+        const valid = await registerFormRef.value.validate()

+        if (!valid) return

+        

+        // 调用store的注册action

+        await store.dispatch('auth/register', {

+          username: registerForm.username,

+          email: registerForm.email,

+          password: registerForm.password

+        })

+        

+        // 注册成功,跳转到首页

+        router.push('/home')

+        

+      } catch (error) {

+        console.error('注册失败:', error)

+        // 错误信息已经在store中通过ElMessage显示了

+      }

+    }

+    

+    return {

+      registerFormRef,

+      registerForm,

+      registerRules,

+      registerLoading,

+      handleRegister,

+      User,

+      Lock,

+      Message

+    }

+  }

+}

+</script>
\ No newline at end of file
diff --git a/src/views/forum/ForumSectionView.vue b/src/views/forum/ForumSectionView.vue
index a8e7306..d0b42ec 100644
--- a/src/views/forum/ForumSectionView.vue
+++ b/src/views/forum/ForumSectionView.vue
@@ -1,1008 +1,1008 @@
-<template>
-  <div class="section-page">
-    <div class="page-container">
-      <!-- 面包屑导航 -->
-      <div class="breadcrumb">
-        <el-breadcrumb separator="/">
-          <el-breadcrumb-item :to="{ path: '/forum' }">论坛首页</el-breadcrumb-item>
-          <el-breadcrumb-item>{{ sectionInfo.name }}</el-breadcrumb-item>
-        </el-breadcrumb>
-      </div>
-
-      <!-- 版块信息 -->
-      <div class="section-header">
-        <div class="section-info">
-          <div class="section-icon">
-            <el-icon size="48" :color="sectionInfo.color">
-              <component :is="sectionInfo.icon" />
-            </el-icon>
-          </div>
-          <div class="section-details">
-            <h1 class="section-name">{{ sectionInfo.name }}</h1>
-            <p class="section-description">{{ sectionInfo.description }}</p>
-            <div class="section-stats">
-              <div class="stat-item">
-                <el-icon><ChatDotRound /></el-icon>
-                <span>{{ sectionInfo.topics }} 主题</span>
-              </div>
-              <div class="stat-item">
-                <el-icon><Comment /></el-icon>
-                <span>{{ sectionInfo.replies }} 回复</span>
-              </div>
-              <div class="stat-item">
-                <el-icon><User /></el-icon>
-                <span>{{ sectionInfo.members }} 成员</span>
-              </div>
-            </div>
-          </div>
-        </div>
-        
-        <div class="section-actions">
-          <el-button type="primary" :icon="Edit" @click="showNewTopicDialog = true">
-            发布新主题
-          </el-button>
-        </div>
-      </div>
-
-      <!-- 筛选和搜索 -->
-      <div class="filter-section">
-        <div class="filter-left">
-          <el-input
-            v-model="searchQuery"
-            placeholder="搜索主题..."
-            :prefix-icon="Search"
-            @keyup.enter="handleSearch"
-            clearable
-            style="width: 300px;"
-          />
-          <el-button type="primary" @click="handleSearch">搜索</el-button>
-        </div>
-        
-        <div class="filter-right">
-          <el-select v-model="sortBy" placeholder="排序方式" @change="handleFilter">
-            <el-option label="最新回复" value="last_reply" />
-            <el-option label="发布时间" value="create_time" />
-            <el-option label="回复数量" value="replies" />
-            <el-option label="浏览次数" value="views" />
-          </el-select>
-          
-          <el-select v-model="filterType" placeholder="主题类型" @change="handleFilter">
-            <el-option label="全部主题" value="" />
-            <el-option label="置顶主题" value="pinned" />
-            <el-option label="热门主题" value="hot" />
-            <el-option label="精华主题" value="featured" />
-          </el-select>
-        </div>
-      </div>
-
-      <!-- 置顶主题 -->
-      <div v-if="pinnedTopics.length > 0" class="pinned-topics">
-        <h3 class="section-title">置顶主题</h3>
-        <div class="topics-list">
-          <div
-            v-for="topic in pinnedTopics"
-            :key="topic.id"
-            class="topic-item pinned"
-            @click="navigateToTopic(topic.id)"
-          >
-            <div class="topic-status">
-              <el-icon class="pin-icon"><Top /></el-icon>
-            </div>
-            
-            <div class="topic-content">
-              <div class="topic-header">
-                <h4 class="topic-title">{{ topic.title }}</h4>
-                <div class="topic-tags">
-                  <el-tag type="warning" size="small">置顶</el-tag>
-                  <el-tag v-if="topic.hot" type="danger" size="small">热门</el-tag>
-                  <el-tag v-if="topic.featured" type="success" size="small">精华</el-tag>
-                </div>
-              </div>
-              
-              <div class="topic-meta">
-                <div class="author-info">
-                  <el-avatar :size="24">{{ topic.author.charAt(0) }}</el-avatar>
-                  <span class="author-name">{{ topic.author }}</span>
-                  <span class="create-time">{{ formatTime(topic.createTime) }}</span>
-                </div>
-                
-                <div class="topic-stats">
-                  <span class="stat-item">
-                    <el-icon><View /></el-icon>
-                    {{ topic.views }}
-                  </span>
-                  <span class="stat-item">
-                    <el-icon><Comment /></el-icon>
-                    {{ topic.replies }}
-                  </span>
-                </div>
-              </div>
-            </div>
-            
-            <div class="last-reply">
-              <div v-if="topic.lastReply" class="reply-info">
-                <div class="reply-author">{{ topic.lastReply.author }}</div>
-                <div class="reply-time">{{ formatTime(topic.lastReply.time) }}</div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-
-      <!-- 普通主题列表 -->
-      <div class="normal-topics">
-        <div class="section-header">
-          <h3 class="section-title">主题列表</h3>
-          <div class="results-info">
-            共 {{ totalTopics }} 个主题
-          </div>
-        </div>
-        
-        <div class="topics-list" v-loading="loading">
-          <div
-            v-for="topic in topics"
-            :key="topic.id"
-            class="topic-item"
-            @click="navigateToTopic(topic.id)"
-          >
-            <div class="topic-status">
-              <el-icon v-if="topic.hasNewReplies" class="new-icon" color="#f56c6c">
-                <ChatDotRound />
-              </el-icon>
-              <el-icon v-else class="normal-icon" color="#909399">
-                <ChatLineRound />
-              </el-icon>
-            </div>
-            
-            <div class="topic-content">
-              <div class="topic-header">
-                <h4 class="topic-title">{{ topic.title }}</h4>
-                <div class="topic-tags">
-                  <el-tag v-if="topic.hot" type="danger" size="small">热门</el-tag>
-                  <el-tag v-if="topic.featured" type="success" size="small">精华</el-tag>
-                  <el-tag v-if="topic.closed" type="info" size="small">已关闭</el-tag>
-                </div>
-              </div>
-              
-              <div class="topic-meta">
-                <div class="author-info">
-                  <el-avatar :size="24">{{ topic.author.charAt(0) }}</el-avatar>
-                  <span class="author-name">{{ topic.author }}</span>
-                  <span class="create-time">{{ formatTime(topic.createTime) }}</span>
-                </div>
-                
-                <div class="topic-stats">
-                  <span class="stat-item">
-                    <el-icon><View /></el-icon>
-                    {{ topic.views }}
-                  </span>
-                  <span class="stat-item">
-                    <el-icon><Comment /></el-icon>
-                    {{ topic.replies }}
-                  </span>
-                </div>
-              </div>
-            </div>
-            
-            <div class="last-reply">
-              <div v-if="topic.lastReply" class="reply-info">
-                <div class="reply-author">{{ topic.lastReply.author }}</div>
-                <div class="reply-time">{{ formatTime(topic.lastReply.time) }}</div>
-              </div>
-              <div v-else class="no-reply">暂无回复</div>
-            </div>
-          </div>
-          
-          <div v-if="topics.length === 0 && !loading" class="no-topics">
-            暂无主题,快来发布第一个主题吧!
-          </div>
-        </div>
-        
-        <!-- 分页 -->
-        <div class="pagination-wrapper">
-          <el-pagination
-            v-model:current-page="currentPage"
-            v-model:page-size="pageSize"
-            :page-sizes="[20, 50, 100]"
-            :total="totalTopics"
-            layout="total, sizes, prev, pager, next, jumper"
-            @size-change="handleSizeChange"
-            @current-change="handleCurrentChange"
-          />
-        </div>
-      </div>
-    </div>
-
-    <!-- 发布新主题对话框 -->
-    <el-dialog
-      v-model="showNewTopicDialog"
-      title="发布新主题"
-      width="600px"
-      :before-close="handleCloseDialog"
-    >
-      <el-form
-        ref="topicFormRef"
-        :model="newTopic"
-        :rules="topicRules"
-        label-width="80px"
-      >
-        <el-form-item label="主题标题" prop="title">
-          <el-input
-            v-model="newTopic.title"
-            placeholder="请输入主题标题"
-            maxlength="100"
-            show-word-limit
-          />
-        </el-form-item>
-        
-        <el-form-item label="主题标签">
-          <div class="tags-input">
-            <el-tag
-              v-for="tag in newTopic.tags"
-              :key="tag"
-              closable
-              @close="removeTopicTag(tag)"
-            >
-              {{ tag }}
-            </el-tag>
-            <el-input
-              v-if="tagInputVisible"
-              ref="tagInputRef"
-              v-model="tagInputValue"
-              size="small"
-              @keyup.enter="addTopicTag"
-              @blur="addTopicTag"
-              style="width: 100px;"
-            />
-            <el-button
-              v-else
-              size="small"
-              @click="showTagInput"
-            >
-              + 添加标签
-            </el-button>
-          </div>
-        </el-form-item>
-        
-        <el-form-item label="主题内容" prop="content">
-          <el-input
-            v-model="newTopic.content"
-            type="textarea"
-            :rows="8"
-            placeholder="请输入主题内容..."
-            maxlength="5000"
-            show-word-limit
-          />
-        </el-form-item>
-        
-        <el-form-item label="主题选项">
-          <el-checkbox-group v-model="newTopic.options">
-            <el-checkbox label="hot">申请热门</el-checkbox>
-            <el-checkbox label="featured">申请精华</el-checkbox>
-          </el-checkbox-group>
-        </el-form-item>
-      </el-form>
-      
-      <template #footer>
-        <el-button @click="handleCloseDialog">取消</el-button>
-        <el-button type="primary" @click="submitNewTopic" :loading="submitting">
-          发布主题
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { ref, reactive, onMounted, nextTick } from 'vue'
-import { useRoute, useRouter } from 'vue-router'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import {
-  Edit,
-  Search,
-  ChatDotRound,
-  Comment,
-  User,
-  View,
-  Top,
-  ChatLineRound,
-  Film,
-  Headphones,
-  Monitor,
-  GamePad,
-  Bell,
-  QuestionFilled
-} from '@element-plus/icons-vue'
-
-export default {
-  name: 'ForumSectionView',
-  setup() {
-    const route = useRoute()
-    const router = useRouter()
-    const topicFormRef = ref(null)
-    const tagInputRef = ref(null)
-    
-    const loading = ref(false)
-    const showNewTopicDialog = ref(false)
-    const submitting = ref(false)
-    const tagInputVisible = ref(false)
-    const tagInputValue = ref('')
-    
-    const searchQuery = ref('')
-    const sortBy = ref('last_reply')
-    const filterType = ref('')
-    const currentPage = ref(1)
-    const pageSize = ref(20)
-    const totalTopics = ref(0)
-    
-    const sectionInfo = ref({
-      id: 1,
-      name: '电影讨论',
-      description: '分享和讨论电影资源,交流观影心得',
-      icon: 'Film',
-      color: '#409eff',
-      topics: 3256,
-      replies: 18934,
-      members: 1234
-    })
-    
-    const newTopic = reactive({
-      title: '',
-      content: '',
-      tags: [],
-      options: []
-    })
-    
-    const topicRules = {
-      title: [
-        { required: true, message: '请输入标题', trigger: 'blur' },
-        { min: 5, max: 100, message: '标题长度在 5 到 100 个字符', trigger: 'blur' }
-      ],
-      content: [
-        { required: true, message: '请输入内容', trigger: 'blur' },
-        { min: 10, max: 5000, message: '内容长度在 10 到 5000 个字符', trigger: 'blur' }
-      ]
-    }
-    
-    const pinnedTopics = ref([
-      {
-        id: 1,
-        title: '【公告】本版块发帖规则和注意事项',
-        author: 'Admin',
-        createTime: '2025-05-01T10:00:00',
-        views: 5678,
-        replies: 23,
-        hot: false,
-        featured: true,
-        lastReply: {
-          author: 'User123',
-          time: '2025-06-02T15:30:00'
-        }
-      }
-    ])
-    
-    const topics = ref([
-      {
-        id: 2,
-        title: '2024年度最佳科幻电影推荐榜单',
-        author: 'SciFiFan',
-        createTime: '2025-06-03T10:30:00',
-        views: 1234,
-        replies: 45,
-        hot: true,
-        featured: false,
-        closed: false,
-        hasNewReplies: true,
-        lastReply: {
-          author: 'MovieLover',
-          time: '2025-06-03T14:25:00'
-        }
-      },
-      {
-        id: 3,
-        title: '阿凡达2:水之道 观影感受分享',
-        author: 'Avatar2Fan',
-        createTime: '2025-06-02T16:45:00',
-        views: 892,
-        replies: 67,
-        hot: false,
-        featured: true,
-        closed: false,
-        hasNewReplies: false,
-        lastReply: {
-          author: 'CinemaExpert',
-          time: '2025-06-03T12:10:00'
-        }
-      },
-      {
-        id: 4,
-        title: '求推荐几部好看的悬疑电影',
-        author: 'SuspenseLover',
-        createTime: '2025-06-01T09:20:00',
-        views: 456,
-        replies: 23,
-        hot: false,
-        featured: false,
-        closed: false,
-        hasNewReplies: true,
-        lastReply: {
-          author: 'ThrillerFan',
-          time: '2025-06-03T11:45:00'
-        }
-      }
-    ])
-    
-    onMounted(() => {
-      const sectionId = route.params.id
-      fetchSectionData(sectionId)
-    })
-    
-    const fetchSectionData = async (id) => {
-      loading.value = true
-      try {
-        // 模拟API调用
-        console.log('获取版块数据:', id)
-        
-        // 根据版块ID设置不同的版块信息
-        const sections = {
-          1: { name: '电影讨论', description: '分享和讨论电影资源,交流观影心得', icon: 'Film', color: '#409eff' },
-          2: { name: '音乐分享', description: '音乐资源分享,音乐制作技术交流', icon: 'Headphones', color: '#67c23a' },
-          3: { name: '软件技术', description: '软件资源分享,技术问题讨论', icon: 'Monitor', color: '#e6a23c' },
-          4: { name: '游戏天地', description: '游戏资源分享,游戏攻略讨论', icon: 'GamePad', color: '#f56c6c' },
-          5: { name: '站务公告', description: '网站公告,规则说明,意见建议', icon: 'Bell', color: '#909399' },
-          6: { name: '新手求助', description: '新手问题解答,使用教程分享', icon: 'QuestionFilled', color: '#606266' }
-        }
-        
-        const sectionData = sections[id] || sections[1]
-        sectionInfo.value = {
-          id: parseInt(id),
-          ...sectionData,
-          topics: 3256,
-          replies: 18934,
-          members: 1234
-        }
-        
-        totalTopics.value = 156
-        
-      } catch (error) {
-        ElMessage.error('获取版块数据失败')
-      } finally {
-        loading.value = false
-      }
-    }
-    
-    const formatTime = (timeString) => {
-      const date = new Date(timeString)
-      const now = new Date()
-      const diff = now - date
-      const hours = Math.floor(diff / (1000 * 60 * 60))
-      
-      if (hours < 1) return '刚刚'
-      if (hours < 24) return `${hours}小时前`
-      const days = Math.floor(hours / 24)
-      if (days < 7) return `${days}天前`
-      
-      return date.toLocaleDateString('zh-CN', {
-        month: '2-digit',
-        day: '2-digit',
-        hour: '2-digit',
-        minute: '2-digit'
-      })
-    }
-    
-    const navigateToTopic = (topicId) => {
-      router.push(`/forum/topic/${topicId}`)
-    }
-    
-    const handleSearch = () => {
-      currentPage.value = 1
-      fetchTopics()
-    }
-    
-    const handleFilter = () => {
-      currentPage.value = 1
-      fetchTopics()
-    }
-    
-    const fetchTopics = async () => {
-      loading.value = true
-      try {
-        // 模拟API调用
-        await new Promise(resolve => setTimeout(resolve, 500))
-        console.log('获取主题列表:', { searchQuery: searchQuery.value, sortBy: sortBy.value, filterType: filterType.value })
-      } catch (error) {
-        ElMessage.error('获取主题列表失败')
-      } finally {
-        loading.value = false
-      }
-    }
-    
-    const handleSizeChange = (size) => {
-      pageSize.value = size
-      currentPage.value = 1
-      fetchTopics()
-    }
-    
-    const handleCurrentChange = (page) => {
-      currentPage.value = page
-      fetchTopics()
-    }
-    
-    const showTagInput = () => {
-      tagInputVisible.value = true
-      nextTick(() => {
-        tagInputRef.value?.focus()
-      })
-    }
-    
-    const addTopicTag = () => {
-      const tag = tagInputValue.value.trim()
-      if (tag && !newTopic.tags.includes(tag)) {
-        newTopic.tags.push(tag)
-      }
-      tagInputVisible.value = false
-      tagInputValue.value = ''
-    }
-    
-    const removeTopicTag = (tag) => {
-      const index = newTopic.tags.indexOf(tag)
-      if (index > -1) {
-        newTopic.tags.splice(index, 1)
-      }
-    }
-    
-    const handleCloseDialog = () => {
-      if (newTopic.title || newTopic.content) {
-        ElMessageBox.confirm(
-          '确定要关闭吗?未保存的内容将会丢失。',
-          '提示',
-          {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning'
-          }
-        ).then(() => {
-          resetForm()
-          showNewTopicDialog.value = false
-        }).catch(() => {
-          // 用户取消
-        })
-      } else {
-        resetForm()
-        showNewTopicDialog.value = false
-      }
-    }
-    
-    const submitNewTopic = async () => {
-      try {
-        await topicFormRef.value?.validate()
-        
-        submitting.value = true
-        
-        // 模拟提交过程
-        await new Promise(resolve => setTimeout(resolve, 1500))
-        
-        ElMessage.success('主题发布成功!')
-        resetForm()
-        showNewTopicDialog.value = false
-        
-        // 刷新主题列表
-        fetchTopics()
-        
-      } catch (error) {
-        console.error('表单验证失败:', error)
-      } finally {
-        submitting.value = false
-      }
-    }
-    
-    const resetForm = () => {
-      topicFormRef.value?.resetFields()
-      newTopic.title = ''
-      newTopic.content = ''
-      newTopic.tags = []
-      newTopic.options = []
-    }
-    
-    return {
-      loading,
-      showNewTopicDialog,
-      submitting,
-      tagInputVisible,
-      tagInputValue,
-      searchQuery,
-      sortBy,
-      filterType,
-      currentPage,
-      pageSize,
-      totalTopics,
-      sectionInfo,
-      pinnedTopics,
-      topics,
-      newTopic,
-      topicRules,
-      topicFormRef,
-      tagInputRef,
-      formatTime,
-      navigateToTopic,
-      handleSearch,
-      handleFilter,
-      handleSizeChange,
-      handleCurrentChange,
-      showTagInput,
-      addTopicTag,
-      removeTopicTag,
-      handleCloseDialog,
-      submitNewTopic,
-      Edit,
-      Search,
-      ChatDotRound,
-      Comment,
-      User,
-      View,
-      Top,
-      ChatLineRound,
-      Film,
-      Headphones,
-      Monitor,
-      GamePad,
-      Bell,
-      QuestionFilled
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.section-page {
-  max-width: 1200px;
-  margin: 0 auto;
-  padding: 24px;
-  background: #f5f5f5;
-  min-height: 100vh;
-}
-
-.breadcrumb {
-  margin-bottom: 16px;
-}
-
-.section-header {
-  background: #fff;
-  border-radius: 12px;
-  padding: 32px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  gap: 24px;
-  
-  .section-info {
-    display: flex;
-    align-items: center;
-    gap: 20px;
-    flex: 1;
-    
-    .section-details {
-      .section-name {
-        font-size: 28px;
-        font-weight: 600;
-        color: #2c3e50;
-        margin: 0 0 8px 0;
-      }
-      
-      .section-description {
-        font-size: 16px;
-        color: #7f8c8d;
-        margin: 0 0 16px 0;
-      }
-      
-      .section-stats {
-        display: flex;
-        gap: 24px;
-        
-        .stat-item {
-          display: flex;
-          align-items: center;
-          gap: 8px;
-          font-size: 14px;
-          color: #606266;
-        }
-      }
-    }
-  }
-  
-  .section-actions {
-    flex-shrink: 0;
-  }
-}
-
-.filter-section {
-  background: #fff;
-  border-radius: 12px;
-  padding: 20px 24px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  gap: 20px;
-  
-  .filter-left {
-    display: flex;
-    align-items: center;
-    gap: 12px;
-  }
-  
-  .filter-right {
-    display: flex;
-    align-items: center;
-    gap: 12px;
-    
-    .el-select {
-      width: 120px;
-    }
-  }
-}
-
-.pinned-topics, .normal-topics {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .section-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 20px;
-    background: none;
-    padding: 0;
-    box-shadow: none;
-    
-    .section-title {
-      font-size: 18px;
-      font-weight: 600;
-      color: #2c3e50;
-      margin: 0;
-    }
-    
-    .results-info {
-      font-size: 14px;
-      color: #909399;
-    }
-  }
-}
-
-.topics-list {
-  .topic-item {
-    display: flex;
-    align-items: center;
-    gap: 16px;
-    padding: 16px;
-    border: 1px solid #f0f0f0;
-    border-radius: 8px;
-    margin-bottom: 12px;
-    cursor: pointer;
-    transition: all 0.3s ease;
-    
-    &:hover {
-      background: #f8f9fa;
-      border-color: #409eff;
-      transform: translateX(2px);
-    }
-    
-    &.pinned {
-      background: linear-gradient(90deg, #fff7e6 0%, #fff 100%);
-      border-color: #e6a23c;
-    }
-    
-    .topic-status {
-      width: 32px;
-      text-align: center;
-      
-      .pin-icon {
-        color: #e6a23c;
-      }
-      
-      .new-icon {
-        animation: pulse 2s infinite;
-      }
-    }
-    
-    .topic-content {
-      flex: 1;
-      
-      .topic-header {
-        display: flex;
-        align-items: center;
-        gap: 12px;
-        margin-bottom: 8px;
-        
-        .topic-title {
-          font-size: 16px;
-          font-weight: 500;
-          color: #2c3e50;
-          margin: 0;
-          flex: 1;
-          
-          &:hover {
-            color: #409eff;
-          }
-        }
-        
-        .topic-tags {
-          .el-tag {
-            margin-left: 4px;
-          }
-        }
-      }
-      
-      .topic-meta {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        
-        .author-info {
-          display: flex;
-          align-items: center;
-          gap: 8px;
-          
-          .author-name {
-            font-size: 14px;
-            font-weight: 500;
-            color: #606266;
-          }
-          
-          .create-time {
-            font-size: 12px;
-            color: #909399;
-          }
-        }
-        
-        .topic-stats {
-          display: flex;
-          gap: 16px;
-          
-          .stat-item {
-            display: flex;
-            align-items: center;
-            gap: 4px;
-            font-size: 12px;
-            color: #909399;
-          }
-        }
-      }
-    }
-    
-    .last-reply {
-      width: 150px;
-      text-align: right;
-      
-      .reply-info {
-        .reply-author {
-          font-size: 14px;
-          font-weight: 500;
-          color: #606266;
-          margin-bottom: 4px;
-        }
-        
-        .reply-time {
-          font-size: 12px;
-          color: #909399;
-        }
-      }
-      
-      .no-reply {
-        font-size: 12px;
-        color: #c0c4cc;
-      }
-    }
-  }
-  
-  .no-topics {
-    text-align: center;
-    color: #909399;
-    padding: 60px 0;
-    font-size: 16px;
-  }
-}
-
-.pagination-wrapper {
-  margin-top: 24px;
-  text-align: center;
-}
-
-.tags-input {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 8px;
-  align-items: center;
-  
-  .el-tag {
-    margin: 0;
-  }
-}
-
-@keyframes pulse {
-  0% {
-    transform: scale(1);
-  }
-  50% {
-    transform: scale(1.1);
-  }
-  100% {
-    transform: scale(1);
-  }
-}
-
-@media (max-width: 768px) {
-  .section-page {
-    padding: 16px;
-  }
-  
-  .section-header {
-    flex-direction: column;
-    align-items: flex-start;
-    gap: 16px;
-    
-    .section-info {
-      flex-direction: column;
-      text-align: center;
-      
-      .section-stats {
-        justify-content: center;
-      }
-    }
-    
-    .section-actions {
-      width: 100%;
-      text-align: center;
-    }
-  }
-  
-  .filter-section {
-    flex-direction: column;
-    gap: 16px;
-    
-    .filter-left, .filter-right {
-      width: 100%;
-      justify-content: center;
-    }
-    
-    .filter-right {
-      .el-select {
-        width: 140px;
-      }
-    }
-  }
-  
-  .topic-item {
-    flex-direction: column;
-    align-items: flex-start;
-    gap: 12px;
-    
-    .topic-status {
-      align-self: flex-start;
-    }
-    
-    .topic-content {
-      width: 100%;
-      
-      .topic-meta {
-        flex-direction: column;
-        align-items: flex-start;
-        gap: 8px;
-      }
-    }
-    
-    .last-reply {
-      width: 100%;
-      text-align: left;
-    }
-  }
-}
+<template>

+  <div class="section-page">

+    <div class="page-container">

+      <!-- 面包屑导航 -->

+      <div class="breadcrumb">

+        <el-breadcrumb separator="/">

+          <el-breadcrumb-item :to="{ path: '/forum' }">论坛首页</el-breadcrumb-item>

+          <el-breadcrumb-item>{{ sectionInfo.name }}</el-breadcrumb-item>

+        </el-breadcrumb>

+      </div>

+

+      <!-- 版块信息 -->

+      <div class="section-header">

+        <div class="section-info">

+          <div class="section-icon">

+            <el-icon size="48" :color="sectionInfo.color">

+              <component :is="sectionInfo.icon" />

+            </el-icon>

+          </div>

+          <div class="section-details">

+            <h1 class="section-name">{{ sectionInfo.name }}</h1>

+            <p class="section-description">{{ sectionInfo.description }}</p>

+            <div class="section-stats">

+              <div class="stat-item">

+                <el-icon><ChatDotRound /></el-icon>

+                <span>{{ sectionInfo.topics }} 主题</span>

+              </div>

+              <div class="stat-item">

+                <el-icon><Comment /></el-icon>

+                <span>{{ sectionInfo.replies }} 回复</span>

+              </div>

+              <div class="stat-item">

+                <el-icon><User /></el-icon>

+                <span>{{ sectionInfo.members }} 成员</span>

+              </div>

+            </div>

+          </div>

+        </div>

+        

+        <div class="section-actions">

+          <el-button type="primary" :icon="Edit" @click="showNewTopicDialog = true">

+            发布新主题

+          </el-button>

+        </div>

+      </div>

+

+      <!-- 筛选和搜索 -->

+      <div class="filter-section">

+        <div class="filter-left">

+          <el-input

+            v-model="searchQuery"

+            placeholder="搜索主题..."

+            :prefix-icon="Search"

+            @keyup.enter="handleSearch"

+            clearable

+            style="width: 300px;"

+          />

+          <el-button type="primary" @click="handleSearch">搜索</el-button>

+        </div>

+        

+        <div class="filter-right">

+          <el-select v-model="sortBy" placeholder="排序方式" @change="handleFilter">

+            <el-option label="最新回复" value="last_reply" />

+            <el-option label="发布时间" value="create_time" />

+            <el-option label="回复数量" value="replies" />

+            <el-option label="浏览次数" value="views" />

+          </el-select>

+          

+          <el-select v-model="filterType" placeholder="主题类型" @change="handleFilter">

+            <el-option label="全部主题" value="" />

+            <el-option label="置顶主题" value="pinned" />

+            <el-option label="热门主题" value="hot" />

+            <el-option label="精华主题" value="featured" />

+          </el-select>

+        </div>

+      </div>

+

+      <!-- 置顶主题 -->

+      <div v-if="pinnedTopics.length > 0" class="pinned-topics">

+        <h3 class="section-title">置顶主题</h3>

+        <div class="topics-list">

+          <div

+            v-for="topic in pinnedTopics"

+            :key="topic.id"

+            class="topic-item pinned"

+            @click="navigateToTopic(topic.id)"

+          >

+            <div class="topic-status">

+              <el-icon class="pin-icon"><Top /></el-icon>

+            </div>

+            

+            <div class="topic-content">

+              <div class="topic-header">

+                <h4 class="topic-title">{{ topic.title }}</h4>

+                <div class="topic-tags">

+                  <el-tag type="warning" size="small">置顶</el-tag>

+                  <el-tag v-if="topic.hot" type="danger" size="small">热门</el-tag>

+                  <el-tag v-if="topic.featured" type="success" size="small">精华</el-tag>

+                </div>

+              </div>

+              

+              <div class="topic-meta">

+                <div class="author-info">

+                  <el-avatar :size="24">{{ topic.author.charAt(0) }}</el-avatar>

+                  <span class="author-name">{{ topic.author }}</span>

+                  <span class="create-time">{{ formatTime(topic.createTime) }}</span>

+                </div>

+                

+                <div class="topic-stats">

+                  <span class="stat-item">

+                    <el-icon><View /></el-icon>

+                    {{ topic.views }}

+                  </span>

+                  <span class="stat-item">

+                    <el-icon><Comment /></el-icon>

+                    {{ topic.replies }}

+                  </span>

+                </div>

+              </div>

+            </div>

+            

+            <div class="last-reply">

+              <div v-if="topic.lastReply" class="reply-info">

+                <div class="reply-author">{{ topic.lastReply.author }}</div>

+                <div class="reply-time">{{ formatTime(topic.lastReply.time) }}</div>

+              </div>

+            </div>

+          </div>

+        </div>

+      </div>

+

+      <!-- 普通主题列表 -->

+      <div class="normal-topics">

+        <div class="section-header">

+          <h3 class="section-title">主题列表</h3>

+          <div class="results-info">

+            共 {{ totalTopics }} 个主题

+          </div>

+        </div>

+        

+        <div class="topics-list" v-loading="loading">

+          <div

+            v-for="topic in topics"

+            :key="topic.id"

+            class="topic-item"

+            @click="navigateToTopic(topic.id)"

+          >

+            <div class="topic-status">

+              <el-icon v-if="topic.hasNewReplies" class="new-icon" color="#f56c6c">

+                <ChatDotRound />

+              </el-icon>

+              <el-icon v-else class="normal-icon" color="#909399">

+                <ChatLineRound />

+              </el-icon>

+            </div>

+            

+            <div class="topic-content">

+              <div class="topic-header">

+                <h4 class="topic-title">{{ topic.title }}</h4>

+                <div class="topic-tags">

+                  <el-tag v-if="topic.hot" type="danger" size="small">热门</el-tag>

+                  <el-tag v-if="topic.featured" type="success" size="small">精华</el-tag>

+                  <el-tag v-if="topic.closed" type="info" size="small">已关闭</el-tag>

+                </div>

+              </div>

+              

+              <div class="topic-meta">

+                <div class="author-info">

+                  <el-avatar :size="24">{{ topic.author.charAt(0) }}</el-avatar>

+                  <span class="author-name">{{ topic.author }}</span>

+                  <span class="create-time">{{ formatTime(topic.createTime) }}</span>

+                </div>

+                

+                <div class="topic-stats">

+                  <span class="stat-item">

+                    <el-icon><View /></el-icon>

+                    {{ topic.views }}

+                  </span>

+                  <span class="stat-item">

+                    <el-icon><Comment /></el-icon>

+                    {{ topic.replies }}

+                  </span>

+                </div>

+              </div>

+            </div>

+            

+            <div class="last-reply">

+              <div v-if="topic.lastReply" class="reply-info">

+                <div class="reply-author">{{ topic.lastReply.author }}</div>

+                <div class="reply-time">{{ formatTime(topic.lastReply.time) }}</div>

+              </div>

+              <div v-else class="no-reply">暂无回复</div>

+            </div>

+          </div>

+          

+          <div v-if="topics.length === 0 && !loading" class="no-topics">

+            暂无主题,快来发布第一个主题吧!

+          </div>

+        </div>

+        

+        <!-- 分页 -->

+        <div class="pagination-wrapper">

+          <el-pagination

+            v-model:current-page="currentPage"

+            v-model:page-size="pageSize"

+            :page-sizes="[20, 50, 100]"

+            :total="totalTopics"

+            layout="total, sizes, prev, pager, next, jumper"

+            @size-change="handleSizeChange"

+            @current-change="handleCurrentChange"

+          />

+        </div>

+      </div>

+    </div>

+

+    <!-- 发布新主题对话框 -->

+    <el-dialog

+      v-model="showNewTopicDialog"

+      title="发布新主题"

+      width="600px"

+      :before-close="handleCloseDialog"

+    >

+      <el-form

+        ref="topicFormRef"

+        :model="newTopic"

+        :rules="topicRules"

+        label-width="80px"

+      >

+        <el-form-item label="主题标题" prop="title">

+          <el-input

+            v-model="newTopic.title"

+            placeholder="请输入主题标题"

+            maxlength="100"

+            show-word-limit

+          />

+        </el-form-item>

+        

+        <el-form-item label="主题标签">

+          <div class="tags-input">

+            <el-tag

+              v-for="tag in newTopic.tags"

+              :key="tag"

+              closable

+              @close="removeTopicTag(tag)"

+            >

+              {{ tag }}

+            </el-tag>

+            <el-input

+              v-if="tagInputVisible"

+              ref="tagInputRef"

+              v-model="tagInputValue"

+              size="small"

+              @keyup.enter="addTopicTag"

+              @blur="addTopicTag"

+              style="width: 100px;"

+            />

+            <el-button

+              v-else

+              size="small"

+              @click="showTagInput"

+            >

+              + 添加标签

+            </el-button>

+          </div>

+        </el-form-item>

+        

+        <el-form-item label="主题内容" prop="content">

+          <el-input

+            v-model="newTopic.content"

+            type="textarea"

+            :rows="8"

+            placeholder="请输入主题内容..."

+            maxlength="5000"

+            show-word-limit

+          />

+        </el-form-item>

+        

+        <el-form-item label="主题选项">

+          <el-checkbox-group v-model="newTopic.options">

+            <el-checkbox label="hot">申请热门</el-checkbox>

+            <el-checkbox label="featured">申请精华</el-checkbox>

+          </el-checkbox-group>

+        </el-form-item>

+      </el-form>

+      

+      <template #footer>

+        <el-button @click="handleCloseDialog">取消</el-button>

+        <el-button type="primary" @click="submitNewTopic" :loading="submitting">

+          发布主题

+        </el-button>

+      </template>

+    </el-dialog>

+  </div>

+</template>

+

+<script>

+import { ref, reactive, onMounted, nextTick } from 'vue'

+import { useRoute, useRouter } from 'vue-router'

+import { ElMessage, ElMessageBox } from 'element-plus'

+import {

+  Edit,

+  Search,

+  ChatDotRound,

+  Comment,

+  User,

+  View,

+  Top,

+  ChatLineRound,

+  Film,

+  Headphones,

+  Monitor,

+  GamePad,

+  Bell,

+  QuestionFilled

+} from '@element-plus/icons-vue'

+

+export default {

+  name: 'ForumSectionView',

+  setup() {

+    const route = useRoute()

+    const router = useRouter()

+    const topicFormRef = ref(null)

+    const tagInputRef = ref(null)

+    

+    const loading = ref(false)

+    const showNewTopicDialog = ref(false)

+    const submitting = ref(false)

+    const tagInputVisible = ref(false)

+    const tagInputValue = ref('')

+    

+    const searchQuery = ref('')

+    const sortBy = ref('last_reply')

+    const filterType = ref('')

+    const currentPage = ref(1)

+    const pageSize = ref(20)

+    const totalTopics = ref(0)

+    

+    const sectionInfo = ref({

+      id: 1,

+      name: '电影讨论',

+      description: '分享和讨论电影资源,交流观影心得',

+      icon: 'Film',

+      color: '#409eff',

+      topics: 3256,

+      replies: 18934,

+      members: 1234

+    })

+    

+    const newTopic = reactive({

+      title: '',

+      content: '',

+      tags: [],

+      options: []

+    })

+    

+    const topicRules = {

+      title: [

+        { required: true, message: '请输入标题', trigger: 'blur' },

+        { min: 5, max: 100, message: '标题长度在 5 到 100 个字符', trigger: 'blur' }

+      ],

+      content: [

+        { required: true, message: '请输入内容', trigger: 'blur' },

+        { min: 10, max: 5000, message: '内容长度在 10 到 5000 个字符', trigger: 'blur' }

+      ]

+    }

+    

+    const pinnedTopics = ref([

+      {

+        id: 1,

+        title: '【公告】本版块发帖规则和注意事项',

+        author: 'Admin',

+        createTime: '2025-05-01T10:00:00',

+        views: 5678,

+        replies: 23,

+        hot: false,

+        featured: true,

+        lastReply: {

+          author: 'User123',

+          time: '2025-06-02T15:30:00'

+        }

+      }

+    ])

+    

+    const topics = ref([

+      {

+        id: 2,

+        title: '2024年度最佳科幻电影推荐榜单',

+        author: 'SciFiFan',

+        createTime: '2025-06-03T10:30:00',

+        views: 1234,

+        replies: 45,

+        hot: true,

+        featured: false,

+        closed: false,

+        hasNewReplies: true,

+        lastReply: {

+          author: 'MovieLover',

+          time: '2025-06-03T14:25:00'

+        }

+      },

+      {

+        id: 3,

+        title: '阿凡达2:水之道 观影感受分享',

+        author: 'Avatar2Fan',

+        createTime: '2025-06-02T16:45:00',

+        views: 892,

+        replies: 67,

+        hot: false,

+        featured: true,

+        closed: false,

+        hasNewReplies: false,

+        lastReply: {

+          author: 'CinemaExpert',

+          time: '2025-06-03T12:10:00'

+        }

+      },

+      {

+        id: 4,

+        title: '求推荐几部好看的悬疑电影',

+        author: 'SuspenseLover',

+        createTime: '2025-06-01T09:20:00',

+        views: 456,

+        replies: 23,

+        hot: false,

+        featured: false,

+        closed: false,

+        hasNewReplies: true,

+        lastReply: {

+          author: 'ThrillerFan',

+          time: '2025-06-03T11:45:00'

+        }

+      }

+    ])

+    

+    onMounted(() => {

+      const sectionId = route.params.id

+      fetchSectionData(sectionId)

+    })

+    

+    const fetchSectionData = async (id) => {

+      loading.value = true

+      try {

+        // 模拟API调用

+        console.log('获取版块数据:', id)

+        

+        // 根据版块ID设置不同的版块信息

+        const sections = {

+          1: { name: '电影讨论', description: '分享和讨论电影资源,交流观影心得', icon: 'Film', color: '#409eff' },

+          2: { name: '音乐分享', description: '音乐资源分享,音乐制作技术交流', icon: 'Headphones', color: '#67c23a' },

+          3: { name: '软件技术', description: '软件资源分享,技术问题讨论', icon: 'Monitor', color: '#e6a23c' },

+          4: { name: '游戏天地', description: '游戏资源分享,游戏攻略讨论', icon: 'GamePad', color: '#f56c6c' },

+          5: { name: '站务公告', description: '网站公告,规则说明,意见建议', icon: 'Bell', color: '#909399' },

+          6: { name: '新手求助', description: '新手问题解答,使用教程分享', icon: 'QuestionFilled', color: '#606266' }

+        }

+        

+        const sectionData = sections[id] || sections[1]

+        sectionInfo.value = {

+          id: parseInt(id),

+          ...sectionData,

+          topics: 3256,

+          replies: 18934,

+          members: 1234

+        }

+        

+        totalTopics.value = 156

+        

+      } catch (error) {

+        ElMessage.error('获取版块数据失败')

+      } finally {

+        loading.value = false

+      }

+    }

+    

+    const formatTime = (timeString) => {

+      const date = new Date(timeString)

+      const now = new Date()

+      const diff = now - date

+      const hours = Math.floor(diff / (1000 * 60 * 60))

+      

+      if (hours < 1) return '刚刚'

+      if (hours < 24) return `${hours}小时前`

+      const days = Math.floor(hours / 24)

+      if (days < 7) return `${days}天前`

+      

+      return date.toLocaleDateString('zh-CN', {

+        month: '2-digit',

+        day: '2-digit',

+        hour: '2-digit',

+        minute: '2-digit'

+      })

+    }

+    

+    const navigateToTopic = (topicId) => {

+      router.push(`/forum/topic/${topicId}`)

+    }

+    

+    const handleSearch = () => {

+      currentPage.value = 1

+      fetchTopics()

+    }

+    

+    const handleFilter = () => {

+      currentPage.value = 1

+      fetchTopics()

+    }

+    

+    const fetchTopics = async () => {

+      loading.value = true

+      try {

+        // 模拟API调用

+        await new Promise(resolve => setTimeout(resolve, 500))

+        console.log('获取主题列表:', { searchQuery: searchQuery.value, sortBy: sortBy.value, filterType: filterType.value })

+      } catch (error) {

+        ElMessage.error('获取主题列表失败')

+      } finally {

+        loading.value = false

+      }

+    }

+    

+    const handleSizeChange = (size) => {

+      pageSize.value = size

+      currentPage.value = 1

+      fetchTopics()

+    }

+    

+    const handleCurrentChange = (page) => {

+      currentPage.value = page

+      fetchTopics()

+    }

+    

+    const showTagInput = () => {

+      tagInputVisible.value = true

+      nextTick(() => {

+        tagInputRef.value?.focus()

+      })

+    }

+    

+    const addTopicTag = () => {

+      const tag = tagInputValue.value.trim()

+      if (tag && !newTopic.tags.includes(tag)) {

+        newTopic.tags.push(tag)

+      }

+      tagInputVisible.value = false

+      tagInputValue.value = ''

+    }

+    

+    const removeTopicTag = (tag) => {

+      const index = newTopic.tags.indexOf(tag)

+      if (index > -1) {

+        newTopic.tags.splice(index, 1)

+      }

+    }

+    

+    const handleCloseDialog = () => {

+      if (newTopic.title || newTopic.content) {

+        ElMessageBox.confirm(

+          '确定要关闭吗?未保存的内容将会丢失。',

+          '提示',

+          {

+            confirmButtonText: '确定',

+            cancelButtonText: '取消',

+            type: 'warning'

+          }

+        ).then(() => {

+          resetForm()

+          showNewTopicDialog.value = false

+        }).catch(() => {

+          // 用户取消

+        })

+      } else {

+        resetForm()

+        showNewTopicDialog.value = false

+      }

+    }

+    

+    const submitNewTopic = async () => {

+      try {

+        await topicFormRef.value?.validate()

+        

+        submitting.value = true

+        

+        // 模拟提交过程

+        await new Promise(resolve => setTimeout(resolve, 1500))

+        

+        ElMessage.success('主题发布成功!')

+        resetForm()

+        showNewTopicDialog.value = false

+        

+        // 刷新主题列表

+        fetchTopics()

+        

+      } catch (error) {

+        console.error('表单验证失败:', error)

+      } finally {

+        submitting.value = false

+      }

+    }

+    

+    const resetForm = () => {

+      topicFormRef.value?.resetFields()

+      newTopic.title = ''

+      newTopic.content = ''

+      newTopic.tags = []

+      newTopic.options = []

+    }

+    

+    return {

+      loading,

+      showNewTopicDialog,

+      submitting,

+      tagInputVisible,

+      tagInputValue,

+      searchQuery,

+      sortBy,

+      filterType,

+      currentPage,

+      pageSize,

+      totalTopics,

+      sectionInfo,

+      pinnedTopics,

+      topics,

+      newTopic,

+      topicRules,

+      topicFormRef,

+      tagInputRef,

+      formatTime,

+      navigateToTopic,

+      handleSearch,

+      handleFilter,

+      handleSizeChange,

+      handleCurrentChange,

+      showTagInput,

+      addTopicTag,

+      removeTopicTag,

+      handleCloseDialog,

+      submitNewTopic,

+      Edit,

+      Search,

+      ChatDotRound,

+      Comment,

+      User,

+      View,

+      Top,

+      ChatLineRound,

+      Film,

+      Headphones,

+      Monitor,

+      GamePad,

+      Bell,

+      QuestionFilled

+    }

+  }

+}

+</script>

+

+<style lang="scss" scoped>

+.section-page {

+  max-width: 1200px;

+  margin: 0 auto;

+  padding: 24px;

+  background: #f5f5f5;

+  min-height: 100vh;

+}

+

+.breadcrumb {

+  margin-bottom: 16px;

+}

+

+.section-header {

+  background: #fff;

+  border-radius: 12px;

+  padding: 32px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  display: flex;

+  justify-content: space-between;

+  align-items: center;

+  gap: 24px;

+  

+  .section-info {

+    display: flex;

+    align-items: center;

+    gap: 20px;

+    flex: 1;

+    

+    .section-details {

+      .section-name {

+        font-size: 28px;

+        font-weight: 600;

+        color: #2c3e50;

+        margin: 0 0 8px 0;

+      }

+      

+      .section-description {

+        font-size: 16px;

+        color: #7f8c8d;

+        margin: 0 0 16px 0;

+      }

+      

+      .section-stats {

+        display: flex;

+        gap: 24px;

+        

+        .stat-item {

+          display: flex;

+          align-items: center;

+          gap: 8px;

+          font-size: 14px;

+          color: #606266;

+        }

+      }

+    }

+  }

+  

+  .section-actions {

+    flex-shrink: 0;

+  }

+}

+

+.filter-section {

+  background: #fff;

+  border-radius: 12px;

+  padding: 20px 24px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  display: flex;

+  justify-content: space-between;

+  align-items: center;

+  gap: 20px;

+  

+  .filter-left {

+    display: flex;

+    align-items: center;

+    gap: 12px;

+  }

+  

+  .filter-right {

+    display: flex;

+    align-items: center;

+    gap: 12px;

+    

+    .el-select {

+      width: 120px;

+    }

+  }

+}

+

+.pinned-topics, .normal-topics {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .section-header {

+    display: flex;

+    justify-content: space-between;

+    align-items: center;

+    margin-bottom: 20px;

+    background: none;

+    padding: 0;

+    box-shadow: none;

+    

+    .section-title {

+      font-size: 18px;

+      font-weight: 600;

+      color: #2c3e50;

+      margin: 0;

+    }

+    

+    .results-info {

+      font-size: 14px;

+      color: #909399;

+    }

+  }

+}

+

+.topics-list {

+  .topic-item {

+    display: flex;

+    align-items: center;

+    gap: 16px;

+    padding: 16px;

+    border: 1px solid #f0f0f0;

+    border-radius: 8px;

+    margin-bottom: 12px;

+    cursor: pointer;

+    transition: all 0.3s ease;

+    

+    &:hover {

+      background: #f8f9fa;

+      border-color: #409eff;

+      transform: translateX(2px);

+    }

+    

+    &.pinned {

+      background: linear-gradient(90deg, #fff7e6 0%, #fff 100%);

+      border-color: #e6a23c;

+    }

+    

+    .topic-status {

+      width: 32px;

+      text-align: center;

+      

+      .pin-icon {

+        color: #e6a23c;

+      }

+      

+      .new-icon {

+        animation: pulse 2s infinite;

+      }

+    }

+    

+    .topic-content {

+      flex: 1;

+      

+      .topic-header {

+        display: flex;

+        align-items: center;

+        gap: 12px;

+        margin-bottom: 8px;

+        

+        .topic-title {

+          font-size: 16px;

+          font-weight: 500;

+          color: #2c3e50;

+          margin: 0;

+          flex: 1;

+          

+          &:hover {

+            color: #409eff;

+          }

+        }

+        

+        .topic-tags {

+          .el-tag {

+            margin-left: 4px;

+          }

+        }

+      }

+      

+      .topic-meta {

+        display: flex;

+        justify-content: space-between;

+        align-items: center;

+        

+        .author-info {

+          display: flex;

+          align-items: center;

+          gap: 8px;

+          

+          .author-name {

+            font-size: 14px;

+            font-weight: 500;

+            color: #606266;

+          }

+          

+          .create-time {

+            font-size: 12px;

+            color: #909399;

+          }

+        }

+        

+        .topic-stats {

+          display: flex;

+          gap: 16px;

+          

+          .stat-item {

+            display: flex;

+            align-items: center;

+            gap: 4px;

+            font-size: 12px;

+            color: #909399;

+          }

+        }

+      }

+    }

+    

+    .last-reply {

+      width: 150px;

+      text-align: right;

+      

+      .reply-info {

+        .reply-author {

+          font-size: 14px;

+          font-weight: 500;

+          color: #606266;

+          margin-bottom: 4px;

+        }

+        

+        .reply-time {

+          font-size: 12px;

+          color: #909399;

+        }

+      }

+      

+      .no-reply {

+        font-size: 12px;

+        color: #c0c4cc;

+      }

+    }

+  }

+  

+  .no-topics {

+    text-align: center;

+    color: #909399;

+    padding: 60px 0;

+    font-size: 16px;

+  }

+}

+

+.pagination-wrapper {

+  margin-top: 24px;

+  text-align: center;

+}

+

+.tags-input {

+  display: flex;

+  flex-wrap: wrap;

+  gap: 8px;

+  align-items: center;

+  

+  .el-tag {

+    margin: 0;

+  }

+}

+

+@keyframes pulse {

+  0% {

+    transform: scale(1);

+  }

+  50% {

+    transform: scale(1.1);

+  }

+  100% {

+    transform: scale(1);

+  }

+}

+

+@media (max-width: 768px) {

+  .section-page {

+    padding: 16px;

+  }

+  

+  .section-header {

+    flex-direction: column;

+    align-items: flex-start;

+    gap: 16px;

+    

+    .section-info {

+      flex-direction: column;

+      text-align: center;

+      

+      .section-stats {

+        justify-content: center;

+      }

+    }

+    

+    .section-actions {

+      width: 100%;

+      text-align: center;

+    }

+  }

+  

+  .filter-section {

+    flex-direction: column;

+    gap: 16px;

+    

+    .filter-left, .filter-right {

+      width: 100%;

+      justify-content: center;

+    }

+    

+    .filter-right {

+      .el-select {

+        width: 140px;

+      }

+    }

+  }

+  

+  .topic-item {

+    flex-direction: column;

+    align-items: flex-start;

+    gap: 12px;

+    

+    .topic-status {

+      align-self: flex-start;

+    }

+    

+    .topic-content {

+      width: 100%;

+      

+      .topic-meta {

+        flex-direction: column;

+        align-items: flex-start;

+        gap: 8px;

+      }

+    }

+    

+    .last-reply {

+      width: 100%;

+      text-align: left;

+    }

+  }

+}

 </style>
\ No newline at end of file
diff --git a/src/views/forum/ForumTopicView.vue b/src/views/forum/ForumTopicView.vue
index 027083f..e65b297 100644
--- a/src/views/forum/ForumTopicView.vue
+++ b/src/views/forum/ForumTopicView.vue
@@ -1,933 +1,933 @@
-<template>
-  <div class="topic-detail-page">
-    <div class="page-container">
-      <!-- 面包屑导航 -->
-      <div class="breadcrumb">
-        <el-breadcrumb separator="/">
-          <el-breadcrumb-item :to="{ path: '/forum' }">论坛首页</el-breadcrumb-item>
-          <el-breadcrumb-item :to="{ path: `/forum/section/${topic.sectionId}` }">
-            {{ topic.sectionName }}
-          </el-breadcrumb-item>
-          <el-breadcrumb-item>{{ topic.title }}</el-breadcrumb-item>
-        </el-breadcrumb>
-      </div>
-
-      <!-- 主题信息 -->
-      <div class="topic-header">
-        <div class="topic-info">
-          <div class="topic-title-row">
-            <h1 class="topic-title">{{ topic.title }}</h1>
-            <div class="topic-status">
-              <el-tag v-if="topic.pinned" type="warning" size="small">置顶</el-tag>
-              <el-tag v-if="topic.hot" type="danger" size="small">热门</el-tag>
-              <el-tag v-if="topic.closed" type="info" size="small">已关闭</el-tag>
-            </div>
-          </div>
-          
-          <div class="topic-tags">
-            <el-tag
-              v-for="tag in topic.tags"
-              :key="tag"
-              size="small"
-              type="info"
-              effect="plain"
-            >
-              {{ tag }}
-            </el-tag>
-          </div>
-          
-          <div class="topic-meta">
-            <div class="author-info">
-              <el-avatar :size="32">{{ topic.author.charAt(0) }}</el-avatar>
-              <div class="author-details">
-                <span class="author-name">{{ topic.author }}</span>
-                <span class="post-time">发表于 {{ formatDateTime(topic.createTime) }}</span>
-              </div>
-            </div>
-            
-            <div class="topic-stats">
-              <div class="stat-item">
-                <el-icon><View /></el-icon>
-                <span>{{ topic.views }} 浏览</span>
-              </div>
-              <div class="stat-item">
-                <el-icon><Comment /></el-icon>
-                <span>{{ topic.replies }} 回复</span>
-              </div>
-            </div>
-          </div>
-        </div>
-        
-        <div class="topic-actions">
-          <el-button 
-            v-if="!topic.closed" 
-            type="primary" 
-            :icon="Edit" 
-            @click="showReplyDialog = true"
-          >
-            回复主题
-          </el-button>
-          <el-dropdown @command="handleTopicAction">
-            <el-button :icon="More">
-              更多 <el-icon class="el-icon--right"><ArrowDown /></el-icon>
-            </el-button>
-            <template #dropdown>
-              <el-dropdown-menu>
-                <el-dropdown-item command="favorite">
-                  {{ isFavorited ? '取消收藏' : '收藏主题' }}
-                </el-dropdown-item>
-                <el-dropdown-item command="share">分享主题</el-dropdown-item>
-                <el-dropdown-item command="report" divided>举报主题</el-dropdown-item>
-              </el-dropdown-menu>
-            </template>
-          </el-dropdown>
-        </div>
-      </div>
-
-      <!-- 主题内容和回复列表 -->
-      <div class="posts-container">
-        <!-- 主楼 -->
-        <div class="post-item main-post">
-          <div class="post-header">
-            <div class="floor-number">#1</div>
-            <div class="post-author">
-              <el-avatar :size="48">{{ topic.author.charAt(0) }}</el-avatar>
-              <div class="author-info">
-                <span class="author-name">{{ topic.author }}</span>
-                <span class="author-title">{{ topic.authorTitle || '会员' }}</span>
-                <div class="author-stats">
-                  <span>帖子: {{ topic.authorPosts || 0 }}</span>
-                  <span>声望: {{ topic.authorReputation || 0 }}</span>
-                </div>
-              </div>
-            </div>
-            <div class="post-time">
-              {{ formatDateTime(topic.createTime) }}
-            </div>
-          </div>
-          
-          <div class="post-content">
-            <div class="content-text" v-html="formatContent(topic.content)"></div>
-          </div>
-          
-          <div class="post-actions">
-            <el-button type="text" size="small" @click="likePost(topic.id)">
-              <el-icon><Like /></el-icon>
-              {{ topic.likes || 0 }}
-            </el-button>
-            <el-button type="text" size="small" @click="quotePost(topic)">
-              <el-icon><ChatDotRound /></el-icon>
-              引用
-            </el-button>
-            <el-button type="text" size="small" @click="reportPost(topic.id)">
-              <el-icon><Flag /></el-icon>
-              举报
-            </el-button>
-          </div>
-        </div>
-
-        <!-- 回复列表 -->
-        <div
-          v-for="(reply, index) in replies"
-          :key="reply.id"
-          class="post-item reply-post"
-        >
-          <div class="post-header">
-            <div class="floor-number">#{{ index + 2 }}</div>
-            <div class="post-author">
-              <el-avatar :size="48">{{ reply.author.charAt(0) }}</el-avatar>
-              <div class="author-info">
-                <span class="author-name">{{ reply.author }}</span>
-                <span class="author-title">{{ reply.authorTitle || '会员' }}</span>
-                <div class="author-stats">
-                  <span>帖子: {{ reply.authorPosts || 0 }}</span>
-                  <span>声望: {{ reply.authorReputation || 0 }}</span>
-                </div>
-              </div>
-            </div>
-            <div class="post-time">
-              {{ formatDateTime(reply.createTime) }}
-            </div>
-          </div>
-          
-          <div class="post-content">
-            <div v-if="reply.quotedPost" class="quoted-content">
-              <div class="quote-header">
-                <el-icon><ChatDotRound /></el-icon>
-                <span>{{ reply.quotedPost.author }} 发表于 {{ formatDateTime(reply.quotedPost.time) }}</span>
-              </div>
-              <div class="quote-text">{{ reply.quotedPost.content }}</div>
-            </div>
-            <div class="content-text" v-html="formatContent(reply.content)"></div>
-          </div>
-          
-          <div class="post-actions">
-            <el-button type="text" size="small" @click="likePost(reply.id)">
-              <el-icon><Like /></el-icon>
-              {{ reply.likes || 0 }}
-            </el-button>
-            <el-button type="text" size="small" @click="quotePost(reply)">
-              <el-icon><ChatDotRound /></el-icon>
-              引用
-            </el-button>
-            <el-button type="text" size="small" @click="reportPost(reply.id)">
-              <el-icon><Flag /></el-icon>
-              举报
-            </el-button>
-          </div>
-        </div>
-      </div>
-
-      <!-- 分页 -->
-      <div class="pagination-wrapper">
-        <el-pagination
-          v-model:current-page="currentPage"
-          v-model:page-size="pageSize"
-          :page-sizes="[10, 20, 50]"
-          :total="totalReplies"
-          layout="total, sizes, prev, pager, next, jumper"
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        />
-      </div>
-
-      <!-- 快速回复 -->
-      <div v-if="!topic.closed" class="quick-reply">
-        <h3>快速回复</h3>
-        <el-input
-          v-model="quickReplyContent"
-          type="textarea"
-          :rows="4"
-          placeholder="输入你的回复..."
-          maxlength="2000"
-          show-word-limit
-        />
-        <div class="quick-reply-actions">
-          <el-button @click="clearQuickReply">清空</el-button>
-          <el-button type="primary" @click="submitQuickReply" :loading="submittingReply">
-            发表回复
-          </el-button>
-        </div>
-      </div>
-    </div>
-
-    <!-- 回复对话框 -->
-    <el-dialog
-      v-model="showReplyDialog"
-      title="回复主题"
-      width="700px"
-      :before-close="handleCloseReplyDialog"
-    >
-      <el-form
-        ref="replyFormRef"
-        :model="replyForm"
-        :rules="replyRules"
-        label-width="80px"
-      >
-        <el-form-item v-if="quotedContent" label="引用内容">
-          <div class="quoted-preview">
-            <div class="quote-header">
-              <span>{{ quotedContent.author }}</span>
-            </div>
-            <div class="quote-content">{{ quotedContent.content }}</div>
-            <el-button type="text" size="small" @click="clearQuote">
-              清除引用
-            </el-button>
-          </div>
-        </el-form-item>
-        
-        <el-form-item label="回复内容" prop="content">
-          <el-input
-            v-model="replyForm.content"
-            type="textarea"
-            :rows="8"
-            placeholder="请输入回复内容..."
-            maxlength="5000"
-            show-word-limit
-          />
-        </el-form-item>
-      </el-form>
-      
-      <template #footer>
-        <el-button @click="handleCloseReplyDialog">取消</el-button>
-        <el-button type="primary" @click="submitReply" :loading="submittingReply">
-          发表回复
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { ref, reactive, onMounted } from 'vue'
-import { useRoute, useRouter } from 'vue-router'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import {
-  Edit,
-  More,
-  View,
-  Comment,
-  Like,
-  ChatDotRound,
-  Flag,
-  ArrowDown
-} from '@element-plus/icons-vue'
-
-export default {
-  name: 'ForumTopicView',
-  setup() {
-    const route = useRoute()
-    const router = useRouter()
-    const replyFormRef = ref(null)
-    
-    const showReplyDialog = ref(false)
-    const submittingReply = ref(false)
-    const isFavorited = ref(false)
-    const currentPage = ref(1)
-    const pageSize = ref(20)
-    const totalReplies = ref(0)
-    const quickReplyContent = ref('')
-    const quotedContent = ref(null)
-    
-    const topic = ref({
-      id: 1,
-      title: '2024年度最佳PT站点推荐与对比分析',
-      sectionId: 1,
-      sectionName: '站务讨论',
-      author: 'PTExpert',
-      authorTitle: '资深会员',
-      authorPosts: 1256,
-      authorReputation: 2890,
-      createTime: '2025-06-01T10:30:00',
-      content: `
-        <p>大家好,作为一个使用PT站点多年的老用户,我想和大家分享一下2024年各大PT站点的使用体验和对比分析。</p>
-        
-        <h3>评测标准</h3>
-        <ul>
-          <li>资源丰富度:种子数量、更新速度、稀有资源</li>
-          <li>用户体验:界面设计、功能完善度、响应速度</li>
-          <li>社区氛围:用户活跃度、互帮互助程度</li>
-          <li>规则友好性:考核难度、分享率要求、保种要求</li>
-        </ul>
-        
-        <h3>推荐站点</h3>
-        <p>经过综合评测,以下几个站点值得推荐:</p>
-        <ol>
-          <li><strong>站点A</strong>:资源最全,更新最快,适合影视爱好者</li>
-          <li><strong>站点B</strong>:音乐资源丰富,无损居多,音质发烧友首选</li>
-          <li><strong>站点C</strong>:软件资源全面,更新及时,开发者必备</li>
-        </ol>
-        
-        <p>具体的详细评测报告我会在后续回复中逐一介绍,欢迎大家讨论和补充!</p>
-      `,
-      views: 2856,
-      replies: 147,
-      likes: 89,
-      tags: ['PT站点', '推荐', '对比'],
-      pinned: true,
-      hot: true,
-      closed: false
-    })
-    
-    const replies = ref([
-      {
-        id: 2,
-        author: 'MovieLover88',
-        authorTitle: '影视达人',
-        authorPosts: 567,
-        authorReputation: 1234,
-        createTime: '2025-06-01T11:15:00',
-        content: '感谢楼主的详细分析!特别期待站点A的详细评测,最近正在寻找好的影视资源站点。',
-        likes: 12
-      },
-      {
-        id: 3,
-        author: 'TechGuru',
-        authorTitle: '技术专家',
-        authorPosts: 890,
-        authorReputation: 2156,
-        createTime: '2025-06-01T12:30:00',
-        content: '站点C确实不错,软件资源很全面。不过楼主能不能也评测一下游戏类的PT站点?',
-        likes: 8,
-        quotedPost: {
-          author: 'PTExpert',
-          time: '2025-06-01T10:30:00',
-          content: '站点C:软件资源全面,更新及时,开发者必备'
-        }
-      }
-    ])
-    
-    const replyForm = reactive({
-      content: ''
-    })
-    
-    const replyRules = {
-      content: [
-        { required: true, message: '请输入回复内容', trigger: 'blur' },
-        { min: 5, max: 5000, message: '内容长度在 5 到 5000 个字符', trigger: 'blur' }
-      ]
-    }
-    
-    onMounted(() => {
-      const topicId = route.params.id
-      fetchTopicDetail(topicId)
-    })
-    
-    const fetchTopicDetail = async (id) => {
-      try {
-        console.log('获取主题详情:', id)
-        totalReplies.value = 147
-      } catch (error) {
-        ElMessage.error('获取主题详情失败')
-        router.back()
-      }
-    }
-    
-    const formatDateTime = (dateString) => {
-      const date = new Date(dateString)
-      return date.toLocaleString('zh-CN', {
-        year: 'numeric',
-        month: '2-digit',
-        day: '2-digit',
-        hour: '2-digit',
-        minute: '2-digit'
-      })
-    }
-    
-    const formatContent = (content) => {
-      return content.replace(/\n/g, '<br>')
-    }
-    
-    const handleTopicAction = (command) => {
-      switch (command) {
-        case 'favorite':
-          isFavorited.value = !isFavorited.value
-          ElMessage.success(isFavorited.value ? '已收藏' : '已取消收藏')
-          break
-        case 'share':
-          navigator.clipboard.writeText(window.location.href)
-          ElMessage.success('链接已复制到剪贴板')
-          break
-        case 'report':
-          reportPost(topic.value.id)
-          break
-      }
-    }
-    
-    const likePost = (postId) => {
-      if (postId === topic.value.id) {
-        topic.value.likes = (topic.value.likes || 0) + 1
-      } else {
-        const reply = replies.value.find(r => r.id === postId)
-        if (reply) {
-          reply.likes = (reply.likes || 0) + 1
-        }
-      }
-      ElMessage.success('点赞成功')
-    }
-    
-    const quotePost = (post) => {
-      quotedContent.value = {
-        author: post.author,
-        content: post.content.replace(/<[^>]*>/g, '').substring(0, 100) + '...',
-        time: post.createTime
-      }
-      showReplyDialog.value = true
-    }
-    
-    const reportPost = async (postId) => {
-      try {
-        await ElMessageBox.prompt('请说明举报原因', '举报内容', {
-          confirmButtonText: '提交举报',
-          cancelButtonText: '取消',
-          inputType: 'textarea',
-          inputPlaceholder: '请详细说明举报原因...'
-        })
-        
-        ElMessage.success('举报已提交,我们会尽快处理')
-      } catch {
-        // 用户取消
-      }
-    }
-    
-    const clearQuote = () => {
-      quotedContent.value = null
-    }
-    
-    const handleCloseReplyDialog = () => {
-      if (replyForm.content) {
-        ElMessageBox.confirm(
-          '确定要关闭吗?未保存的内容将会丢失。',
-          '提示',
-          {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning'
-          }
-        ).then(() => {
-          resetReplyForm()
-          showReplyDialog.value = false
-        }).catch(() => {
-          // 用户取消
-        })
-      } else {
-        resetReplyForm()
-        showReplyDialog.value = false
-      }
-    }
-    
-    const submitReply = async () => {
-      try {
-        await replyFormRef.value?.validate()
-        
-        submittingReply.value = true
-        
-        await new Promise(resolve => setTimeout(resolve, 1500))
-        
-        const newReply = {
-          id: Date.now(),
-          author: localStorage.getItem('username') || '用户',
-          authorTitle: '会员',
-          authorPosts: 0,
-          authorReputation: 0,
-          createTime: new Date().toISOString(),
-          content: replyForm.content,
-          likes: 0,
-          quotedPost: quotedContent.value
-        }
-        
-        replies.value.push(newReply)
-        topic.value.replies += 1
-        
-        ElMessage.success('回复发表成功!')
-        resetReplyForm()
-        showReplyDialog.value = false
-        
-      } catch (error) {
-        console.error('表单验证失败:', error)
-      } finally {
-        submittingReply.value = false
-      }
-    }
-    
-    const submitQuickReply = async () => {
-      if (!quickReplyContent.value.trim()) {
-        ElMessage.warning('请输入回复内容')
-        return
-      }
-      
-      submittingReply.value = true
-      try {
-        await new Promise(resolve => setTimeout(resolve, 1000))
-        
-        const newReply = {
-          id: Date.now(),
-          author: localStorage.getItem('username') || '用户',
-          authorTitle: '会员',
-          authorPosts: 0,
-          authorReputation: 0,
-          createTime: new Date().toISOString(),
-          content: quickReplyContent.value,
-          likes: 0
-        }
-        
-        replies.value.push(newReply)
-        topic.value.replies += 1
-        quickReplyContent.value = ''
-        
-        ElMessage.success('回复发表成功!')
-      } catch (error) {
-        ElMessage.error('发表回复失败')
-      } finally {
-        submittingReply.value = false
-      }
-    }
-    
-    const clearQuickReply = () => {
-      quickReplyContent.value = ''
-    }
-    
-    const resetReplyForm = () => {
-      replyFormRef.value?.resetFields()
-      replyForm.content = ''
-      quotedContent.value = null
-    }
-    
-    const handleSizeChange = (size) => {
-      pageSize.value = size
-      currentPage.value = 1
-    }
-    
-    const handleCurrentChange = (page) => {
-      currentPage.value = page
-    }
-    
-    return {
-      showReplyDialog,
-      submittingReply,
-      isFavorited,
-      currentPage,
-      pageSize,
-      totalReplies,
-      quickReplyContent,
-      quotedContent,
-      topic,
-      replies,
-      replyForm,
-      replyRules,
-      replyFormRef,
-      formatDateTime,
-      formatContent,
-      handleTopicAction,
-      likePost,
-      quotePost,
-      reportPost,
-      clearQuote,
-      handleCloseReplyDialog,
-      submitReply,
-      submitQuickReply,
-      clearQuickReply,
-      handleSizeChange,
-      handleCurrentChange,
-      Edit,
-      More,
-      View,
-      Comment,
-      Like,
-      ChatDotRound,
-      Flag,
-      ArrowDown
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.topic-detail-page {
-  max-width: 1000px;
-  margin: 0 auto;
-  padding: 24px;
-  background: #f5f5f5;
-  min-height: 100vh;
-}
-
-.breadcrumb {
-  margin-bottom: 16px;
-}
-
-.topic-header {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  display: flex;
-  justify-content: space-between;
-  align-items: flex-start;
-  gap: 24px;
-  
-  .topic-info {
-    flex: 1;
-    
-    .topic-title-row {
-      display: flex;
-      align-items: center;
-      gap: 12px;
-      margin-bottom: 12px;
-      
-      .topic-title {
-        font-size: 24px;
-        font-weight: 600;
-        color: #2c3e50;
-        margin: 0;
-        flex: 1;
-      }
-      
-      .topic-status {
-        .el-tag {
-          margin-left: 8px;
-        }
-      }
-    }
-    
-    .topic-tags {
-      margin-bottom: 16px;
-      
-      .el-tag {
-        margin-right: 8px;
-      }
-    }
-    
-    .topic-meta {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      
-      .author-info {
-        display: flex;
-        align-items: center;
-        gap: 12px;
-        
-        .author-details {
-          .author-name {
-            display: block;
-            font-weight: 600;
-            color: #2c3e50;
-            font-size: 14px;
-          }
-          
-          .post-time {
-            display: block;
-            font-size: 12px;
-            color: #909399;
-          }
-        }
-      }
-      
-      .topic-stats {
-        display: flex;
-        gap: 16px;
-        
-        .stat-item {
-          display: flex;
-          align-items: center;
-          gap: 4px;
-          font-size: 14px;
-          color: #7f8c8d;
-        }
-      }
-    }
-  }
-  
-  .topic-actions {
-    display: flex;
-    gap: 12px;
-    flex-shrink: 0;
-  }
-}
-
-.posts-container {
-  .post-item {
-    background: #fff;
-    border-radius: 12px;
-    margin-bottom: 16px;
-    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-    overflow: hidden;
-    
-    &.main-post {
-      border-left: 4px solid #409eff;
-    }
-    
-    .post-header {
-      background: #f8f9fa;
-      padding: 16px 24px;
-      display: flex;
-      align-items: center;
-      gap: 16px;
-      border-bottom: 1px solid #f0f0f0;
-      
-      .floor-number {
-        background: #409eff;
-        color: white;
-        padding: 4px 8px;
-        border-radius: 4px;
-        font-size: 12px;
-        font-weight: 600;
-        min-width: 32px;
-        text-align: center;
-      }
-      
-      .post-author {
-        display: flex;
-        align-items: center;
-        gap: 12px;
-        flex: 1;
-        
-        .author-info {
-          .author-name {
-            display: block;
-            font-weight: 600;
-            color: #2c3e50;
-            font-size: 14px;
-          }
-          
-          .author-title {
-            display: block;
-            font-size: 12px;
-            color: #67c23a;
-            margin-bottom: 4px;
-          }
-          
-          .author-stats {
-            font-size: 11px;
-            color: #909399;
-            
-            span {
-              margin-right: 12px;
-            }
-          }
-        }
-      }
-      
-      .post-time {
-        font-size: 12px;
-        color: #909399;
-      }
-    }
-    
-    .post-content {
-      padding: 24px;
-      
-      .quoted-content {
-        background: #f5f7fa;
-        border-left: 4px solid #e4e7ed;
-        padding: 12px 16px;
-        margin-bottom: 16px;
-        border-radius: 0 4px 4px 0;
-        
-        .quote-header {
-          display: flex;
-          align-items: center;
-          gap: 8px;
-          font-size: 12px;
-          color: #909399;
-          margin-bottom: 8px;
-        }
-        
-        .quote-text {
-          font-size: 14px;
-          color: #606266;
-          line-height: 1.5;
-        }
-      }
-      
-      .content-text {
-        line-height: 1.6;
-        color: #2c3e50;
-        
-        :deep(h3) {
-          color: #2c3e50;
-          font-size: 18px;
-          font-weight: 600;
-          margin: 20px 0 12px 0;
-        }
-        
-        :deep(p) {
-          margin-bottom: 12px;
-        }
-        
-        :deep(ul), :deep(ol) {
-          margin: 12px 0;
-          padding-left: 20px;
-          
-          li {
-            margin-bottom: 8px;
-          }
-        }
-      }
-    }
-    
-    .post-actions {
-      padding: 12px 24px;
-      border-top: 1px solid #f0f0f0;
-      background: #fafafa;
-      
-      .el-button {
-        margin-right: 16px;
-        
-        .el-icon {
-          margin-right: 4px;
-        }
-      }
-    }
-  }
-}
-
-.pagination-wrapper {
-  text-align: center;
-  margin: 24px 0;
-}
-
-.quick-reply {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  h3 {
-    font-size: 18px;
-    font-weight: 600;
-    color: #2c3e50;
-    margin: 0 0 16px 0;
-  }
-  
-  .quick-reply-actions {
-    margin-top: 12px;
-    text-align: right;
-    
-    .el-button {
-      margin-left: 12px;
-    }
-  }
-}
-
-.quoted-preview {
-  background: #f5f7fa;
-  border: 1px solid #e4e7ed;
-  border-radius: 4px;
-  padding: 12px;
-  
-  .quote-header {
-    font-size: 12px;
-    color: #909399;
-    margin-bottom: 8px;
-  }
-  
-  .quote-content {
-    font-size: 14px;
-    color: #606266;
-    margin-bottom: 8px;
-    line-height: 1.5;
-  }
-}
-
-@media (max-width: 768px) {
-  .topic-detail-page {
-    padding: 16px;
-  }
-  
-  .topic-header {
-    flex-direction: column;
-    align-items: flex-start;
-    
-    .topic-actions {
-      width: 100%;
-      justify-content: flex-end;
-    }
-  }
-  
-  .post-header {
-    flex-direction: column;
-    align-items: flex-start;
-    gap: 12px;
-    
-    .floor-number {
-      align-self: flex-start;
-    }
-  }
-  
-  .post-content {
-    padding: 16px;
-  }
-  
-  .post-actions {
-    padding: 12px 16px;
-    
-    .el-button {
-      margin-right: 8px;
-      margin-bottom: 8px;
-    }
-  }
-}
+<template>

+  <div class="topic-detail-page">

+    <div class="page-container">

+      <!-- 面包屑导航 -->

+      <div class="breadcrumb">

+        <el-breadcrumb separator="/">

+          <el-breadcrumb-item :to="{ path: '/forum' }">论坛首页</el-breadcrumb-item>

+          <el-breadcrumb-item :to="{ path: `/forum/section/${topic.sectionId}` }">

+            {{ topic.sectionName }}

+          </el-breadcrumb-item>

+          <el-breadcrumb-item>{{ topic.title }}</el-breadcrumb-item>

+        </el-breadcrumb>

+      </div>

+

+      <!-- 主题信息 -->

+      <div class="topic-header">

+        <div class="topic-info">

+          <div class="topic-title-row">

+            <h1 class="topic-title">{{ topic.title }}</h1>

+            <div class="topic-status">

+              <el-tag v-if="topic.pinned" type="warning" size="small">置顶</el-tag>

+              <el-tag v-if="topic.hot" type="danger" size="small">热门</el-tag>

+              <el-tag v-if="topic.closed" type="info" size="small">已关闭</el-tag>

+            </div>

+          </div>

+          

+          <div class="topic-tags">

+            <el-tag

+              v-for="tag in topic.tags"

+              :key="tag"

+              size="small"

+              type="info"

+              effect="plain"

+            >

+              {{ tag }}

+            </el-tag>

+          </div>

+          

+          <div class="topic-meta">

+            <div class="author-info">

+              <el-avatar :size="32">{{ topic.author.charAt(0) }}</el-avatar>

+              <div class="author-details">

+                <span class="author-name">{{ topic.author }}</span>

+                <span class="post-time">发表于 {{ formatDateTime(topic.createTime) }}</span>

+              </div>

+            </div>

+            

+            <div class="topic-stats">

+              <div class="stat-item">

+                <el-icon><View /></el-icon>

+                <span>{{ topic.views }} 浏览</span>

+              </div>

+              <div class="stat-item">

+                <el-icon><Comment /></el-icon>

+                <span>{{ topic.replies }} 回复</span>

+              </div>

+            </div>

+          </div>

+        </div>

+        

+        <div class="topic-actions">

+          <el-button 

+            v-if="!topic.closed" 

+            type="primary" 

+            :icon="Edit" 

+            @click="showReplyDialog = true"

+          >

+            回复主题

+          </el-button>

+          <el-dropdown @command="handleTopicAction">

+            <el-button :icon="More">

+              更多 <el-icon class="el-icon--right"><ArrowDown /></el-icon>

+            </el-button>

+            <template #dropdown>

+              <el-dropdown-menu>

+                <el-dropdown-item command="favorite">

+                  {{ isFavorited ? '取消收藏' : '收藏主题' }}

+                </el-dropdown-item>

+                <el-dropdown-item command="share">分享主题</el-dropdown-item>

+                <el-dropdown-item command="report" divided>举报主题</el-dropdown-item>

+              </el-dropdown-menu>

+            </template>

+          </el-dropdown>

+        </div>

+      </div>

+

+      <!-- 主题内容和回复列表 -->

+      <div class="posts-container">

+        <!-- 主楼 -->

+        <div class="post-item main-post">

+          <div class="post-header">

+            <div class="floor-number">#1</div>

+            <div class="post-author">

+              <el-avatar :size="48">{{ topic.author.charAt(0) }}</el-avatar>

+              <div class="author-info">

+                <span class="author-name">{{ topic.author }}</span>

+                <span class="author-title">{{ topic.authorTitle || '会员' }}</span>

+                <div class="author-stats">

+                  <span>帖子: {{ topic.authorPosts || 0 }}</span>

+                  <span>声望: {{ topic.authorReputation || 0 }}</span>

+                </div>

+              </div>

+            </div>

+            <div class="post-time">

+              {{ formatDateTime(topic.createTime) }}

+            </div>

+          </div>

+          

+          <div class="post-content">

+            <div class="content-text" v-html="formatContent(topic.content)"></div>

+          </div>

+          

+          <div class="post-actions">

+            <el-button type="text" size="small" @click="likePost(topic.id)">

+              <el-icon><Like /></el-icon>

+              {{ topic.likes || 0 }}

+            </el-button>

+            <el-button type="text" size="small" @click="quotePost(topic)">

+              <el-icon><ChatDotRound /></el-icon>

+              引用

+            </el-button>

+            <el-button type="text" size="small" @click="reportPost(topic.id)">

+              <el-icon><Flag /></el-icon>

+              举报

+            </el-button>

+          </div>

+        </div>

+

+        <!-- 回复列表 -->

+        <div

+          v-for="(reply, index) in replies"

+          :key="reply.id"

+          class="post-item reply-post"

+        >

+          <div class="post-header">

+            <div class="floor-number">#{{ index + 2 }}</div>

+            <div class="post-author">

+              <el-avatar :size="48">{{ reply.author.charAt(0) }}</el-avatar>

+              <div class="author-info">

+                <span class="author-name">{{ reply.author }}</span>

+                <span class="author-title">{{ reply.authorTitle || '会员' }}</span>

+                <div class="author-stats">

+                  <span>帖子: {{ reply.authorPosts || 0 }}</span>

+                  <span>声望: {{ reply.authorReputation || 0 }}</span>

+                </div>

+              </div>

+            </div>

+            <div class="post-time">

+              {{ formatDateTime(reply.createTime) }}

+            </div>

+          </div>

+          

+          <div class="post-content">

+            <div v-if="reply.quotedPost" class="quoted-content">

+              <div class="quote-header">

+                <el-icon><ChatDotRound /></el-icon>

+                <span>{{ reply.quotedPost.author }} 发表于 {{ formatDateTime(reply.quotedPost.time) }}</span>

+              </div>

+              <div class="quote-text">{{ reply.quotedPost.content }}</div>

+            </div>

+            <div class="content-text" v-html="formatContent(reply.content)"></div>

+          </div>

+          

+          <div class="post-actions">

+            <el-button type="text" size="small" @click="likePost(reply.id)">

+              <el-icon><Like /></el-icon>

+              {{ reply.likes || 0 }}

+            </el-button>

+            <el-button type="text" size="small" @click="quotePost(reply)">

+              <el-icon><ChatDotRound /></el-icon>

+              引用

+            </el-button>

+            <el-button type="text" size="small" @click="reportPost(reply.id)">

+              <el-icon><Flag /></el-icon>

+              举报

+            </el-button>

+          </div>

+        </div>

+      </div>

+

+      <!-- 分页 -->

+      <div class="pagination-wrapper">

+        <el-pagination

+          v-model:current-page="currentPage"

+          v-model:page-size="pageSize"

+          :page-sizes="[10, 20, 50]"

+          :total="totalReplies"

+          layout="total, sizes, prev, pager, next, jumper"

+          @size-change="handleSizeChange"

+          @current-change="handleCurrentChange"

+        />

+      </div>

+

+      <!-- 快速回复 -->

+      <div v-if="!topic.closed" class="quick-reply">

+        <h3>快速回复</h3>

+        <el-input

+          v-model="quickReplyContent"

+          type="textarea"

+          :rows="4"

+          placeholder="输入你的回复..."

+          maxlength="2000"

+          show-word-limit

+        />

+        <div class="quick-reply-actions">

+          <el-button @click="clearQuickReply">清空</el-button>

+          <el-button type="primary" @click="submitQuickReply" :loading="submittingReply">

+            发表回复

+          </el-button>

+        </div>

+      </div>

+    </div>

+

+    <!-- 回复对话框 -->

+    <el-dialog

+      v-model="showReplyDialog"

+      title="回复主题"

+      width="700px"

+      :before-close="handleCloseReplyDialog"

+    >

+      <el-form

+        ref="replyFormRef"

+        :model="replyForm"

+        :rules="replyRules"

+        label-width="80px"

+      >

+        <el-form-item v-if="quotedContent" label="引用内容">

+          <div class="quoted-preview">

+            <div class="quote-header">

+              <span>{{ quotedContent.author }}</span>

+            </div>

+            <div class="quote-content">{{ quotedContent.content }}</div>

+            <el-button type="text" size="small" @click="clearQuote">

+              清除引用

+            </el-button>

+          </div>

+        </el-form-item>

+        

+        <el-form-item label="回复内容" prop="content">

+          <el-input

+            v-model="replyForm.content"

+            type="textarea"

+            :rows="8"

+            placeholder="请输入回复内容..."

+            maxlength="5000"

+            show-word-limit

+          />

+        </el-form-item>

+      </el-form>

+      

+      <template #footer>

+        <el-button @click="handleCloseReplyDialog">取消</el-button>

+        <el-button type="primary" @click="submitReply" :loading="submittingReply">

+          发表回复

+        </el-button>

+      </template>

+    </el-dialog>

+  </div>

+</template>

+

+<script>

+import { ref, reactive, onMounted } from 'vue'

+import { useRoute, useRouter } from 'vue-router'

+import { ElMessage, ElMessageBox } from 'element-plus'

+import {

+  Edit,

+  More,

+  View,

+  Comment,

+  Like,

+  ChatDotRound,

+  Flag,

+  ArrowDown

+} from '@element-plus/icons-vue'

+

+export default {

+  name: 'ForumTopicView',

+  setup() {

+    const route = useRoute()

+    const router = useRouter()

+    const replyFormRef = ref(null)

+    

+    const showReplyDialog = ref(false)

+    const submittingReply = ref(false)

+    const isFavorited = ref(false)

+    const currentPage = ref(1)

+    const pageSize = ref(20)

+    const totalReplies = ref(0)

+    const quickReplyContent = ref('')

+    const quotedContent = ref(null)

+    

+    const topic = ref({

+      id: 1,

+      title: '2024年度最佳PT站点推荐与对比分析',

+      sectionId: 1,

+      sectionName: '站务讨论',

+      author: 'PTExpert',

+      authorTitle: '资深会员',

+      authorPosts: 1256,

+      authorReputation: 2890,

+      createTime: '2025-06-01T10:30:00',

+      content: `

+        <p>大家好,作为一个使用PT站点多年的老用户,我想和大家分享一下2024年各大PT站点的使用体验和对比分析。</p>

+        

+        <h3>评测标准</h3>

+        <ul>

+          <li>资源丰富度:种子数量、更新速度、稀有资源</li>

+          <li>用户体验:界面设计、功能完善度、响应速度</li>

+          <li>社区氛围:用户活跃度、互帮互助程度</li>

+          <li>规则友好性:考核难度、分享率要求、保种要求</li>

+        </ul>

+        

+        <h3>推荐站点</h3>

+        <p>经过综合评测,以下几个站点值得推荐:</p>

+        <ol>

+          <li><strong>站点A</strong>:资源最全,更新最快,适合影视爱好者</li>

+          <li><strong>站点B</strong>:音乐资源丰富,无损居多,音质发烧友首选</li>

+          <li><strong>站点C</strong>:软件资源全面,更新及时,开发者必备</li>

+        </ol>

+        

+        <p>具体的详细评测报告我会在后续回复中逐一介绍,欢迎大家讨论和补充!</p>

+      `,

+      views: 2856,

+      replies: 147,

+      likes: 89,

+      tags: ['PT站点', '推荐', '对比'],

+      pinned: true,

+      hot: true,

+      closed: false

+    })

+    

+    const replies = ref([

+      {

+        id: 2,

+        author: 'MovieLover88',

+        authorTitle: '影视达人',

+        authorPosts: 567,

+        authorReputation: 1234,

+        createTime: '2025-06-01T11:15:00',

+        content: '感谢楼主的详细分析!特别期待站点A的详细评测,最近正在寻找好的影视资源站点。',

+        likes: 12

+      },

+      {

+        id: 3,

+        author: 'TechGuru',

+        authorTitle: '技术专家',

+        authorPosts: 890,

+        authorReputation: 2156,

+        createTime: '2025-06-01T12:30:00',

+        content: '站点C确实不错,软件资源很全面。不过楼主能不能也评测一下游戏类的PT站点?',

+        likes: 8,

+        quotedPost: {

+          author: 'PTExpert',

+          time: '2025-06-01T10:30:00',

+          content: '站点C:软件资源全面,更新及时,开发者必备'

+        }

+      }

+    ])

+    

+    const replyForm = reactive({

+      content: ''

+    })

+    

+    const replyRules = {

+      content: [

+        { required: true, message: '请输入回复内容', trigger: 'blur' },

+        { min: 5, max: 5000, message: '内容长度在 5 到 5000 个字符', trigger: 'blur' }

+      ]

+    }

+    

+    onMounted(() => {

+      const topicId = route.params.id

+      fetchTopicDetail(topicId)

+    })

+    

+    const fetchTopicDetail = async (id) => {

+      try {

+        console.log('获取主题详情:', id)

+        totalReplies.value = 147

+      } catch (error) {

+        ElMessage.error('获取主题详情失败')

+        router.back()

+      }

+    }

+    

+    const formatDateTime = (dateString) => {

+      const date = new Date(dateString)

+      return date.toLocaleString('zh-CN', {

+        year: 'numeric',

+        month: '2-digit',

+        day: '2-digit',

+        hour: '2-digit',

+        minute: '2-digit'

+      })

+    }

+    

+    const formatContent = (content) => {

+      return content.replace(/\n/g, '<br>')

+    }

+    

+    const handleTopicAction = (command) => {

+      switch (command) {

+        case 'favorite':

+          isFavorited.value = !isFavorited.value

+          ElMessage.success(isFavorited.value ? '已收藏' : '已取消收藏')

+          break

+        case 'share':

+          navigator.clipboard.writeText(window.location.href)

+          ElMessage.success('链接已复制到剪贴板')

+          break

+        case 'report':

+          reportPost(topic.value.id)

+          break

+      }

+    }

+    

+    const likePost = (postId) => {

+      if (postId === topic.value.id) {

+        topic.value.likes = (topic.value.likes || 0) + 1

+      } else {

+        const reply = replies.value.find(r => r.id === postId)

+        if (reply) {

+          reply.likes = (reply.likes || 0) + 1

+        }

+      }

+      ElMessage.success('点赞成功')

+    }

+    

+    const quotePost = (post) => {

+      quotedContent.value = {

+        author: post.author,

+        content: post.content.replace(/<[^>]*>/g, '').substring(0, 100) + '...',

+        time: post.createTime

+      }

+      showReplyDialog.value = true

+    }

+    

+    const reportPost = async (postId) => {

+      try {

+        await ElMessageBox.prompt('请说明举报原因', '举报内容', {

+          confirmButtonText: '提交举报',

+          cancelButtonText: '取消',

+          inputType: 'textarea',

+          inputPlaceholder: '请详细说明举报原因...'

+        })

+        

+        ElMessage.success('举报已提交,我们会尽快处理')

+      } catch {

+        // 用户取消

+      }

+    }

+    

+    const clearQuote = () => {

+      quotedContent.value = null

+    }

+    

+    const handleCloseReplyDialog = () => {

+      if (replyForm.content) {

+        ElMessageBox.confirm(

+          '确定要关闭吗?未保存的内容将会丢失。',

+          '提示',

+          {

+            confirmButtonText: '确定',

+            cancelButtonText: '取消',

+            type: 'warning'

+          }

+        ).then(() => {

+          resetReplyForm()

+          showReplyDialog.value = false

+        }).catch(() => {

+          // 用户取消

+        })

+      } else {

+        resetReplyForm()

+        showReplyDialog.value = false

+      }

+    }

+    

+    const submitReply = async () => {

+      try {

+        await replyFormRef.value?.validate()

+        

+        submittingReply.value = true

+        

+        await new Promise(resolve => setTimeout(resolve, 1500))

+        

+        const newReply = {

+          id: Date.now(),

+          author: localStorage.getItem('username') || '用户',

+          authorTitle: '会员',

+          authorPosts: 0,

+          authorReputation: 0,

+          createTime: new Date().toISOString(),

+          content: replyForm.content,

+          likes: 0,

+          quotedPost: quotedContent.value

+        }

+        

+        replies.value.push(newReply)

+        topic.value.replies += 1

+        

+        ElMessage.success('回复发表成功!')

+        resetReplyForm()

+        showReplyDialog.value = false

+        

+      } catch (error) {

+        console.error('表单验证失败:', error)

+      } finally {

+        submittingReply.value = false

+      }

+    }

+    

+    const submitQuickReply = async () => {

+      if (!quickReplyContent.value.trim()) {

+        ElMessage.warning('请输入回复内容')

+        return

+      }

+      

+      submittingReply.value = true

+      try {

+        await new Promise(resolve => setTimeout(resolve, 1000))

+        

+        const newReply = {

+          id: Date.now(),

+          author: localStorage.getItem('username') || '用户',

+          authorTitle: '会员',

+          authorPosts: 0,

+          authorReputation: 0,

+          createTime: new Date().toISOString(),

+          content: quickReplyContent.value,

+          likes: 0

+        }

+        

+        replies.value.push(newReply)

+        topic.value.replies += 1

+        quickReplyContent.value = ''

+        

+        ElMessage.success('回复发表成功!')

+      } catch (error) {

+        ElMessage.error('发表回复失败')

+      } finally {

+        submittingReply.value = false

+      }

+    }

+    

+    const clearQuickReply = () => {

+      quickReplyContent.value = ''

+    }

+    

+    const resetReplyForm = () => {

+      replyFormRef.value?.resetFields()

+      replyForm.content = ''

+      quotedContent.value = null

+    }

+    

+    const handleSizeChange = (size) => {

+      pageSize.value = size

+      currentPage.value = 1

+    }

+    

+    const handleCurrentChange = (page) => {

+      currentPage.value = page

+    }

+    

+    return {

+      showReplyDialog,

+      submittingReply,

+      isFavorited,

+      currentPage,

+      pageSize,

+      totalReplies,

+      quickReplyContent,

+      quotedContent,

+      topic,

+      replies,

+      replyForm,

+      replyRules,

+      replyFormRef,

+      formatDateTime,

+      formatContent,

+      handleTopicAction,

+      likePost,

+      quotePost,

+      reportPost,

+      clearQuote,

+      handleCloseReplyDialog,

+      submitReply,

+      submitQuickReply,

+      clearQuickReply,

+      handleSizeChange,

+      handleCurrentChange,

+      Edit,

+      More,

+      View,

+      Comment,

+      Like,

+      ChatDotRound,

+      Flag,

+      ArrowDown

+    }

+  }

+}

+</script>

+

+<style lang="scss" scoped>

+.topic-detail-page {

+  max-width: 1000px;

+  margin: 0 auto;

+  padding: 24px;

+  background: #f5f5f5;

+  min-height: 100vh;

+}

+

+.breadcrumb {

+  margin-bottom: 16px;

+}

+

+.topic-header {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  display: flex;

+  justify-content: space-between;

+  align-items: flex-start;

+  gap: 24px;

+  

+  .topic-info {

+    flex: 1;

+    

+    .topic-title-row {

+      display: flex;

+      align-items: center;

+      gap: 12px;

+      margin-bottom: 12px;

+      

+      .topic-title {

+        font-size: 24px;

+        font-weight: 600;

+        color: #2c3e50;

+        margin: 0;

+        flex: 1;

+      }

+      

+      .topic-status {

+        .el-tag {

+          margin-left: 8px;

+        }

+      }

+    }

+    

+    .topic-tags {

+      margin-bottom: 16px;

+      

+      .el-tag {

+        margin-right: 8px;

+      }

+    }

+    

+    .topic-meta {

+      display: flex;

+      justify-content: space-between;

+      align-items: center;

+      

+      .author-info {

+        display: flex;

+        align-items: center;

+        gap: 12px;

+        

+        .author-details {

+          .author-name {

+            display: block;

+            font-weight: 600;

+            color: #2c3e50;

+            font-size: 14px;

+          }

+          

+          .post-time {

+            display: block;

+            font-size: 12px;

+            color: #909399;

+          }

+        }

+      }

+      

+      .topic-stats {

+        display: flex;

+        gap: 16px;

+        

+        .stat-item {

+          display: flex;

+          align-items: center;

+          gap: 4px;

+          font-size: 14px;

+          color: #7f8c8d;

+        }

+      }

+    }

+  }

+  

+  .topic-actions {

+    display: flex;

+    gap: 12px;

+    flex-shrink: 0;

+  }

+}

+

+.posts-container {

+  .post-item {

+    background: #fff;

+    border-radius: 12px;

+    margin-bottom: 16px;

+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+    overflow: hidden;

+    

+    &.main-post {

+      border-left: 4px solid #409eff;

+    }

+    

+    .post-header {

+      background: #f8f9fa;

+      padding: 16px 24px;

+      display: flex;

+      align-items: center;

+      gap: 16px;

+      border-bottom: 1px solid #f0f0f0;

+      

+      .floor-number {

+        background: #409eff;

+        color: white;

+        padding: 4px 8px;

+        border-radius: 4px;

+        font-size: 12px;

+        font-weight: 600;

+        min-width: 32px;

+        text-align: center;

+      }

+      

+      .post-author {

+        display: flex;

+        align-items: center;

+        gap: 12px;

+        flex: 1;

+        

+        .author-info {

+          .author-name {

+            display: block;

+            font-weight: 600;

+            color: #2c3e50;

+            font-size: 14px;

+          }

+          

+          .author-title {

+            display: block;

+            font-size: 12px;

+            color: #67c23a;

+            margin-bottom: 4px;

+          }

+          

+          .author-stats {

+            font-size: 11px;

+            color: #909399;

+            

+            span {

+              margin-right: 12px;

+            }

+          }

+        }

+      }

+      

+      .post-time {

+        font-size: 12px;

+        color: #909399;

+      }

+    }

+    

+    .post-content {

+      padding: 24px;

+      

+      .quoted-content {

+        background: #f5f7fa;

+        border-left: 4px solid #e4e7ed;

+        padding: 12px 16px;

+        margin-bottom: 16px;

+        border-radius: 0 4px 4px 0;

+        

+        .quote-header {

+          display: flex;

+          align-items: center;

+          gap: 8px;

+          font-size: 12px;

+          color: #909399;

+          margin-bottom: 8px;

+        }

+        

+        .quote-text {

+          font-size: 14px;

+          color: #606266;

+          line-height: 1.5;

+        }

+      }

+      

+      .content-text {

+        line-height: 1.6;

+        color: #2c3e50;

+        

+        :deep(h3) {

+          color: #2c3e50;

+          font-size: 18px;

+          font-weight: 600;

+          margin: 20px 0 12px 0;

+        }

+        

+        :deep(p) {

+          margin-bottom: 12px;

+        }

+        

+        :deep(ul), :deep(ol) {

+          margin: 12px 0;

+          padding-left: 20px;

+          

+          li {

+            margin-bottom: 8px;

+          }

+        }

+      }

+    }

+    

+    .post-actions {

+      padding: 12px 24px;

+      border-top: 1px solid #f0f0f0;

+      background: #fafafa;

+      

+      .el-button {

+        margin-right: 16px;

+        

+        .el-icon {

+          margin-right: 4px;

+        }

+      }

+    }

+  }

+}

+

+.pagination-wrapper {

+  text-align: center;

+  margin: 24px 0;

+}

+

+.quick-reply {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  h3 {

+    font-size: 18px;

+    font-weight: 600;

+    color: #2c3e50;

+    margin: 0 0 16px 0;

+  }

+  

+  .quick-reply-actions {

+    margin-top: 12px;

+    text-align: right;

+    

+    .el-button {

+      margin-left: 12px;

+    }

+  }

+}

+

+.quoted-preview {

+  background: #f5f7fa;

+  border: 1px solid #e4e7ed;

+  border-radius: 4px;

+  padding: 12px;

+  

+  .quote-header {

+    font-size: 12px;

+    color: #909399;

+    margin-bottom: 8px;

+  }

+  

+  .quote-content {

+    font-size: 14px;

+    color: #606266;

+    margin-bottom: 8px;

+    line-height: 1.5;

+  }

+}

+

+@media (max-width: 768px) {

+  .topic-detail-page {

+    padding: 16px;

+  }

+  

+  .topic-header {

+    flex-direction: column;

+    align-items: flex-start;

+    

+    .topic-actions {

+      width: 100%;

+      justify-content: flex-end;

+    }

+  }

+  

+  .post-header {

+    flex-direction: column;

+    align-items: flex-start;

+    gap: 12px;

+    

+    .floor-number {

+      align-self: flex-start;

+    }

+  }

+  

+  .post-content {

+    padding: 16px;

+  }

+  

+  .post-actions {

+    padding: 12px 16px;

+    

+    .el-button {

+      margin-right: 8px;

+      margin-bottom: 8px;

+    }

+  }

+}

 </style>
\ No newline at end of file
diff --git a/src/views/forum/ForumView.vue b/src/views/forum/ForumView.vue
index e4fa0f9..22345e6 100644
--- a/src/views/forum/ForumView.vue
+++ b/src/views/forum/ForumView.vue
@@ -1,978 +1,978 @@
-<template>
-  <div class="forum-page">
-    <div class="page-container">
-      <!-- 论坛头部 -->
-      <div class="forum-header">
-        <div class="header-content">
-          <h1>社区论坛</h1>
-          <p class="header-description">与其他用户交流讨论,分享经验心得</p>
-          <div class="header-actions">
-            <el-button type="primary" :icon="Edit" @click="showNewTopicDialog = true">
-              发布新帖
-            </el-button>
-          </div>
-        </div>
-      </div>
-
-      <!-- 论坛统计 -->
-      <div class="forum-stats">
-        <div class="stats-grid">
-          <div class="stat-item">
-            <el-icon size="32" color="#409eff"><ChatDotRound /></el-icon>
-            <div class="stat-info">
-              <h3>{{ forumStats.totalTopics }}</h3>
-              <p>主题总数</p>
-            </div>
-          </div>
-          <div class="stat-item">
-            <el-icon size="32" color="#67c23a"><Comment /></el-icon>
-            <div class="stat-info">
-              <h3>{{ forumStats.totalReplies }}</h3>
-              <p>回复总数</p>
-            </div>
-          </div>
-          <div class="stat-item">
-            <el-icon size="32" color="#e6a23c"><User /></el-icon>
-            <div class="stat-info">
-              <h3>{{ forumStats.activeUsers }}</h3>
-              <p>活跃用户</p>
-            </div>
-          </div>
-          <div class="stat-item">
-            <el-icon size="32" color="#f56c6c"><View /></el-icon>
-            <div class="stat-info">
-              <h3>{{ forumStats.todayPosts }}</h3>
-              <p>今日发帖</p>
-            </div>
-          </div>
-        </div>
-      </div>
-
-      <!-- 版块列表 -->
-      <div class="forum-sections">
-        <h2 class="section-title">论坛版块</h2>
-        <div class="sections-list">
-          <div
-            v-for="section in forumSections"
-            :key="section.id"
-            class="section-card"
-            @click="navigateToSection(section.id)"
-          >
-            <div class="section-icon">
-              <el-icon size="48" :color="section.color">
-                <component :is="section.icon" />
-              </el-icon>
-            </div>
-            <div class="section-info">
-              <h3 class="section-name">{{ section.name }}</h3>
-              <p class="section-description">{{ section.description }}</p>
-              <div class="section-stats">
-                <span class="stat">{{ section.topics }} 主题</span>
-                <span class="stat">{{ section.replies }} 回复</span>
-              </div>
-            </div>
-            <div class="section-latest">
-              <div v-if="section.latestTopic" class="latest-topic">
-                <p class="topic-title">{{ section.latestTopic.title }}</p>
-                <div class="topic-meta">
-                  <span class="author">{{ section.latestTopic.author }}</span>
-                  <span class="time">{{ formatTime(section.latestTopic.time) }}</span>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-
-      <!-- 热门主题 -->
-      <div class="hot-topics">
-        <div class="section-header">
-          <h2 class="section-title">热门主题</h2>
-          <el-button type="primary" text @click="$router.push('/forum/topics')">
-            查看全部 <el-icon><ArrowRight /></el-icon>
-          </el-button>
-        </div>
-        <div class="topics-list">
-          <div
-            v-for="topic in hotTopics"
-            :key="topic.id"
-            class="topic-item"
-            @click="navigateToTopic(topic.id)"
-          >
-            <div class="topic-content">
-              <div class="topic-header">
-                <h4 class="topic-title">{{ topic.title }}</h4>
-                <div class="topic-tags">
-                  <el-tag
-                    v-for="tag in topic.tags"
-                    :key="tag"
-                    size="small"
-                    type="info"
-                  >
-                    {{ tag }}
-                  </el-tag>
-                </div>
-              </div>
-              <div class="topic-meta">
-                <div class="author-info">
-                  <el-avatar :size="24">{{ topic.author.charAt(0) }}</el-avatar>
-                  <span class="author-name">{{ topic.author }}</span>
-                </div>
-                <div class="topic-stats">
-                  <span class="stat-item">
-                    <el-icon><View /></el-icon>
-                    {{ topic.views }}
-                  </span>
-                  <span class="stat-item">
-                    <el-icon><Comment /></el-icon>
-                    {{ topic.replies }}
-                  </span>
-                  <span class="time">{{ formatTime(topic.lastReply) }}</span>
-                </div>
-              </div>
-            </div>
-            <div class="topic-status">
-              <el-tag v-if="topic.pinned" type="warning" size="small">置顶</el-tag>
-              <el-tag v-if="topic.hot" type="danger" size="small">热门</el-tag>
-            </div>
-          </div>
-        </div>
-      </div>
-
-      <!-- 最新回复 -->
-      <div class="recent-replies">
-        <h2 class="section-title">最新回复</h2>
-        <div class="replies-list">
-          <div
-            v-for="reply in recentReplies"
-            :key="reply.id"
-            class="reply-item"
-            @click="navigateToTopic(reply.topicId)"
-          >
-            <div class="reply-avatar">
-              <el-avatar :size="40">{{ reply.author.charAt(0) }}</el-avatar>
-            </div>
-            <div class="reply-content">
-              <div class="reply-header">
-                <span class="reply-author">{{ reply.author }}</span>
-                <span class="reply-action">回复了主题</span>
-                <span class="topic-title">{{ reply.topicTitle }}</span>
-              </div>
-              <div class="reply-text">{{ reply.content }}</div>
-              <div class="reply-time">{{ formatTime(reply.time) }}</div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-
-    <!-- 发布新帖对话框 -->
-    <el-dialog
-      v-model="showNewTopicDialog"
-      title="发布新主题"
-      width="600px"
-      :before-close="handleCloseDialog"
-    >
-      <el-form
-        ref="topicFormRef"
-        :model="newTopic"
-        :rules="topicRules"
-        label-width="80px"
-      >
-        <el-form-item label="版块" prop="sectionId">
-          <el-select v-model="newTopic.sectionId" placeholder="选择版块">
-            <el-option
-              v-for="section in forumSections"
-              :key="section.id"
-              :label="section.name"
-              :value="section.id"
-            />
-          </el-select>
-        </el-form-item>
-        
-        <el-form-item label="标题" prop="title">
-          <el-input
-            v-model="newTopic.title"
-            placeholder="请输入主题标题"
-            maxlength="100"
-            show-word-limit
-          />
-        </el-form-item>
-        
-        <el-form-item label="标签">
-          <div class="tags-input">
-            <el-tag
-              v-for="tag in newTopic.tags"
-              :key="tag"
-              closable
-              @close="removeTopicTag(tag)"
-            >
-              {{ tag }}
-            </el-tag>
-            <el-input
-              v-if="tagInputVisible"
-              ref="tagInputRef"
-              v-model="tagInputValue"
-              size="small"
-              @keyup.enter="addTopicTag"
-              @blur="addTopicTag"
-              style="width: 100px;"
-            />
-            <el-button
-              v-else
-              size="small"
-              @click="showTagInput"
-            >
-              + 添加标签
-            </el-button>
-          </div>
-        </el-form-item>
-        
-        <el-form-item label="内容" prop="content">
-          <el-input
-            v-model="newTopic.content"
-            type="textarea"
-            :rows="8"
-            placeholder="请输入主题内容..."
-            maxlength="5000"
-            show-word-limit
-          />
-        </el-form-item>
-      </el-form>
-      
-      <template #footer>
-        <el-button @click="handleCloseDialog">取消</el-button>
-        <el-button type="primary" @click="submitNewTopic" :loading="submitting">
-          发布主题
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { ref, reactive, onMounted, nextTick } from 'vue'
-import { useRouter } from 'vue-router'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import {
-  Edit,
-  ChatDotRound,
-  Comment,
-  User,
-  View,
-  ArrowRight,
-  Film,
-  Headphones,
-  Monitor,
-  GamePad,
-  ChatLineRound,
-  QuestionFilled,
-  Bell
-} from '@element-plus/icons-vue'
-
-export default {
-  name: 'ForumView',
-  setup() {
-    const router = useRouter()
-    const topicFormRef = ref(null)
-    const tagInputRef = ref(null)
-    
-    const showNewTopicDialog = ref(false)
-    const submitting = ref(false)
-    const tagInputVisible = ref(false)
-    const tagInputValue = ref('')
-    
-    const forumStats = reactive({
-      totalTopics: '15,268',
-      totalReplies: '89,456',
-      activeUsers: '2,341',
-      todayPosts: '156'
-    })
-    
-    const newTopic = reactive({
-      sectionId: '',
-      title: '',
-      content: '',
-      tags: []
-    })
-    
-    const topicRules = {
-      sectionId: [
-        { required: true, message: '请选择版块', trigger: 'change' }
-      ],
-      title: [
-        { required: true, message: '请输入标题', trigger: 'blur' },
-        { min: 5, max: 100, message: '标题长度在 5 到 100 个字符', trigger: 'blur' }
-      ],
-      content: [
-        { required: true, message: '请输入内容', trigger: 'blur' },
-        { min: 10, max: 5000, message: '内容长度在 10 到 5000 个字符', trigger: 'blur' }
-      ]
-    }
-    
-    const forumSections = ref([
-      {
-        id: 1,
-        name: '电影讨论',
-        description: '分享和讨论电影资源,交流观影心得',
-        icon: 'Film',
-        color: '#409eff',
-        topics: 3256,
-        replies: 18934,
-        latestTopic: {
-          title: '2024年最佳科幻电影推荐',
-          author: 'MovieFan',
-          time: '2025-06-03T14:30:00'
-        }
-      },
-      {
-        id: 2,
-        name: '音乐分享',
-        description: '音乐资源分享,音乐制作技术交流',
-        icon: 'Headphones',
-        color: '#67c23a',
-        topics: 1892,
-        replies: 9567,
-        latestTopic: {
-          title: '无损音乐格式对比分析',
-          author: 'AudioExpert',
-          time: '2025-06-03T13:45:00'
-        }
-      },
-      {
-        id: 3,
-        name: '软件技术',
-        description: '软件资源分享,技术问题讨论',
-        icon: 'Monitor',
-        color: '#e6a23c',
-        topics: 2134,
-        replies: 12456,
-        latestTopic: {
-          title: 'Adobe 2025 新功能体验分享',
-          author: 'TechGuru',
-          time: '2025-06-03T12:20:00'
-        }
-      },
-      {
-        id: 4,
-        name: '游戏天地',
-        description: '游戏资源分享,游戏攻略讨论',
-        icon: 'GamePad',
-        color: '#f56c6c',
-        topics: 1567,
-        replies: 8234,
-        latestTopic: {
-          title: '年度游戏大作盘点',
-          author: 'GameMaster',
-          time: '2025-06-03T11:50:00'
-        }
-      },
-      {
-        id: 5,
-        name: '站务公告',
-        description: '网站公告,规则说明,意见建议',
-        icon: 'Bell',
-        color: '#909399',
-        topics: 234,
-        replies: 1567,
-        latestTopic: {
-          title: '网站维护通知',
-          author: 'Admin',
-          time: '2025-06-03T10:00:00'
-        }
-      },
-      {
-        id: 6,
-        name: '新手求助',
-        description: '新手问题解答,使用教程分享',
-        icon: 'QuestionFilled',
-        color: '#606266',
-        topics: 456,
-        replies: 2890,
-        latestTopic: {
-          title: '新手如何提高分享率?',
-          author: 'Newbie123',
-          time: '2025-06-03T09:30:00'
-        }
-      }
-    ])
-    
-    const hotTopics = ref([
-      {
-        id: 1,
-        title: '2024年度最佳PT站点推荐与对比分析',
-        author: 'PTExpert',
-        views: 2856,
-        replies: 147,
-        lastReply: '2025-06-03T14:25:00',
-        tags: ['PT站点', '推荐', '对比'],
-        pinned: true,
-        hot: true
-      },
-      {
-        id: 2,
-        title: '如何安全高效地使用BT下载工具',
-        author: 'SafeDownloader',
-        views: 1932,
-        replies: 89,
-        lastReply: '2025-06-03T13:50:00',
-        tags: ['BT工具', '安全', '教程'],
-        hot: true
-      },
-      {
-        id: 3,
-        title: '分享率提升技巧与经验总结',
-        author: 'SeedMaster',
-        views: 1654,
-        replies: 76,
-        lastReply: '2025-06-03T12:40:00',
-        tags: ['分享率', '技巧', '经验']
-      }
-    ])
-    
-    const recentReplies = ref([
-      {
-        id: 1,
-        author: 'MovieLover88',
-        topicId: 1,
-        topicTitle: '阿凡达2观影感受分享',
-        content: '画面效果确实震撼,特别是水下的场景...',
-        time: '2025-06-03T14:45:00'
-      },
-      {
-        id: 2,
-        author: 'TechEnthusiast',
-        topicId: 2,
-        topicTitle: '最新版Photoshop使用技巧',
-        content: '新的AI功能确实很强大,大大提高了工作效率...',
-        time: '2025-06-03T14:30:00'
-      },
-      {
-        id: 3,
-        author: 'GameFan2024',
-        topicId: 3,
-        topicTitle: '赛博朋克2077最新更新体验',
-        content: '修复了很多bug,现在游戏体验好多了...',
-        time: '2025-06-03T14:15:00'
-      }
-    ])
-    
-    onMounted(() => {
-      // 初始化论坛数据
-    })
-    
-    const formatTime = (timeString) => {
-      const date = new Date(timeString)
-      const now = new Date()
-      const diff = now - date
-      const hours = Math.floor(diff / (1000 * 60 * 60))
-      
-      if (hours < 1) return '刚刚'
-      if (hours < 24) return `${hours}小时前`
-      const days = Math.floor(hours / 24)
-      return `${days}天前`
-    }
-    
-    const navigateToSection = (sectionId) => {
-      router.push(`/forum/section/${sectionId}`)
-    }
-    
-    const navigateToTopic = (topicId) => {
-      router.push(`/forum/topic/${topicId}`)
-    }
-    
-    const showTagInput = () => {
-      tagInputVisible.value = true
-      nextTick(() => {
-        tagInputRef.value?.focus()
-      })
-    }
-    
-    const addTopicTag = () => {
-      const tag = tagInputValue.value.trim()
-      if (tag && !newTopic.tags.includes(tag)) {
-        newTopic.tags.push(tag)
-      }
-      tagInputVisible.value = false
-      tagInputValue.value = ''
-    }
-    
-    const removeTopicTag = (tag) => {
-      const index = newTopic.tags.indexOf(tag)
-      if (index > -1) {
-        newTopic.tags.splice(index, 1)
-      }
-    }
-    
-    const handleCloseDialog = () => {
-      if (newTopic.title || newTopic.content) {
-        ElMessageBox.confirm(
-          '确定要关闭吗?未保存的内容将会丢失。',
-          '提示',
-          {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning'
-          }
-        ).then(() => {
-          resetForm()
-          showNewTopicDialog.value = false
-        }).catch(() => {
-          // 用户取消
-        })
-      } else {
-        resetForm()
-        showNewTopicDialog.value = false
-      }
-    }
-    
-    const submitNewTopic = async () => {
-      try {
-        await topicFormRef.value?.validate()
-        
-        submitting.value = true
-        
-        // 模拟提交过程
-        await new Promise(resolve => setTimeout(resolve, 1500))
-        
-        ElMessage.success('主题发布成功!')
-        resetForm()
-        showNewTopicDialog.value = false
-        
-        // 跳转到新创建的主题页面
-        router.push('/forum/topic/new')
-        
-      } catch (error) {
-        console.error('表单验证失败:', error)
-      } finally {
-        submitting.value = false
-      }
-    }
-    
-    const resetForm = () => {
-      topicFormRef.value?.resetFields()
-      newTopic.sectionId = ''
-      newTopic.title = ''
-      newTopic.content = ''
-      newTopic.tags = []
-    }
-    
-    return {
-      showNewTopicDialog,
-      submitting,
-      tagInputVisible,
-      tagInputValue,
-      topicFormRef,
-      tagInputRef,
-      forumStats,
-      forumSections,
-      hotTopics,
-      recentReplies,
-      newTopic,
-      topicRules,
-      formatTime,
-      navigateToSection,
-      navigateToTopic,
-      showTagInput,
-      addTopicTag,
-      removeTopicTag,
-      handleCloseDialog,
-      submitNewTopic,
-      Edit,
-      ChatDotRound,
-      Comment,
-      User,
-      View,
-      ArrowRight,
-      Film,
-      Headphones,
-      Monitor,
-      GamePad,
-      Bell,
-      QuestionFilled
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.forum-page {
-  max-width: 1200px;
-  margin: 0 auto;
-  padding: 24px;
-  background: #f5f5f5;
-  min-height: 100vh;
-}
-
-.forum-header {
-  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-  border-radius: 12px;
-  padding: 48px 32px;
-  margin-bottom: 24px;
-  color: white;
-  text-align: center;
-  
-  h1 {
-    font-size: 36px;
-    font-weight: 600;
-    margin: 0 0 12px 0;
-  }
-  
-  .header-description {
-    font-size: 18px;
-    margin: 0 0 24px 0;
-    opacity: 0.9;
-  }
-}
-
-.forum-stats {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .stats-grid {
-    display: grid;
-    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
-    gap: 24px;
-    
-    .stat-item {
-      display: flex;
-      align-items: center;
-      gap: 16px;
-      
-      .stat-info {
-        h3 {
-          font-size: 24px;
-          font-weight: 600;
-          color: #2c3e50;
-          margin: 0 0 4px 0;
-        }
-        
-        p {
-          font-size: 14px;
-          color: #7f8c8d;
-          margin: 0;
-        }
-      }
-    }
-  }
-}
-
-.forum-sections {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .section-title {
-    font-size: 20px;
-    font-weight: 600;
-    color: #2c3e50;
-    margin: 0 0 20px 0;
-  }
-  
-  .sections-list {
-    .section-card {
-      display: flex;
-      align-items: center;
-      gap: 20px;
-      padding: 20px;
-      border: 1px solid #f0f0f0;
-      border-radius: 8px;
-      margin-bottom: 12px;
-      cursor: pointer;
-      transition: all 0.3s ease;
-      
-      &:hover {
-        background: #f8f9fa;
-        border-color: #409eff;
-        transform: translateX(4px);
-      }
-      
-      .section-info {
-        flex: 1;
-        
-        .section-name {
-          font-size: 18px;
-          font-weight: 600;
-          color: #2c3e50;
-          margin: 0 0 8px 0;
-        }
-        
-        .section-description {
-          font-size: 14px;
-          color: #7f8c8d;
-          margin: 0 0 12px 0;
-        }
-        
-        .section-stats {
-          display: flex;
-          gap: 16px;
-          
-          .stat {
-            font-size: 12px;
-            color: #909399;
-          }
-        }
-      }
-      
-      .section-latest {
-        width: 200px;
-        
-        .latest-topic {
-          .topic-title {
-            font-size: 14px;
-            color: #2c3e50;
-            margin: 0 0 8px 0;
-            overflow: hidden;
-            text-overflow: ellipsis;
-            display: -webkit-box;
-            -webkit-line-clamp: 2;
-            -webkit-box-orient: vertical;
-          }
-          
-          .topic-meta {
-            font-size: 12px;
-            color: #909399;
-            
-            .author {
-              margin-right: 8px;
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
-.hot-topics {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .section-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 20px;
-    
-    .section-title {
-      font-size: 20px;
-      font-weight: 600;
-      color: #2c3e50;
-      margin: 0;
-    }
-  }
-  
-  .topics-list {
-    .topic-item {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 16px;
-      border: 1px solid #f0f0f0;
-      border-radius: 8px;
-      margin-bottom: 12px;
-      cursor: pointer;
-      transition: all 0.3s ease;
-      
-      &:hover {
-        background: #f8f9fa;
-        border-color: #409eff;
-      }
-      
-      .topic-content {
-        flex: 1;
-        
-        .topic-header {
-          display: flex;
-          align-items: center;
-          gap: 12px;
-          margin-bottom: 8px;
-          
-          .topic-title {
-            font-size: 16px;
-            font-weight: 500;
-            color: #2c3e50;
-            margin: 0;
-          }
-          
-          .topic-tags {
-            .el-tag {
-              margin-right: 4px;
-            }
-          }
-        }
-        
-        .topic-meta {
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
-          
-          .author-info {
-            display: flex;
-            align-items: center;
-            gap: 8px;
-            
-            .author-name {
-              font-size: 14px;
-              color: #7f8c8d;
-            }
-          }
-          
-          .topic-stats {
-            display: flex;
-            align-items: center;
-            gap: 16px;
-            font-size: 12px;
-            color: #909399;
-            
-            .stat-item {
-              display: flex;
-              align-items: center;
-              gap: 4px;
-            }
-          }
-        }
-      }
-      
-      .topic-status {
-        .el-tag {
-          margin-left: 8px;
-        }
-      }
-    }
-  }
-}
-
-.recent-replies {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .section-title {
-    font-size: 20px;
-    font-weight: 600;
-    color: #2c3e50;
-    margin: 0 0 20px 0;
-  }
-  
-  .replies-list {
-    .reply-item {
-      display: flex;
-      flex-direction: column;
-      gap: 12px;
-      padding: 16px;
-      border: 1px solid #f0f0f0;
-      border-radius: 8px;
-      margin-bottom: 12px;
-      cursor: pointer;
-      transition: all 0.3s ease;
-      
-      &:hover {
-        background: #f8f9fa;
-        border-color: #409eff;
-      }
-      
-      .reply-content {
-        flex: 1;
-        
-        .reply-header {
-          font-size: 14px;
-          margin-bottom: 8px;
-          
-          .reply-author {
-            font-weight: 600;
-            color: #2c3e50;
-          }
-          
-          .reply-action {
-            color: #7f8c8d;
-            margin: 0 4px;
-          }
-          
-          .topic-title {
-            color: #409eff;
-            font-weight: 500;
-          }
-        }
-        
-        .reply-text {
-          font-size: 14px;
-          color: #5a6c7d;
-          margin-bottom: 8px;
-          overflow: hidden;
-          text-overflow: ellipsis;
-          display: -webkit-box;
-          -webkit-line-clamp: 2;
-          -webkit-box-orient: vertical;
-        }
-        
-        .reply-time {
-          font-size: 12px;
-          color: #909399;
-        }
-      }
-    }
-  }
-}
-</style>
-
-.tags-input {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 8px;
-  align-items: center;
-  
-  .el-tag {
-    margin: 0;
-  }
-}
-
-@media (max-width: 768px) {
-  .forum-page {
-    padding: 16px;
-  }
-  
-  .forum-header {
-    padding: 32px 24px;
-    
-    h1 {
-      font-size: 28px;
-    }
-    
-    .header-description {
-      font-size: 16px;
-    }
-  }
-  
-  .stats-grid {
-    grid-template-columns: repeat(2, 1fr);
-  }
-  
-  .section-card {
-    flex-direction: column;
-    text-align: center;
-    
-    .section-latest {
-      width: 100%;
-      margin-top: 16px;
-    }
-  }
-  
-  .topic-item {
-    flex-direction: column;
-    align-items: flex-start;
-    
-    .topic-status {
-      margin-top: 12px;
-      align-self: flex-end;
-    }
-  }
+<template>

+  <div class="forum-page">

+    <div class="page-container">

+      <!-- 论坛头部 -->

+      <div class="forum-header">

+        <div class="header-content">

+          <h1>社区论坛</h1>

+          <p class="header-description">与其他用户交流讨论,分享经验心得</p>

+          <div class="header-actions">

+            <el-button type="primary" :icon="Edit" @click="showNewTopicDialog = true">

+              发布新帖

+            </el-button>

+          </div>

+        </div>

+      </div>

+

+      <!-- 论坛统计 -->

+      <div class="forum-stats">

+        <div class="stats-grid">

+          <div class="stat-item">

+            <el-icon size="32" color="#409eff"><ChatDotRound /></el-icon>

+            <div class="stat-info">

+              <h3>{{ forumStats.totalTopics }}</h3>

+              <p>主题总数</p>

+            </div>

+          </div>

+          <div class="stat-item">

+            <el-icon size="32" color="#67c23a"><Comment /></el-icon>

+            <div class="stat-info">

+              <h3>{{ forumStats.totalReplies }}</h3>

+              <p>回复总数</p>

+            </div>

+          </div>

+          <div class="stat-item">

+            <el-icon size="32" color="#e6a23c"><User /></el-icon>

+            <div class="stat-info">

+              <h3>{{ forumStats.activeUsers }}</h3>

+              <p>活跃用户</p>

+            </div>

+          </div>

+          <div class="stat-item">

+            <el-icon size="32" color="#f56c6c"><View /></el-icon>

+            <div class="stat-info">

+              <h3>{{ forumStats.todayPosts }}</h3>

+              <p>今日发帖</p>

+            </div>

+          </div>

+        </div>

+      </div>

+

+      <!-- 版块列表 -->

+      <div class="forum-sections">

+        <h2 class="section-title">论坛版块</h2>

+        <div class="sections-list">

+          <div

+            v-for="section in forumSections"

+            :key="section.id"

+            class="section-card"

+            @click="navigateToSection(section.id)"

+          >

+            <div class="section-icon">

+              <el-icon size="48" :color="section.color">

+                <component :is="section.icon" />

+              </el-icon>

+            </div>

+            <div class="section-info">

+              <h3 class="section-name">{{ section.name }}</h3>

+              <p class="section-description">{{ section.description }}</p>

+              <div class="section-stats">

+                <span class="stat">{{ section.topics }} 主题</span>

+                <span class="stat">{{ section.replies }} 回复</span>

+              </div>

+            </div>

+            <div class="section-latest">

+              <div v-if="section.latestTopic" class="latest-topic">

+                <p class="topic-title">{{ section.latestTopic.title }}</p>

+                <div class="topic-meta">

+                  <span class="author">{{ section.latestTopic.author }}</span>

+                  <span class="time">{{ formatTime(section.latestTopic.time) }}</span>

+                </div>

+              </div>

+            </div>

+          </div>

+        </div>

+      </div>

+

+      <!-- 热门主题 -->

+      <div class="hot-topics">

+        <div class="section-header">

+          <h2 class="section-title">热门主题</h2>

+          <el-button type="primary" text @click="$router.push('/forum/topics')">

+            查看全部 <el-icon><ArrowRight /></el-icon>

+          </el-button>

+        </div>

+        <div class="topics-list">

+          <div

+            v-for="topic in hotTopics"

+            :key="topic.id"

+            class="topic-item"

+            @click="navigateToTopic(topic.id)"

+          >

+            <div class="topic-content">

+              <div class="topic-header">

+                <h4 class="topic-title">{{ topic.title }}</h4>

+                <div class="topic-tags">

+                  <el-tag

+                    v-for="tag in topic.tags"

+                    :key="tag"

+                    size="small"

+                    type="info"

+                  >

+                    {{ tag }}

+                  </el-tag>

+                </div>

+              </div>

+              <div class="topic-meta">

+                <div class="author-info">

+                  <el-avatar :size="24">{{ topic.author.charAt(0) }}</el-avatar>

+                  <span class="author-name">{{ topic.author }}</span>

+                </div>

+                <div class="topic-stats">

+                  <span class="stat-item">

+                    <el-icon><View /></el-icon>

+                    {{ topic.views }}

+                  </span>

+                  <span class="stat-item">

+                    <el-icon><Comment /></el-icon>

+                    {{ topic.replies }}

+                  </span>

+                  <span class="time">{{ formatTime(topic.lastReply) }}</span>

+                </div>

+              </div>

+            </div>

+            <div class="topic-status">

+              <el-tag v-if="topic.pinned" type="warning" size="small">置顶</el-tag>

+              <el-tag v-if="topic.hot" type="danger" size="small">热门</el-tag>

+            </div>

+          </div>

+        </div>

+      </div>

+

+      <!-- 最新回复 -->

+      <div class="recent-replies">

+        <h2 class="section-title">最新回复</h2>

+        <div class="replies-list">

+          <div

+            v-for="reply in recentReplies"

+            :key="reply.id"

+            class="reply-item"

+            @click="navigateToTopic(reply.topicId)"

+          >

+            <div class="reply-avatar">

+              <el-avatar :size="40">{{ reply.author.charAt(0) }}</el-avatar>

+            </div>

+            <div class="reply-content">

+              <div class="reply-header">

+                <span class="reply-author">{{ reply.author }}</span>

+                <span class="reply-action">回复了主题</span>

+                <span class="topic-title">{{ reply.topicTitle }}</span>

+              </div>

+              <div class="reply-text">{{ reply.content }}</div>

+              <div class="reply-time">{{ formatTime(reply.time) }}</div>

+            </div>

+          </div>

+        </div>

+      </div>

+    </div>

+

+    <!-- 发布新帖对话框 -->

+    <el-dialog

+      v-model="showNewTopicDialog"

+      title="发布新主题"

+      width="600px"

+      :before-close="handleCloseDialog"

+    >

+      <el-form

+        ref="topicFormRef"

+        :model="newTopic"

+        :rules="topicRules"

+        label-width="80px"

+      >

+        <el-form-item label="版块" prop="sectionId">

+          <el-select v-model="newTopic.sectionId" placeholder="选择版块">

+            <el-option

+              v-for="section in forumSections"

+              :key="section.id"

+              :label="section.name"

+              :value="section.id"

+            />

+          </el-select>

+        </el-form-item>

+        

+        <el-form-item label="标题" prop="title">

+          <el-input

+            v-model="newTopic.title"

+            placeholder="请输入主题标题"

+            maxlength="100"

+            show-word-limit

+          />

+        </el-form-item>

+        

+        <el-form-item label="标签">

+          <div class="tags-input">

+            <el-tag

+              v-for="tag in newTopic.tags"

+              :key="tag"

+              closable

+              @close="removeTopicTag(tag)"

+            >

+              {{ tag }}

+            </el-tag>

+            <el-input

+              v-if="tagInputVisible"

+              ref="tagInputRef"

+              v-model="tagInputValue"

+              size="small"

+              @keyup.enter="addTopicTag"

+              @blur="addTopicTag"

+              style="width: 100px;"

+            />

+            <el-button

+              v-else

+              size="small"

+              @click="showTagInput"

+            >

+              + 添加标签

+            </el-button>

+          </div>

+        </el-form-item>

+        

+        <el-form-item label="内容" prop="content">

+          <el-input

+            v-model="newTopic.content"

+            type="textarea"

+            :rows="8"

+            placeholder="请输入主题内容..."

+            maxlength="5000"

+            show-word-limit

+          />

+        </el-form-item>

+      </el-form>

+      

+      <template #footer>

+        <el-button @click="handleCloseDialog">取消</el-button>

+        <el-button type="primary" @click="submitNewTopic" :loading="submitting">

+          发布主题

+        </el-button>

+      </template>

+    </el-dialog>

+  </div>

+</template>

+

+<script>

+import { ref, reactive, onMounted, nextTick } from 'vue'

+import { useRouter } from 'vue-router'

+import { ElMessage, ElMessageBox } from 'element-plus'

+import {

+  Edit,

+  ChatDotRound,

+  Comment,

+  User,

+  View,

+  ArrowRight,

+  Film,

+  Headphones,

+  Monitor,

+  GamePad,

+  ChatLineRound,

+  QuestionFilled,

+  Bell

+} from '@element-plus/icons-vue'

+

+export default {

+  name: 'ForumView',

+  setup() {

+    const router = useRouter()

+    const topicFormRef = ref(null)

+    const tagInputRef = ref(null)

+    

+    const showNewTopicDialog = ref(false)

+    const submitting = ref(false)

+    const tagInputVisible = ref(false)

+    const tagInputValue = ref('')

+    

+    const forumStats = reactive({

+      totalTopics: '15,268',

+      totalReplies: '89,456',

+      activeUsers: '2,341',

+      todayPosts: '156'

+    })

+    

+    const newTopic = reactive({

+      sectionId: '',

+      title: '',

+      content: '',

+      tags: []

+    })

+    

+    const topicRules = {

+      sectionId: [

+        { required: true, message: '请选择版块', trigger: 'change' }

+      ],

+      title: [

+        { required: true, message: '请输入标题', trigger: 'blur' },

+        { min: 5, max: 100, message: '标题长度在 5 到 100 个字符', trigger: 'blur' }

+      ],

+      content: [

+        { required: true, message: '请输入内容', trigger: 'blur' },

+        { min: 10, max: 5000, message: '内容长度在 10 到 5000 个字符', trigger: 'blur' }

+      ]

+    }

+    

+    const forumSections = ref([

+      {

+        id: 1,

+        name: '电影讨论',

+        description: '分享和讨论电影资源,交流观影心得',

+        icon: 'Film',

+        color: '#409eff',

+        topics: 3256,

+        replies: 18934,

+        latestTopic: {

+          title: '2024年最佳科幻电影推荐',

+          author: 'MovieFan',

+          time: '2025-06-03T14:30:00'

+        }

+      },

+      {

+        id: 2,

+        name: '音乐分享',

+        description: '音乐资源分享,音乐制作技术交流',

+        icon: 'Headphones',

+        color: '#67c23a',

+        topics: 1892,

+        replies: 9567,

+        latestTopic: {

+          title: '无损音乐格式对比分析',

+          author: 'AudioExpert',

+          time: '2025-06-03T13:45:00'

+        }

+      },

+      {

+        id: 3,

+        name: '软件技术',

+        description: '软件资源分享,技术问题讨论',

+        icon: 'Monitor',

+        color: '#e6a23c',

+        topics: 2134,

+        replies: 12456,

+        latestTopic: {

+          title: 'Adobe 2025 新功能体验分享',

+          author: 'TechGuru',

+          time: '2025-06-03T12:20:00'

+        }

+      },

+      {

+        id: 4,

+        name: '游戏天地',

+        description: '游戏资源分享,游戏攻略讨论',

+        icon: 'GamePad',

+        color: '#f56c6c',

+        topics: 1567,

+        replies: 8234,

+        latestTopic: {

+          title: '年度游戏大作盘点',

+          author: 'GameMaster',

+          time: '2025-06-03T11:50:00'

+        }

+      },

+      {

+        id: 5,

+        name: '站务公告',

+        description: '网站公告,规则说明,意见建议',

+        icon: 'Bell',

+        color: '#909399',

+        topics: 234,

+        replies: 1567,

+        latestTopic: {

+          title: '网站维护通知',

+          author: 'Admin',

+          time: '2025-06-03T10:00:00'

+        }

+      },

+      {

+        id: 6,

+        name: '新手求助',

+        description: '新手问题解答,使用教程分享',

+        icon: 'QuestionFilled',

+        color: '#606266',

+        topics: 456,

+        replies: 2890,

+        latestTopic: {

+          title: '新手如何提高分享率?',

+          author: 'Newbie123',

+          time: '2025-06-03T09:30:00'

+        }

+      }

+    ])

+    

+    const hotTopics = ref([

+      {

+        id: 1,

+        title: '2024年度最佳PT站点推荐与对比分析',

+        author: 'PTExpert',

+        views: 2856,

+        replies: 147,

+        lastReply: '2025-06-03T14:25:00',

+        tags: ['PT站点', '推荐', '对比'],

+        pinned: true,

+        hot: true

+      },

+      {

+        id: 2,

+        title: '如何安全高效地使用BT下载工具',

+        author: 'SafeDownloader',

+        views: 1932,

+        replies: 89,

+        lastReply: '2025-06-03T13:50:00',

+        tags: ['BT工具', '安全', '教程'],

+        hot: true

+      },

+      {

+        id: 3,

+        title: '分享率提升技巧与经验总结',

+        author: 'SeedMaster',

+        views: 1654,

+        replies: 76,

+        lastReply: '2025-06-03T12:40:00',

+        tags: ['分享率', '技巧', '经验']

+      }

+    ])

+    

+    const recentReplies = ref([

+      {

+        id: 1,

+        author: 'MovieLover88',

+        topicId: 1,

+        topicTitle: '阿凡达2观影感受分享',

+        content: '画面效果确实震撼,特别是水下的场景...',

+        time: '2025-06-03T14:45:00'

+      },

+      {

+        id: 2,

+        author: 'TechEnthusiast',

+        topicId: 2,

+        topicTitle: '最新版Photoshop使用技巧',

+        content: '新的AI功能确实很强大,大大提高了工作效率...',

+        time: '2025-06-03T14:30:00'

+      },

+      {

+        id: 3,

+        author: 'GameFan2024',

+        topicId: 3,

+        topicTitle: '赛博朋克2077最新更新体验',

+        content: '修复了很多bug,现在游戏体验好多了...',

+        time: '2025-06-03T14:15:00'

+      }

+    ])

+    

+    onMounted(() => {

+      // 初始化论坛数据

+    })

+    

+    const formatTime = (timeString) => {

+      const date = new Date(timeString)

+      const now = new Date()

+      const diff = now - date

+      const hours = Math.floor(diff / (1000 * 60 * 60))

+      

+      if (hours < 1) return '刚刚'

+      if (hours < 24) return `${hours}小时前`

+      const days = Math.floor(hours / 24)

+      return `${days}天前`

+    }

+    

+    const navigateToSection = (sectionId) => {

+      router.push(`/forum/section/${sectionId}`)

+    }

+    

+    const navigateToTopic = (topicId) => {

+      router.push(`/forum/topic/${topicId}`)

+    }

+    

+    const showTagInput = () => {

+      tagInputVisible.value = true

+      nextTick(() => {

+        tagInputRef.value?.focus()

+      })

+    }

+    

+    const addTopicTag = () => {

+      const tag = tagInputValue.value.trim()

+      if (tag && !newTopic.tags.includes(tag)) {

+        newTopic.tags.push(tag)

+      }

+      tagInputVisible.value = false

+      tagInputValue.value = ''

+    }

+    

+    const removeTopicTag = (tag) => {

+      const index = newTopic.tags.indexOf(tag)

+      if (index > -1) {

+        newTopic.tags.splice(index, 1)

+      }

+    }

+    

+    const handleCloseDialog = () => {

+      if (newTopic.title || newTopic.content) {

+        ElMessageBox.confirm(

+          '确定要关闭吗?未保存的内容将会丢失。',

+          '提示',

+          {

+            confirmButtonText: '确定',

+            cancelButtonText: '取消',

+            type: 'warning'

+          }

+        ).then(() => {

+          resetForm()

+          showNewTopicDialog.value = false

+        }).catch(() => {

+          // 用户取消

+        })

+      } else {

+        resetForm()

+        showNewTopicDialog.value = false

+      }

+    }

+    

+    const submitNewTopic = async () => {

+      try {

+        await topicFormRef.value?.validate()

+        

+        submitting.value = true

+        

+        // 模拟提交过程

+        await new Promise(resolve => setTimeout(resolve, 1500))

+        

+        ElMessage.success('主题发布成功!')

+        resetForm()

+        showNewTopicDialog.value = false

+        

+        // 跳转到新创建的主题页面

+        router.push('/forum/topic/new')

+        

+      } catch (error) {

+        console.error('表单验证失败:', error)

+      } finally {

+        submitting.value = false

+      }

+    }

+    

+    const resetForm = () => {

+      topicFormRef.value?.resetFields()

+      newTopic.sectionId = ''

+      newTopic.title = ''

+      newTopic.content = ''

+      newTopic.tags = []

+    }

+    

+    return {

+      showNewTopicDialog,

+      submitting,

+      tagInputVisible,

+      tagInputValue,

+      topicFormRef,

+      tagInputRef,

+      forumStats,

+      forumSections,

+      hotTopics,

+      recentReplies,

+      newTopic,

+      topicRules,

+      formatTime,

+      navigateToSection,

+      navigateToTopic,

+      showTagInput,

+      addTopicTag,

+      removeTopicTag,

+      handleCloseDialog,

+      submitNewTopic,

+      Edit,

+      ChatDotRound,

+      Comment,

+      User,

+      View,

+      ArrowRight,

+      Film,

+      Headphones,

+      Monitor,

+      GamePad,

+      Bell,

+      QuestionFilled

+    }

+  }

+}

+</script>

+

+<style lang="scss" scoped>

+.forum-page {

+  max-width: 1200px;

+  margin: 0 auto;

+  padding: 24px;

+  background: #f5f5f5;

+  min-height: 100vh;

+}

+

+.forum-header {

+  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);

+  border-radius: 12px;

+  padding: 48px 32px;

+  margin-bottom: 24px;

+  color: white;

+  text-align: center;

+  

+  h1 {

+    font-size: 36px;

+    font-weight: 600;

+    margin: 0 0 12px 0;

+  }

+  

+  .header-description {

+    font-size: 18px;

+    margin: 0 0 24px 0;

+    opacity: 0.9;

+  }

+}

+

+.forum-stats {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .stats-grid {

+    display: grid;

+    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));

+    gap: 24px;

+    

+    .stat-item {

+      display: flex;

+      align-items: center;

+      gap: 16px;

+      

+      .stat-info {

+        h3 {

+          font-size: 24px;

+          font-weight: 600;

+          color: #2c3e50;

+          margin: 0 0 4px 0;

+        }

+        

+        p {

+          font-size: 14px;

+          color: #7f8c8d;

+          margin: 0;

+        }

+      }

+    }

+  }

+}

+

+.forum-sections {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .section-title {

+    font-size: 20px;

+    font-weight: 600;

+    color: #2c3e50;

+    margin: 0 0 20px 0;

+  }

+  

+  .sections-list {

+    .section-card {

+      display: flex;

+      align-items: center;

+      gap: 20px;

+      padding: 20px;

+      border: 1px solid #f0f0f0;

+      border-radius: 8px;

+      margin-bottom: 12px;

+      cursor: pointer;

+      transition: all 0.3s ease;

+      

+      &:hover {

+        background: #f8f9fa;

+        border-color: #409eff;

+        transform: translateX(4px);

+      }

+      

+      .section-info {

+        flex: 1;

+        

+        .section-name {

+          font-size: 18px;

+          font-weight: 600;

+          color: #2c3e50;

+          margin: 0 0 8px 0;

+        }

+        

+        .section-description {

+          font-size: 14px;

+          color: #7f8c8d;

+          margin: 0 0 12px 0;

+        }

+        

+        .section-stats {

+          display: flex;

+          gap: 16px;

+          

+          .stat {

+            font-size: 12px;

+            color: #909399;

+          }

+        }

+      }

+      

+      .section-latest {

+        width: 200px;

+        

+        .latest-topic {

+          .topic-title {

+            font-size: 14px;

+            color: #2c3e50;

+            margin: 0 0 8px 0;

+            overflow: hidden;

+            text-overflow: ellipsis;

+            display: -webkit-box;

+            -webkit-line-clamp: 2;

+            -webkit-box-orient: vertical;

+          }

+          

+          .topic-meta {

+            font-size: 12px;

+            color: #909399;

+            

+            .author {

+              margin-right: 8px;

+            }

+          }

+        }

+      }

+    }

+  }

+}

+

+.hot-topics {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .section-header {

+    display: flex;

+    justify-content: space-between;

+    align-items: center;

+    margin-bottom: 20px;

+    

+    .section-title {

+      font-size: 20px;

+      font-weight: 600;

+      color: #2c3e50;

+      margin: 0;

+    }

+  }

+  

+  .topics-list {

+    .topic-item {

+      display: flex;

+      justify-content: space-between;

+      align-items: center;

+      padding: 16px;

+      border: 1px solid #f0f0f0;

+      border-radius: 8px;

+      margin-bottom: 12px;

+      cursor: pointer;

+      transition: all 0.3s ease;

+      

+      &:hover {

+        background: #f8f9fa;

+        border-color: #409eff;

+      }

+      

+      .topic-content {

+        flex: 1;

+        

+        .topic-header {

+          display: flex;

+          align-items: center;

+          gap: 12px;

+          margin-bottom: 8px;

+          

+          .topic-title {

+            font-size: 16px;

+            font-weight: 500;

+            color: #2c3e50;

+            margin: 0;

+          }

+          

+          .topic-tags {

+            .el-tag {

+              margin-right: 4px;

+            }

+          }

+        }

+        

+        .topic-meta {

+          display: flex;

+          justify-content: space-between;

+          align-items: center;

+          

+          .author-info {

+            display: flex;

+            align-items: center;

+            gap: 8px;

+            

+            .author-name {

+              font-size: 14px;

+              color: #7f8c8d;

+            }

+          }

+          

+          .topic-stats {

+            display: flex;

+            align-items: center;

+            gap: 16px;

+            font-size: 12px;

+            color: #909399;

+            

+            .stat-item {

+              display: flex;

+              align-items: center;

+              gap: 4px;

+            }

+          }

+        }

+      }

+      

+      .topic-status {

+        .el-tag {

+          margin-left: 8px;

+        }

+      }

+    }

+  }

+}

+

+.recent-replies {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .section-title {

+    font-size: 20px;

+    font-weight: 600;

+    color: #2c3e50;

+    margin: 0 0 20px 0;

+  }

+  

+  .replies-list {

+    .reply-item {

+      display: flex;

+      flex-direction: column;

+      gap: 12px;

+      padding: 16px;

+      border: 1px solid #f0f0f0;

+      border-radius: 8px;

+      margin-bottom: 12px;

+      cursor: pointer;

+      transition: all 0.3s ease;

+      

+      &:hover {

+        background: #f8f9fa;

+        border-color: #409eff;

+      }

+      

+      .reply-content {

+        flex: 1;

+        

+        .reply-header {

+          font-size: 14px;

+          margin-bottom: 8px;

+          

+          .reply-author {

+            font-weight: 600;

+            color: #2c3e50;

+          }

+          

+          .reply-action {

+            color: #7f8c8d;

+            margin: 0 4px;

+          }

+          

+          .topic-title {

+            color: #409eff;

+            font-weight: 500;

+          }

+        }

+        

+        .reply-text {

+          font-size: 14px;

+          color: #5a6c7d;

+          margin-bottom: 8px;

+          overflow: hidden;

+          text-overflow: ellipsis;

+          display: -webkit-box;

+          -webkit-line-clamp: 2;

+          -webkit-box-orient: vertical;

+        }

+        

+        .reply-time {

+          font-size: 12px;

+          color: #909399;

+        }

+      }

+    }

+  }

+}

+</style>

+

+.tags-input {

+  display: flex;

+  flex-wrap: wrap;

+  gap: 8px;

+  align-items: center;

+  

+  .el-tag {

+    margin: 0;

+  }

+}

+

+@media (max-width: 768px) {

+  .forum-page {

+    padding: 16px;

+  }

+  

+  .forum-header {

+    padding: 32px 24px;

+    

+    h1 {

+      font-size: 28px;

+    }

+    

+    .header-description {

+      font-size: 16px;

+    }

+  }

+  

+  .stats-grid {

+    grid-template-columns: repeat(2, 1fr);

+  }

+  

+  .section-card {

+    flex-direction: column;

+    text-align: center;

+    

+    .section-latest {

+      width: 100%;

+      margin-top: 16px;

+    }

+  }

+  

+  .topic-item {

+    flex-direction: column;

+    align-items: flex-start;

+    

+    .topic-status {

+      margin-top: 12px;

+      align-self: flex-end;

+    }

+  }

 } 
\ No newline at end of file
diff --git a/src/views/torrent/TorrentDetailView.vue b/src/views/torrent/TorrentDetailView.vue
index 941ebd1..c8ee498 100644
--- a/src/views/torrent/TorrentDetailView.vue
+++ b/src/views/torrent/TorrentDetailView.vue
@@ -1,862 +1,862 @@
-<template>
-  <div class="torrent-detail-page">
-    <div class="page-container">
-      <!-- 返回按钮 -->
-      <div class="back-button">
-        <el-button :icon="ArrowLeft" @click="$router.back()">
-          返回列表
-        </el-button>
-      </div>
-
-      <!-- 种子基本信息 -->
-      <div class="torrent-header">
-        <div class="header-content">
-          <div class="torrent-cover">
-            <el-image
-              :src="torrentInfo.coverImage || '/default-cover.jpg'"
-              :alt="torrentInfo.title"
-              fit="cover"
-              class="cover-image"
-            >
-              <template #error>
-                <div class="image-placeholder">
-                  <el-icon size="48"><Picture /></el-icon>
-                  <span>暂无封面</span>
-                </div>
-              </template>
-            </el-image>
-          </div>
-          
-          <div class="torrent-info">
-            <div class="category-tag">
-              <el-tag :type="getCategoryType(torrentInfo.category)" size="large">
-                {{ getCategoryName(torrentInfo.category) }}
-              </el-tag>
-              <el-tag v-if="torrentInfo.subcategory" type="info" size="small">
-                {{ torrentInfo.subcategory }}
-              </el-tag>
-            </div>
-            
-            <h1 class="torrent-title">{{ torrentInfo.title }}</h1>
-            
-            <div class="torrent-tags">
-              <el-tag
-                v-for="tag in torrentInfo.tags"
-                :key="tag"
-                size="small"
-                effect="plain"
-              >
-                {{ tag }}
-              </el-tag>
-            </div>
-            
-            <div class="torrent-meta">
-              <div class="meta-item">
-                <el-icon><User /></el-icon>
-                <span>上传者:{{ torrentInfo.uploader }}</span>
-              </div>
-              <div class="meta-item">
-                <el-icon><Clock /></el-icon>
-                <span>上传时间:{{ formatDateTime(torrentInfo.uploadTime) }}</span>
-              </div>
-              <div class="meta-item">
-                <el-icon><Document /></el-icon>
-                <span>文件大小:{{ torrentInfo.size }}</span>
-              </div>
-              <div class="meta-item">
-                <el-icon><Files /></el-icon>
-                <span>文件数量:{{ torrentInfo.fileCount }} 个</span>
-              </div>
-            </div>
-            
-            <div class="torrent-stats">
-              <div class="stat-item seeders">
-                <span class="stat-number">{{ torrentInfo.seeders }}</span>
-                <span class="stat-label">做种</span>
-              </div>
-              <div class="stat-item leechers">
-                <span class="stat-number">{{ torrentInfo.leechers }}</span>
-                <span class="stat-label">下载</span>
-              </div>
-              <div class="stat-item downloads">
-                <span class="stat-number">{{ torrentInfo.downloads }}</span>
-                <span class="stat-label">完成</span>
-              </div>
-            </div>
-            
-            <div class="action-buttons">
-              <el-button 
-                type="primary" 
-                size="large" 
-                :icon="Download"
-                @click="handleDownload"
-                :loading="downloading"
-              >
-                {{ downloading ? '准备中...' : '下载种子' }}
-              </el-button>
-              <el-button 
-                type="success" 
-                size="large" 
-                :icon="Star"
-                @click="handleFavorite"
-              >
-                {{ isFavorited ? '已收藏' : '收藏' }}
-              </el-button>
-              <el-button 
-                type="warning" 
-                size="large" 
-                :icon="Flag"
-                @click="handleReport"
-              >
-                举报
-              </el-button>
-            </div>
-          </div>
-        </div>
-      </div>
-
-      <!-- 详细信息选项卡 -->
-      <div class="detail-tabs">
-        <el-tabs v-model="activeTab" type="border-card">
-          <!-- 种子描述 -->
-          <el-tab-pane label="详细描述" name="description">
-            <div class="description-content">
-              <div v-if="torrentInfo.description" v-html="formatDescription(torrentInfo.description)"></div>
-              <div v-else class="no-description">暂无详细描述</div>
-            </div>
-          </el-tab-pane>
-          
-          <!-- 文件列表 -->
-          <el-tab-pane label="文件列表" name="files" lazy>
-            <div class="files-list">
-              <el-table :data="torrentInfo.files" stripe>
-                <el-table-column label="文件名" prop="name" min-width="400">
-                  <template #default="{ row }">
-                    <div class="file-name">
-                      <el-icon v-if="row.type === 'folder'"><Folder /></el-icon>
-                      <el-icon v-else><Document /></el-icon>
-                      <span>{{ row.name }}</span>
-                    </div>
-                  </template>
-                </el-table-column>
-                <el-table-column label="大小" prop="size" width="120" align="right" />
-                <el-table-column label="路径" prop="path" min-width="300" />
-              </el-table>
-            </div>
-          </el-tab-pane>
-          
-          <!-- 用户活动 -->
-          <el-tab-pane label="用户活动" name="activity">
-            <div class="activity-section">
-              <div class="activity-stats">
-                <div class="stats-grid">
-                  <div class="stat-card">
-                    <h3>做种用户</h3>
-                    <p class="stat-number">{{ torrentInfo.seeders }}</p>
-                  </div>
-                  <div class="stat-card">
-                    <h3>下载用户</h3>
-                    <p class="stat-number">{{ torrentInfo.leechers }}</p>
-                  </div>
-                  <div class="stat-card">
-                    <h3>完成用户</h3>
-                    <p class="stat-number">{{ torrentInfo.downloads }}</p>
-                  </div>
-                </div>
-              </div>
-              
-              <div class="user-lists">
-                <el-tabs v-model="activityTab" type="card">
-                  <el-tab-pane label="做种用户" name="seeders">
-                    <el-table :data="seedersList" max-height="400">
-                      <el-table-column label="用户" prop="username" />
-                      <el-table-column label="上传量" prop="uploaded" />
-                      <el-table-column label="下载量" prop="downloaded" />
-                      <el-table-column label="分享率" prop="ratio" />
-                      <el-table-column label="做种时间" prop="seedTime" />
-                    </el-table>
-                  </el-tab-pane>
-                  
-                  <el-tab-pane label="下载用户" name="leechers">
-                    <el-table :data="leechersList" max-height="400">
-                      <el-table-column label="用户" prop="username" />
-                      <el-table-column label="进度" prop="progress">
-                        <template #default="{ row }">
-                          <el-progress :percentage="row.progress" :stroke-width="6" />
-                        </template>
-                      </el-table-column>
-                      <el-table-column label="下载速度" prop="downloadSpeed" />
-                      <el-table-column label="剩余时间" prop="eta" />
-                    </el-table>
-                  </el-tab-pane>
-                </el-tabs>
-              </div>
-            </div>
-          </el-tab-pane>
-          
-          <!-- 评论区 -->
-          <el-tab-pane label="评论" name="comments">
-            <div class="comments-section">
-              <!-- 发表评论 -->
-              <div class="comment-form">
-                <el-input
-                  v-model="newComment"
-                  type="textarea"
-                  :rows="4"
-                  placeholder="发表你的评论..."
-                  maxlength="500"
-                  show-word-limit
-                />
-                <div class="comment-actions">
-                  <el-button type="primary" @click="submitComment" :loading="submittingComment">
-                    发表评论
-                  </el-button>
-                </div>
-              </div>
-              
-              <!-- 评论列表 -->
-              <div class="comments-list">
-                <div
-                  v-for="comment in comments"
-                  :key="comment.id"
-                  class="comment-item"
-                >
-                  <div class="comment-avatar">
-                    <el-avatar :size="40">{{ comment.username.charAt(0) }}</el-avatar>
-                  </div>
-                  <div class="comment-content">
-                    <div class="comment-header">
-                      <span class="comment-username">{{ comment.username }}</span>
-                      <span class="comment-time">{{ formatDateTime(comment.time) }}</span>
-                    </div>
-                    <div class="comment-text">{{ comment.content }}</div>
-                    <div class="comment-actions">
-                      <el-button type="text" size="small" @click="likeComment(comment.id)">
-                        <el-icon><Like /></el-icon>
-                        {{ comment.likes || 0 }}
-                      </el-button>
-                      <el-button type="text" size="small" @click="replyComment(comment.id)">
-                        回复
-                      </el-button>
-                    </div>
-                  </div>
-                </div>
-                
-                <div v-if="comments.length === 0" class="no-comments">
-                  暂无评论,快来发表第一条评论吧!
-                </div>
-              </div>
-            </div>
-          </el-tab-pane>
-        </el-tabs>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { ref, onMounted } from 'vue'
-import { useRoute, useRouter } from 'vue-router'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import {
-  ArrowLeft,
-  Download,
-  Star,
-  Flag,
-  User,
-  Clock,
-  Document,
-  Files,
-  Picture,
-  Folder,
-  Like
-} from '@element-plus/icons-vue'
-
-export default {
-  name: 'TorrentDetailView',
-  setup() {
-    const route = useRoute()
-    const router = useRouter()
-    
-    const activeTab = ref('description')
-    const activityTab = ref('seeders')
-    const downloading = ref(false)
-    const isFavorited = ref(false)
-    const submittingComment = ref(false)
-    const newComment = ref('')
-    
-    const torrentInfo = ref({
-      id: 1,
-      title: '[4K蓝光原盘] 阿凡达:水之道 Avatar: The Way of Water (2022)',
-      category: 'movie',
-      subcategory: '科幻片',
-      uploader: 'MovieMaster',
-      uploadTime: '2025-06-03T10:30:00',
-      size: '85.6 GB',
-      fileCount: 125,
-      seeders: 128,
-      leechers: 45,
-      downloads: 892,
-      coverImage: 'https://example.com/avatar2-cover.jpg',
-      tags: ['4K', '蓝光原盘', '科幻', '詹姆斯·卡梅隆'],
-      description: `
-        <h3>影片信息</h3>
-        <p><strong>片名:</strong>阿凡达:水之道 / Avatar: The Way of Water</p>
-        <p><strong>年份:</strong>2022</p>
-        <p><strong>导演:</strong>詹姆斯·卡梅隆</p>
-        <p><strong>主演:</strong>萨姆·沃辛顿 / 佐伊·索尔达娜 / 西格妮·韦弗</p>
-        <p><strong>类型:</strong>科幻 / 动作 / 冒险</p>
-        <p><strong>制片国家/地区:</strong>美国</p>
-        <p><strong>语言:</strong>英语</p>
-        <p><strong>上映日期:</strong>2022-12-16</p>
-        <p><strong>片长:</strong>192分钟</p>
-        
-        <h3>影片简介</h3>
-        <p>杰克·萨利和奈蒂莉组建了家庭,他们的孩子也逐渐成长。当危险威胁到他们时,杰克和奈蒂莉必须为彼此而战,为家庭而战,为生存而战。</p>
-        
-        <h3>技术规格</h3>
-        <ul>
-          <li>视频:4K UHD 2160p / HEVC / HDR10</li>
-          <li>音频:Dolby Atmos TrueHD 7.1 / DTS-HD MA 7.1</li>
-          <li>字幕:中文 / 英文</li>
-          <li>片源:4K UHD 蓝光原盘</li>
-        </ul>
-        
-        <h3>下载说明</h3>
-        <p>本资源为4K蓝光原盘,保持了最高的画质和音质。建议使用支持4K播放的设备观看。</p>
-      `,
-      files: [
-        { name: 'BDMV', type: 'folder', size: '85.6 GB', path: '/' },
-        { name: 'CERTIFICATE', type: 'folder', size: '2.1 MB', path: '/' },
-        { name: 'Avatar.The.Way.of.Water.2022.2160p.UHD.Blu-ray.x265.HDR.Atmos-DETAIL.mkv', type: 'file', size: '32.8 GB', path: '/BDMV/STREAM/' },
-        { name: 'Avatar.The.Way.of.Water.2022.Extras.mkv', type: 'file', size: '12.4 GB', path: '/BDMV/STREAM/' }
-      ]
-    })
-    
-    const seedersList = ref([
-      { username: 'SeedMaster', uploaded: '2.5 TB', downloaded: '850 GB', ratio: '3.02', seedTime: '15天' },
-      { username: 'MovieFan88', uploaded: '1.8 TB', downloaded: '1.2 TB', ratio: '1.50', seedTime: '8天' },
-      { username: 'CinemaLover', uploaded: '3.2 TB', downloaded: '900 GB', ratio: '3.56', seedTime: '22天' }
-    ])
-    
-    const leechersList = ref([
-      { username: 'NewUser123', progress: 65, downloadSpeed: '15.2 MB/s', eta: '2小时15分' },
-      { username: 'MovieSeeker', progress: 23, downloadSpeed: '8.7 MB/s', eta: '8小时32分' },
-      { username: 'FilmCollector', progress: 89, downloadSpeed: '22.1 MB/s', eta: '45分钟' }
-    ])
-    
-    const comments = ref([
-      {
-        id: 1,
-        username: 'MovieReviewer',
-        content: '画质非常棒!4K HDR效果惊艳,水下场景美不胜收。感谢分享!',
-        time: '2025-06-03T12:00:00',
-        likes: 15
-      },
-      {
-        id: 2,
-        username: 'CinemaExpert',
-        content: '音效也很棒,Dolby Atmos的环绕效果让人身临其境。推荐大家下载!',
-        time: '2025-06-03T11:30:00',
-        likes: 8
-      }
-    ])
-    
-    onMounted(() => {
-      const torrentId = route.params.id
-      fetchTorrentDetail(torrentId)
-    })
-    
-    const fetchTorrentDetail = async (id) => {
-      try {
-        // 模拟API调用
-        console.log('获取种子详情:', id)
-        // 这里应该调用真实的API
-      } catch (error) {
-        ElMessage.error('获取种子详情失败')
-        router.back()
-      }
-    }
-    
-    const formatDateTime = (dateString) => {
-      const date = new Date(dateString)
-      return date.toLocaleString('zh-CN', {
-        year: 'numeric',
-        month: '2-digit',
-        day: '2-digit',
-        hour: '2-digit',
-        minute: '2-digit'
-      })
-    }
-    
-    const formatDescription = (description) => {
-      // 简单的HTML清理,实际项目中应该使用专门的库
-      return description.replace(/\n/g, '<br>')
-    }
-    
-    const getCategoryType = (category) => {
-      const types = {
-        'movie': 'primary',
-        'tv': 'info',
-        'music': 'success',
-        'software': 'warning',
-        'game': 'danger'
-      }
-      return types[category] || 'default'
-    }
-    
-    const getCategoryName = (category) => {
-      const names = {
-        'movie': '电影',
-        'tv': '电视剧',
-        'music': '音乐',
-        'software': '软件',
-        'game': '游戏'
-      }
-      return names[category] || category
-    }
-    
-    const handleDownload = async () => {
-      downloading.value = true
-      try {
-        // 模拟下载准备过程
-        await new Promise(resolve => setTimeout(resolve, 1500))
-        
-        // 实际项目中这里应该下载.torrent文件
-        const link = document.createElement('a')
-        link.href = '#' // 实际的种子文件下载链接
-        link.download = `${torrentInfo.value.title}.torrent`
-        link.click()
-        
-        ElMessage.success('种子文件下载完成')
-      } catch (error) {
-        ElMessage.error('下载失败,请稍后重试')
-      } finally {
-        downloading.value = false
-      }
-    }
-    
-    const handleFavorite = () => {
-      isFavorited.value = !isFavorited.value
-      ElMessage.success(isFavorited.value ? '已添加到收藏' : '已取消收藏')
-    }
-    
-    const handleReport = async () => {
-      try {
-        await ElMessageBox.prompt('请说明举报原因', '举报内容', {
-          confirmButtonText: '提交举报',
-          cancelButtonText: '取消',
-          inputType: 'textarea',
-          inputPlaceholder: '请详细说明举报原因...'
-        })
-        
-        ElMessage.success('举报已提交,我们会尽快处理')
-      } catch {
-        // 用户取消
-      }
-    }
-    
-    const submitComment = async () => {
-      if (!newComment.value.trim()) {
-        ElMessage.warning('请输入评论内容')
-        return
-      }
-      
-      submittingComment.value = true
-      try {
-        // 模拟提交评论
-        await new Promise(resolve => setTimeout(resolve, 1000))
-        
-        const comment = {
-          id: Date.now(),
-          username: localStorage.getItem('username') || '用户',
-          content: newComment.value,
-          time: new Date().toISOString(),
-          likes: 0
-        }
-        
-        comments.value.unshift(comment)
-        newComment.value = ''
-        
-        ElMessage.success('评论发表成功')
-      } catch (error) {
-        ElMessage.error('发表评论失败')
-      } finally {
-        submittingComment.value = false
-      }
-    }
-    
-    const likeComment = (commentId) => {
-      const comment = comments.value.find(c => c.id === commentId)
-      if (comment) {
-        comment.likes = (comment.likes || 0) + 1
-        ElMessage.success('点赞成功')
-      }
-    }
-    
-    const replyComment = (commentId) => {
-      // 实现回复功能
-      ElMessage.info('回复功能开发中...')
-    }
-    
-    return {
-      activeTab,
-      activityTab,
-      downloading,
-      isFavorited,
-      submittingComment,
-      newComment,
-      torrentInfo,
-      seedersList,
-      leechersList,
-      comments,
-      formatDateTime,
-      formatDescription,
-      getCategoryType,
-      getCategoryName,
-      handleDownload,
-      handleFavorite,
-      handleReport,
-      submitComment,
-      likeComment,
-      replyComment,
-      ArrowLeft,
-      Download,
-      Star,
-      Flag,
-      User,
-      Clock,
-      Document,
-      Files,
-      Picture,
-      Folder,
-      Like
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.torrent-detail-page {
-  max-width: 1200px;
-  margin: 0 auto;
-  padding: 24px;
-  background: #f5f5f5;
-  min-height: 100vh;
-}
-
-.back-button {
-  margin-bottom: 16px;
-}
-
-.torrent-header {
-  background: #fff;
-  border-radius: 12px;
-  padding: 32px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .header-content {
-    display: flex;
-    gap: 32px;
-    
-    .torrent-cover {
-      flex-shrink: 0;
-      
-      .cover-image {
-        width: 200px;
-        height: 280px;
-        border-radius: 8px;
-        object-fit: cover;
-      }
-      
-      .image-placeholder {
-        width: 200px;
-        height: 280px;
-        background: #f5f5f5;
-        border-radius: 8px;
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-        justify-content: center;
-        color: #999;
-        
-        span {
-          margin-top: 8px;
-          font-size: 14px;
-        }
-      }
-    }
-    
-    .torrent-info {
-      flex: 1;
-      
-      .category-tag {
-        margin-bottom: 16px;
-        
-        .el-tag {
-          margin-right: 8px;
-        }
-      }
-      
-      .torrent-title {
-        font-size: 28px;
-        font-weight: 600;
-        color: #2c3e50;
-        margin: 0 0 16px 0;
-        line-height: 1.3;
-      }
-      
-      .torrent-tags {
-        margin-bottom: 20px;
-        
-        .el-tag {
-          margin: 0 8px 8px 0;
-        }
-      }
-      
-      .torrent-meta {
-        margin-bottom: 20px;
-        
-        .meta-item {
-          display: flex;
-          align-items: center;
-          gap: 8px;
-          margin-bottom: 8px;
-          color: #7f8c8d;
-          font-size: 14px;
-          
-          .el-icon {
-            color: #909399;
-          }
-        }
-      }
-      
-      .torrent-stats {
-        display: flex;
-        gap: 32px;
-        margin-bottom: 24px;
-        
-        .stat-item {
-          text-align: center;
-          
-          .stat-number {
-            display: block;
-            font-size: 24px;
-            font-weight: 600;
-            margin-bottom: 4px;
-            
-            &.seeders { color: #67c23a; }
-            &.leechers { color: #f56c6c; }
-            &.downloads { color: #409eff; }
-          }
-          
-          .stat-label {
-            font-size: 14px;
-            color: #909399;
-          }
-        }
-      }
-      
-      .action-buttons {
-        display: flex;
-        gap: 12px;
-        flex-wrap: wrap;
-      }
-    }
-  }
-}
-
-.detail-tabs {
-  background: #fff;
-  border-radius: 12px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  :deep(.el-tabs__content) {
-    padding: 24px;
-  }
-  
-  .description-content {
-    line-height: 1.6;
-    
-    :deep(h3) {
-      color: #2c3e50;
-      font-size: 18px;
-      font-weight: 600;
-      margin: 24px 0 12px 0;
-      
-      &:first-child {
-        margin-top: 0;
-      }
-    }
-    
-    :deep(p) {
-      margin-bottom: 12px;
-      color: #5a6c7d;
-    }
-    
-    :deep(ul) {
-      margin: 12px 0;
-      padding-left: 20px;
-      
-      li {
-        margin-bottom: 8px;
-        color: #5a6c7d;
-      }
-    }
-    
-    .no-description {
-      text-align: center;
-      color: #909399;
-      padding: 40px 0;
-    }
-  }
-  
-  .files-list {
-    .file-name {
-      display: flex;
-      align-items: center;
-      gap: 8px;
-      
-      .el-icon {
-        color: #909399;
-      }
-    }
-  }
-  
-  .activity-section {
-    .activity-stats {
-      margin-bottom: 24px;
-      
-      .stats-grid {
-        display: grid;
-        grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
-        gap: 16px;
-        
-        .stat-card {
-          background: #f8f9fa;
-          padding: 20px;
-          border-radius: 8px;
-          text-align: center;
-          
-          h3 {
-            font-size: 14px;
-            color: #909399;
-            margin: 0 0 8px 0;
-          }
-          
-          .stat-number {
-            font-size: 24px;
-            font-weight: 600;
-            color: #2c3e50;
-          }
-        }
-      }
-    }
-  }
-  
-  .comments-section {
-    .comment-form {
-      margin-bottom: 32px;
-      
-      .comment-actions {
-        margin-top: 12px;
-        text-align: right;
-      }
-    }
-    
-    .comments-list {
-      .comment-item {
-        display: flex;
-        gap: 16px;
-        margin-bottom: 24px;
-        padding-bottom: 24px;
-        border-bottom: 1px solid #f0f0f0;
-        
-        &:last-child {
-          border-bottom: none;
-          margin-bottom: 0;
-          padding-bottom: 0;
-        }
-        
-        .comment-content {
-          flex: 1;
-          
-          .comment-header {
-            display: flex;
-            align-items: center;
-            gap: 12px;
-            margin-bottom: 8px;
-            
-            .comment-username {
-              font-weight: 600;
-              color: #2c3e50;
-            }
-            
-            .comment-time {
-              font-size: 12px;
-              color: #909399;
-            }
-          }
-          
-          .comment-text {
-            color: #5a6c7d;
-            line-height: 1.5;
-            margin-bottom: 12px;
-          }
-          
-          .comment-actions {
-            .el-button {
-              padding: 0;
-              margin-right: 16px;
-              
-              .el-icon {
-                margin-right: 4px;
-              }
-            }
-          }
-        }
-      }
-      
-      .no-comments {
-        text-align: center;
-        color: #909399;
-        padding: 40px 0;
-      }
-    }
-  }
-}
-
-// 响应式设计
-@media (max-width: 768px) {
-  .torrent-detail-page {
-    padding: 16px;
-  }
-  
-  .torrent-header .header-content {
-    flex-direction: column;
-    text-align: center;
-    
-    .torrent-cover {
-      align-self: center;
-    }
-    
-    .torrent-stats {
-      justify-content: center;
-    }
-    
-    .action-buttons {
-      justify-content: center;
-    }
-  }
-  
-  .activity-section .stats-grid {
-    grid-template-columns: 1fr;
-  }
-  
-  .comment-item {
-    flex-direction: column;
-    gap: 12px;
-  }
-}
+<template>

+  <div class="torrent-detail-page">

+    <div class="page-container">

+      <!-- 返回按钮 -->

+      <div class="back-button">

+        <el-button :icon="ArrowLeft" @click="$router.back()">

+          返回列表

+        </el-button>

+      </div>

+

+      <!-- 种子基本信息 -->

+      <div class="torrent-header">

+        <div class="header-content">

+          <div class="torrent-cover">

+            <el-image

+              :src="torrentInfo.coverImage || '/default-cover.jpg'"

+              :alt="torrentInfo.title"

+              fit="cover"

+              class="cover-image"

+            >

+              <template #error>

+                <div class="image-placeholder">

+                  <el-icon size="48"><Picture /></el-icon>

+                  <span>暂无封面</span>

+                </div>

+              </template>

+            </el-image>

+          </div>

+          

+          <div class="torrent-info">

+            <div class="category-tag">

+              <el-tag :type="getCategoryType(torrentInfo.category)" size="large">

+                {{ getCategoryName(torrentInfo.category) }}

+              </el-tag>

+              <el-tag v-if="torrentInfo.subcategory" type="info" size="small">

+                {{ torrentInfo.subcategory }}

+              </el-tag>

+            </div>

+            

+            <h1 class="torrent-title">{{ torrentInfo.title }}</h1>

+            

+            <div class="torrent-tags">

+              <el-tag

+                v-for="tag in torrentInfo.tags"

+                :key="tag"

+                size="small"

+                effect="plain"

+              >

+                {{ tag }}

+              </el-tag>

+            </div>

+            

+            <div class="torrent-meta">

+              <div class="meta-item">

+                <el-icon><User /></el-icon>

+                <span>上传者:{{ torrentInfo.uploader }}</span>

+              </div>

+              <div class="meta-item">

+                <el-icon><Clock /></el-icon>

+                <span>上传时间:{{ formatDateTime(torrentInfo.uploadTime) }}</span>

+              </div>

+              <div class="meta-item">

+                <el-icon><Document /></el-icon>

+                <span>文件大小:{{ torrentInfo.size }}</span>

+              </div>

+              <div class="meta-item">

+                <el-icon><Files /></el-icon>

+                <span>文件数量:{{ torrentInfo.fileCount }} 个</span>

+              </div>

+            </div>

+            

+            <div class="torrent-stats">

+              <div class="stat-item seeders">

+                <span class="stat-number">{{ torrentInfo.seeders }}</span>

+                <span class="stat-label">做种</span>

+              </div>

+              <div class="stat-item leechers">

+                <span class="stat-number">{{ torrentInfo.leechers }}</span>

+                <span class="stat-label">下载</span>

+              </div>

+              <div class="stat-item downloads">

+                <span class="stat-number">{{ torrentInfo.downloads }}</span>

+                <span class="stat-label">完成</span>

+              </div>

+            </div>

+            

+            <div class="action-buttons">

+              <el-button 

+                type="primary" 

+                size="large" 

+                :icon="Download"

+                @click="handleDownload"

+                :loading="downloading"

+              >

+                {{ downloading ? '准备中...' : '下载种子' }}

+              </el-button>

+              <el-button 

+                type="success" 

+                size="large" 

+                :icon="Star"

+                @click="handleFavorite"

+              >

+                {{ isFavorited ? '已收藏' : '收藏' }}

+              </el-button>

+              <el-button 

+                type="warning" 

+                size="large" 

+                :icon="Flag"

+                @click="handleReport"

+              >

+                举报

+              </el-button>

+            </div>

+          </div>

+        </div>

+      </div>

+

+      <!-- 详细信息选项卡 -->

+      <div class="detail-tabs">

+        <el-tabs v-model="activeTab" type="border-card">

+          <!-- 种子描述 -->

+          <el-tab-pane label="详细描述" name="description">

+            <div class="description-content">

+              <div v-if="torrentInfo.description" v-html="formatDescription(torrentInfo.description)"></div>

+              <div v-else class="no-description">暂无详细描述</div>

+            </div>

+          </el-tab-pane>

+          

+          <!-- 文件列表 -->

+          <el-tab-pane label="文件列表" name="files" lazy>

+            <div class="files-list">

+              <el-table :data="torrentInfo.files" stripe>

+                <el-table-column label="文件名" prop="name" min-width="400">

+                  <template #default="{ row }">

+                    <div class="file-name">

+                      <el-icon v-if="row.type === 'folder'"><Folder /></el-icon>

+                      <el-icon v-else><Document /></el-icon>

+                      <span>{{ row.name }}</span>

+                    </div>

+                  </template>

+                </el-table-column>

+                <el-table-column label="大小" prop="size" width="120" align="right" />

+                <el-table-column label="路径" prop="path" min-width="300" />

+              </el-table>

+            </div>

+          </el-tab-pane>

+          

+          <!-- 用户活动 -->

+          <el-tab-pane label="用户活动" name="activity">

+            <div class="activity-section">

+              <div class="activity-stats">

+                <div class="stats-grid">

+                  <div class="stat-card">

+                    <h3>做种用户</h3>

+                    <p class="stat-number">{{ torrentInfo.seeders }}</p>

+                  </div>

+                  <div class="stat-card">

+                    <h3>下载用户</h3>

+                    <p class="stat-number">{{ torrentInfo.leechers }}</p>

+                  </div>

+                  <div class="stat-card">

+                    <h3>完成用户</h3>

+                    <p class="stat-number">{{ torrentInfo.downloads }}</p>

+                  </div>

+                </div>

+              </div>

+              

+              <div class="user-lists">

+                <el-tabs v-model="activityTab" type="card">

+                  <el-tab-pane label="做种用户" name="seeders">

+                    <el-table :data="seedersList" max-height="400">

+                      <el-table-column label="用户" prop="username" />

+                      <el-table-column label="上传量" prop="uploaded" />

+                      <el-table-column label="下载量" prop="downloaded" />

+                      <el-table-column label="分享率" prop="ratio" />

+                      <el-table-column label="做种时间" prop="seedTime" />

+                    </el-table>

+                  </el-tab-pane>

+                  

+                  <el-tab-pane label="下载用户" name="leechers">

+                    <el-table :data="leechersList" max-height="400">

+                      <el-table-column label="用户" prop="username" />

+                      <el-table-column label="进度" prop="progress">

+                        <template #default="{ row }">

+                          <el-progress :percentage="row.progress" :stroke-width="6" />

+                        </template>

+                      </el-table-column>

+                      <el-table-column label="下载速度" prop="downloadSpeed" />

+                      <el-table-column label="剩余时间" prop="eta" />

+                    </el-table>

+                  </el-tab-pane>

+                </el-tabs>

+              </div>

+            </div>

+          </el-tab-pane>

+          

+          <!-- 评论区 -->

+          <el-tab-pane label="评论" name="comments">

+            <div class="comments-section">

+              <!-- 发表评论 -->

+              <div class="comment-form">

+                <el-input

+                  v-model="newComment"

+                  type="textarea"

+                  :rows="4"

+                  placeholder="发表你的评论..."

+                  maxlength="500"

+                  show-word-limit

+                />

+                <div class="comment-actions">

+                  <el-button type="primary" @click="submitComment" :loading="submittingComment">

+                    发表评论

+                  </el-button>

+                </div>

+              </div>

+              

+              <!-- 评论列表 -->

+              <div class="comments-list">

+                <div

+                  v-for="comment in comments"

+                  :key="comment.id"

+                  class="comment-item"

+                >

+                  <div class="comment-avatar">

+                    <el-avatar :size="40">{{ comment.username.charAt(0) }}</el-avatar>

+                  </div>

+                  <div class="comment-content">

+                    <div class="comment-header">

+                      <span class="comment-username">{{ comment.username }}</span>

+                      <span class="comment-time">{{ formatDateTime(comment.time) }}</span>

+                    </div>

+                    <div class="comment-text">{{ comment.content }}</div>

+                    <div class="comment-actions">

+                      <el-button type="text" size="small" @click="likeComment(comment.id)">

+                        <el-icon><Like /></el-icon>

+                        {{ comment.likes || 0 }}

+                      </el-button>

+                      <el-button type="text" size="small" @click="replyComment(comment.id)">

+                        回复

+                      </el-button>

+                    </div>

+                  </div>

+                </div>

+                

+                <div v-if="comments.length === 0" class="no-comments">

+                  暂无评论,快来发表第一条评论吧!

+                </div>

+              </div>

+            </div>

+          </el-tab-pane>

+        </el-tabs>

+      </div>

+    </div>

+  </div>

+</template>

+

+<script>

+import { ref, onMounted } from 'vue'

+import { useRoute, useRouter } from 'vue-router'

+import { ElMessage, ElMessageBox } from 'element-plus'

+import {

+  ArrowLeft,

+  Download,

+  Star,

+  Flag,

+  User,

+  Clock,

+  Document,

+  Files,

+  Picture,

+  Folder,

+  Like

+} from '@element-plus/icons-vue'

+

+export default {

+  name: 'TorrentDetailView',

+  setup() {

+    const route = useRoute()

+    const router = useRouter()

+    

+    const activeTab = ref('description')

+    const activityTab = ref('seeders')

+    const downloading = ref(false)

+    const isFavorited = ref(false)

+    const submittingComment = ref(false)

+    const newComment = ref('')

+    

+    const torrentInfo = ref({

+      id: 1,

+      title: '[4K蓝光原盘] 阿凡达:水之道 Avatar: The Way of Water (2022)',

+      category: 'movie',

+      subcategory: '科幻片',

+      uploader: 'MovieMaster',

+      uploadTime: '2025-06-03T10:30:00',

+      size: '85.6 GB',

+      fileCount: 125,

+      seeders: 128,

+      leechers: 45,

+      downloads: 892,

+      coverImage: 'https://example.com/avatar2-cover.jpg',

+      tags: ['4K', '蓝光原盘', '科幻', '詹姆斯·卡梅隆'],

+      description: `

+        <h3>影片信息</h3>

+        <p><strong>片名:</strong>阿凡达:水之道 / Avatar: The Way of Water</p>

+        <p><strong>年份:</strong>2022</p>

+        <p><strong>导演:</strong>詹姆斯·卡梅隆</p>

+        <p><strong>主演:</strong>萨姆·沃辛顿 / 佐伊·索尔达娜 / 西格妮·韦弗</p>

+        <p><strong>类型:</strong>科幻 / 动作 / 冒险</p>

+        <p><strong>制片国家/地区:</strong>美国</p>

+        <p><strong>语言:</strong>英语</p>

+        <p><strong>上映日期:</strong>2022-12-16</p>

+        <p><strong>片长:</strong>192分钟</p>

+        

+        <h3>影片简介</h3>

+        <p>杰克·萨利和奈蒂莉组建了家庭,他们的孩子也逐渐成长。当危险威胁到他们时,杰克和奈蒂莉必须为彼此而战,为家庭而战,为生存而战。</p>

+        

+        <h3>技术规格</h3>

+        <ul>

+          <li>视频:4K UHD 2160p / HEVC / HDR10</li>

+          <li>音频:Dolby Atmos TrueHD 7.1 / DTS-HD MA 7.1</li>

+          <li>字幕:中文 / 英文</li>

+          <li>片源:4K UHD 蓝光原盘</li>

+        </ul>

+        

+        <h3>下载说明</h3>

+        <p>本资源为4K蓝光原盘,保持了最高的画质和音质。建议使用支持4K播放的设备观看。</p>

+      `,

+      files: [

+        { name: 'BDMV', type: 'folder', size: '85.6 GB', path: '/' },

+        { name: 'CERTIFICATE', type: 'folder', size: '2.1 MB', path: '/' },

+        { name: 'Avatar.The.Way.of.Water.2022.2160p.UHD.Blu-ray.x265.HDR.Atmos-DETAIL.mkv', type: 'file', size: '32.8 GB', path: '/BDMV/STREAM/' },

+        { name: 'Avatar.The.Way.of.Water.2022.Extras.mkv', type: 'file', size: '12.4 GB', path: '/BDMV/STREAM/' }

+      ]

+    })

+    

+    const seedersList = ref([

+      { username: 'SeedMaster', uploaded: '2.5 TB', downloaded: '850 GB', ratio: '3.02', seedTime: '15天' },

+      { username: 'MovieFan88', uploaded: '1.8 TB', downloaded: '1.2 TB', ratio: '1.50', seedTime: '8天' },

+      { username: 'CinemaLover', uploaded: '3.2 TB', downloaded: '900 GB', ratio: '3.56', seedTime: '22天' }

+    ])

+    

+    const leechersList = ref([

+      { username: 'NewUser123', progress: 65, downloadSpeed: '15.2 MB/s', eta: '2小时15分' },

+      { username: 'MovieSeeker', progress: 23, downloadSpeed: '8.7 MB/s', eta: '8小时32分' },

+      { username: 'FilmCollector', progress: 89, downloadSpeed: '22.1 MB/s', eta: '45分钟' }

+    ])

+    

+    const comments = ref([

+      {

+        id: 1,

+        username: 'MovieReviewer',

+        content: '画质非常棒!4K HDR效果惊艳,水下场景美不胜收。感谢分享!',

+        time: '2025-06-03T12:00:00',

+        likes: 15

+      },

+      {

+        id: 2,

+        username: 'CinemaExpert',

+        content: '音效也很棒,Dolby Atmos的环绕效果让人身临其境。推荐大家下载!',

+        time: '2025-06-03T11:30:00',

+        likes: 8

+      }

+    ])

+    

+    onMounted(() => {

+      const torrentId = route.params.id

+      fetchTorrentDetail(torrentId)

+    })

+    

+    const fetchTorrentDetail = async (id) => {

+      try {

+        // 模拟API调用

+        console.log('获取种子详情:', id)

+        // 这里应该调用真实的API

+      } catch (error) {

+        ElMessage.error('获取种子详情失败')

+        router.back()

+      }

+    }

+    

+    const formatDateTime = (dateString) => {

+      const date = new Date(dateString)

+      return date.toLocaleString('zh-CN', {

+        year: 'numeric',

+        month: '2-digit',

+        day: '2-digit',

+        hour: '2-digit',

+        minute: '2-digit'

+      })

+    }

+    

+    const formatDescription = (description) => {

+      // 简单的HTML清理,实际项目中应该使用专门的库

+      return description.replace(/\n/g, '<br>')

+    }

+    

+    const getCategoryType = (category) => {

+      const types = {

+        'movie': 'primary',

+        'tv': 'info',

+        'music': 'success',

+        'software': 'warning',

+        'game': 'danger'

+      }

+      return types[category] || 'default'

+    }

+    

+    const getCategoryName = (category) => {

+      const names = {

+        'movie': '电影',

+        'tv': '电视剧',

+        'music': '音乐',

+        'software': '软件',

+        'game': '游戏'

+      }

+      return names[category] || category

+    }

+    

+    const handleDownload = async () => {

+      downloading.value = true

+      try {

+        // 模拟下载准备过程

+        await new Promise(resolve => setTimeout(resolve, 1500))

+        

+        // 实际项目中这里应该下载.torrent文件

+        const link = document.createElement('a')

+        link.href = '#' // 实际的种子文件下载链接

+        link.download = `${torrentInfo.value.title}.torrent`

+        link.click()

+        

+        ElMessage.success('种子文件下载完成')

+      } catch (error) {

+        ElMessage.error('下载失败,请稍后重试')

+      } finally {

+        downloading.value = false

+      }

+    }

+    

+    const handleFavorite = () => {

+      isFavorited.value = !isFavorited.value

+      ElMessage.success(isFavorited.value ? '已添加到收藏' : '已取消收藏')

+    }

+    

+    const handleReport = async () => {

+      try {

+        await ElMessageBox.prompt('请说明举报原因', '举报内容', {

+          confirmButtonText: '提交举报',

+          cancelButtonText: '取消',

+          inputType: 'textarea',

+          inputPlaceholder: '请详细说明举报原因...'

+        })

+        

+        ElMessage.success('举报已提交,我们会尽快处理')

+      } catch {

+        // 用户取消

+      }

+    }

+    

+    const submitComment = async () => {

+      if (!newComment.value.trim()) {

+        ElMessage.warning('请输入评论内容')

+        return

+      }

+      

+      submittingComment.value = true

+      try {

+        // 模拟提交评论

+        await new Promise(resolve => setTimeout(resolve, 1000))

+        

+        const comment = {

+          id: Date.now(),

+          username: localStorage.getItem('username') || '用户',

+          content: newComment.value,

+          time: new Date().toISOString(),

+          likes: 0

+        }

+        

+        comments.value.unshift(comment)

+        newComment.value = ''

+        

+        ElMessage.success('评论发表成功')

+      } catch (error) {

+        ElMessage.error('发表评论失败')

+      } finally {

+        submittingComment.value = false

+      }

+    }

+    

+    const likeComment = (commentId) => {

+      const comment = comments.value.find(c => c.id === commentId)

+      if (comment) {

+        comment.likes = (comment.likes || 0) + 1

+        ElMessage.success('点赞成功')

+      }

+    }

+    

+    const replyComment = (commentId) => {

+      // 实现回复功能

+      ElMessage.info('回复功能开发中...')

+    }

+    

+    return {

+      activeTab,

+      activityTab,

+      downloading,

+      isFavorited,

+      submittingComment,

+      newComment,

+      torrentInfo,

+      seedersList,

+      leechersList,

+      comments,

+      formatDateTime,

+      formatDescription,

+      getCategoryType,

+      getCategoryName,

+      handleDownload,

+      handleFavorite,

+      handleReport,

+      submitComment,

+      likeComment,

+      replyComment,

+      ArrowLeft,

+      Download,

+      Star,

+      Flag,

+      User,

+      Clock,

+      Document,

+      Files,

+      Picture,

+      Folder,

+      Like

+    }

+  }

+}

+</script>

+

+<style lang="scss" scoped>

+.torrent-detail-page {

+  max-width: 1200px;

+  margin: 0 auto;

+  padding: 24px;

+  background: #f5f5f5;

+  min-height: 100vh;

+}

+

+.back-button {

+  margin-bottom: 16px;

+}

+

+.torrent-header {

+  background: #fff;

+  border-radius: 12px;

+  padding: 32px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .header-content {

+    display: flex;

+    gap: 32px;

+    

+    .torrent-cover {

+      flex-shrink: 0;

+      

+      .cover-image {

+        width: 200px;

+        height: 280px;

+        border-radius: 8px;

+        object-fit: cover;

+      }

+      

+      .image-placeholder {

+        width: 200px;

+        height: 280px;

+        background: #f5f5f5;

+        border-radius: 8px;

+        display: flex;

+        flex-direction: column;

+        align-items: center;

+        justify-content: center;

+        color: #999;

+        

+        span {

+          margin-top: 8px;

+          font-size: 14px;

+        }

+      }

+    }

+    

+    .torrent-info {

+      flex: 1;

+      

+      .category-tag {

+        margin-bottom: 16px;

+        

+        .el-tag {

+          margin-right: 8px;

+        }

+      }

+      

+      .torrent-title {

+        font-size: 28px;

+        font-weight: 600;

+        color: #2c3e50;

+        margin: 0 0 16px 0;

+        line-height: 1.3;

+      }

+      

+      .torrent-tags {

+        margin-bottom: 20px;

+        

+        .el-tag {

+          margin: 0 8px 8px 0;

+        }

+      }

+      

+      .torrent-meta {

+        margin-bottom: 20px;

+        

+        .meta-item {

+          display: flex;

+          align-items: center;

+          gap: 8px;

+          margin-bottom: 8px;

+          color: #7f8c8d;

+          font-size: 14px;

+          

+          .el-icon {

+            color: #909399;

+          }

+        }

+      }

+      

+      .torrent-stats {

+        display: flex;

+        gap: 32px;

+        margin-bottom: 24px;

+        

+        .stat-item {

+          text-align: center;

+          

+          .stat-number {

+            display: block;

+            font-size: 24px;

+            font-weight: 600;

+            margin-bottom: 4px;

+            

+            &.seeders { color: #67c23a; }

+            &.leechers { color: #f56c6c; }

+            &.downloads { color: #409eff; }

+          }

+          

+          .stat-label {

+            font-size: 14px;

+            color: #909399;

+          }

+        }

+      }

+      

+      .action-buttons {

+        display: flex;

+        gap: 12px;

+        flex-wrap: wrap;

+      }

+    }

+  }

+}

+

+.detail-tabs {

+  background: #fff;

+  border-radius: 12px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  :deep(.el-tabs__content) {

+    padding: 24px;

+  }

+  

+  .description-content {

+    line-height: 1.6;

+    

+    :deep(h3) {

+      color: #2c3e50;

+      font-size: 18px;

+      font-weight: 600;

+      margin: 24px 0 12px 0;

+      

+      &:first-child {

+        margin-top: 0;

+      }

+    }

+    

+    :deep(p) {

+      margin-bottom: 12px;

+      color: #5a6c7d;

+    }

+    

+    :deep(ul) {

+      margin: 12px 0;

+      padding-left: 20px;

+      

+      li {

+        margin-bottom: 8px;

+        color: #5a6c7d;

+      }

+    }

+    

+    .no-description {

+      text-align: center;

+      color: #909399;

+      padding: 40px 0;

+    }

+  }

+  

+  .files-list {

+    .file-name {

+      display: flex;

+      align-items: center;

+      gap: 8px;

+      

+      .el-icon {

+        color: #909399;

+      }

+    }

+  }

+  

+  .activity-section {

+    .activity-stats {

+      margin-bottom: 24px;

+      

+      .stats-grid {

+        display: grid;

+        grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));

+        gap: 16px;

+        

+        .stat-card {

+          background: #f8f9fa;

+          padding: 20px;

+          border-radius: 8px;

+          text-align: center;

+          

+          h3 {

+            font-size: 14px;

+            color: #909399;

+            margin: 0 0 8px 0;

+          }

+          

+          .stat-number {

+            font-size: 24px;

+            font-weight: 600;

+            color: #2c3e50;

+          }

+        }

+      }

+    }

+  }

+  

+  .comments-section {

+    .comment-form {

+      margin-bottom: 32px;

+      

+      .comment-actions {

+        margin-top: 12px;

+        text-align: right;

+      }

+    }

+    

+    .comments-list {

+      .comment-item {

+        display: flex;

+        gap: 16px;

+        margin-bottom: 24px;

+        padding-bottom: 24px;

+        border-bottom: 1px solid #f0f0f0;

+        

+        &:last-child {

+          border-bottom: none;

+          margin-bottom: 0;

+          padding-bottom: 0;

+        }

+        

+        .comment-content {

+          flex: 1;

+          

+          .comment-header {

+            display: flex;

+            align-items: center;

+            gap: 12px;

+            margin-bottom: 8px;

+            

+            .comment-username {

+              font-weight: 600;

+              color: #2c3e50;

+            }

+            

+            .comment-time {

+              font-size: 12px;

+              color: #909399;

+            }

+          }

+          

+          .comment-text {

+            color: #5a6c7d;

+            line-height: 1.5;

+            margin-bottom: 12px;

+          }

+          

+          .comment-actions {

+            .el-button {

+              padding: 0;

+              margin-right: 16px;

+              

+              .el-icon {

+                margin-right: 4px;

+              }

+            }

+          }

+        }

+      }

+      

+      .no-comments {

+        text-align: center;

+        color: #909399;

+        padding: 40px 0;

+      }

+    }

+  }

+}

+

+// 响应式设计

+@media (max-width: 768px) {

+  .torrent-detail-page {

+    padding: 16px;

+  }

+  

+  .torrent-header .header-content {

+    flex-direction: column;

+    text-align: center;

+    

+    .torrent-cover {

+      align-self: center;

+    }

+    

+    .torrent-stats {

+      justify-content: center;

+    }

+    

+    .action-buttons {

+      justify-content: center;

+    }

+  }

+  

+  .activity-section .stats-grid {

+    grid-template-columns: 1fr;

+  }

+  

+  .comment-item {

+    flex-direction: column;

+    gap: 12px;

+  }

+}

 </style>
\ No newline at end of file
diff --git a/src/views/torrent/TorrentsView.vue b/src/views/torrent/TorrentsView.vue
index f3231da..1ae9f4b 100644
--- a/src/views/torrent/TorrentsView.vue
+++ b/src/views/torrent/TorrentsView.vue
@@ -1,479 +1,479 @@
-<template>
-  <div class="torrents-page">
-    <div class="page-header">
-      <h1>种子资源</h1>
-      <div class="header-actions">
-        <el-button type="primary" :icon="Upload" @click="$router.push('/upload')">
-          上传种子
-        </el-button>
-      </div>
-    </div>
-
-    <!-- 搜索和筛选 -->
-    <div class="search-section">
-      <div class="search-bar">
-        <el-input
-          v-model="searchQuery"
-          placeholder="搜索种子..."
-          :prefix-icon="Search"
-          size="large"
-          @keyup.enter="handleSearch"
-          clearable
-        />
-        <el-button type="primary" size="large" @click="handleSearch">
-          搜索
-        </el-button>
-      </div>
-      
-      <div class="filters">
-        <el-select v-model="selectedCategory" placeholder="分类" @change="handleFilter">
-          <el-option label="全部" value="" />
-          <el-option label="电影" value="movie" />
-          <el-option label="电视剧" value="tv" />
-          <el-option label="音乐" value="music" />
-          <el-option label="软件" value="software" />
-          <el-option label="游戏" value="game" />
-        </el-select>
-        
-        <el-select v-model="sortBy" placeholder="排序方式" @change="handleFilter">
-          <el-option label="上传时间" value="upload_time" />
-          <el-option label="文件大小" value="size" />
-          <el-option label="做种数" value="seeders" />
-          <el-option label="下载数" value="leechers" />
-          <el-option label="完成数" value="downloads" />
-        </el-select>
-        
-        <el-radio-group v-model="sortOrder" @change="handleFilter">
-          <el-radio-button label="desc">降序</el-radio-button>
-          <el-radio-button label="asc">升序</el-radio-button>
-        </el-radio-group>
-      </div>
-    </div>
-
-    <!-- 种子列表 -->
-    <div class="torrents-list">
-      <div class="list-header">
-        <span class="results-count">共找到 {{ totalCount }} 个种子</span>
-      </div>
-      
-      <el-table 
-        :data="torrents" 
-        v-loading="loading"
-        @row-click="handleRowClick"
-        stripe
-        class="torrents-table"
-      >
-        <el-table-column label="分类" width="80">
-          <template #default="{ row }">
-            <el-tag :type="getCategoryType(row.category)" size="small">
-              {{ getCategoryName(row.category) }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        
-        <el-table-column label="种子信息" min-width="400">
-          <template #default="{ row }">
-            <div class="torrent-info">
-              <h4 class="torrent-title">{{ row.title }}</h4>
-              <div class="torrent-meta">
-                <span class="uploader">
-                  <el-icon><User /></el-icon>
-                  {{ row.uploader }}
-                </span>
-                <span class="upload-time">
-                  <el-icon><Clock /></el-icon>
-                  {{ formatTime(row.uploadTime) }}
-                </span>
-                <span class="file-size">
-                  <el-icon><Document /></el-icon>
-                  {{ row.size }}
-                </span>
-              </div>
-            </div>
-          </template>
-        </el-table-column>
-        
-        <el-table-column label="做种" width="80" align="center">
-          <template #default="{ row }">
-            <span class="seeders">{{ row.seeders }}</span>
-          </template>
-        </el-table-column>
-        
-        <el-table-column label="下载" width="80" align="center">
-          <template #default="{ row }">
-            <span class="leechers">{{ row.leechers }}</span>
-          </template>
-        </el-table-column>
-        
-        <el-table-column label="完成" width="80" align="center">
-          <template #default="{ row }">
-            <span>{{ row.downloads }}</span>
-          </template>
-        </el-table-column>
-        
-        <el-table-column label="操作" width="120" align="center">
-          <template #default="{ row }">
-            <el-button 
-              type="primary" 
-              size="small" 
-              :icon="Download"
-              @click.stop="handleDownload(row)"
-            >
-              下载
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      
-      <!-- 分页 -->
-      <div class="pagination-wrapper">
-        <el-pagination
-          v-model:current-page="currentPage"
-          v-model:page-size="pageSize"
-          :page-sizes="[20, 50, 100]"
-          :total="totalCount"
-          layout="total, sizes, prev, pager, next, jumper"
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        />
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { ref, onMounted, watch } from 'vue'
-import { useRouter, useRoute } from 'vue-router'
-import { ElMessage } from 'element-plus'
-import {
-  Search,
-  Upload,
-  Download,
-  User,
-  Clock,
-  Document
-} from '@element-plus/icons-vue'
-
-export default {
-  name: 'TorrentsView',
-  setup() {
-    const router = useRouter()
-    const route = useRoute()
-    
-    const loading = ref(false)
-    const searchQuery = ref('')
-    const selectedCategory = ref('')
-    const sortBy = ref('upload_time')
-    const sortOrder = ref('desc')
-    const currentPage = ref(1)
-    const pageSize = ref(20)
-    const totalCount = ref(0)
-    
-    const torrents = ref([
-      {
-        id: 1,
-        title: '[4K蓝光原盘] 阿凡达:水之道 Avatar: The Way of Water (2022)',
-        category: 'movie',
-        uploader: 'MovieMaster',
-        uploadTime: '2025-06-03T10:30:00',
-        size: '85.6 GB',
-        seeders: 128,
-        leechers: 45,
-        downloads: 892
-      },
-      {
-        id: 2,
-        title: '[FLAC] Taylor Swift - Midnights (Deluxe Edition) [2022]',
-        category: 'music',
-        uploader: 'MusicLover',
-        uploadTime: '2025-06-03T09:15:00',
-        size: '1.2 GB',
-        seeders: 67,
-        leechers: 12,
-        downloads: 456
-      },
-      {
-        id: 3,
-        title: '[合集] Adobe Creative Suite 2025 完整版',
-        category: 'software',
-        uploader: 'TechGuru',
-        uploadTime: '2025-06-03T08:45:00',
-        size: '12.8 GB',
-        seeders: 234,
-        leechers: 89,
-        downloads: 1205
-      }
-    ])
-    
-    onMounted(() => {
-      // 从URL参数初始化搜索条件
-      if (route.query.q) {
-        searchQuery.value = route.query.q
-      }
-      if (route.query.category) {
-        selectedCategory.value = route.query.category
-      }
-      
-      fetchTorrents()
-    })
-    
-    const fetchTorrents = async () => {
-      loading.value = true
-      try {
-        // 模拟API调用
-        await new Promise(resolve => setTimeout(resolve, 1000))
-        totalCount.value = 156
-      } catch (error) {
-        ElMessage.error('获取种子列表失败')
-      } finally {
-        loading.value = false
-      }
-    }
-    
-    const handleSearch = () => {
-      currentPage.value = 1
-      updateURL()
-      fetchTorrents()
-    }
-    
-    const handleFilter = () => {
-      currentPage.value = 1
-      updateURL()
-      fetchTorrents()
-    }
-    
-    const updateURL = () => {
-      const query = {}
-      if (searchQuery.value) query.q = searchQuery.value
-      if (selectedCategory.value) query.category = selectedCategory.value
-      if (sortBy.value !== 'upload_time') query.sort = sortBy.value
-      if (sortOrder.value !== 'desc') query.order = sortOrder.value
-      if (currentPage.value > 1) query.page = currentPage.value
-      
-      router.replace({ query })
-    }
-    
-    const handleRowClick = (row) => {
-      router.push(`/torrent/${row.id}`)
-    }
-    
-    const handleDownload = (row) => {
-      ElMessage.success(`开始下载: ${row.title}`)
-      // 这里实现下载逻辑
-    }
-    
-    const handleSizeChange = (size) => {
-      pageSize.value = size
-      currentPage.value = 1
-      fetchTorrents()
-    }
-    
-    const handleCurrentChange = (page) => {
-      currentPage.value = page
-      updateURL()
-      fetchTorrents()
-    }
-    
-    const formatTime = (timeString) => {
-      const date = new Date(timeString)
-      const now = new Date()
-      const diff = now - date
-      const hours = Math.floor(diff / (1000 * 60 * 60))
-      
-      if (hours < 1) return '刚刚'
-      if (hours < 24) return `${hours}小时前`
-      const days = Math.floor(hours / 24)
-      return `${days}天前`
-    }
-    
-    const getCategoryType = (category) => {
-      const types = {
-        'movie': 'primary',
-        'tv': 'info',
-        'music': 'success',
-        'software': 'warning',
-        'game': 'danger'
-      }
-      return types[category] || 'default'
-    }
-    
-    const getCategoryName = (category) => {
-      const names = {
-        'movie': '电影',
-        'tv': '电视剧',
-        'music': '音乐',
-        'software': '软件',
-        'game': '游戏'
-      }
-      return names[category] || category
-    }
-    
-    return {
-      loading,
-      searchQuery,
-      selectedCategory,
-      sortBy,
-      sortOrder,
-      currentPage,
-      pageSize,
-      totalCount,
-      torrents,
-      handleSearch,
-      handleFilter,
-      handleRowClick,
-      handleDownload,
-      handleSizeChange,
-      handleCurrentChange,
-      formatTime,
-      getCategoryType,
-      getCategoryName,
-      Search,
-      Upload,
-      Download,
-      User,
-      Clock,
-      Document
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.torrents-page {
-  max-width: 1200px;
-  margin: 0 auto;
-  padding: 24px;
-}
-
-.page-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 24px;
-  
-  h1 {
-    font-size: 28px;
-    font-weight: 600;
-    color: #2c3e50;
-    margin: 0;
-  }
-}
-
-.search-section {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  margin-bottom: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .search-bar {
-    display: flex;
-    gap: 12px;
-    margin-bottom: 16px;
-    
-    .el-input {
-      flex: 1;
-    }
-  }
-  
-  .filters {
-    display: flex;
-    gap: 16px;
-    flex-wrap: wrap;
-    align-items: center;
-    
-    .el-select {
-      width: 120px;
-    }
-  }
-}
-
-.torrents-list {
-  background: #fff;
-  border-radius: 12px;
-  padding: 24px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .list-header {
-    margin-bottom: 16px;
-    
-    .results-count {
-      font-size: 14px;
-      color: #909399;
-    }
-  }
-  
-  .torrents-table {
-    .torrent-info {
-      .torrent-title {
-        font-size: 16px;
-        font-weight: 500;
-        color: #2c3e50;
-        margin: 0 0 8px 0;
-        line-height: 1.4;
-        cursor: pointer;
-        
-        &:hover {
-          color: #409eff;
-        }
-      }
-      
-      .torrent-meta {
-        display: flex;
-        gap: 16px;
-        font-size: 12px;
-        color: #909399;
-        
-        span {
-          display: flex;
-          align-items: center;
-          gap: 4px;
-        }
-      }
-    }
-    
-    .seeders {
-      color: #67c23a;
-      font-weight: 600;
-    }
-    
-    .leechers {
-      color: #f56c6c;
-      font-weight: 600;
-    }
-  }
-  
-  .pagination-wrapper {
-    margin-top: 24px;
-    text-align: center;
-  }
-}
-
-@media (max-width: 768px) {
-  .torrents-page {
-    padding: 16px;
-  }
-  
-  .page-header {
-    flex-direction: column;
-    gap: 16px;
-    align-items: flex-start;
-  }
-  
-  .filters {
-    flex-direction: column;
-    align-items: flex-start;
-    
-    .el-select {
-      width: 100%;
-    }
-  }
-  
-  .torrents-table {
-    :deep(.el-table__header),
-    :deep(.el-table__body) {
-      font-size: 12px;
-    }
-  }
-}
+<template>

+  <div class="torrents-page">

+    <div class="page-header">

+      <h1>种子资源</h1>

+      <div class="header-actions">

+        <el-button type="primary" :icon="Upload" @click="$router.push('/upload')">

+          上传种子

+        </el-button>

+      </div>

+    </div>

+

+    <!-- 搜索和筛选 -->

+    <div class="search-section">

+      <div class="search-bar">

+        <el-input

+          v-model="searchQuery"

+          placeholder="搜索种子..."

+          :prefix-icon="Search"

+          size="large"

+          @keyup.enter="handleSearch"

+          clearable

+        />

+        <el-button type="primary" size="large" @click="handleSearch">

+          搜索

+        </el-button>

+      </div>

+      

+      <div class="filters">

+        <el-select v-model="selectedCategory" placeholder="分类" @change="handleFilter">

+          <el-option label="全部" value="" />

+          <el-option label="电影" value="movie" />

+          <el-option label="电视剧" value="tv" />

+          <el-option label="音乐" value="music" />

+          <el-option label="软件" value="software" />

+          <el-option label="游戏" value="game" />

+        </el-select>

+        

+        <el-select v-model="sortBy" placeholder="排序方式" @change="handleFilter">

+          <el-option label="上传时间" value="upload_time" />

+          <el-option label="文件大小" value="size" />

+          <el-option label="做种数" value="seeders" />

+          <el-option label="下载数" value="leechers" />

+          <el-option label="完成数" value="downloads" />

+        </el-select>

+        

+        <el-radio-group v-model="sortOrder" @change="handleFilter">

+          <el-radio-button label="desc">降序</el-radio-button>

+          <el-radio-button label="asc">升序</el-radio-button>

+        </el-radio-group>

+      </div>

+    </div>

+

+    <!-- 种子列表 -->

+    <div class="torrents-list">

+      <div class="list-header">

+        <span class="results-count">共找到 {{ totalCount }} 个种子</span>

+      </div>

+      

+      <el-table 

+        :data="torrents" 

+        v-loading="loading"

+        @row-click="handleRowClick"

+        stripe

+        class="torrents-table"

+      >

+        <el-table-column label="分类" width="80">

+          <template #default="{ row }">

+            <el-tag :type="getCategoryType(row.category)" size="small">

+              {{ getCategoryName(row.category) }}

+            </el-tag>

+          </template>

+        </el-table-column>

+        

+        <el-table-column label="种子信息" min-width="400">

+          <template #default="{ row }">

+            <div class="torrent-info">

+              <h4 class="torrent-title">{{ row.title }}</h4>

+              <div class="torrent-meta">

+                <span class="uploader">

+                  <el-icon><User /></el-icon>

+                  {{ row.uploader }}

+                </span>

+                <span class="upload-time">

+                  <el-icon><Clock /></el-icon>

+                  {{ formatTime(row.uploadTime) }}

+                </span>

+                <span class="file-size">

+                  <el-icon><Document /></el-icon>

+                  {{ row.size }}

+                </span>

+              </div>

+            </div>

+          </template>

+        </el-table-column>

+        

+        <el-table-column label="做种" width="80" align="center">

+          <template #default="{ row }">

+            <span class="seeders">{{ row.seeders }}</span>

+          </template>

+        </el-table-column>

+        

+        <el-table-column label="下载" width="80" align="center">

+          <template #default="{ row }">

+            <span class="leechers">{{ row.leechers }}</span>

+          </template>

+        </el-table-column>

+        

+        <el-table-column label="完成" width="80" align="center">

+          <template #default="{ row }">

+            <span>{{ row.downloads }}</span>

+          </template>

+        </el-table-column>

+        

+        <el-table-column label="操作" width="120" align="center">

+          <template #default="{ row }">

+            <el-button 

+              type="primary" 

+              size="small" 

+              :icon="Download"

+              @click.stop="handleDownload(row)"

+            >

+              下载

+            </el-button>

+          </template>

+        </el-table-column>

+      </el-table>

+      

+      <!-- 分页 -->

+      <div class="pagination-wrapper">

+        <el-pagination

+          v-model:current-page="currentPage"

+          v-model:page-size="pageSize"

+          :page-sizes="[20, 50, 100]"

+          :total="totalCount"

+          layout="total, sizes, prev, pager, next, jumper"

+          @size-change="handleSizeChange"

+          @current-change="handleCurrentChange"

+        />

+      </div>

+    </div>

+  </div>

+</template>

+

+<script>

+import { ref, onMounted, watch } from 'vue'

+import { useRouter, useRoute } from 'vue-router'

+import { ElMessage } from 'element-plus'

+import {

+  Search,

+  Upload,

+  Download,

+  User,

+  Clock,

+  Document

+} from '@element-plus/icons-vue'

+

+export default {

+  name: 'TorrentsView',

+  setup() {

+    const router = useRouter()

+    const route = useRoute()

+    

+    const loading = ref(false)

+    const searchQuery = ref('')

+    const selectedCategory = ref('')

+    const sortBy = ref('upload_time')

+    const sortOrder = ref('desc')

+    const currentPage = ref(1)

+    const pageSize = ref(20)

+    const totalCount = ref(0)

+    

+    const torrents = ref([

+      {

+        id: 1,

+        title: '[4K蓝光原盘] 阿凡达:水之道 Avatar: The Way of Water (2022)',

+        category: 'movie',

+        uploader: 'MovieMaster',

+        uploadTime: '2025-06-03T10:30:00',

+        size: '85.6 GB',

+        seeders: 128,

+        leechers: 45,

+        downloads: 892

+      },

+      {

+        id: 2,

+        title: '[FLAC] Taylor Swift - Midnights (Deluxe Edition) [2022]',

+        category: 'music',

+        uploader: 'MusicLover',

+        uploadTime: '2025-06-03T09:15:00',

+        size: '1.2 GB',

+        seeders: 67,

+        leechers: 12,

+        downloads: 456

+      },

+      {

+        id: 3,

+        title: '[合集] Adobe Creative Suite 2025 完整版',

+        category: 'software',

+        uploader: 'TechGuru',

+        uploadTime: '2025-06-03T08:45:00',

+        size: '12.8 GB',

+        seeders: 234,

+        leechers: 89,

+        downloads: 1205

+      }

+    ])

+    

+    onMounted(() => {

+      // 从URL参数初始化搜索条件

+      if (route.query.q) {

+        searchQuery.value = route.query.q

+      }

+      if (route.query.category) {

+        selectedCategory.value = route.query.category

+      }

+      

+      fetchTorrents()

+    })

+    

+    const fetchTorrents = async () => {

+      loading.value = true

+      try {

+        // 模拟API调用

+        await new Promise(resolve => setTimeout(resolve, 1000))

+        totalCount.value = 156

+      } catch (error) {

+        ElMessage.error('获取种子列表失败')

+      } finally {

+        loading.value = false

+      }

+    }

+    

+    const handleSearch = () => {

+      currentPage.value = 1

+      updateURL()

+      fetchTorrents()

+    }

+    

+    const handleFilter = () => {

+      currentPage.value = 1

+      updateURL()

+      fetchTorrents()

+    }

+    

+    const updateURL = () => {

+      const query = {}

+      if (searchQuery.value) query.q = searchQuery.value

+      if (selectedCategory.value) query.category = selectedCategory.value

+      if (sortBy.value !== 'upload_time') query.sort = sortBy.value

+      if (sortOrder.value !== 'desc') query.order = sortOrder.value

+      if (currentPage.value > 1) query.page = currentPage.value

+      

+      router.replace({ query })

+    }

+    

+    const handleRowClick = (row) => {

+      router.push(`/torrent/${row.id}`)

+    }

+    

+    const handleDownload = (row) => {

+      ElMessage.success(`开始下载: ${row.title}`)

+      // 这里实现下载逻辑

+    }

+    

+    const handleSizeChange = (size) => {

+      pageSize.value = size

+      currentPage.value = 1

+      fetchTorrents()

+    }

+    

+    const handleCurrentChange = (page) => {

+      currentPage.value = page

+      updateURL()

+      fetchTorrents()

+    }

+    

+    const formatTime = (timeString) => {

+      const date = new Date(timeString)

+      const now = new Date()

+      const diff = now - date

+      const hours = Math.floor(diff / (1000 * 60 * 60))

+      

+      if (hours < 1) return '刚刚'

+      if (hours < 24) return `${hours}小时前`

+      const days = Math.floor(hours / 24)

+      return `${days}天前`

+    }

+    

+    const getCategoryType = (category) => {

+      const types = {

+        'movie': 'primary',

+        'tv': 'info',

+        'music': 'success',

+        'software': 'warning',

+        'game': 'danger'

+      }

+      return types[category] || 'default'

+    }

+    

+    const getCategoryName = (category) => {

+      const names = {

+        'movie': '电影',

+        'tv': '电视剧',

+        'music': '音乐',

+        'software': '软件',

+        'game': '游戏'

+      }

+      return names[category] || category

+    }

+    

+    return {

+      loading,

+      searchQuery,

+      selectedCategory,

+      sortBy,

+      sortOrder,

+      currentPage,

+      pageSize,

+      totalCount,

+      torrents,

+      handleSearch,

+      handleFilter,

+      handleRowClick,

+      handleDownload,

+      handleSizeChange,

+      handleCurrentChange,

+      formatTime,

+      getCategoryType,

+      getCategoryName,

+      Search,

+      Upload,

+      Download,

+      User,

+      Clock,

+      Document

+    }

+  }

+}

+</script>

+

+<style lang="scss" scoped>

+.torrents-page {

+  max-width: 1200px;

+  margin: 0 auto;

+  padding: 24px;

+}

+

+.page-header {

+  display: flex;

+  justify-content: space-between;

+  align-items: center;

+  margin-bottom: 24px;

+  

+  h1 {

+    font-size: 28px;

+    font-weight: 600;

+    color: #2c3e50;

+    margin: 0;

+  }

+}

+

+.search-section {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  margin-bottom: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .search-bar {

+    display: flex;

+    gap: 12px;

+    margin-bottom: 16px;

+    

+    .el-input {

+      flex: 1;

+    }

+  }

+  

+  .filters {

+    display: flex;

+    gap: 16px;

+    flex-wrap: wrap;

+    align-items: center;

+    

+    .el-select {

+      width: 120px;

+    }

+  }

+}

+

+.torrents-list {

+  background: #fff;

+  border-radius: 12px;

+  padding: 24px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .list-header {

+    margin-bottom: 16px;

+    

+    .results-count {

+      font-size: 14px;

+      color: #909399;

+    }

+  }

+  

+  .torrents-table {

+    .torrent-info {

+      .torrent-title {

+        font-size: 16px;

+        font-weight: 500;

+        color: #2c3e50;

+        margin: 0 0 8px 0;

+        line-height: 1.4;

+        cursor: pointer;

+        

+        &:hover {

+          color: #409eff;

+        }

+      }

+      

+      .torrent-meta {

+        display: flex;

+        gap: 16px;

+        font-size: 12px;

+        color: #909399;

+        

+        span {

+          display: flex;

+          align-items: center;

+          gap: 4px;

+        }

+      }

+    }

+    

+    .seeders {

+      color: #67c23a;

+      font-weight: 600;

+    }

+    

+    .leechers {

+      color: #f56c6c;

+      font-weight: 600;

+    }

+  }

+  

+  .pagination-wrapper {

+    margin-top: 24px;

+    text-align: center;

+  }

+}

+

+@media (max-width: 768px) {

+  .torrents-page {

+    padding: 16px;

+  }

+  

+  .page-header {

+    flex-direction: column;

+    gap: 16px;

+    align-items: flex-start;

+  }

+  

+  .filters {

+    flex-direction: column;

+    align-items: flex-start;

+    

+    .el-select {

+      width: 100%;

+    }

+  }

+  

+  .torrents-table {

+    :deep(.el-table__header),

+    :deep(.el-table__body) {

+      font-size: 12px;

+    }

+  }

+}

 </style>
\ No newline at end of file
diff --git a/src/views/torrent/UploadView.vue b/src/views/torrent/UploadView.vue
index d99b446..80c3660 100644
--- a/src/views/torrent/UploadView.vue
+++ b/src/views/torrent/UploadView.vue
@@ -1,506 +1,506 @@
-<template>
-  <div class="upload-page">
-    <div class="page-header">
-      <h1>上传种子</h1>
-      <p class="page-description">分享你的资源,为社区做贡献</p>
-    </div>
-
-    <div class="upload-form">
-      <el-form
-        ref="uploadFormRef"
-        :model="uploadForm"
-        :rules="formRules"
-        label-width="120px"
-        size="large"
-      >
-        <!-- 种子文件上传 -->
-        <el-form-item label="种子文件" prop="torrentFile" required>
-          <el-upload
-            ref="torrentUploadRef"
-            :auto-upload="false"
-            :limit="1"
-            accept=".torrent"
-            :on-change="handleTorrentChange"
-            :on-remove="handleTorrentRemove"
-            :before-upload="beforeTorrentUpload"
-            drag
-            class="torrent-upload"
-          >
-            <el-icon class="el-icon--upload"><UploadFilled /></el-icon>
-            <div class="el-upload__text">
-              将 .torrent 文件拖到此处,或<em>点击上传</em>
-            </div>
-            <template #tip>
-              <div class="el-upload__tip">
-                只能上传 .torrent 文件,且不超过 10MB
-              </div>
-            </template>
-          </el-upload>
-        </el-form-item>
-
-        <!-- 基本信息 -->
-        <el-form-item label="资源标题" prop="title" required>
-          <el-input
-            v-model="uploadForm.title"
-            placeholder="请输入资源标题"
-            maxlength="200"
-            show-word-limit
-          />
-        </el-form-item>
-
-        <el-form-item label="资源分类" prop="category" required>
-          <el-select v-model="uploadForm.category" placeholder="请选择分类">
-            <el-option label="电影" value="movie" />
-            <el-option label="电视剧" value="tv" />
-            <el-option label="音乐" value="music" />
-            <el-option label="软件" value="software" />
-            <el-option label="游戏" value="game" />
-            <el-option label="电子书" value="ebook" />
-            <el-option label="其他" value="other" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="子分类" prop="subcategory">
-          <el-select v-model="uploadForm.subcategory" placeholder="请选择子分类">
-            <el-option
-              v-for="sub in getSubcategories(uploadForm.category)"
-              :key="sub.value"
-              :label="sub.label"
-              :value="sub.value"
-            />
-          </el-select>
-        </el-form-item>
-
-        <!-- 详细描述 -->
-        <el-form-item label="资源描述" prop="description">
-          <el-input
-            v-model="uploadForm.description"
-            type="textarea"
-            :rows="6"
-            placeholder="请详细描述资源内容,包括格式、质量、语言等信息"
-            maxlength="2000"
-            show-word-limit
-          />
-        </el-form-item>
-
-        <!-- 标签 -->
-        <el-form-item label="标签">
-          <div class="tags-input">
-            <el-tag
-              v-for="tag in uploadForm.tags"
-              :key="tag"
-              closable
-              @close="removeTag(tag)"
-              class="tag-item"
-            >
-              {{ tag }}
-            </el-tag>
-            <el-input
-              v-if="tagInputVisible"
-              ref="tagInputRef"
-              v-model="tagInputValue"
-              size="small"
-              @keyup.enter="addTag"
-              @blur="addTag"
-              class="tag-input"
-            />
-            <el-button
-              v-else
-              size="small"
-              @click="showTagInput"
-              class="add-tag-btn"
-            >
-              + 添加标签
-            </el-button>
-          </div>
-        </el-form-item>
-
-        <!-- 封面图片 -->
-        <el-form-item label="封面图片">
-          <el-upload
-            ref="imageUploadRef"
-            :auto-upload="false"
-            :limit="1"
-            accept="image/*"
-            :on-change="handleImageChange"
-            :on-remove="handleImageRemove"
-            list-type="picture-card"
-            class="image-upload"
-          >
-            <el-icon><Plus /></el-icon>
-            <template #tip>
-              <div class="el-upload__tip">
-                支持 JPG、PNG 格式,建议尺寸 300x400,不超过 5MB
-              </div>
-            </template>
-          </el-upload>
-        </el-form-item>
-
-        <!-- 高级选项 -->
-        <el-form-item>
-          <el-collapse>
-            <el-collapse-item title="高级选项" name="advanced">
-              <el-form-item label="免费时间">
-                <el-select v-model="uploadForm.freeTime" placeholder="选择免费时间">
-                  <el-option label="永久免费" value="forever" />
-                  <el-option label="24小时" value="24h" />
-                  <el-option label="48小时" value="48h" />
-                  <el-option label="7天" value="7d" />
-                  <el-option label="30天" value="30d" />
-                </el-select>
-              </el-form-item>
-
-              <el-form-item label="匿名上传">
-                <el-switch v-model="uploadForm.anonymous" />
-                <span class="form-tip">开启后将不显示上传者信息</span>
-              </el-form-item>
-
-              <el-form-item label="允许HR">
-                <el-switch v-model="uploadForm.allowHR" />
-                <span class="form-tip">允许此种子参与HR考核</span>
-              </el-form-item>
-            </el-collapse-item>
-          </el-collapse>
-        </el-form-item>
-
-        <!-- 提交按钮 -->
-        <el-form-item>
-          <div class="submit-buttons">
-            <el-button @click="resetForm">重置</el-button>
-            <el-button type="primary" @click="submitForm" :loading="uploading">
-              {{ uploading ? '上传中...' : '提交种子' }}
-            </el-button>
-          </div>
-        </el-form-item>
-      </el-form>
-    </div>
-  </div>
-</template>
-
-<script>
-import { ref, reactive, nextTick } from 'vue'
-import { useRouter } from 'vue-router'
-import { ElMessage } from 'element-plus'
-import {
-  UploadFilled,
-  Plus
-} from '@element-plus/icons-vue'
-
-export default {
-  name: 'UploadView',
-  setup() {
-    const router = useRouter()
-    const uploadFormRef = ref(null)
-    const torrentUploadRef = ref(null)
-    const imageUploadRef = ref(null)
-    const tagInputRef = ref(null)
-    
-    const uploading = ref(false)
-    const tagInputVisible = ref(false)
-    const tagInputValue = ref('')
-    
-    const uploadForm = reactive({
-      torrentFile: null,
-      title: '',
-      category: '',
-      subcategory: '',
-      description: '',
-      tags: [],
-      coverImage: null,
-      freeTime: '',
-      anonymous: false,
-      allowHR: true
-    })
-    
-    const formRules = {
-      title: [
-        { required: true, message: '请输入资源标题', trigger: 'blur' },
-        { min: 5, max: 200, message: '标题长度在 5 到 200 个字符', trigger: 'blur' }
-      ],
-      category: [
-        { required: true, message: '请选择资源分类', trigger: 'change' }
-      ],
-      description: [
-        { min: 10, max: 2000, message: '描述长度在 10 到 2000 个字符', trigger: 'blur' }
-      ]
-    }
-    
-    const subcategories = {
-      movie: [
-        { label: '动作片', value: 'action' },
-        { label: '喜剧片', value: 'comedy' },
-        { label: '科幻片', value: 'scifi' },
-        { label: '恐怖片', value: 'horror' },
-        { label: '剧情片', value: 'drama' }
-      ],
-      tv: [
-        { label: '美剧', value: 'us' },
-        { label: '国产剧', value: 'cn' },
-        { label: '日韩剧', value: 'asia' },
-        { label: '英剧', value: 'uk' },
-        { label: '纪录片', value: 'documentary' }
-      ],
-      music: [
-        { label: '流行音乐', value: 'pop' },
-        { label: '古典音乐', value: 'classical' },
-        { label: '摇滚音乐', value: 'rock' },
-        { label: '电子音乐', value: 'electronic' },
-        { label: '其他', value: 'other' }
-      ],
-      software: [
-        { label: '操作系统', value: 'os' },
-        { label: '办公软件', value: 'office' },
-        { label: '开发工具', value: 'dev' },
-        { label: '设计软件', value: 'design' },
-        { label: '其他', value: 'other' }
-      ],
-      game: [
-        { label: 'PC游戏', value: 'pc' },
-        { label: '主机游戏', value: 'console' },
-        { label: '手机游戏', value: 'mobile' },
-        { label: '其他', value: 'other' }
-      ]
-    }
-    
-    const getSubcategories = (category) => {
-      return subcategories[category] || []
-    }
-    
-    const handleTorrentChange = (file) => {
-      uploadForm.torrentFile = file.raw
-      // 这里可以解析torrent文件获取基本信息
-      parseTorrentFile(file.raw)
-    }
-    
-    const handleTorrentRemove = () => {
-      uploadForm.torrentFile = null
-    }
-    
-    const beforeTorrentUpload = (file) => {
-      const isTorrent = file.type === 'application/x-bittorrent' || file.name.endsWith('.torrent')
-      const isLt10M = file.size / 1024 / 1024 < 10
-      
-      if (!isTorrent) {
-        ElMessage.error('只能上传 .torrent 文件!')
-        return false
-      }
-      if (!isLt10M) {
-        ElMessage.error('种子文件大小不能超过 10MB!')
-        return false
-      }
-      return true
-    }
-    
-    const parseTorrentFile = (file) => {
-      // 这里应该实现torrent文件解析
-      // 可以使用 parse-torrent 库
-      console.log('解析种子文件:', file.name)
-      
-      // 模拟解析结果自动填入表单
-      if (!uploadForm.title) {
-        uploadForm.title = file.name.replace('.torrent', '')
-      }
-    }
-    
-    const handleImageChange = (file) => {
-      uploadForm.coverImage = file.raw
-    }
-    
-    const handleImageRemove = () => {
-      uploadForm.coverImage = null
-    }
-    
-    const showTagInput = () => {
-      tagInputVisible.value = true
-      nextTick(() => {
-        tagInputRef.value?.focus()
-      })
-    }
-    
-    const addTag = () => {
-      const tag = tagInputValue.value.trim()
-      if (tag && !uploadForm.tags.includes(tag)) {
-        uploadForm.tags.push(tag)
-      }
-      tagInputVisible.value = false
-      tagInputValue.value = ''
-    }
-    
-    const removeTag = (tag) => {
-      const index = uploadForm.tags.indexOf(tag)
-      if (index > -1) {
-        uploadForm.tags.splice(index, 1)
-      }
-    }
-    
-    const submitForm = async () => {
-      if (!uploadForm.torrentFile) {
-        ElMessage.error('请上传种子文件')
-        return
-      }
-      
-      try {
-        await uploadFormRef.value?.validate()
-        
-        uploading.value = true
-        
-        // 模拟上传过程
-        await new Promise(resolve => setTimeout(resolve, 2000))
-        
-        ElMessage.success('种子上传成功!')
-        router.push('/torrents')
-        
-      } catch (error) {
-        console.error('表单验证失败:', error)
-      } finally {
-        uploading.value = false
-      }
-    }
-    
-    const resetForm = () => {
-      uploadFormRef.value?.resetFields()
-      uploadForm.torrentFile = null
-      uploadForm.coverImage = null
-      uploadForm.tags = []
-      torrentUploadRef.value?.clearFiles()
-      imageUploadRef.value?.clearFiles()
-    }
-    
-    return {
-      uploadFormRef,
-      torrentUploadRef,
-      imageUploadRef,
-      tagInputRef,
-      uploading,
-      tagInputVisible,
-      tagInputValue,
-      uploadForm,
-      formRules,
-      getSubcategories,
-      handleTorrentChange,
-      handleTorrentRemove,
-      beforeTorrentUpload,
-      handleImageChange,
-      handleImageRemove,
-      showTagInput,
-      addTag,
-      removeTag,
-      submitForm,
-      resetForm,
-      UploadFilled,
-      Plus
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.upload-page {
-  max-width: 800px;
-  margin: 0 auto;
-  padding: 24px;
-}
-
-.page-header {
-  text-align: center;
-  margin-bottom: 32px;
-  
-  h1 {
-    font-size: 28px;
-    font-weight: 600;
-    color: #2c3e50;
-    margin: 0 0 8px 0;
-  }
-  
-  .page-description {
-    font-size: 16px;
-    color: #7f8c8d;
-    margin: 0;
-  }
-}
-
-.upload-form {
-  background: #fff;
-  border-radius: 12px;
-  padding: 32px;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
-  
-  .torrent-upload {
-    width: 100%;
-    
-    :deep(.el-upload-dragger) {
-      width: 100%;
-      height: 180px;
-      border: 2px dashed #d9d9d9;
-      border-radius: 8px;
-      
-      &:hover {
-        border-color: #409eff;
-      }
-    }
-  }
-  
-  .tags-input {
-    display: flex;
-    flex-wrap: wrap;
-    gap: 8px;
-    align-items: center;
-    
-    .tag-item {
-      margin: 0;
-    }
-    
-    .tag-input {
-      width: 100px;
-    }
-    
-    .add-tag-btn {
-      border: 1px dashed #d9d9d9;
-      color: #999;
-      
-      &:hover {
-        border-color: #409eff;
-        color: #409eff;
-      }
-    }
-  }
-  
-  .image-upload {
-    :deep(.el-upload--picture-card) {
-      width: 148px;
-      height: 148px;
-    }
-  }
-  
-  .form-tip {
-    margin-left: 8px;
-    font-size: 12px;
-    color: #909399;
-  }
-  
-  .submit-buttons {
-    display: flex;
-    gap: 16px;
-    justify-content: center;
-    margin-top: 24px;
-  }
-}
-
-@media (max-width: 768px) {
-  .upload-page {
-    padding: 16px;
-  }
-  
-  .upload-form {
-    padding: 24px 16px;
-  }
-  
-  .submit-buttons {
-    flex-direction: column;
-    
-    .el-button {
-      width: 100%;
-    }
-  }
-}
+<template>

+  <div class="upload-page">

+    <div class="page-header">

+      <h1>上传种子</h1>

+      <p class="page-description">分享你的资源,为社区做贡献</p>

+    </div>

+

+    <div class="upload-form">

+      <el-form

+        ref="uploadFormRef"

+        :model="uploadForm"

+        :rules="formRules"

+        label-width="120px"

+        size="large"

+      >

+        <!-- 种子文件上传 -->

+        <el-form-item label="种子文件" prop="torrentFile" required>

+          <el-upload

+            ref="torrentUploadRef"

+            :auto-upload="false"

+            :limit="1"

+            accept=".torrent"

+            :on-change="handleTorrentChange"

+            :on-remove="handleTorrentRemove"

+            :before-upload="beforeTorrentUpload"

+            drag

+            class="torrent-upload"

+          >

+            <el-icon class="el-icon--upload"><UploadFilled /></el-icon>

+            <div class="el-upload__text">

+              将 .torrent 文件拖到此处,或<em>点击上传</em>

+            </div>

+            <template #tip>

+              <div class="el-upload__tip">

+                只能上传 .torrent 文件,且不超过 10MB

+              </div>

+            </template>

+          </el-upload>

+        </el-form-item>

+

+        <!-- 基本信息 -->

+        <el-form-item label="资源标题" prop="title" required>

+          <el-input

+            v-model="uploadForm.title"

+            placeholder="请输入资源标题"

+            maxlength="200"

+            show-word-limit

+          />

+        </el-form-item>

+

+        <el-form-item label="资源分类" prop="category" required>

+          <el-select v-model="uploadForm.category" placeholder="请选择分类">

+            <el-option label="电影" value="movie" />

+            <el-option label="电视剧" value="tv" />

+            <el-option label="音乐" value="music" />

+            <el-option label="软件" value="software" />

+            <el-option label="游戏" value="game" />

+            <el-option label="电子书" value="ebook" />

+            <el-option label="其他" value="other" />

+          </el-select>

+        </el-form-item>

+

+        <el-form-item label="子分类" prop="subcategory">

+          <el-select v-model="uploadForm.subcategory" placeholder="请选择子分类">

+            <el-option

+              v-for="sub in getSubcategories(uploadForm.category)"

+              :key="sub.value"

+              :label="sub.label"

+              :value="sub.value"

+            />

+          </el-select>

+        </el-form-item>

+

+        <!-- 详细描述 -->

+        <el-form-item label="资源描述" prop="description">

+          <el-input

+            v-model="uploadForm.description"

+            type="textarea"

+            :rows="6"

+            placeholder="请详细描述资源内容,包括格式、质量、语言等信息"

+            maxlength="2000"

+            show-word-limit

+          />

+        </el-form-item>

+

+        <!-- 标签 -->

+        <el-form-item label="标签">

+          <div class="tags-input">

+            <el-tag

+              v-for="tag in uploadForm.tags"

+              :key="tag"

+              closable

+              @close="removeTag(tag)"

+              class="tag-item"

+            >

+              {{ tag }}

+            </el-tag>

+            <el-input

+              v-if="tagInputVisible"

+              ref="tagInputRef"

+              v-model="tagInputValue"

+              size="small"

+              @keyup.enter="addTag"

+              @blur="addTag"

+              class="tag-input"

+            />

+            <el-button

+              v-else

+              size="small"

+              @click="showTagInput"

+              class="add-tag-btn"

+            >

+              + 添加标签

+            </el-button>

+          </div>

+        </el-form-item>

+

+        <!-- 封面图片 -->

+        <el-form-item label="封面图片">

+          <el-upload

+            ref="imageUploadRef"

+            :auto-upload="false"

+            :limit="1"

+            accept="image/*"

+            :on-change="handleImageChange"

+            :on-remove="handleImageRemove"

+            list-type="picture-card"

+            class="image-upload"

+          >

+            <el-icon><Plus /></el-icon>

+            <template #tip>

+              <div class="el-upload__tip">

+                支持 JPG、PNG 格式,建议尺寸 300x400,不超过 5MB

+              </div>

+            </template>

+          </el-upload>

+        </el-form-item>

+

+        <!-- 高级选项 -->

+        <el-form-item>

+          <el-collapse>

+            <el-collapse-item title="高级选项" name="advanced">

+              <el-form-item label="免费时间">

+                <el-select v-model="uploadForm.freeTime" placeholder="选择免费时间">

+                  <el-option label="永久免费" value="forever" />

+                  <el-option label="24小时" value="24h" />

+                  <el-option label="48小时" value="48h" />

+                  <el-option label="7天" value="7d" />

+                  <el-option label="30天" value="30d" />

+                </el-select>

+              </el-form-item>

+

+              <el-form-item label="匿名上传">

+                <el-switch v-model="uploadForm.anonymous" />

+                <span class="form-tip">开启后将不显示上传者信息</span>

+              </el-form-item>

+

+              <el-form-item label="允许HR">

+                <el-switch v-model="uploadForm.allowHR" />

+                <span class="form-tip">允许此种子参与HR考核</span>

+              </el-form-item>

+            </el-collapse-item>

+          </el-collapse>

+        </el-form-item>

+

+        <!-- 提交按钮 -->

+        <el-form-item>

+          <div class="submit-buttons">

+            <el-button @click="resetForm">重置</el-button>

+            <el-button type="primary" @click="submitForm" :loading="uploading">

+              {{ uploading ? '上传中...' : '提交种子' }}

+            </el-button>

+          </div>

+        </el-form-item>

+      </el-form>

+    </div>

+  </div>

+</template>

+

+<script>

+import { ref, reactive, nextTick } from 'vue'

+import { useRouter } from 'vue-router'

+import { ElMessage } from 'element-plus'

+import {

+  UploadFilled,

+  Plus

+} from '@element-plus/icons-vue'

+

+export default {

+  name: 'UploadView',

+  setup() {

+    const router = useRouter()

+    const uploadFormRef = ref(null)

+    const torrentUploadRef = ref(null)

+    const imageUploadRef = ref(null)

+    const tagInputRef = ref(null)

+    

+    const uploading = ref(false)

+    const tagInputVisible = ref(false)

+    const tagInputValue = ref('')

+    

+    const uploadForm = reactive({

+      torrentFile: null,

+      title: '',

+      category: '',

+      subcategory: '',

+      description: '',

+      tags: [],

+      coverImage: null,

+      freeTime: '',

+      anonymous: false,

+      allowHR: true

+    })

+    

+    const formRules = {

+      title: [

+        { required: true, message: '请输入资源标题', trigger: 'blur' },

+        { min: 5, max: 200, message: '标题长度在 5 到 200 个字符', trigger: 'blur' }

+      ],

+      category: [

+        { required: true, message: '请选择资源分类', trigger: 'change' }

+      ],

+      description: [

+        { min: 10, max: 2000, message: '描述长度在 10 到 2000 个字符', trigger: 'blur' }

+      ]

+    }

+    

+    const subcategories = {

+      movie: [

+        { label: '动作片', value: 'action' },

+        { label: '喜剧片', value: 'comedy' },

+        { label: '科幻片', value: 'scifi' },

+        { label: '恐怖片', value: 'horror' },

+        { label: '剧情片', value: 'drama' }

+      ],

+      tv: [

+        { label: '美剧', value: 'us' },

+        { label: '国产剧', value: 'cn' },

+        { label: '日韩剧', value: 'asia' },

+        { label: '英剧', value: 'uk' },

+        { label: '纪录片', value: 'documentary' }

+      ],

+      music: [

+        { label: '流行音乐', value: 'pop' },

+        { label: '古典音乐', value: 'classical' },

+        { label: '摇滚音乐', value: 'rock' },

+        { label: '电子音乐', value: 'electronic' },

+        { label: '其他', value: 'other' }

+      ],

+      software: [

+        { label: '操作系统', value: 'os' },

+        { label: '办公软件', value: 'office' },

+        { label: '开发工具', value: 'dev' },

+        { label: '设计软件', value: 'design' },

+        { label: '其他', value: 'other' }

+      ],

+      game: [

+        { label: 'PC游戏', value: 'pc' },

+        { label: '主机游戏', value: 'console' },

+        { label: '手机游戏', value: 'mobile' },

+        { label: '其他', value: 'other' }

+      ]

+    }

+    

+    const getSubcategories = (category) => {

+      return subcategories[category] || []

+    }

+    

+    const handleTorrentChange = (file) => {

+      uploadForm.torrentFile = file.raw

+      // 这里可以解析torrent文件获取基本信息

+      parseTorrentFile(file.raw)

+    }

+    

+    const handleTorrentRemove = () => {

+      uploadForm.torrentFile = null

+    }

+    

+    const beforeTorrentUpload = (file) => {

+      const isTorrent = file.type === 'application/x-bittorrent' || file.name.endsWith('.torrent')

+      const isLt10M = file.size / 1024 / 1024 < 10

+      

+      if (!isTorrent) {

+        ElMessage.error('只能上传 .torrent 文件!')

+        return false

+      }

+      if (!isLt10M) {

+        ElMessage.error('种子文件大小不能超过 10MB!')

+        return false

+      }

+      return true

+    }

+    

+    const parseTorrentFile = (file) => {

+      // 这里应该实现torrent文件解析

+      // 可以使用 parse-torrent 库

+      console.log('解析种子文件:', file.name)

+      

+      // 模拟解析结果自动填入表单

+      if (!uploadForm.title) {

+        uploadForm.title = file.name.replace('.torrent', '')

+      }

+    }

+    

+    const handleImageChange = (file) => {

+      uploadForm.coverImage = file.raw

+    }

+    

+    const handleImageRemove = () => {

+      uploadForm.coverImage = null

+    }

+    

+    const showTagInput = () => {

+      tagInputVisible.value = true

+      nextTick(() => {

+        tagInputRef.value?.focus()

+      })

+    }

+    

+    const addTag = () => {

+      const tag = tagInputValue.value.trim()

+      if (tag && !uploadForm.tags.includes(tag)) {

+        uploadForm.tags.push(tag)

+      }

+      tagInputVisible.value = false

+      tagInputValue.value = ''

+    }

+    

+    const removeTag = (tag) => {

+      const index = uploadForm.tags.indexOf(tag)

+      if (index > -1) {

+        uploadForm.tags.splice(index, 1)

+      }

+    }

+    

+    const submitForm = async () => {

+      if (!uploadForm.torrentFile) {

+        ElMessage.error('请上传种子文件')

+        return

+      }

+      

+      try {

+        await uploadFormRef.value?.validate()

+        

+        uploading.value = true

+        

+        // 模拟上传过程

+        await new Promise(resolve => setTimeout(resolve, 2000))

+        

+        ElMessage.success('种子上传成功!')

+        router.push('/torrents')

+        

+      } catch (error) {

+        console.error('表单验证失败:', error)

+      } finally {

+        uploading.value = false

+      }

+    }

+    

+    const resetForm = () => {

+      uploadFormRef.value?.resetFields()

+      uploadForm.torrentFile = null

+      uploadForm.coverImage = null

+      uploadForm.tags = []

+      torrentUploadRef.value?.clearFiles()

+      imageUploadRef.value?.clearFiles()

+    }

+    

+    return {

+      uploadFormRef,

+      torrentUploadRef,

+      imageUploadRef,

+      tagInputRef,

+      uploading,

+      tagInputVisible,

+      tagInputValue,

+      uploadForm,

+      formRules,

+      getSubcategories,

+      handleTorrentChange,

+      handleTorrentRemove,

+      beforeTorrentUpload,

+      handleImageChange,

+      handleImageRemove,

+      showTagInput,

+      addTag,

+      removeTag,

+      submitForm,

+      resetForm,

+      UploadFilled,

+      Plus

+    }

+  }

+}

+</script>

+

+<style lang="scss" scoped>

+.upload-page {

+  max-width: 800px;

+  margin: 0 auto;

+  padding: 24px;

+}

+

+.page-header {

+  text-align: center;

+  margin-bottom: 32px;

+  

+  h1 {

+    font-size: 28px;

+    font-weight: 600;

+    color: #2c3e50;

+    margin: 0 0 8px 0;

+  }

+  

+  .page-description {

+    font-size: 16px;

+    color: #7f8c8d;

+    margin: 0;

+  }

+}

+

+.upload-form {

+  background: #fff;

+  border-radius: 12px;

+  padding: 32px;

+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);

+  

+  .torrent-upload {

+    width: 100%;

+    

+    :deep(.el-upload-dragger) {

+      width: 100%;

+      height: 180px;

+      border: 2px dashed #d9d9d9;

+      border-radius: 8px;

+      

+      &:hover {

+        border-color: #409eff;

+      }

+    }

+  }

+  

+  .tags-input {

+    display: flex;

+    flex-wrap: wrap;

+    gap: 8px;

+    align-items: center;

+    

+    .tag-item {

+      margin: 0;

+    }

+    

+    .tag-input {

+      width: 100px;

+    }

+    

+    .add-tag-btn {

+      border: 1px dashed #d9d9d9;

+      color: #999;

+      

+      &:hover {

+        border-color: #409eff;

+        color: #409eff;

+      }

+    }

+  }

+  

+  .image-upload {

+    :deep(.el-upload--picture-card) {

+      width: 148px;

+      height: 148px;

+    }

+  }

+  

+  .form-tip {

+    margin-left: 8px;

+    font-size: 12px;

+    color: #909399;

+  }

+  

+  .submit-buttons {

+    display: flex;

+    gap: 16px;

+    justify-content: center;

+    margin-top: 24px;

+  }

+}

+

+@media (max-width: 768px) {

+  .upload-page {

+    padding: 16px;

+  }

+  

+  .upload-form {

+    padding: 24px 16px;

+  }

+  

+  .submit-buttons {

+    flex-direction: column;

+    

+    .el-button {

+      width: 100%;

+    }

+  }

+}

 </style>
\ No newline at end of file
diff --git a/vue.config.js b/vue.config.js
index 910e297..a0ee328 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -1,4 +1,16 @@
-const { defineConfig } = require('@vue/cli-service')
-module.exports = defineConfig({
-  transpileDependencies: true
-})
+const { defineConfig } = require('@vue/cli-service')

+

+module.exports = defineConfig({

+  transpileDependencies: true,

+  devServer: {

+    port: 8080,

+    proxy: {

+      '/api': {

+        target: 'http://localhost:8081',

+        changeOrigin: true,

+        ws: true,

+        logLevel: 'debug'

+      }

+    }

+  }

+})
\ No newline at end of file