浏览代码

创建仓库

puyao 3 月之前
父节点
当前提交
16497c4ec7

+ 1 - 1
.hbuilderx/launch.json

@@ -26,7 +26,7 @@
             }
         },
         {
-            "customPlaygroundType" : "local",
+            "customPlaygroundType" : "device",
             "localRepoPath" : "E:/rtliveAppIM",
             "openVueDevtools" : true,
             "packageName" : "com.mytek.rtlive",

+ 3 - 3
App.vue

@@ -52,9 +52,9 @@ export default {
 	},
 	onShow() {
 		this.getDictByKeyFun()
-		var that = this;
-		var args= plus.runtime.arguments;
-		uni.setStorageSync("appIsOnShow",1);
+		// var that = this;
+		// var args= plus.runtime.arguments;
+		// uni.setStorageSync("appIsOnShow",1);
 	},
 	onHide() {
 		

+ 2 - 1
api/user.js

@@ -36,7 +36,8 @@ let request = new Request().http
  }
  
  export function getUserInfo() {
- 	 return request('/app/user/getUserInfo',null,'GET');
+ 	//return request('/app/user/getUserInfo',null,'GET');
+ 	return request('/liveAPP/appLive/app/user/getUserInfo', null, 'GET');
  }
  
  export function checkLogin() {

+ 23 - 76
common/request.js

@@ -3,30 +3,24 @@ export default class Request {
 	http(router, data = {}, method,contentType,timeout=60000, hideLoading=true) {
 		let that = this;
 		//let path ='https://api.cdwjyyh.com';//app正式环境
-		let path = 'https://h5api.his.cdwjyyh.com';//h5接口
+		let path = 'https://userapp.zkhj6.com';//h5接口
 		
 		// 看课模块
-		if(router.indexOf("/course_auto") != -1 ) {
-			router = router.replace('/course_auto', '')
-			path ='https://h5api.his.cdwjyyh.com';
-		}
+		// if(router.indexOf("/course_auto") != -1 ) {
+		// 	router = router.replace('/course_auto', '')
+		// 	path ='https://h5api.his.cdwjyyh.com';
+		// }
 		// 直播模块
 		if(router.indexOf("/appLive") !== -1) {
 			// router = router.replace('/appLive','')
-			path ='https://api.fhhx.runtzh.com';
-			// router = router.replace('/appLive','')
-			// path ='http://z2fae9e9.natappfree.cc'
+			path ='https://userapp.zkhj6.com';
+		    router = router.replace('/appLive','')
 		}
-		
 		//直播静默登录配置
-		// if (router.indexOf("/live") !== -1 || router.indexOf("/liveAPP") !== -1) {
-		// 	if(router.indexOf("/liveAPP") !== -1){
-		// 		router = router.replace('/liveAPP', '')
-		// 	}
-		// 	token = uni.getStorageSync('LiveToken');
-		// }
-	
-
+		if(router.indexOf("/liveAPP") !== -1){
+				path ='https://userapp.zkhj6.com';
+				router = router.replace('/liveAPP', '')
+		}
 		uni.setStorageSync('requestPath',path);
 		// uni.showLoading({
 		// 	  title: '加载中'
@@ -40,59 +34,12 @@ export default class Request {
 					httpContentType=contentType;
 				}
 				var routers=router;
-				// 直播模块使用liveToken
-				let useToken = token;
-				// 检查是否为直播模块路径
-				const isLiveApi = router.indexOf("/appLive") !== -1 || router.indexOf("/liveAPP") !== -1;
-				if(isLiveApi) {
-					// 检查liveToken是否存在
-					if (!liveToken || liveToken === '') {
-						// 获取当前页面路径,以便登录成功后返回
-						// const pages = getCurrentPages();
-						// if (pages.length > 0) {
-						// 	const currentPage = pages[pages.length - 1];
-						// 	if (currentPage && currentPage.route) {  
-						// 		const routeStr = String(currentPage.route || '');
-						// 		if (routeStr.startsWith('pages/auth/login') || routeStr === 'pages/auth/loginIndex') {
-						// 			uni.navigateTo({
-						// 				url: '/pages/auth/login?quickLogin=true'
-						// 			});
-						// 			reject({errMsg: 'On login page, cannot set loginReturnUrl'});
-						// 			return;
-						// 		}
-						// 		let backUrl = '/' + currentPage.route;
-						// 		const opts = currentPage.options || {};
-						// 		const keys = Object.keys(opts);
-						// 		if (keys.length > 0) {
-						// 			const qs = keys.map(k => `${k}=${encodeURIComponent(opts[k])}`).join('&');
-						// 			backUrl = backUrl + '?' + qs;
-						// 		}
-						// 		uni.setStorageSync('loginReturnUrl', backUrl);
-						// 	}
-						// }
-						// // 跳转到手机号码一键登录页面
-						// uni.navigateTo({
-						// 	url: '/pages/auth/login?quickLogin=true'
-						// });
-						// // 拒绝请求
-						// reject({errMsg: 'No liveToken, redirect to login'});
-						// return;
-					}
-					useToken = liveToken;
-					if(router.indexOf("/appLive") !== -1){
-						router = router.replace('/appLive', '')
-					}
-					if(router.indexOf("/liveAPP") !== -1){
-						router = router.replace('/liveAPP', '')
-					}
-				}
-				
 				// 请求
 				uni.request({
 				header: {
 					// 'Content-Type': 'application/x-www-form-urlencoded',
 					'Content-Type': httpContentType,
-					'AppToken': useToken,
+					'AppToken': liveToken,
 					'CompanyUserToken':CompanyUserToken //业务员token
 				},
 				url: `${path}${router}`,
@@ -100,17 +47,17 @@ export default class Request {
 				method: method,
 				timeout: timeout,
 				success: (res) => {
-					//收到开发者服务器成功返回的回调函数
-					if(res.data.code==401){ //没有权限直接退出到登录界面
-						// let pages = getCurrentPages();
-						// let url = pages[ pages.length - 1]; //当前页页面实例
-						// //如果登录界面已打开,自动关闭
-						// if(url!=undefined&&url.route=="pages/auth/login"){
-						// 	resolve(res.data)
-						// 	return;
-						// }
-					}
-					resolve(res.data)
+						//收到开发者服务器成功返回的回调函数
+						if(res.data.code==401){ //没有权限直接退出到登录界面
+						let pages = getCurrentPages();
+						let url = pages[ pages.length - 1]; //当前页页面实例
+						//如果登录界面已打开,自动关闭
+						if(url!=undefined&&url.route=="pages/auth/login"){
+							resolve(res.data)
+							return;
+							}
+						}
+					  resolve(res.data)
 				},
 				fail:(res) =>{
 					//接口调用失败的回调函数

+ 5 - 4
manifest.json

@@ -1,6 +1,6 @@
 {
     "name" : "芳华未来",
-    "appid" : "__UNI__33EAA2D",
+    "appid" : "__UNI__A8DCF49",
     "description" : "",
     "versionName" : "1.7.2",
     "versionCode" : 1722,
@@ -438,7 +438,8 @@
         "title" : "芳华未来",
         "devServer" : {
             "https" : false,
-            "disableHostCheck" : true
+            "disableHostCheck" : true,
+            "port" : ""
         },
         "optimization" : {
             "treeShaking" : {
@@ -447,7 +448,7 @@
         },
         "router" : {
             "mode" : "history",
-            "base" : "/appweb"
+            "base" : "/appweb/"
         },
         "sdkConfigs" : {
             "maps" : {
@@ -458,7 +459,7 @@
                 }
             }
         },
-        "template" : "template.h5.html"
+        "template" : ""
     },
     "sassImplementationName" : "node-sass",
     "channel_list" : [

+ 38 - 7690
package-lock.json

@@ -1,7 +1,7 @@
 {
     "name": "elise-audio-play",
     "version": "0.0.1",
-    "lockfileVersion": 2,
+    "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
@@ -15,6 +15,7 @@
                 "crypto-js": "^4.2.0",
                 "date-fns": "^2.30.0",
                 "dayjs": "^1.11.19",
+                "hls.js": "^1.6.15",
                 "image-tools": "^1.4.0",
                 "jsqr": "^1.4.0",
                 "jweixin-module": "^1.6.0",
@@ -109,19 +110,11 @@
             "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
             "dev": true
         },
-        "node_modules/@babel/helper-string-parser": {
-            "version": "7.27.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
-            "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-            "peer": true,
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
         "node_modules/@babel/helper-validator-identifier": {
             "version": "7.28.5",
             "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
             "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+            "dev": true,
             "engines": {
                 "node": ">=6.9.0"
             }
@@ -135,21 +128,6 @@
                 "node": ">=6.9.0"
             }
         },
-        "node_modules/@babel/parser": {
-            "version": "7.29.0",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
-            "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
-            "peer": true,
-            "dependencies": {
-                "@babel/types": "^7.29.0"
-            },
-            "bin": {
-                "parser": "bin/babel-parser.js"
-            },
-            "engines": {
-                "node": ">=6.0.0"
-            }
-        },
         "node_modules/@babel/runtime": {
             "version": "7.28.6",
             "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
@@ -158,19 +136,6 @@
                 "node": ">=6.9.0"
             }
         },
-        "node_modules/@babel/types": {
-            "version": "7.29.0",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
-            "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
-            "peer": true,
-            "dependencies": {
-                "@babel/helper-string-parser": "^7.27.1",
-                "@babel/helper-validator-identifier": "^7.28.5"
-            },
-            "engines": {
-                "node": ">=6.9.0"
-            }
-        },
         "node_modules/@dcloudio/uni-cli-i18n": {
             "version": "2.0.2-4080720251210002",
             "resolved": "https://registry.npmjs.org/@dcloudio/uni-cli-i18n/-/uni-cli-i18n-2.0.2-4080720251210002.tgz",
@@ -408,7 +373,8 @@
         "node_modules/@jridgewell/sourcemap-codec": {
             "version": "1.5.5",
             "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
-            "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
+            "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+            "dev": true
         },
         "node_modules/@jridgewell/trace-mapping": {
             "version": "0.3.31",
@@ -925,6 +891,26 @@
                 }
             }
         },
+        "node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15": {
+            "name": "vue-loader",
+            "version": "15.11.1",
+            "resolved": "https://registry.npmjs.org/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"
+            }
+        },
+        "node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/node_modules/hash-sum": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+            "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
+            "dev": true
+        },
         "node_modules/@vue/cli-service/node_modules/copy-webpack-plugin": {
             "version": "9.1.0",
             "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz",
@@ -1068,68 +1054,6 @@
             "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
             "dev": true
         },
-        "node_modules/@vue/compiler-core": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.29.tgz",
-            "integrity": "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==",
-            "peer": true,
-            "dependencies": {
-                "@babel/parser": "^7.29.0",
-                "@vue/shared": "3.5.29",
-                "entities": "^7.0.1",
-                "estree-walker": "^2.0.2",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "node_modules/@vue/compiler-core/node_modules/entities": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
-            "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
-            "peer": true,
-            "engines": {
-                "node": ">=0.12"
-            },
-            "funding": {
-                "url": "https://github.com/fb55/entities?sponsor=1"
-            }
-        },
-        "node_modules/@vue/compiler-dom": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.29.tgz",
-            "integrity": "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==",
-            "peer": true,
-            "dependencies": {
-                "@vue/compiler-core": "3.5.29",
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "node_modules/@vue/compiler-sfc": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.29.tgz",
-            "integrity": "sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==",
-            "peer": true,
-            "dependencies": {
-                "@babel/parser": "^7.29.0",
-                "@vue/compiler-core": "3.5.29",
-                "@vue/compiler-dom": "3.5.29",
-                "@vue/compiler-ssr": "3.5.29",
-                "@vue/shared": "3.5.29",
-                "estree-walker": "^2.0.2",
-                "magic-string": "^0.30.21",
-                "postcss": "^8.5.6",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "node_modules/@vue/compiler-ssr": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.29.tgz",
-            "integrity": "sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==",
-            "peer": true,
-            "dependencies": {
-                "@vue/compiler-dom": "3.5.29",
-                "@vue/shared": "3.5.29"
-            }
-        },
         "node_modules/@vue/component-compiler-utils": {
             "version": "3.3.0",
             "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
@@ -1202,85 +1126,6 @@
             "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
             "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
         },
-        "node_modules/@vue/reactivity": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.29.tgz",
-            "integrity": "sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==",
-            "peer": true,
-            "dependencies": {
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "node_modules/@vue/runtime-core": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.29.tgz",
-            "integrity": "sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==",
-            "peer": true,
-            "dependencies": {
-                "@vue/reactivity": "3.5.29",
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "node_modules/@vue/runtime-dom": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.29.tgz",
-            "integrity": "sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==",
-            "peer": true,
-            "dependencies": {
-                "@vue/reactivity": "3.5.29",
-                "@vue/runtime-core": "3.5.29",
-                "@vue/shared": "3.5.29",
-                "csstype": "^3.2.3"
-            }
-        },
-        "node_modules/@vue/server-renderer": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.29.tgz",
-            "integrity": "sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==",
-            "peer": true,
-            "dependencies": {
-                "@vue/compiler-ssr": "3.5.29",
-                "@vue/shared": "3.5.29"
-            },
-            "peerDependencies": {
-                "vue": "3.5.29"
-            }
-        },
-        "node_modules/@vue/shared": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.29.tgz",
-            "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==",
-            "peer": true
-        },
-        "node_modules/@vue/vue-loader-v15": {
-            "name": "vue-loader",
-            "version": "15.11.1",
-            "resolved": "https://registry.npmjs.org/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/web-component-wrapper": {
             "version": "1.3.0",
             "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
@@ -2496,41 +2341,6 @@
             "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
             "dev": true
         },
-        "node_modules/copy-webpack-plugin": {
-            "version": "13.0.1",
-            "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz",
-            "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "glob-parent": "^6.0.1",
-                "normalize-path": "^3.0.0",
-                "schema-utils": "^4.2.0",
-                "serialize-javascript": "^6.0.2",
-                "tinyglobby": "^0.2.12"
-            },
-            "engines": {
-                "node": ">= 18.12.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/webpack"
-            },
-            "peerDependencies": {
-                "webpack": "^5.1.0"
-            }
-        },
-        "node_modules/core-js": {
-            "version": "3.48.0",
-            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz",
-            "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==",
-            "hasInstallScript": true,
-            "peer": true,
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/core-js"
-            }
-        },
         "node_modules/core-util-is": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -2862,12 +2672,6 @@
                 "node": ">=8.0.0"
             }
         },
-        "node_modules/csstype": {
-            "version": "3.2.3",
-            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
-            "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
-            "peer": true
-        },
         "node_modules/d": {
             "version": "1.0.2",
             "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
@@ -3732,12 +3536,6 @@
                 "node": ">=4.0"
             }
         },
-        "node_modules/estree-walker": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-            "peer": true
-        },
         "node_modules/esutils": {
             "version": "2.0.3",
             "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -4260,7 +4058,7 @@
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
             "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+            "deprecated": "Glob versions prior to v9 are no longer supported",
             "dev": true,
             "dependencies": {
                 "fs.realpath": "^1.0.0",
@@ -4453,6 +4251,12 @@
                 "node": "*"
             }
         },
+        "node_modules/hls.js": {
+            "version": "1.6.15",
+            "resolved": "https://registry.npmmirror.com/hls.js/-/hls.js-1.6.15.tgz",
+            "integrity": "sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==",
+            "license": "Apache-2.0"
+        },
         "node_modules/hosted-git-info": {
             "version": "2.8.9",
             "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -5548,15 +5352,6 @@
                 "yallist": "^2.1.2"
             }
         },
-        "node_modules/magic-string": {
-            "version": "0.30.21",
-            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
-            "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
-            "peer": true,
-            "dependencies": {
-                "@jridgewell/sourcemap-codec": "^1.5.5"
-            }
-        },
         "node_modules/make-plural": {
             "version": "7.5.0",
             "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.5.0.tgz",
@@ -5892,6 +5687,7 @@
             "version": "3.3.11",
             "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
             "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+            "dev": true,
             "funding": [
                 {
                     "type": "github",
@@ -6149,8 +5945,7 @@
         "node_modules/open-im-sdk": {
             "version": "3.5.2",
             "resolved": "https://registry.npmjs.org/open-im-sdk/-/open-im-sdk-3.5.2.tgz",
-            "integrity": "sha512-gOpi1WrLBXKUu9IVb/VmWGUn3Iaa9qxCzP5w5GkofLFtwooLO7XoC/Rs3EN+m+Zemc7BPTRkvdHQr7khV1iDMQ==",
-            "deprecated": "This package is deprecated. Please use '@openim/client-sdk' instead."
+            "integrity": "sha512-gOpi1WrLBXKUu9IVb/VmWGUn3Iaa9qxCzP5w5GkofLFtwooLO7XoC/Rs3EN+m+Zemc7BPTRkvdHQr7khV1iDMQ=="
         },
         "node_modules/opener": {
             "version": "1.5.2",
@@ -6586,7 +6381,8 @@
         "node_modules/picocolors": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+            "dev": true
         },
         "node_modules/picomatch": {
             "version": "2.3.1",
@@ -6626,6 +6422,7 @@
             "version": "8.5.6",
             "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
             "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+            "dev": true,
             "funding": [
                 {
                     "type": "opencollective",
@@ -8500,6 +8297,7 @@
             "version": "1.2.1",
             "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
             "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+            "dev": true,
             "engines": {
                 "node": ">=0.10.0"
             }
@@ -8960,54 +8758,6 @@
             "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
             "dev": true
         },
-        "node_modules/tinyglobby": {
-            "version": "0.2.15",
-            "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
-            "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
-            "dev": true,
-            "peer": true,
-            "dependencies": {
-                "fdir": "^6.5.0",
-                "picomatch": "^4.0.3"
-            },
-            "engines": {
-                "node": ">=12.0.0"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/SuperchupuDev"
-            }
-        },
-        "node_modules/tinyglobby/node_modules/fdir": {
-            "version": "6.5.0",
-            "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
-            "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=12.0.0"
-            },
-            "peerDependencies": {
-                "picomatch": "^3 || ^4"
-            },
-            "peerDependenciesMeta": {
-                "picomatch": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/tinyglobby/node_modules/picomatch": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
-            "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
-            "dev": true,
-            "peer": true,
-            "engines": {
-                "node": ">=12"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/jonschlinkert"
-            }
-        },
         "node_modules/tmp": {
             "version": "0.2.5",
             "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
@@ -9246,27 +8996,6 @@
                 "node": ">= 0.8"
             }
         },
-        "node_modules/vue": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.29.tgz",
-            "integrity": "sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==",
-            "peer": true,
-            "dependencies": {
-                "@vue/compiler-dom": "3.5.29",
-                "@vue/compiler-sfc": "3.5.29",
-                "@vue/runtime-dom": "3.5.29",
-                "@vue/server-renderer": "3.5.29",
-                "@vue/shared": "3.5.29"
-            },
-            "peerDependencies": {
-                "typescript": "*"
-            },
-            "peerDependenciesMeta": {
-                "typescript": {
-                    "optional": true
-                }
-            }
-        },
         "node_modules/vue-hot-reload-api": {
             "version": "2.3.4",
             "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
@@ -9887,7386 +9616,5 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         }
-    },
-    "dependencies": {
-        "@achrinza/node-ipc": {
-            "version": "9.2.10",
-            "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.10.tgz",
-            "integrity": "sha512-rCkw57K82y1XA9KwBmuMrupFQr9VOS4Rn77vW2UD2j0+HjlP/npSON9COkUIfocd95B4wv5EpfWMr6lGD4lN3A==",
-            "dev": true,
-            "requires": {
-                "@node-ipc/js-queue": "2.0.3",
-                "event-pubsub": "4.3.0",
-                "js-message": "1.0.7"
-            }
-        },
-        "@babel/code-frame": {
-            "version": "7.29.0",
-            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
-            "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-validator-identifier": "^7.28.5",
-                "js-tokens": "^4.0.0",
-                "picocolors": "^1.1.1"
-            }
-        },
-        "@babel/compat-data": {
-            "version": "7.29.0",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
-            "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
-            "dev": true
-        },
-        "@babel/helper-compilation-targets": {
-            "version": "7.28.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
-            "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
-            "dev": true,
-            "requires": {
-                "@babel/compat-data": "^7.28.6",
-                "@babel/helper-validator-option": "^7.27.1",
-                "browserslist": "^4.24.0",
-                "lru-cache": "^5.1.1",
-                "semver": "^6.3.1"
-            },
-            "dependencies": {
-                "lru-cache": {
-                    "version": "5.1.1",
-                    "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-                    "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-                    "dev": true,
-                    "requires": {
-                        "yallist": "^3.0.2"
-                    }
-                },
-                "yallist": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-                    "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
-                    "dev": true
-                }
-            }
-        },
-        "@babel/helper-string-parser": {
-            "version": "7.27.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
-            "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-            "peer": true
-        },
-        "@babel/helper-validator-identifier": {
-            "version": "7.28.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
-            "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
-        },
-        "@babel/helper-validator-option": {
-            "version": "7.27.1",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
-            "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
-            "dev": true
-        },
-        "@babel/parser": {
-            "version": "7.29.0",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
-            "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
-            "peer": true,
-            "requires": {
-                "@babel/types": "^7.29.0"
-            }
-        },
-        "@babel/runtime": {
-            "version": "7.28.6",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
-            "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="
-        },
-        "@babel/types": {
-            "version": "7.29.0",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
-            "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
-            "peer": true,
-            "requires": {
-                "@babel/helper-string-parser": "^7.27.1",
-                "@babel/helper-validator-identifier": "^7.28.5"
-            }
-        },
-        "@dcloudio/uni-cli-i18n": {
-            "version": "2.0.2-4080720251210002",
-            "resolved": "https://registry.npmjs.org/@dcloudio/uni-cli-i18n/-/uni-cli-i18n-2.0.2-4080720251210002.tgz",
-            "integrity": "sha512-e+BRGBxDEDnBaWjWkVkMqEkCHVdwOR7JDgQIxYfE8jovHFYHxJU9kY7ToEDnyl9xOHgZPgDnendDS/fqmGXRVQ==",
-            "dev": true,
-            "requires": {
-                "i18n": "^0.13.3",
-                "os-locale-s-fix": "^1.0.8-fix-1"
-            }
-        },
-        "@dcloudio/uni-cli-shared": {
-            "version": "2.0.2-4080720251210002",
-            "resolved": "https://registry.npmjs.org/@dcloudio/uni-cli-shared/-/uni-cli-shared-2.0.2-4080720251210002.tgz",
-            "integrity": "sha512-EIvkRTpB/aRP3bZZYAtiBdXrM1IBqhJDgCf13TAuE84F9ma1b2kD088yAi2Hf0hqv3X+368eX5E2aqyficSZvg==",
-            "dev": true,
-            "requires": {
-                "escape-string-regexp": "^4.0.0",
-                "fast-glob": "^3.2.11",
-                "fs-extra": "^10.0.0",
-                "glob-escape": "^0.0.2",
-                "hash-sum": "^1.0.2",
-                "postcss-urlrewrite": "^0.2.2",
-                "strip-json-comments": "^2.0.1"
-            }
-        },
-        "@dcloudio/uni-stat": {
-            "version": "2.0.2-4080720251210002",
-            "resolved": "https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-2.0.2-4080720251210002.tgz",
-            "integrity": "sha512-I3LBmp+dC348/rHbZFBYdxKFFP1YyasAEqrg3jsNqoPp23m0OaXCqljiLpMNXjQrDdvx50et8LRLG5Ie6RjZfQ==",
-            "dev": true
-        },
-        "@dcloudio/vue-cli-plugin-uni": {
-            "version": "2.0.2-4080720251210002",
-            "resolved": "https://registry.npmjs.org/@dcloudio/vue-cli-plugin-uni/-/vue-cli-plugin-uni-2.0.2-4080720251210002.tgz",
-            "integrity": "sha512-ubs7CnUKwsoYDNw6iLhj5s3sbFe6eIn7FCaWjjb+XAzd1WMOj5/rnyZ5E0fLZGlK0gD1nWaOSHNE8Bp1kZ/tow==",
-            "dev": true,
-            "requires": {
-                "@dcloudio/uni-stat": "^2.0.2-4080720251210002",
-                "buffer-json": "^2.0.0",
-                "clone-deep": "^4.0.1",
-                "cross-env": "^5.2.0",
-                "envinfo": "^6.0.1",
-                "hash-sum": "^1.0.2",
-                "loader-utils": "^1.1.0",
-                "lru-cache": "^4.1.2",
-                "mkdirp": "^0.5.1",
-                "module-alias": "^2.1.0",
-                "neo-async": "^2.6.1",
-                "postcss-import": "^12.0.1",
-                "postcss-selector-parser": "^5.0.0",
-                "postcss-value-parser": "^3.3.1",
-                "strip-json-comments": "^2.0.1",
-                "update-check": "^1.5.3",
-                "webpack-merge": "^4.1.4",
-                "wrap-loader": "^0.2.0",
-                "xregexp": "4.0.0"
-            }
-        },
-        "@dcloudio/webpack-uni-pages-loader": {
-            "version": "2.0.2-4080720251210002",
-            "resolved": "https://registry.npmjs.org/@dcloudio/webpack-uni-pages-loader/-/webpack-uni-pages-loader-2.0.2-4080720251210002.tgz",
-            "integrity": "sha512-dwH3D0EPRUfEZBVSInpGzpwdmFLbcxdrHgDWH8FA003qa1ZC6hWnDXGvLEtoDy7715qPr4OTCM3NsmKDQW2rkg==",
-            "dev": true,
-            "requires": {
-                "merge": "^2.1.1",
-                "strip-json-comments": "^2.0.1"
-            }
-        },
-        "@discoveryjs/json-ext": {
-            "version": "0.5.7",
-            "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
-            "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
-            "dev": true
-        },
-        "@eslint-community/eslint-utils": {
-            "version": "4.9.1",
-            "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
-            "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
-            "dev": true,
-            "requires": {
-                "eslint-visitor-keys": "^3.4.3"
-            }
-        },
-        "@eslint-community/regexpp": {
-            "version": "4.12.2",
-            "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
-            "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
-            "dev": true
-        },
-        "@eslint/eslintrc": {
-            "version": "2.1.4",
-            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-            "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
-            "dev": true,
-            "requires": {
-                "ajv": "^6.12.4",
-                "debug": "^4.3.2",
-                "espree": "^9.6.0",
-                "globals": "^13.19.0",
-                "ignore": "^5.2.0",
-                "import-fresh": "^3.2.1",
-                "js-yaml": "^4.1.0",
-                "minimatch": "^3.1.2",
-                "strip-json-comments": "^3.1.1"
-            },
-            "dependencies": {
-                "strip-json-comments": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-                    "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-                    "dev": true
-                }
-            }
-        },
-        "@eslint/js": {
-            "version": "8.57.1",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
-            "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
-            "dev": true
-        },
-        "@hapi/hoek": {
-            "version": "9.3.0",
-            "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
-            "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
-            "dev": true
-        },
-        "@hapi/topo": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
-            "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
-            "dev": true,
-            "requires": {
-                "@hapi/hoek": "^9.0.0"
-            }
-        },
-        "@humanwhocodes/config-array": {
-            "version": "0.13.0",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
-            "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
-            "dev": true,
-            "requires": {
-                "@humanwhocodes/object-schema": "^2.0.3",
-                "debug": "^4.3.1",
-                "minimatch": "^3.0.5"
-            }
-        },
-        "@humanwhocodes/module-importer": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-            "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
-            "dev": true
-        },
-        "@humanwhocodes/object-schema": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
-            "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
-            "dev": true
-        },
-        "@jridgewell/gen-mapping": {
-            "version": "0.3.13",
-            "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
-            "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
-            "dev": true,
-            "requires": {
-                "@jridgewell/sourcemap-codec": "^1.5.0",
-                "@jridgewell/trace-mapping": "^0.3.24"
-            }
-        },
-        "@jridgewell/resolve-uri": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-            "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
-            "dev": true
-        },
-        "@jridgewell/source-map": {
-            "version": "0.3.11",
-            "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
-            "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
-            "dev": true,
-            "requires": {
-                "@jridgewell/gen-mapping": "^0.3.5",
-                "@jridgewell/trace-mapping": "^0.3.25"
-            }
-        },
-        "@jridgewell/sourcemap-codec": {
-            "version": "1.5.5",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
-            "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
-        },
-        "@jridgewell/trace-mapping": {
-            "version": "0.3.31",
-            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
-            "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
-            "dev": true,
-            "requires": {
-                "@jridgewell/resolve-uri": "^3.1.0",
-                "@jridgewell/sourcemap-codec": "^1.4.14"
-            }
-        },
-        "@leichtgewicht/ip-codec": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
-            "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
-            "dev": true
-        },
-        "@node-ipc/js-queue": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz",
-            "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==",
-            "dev": true,
-            "requires": {
-                "easy-stack": "1.0.1"
-            }
-        },
-        "@nodelib/fs.scandir": {
-            "version": "2.1.5",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-            "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-            "dev": true,
-            "requires": {
-                "@nodelib/fs.stat": "2.0.5",
-                "run-parallel": "^1.1.9"
-            }
-        },
-        "@nodelib/fs.stat": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-            "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-            "dev": true
-        },
-        "@nodelib/fs.walk": {
-            "version": "1.2.8",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-            "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-            "dev": true,
-            "requires": {
-                "@nodelib/fs.scandir": "2.1.5",
-                "fastq": "^1.6.0"
-            }
-        },
-        "@openim/client-sdk": {
-            "version": "0.0.13",
-            "resolved": "https://registry.npmjs.org/@openim/client-sdk/-/client-sdk-0.0.13.tgz",
-            "integrity": "sha512-piiSzG5oD0BsaVjBbeeoWVQtyaiFLQNPOcQIh7UAVbK0Qd4bwMFYTLjlGuAJ2IfUtv2QJsR8+dWXaPs/aGBo7Q==",
-            "requires": {
-                "@openim/protocol": "^0.0.7-alpha.1",
-                "base64-arraybuffer": "^1.0.2",
-                "loglevel": "^1.9.2",
-                "spark-md5": "^3.0.2"
-            }
-        },
-        "@openim/protocol": {
-            "version": "0.0.7",
-            "resolved": "https://registry.npmjs.org/@openim/protocol/-/protocol-0.0.7.tgz",
-            "integrity": "sha512-OWc1ZGToI06NA9PVxzKUOSzN9RcEe6wx5R/dGqyDfEtBReqRw553cO7KlfYHyltvKovImhWK9X0079IBqc6h6g=="
-        },
-        "@polka/url": {
-            "version": "1.0.0-next.29",
-            "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
-            "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
-            "dev": true
-        },
-        "@sideway/address": {
-            "version": "4.1.5",
-            "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
-            "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
-            "dev": true,
-            "requires": {
-                "@hapi/hoek": "^9.0.0"
-            }
-        },
-        "@sideway/formula": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
-            "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
-            "dev": true
-        },
-        "@sideway/pinpoint": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
-            "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
-            "dev": true
-        },
-        "@soda/friendly-errors-webpack-plugin": {
-            "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz",
-            "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==",
-            "dev": true,
-            "requires": {
-                "chalk": "^3.0.0",
-                "error-stack-parser": "^2.0.6",
-                "string-width": "^4.2.3",
-                "strip-ansi": "^6.0.1"
-            }
-        },
-        "@soda/get-current-script": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz",
-            "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==",
-            "dev": true
-        },
-        "@trysound/sax": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
-            "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
-            "dev": true
-        },
-        "@types/body-parser": {
-            "version": "1.19.6",
-            "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz",
-            "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==",
-            "dev": true,
-            "requires": {
-                "@types/connect": "*",
-                "@types/node": "*"
-            }
-        },
-        "@types/bonjour": {
-            "version": "3.5.13",
-            "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
-            "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@types/connect": {
-            "version": "3.4.38",
-            "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
-            "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@types/connect-history-api-fallback": {
-            "version": "1.5.4",
-            "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
-            "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
-            "dev": true,
-            "requires": {
-                "@types/express-serve-static-core": "*",
-                "@types/node": "*"
-            }
-        },
-        "@types/eslint": {
-            "version": "9.6.1",
-            "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
-            "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
-            "dev": true,
-            "requires": {
-                "@types/estree": "*",
-                "@types/json-schema": "*"
-            }
-        },
-        "@types/eslint-scope": {
-            "version": "3.7.7",
-            "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
-            "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
-            "dev": true,
-            "requires": {
-                "@types/eslint": "*",
-                "@types/estree": "*"
-            }
-        },
-        "@types/estree": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
-            "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
-            "dev": true
-        },
-        "@types/express": {
-            "version": "4.17.25",
-            "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz",
-            "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==",
-            "dev": true,
-            "requires": {
-                "@types/body-parser": "*",
-                "@types/express-serve-static-core": "^4.17.33",
-                "@types/qs": "*",
-                "@types/serve-static": "^1"
-            },
-            "dependencies": {
-                "@types/express-serve-static-core": {
-                    "version": "4.19.8",
-                    "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz",
-                    "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==",
-                    "dev": true,
-                    "requires": {
-                        "@types/node": "*",
-                        "@types/qs": "*",
-                        "@types/range-parser": "*",
-                        "@types/send": "*"
-                    }
-                }
-            }
-        },
-        "@types/express-serve-static-core": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz",
-            "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*",
-                "@types/qs": "*",
-                "@types/range-parser": "*",
-                "@types/send": "*"
-            }
-        },
-        "@types/html-minifier-terser": {
-            "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
-            "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==",
-            "dev": true
-        },
-        "@types/http-errors": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz",
-            "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==",
-            "dev": true
-        },
-        "@types/http-proxy": {
-            "version": "1.17.17",
-            "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz",
-            "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@types/json-schema": {
-            "version": "7.0.15",
-            "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
-            "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
-            "dev": true
-        },
-        "@types/mime": {
-            "version": "1.3.5",
-            "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
-            "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
-            "dev": true
-        },
-        "@types/minimist": {
-            "version": "1.2.5",
-            "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
-            "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
-            "dev": true
-        },
-        "@types/node": {
-            "version": "25.3.0",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz",
-            "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==",
-            "dev": true,
-            "requires": {
-                "undici-types": "~7.18.0"
-            }
-        },
-        "@types/node-forge": {
-            "version": "1.3.14",
-            "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz",
-            "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@types/normalize-package-data": {
-            "version": "2.4.4",
-            "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
-            "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
-            "dev": true
-        },
-        "@types/parse-json": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
-            "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
-            "dev": true
-        },
-        "@types/qs": {
-            "version": "6.14.0",
-            "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
-            "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
-            "dev": true
-        },
-        "@types/range-parser": {
-            "version": "1.2.7",
-            "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
-            "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
-            "dev": true
-        },
-        "@types/retry": {
-            "version": "0.12.0",
-            "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
-            "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
-            "dev": true
-        },
-        "@types/send": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz",
-            "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@types/serve-index": {
-            "version": "1.9.4",
-            "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz",
-            "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",
-            "dev": true,
-            "requires": {
-                "@types/express": "*"
-            }
-        },
-        "@types/serve-static": {
-            "version": "1.15.10",
-            "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz",
-            "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==",
-            "dev": true,
-            "requires": {
-                "@types/http-errors": "*",
-                "@types/node": "*",
-                "@types/send": "<1"
-            },
-            "dependencies": {
-                "@types/send": {
-                    "version": "0.17.6",
-                    "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz",
-                    "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==",
-                    "dev": true,
-                    "requires": {
-                        "@types/mime": "^1",
-                        "@types/node": "*"
-                    }
-                }
-            }
-        },
-        "@types/sockjs": {
-            "version": "0.3.36",
-            "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
-            "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@types/ws": {
-            "version": "8.18.1",
-            "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
-            "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@ungap/structured-clone": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
-            "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
-            "dev": true
-        },
-        "@vue/cli-overlay": {
-            "version": "5.0.9",
-            "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.9.tgz",
-            "integrity": "sha512-aBdZWrYKxLuFz1FDsk/muFD7GycrsW73Gi11yRc7R2W7Bm8mDRc9HKAI790gdg4NV+chkDFmfkegjg5iMDEpAA==",
-            "dev": true
-        },
-        "@vue/cli-plugin-router": {
-            "version": "5.0.9",
-            "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.9.tgz",
-            "integrity": "sha512-kopbO/8kIl5CAffwgptXEwV509i+M0FfwW4sSkgQ2RzpxOYBjQZvp+096mjZfFcWKSmryNP/ri/Mnu78vmhlhw==",
-            "dev": true,
-            "requires": {
-                "@vue/cli-shared-utils": "^5.0.9"
-            }
-        },
-        "@vue/cli-plugin-vuex": {
-            "version": "5.0.9",
-            "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.9.tgz",
-            "integrity": "sha512-AQhgGNFVd4Pu2crvS0a+hRckgrJv07gzOASdbLd3I72wkT43dd01MLRp8IBRRsu92t3MXenW86AZUCbQBz3//A==",
-            "dev": true,
-            "requires": {}
-        },
-        "@vue/cli-service": {
-            "version": "5.0.9",
-            "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.9.tgz",
-            "integrity": "sha512-yTX7GVyM19tEbd+y5/gA6MkVKA6K61nVYHYAivD61Hx6odVFmQsaC3/R3cWAHM1P5oVKCevBbumPljbT+tFG2w==",
-            "dev": true,
-            "requires": {
-                "@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.9",
-                "@vue/cli-plugin-router": "^5.0.9",
-                "@vue/cli-plugin-vuex": "^5.0.9",
-                "@vue/cli-shared-utils": "^5.0.9",
-                "@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"
-            },
-            "dependencies": {
-                "copy-webpack-plugin": {
-                    "version": "9.1.0",
-                    "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz",
-                    "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==",
-                    "dev": true,
-                    "requires": {
-                        "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"
-                    }
-                },
-                "fs-extra": {
-                    "version": "9.1.0",
-                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
-                    "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
-                    "dev": true,
-                    "requires": {
-                        "at-least-node": "^1.0.0",
-                        "graceful-fs": "^4.2.0",
-                        "jsonfile": "^6.0.1",
-                        "universalify": "^2.0.0"
-                    }
-                },
-                "hash-sum": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
-                    "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
-                    "dev": true
-                },
-                "schema-utils": {
-                    "version": "3.3.0",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-                    "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                },
-                "webpack-merge": {
-                    "version": "5.10.0",
-                    "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
-                    "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
-                    "dev": true,
-                    "requires": {
-                        "clone-deep": "^4.0.1",
-                        "flat": "^5.0.2",
-                        "wildcard": "^2.0.0"
-                    }
-                }
-            }
-        },
-        "@vue/cli-shared-utils": {
-            "version": "5.0.9",
-            "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.9.tgz",
-            "integrity": "sha512-lf4KykiG8j9KwvNVi7fKtASmHuLsxCcCsflVU2b2CHMRuR4weOIV3zuuCrjWKjk0APn/MHJhgCjJGzHMbTtd5w==",
-            "dev": true,
-            "requires": {
-                "@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"
-            },
-            "dependencies": {
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                },
-                "lru-cache": {
-                    "version": "6.0.0",
-                    "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-                    "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-                    "dev": true,
-                    "requires": {
-                        "yallist": "^4.0.0"
-                    }
-                },
-                "semver": {
-                    "version": "7.7.4",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
-                    "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
-                    "dev": true
-                },
-                "yallist": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-                    "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-                    "dev": true
-                }
-            }
-        },
-        "@vue/compiler-core": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.29.tgz",
-            "integrity": "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==",
-            "peer": true,
-            "requires": {
-                "@babel/parser": "^7.29.0",
-                "@vue/shared": "3.5.29",
-                "entities": "^7.0.1",
-                "estree-walker": "^2.0.2",
-                "source-map-js": "^1.2.1"
-            },
-            "dependencies": {
-                "entities": {
-                    "version": "7.0.1",
-                    "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
-                    "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
-                    "peer": true
-                }
-            }
-        },
-        "@vue/compiler-dom": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.29.tgz",
-            "integrity": "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==",
-            "peer": true,
-            "requires": {
-                "@vue/compiler-core": "3.5.29",
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "@vue/compiler-sfc": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.29.tgz",
-            "integrity": "sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==",
-            "peer": true,
-            "requires": {
-                "@babel/parser": "^7.29.0",
-                "@vue/compiler-core": "3.5.29",
-                "@vue/compiler-dom": "3.5.29",
-                "@vue/compiler-ssr": "3.5.29",
-                "@vue/shared": "3.5.29",
-                "estree-walker": "^2.0.2",
-                "magic-string": "^0.30.21",
-                "postcss": "^8.5.6",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "@vue/compiler-ssr": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.29.tgz",
-            "integrity": "sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==",
-            "peer": true,
-            "requires": {
-                "@vue/compiler-dom": "3.5.29",
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "@vue/component-compiler-utils": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
-            "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==",
-            "dev": true,
-            "requires": {
-                "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",
-                "prettier": "^1.18.2 || ^2.0.0",
-                "source-map": "~0.6.1",
-                "vue-template-es2015-compiler": "^1.9.0"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "picocolors": {
-                    "version": "0.2.1",
-                    "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-                    "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-                    "dev": true
-                },
-                "postcss": {
-                    "version": "7.0.39",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-                    "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-                    "dev": true,
-                    "requires": {
-                        "picocolors": "^0.2.1",
-                        "source-map": "^0.6.1"
-                    }
-                },
-                "postcss-selector-parser": {
-                    "version": "6.1.2",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-                    "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "@vue/devtools-api": {
-            "version": "6.6.4",
-            "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
-            "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
-        },
-        "@vue/reactivity": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.29.tgz",
-            "integrity": "sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==",
-            "peer": true,
-            "requires": {
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "@vue/runtime-core": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.29.tgz",
-            "integrity": "sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==",
-            "peer": true,
-            "requires": {
-                "@vue/reactivity": "3.5.29",
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "@vue/runtime-dom": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.29.tgz",
-            "integrity": "sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==",
-            "peer": true,
-            "requires": {
-                "@vue/reactivity": "3.5.29",
-                "@vue/runtime-core": "3.5.29",
-                "@vue/shared": "3.5.29",
-                "csstype": "^3.2.3"
-            }
-        },
-        "@vue/server-renderer": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.29.tgz",
-            "integrity": "sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==",
-            "peer": true,
-            "requires": {
-                "@vue/compiler-ssr": "3.5.29",
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "@vue/shared": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.29.tgz",
-            "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==",
-            "peer": true
-        },
-        "@vue/vue-loader-v15": {
-            "version": "npm:vue-loader@15.11.1",
-            "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz",
-            "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "@vue/web-component-wrapper": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
-            "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==",
-            "dev": true
-        },
-        "@webassemblyjs/ast": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
-            "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/helper-numbers": "1.13.2",
-                "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
-            }
-        },
-        "@webassemblyjs/floating-point-hex-parser": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
-            "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
-            "dev": true
-        },
-        "@webassemblyjs/helper-api-error": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
-            "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
-            "dev": true
-        },
-        "@webassemblyjs/helper-buffer": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
-            "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
-            "dev": true
-        },
-        "@webassemblyjs/helper-numbers": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
-            "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/floating-point-hex-parser": "1.13.2",
-                "@webassemblyjs/helper-api-error": "1.13.2",
-                "@xtuc/long": "4.2.2"
-            }
-        },
-        "@webassemblyjs/helper-wasm-bytecode": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
-            "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
-            "dev": true
-        },
-        "@webassemblyjs/helper-wasm-section": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
-            "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.14.1",
-                "@webassemblyjs/helper-buffer": "1.14.1",
-                "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
-                "@webassemblyjs/wasm-gen": "1.14.1"
-            }
-        },
-        "@webassemblyjs/ieee754": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
-            "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
-            "dev": true,
-            "requires": {
-                "@xtuc/ieee754": "^1.2.0"
-            }
-        },
-        "@webassemblyjs/leb128": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
-            "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
-            "dev": true,
-            "requires": {
-                "@xtuc/long": "4.2.2"
-            }
-        },
-        "@webassemblyjs/utf8": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
-            "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
-            "dev": true
-        },
-        "@webassemblyjs/wasm-edit": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
-            "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "@webassemblyjs/wasm-gen": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
-            "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "@webassemblyjs/wasm-opt": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
-            "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.14.1",
-                "@webassemblyjs/helper-buffer": "1.14.1",
-                "@webassemblyjs/wasm-gen": "1.14.1",
-                "@webassemblyjs/wasm-parser": "1.14.1"
-            }
-        },
-        "@webassemblyjs/wasm-parser": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
-            "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "@webassemblyjs/wast-printer": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
-            "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.14.1",
-                "@xtuc/long": "4.2.2"
-            }
-        },
-        "@xtuc/ieee754": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-            "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-            "dev": true
-        },
-        "@xtuc/long": {
-            "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-            "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
-            "dev": true
-        },
-        "@yarnpkg/lockfile": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
-            "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
-            "dev": true
-        },
-        "accepts": {
-            "version": "1.3.8",
-            "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
-            "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
-            "dev": true,
-            "requires": {
-                "mime-types": "~2.1.34",
-                "negotiator": "0.6.3"
-            },
-            "dependencies": {
-                "negotiator": {
-                    "version": "0.6.3",
-                    "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
-                    "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
-                    "dev": true
-                }
-            }
-        },
-        "acorn": {
-            "version": "8.16.0",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
-            "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
-            "dev": true
-        },
-        "acorn-import-phases": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
-            "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
-            "dev": true,
-            "requires": {}
-        },
-        "acorn-jsx": {
-            "version": "5.3.2",
-            "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-            "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-            "dev": true,
-            "requires": {}
-        },
-        "acorn-walk": {
-            "version": "8.3.5",
-            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
-            "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
-            "dev": true,
-            "requires": {
-                "acorn": "^8.11.0"
-            }
-        },
-        "address": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz",
-            "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
-            "dev": true
-        },
-        "adler-32": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
-            "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
-        },
-        "aegis-web-sdk": {
-            "version": "1.41.10",
-            "resolved": "https://registry.npmjs.org/aegis-web-sdk/-/aegis-web-sdk-1.41.10.tgz",
-            "integrity": "sha512-PefrYiCjQxy21W+KCGEhs+LOLfCvmrja21/OsN+MlL/a7cjG8xBFgD9yxW9iKkVIFWRfgkkF+5r5Jfbk8FSz4Q==",
-            "requires": {
-                "web-vitals": "^3.4.0"
-            }
-        },
-        "aegis-weex-sdk": {
-            "version": "1.38.1",
-            "resolved": "https://registry.npmjs.org/aegis-weex-sdk/-/aegis-weex-sdk-1.38.1.tgz",
-            "integrity": "sha512-xUBU536yLpmvUiP4vKOFDSnS0BZplFzF0LmvwixMGa1TJ+DwxGzIAkG65+NDnXMgcxuxZGZIl8qdd4OnfkwQiQ=="
-        },
-        "ajv": {
-            "version": "6.14.0",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
-            "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
-            "dev": true,
-            "requires": {
-                "fast-deep-equal": "^3.1.1",
-                "fast-json-stable-stringify": "^2.0.0",
-                "json-schema-traverse": "^0.4.1",
-                "uri-js": "^4.2.2"
-            }
-        },
-        "ajv-formats": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
-            "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
-            "dev": true,
-            "requires": {
-                "ajv": "^8.0.0"
-            },
-            "dependencies": {
-                "ajv": {
-                    "version": "8.18.0",
-                    "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
-                    "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
-                    "dev": true,
-                    "requires": {
-                        "fast-deep-equal": "^3.1.3",
-                        "fast-uri": "^3.0.1",
-                        "json-schema-traverse": "^1.0.0",
-                        "require-from-string": "^2.0.2"
-                    }
-                },
-                "json-schema-traverse": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-                    "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-                    "dev": true
-                }
-            }
-        },
-        "ajv-keywords": {
-            "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-            "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-            "dev": true,
-            "requires": {}
-        },
-        "ansi-escapes": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
-            "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
-            "dev": true
-        },
-        "ansi-html-community": {
-            "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
-            "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
-            "dev": true
-        },
-        "ansi-regex": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-            "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-            "dev": true
-        },
-        "ansi-styles": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-            "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-            "dev": true,
-            "requires": {
-                "color-convert": "^2.0.1"
-            }
-        },
-        "any-promise": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
-            "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
-            "dev": true
-        },
-        "anymatch": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
-            "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
-            "dev": true,
-            "requires": {
-                "normalize-path": "^3.0.0",
-                "picomatch": "^2.0.4"
-            }
-        },
-        "arch": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
-            "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
-            "dev": true
-        },
-        "argparse": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-            "dev": true
-        },
-        "array-flatten": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-            "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
-            "dev": true
-        },
-        "array-union": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-            "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-            "dev": true
-        },
-        "async": {
-            "version": "3.2.6",
-            "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
-            "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
-            "dev": true
-        },
-        "at-least-node": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
-            "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
-            "dev": true
-        },
-        "autoprefixer": {
-            "version": "10.4.24",
-            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz",
-            "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.28.1",
-                "caniuse-lite": "^1.0.30001766",
-                "fraction.js": "^5.3.4",
-                "picocolors": "^1.1.1",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "balanced-match": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-            "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-            "dev": true
-        },
-        "base64-arraybuffer": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
-            "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
-        },
-        "base64-js": {
-            "version": "1.5.1",
-            "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
-            "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-            "dev": true
-        },
-        "baseline-browser-mapping": {
-            "version": "2.10.0",
-            "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
-            "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
-            "dev": true
-        },
-        "batch": {
-            "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-            "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
-            "dev": true
-        },
-        "big.js": {
-            "version": "5.2.2",
-            "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-            "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
-            "dev": true
-        },
-        "binary-extensions": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
-            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
-            "dev": true
-        },
-        "bl": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
-            "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
-            "dev": true,
-            "requires": {
-                "buffer": "^5.5.0",
-                "inherits": "^2.0.4",
-                "readable-stream": "^3.4.0"
-            }
-        },
-        "bluebird": {
-            "version": "3.7.2",
-            "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
-            "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
-            "dev": true
-        },
-        "body-parser": {
-            "version": "1.20.4",
-            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz",
-            "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==",
-            "dev": true,
-            "requires": {
-                "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.1",
-                "iconv-lite": "~0.4.24",
-                "on-finished": "~2.4.1",
-                "qs": "~6.14.0",
-                "raw-body": "~2.5.3",
-                "type-is": "~1.6.18",
-                "unpipe": "~1.0.0"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                    "dev": true
-                }
-            }
-        },
-        "bonjour-service": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz",
-            "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==",
-            "dev": true,
-            "requires": {
-                "fast-deep-equal": "^3.1.3",
-                "multicast-dns": "^7.2.5"
-            }
-        },
-        "boolbase": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-            "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
-            "dev": true
-        },
-        "brace-expansion": {
-            "version": "1.1.12",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
-            "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
-            "dev": true,
-            "requires": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
-        "braces": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
-            "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
-            "dev": true,
-            "requires": {
-                "fill-range": "^7.1.1"
-            }
-        },
-        "browserslist": {
-            "version": "4.28.1",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
-            "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
-            "dev": true,
-            "requires": {
-                "baseline-browser-mapping": "^2.9.0",
-                "caniuse-lite": "^1.0.30001759",
-                "electron-to-chromium": "^1.5.263",
-                "node-releases": "^2.0.27",
-                "update-browserslist-db": "^1.2.0"
-            }
-        },
-        "buffer": {
-            "version": "5.7.1",
-            "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
-            "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
-            "dev": true,
-            "requires": {
-                "base64-js": "^1.3.1",
-                "ieee754": "^1.1.13"
-            }
-        },
-        "buffer-from": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-            "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-            "dev": true
-        },
-        "buffer-json": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz",
-            "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==",
-            "dev": true
-        },
-        "bytes": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-            "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
-            "dev": true
-        },
-        "call-bind": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
-            "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
-            "dev": true,
-            "requires": {
-                "call-bind-apply-helpers": "^1.0.0",
-                "es-define-property": "^1.0.0",
-                "get-intrinsic": "^1.2.4",
-                "set-function-length": "^1.2.2"
-            }
-        },
-        "call-bind-apply-helpers": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
-            "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
-            "dev": true,
-            "requires": {
-                "es-errors": "^1.3.0",
-                "function-bind": "^1.1.2"
-            }
-        },
-        "call-bound": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
-            "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
-            "dev": true,
-            "requires": {
-                "call-bind-apply-helpers": "^1.0.2",
-                "get-intrinsic": "^1.3.0"
-            }
-        },
-        "callsites": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-            "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-            "dev": true
-        },
-        "camel-case": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
-            "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
-            "dev": true,
-            "requires": {
-                "pascal-case": "^3.1.2",
-                "tslib": "^2.0.3"
-            }
-        },
-        "caniuse-api": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
-            "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.0.0",
-                "caniuse-lite": "^1.0.0",
-                "lodash.memoize": "^4.1.2",
-                "lodash.uniq": "^4.5.0"
-            }
-        },
-        "caniuse-lite": {
-            "version": "1.0.30001774",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
-            "integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
-            "dev": true
-        },
-        "case-sensitive-paths-webpack-plugin": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
-            "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",
-            "dev": true
-        },
-        "cfb": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz",
-            "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
-            "requires": {
-                "adler-32": "~1.3.0",
-                "crc-32": "~1.2.0"
-            }
-        },
-        "chalk": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-            "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-            "dev": true,
-            "requires": {
-                "ansi-styles": "^4.1.0",
-                "supports-color": "^7.1.0"
-            }
-        },
-        "charenc": {
-            "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
-            "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
-        },
-        "chokidar": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
-            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
-            "dev": true,
-            "requires": {
-                "anymatch": "~3.1.2",
-                "braces": "~3.0.2",
-                "fsevents": "~2.3.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"
-            },
-            "dependencies": {
-                "glob-parent": {
-                    "version": "5.1.2",
-                    "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-                    "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-                    "dev": true,
-                    "requires": {
-                        "is-glob": "^4.0.1"
-                    }
-                }
-            }
-        },
-        "chrome-trace-event": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
-            "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
-            "dev": true
-        },
-        "ci-info": {
-            "version": "3.9.0",
-            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
-            "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
-            "dev": true
-        },
-        "clean-css": {
-            "version": "5.3.3",
-            "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
-            "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
-            "dev": true,
-            "requires": {
-                "source-map": "~0.6.0"
-            }
-        },
-        "cli-cursor": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-            "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-            "dev": true,
-            "requires": {
-                "restore-cursor": "^3.1.0"
-            }
-        },
-        "cli-highlight": {
-            "version": "2.1.11",
-            "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
-            "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
-            "dev": true,
-            "requires": {
-                "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"
-            },
-            "dependencies": {
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                }
-            }
-        },
-        "cli-spinners": {
-            "version": "2.9.2",
-            "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
-            "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
-            "dev": true
-        },
-        "clipboardy": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz",
-            "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
-            "dev": true,
-            "requires": {
-                "arch": "^2.1.1",
-                "execa": "^1.0.0",
-                "is-wsl": "^2.1.1"
-            }
-        },
-        "cliui": {
-            "version": "7.0.4",
-            "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-            "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
-            "dev": true,
-            "requires": {
-                "string-width": "^4.2.0",
-                "strip-ansi": "^6.0.0",
-                "wrap-ansi": "^7.0.0"
-            }
-        },
-        "clone": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-            "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
-            "dev": true
-        },
-        "clone-deep": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
-            "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
-            "dev": true,
-            "requires": {
-                "is-plain-object": "^2.0.4",
-                "kind-of": "^6.0.2",
-                "shallow-clone": "^3.0.0"
-            }
-        },
-        "codepage": {
-            "version": "1.15.0",
-            "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
-            "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
-        },
-        "color-convert": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-            "dev": true,
-            "requires": {
-                "color-name": "~1.1.4"
-            }
-        },
-        "color-name": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-            "dev": true
-        },
-        "colord": {
-            "version": "2.9.3",
-            "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
-            "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
-            "dev": true
-        },
-        "colorette": {
-            "version": "2.0.20",
-            "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
-            "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
-            "dev": true
-        },
-        "commander": {
-            "version": "8.3.0",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-            "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
-            "dev": true
-        },
-        "compressible": {
-            "version": "2.0.18",
-            "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
-            "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
-            "dev": true,
-            "requires": {
-                "mime-db": ">= 1.43.0 < 2"
-            }
-        },
-        "compression": {
-            "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
-            "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
-            "dev": true,
-            "requires": {
-                "bytes": "3.1.2",
-                "compressible": "~2.0.18",
-                "debug": "2.6.9",
-                "negotiator": "~0.6.4",
-                "on-headers": "~1.1.0",
-                "safe-buffer": "5.2.1",
-                "vary": "~1.1.2"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                    "dev": true
-                }
-            }
-        },
-        "concat-map": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-            "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-            "dev": true
-        },
-        "connect-history-api-fallback": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
-            "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
-            "dev": true
-        },
-        "consolidate": {
-            "version": "0.15.1",
-            "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
-            "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
-            "dev": true,
-            "requires": {
-                "bluebird": "^3.1.1"
-            }
-        },
-        "content-disposition": {
-            "version": "0.5.4",
-            "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
-            "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
-            "dev": true,
-            "requires": {
-                "safe-buffer": "5.2.1"
-            }
-        },
-        "content-type": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
-            "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
-            "dev": true
-        },
-        "cookie": {
-            "version": "0.7.2",
-            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
-            "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
-            "dev": true
-        },
-        "cookie-signature": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
-            "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
-            "dev": true
-        },
-        "copy-webpack-plugin": {
-            "version": "13.0.1",
-            "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz",
-            "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==",
-            "dev": true,
-            "peer": true,
-            "requires": {
-                "glob-parent": "^6.0.1",
-                "normalize-path": "^3.0.0",
-                "schema-utils": "^4.2.0",
-                "serialize-javascript": "^6.0.2",
-                "tinyglobby": "^0.2.12"
-            }
-        },
-        "core-js": {
-            "version": "3.48.0",
-            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz",
-            "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==",
-            "peer": true
-        },
-        "core-util-is": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
-            "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-            "dev": true
-        },
-        "cosmiconfig": {
-            "version": "7.1.0",
-            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
-            "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "crc-32": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
-            "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
-        },
-        "cross-env": {
-            "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz",
-            "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==",
-            "dev": true,
-            "requires": {
-                "cross-spawn": "^6.0.5"
-            }
-        },
-        "cross-spawn": {
-            "version": "6.0.6",
-            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
-            "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
-            "dev": true,
-            "requires": {
-                "nice-try": "^1.0.4",
-                "path-key": "^2.0.1",
-                "semver": "^5.5.0",
-                "shebang-command": "^1.2.0",
-                "which": "^1.2.9"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "5.7.2",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-                    "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-                    "dev": true
-                }
-            }
-        },
-        "crypt": {
-            "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
-            "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="
-        },
-        "crypto-js": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
-            "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
-        },
-        "css-declaration-sorter": {
-            "version": "6.4.1",
-            "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
-            "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
-            "dev": true,
-            "requires": {}
-        },
-        "css-loader": {
-            "version": "6.11.0",
-            "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz",
-            "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",
-            "dev": true,
-            "requires": {
-                "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"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                },
-                "semver": {
-                    "version": "7.7.4",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
-                    "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
-                    "dev": true
-                }
-            }
-        },
-        "css-minimizer-webpack-plugin": {
-            "version": "3.4.1",
-            "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz",
-            "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "css-select": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
-            "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
-            "dev": true,
-            "requires": {
-                "boolbase": "^1.0.0",
-                "css-what": "^6.0.1",
-                "domhandler": "^4.3.1",
-                "domutils": "^2.8.0",
-                "nth-check": "^2.0.1"
-            }
-        },
-        "css-tree": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
-            "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
-            "dev": true,
-            "requires": {
-                "mdn-data": "2.0.14",
-                "source-map": "^0.6.1"
-            }
-        },
-        "css-what": {
-            "version": "6.2.2",
-            "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
-            "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
-            "dev": true
-        },
-        "cssesc": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
-            "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
-            "dev": true
-        },
-        "cssnano": {
-            "version": "5.1.15",
-            "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz",
-            "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==",
-            "dev": true,
-            "requires": {
-                "cssnano-preset-default": "^5.2.14",
-                "lilconfig": "^2.0.3",
-                "yaml": "^1.10.2"
-            }
-        },
-        "cssnano-preset-default": {
-            "version": "5.2.14",
-            "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz",
-            "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "cssnano-utils": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
-            "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
-            "dev": true,
-            "requires": {}
-        },
-        "csso": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
-            "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
-            "dev": true,
-            "requires": {
-                "css-tree": "^1.1.2"
-            }
-        },
-        "csstype": {
-            "version": "3.2.3",
-            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
-            "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
-            "peer": true
-        },
-        "d": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
-            "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
-            "requires": {
-                "es5-ext": "^0.10.64",
-                "type": "^2.7.2"
-            }
-        },
-        "danmu.js": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/danmu.js/-/danmu.js-1.2.1.tgz",
-            "integrity": "sha512-evDEImUBo94c846fC92K//Dzll8jXnZ3zKmYlQHwMzmvw6IW2IyjWL3Ew2SqEAzuqauFnDkwJEgZauu3uW/p1Q==",
-            "requires": {
-                "event-emitter": "^0.3.5"
-            }
-        },
-        "date-fns": {
-            "version": "2.30.0",
-            "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
-            "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
-            "requires": {
-                "@babel/runtime": "^7.21.0"
-            }
-        },
-        "dayjs": {
-            "version": "1.11.19",
-            "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
-            "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw=="
-        },
-        "debounce": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
-            "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
-            "dev": true
-        },
-        "debug": {
-            "version": "4.4.3",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
-            "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
-            "dev": true,
-            "requires": {
-                "ms": "^2.1.3"
-            }
-        },
-        "deep-extend": {
-            "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
-            "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
-            "dev": true
-        },
-        "deep-is": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-            "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-            "dev": true
-        },
-        "deepmerge": {
-            "version": "1.5.2",
-            "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
-            "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
-            "dev": true
-        },
-        "default-gateway": {
-            "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
-            "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
-            "dev": true,
-            "requires": {
-                "execa": "^5.0.0"
-            },
-            "dependencies": {
-                "cross-spawn": {
-                    "version": "7.0.6",
-                    "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-                    "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
-                    "dev": true,
-                    "requires": {
-                        "path-key": "^3.1.0",
-                        "shebang-command": "^2.0.0",
-                        "which": "^2.0.1"
-                    }
-                },
-                "execa": {
-                    "version": "5.1.1",
-                    "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-                    "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
-                    "dev": true,
-                    "requires": {
-                        "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"
-                    }
-                },
-                "get-stream": {
-                    "version": "6.0.1",
-                    "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-                    "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-                    "dev": true
-                },
-                "is-stream": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-                    "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-                    "dev": true
-                },
-                "npm-run-path": {
-                    "version": "4.0.1",
-                    "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-                    "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-                    "dev": true,
-                    "requires": {
-                        "path-key": "^3.0.0"
-                    }
-                },
-                "path-key": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-                    "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-                    "dev": true
-                },
-                "shebang-command": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-                    "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-                    "dev": true,
-                    "requires": {
-                        "shebang-regex": "^3.0.0"
-                    }
-                },
-                "shebang-regex": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-                    "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-                    "dev": true
-                },
-                "which": {
-                    "version": "2.0.2",
-                    "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-                    "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-                    "dev": true,
-                    "requires": {
-                        "isexe": "^2.0.0"
-                    }
-                }
-            }
-        },
-        "defaults": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
-            "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
-            "dev": true,
-            "requires": {
-                "clone": "^1.0.2"
-            }
-        },
-        "define-data-property": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
-            "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
-            "dev": true,
-            "requires": {
-                "es-define-property": "^1.0.0",
-                "es-errors": "^1.3.0",
-                "gopd": "^1.0.1"
-            }
-        },
-        "define-lazy-prop": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
-            "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
-            "dev": true
-        },
-        "delegate": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
-            "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
-        },
-        "depd": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
-            "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
-            "dev": true
-        },
-        "destroy": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
-            "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
-            "dev": true
-        },
-        "detect-node": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
-            "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
-            "dev": true
-        },
-        "dir-glob": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-            "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-            "dev": true,
-            "requires": {
-                "path-type": "^4.0.0"
-            }
-        },
-        "dns-packet": {
-            "version": "5.6.1",
-            "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
-            "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
-            "dev": true,
-            "requires": {
-                "@leichtgewicht/ip-codec": "^2.0.1"
-            }
-        },
-        "doctrine": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-            "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-            "dev": true,
-            "requires": {
-                "esutils": "^2.0.2"
-            }
-        },
-        "dom-converter": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
-            "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
-            "dev": true,
-            "requires": {
-                "utila": "~0.4"
-            }
-        },
-        "dom-serializer": {
-            "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
-            "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
-            "dev": true,
-            "requires": {
-                "domelementtype": "^2.0.1",
-                "domhandler": "^4.2.0",
-                "entities": "^2.0.0"
-            }
-        },
-        "domelementtype": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
-            "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
-            "dev": true
-        },
-        "domhandler": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
-            "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
-            "dev": true,
-            "requires": {
-                "domelementtype": "^2.2.0"
-            }
-        },
-        "domutils": {
-            "version": "2.8.0",
-            "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
-            "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
-            "dev": true,
-            "requires": {
-                "dom-serializer": "^1.0.1",
-                "domelementtype": "^2.2.0",
-                "domhandler": "^4.2.0"
-            }
-        },
-        "dot-case": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
-            "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
-            "dev": true,
-            "requires": {
-                "no-case": "^3.0.4",
-                "tslib": "^2.0.3"
-            }
-        },
-        "dotenv": {
-            "version": "10.0.0",
-            "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
-            "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
-            "dev": true
-        },
-        "dotenv-expand": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
-            "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
-            "dev": true
-        },
-        "downloadjs": {
-            "version": "1.4.7",
-            "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz",
-            "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q=="
-        },
-        "dunder-proto": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
-            "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
-            "dev": true,
-            "requires": {
-                "call-bind-apply-helpers": "^1.0.1",
-                "es-errors": "^1.3.0",
-                "gopd": "^1.2.0"
-            }
-        },
-        "duplexer": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
-            "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
-            "dev": true
-        },
-        "easy-stack": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz",
-            "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",
-            "dev": true
-        },
-        "ee-first": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-            "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
-            "dev": true
-        },
-        "electron-to-chromium": {
-            "version": "1.5.302",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz",
-            "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==",
-            "dev": true
-        },
-        "emoji-regex": {
-            "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-            "dev": true
-        },
-        "emojis-list": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-            "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-            "dev": true
-        },
-        "encodeurl": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
-            "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
-            "dev": true
-        },
-        "end-of-stream": {
-            "version": "1.4.5",
-            "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
-            "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
-            "dev": true,
-            "requires": {
-                "once": "^1.4.0"
-            }
-        },
-        "enhanced-resolve": {
-            "version": "5.19.0",
-            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
-            "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
-            "dev": true,
-            "requires": {
-                "graceful-fs": "^4.2.4",
-                "tapable": "^2.3.0"
-            }
-        },
-        "entities": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
-            "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
-            "dev": true
-        },
-        "envinfo": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-6.0.1.tgz",
-            "integrity": "sha512-IbMWvMQulMm1hiky1Zt5YTcSDEdZs0r9bt77mcLa4RUAKRYTGZvrb3MtAt47FuldPxwL+u2LtQex1FajIW1/Cw==",
-            "dev": true
-        },
-        "error-ex": {
-            "version": "1.3.4",
-            "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
-            "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
-            "dev": true,
-            "requires": {
-                "is-arrayish": "^0.2.1"
-            }
-        },
-        "error-stack-parser": {
-            "version": "2.1.4",
-            "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
-            "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
-            "dev": true,
-            "requires": {
-                "stackframe": "^1.3.4"
-            }
-        },
-        "es-define-property": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
-            "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
-            "dev": true
-        },
-        "es-errors": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
-            "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
-            "dev": true
-        },
-        "es-module-lexer": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
-            "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
-            "dev": true
-        },
-        "es-object-atoms": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
-            "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
-            "dev": true,
-            "requires": {
-                "es-errors": "^1.3.0"
-            }
-        },
-        "es5-ext": {
-            "version": "0.10.64",
-            "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
-            "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
-            "requires": {
-                "es6-iterator": "^2.0.3",
-                "es6-symbol": "^3.1.3",
-                "esniff": "^2.0.1",
-                "next-tick": "^1.1.0"
-            }
-        },
-        "es6-iterator": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
-            "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
-            "requires": {
-                "d": "1",
-                "es5-ext": "^0.10.35",
-                "es6-symbol": "^3.1.1"
-            }
-        },
-        "es6-symbol": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
-            "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
-            "requires": {
-                "d": "^1.0.2",
-                "ext": "^1.7.0"
-            }
-        },
-        "escalade": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
-            "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
-            "dev": true
-        },
-        "escape-html": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-            "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
-            "dev": true
-        },
-        "escape-string-regexp": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-            "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-            "dev": true
-        },
-        "eslint": {
-            "version": "8.57.1",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
-            "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
-            "dev": true,
-            "requires": {
-                "@eslint-community/eslint-utils": "^4.2.0",
-                "@eslint-community/regexpp": "^4.6.1",
-                "@eslint/eslintrc": "^2.1.4",
-                "@eslint/js": "8.57.1",
-                "@humanwhocodes/config-array": "^0.13.0",
-                "@humanwhocodes/module-importer": "^1.0.1",
-                "@nodelib/fs.walk": "^1.2.8",
-                "@ungap/structured-clone": "^1.2.0",
-                "ajv": "^6.12.4",
-                "chalk": "^4.0.0",
-                "cross-spawn": "^7.0.2",
-                "debug": "^4.3.2",
-                "doctrine": "^3.0.0",
-                "escape-string-regexp": "^4.0.0",
-                "eslint-scope": "^7.2.2",
-                "eslint-visitor-keys": "^3.4.3",
-                "espree": "^9.6.1",
-                "esquery": "^1.4.2",
-                "esutils": "^2.0.2",
-                "fast-deep-equal": "^3.1.3",
-                "file-entry-cache": "^6.0.1",
-                "find-up": "^5.0.0",
-                "glob-parent": "^6.0.2",
-                "globals": "^13.19.0",
-                "graphemer": "^1.4.0",
-                "ignore": "^5.2.0",
-                "imurmurhash": "^0.1.4",
-                "is-glob": "^4.0.0",
-                "is-path-inside": "^3.0.3",
-                "js-yaml": "^4.1.0",
-                "json-stable-stringify-without-jsonify": "^1.0.1",
-                "levn": "^0.4.1",
-                "lodash.merge": "^4.6.2",
-                "minimatch": "^3.1.2",
-                "natural-compare": "^1.4.0",
-                "optionator": "^0.9.3",
-                "strip-ansi": "^6.0.1",
-                "text-table": "^0.2.0"
-            },
-            "dependencies": {
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                },
-                "cross-spawn": {
-                    "version": "7.0.6",
-                    "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-                    "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
-                    "dev": true,
-                    "requires": {
-                        "path-key": "^3.1.0",
-                        "shebang-command": "^2.0.0",
-                        "which": "^2.0.1"
-                    }
-                },
-                "path-key": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-                    "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-                    "dev": true
-                },
-                "shebang-command": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-                    "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-                    "dev": true,
-                    "requires": {
-                        "shebang-regex": "^3.0.0"
-                    }
-                },
-                "shebang-regex": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-                    "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-                    "dev": true
-                },
-                "which": {
-                    "version": "2.0.2",
-                    "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-                    "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-                    "dev": true,
-                    "requires": {
-                        "isexe": "^2.0.0"
-                    }
-                }
-            }
-        },
-        "eslint-scope": {
-            "version": "7.2.2",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-            "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
-            "dev": true,
-            "requires": {
-                "esrecurse": "^4.3.0",
-                "estraverse": "^5.2.0"
-            }
-        },
-        "eslint-visitor-keys": {
-            "version": "3.4.3",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-            "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-            "dev": true
-        },
-        "esniff": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
-            "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
-            "requires": {
-                "d": "^1.0.1",
-                "es5-ext": "^0.10.62",
-                "event-emitter": "^0.3.5",
-                "type": "^2.7.2"
-            }
-        },
-        "espree": {
-            "version": "9.6.1",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-            "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
-            "dev": true,
-            "requires": {
-                "acorn": "^8.9.0",
-                "acorn-jsx": "^5.3.2",
-                "eslint-visitor-keys": "^3.4.1"
-            }
-        },
-        "esquery": {
-            "version": "1.7.0",
-            "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
-            "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
-            "dev": true,
-            "requires": {
-                "estraverse": "^5.1.0"
-            }
-        },
-        "esrecurse": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-            "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-            "dev": true,
-            "requires": {
-                "estraverse": "^5.2.0"
-            }
-        },
-        "estraverse": {
-            "version": "5.3.0",
-            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-            "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-            "dev": true
-        },
-        "estree-walker": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-            "peer": true
-        },
-        "esutils": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-            "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-            "dev": true
-        },
-        "etag": {
-            "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-            "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
-            "dev": true
-        },
-        "event-emitter": {
-            "version": "0.3.5",
-            "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
-            "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
-            "requires": {
-                "d": "1",
-                "es5-ext": "~0.10.14"
-            }
-        },
-        "event-pubsub": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz",
-            "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==",
-            "dev": true
-        },
-        "eventemitter3": {
-            "version": "4.0.7",
-            "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
-            "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
-        },
-        "events": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-            "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
-            "dev": true
-        },
-        "execa": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-            "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "express": {
-            "version": "4.22.1",
-            "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz",
-            "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==",
-            "dev": true,
-            "requires": {
-                "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.14.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"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                    "dev": true
-                }
-            }
-        },
-        "ext": {
-            "version": "1.7.0",
-            "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
-            "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
-            "requires": {
-                "type": "^2.7.2"
-            }
-        },
-        "fast-deep-equal": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-            "dev": true
-        },
-        "fast-glob": {
-            "version": "3.3.3",
-            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
-            "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
-            "dev": true,
-            "requires": {
-                "@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"
-            },
-            "dependencies": {
-                "glob-parent": {
-                    "version": "5.1.2",
-                    "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-                    "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-                    "dev": true,
-                    "requires": {
-                        "is-glob": "^4.0.1"
-                    }
-                }
-            }
-        },
-        "fast-json-stable-stringify": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-            "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-            "dev": true
-        },
-        "fast-levenshtein": {
-            "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-            "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-            "dev": true
-        },
-        "fast-uri": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
-            "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
-            "dev": true
-        },
-        "fastq": {
-            "version": "1.20.1",
-            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
-            "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
-            "dev": true,
-            "requires": {
-                "reusify": "^1.0.4"
-            }
-        },
-        "faye-websocket": {
-            "version": "0.11.4",
-            "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
-            "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
-            "dev": true,
-            "requires": {
-                "websocket-driver": ">=0.5.1"
-            }
-        },
-        "figures": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
-            "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
-            "dev": true,
-            "requires": {
-                "escape-string-regexp": "^1.0.5"
-            },
-            "dependencies": {
-                "escape-string-regexp": {
-                    "version": "1.0.5",
-                    "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-                    "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-                    "dev": true
-                }
-            }
-        },
-        "file-entry-cache": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-            "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-            "dev": true,
-            "requires": {
-                "flat-cache": "^3.0.4"
-            }
-        },
-        "fill-range": {
-            "version": "7.1.1",
-            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
-            "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
-            "dev": true,
-            "requires": {
-                "to-regex-range": "^5.0.1"
-            }
-        },
-        "finalhandler": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
-            "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
-            "dev": true,
-            "requires": {
-                "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.2",
-                "unpipe": "~1.0.0"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                    "dev": true
-                }
-            }
-        },
-        "find-up": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-            "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
-            "dev": true,
-            "requires": {
-                "locate-path": "^6.0.0",
-                "path-exists": "^4.0.0"
-            }
-        },
-        "find-yarn-workspace-root": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
-            "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
-            "dev": true,
-            "requires": {
-                "micromatch": "^4.0.2"
-            }
-        },
-        "flat": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
-            "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
-            "dev": true
-        },
-        "flat-cache": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
-            "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
-            "dev": true,
-            "requires": {
-                "flatted": "^3.2.9",
-                "keyv": "^4.5.3",
-                "rimraf": "^3.0.2"
-            }
-        },
-        "flatted": {
-            "version": "3.3.3",
-            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
-            "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
-            "dev": true
-        },
-        "follow-redirects": {
-            "version": "1.15.11",
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
-            "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
-            "dev": true
-        },
-        "forwarded": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
-            "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
-            "dev": true
-        },
-        "frac": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
-            "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
-        },
-        "fraction.js": {
-            "version": "5.3.4",
-            "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
-            "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
-            "dev": true
-        },
-        "fresh": {
-            "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-            "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
-            "dev": true
-        },
-        "fs-extra": {
-            "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
-            "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
-            "dev": true,
-            "requires": {
-                "graceful-fs": "^4.2.0",
-                "jsonfile": "^6.0.1",
-                "universalify": "^2.0.0"
-            }
-        },
-        "fs-monkey": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz",
-            "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==",
-            "dev": true
-        },
-        "fs.realpath": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-            "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-            "dev": true
-        },
-        "fsevents": {
-            "version": "2.3.3",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-            "dev": true,
-            "optional": true
-        },
-        "function-bind": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-            "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-            "dev": true
-        },
-        "get-caller-file": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-            "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-            "dev": true
-        },
-        "get-intrinsic": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
-            "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "get-proto": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
-            "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
-            "dev": true,
-            "requires": {
-                "dunder-proto": "^1.0.1",
-                "es-object-atoms": "^1.0.0"
-            }
-        },
-        "get-stream": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-            "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-            "dev": true,
-            "requires": {
-                "pump": "^3.0.0"
-            }
-        },
-        "glob": {
-            "version": "7.2.3",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-            "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "glob-escape": {
-            "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/glob-escape/-/glob-escape-0.0.2.tgz",
-            "integrity": "sha512-L/cXYz8x7qer1HAyUQ+mbjcUsJVdpRxpAf7CwqHoNBs9vTpABlGfNN4tzkDxt+u3Z7ZncVyKlCNPtzb0R/7WbA==",
-            "dev": true
-        },
-        "glob-parent": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-            "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-            "dev": true,
-            "requires": {
-                "is-glob": "^4.0.3"
-            }
-        },
-        "glob-to-regexp": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-            "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-            "dev": true
-        },
-        "globals": {
-            "version": "13.24.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-            "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
-            "dev": true,
-            "requires": {
-                "type-fest": "^0.20.2"
-            }
-        },
-        "globby": {
-            "version": "11.1.0",
-            "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-            "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "gopd": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
-            "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
-            "dev": true
-        },
-        "graceful-fs": {
-            "version": "4.2.11",
-            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-            "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-            "dev": true
-        },
-        "graphemer": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
-            "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
-            "dev": true
-        },
-        "gzip-size": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
-            "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
-            "dev": true,
-            "requires": {
-                "duplexer": "^0.1.2"
-            }
-        },
-        "handle-thing": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
-            "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
-            "dev": true
-        },
-        "has-flag": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-            "dev": true
-        },
-        "has-property-descriptors": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
-            "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
-            "dev": true,
-            "requires": {
-                "es-define-property": "^1.0.0"
-            }
-        },
-        "has-symbols": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
-            "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
-            "dev": true
-        },
-        "hash-sum": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
-            "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-            "dev": true
-        },
-        "hasown": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
-            "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-            "dev": true,
-            "requires": {
-                "function-bind": "^1.1.2"
-            }
-        },
-        "he": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
-            "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
-            "dev": true
-        },
-        "highlight.js": {
-            "version": "10.7.3",
-            "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
-            "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
-            "dev": true
-        },
-        "hosted-git-info": {
-            "version": "2.8.9",
-            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-            "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-            "dev": true
-        },
-        "hpack.js": {
-            "version": "2.1.6",
-            "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
-            "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "obuf": "^1.0.0",
-                "readable-stream": "^2.0.1",
-                "wbuf": "^1.1.0"
-            },
-            "dependencies": {
-                "isarray": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-                    "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-                    "dev": true
-                },
-                "readable-stream": {
-                    "version": "2.3.8",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
-                    "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
-                    "dev": true,
-                    "requires": {
-                        "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"
-                    }
-                },
-                "safe-buffer": {
-                    "version": "5.1.2",
-                    "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-                    "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-                    "dev": true
-                },
-                "string_decoder": {
-                    "version": "1.1.1",
-                    "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-                    "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-                    "dev": true,
-                    "requires": {
-                        "safe-buffer": "~5.1.0"
-                    }
-                }
-            }
-        },
-        "html-entities": {
-            "version": "2.6.0",
-            "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz",
-            "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==",
-            "dev": true
-        },
-        "html-escaper": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
-            "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
-            "dev": true
-        },
-        "html-minifier-terser": {
-            "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
-            "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "html-webpack-plugin": {
-            "version": "5.6.6",
-            "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.6.tgz",
-            "integrity": "sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "htmlparser2": {
-            "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
-            "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
-            "dev": true,
-            "requires": {
-                "domelementtype": "^2.0.1",
-                "domhandler": "^4.0.0",
-                "domutils": "^2.5.2",
-                "entities": "^2.0.0"
-            }
-        },
-        "http-deceiver": {
-            "version": "1.2.7",
-            "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
-            "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
-            "dev": true
-        },
-        "http-errors": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
-            "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
-            "dev": true,
-            "requires": {
-                "depd": "~2.0.0",
-                "inherits": "~2.0.4",
-                "setprototypeof": "~1.2.0",
-                "statuses": "~2.0.2",
-                "toidentifier": "~1.0.1"
-            }
-        },
-        "http-parser-js": {
-            "version": "0.5.10",
-            "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz",
-            "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==",
-            "dev": true
-        },
-        "http-proxy": {
-            "version": "1.18.1",
-            "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
-            "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
-            "dev": true,
-            "requires": {
-                "eventemitter3": "^4.0.0",
-                "follow-redirects": "^1.0.0",
-                "requires-port": "^1.0.0"
-            }
-        },
-        "http-proxy-middleware": {
-            "version": "2.0.9",
-            "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",
-            "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "human-signals": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-            "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-            "dev": true
-        },
-        "i18n": {
-            "version": "0.13.4",
-            "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.13.4.tgz",
-            "integrity": "sha512-GZnXWeA15jTi9gc1jfgrJcSrNYDg7qbJXSYMuibqPYb1ThORmGCeM+gL6LrDagYRHh87/q/D0jRSOhAfv6wAow==",
-            "dev": true,
-            "requires": {
-                "debug": "^4.3.3",
-                "make-plural": "^7.0.0",
-                "math-interval-parser": "^2.0.1",
-                "messageformat": "^2.3.0",
-                "mustache": "^4.2.0",
-                "sprintf-js": "^1.1.2"
-            }
-        },
-        "iconv-lite": {
-            "version": "0.4.24",
-            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-            "dev": true,
-            "requires": {
-                "safer-buffer": ">= 2.1.2 < 3"
-            }
-        },
-        "icss-utils": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
-            "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
-            "dev": true,
-            "requires": {}
-        },
-        "ieee754": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-            "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
-            "dev": true
-        },
-        "ignore": {
-            "version": "5.3.2",
-            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
-            "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
-            "dev": true
-        },
-        "image-tools": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/image-tools/-/image-tools-1.4.0.tgz",
-            "integrity": "sha512-TKtvJ6iUwM0mfaD4keMnk1ENHFC470QEjBfA3IlvKdEOufzvWbjbaoNcoyYq6HlViF8+d5tOS1ooE6j7CHf1lQ=="
-        },
-        "import-fresh": {
-            "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
-            "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
-            "dev": true,
-            "requires": {
-                "parent-module": "^1.0.0",
-                "resolve-from": "^4.0.0"
-            }
-        },
-        "imurmurhash": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-            "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-            "dev": true
-        },
-        "indexes-of": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
-            "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==",
-            "dev": true
-        },
-        "inflight": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-            "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-            "dev": true,
-            "requires": {
-                "once": "^1.3.0",
-                "wrappy": "1"
-            }
-        },
-        "inherits": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-            "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-            "dev": true
-        },
-        "ini": {
-            "version": "1.3.8",
-            "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
-            "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
-            "dev": true
-        },
-        "invert-kv": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz",
-            "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==",
-            "dev": true
-        },
-        "ipaddr.js": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz",
-            "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==",
-            "dev": true
-        },
-        "is-arrayish": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-            "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
-            "dev": true
-        },
-        "is-binary-path": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-            "dev": true,
-            "requires": {
-                "binary-extensions": "^2.0.0"
-            }
-        },
-        "is-buffer": {
-            "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-            "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
-        },
-        "is-core-module": {
-            "version": "2.16.1",
-            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
-            "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
-            "dev": true,
-            "requires": {
-                "hasown": "^2.0.2"
-            }
-        },
-        "is-docker": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
-            "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
-            "dev": true
-        },
-        "is-extglob": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-            "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-            "dev": true
-        },
-        "is-file-esm": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz",
-            "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==",
-            "dev": true,
-            "requires": {
-                "read-pkg-up": "^7.0.1"
-            }
-        },
-        "is-fullwidth-code-point": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-            "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-            "dev": true
-        },
-        "is-glob": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-            "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-            "dev": true,
-            "requires": {
-                "is-extglob": "^2.1.1"
-            }
-        },
-        "is-interactive": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
-            "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
-            "dev": true
-        },
-        "is-number": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-            "dev": true
-        },
-        "is-path-inside": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-            "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-            "dev": true
-        },
-        "is-plain-obj": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
-            "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
-            "dev": true
-        },
-        "is-plain-object": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-            "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-            "dev": true,
-            "requires": {
-                "isobject": "^3.0.1"
-            }
-        },
-        "is-stream": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-            "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
-            "dev": true
-        },
-        "is-unicode-supported": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-            "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
-            "dev": true
-        },
-        "is-wsl": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
-            "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
-            "dev": true,
-            "requires": {
-                "is-docker": "^2.0.0"
-            }
-        },
-        "isarray": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-            "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-            "dev": true
-        },
-        "isexe": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-            "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-            "dev": true
-        },
-        "isobject": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-            "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
-            "dev": true
-        },
-        "javascript-stringify": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
-            "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
-            "dev": true
-        },
-        "jest-worker": {
-            "version": "27.5.1",
-            "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
-            "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*",
-                "merge-stream": "^2.0.0",
-                "supports-color": "^8.0.0"
-            },
-            "dependencies": {
-                "supports-color": {
-                    "version": "8.1.1",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-                    "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^4.0.0"
-                    }
-                }
-            }
-        },
-        "joi": {
-            "version": "17.13.3",
-            "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
-            "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "js-message": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz",
-            "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==",
-            "dev": true
-        },
-        "js-tokens": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-            "dev": true
-        },
-        "js-yaml": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
-            "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
-            "dev": true,
-            "requires": {
-                "argparse": "^2.0.1"
-            }
-        },
-        "json-buffer": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
-            "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
-            "dev": true
-        },
-        "json-parse-better-errors": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-            "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-            "dev": true
-        },
-        "json-parse-even-better-errors": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-            "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-            "dev": true
-        },
-        "json-schema-traverse": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-            "dev": true
-        },
-        "json-stable-stringify": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz",
-            "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==",
-            "dev": true,
-            "requires": {
-                "call-bind": "^1.0.8",
-                "call-bound": "^1.0.4",
-                "isarray": "^2.0.5",
-                "jsonify": "^0.0.1",
-                "object-keys": "^1.1.1"
-            }
-        },
-        "json-stable-stringify-without-jsonify": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-            "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-            "dev": true
-        },
-        "json5": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-            "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-            "dev": true,
-            "requires": {
-                "minimist": "^1.2.0"
-            }
-        },
-        "jsonfile": {
-            "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
-            "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
-            "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.6",
-                "universalify": "^2.0.0"
-            }
-        },
-        "jsonify": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
-            "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
-            "dev": true
-        },
-        "jsqr": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz",
-            "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A=="
-        },
-        "jweixin-module": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz",
-            "integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
-        },
-        "keyv": {
-            "version": "4.5.4",
-            "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
-            "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
-            "dev": true,
-            "requires": {
-                "json-buffer": "3.0.1"
-            }
-        },
-        "kind-of": {
-            "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-            "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-            "dev": true
-        },
-        "klaw-sync": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
-            "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
-            "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.11"
-            }
-        },
-        "klona": {
-            "version": "2.0.6",
-            "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
-            "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
-            "dev": true
-        },
-        "launch-editor": {
-            "version": "2.13.1",
-            "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.1.tgz",
-            "integrity": "sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==",
-            "dev": true,
-            "requires": {
-                "picocolors": "^1.1.1",
-                "shell-quote": "^1.8.3"
-            }
-        },
-        "launch-editor-middleware": {
-            "version": "2.13.1",
-            "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.13.1.tgz",
-            "integrity": "sha512-ZuzP8PJT7eKS4zZ/UWk0ciEOXlpqsHyDGSwQ6mwvszvjwT8/VUft+ISeR/BMvd2VkuaBispslpF5jaAEsD2wlQ==",
-            "dev": true,
-            "requires": {
-                "launch-editor": "^2.13.1"
-            }
-        },
-        "lcid": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz",
-            "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==",
-            "dev": true,
-            "requires": {
-                "invert-kv": "^3.0.0"
-            }
-        },
-        "levn": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-            "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-            "dev": true,
-            "requires": {
-                "prelude-ls": "^1.2.1",
-                "type-check": "~0.4.0"
-            }
-        },
-        "lilconfig": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
-            "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
-            "dev": true
-        },
-        "lines-and-columns": {
-            "version": "1.2.4",
-            "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-            "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
-            "dev": true
-        },
-        "loader-runner": {
-            "version": "4.3.1",
-            "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
-            "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==",
-            "dev": true
-        },
-        "loader-utils": {
-            "version": "1.4.2",
-            "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
-            "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-            "dev": true,
-            "requires": {
-                "big.js": "^5.2.2",
-                "emojis-list": "^3.0.0",
-                "json5": "^1.0.1"
-            }
-        },
-        "locate-path": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-            "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-            "dev": true,
-            "requires": {
-                "p-locate": "^5.0.0"
-            }
-        },
-        "lodash": {
-            "version": "4.17.23",
-            "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
-            "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="
-        },
-        "lodash.defaultsdeep": {
-            "version": "4.6.1",
-            "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
-            "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
-            "dev": true
-        },
-        "lodash.mapvalues": {
-            "version": "4.6.0",
-            "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
-            "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==",
-            "dev": true
-        },
-        "lodash.memoize": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-            "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
-            "dev": true
-        },
-        "lodash.merge": {
-            "version": "4.6.2",
-            "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-            "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-            "dev": true
-        },
-        "lodash.uniq": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-            "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
-            "dev": true
-        },
-        "log-symbols": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
-            "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
-            "dev": true,
-            "requires": {
-                "chalk": "^4.1.0",
-                "is-unicode-supported": "^0.1.0"
-            },
-            "dependencies": {
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                }
-            }
-        },
-        "log-update": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
-            "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==",
-            "dev": true,
-            "requires": {
-                "ansi-escapes": "^3.0.0",
-                "cli-cursor": "^2.0.0",
-                "wrap-ansi": "^3.0.1"
-            },
-            "dependencies": {
-                "ansi-regex": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
-                    "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
-                    "dev": true
-                },
-                "cli-cursor": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
-                    "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
-                    "dev": true,
-                    "requires": {
-                        "restore-cursor": "^2.0.0"
-                    }
-                },
-                "is-fullwidth-code-point": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-                    "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
-                    "dev": true
-                },
-                "mimic-fn": {
-                    "version": "1.2.0",
-                    "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
-                    "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
-                    "dev": true
-                },
-                "onetime": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
-                    "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
-                    "dev": true,
-                    "requires": {
-                        "mimic-fn": "^1.0.0"
-                    }
-                },
-                "restore-cursor": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
-                    "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
-                    "dev": true,
-                    "requires": {
-                        "onetime": "^2.0.0",
-                        "signal-exit": "^3.0.2"
-                    }
-                },
-                "string-width": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-                    "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
-                    "dev": true,
-                    "requires": {
-                        "is-fullwidth-code-point": "^2.0.0",
-                        "strip-ansi": "^4.0.0"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-                    "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^3.0.0"
-                    }
-                },
-                "wrap-ansi": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
-                    "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==",
-                    "dev": true,
-                    "requires": {
-                        "string-width": "^2.1.1",
-                        "strip-ansi": "^4.0.0"
-                    }
-                }
-            }
-        },
-        "loglevel": {
-            "version": "1.9.2",
-            "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz",
-            "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg=="
-        },
-        "lower-case": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
-            "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
-            "dev": true,
-            "requires": {
-                "tslib": "^2.0.3"
-            }
-        },
-        "lru-cache": {
-            "version": "4.1.5",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-            "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-            "dev": true,
-            "requires": {
-                "pseudomap": "^1.0.2",
-                "yallist": "^2.1.2"
-            }
-        },
-        "magic-string": {
-            "version": "0.30.21",
-            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
-            "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
-            "peer": true,
-            "requires": {
-                "@jridgewell/sourcemap-codec": "^1.5.5"
-            }
-        },
-        "make-plural": {
-            "version": "7.5.0",
-            "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.5.0.tgz",
-            "integrity": "sha512-0booA+aVYyVFoR67JBHdfVk0U08HmrBH2FrtmBqBa+NldlqXv/G2Z9VQuQq6Wgp2jDWdybEWGfBkk1cq5264WA==",
-            "dev": true
-        },
-        "math-interval-parser": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz",
-            "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==",
-            "dev": true
-        },
-        "math-intrinsics": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
-            "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
-            "dev": true
-        },
-        "md5": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
-            "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
-            "requires": {
-                "charenc": "0.0.2",
-                "crypt": "0.0.2",
-                "is-buffer": "~1.1.6"
-            }
-        },
-        "mdn-data": {
-            "version": "2.0.14",
-            "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
-            "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
-            "dev": true
-        },
-        "media-typer": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-            "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
-            "dev": true
-        },
-        "memfs": {
-            "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
-            "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
-            "dev": true,
-            "requires": {
-                "fs-monkey": "^1.0.4"
-            }
-        },
-        "merge": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz",
-            "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==",
-            "dev": true
-        },
-        "merge-descriptors": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
-            "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
-            "dev": true
-        },
-        "merge-source-map": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
-            "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
-            "dev": true,
-            "requires": {
-                "source-map": "^0.6.1"
-            }
-        },
-        "merge-stream": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-            "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-            "dev": true
-        },
-        "merge2": {
-            "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-            "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-            "dev": true
-        },
-        "messageformat": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-2.3.0.tgz",
-            "integrity": "sha512-uTzvsv0lTeQxYI2y1NPa1lItL5VRI8Gb93Y2K2ue5gBPyrbJxfDi/EYWxh2PKv5yO42AJeeqblS9MJSh/IEk4w==",
-            "dev": true,
-            "requires": {
-                "make-plural": "^4.3.0",
-                "messageformat-formatters": "^2.0.1",
-                "messageformat-parser": "^4.1.2"
-            },
-            "dependencies": {
-                "make-plural": {
-                    "version": "4.3.0",
-                    "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.3.0.tgz",
-                    "integrity": "sha512-xTYd4JVHpSCW+aqDof6w/MebaMVNTVYBZhbB/vi513xXdiPT92JMVCo0Jq8W2UZnzYRFeVbQiQ+I25l13JuKvA==",
-                    "dev": true,
-                    "requires": {
-                        "minimist": "^1.2.0"
-                    }
-                }
-            }
-        },
-        "messageformat-formatters": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz",
-            "integrity": "sha512-E/lQRXhtHwGuiQjI7qxkLp8AHbMD5r2217XNe/SREbBlSawe0lOqsFb7rflZJmlQFSULNLIqlcjjsCPlB3m3Mg==",
-            "dev": true
-        },
-        "messageformat-parser": {
-            "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.3.tgz",
-            "integrity": "sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg==",
-            "dev": true
-        },
-        "methods": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-            "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
-            "dev": true
-        },
-        "micromatch": {
-            "version": "4.0.8",
-            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
-            "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
-            "dev": true,
-            "requires": {
-                "braces": "^3.0.3",
-                "picomatch": "^2.3.1"
-            }
-        },
-        "mime": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
-            "dev": true
-        },
-        "mime-db": {
-            "version": "1.52.0",
-            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-            "dev": true
-        },
-        "mime-types": {
-            "version": "2.1.35",
-            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-            "dev": true,
-            "requires": {
-                "mime-db": "1.52.0"
-            }
-        },
-        "mimic-fn": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-            "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-            "dev": true
-        },
-        "mini-css-extract-plugin": {
-            "version": "2.10.0",
-            "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.0.tgz",
-            "integrity": "sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g==",
-            "dev": true,
-            "requires": {
-                "schema-utils": "^4.0.0",
-                "tapable": "^2.2.1"
-            }
-        },
-        "minimalistic-assert": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-            "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
-            "dev": true
-        },
-        "minimatch": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz",
-            "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==",
-            "dev": true,
-            "requires": {
-                "brace-expansion": "^1.1.7"
-            }
-        },
-        "minimist": {
-            "version": "1.2.8",
-            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-            "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-            "dev": true
-        },
-        "minipass": {
-            "version": "3.3.6",
-            "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-            "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-            "dev": true,
-            "requires": {
-                "yallist": "^4.0.0"
-            },
-            "dependencies": {
-                "yallist": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-                    "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-                    "dev": true
-                }
-            }
-        },
-        "mkdirp": {
-            "version": "0.5.6",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-            "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
-            "dev": true,
-            "requires": {
-                "minimist": "^1.2.6"
-            }
-        },
-        "module-alias": {
-            "version": "2.3.4",
-            "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.3.4.tgz",
-            "integrity": "sha512-bOclZt8hkpuGgSSoG07PKmvzTizROilUTvLNyrMqvlC9snhs7y7GzjNWAVbISIOlhCP1T14rH1PDAV9iNyBq/w==",
-            "dev": true
-        },
-        "mrmime": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
-            "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
-            "dev": true
-        },
-        "ms": {
-            "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-            "dev": true
-        },
-        "multicast-dns": {
-            "version": "7.2.5",
-            "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
-            "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
-            "dev": true,
-            "requires": {
-                "dns-packet": "^5.2.2",
-                "thunky": "^1.0.2"
-            }
-        },
-        "mustache": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
-            "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
-            "dev": true
-        },
-        "mz": {
-            "version": "2.7.0",
-            "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
-            "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
-            "dev": true,
-            "requires": {
-                "any-promise": "^1.0.0",
-                "object-assign": "^4.0.1",
-                "thenify-all": "^1.0.0"
-            }
-        },
-        "nanoid": {
-            "version": "3.3.11",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
-            "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
-        },
-        "natural-compare": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-            "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
-            "dev": true
-        },
-        "negotiator": {
-            "version": "0.6.4",
-            "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
-            "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
-            "dev": true
-        },
-        "neo-async": {
-            "version": "2.6.2",
-            "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-            "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-            "dev": true
-        },
-        "next-tick": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
-            "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
-        },
-        "nice-try": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-            "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-            "dev": true
-        },
-        "no-case": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
-            "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
-            "dev": true,
-            "requires": {
-                "lower-case": "^2.0.2",
-                "tslib": "^2.0.3"
-            }
-        },
-        "node-fetch": {
-            "version": "2.7.0",
-            "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
-            "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
-            "dev": true,
-            "requires": {
-                "whatwg-url": "^5.0.0"
-            }
-        },
-        "node-forge": {
-            "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz",
-            "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==",
-            "dev": true
-        },
-        "node-releases": {
-            "version": "2.0.27",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
-            "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
-            "dev": true
-        },
-        "normalize-package-data": {
-            "version": "2.5.0",
-            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-            "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
-            "dev": true,
-            "requires": {
-                "hosted-git-info": "^2.1.4",
-                "resolve": "^1.10.0",
-                "semver": "2 || 3 || 4 || 5",
-                "validate-npm-package-license": "^3.0.1"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "5.7.2",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-                    "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-                    "dev": true
-                }
-            }
-        },
-        "normalize-path": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-            "dev": true
-        },
-        "normalize-url": {
-            "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
-            "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
-            "dev": true
-        },
-        "npm-run-path": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-            "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
-            "dev": true,
-            "requires": {
-                "path-key": "^2.0.0"
-            }
-        },
-        "nth-check": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
-            "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
-            "dev": true,
-            "requires": {
-                "boolbase": "^1.0.0"
-            }
-        },
-        "object-assign": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-            "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-            "dev": true
-        },
-        "object-inspect": {
-            "version": "1.13.4",
-            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
-            "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
-            "dev": true
-        },
-        "object-keys": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-            "dev": true
-        },
-        "obuf": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
-            "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
-            "dev": true
-        },
-        "on-finished": {
-            "version": "2.4.1",
-            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
-            "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
-            "dev": true,
-            "requires": {
-                "ee-first": "1.1.1"
-            }
-        },
-        "on-headers": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
-            "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
-            "dev": true
-        },
-        "once": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-            "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-            "dev": true,
-            "requires": {
-                "wrappy": "1"
-            }
-        },
-        "onetime": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
-            "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
-            "dev": true,
-            "requires": {
-                "mimic-fn": "^2.1.0"
-            }
-        },
-        "open": {
-            "version": "8.4.2",
-            "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
-            "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
-            "dev": true,
-            "requires": {
-                "define-lazy-prop": "^2.0.0",
-                "is-docker": "^2.1.1",
-                "is-wsl": "^2.2.0"
-            }
-        },
-        "open-im-sdk": {
-            "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/open-im-sdk/-/open-im-sdk-3.5.2.tgz",
-            "integrity": "sha512-gOpi1WrLBXKUu9IVb/VmWGUn3Iaa9qxCzP5w5GkofLFtwooLO7XoC/Rs3EN+m+Zemc7BPTRkvdHQr7khV1iDMQ=="
-        },
-        "opener": {
-            "version": "1.5.2",
-            "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
-            "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
-            "dev": true
-        },
-        "openim-uniapp-polyfill": {
-            "version": "1.4.4",
-            "resolved": "https://registry.npmjs.org/openim-uniapp-polyfill/-/openim-uniapp-polyfill-1.4.4.tgz",
-            "integrity": "sha512-8UMfIrDq2pA/91pn1TZjyVCIk9kKeZdx9ljaIwgauiRNwzCTHoGUMSrdW54thXdS/Ings61miLvRDDazVGHsgw==",
-            "requires": {}
-        },
-        "optionator": {
-            "version": "0.9.4",
-            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
-            "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
-            "dev": true,
-            "requires": {
-                "deep-is": "^0.1.3",
-                "fast-levenshtein": "^2.0.6",
-                "levn": "^0.4.1",
-                "prelude-ls": "^1.2.1",
-                "type-check": "^0.4.0",
-                "word-wrap": "^1.2.5"
-            }
-        },
-        "ora": {
-            "version": "5.4.1",
-            "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
-            "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
-            "dev": true,
-            "requires": {
-                "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"
-            },
-            "dependencies": {
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                }
-            }
-        },
-        "os-locale-s-fix": {
-            "version": "1.0.8-fix-1",
-            "resolved": "https://registry.npmjs.org/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz",
-            "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==",
-            "dev": true,
-            "requires": {
-                "lcid": "^3.0.0"
-            }
-        },
-        "p-finally": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-            "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
-            "dev": true
-        },
-        "p-limit": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-            "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-            "dev": true,
-            "requires": {
-                "yocto-queue": "^0.1.0"
-            }
-        },
-        "p-locate": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-            "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
-            "dev": true,
-            "requires": {
-                "p-limit": "^3.0.2"
-            }
-        },
-        "p-retry": {
-            "version": "4.6.2",
-            "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz",
-            "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",
-            "dev": true,
-            "requires": {
-                "@types/retry": "0.12.0",
-                "retry": "^0.13.1"
-            }
-        },
-        "p-try": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-            "dev": true
-        },
-        "param-case": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
-            "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
-            "dev": true,
-            "requires": {
-                "dot-case": "^3.0.4",
-                "tslib": "^2.0.3"
-            }
-        },
-        "parent-module": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-            "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-            "dev": true,
-            "requires": {
-                "callsites": "^3.0.0"
-            }
-        },
-        "parse-json": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-            "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "parse5": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
-            "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
-            "dev": true
-        },
-        "parse5-htmlparser2-tree-adapter": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
-            "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
-            "dev": true,
-            "requires": {
-                "parse5": "^6.0.1"
-            },
-            "dependencies": {
-                "parse5": {
-                    "version": "6.0.1",
-                    "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
-                    "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
-                    "dev": true
-                }
-            }
-        },
-        "parseurl": {
-            "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-            "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-            "dev": true
-        },
-        "pascal-case": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
-            "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
-            "dev": true,
-            "requires": {
-                "no-case": "^3.0.4",
-                "tslib": "^2.0.3"
-            }
-        },
-        "patch-package": {
-            "version": "8.0.1",
-            "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz",
-            "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==",
-            "dev": true,
-            "requires": {
-                "@yarnpkg/lockfile": "^1.1.0",
-                "chalk": "^4.1.2",
-                "ci-info": "^3.7.0",
-                "cross-spawn": "^7.0.3",
-                "find-yarn-workspace-root": "^2.0.0",
-                "fs-extra": "^10.0.0",
-                "json-stable-stringify": "^1.0.2",
-                "klaw-sync": "^6.0.0",
-                "minimist": "^1.2.6",
-                "open": "^7.4.2",
-                "semver": "^7.5.3",
-                "slash": "^2.0.0",
-                "tmp": "^0.2.4",
-                "yaml": "^2.2.2"
-            },
-            "dependencies": {
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                },
-                "cross-spawn": {
-                    "version": "7.0.6",
-                    "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-                    "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
-                    "dev": true,
-                    "requires": {
-                        "path-key": "^3.1.0",
-                        "shebang-command": "^2.0.0",
-                        "which": "^2.0.1"
-                    }
-                },
-                "open": {
-                    "version": "7.4.2",
-                    "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
-                    "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
-                    "dev": true,
-                    "requires": {
-                        "is-docker": "^2.0.0",
-                        "is-wsl": "^2.1.1"
-                    }
-                },
-                "path-key": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-                    "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-                    "dev": true
-                },
-                "semver": {
-                    "version": "7.7.4",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
-                    "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
-                    "dev": true
-                },
-                "shebang-command": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-                    "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-                    "dev": true,
-                    "requires": {
-                        "shebang-regex": "^3.0.0"
-                    }
-                },
-                "shebang-regex": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-                    "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-                    "dev": true
-                },
-                "slash": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
-                    "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
-                    "dev": true
-                },
-                "which": {
-                    "version": "2.0.2",
-                    "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-                    "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-                    "dev": true,
-                    "requires": {
-                        "isexe": "^2.0.0"
-                    }
-                },
-                "yaml": {
-                    "version": "2.8.2",
-                    "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
-                    "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
-                    "dev": true
-                }
-            }
-        },
-        "path-exists": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-            "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-            "dev": true
-        },
-        "path-is-absolute": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-            "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-            "dev": true
-        },
-        "path-key": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-            "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
-            "dev": true
-        },
-        "path-parse": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-            "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-            "dev": true
-        },
-        "path-to-regexp": {
-            "version": "0.1.12",
-            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
-            "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
-            "dev": true
-        },
-        "path-type": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-            "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-            "dev": true
-        },
-        "picocolors": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
-        },
-        "picomatch": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-            "dev": true
-        },
-        "pify": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-            "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-            "dev": true
-        },
-        "portfinder": {
-            "version": "1.0.38",
-            "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz",
-            "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==",
-            "dev": true,
-            "requires": {
-                "async": "^3.2.6",
-                "debug": "^4.3.6"
-            }
-        },
-        "postcss": {
-            "version": "8.5.6",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
-            "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
-            "requires": {
-                "nanoid": "^3.3.11",
-                "picocolors": "^1.1.1",
-                "source-map-js": "^1.2.1"
-            }
-        },
-        "postcss-calc": {
-            "version": "8.2.4",
-            "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
-            "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
-            "dev": true,
-            "requires": {
-                "postcss-selector-parser": "^6.0.9",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "6.1.2",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-                    "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                },
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-colormin": {
-            "version": "5.3.1",
-            "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz",
-            "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.21.4",
-                "caniuse-api": "^3.0.0",
-                "colord": "^2.9.1",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-convert-values": {
-            "version": "5.1.3",
-            "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz",
-            "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.21.4",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-discard-comments": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
-            "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
-            "dev": true,
-            "requires": {}
-        },
-        "postcss-discard-duplicates": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
-            "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
-            "dev": true,
-            "requires": {}
-        },
-        "postcss-discard-empty": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
-            "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
-            "dev": true,
-            "requires": {}
-        },
-        "postcss-discard-overridden": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
-            "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
-            "dev": true,
-            "requires": {}
-        },
-        "postcss-helpers": {
-            "version": "0.3.3",
-            "resolved": "https://registry.npmjs.org/postcss-helpers/-/postcss-helpers-0.3.3.tgz",
-            "integrity": "sha512-VumiUcrpbxGlTBNQj6fUOkb/HNRUk/xYz8bNlhgVOdvk3yWEy4B+0nlDUZZM9mTVZ5bJoxUy7WT6z/4E7oMTgw==",
-            "dev": true,
-            "requires": {
-                "urijs": "^1.18.12"
-            }
-        },
-        "postcss-import": {
-            "version": "12.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
-            "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.1",
-                "postcss-value-parser": "^3.2.3",
-                "read-cache": "^1.0.0",
-                "resolve": "^1.1.7"
-            },
-            "dependencies": {
-                "picocolors": {
-                    "version": "0.2.1",
-                    "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-                    "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-                    "dev": true
-                },
-                "postcss": {
-                    "version": "7.0.39",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-                    "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-                    "dev": true,
-                    "requires": {
-                        "picocolors": "^0.2.1",
-                        "source-map": "^0.6.1"
-                    }
-                }
-            }
-        },
-        "postcss-loader": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
-            "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==",
-            "dev": true,
-            "requires": {
-                "cosmiconfig": "^7.0.0",
-                "klona": "^2.0.5",
-                "semver": "^7.3.5"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "7.7.4",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
-                    "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-merge-longhand": {
-            "version": "5.1.7",
-            "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz",
-            "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0",
-                "stylehacks": "^5.1.1"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-merge-rules": {
-            "version": "5.1.4",
-            "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz",
-            "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.21.4",
-                "caniuse-api": "^3.0.0",
-                "cssnano-utils": "^3.1.0",
-                "postcss-selector-parser": "^6.0.5"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "6.1.2",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-                    "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "postcss-minify-font-values": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz",
-            "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-minify-gradients": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz",
-            "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==",
-            "dev": true,
-            "requires": {
-                "colord": "^2.9.1",
-                "cssnano-utils": "^3.1.0",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-minify-params": {
-            "version": "5.1.4",
-            "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz",
-            "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.21.4",
-                "cssnano-utils": "^3.1.0",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-minify-selectors": {
-            "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz",
-            "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==",
-            "dev": true,
-            "requires": {
-                "postcss-selector-parser": "^6.0.5"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "6.1.2",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-                    "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "postcss-modules-extract-imports": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
-            "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
-            "dev": true,
-            "requires": {}
-        },
-        "postcss-modules-local-by-default": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/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,
-            "requires": {
-                "icss-utils": "^5.0.0",
-                "postcss-selector-parser": "^7.0.0",
-                "postcss-value-parser": "^4.1.0"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "7.1.1",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz",
-                    "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                },
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-modules-scope": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
-            "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",
-            "dev": true,
-            "requires": {
-                "postcss-selector-parser": "^7.0.0"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "7.1.1",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz",
-                    "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "postcss-modules-values": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
-            "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
-            "dev": true,
-            "requires": {
-                "icss-utils": "^5.0.0"
-            }
-        },
-        "postcss-normalize-charset": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
-            "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
-            "dev": true,
-            "requires": {}
-        },
-        "postcss-normalize-display-values": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz",
-            "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-normalize-positions": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz",
-            "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-normalize-repeat-style": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz",
-            "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-normalize-string": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz",
-            "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-normalize-timing-functions": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz",
-            "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-normalize-unicode": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz",
-            "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.21.4",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-normalize-url": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz",
-            "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==",
-            "dev": true,
-            "requires": {
-                "normalize-url": "^6.0.1",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-normalize-whitespace": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz",
-            "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-ordered-values": {
-            "version": "5.1.3",
-            "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz",
-            "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==",
-            "dev": true,
-            "requires": {
-                "cssnano-utils": "^3.1.0",
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-reduce-initial": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz",
-            "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.21.4",
-                "caniuse-api": "^3.0.0"
-            }
-        },
-        "postcss-reduce-transforms": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz",
-            "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-selector-parser": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-            "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
-            "dev": true,
-            "requires": {
-                "cssesc": "^2.0.0",
-                "indexes-of": "^1.0.1",
-                "uniq": "^1.0.1"
-            }
-        },
-        "postcss-svgo": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz",
-            "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.2.0",
-                "svgo": "^2.7.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-                    "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-unique-selectors": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz",
-            "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==",
-            "dev": true,
-            "requires": {
-                "postcss-selector-parser": "^6.0.5"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "6.1.2",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-                    "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "postcss-urlrewrite": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/postcss-urlrewrite/-/postcss-urlrewrite-0.2.2.tgz",
-            "integrity": "sha512-DxPSgykgHjoV4Z+ygvq2C5HkiuiKQQD74xpoNQSQuyi8zab9nODVtNKfnCN6BEv9VZrjpOGLGAf8BDvgG6EtHg==",
-            "dev": true,
-            "requires": {
-                "postcss-helpers": "^0.3.2"
-            }
-        },
-        "postcss-value-parser": {
-            "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-            "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-            "dev": true
-        },
-        "prelude-ls": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-            "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-            "dev": true
-        },
-        "prettier": {
-            "version": "2.8.8",
-            "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
-            "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
-            "dev": true,
-            "optional": true
-        },
-        "pretty-error": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz",
-            "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==",
-            "dev": true,
-            "requires": {
-                "lodash": "^4.17.20",
-                "renderkid": "^3.0.0"
-            }
-        },
-        "process-nextick-args": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-            "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-            "dev": true
-        },
-        "progress-webpack-plugin": {
-            "version": "1.0.16",
-            "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz",
-            "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==",
-            "dev": true,
-            "requires": {
-                "chalk": "^2.1.0",
-                "figures": "^2.0.0",
-                "log-update": "^2.3.0"
-            },
-            "dependencies": {
-                "ansi-styles": {
-                    "version": "3.2.1",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-                    "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-                    "dev": true,
-                    "requires": {
-                        "color-convert": "^1.9.0"
-                    }
-                },
-                "chalk": {
-                    "version": "2.4.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-                    "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^3.2.1",
-                        "escape-string-regexp": "^1.0.5",
-                        "supports-color": "^5.3.0"
-                    }
-                },
-                "color-convert": {
-                    "version": "1.9.3",
-                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-                    "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-                    "dev": true,
-                    "requires": {
-                        "color-name": "1.1.3"
-                    }
-                },
-                "color-name": {
-                    "version": "1.1.3",
-                    "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-                    "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-                    "dev": true
-                },
-                "escape-string-regexp": {
-                    "version": "1.0.5",
-                    "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-                    "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-                    "dev": true
-                },
-                "has-flag": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-                    "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-                    "dev": true
-                },
-                "supports-color": {
-                    "version": "5.5.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-                    "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "proxy-addr": {
-            "version": "2.0.7",
-            "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
-            "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
-            "dev": true,
-            "requires": {
-                "forwarded": "0.2.0",
-                "ipaddr.js": "1.9.1"
-            },
-            "dependencies": {
-                "ipaddr.js": {
-                    "version": "1.9.1",
-                    "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-                    "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
-                    "dev": true
-                }
-            }
-        },
-        "pseudomap": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-            "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
-            "dev": true
-        },
-        "pump": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
-            "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
-            "dev": true,
-            "requires": {
-                "end-of-stream": "^1.1.0",
-                "once": "^1.3.1"
-            }
-        },
-        "punycode": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-            "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
-            "dev": true
-        },
-        "qs": {
-            "version": "6.14.2",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
-            "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
-            "dev": true,
-            "requires": {
-                "side-channel": "^1.1.0"
-            }
-        },
-        "queue-microtask": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-            "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-            "dev": true
-        },
-        "randombytes": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-            "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-            "dev": true,
-            "requires": {
-                "safe-buffer": "^5.1.0"
-            }
-        },
-        "range-parser": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-            "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-            "dev": true
-        },
-        "raw-body": {
-            "version": "2.5.3",
-            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
-            "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
-            "dev": true,
-            "requires": {
-                "bytes": "~3.1.2",
-                "http-errors": "~2.0.1",
-                "iconv-lite": "~0.4.24",
-                "unpipe": "~1.0.0"
-            }
-        },
-        "rc": {
-            "version": "1.2.8",
-            "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
-            "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
-            "dev": true,
-            "requires": {
-                "deep-extend": "^0.6.0",
-                "ini": "~1.3.0",
-                "minimist": "^1.2.0",
-                "strip-json-comments": "~2.0.1"
-            }
-        },
-        "read-cache": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
-            "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
-            "dev": true,
-            "requires": {
-                "pify": "^2.3.0"
-            }
-        },
-        "read-pkg": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
-            "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
-            "dev": true,
-            "requires": {
-                "@types/normalize-package-data": "^2.4.0",
-                "normalize-package-data": "^2.5.0",
-                "parse-json": "^5.0.0",
-                "type-fest": "^0.6.0"
-            },
-            "dependencies": {
-                "type-fest": {
-                    "version": "0.6.0",
-                    "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
-                    "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
-                    "dev": true
-                }
-            }
-        },
-        "read-pkg-up": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
-            "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
-            "dev": true,
-            "requires": {
-                "find-up": "^4.1.0",
-                "read-pkg": "^5.2.0",
-                "type-fest": "^0.8.1"
-            },
-            "dependencies": {
-                "find-up": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-                    "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-                    "dev": true,
-                    "requires": {
-                        "locate-path": "^5.0.0",
-                        "path-exists": "^4.0.0"
-                    }
-                },
-                "locate-path": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-                    "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-                    "dev": true,
-                    "requires": {
-                        "p-locate": "^4.1.0"
-                    }
-                },
-                "p-limit": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-                    "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-                    "dev": true,
-                    "requires": {
-                        "p-try": "^2.0.0"
-                    }
-                },
-                "p-locate": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-                    "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-                    "dev": true,
-                    "requires": {
-                        "p-limit": "^2.2.0"
-                    }
-                },
-                "type-fest": {
-                    "version": "0.8.1",
-                    "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-                    "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
-                    "dev": true
-                }
-            }
-        },
-        "readable-stream": {
-            "version": "3.6.2",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-            "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.3",
-                "string_decoder": "^1.1.1",
-                "util-deprecate": "^1.0.1"
-            }
-        },
-        "readdirp": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-            "dev": true,
-            "requires": {
-                "picomatch": "^2.2.1"
-            }
-        },
-        "registry-auth-token": {
-            "version": "3.3.2",
-            "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
-            "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
-            "dev": true,
-            "requires": {
-                "rc": "^1.1.6",
-                "safe-buffer": "^5.0.1"
-            }
-        },
-        "registry-url": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
-            "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==",
-            "dev": true,
-            "requires": {
-                "rc": "^1.0.1"
-            }
-        },
-        "relateurl": {
-            "version": "0.2.7",
-            "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
-            "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",
-            "dev": true
-        },
-        "renderkid": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
-            "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==",
-            "dev": true,
-            "requires": {
-                "css-select": "^4.1.3",
-                "dom-converter": "^0.2.0",
-                "htmlparser2": "^6.1.0",
-                "lodash": "^4.17.21",
-                "strip-ansi": "^6.0.1"
-            }
-        },
-        "require-directory": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-            "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
-            "dev": true
-        },
-        "require-from-string": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-            "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-            "dev": true
-        },
-        "requires-port": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-            "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
-            "dev": true
-        },
-        "resolve": {
-            "version": "1.22.11",
-            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
-            "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
-            "dev": true,
-            "requires": {
-                "is-core-module": "^2.16.1",
-                "path-parse": "^1.0.7",
-                "supports-preserve-symlinks-flag": "^1.0.0"
-            }
-        },
-        "resolve-from": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-            "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-            "dev": true
-        },
-        "restore-cursor": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-            "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-            "dev": true,
-            "requires": {
-                "onetime": "^5.1.0",
-                "signal-exit": "^3.0.2"
-            }
-        },
-        "retry": {
-            "version": "0.13.1",
-            "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
-            "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
-            "dev": true
-        },
-        "reusify": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
-            "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
-            "dev": true
-        },
-        "rimraf": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-            "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-            "dev": true,
-            "requires": {
-                "glob": "^7.1.3"
-            }
-        },
-        "run-parallel": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-            "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-            "dev": true,
-            "requires": {
-                "queue-microtask": "^1.2.2"
-            }
-        },
-        "safe-buffer": {
-            "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-            "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-            "dev": true
-        },
-        "safer-buffer": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-            "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-            "dev": true
-        },
-        "schema-utils": {
-            "version": "4.3.3",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
-            "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
-            "dev": true,
-            "requires": {
-                "@types/json-schema": "^7.0.9",
-                "ajv": "^8.9.0",
-                "ajv-formats": "^2.1.1",
-                "ajv-keywords": "^5.1.0"
-            },
-            "dependencies": {
-                "ajv": {
-                    "version": "8.18.0",
-                    "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
-                    "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
-                    "dev": true,
-                    "requires": {
-                        "fast-deep-equal": "^3.1.3",
-                        "fast-uri": "^3.0.1",
-                        "json-schema-traverse": "^1.0.0",
-                        "require-from-string": "^2.0.2"
-                    }
-                },
-                "ajv-keywords": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-                    "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-                    "dev": true,
-                    "requires": {
-                        "fast-deep-equal": "^3.1.3"
-                    }
-                },
-                "json-schema-traverse": {
-                    "version": "1.0.0",
-                    "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-                    "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-                    "dev": true
-                }
-            }
-        },
-        "select-hose": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
-            "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
-            "dev": true
-        },
-        "selfsigned": {
-            "version": "2.4.1",
-            "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
-            "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
-            "dev": true,
-            "requires": {
-                "@types/node-forge": "^1.3.0",
-                "node-forge": "^1"
-            }
-        },
-        "semver": {
-            "version": "6.3.1",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-            "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-            "dev": true
-        },
-        "send": {
-            "version": "0.19.2",
-            "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
-            "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
-            "dev": true,
-            "requires": {
-                "debug": "2.6.9",
-                "depd": "2.0.0",
-                "destroy": "1.2.0",
-                "encodeurl": "~2.0.0",
-                "escape-html": "~1.0.3",
-                "etag": "~1.8.1",
-                "fresh": "~0.5.2",
-                "http-errors": "~2.0.1",
-                "mime": "1.6.0",
-                "ms": "2.1.3",
-                "on-finished": "~2.4.1",
-                "range-parser": "~1.2.1",
-                "statuses": "~2.0.2"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    },
-                    "dependencies": {
-                        "ms": {
-                            "version": "2.0.0",
-                            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                            "dev": true
-                        }
-                    }
-                }
-            }
-        },
-        "serialize-javascript": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
-            "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
-            "dev": true,
-            "requires": {
-                "randombytes": "^2.1.0"
-            }
-        },
-        "serve-index": {
-            "version": "1.9.2",
-            "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz",
-            "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==",
-            "dev": true,
-            "requires": {
-                "accepts": "~1.3.8",
-                "batch": "0.6.1",
-                "debug": "2.6.9",
-                "escape-html": "~1.0.3",
-                "http-errors": "~1.8.0",
-                "mime-types": "~2.1.35",
-                "parseurl": "~1.3.3"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "depd": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-                    "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-                    "dev": true
-                },
-                "http-errors": {
-                    "version": "1.8.1",
-                    "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
-                    "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
-                    "dev": true,
-                    "requires": {
-                        "depd": "~1.1.2",
-                        "inherits": "2.0.4",
-                        "setprototypeof": "1.2.0",
-                        "statuses": ">= 1.5.0 < 2",
-                        "toidentifier": "1.0.1"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                    "dev": true
-                },
-                "statuses": {
-                    "version": "1.5.0",
-                    "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-                    "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-                    "dev": true
-                }
-            }
-        },
-        "serve-static": {
-            "version": "1.16.3",
-            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
-            "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
-            "dev": true,
-            "requires": {
-                "encodeurl": "~2.0.0",
-                "escape-html": "~1.0.3",
-                "parseurl": "~1.3.3",
-                "send": "~0.19.1"
-            }
-        },
-        "set-function-length": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
-            "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "setprototypeof": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
-            "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
-            "dev": true
-        },
-        "shallow-clone": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
-            "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
-            "dev": true,
-            "requires": {
-                "kind-of": "^6.0.2"
-            }
-        },
-        "shebang-command": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-            "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
-            "dev": true,
-            "requires": {
-                "shebang-regex": "^1.0.0"
-            }
-        },
-        "shebang-regex": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-            "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
-            "dev": true
-        },
-        "shell-quote": {
-            "version": "1.8.3",
-            "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
-            "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
-            "dev": true
-        },
-        "side-channel": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
-            "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "side-channel-list": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
-            "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
-            "dev": true,
-            "requires": {
-                "es-errors": "^1.3.0",
-                "object-inspect": "^1.13.3"
-            }
-        },
-        "side-channel-map": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
-            "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
-            "dev": true,
-            "requires": {
-                "call-bound": "^1.0.2",
-                "es-errors": "^1.3.0",
-                "get-intrinsic": "^1.2.5",
-                "object-inspect": "^1.13.3"
-            }
-        },
-        "side-channel-weakmap": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
-            "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "signal-exit": {
-            "version": "3.0.7",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-            "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-            "dev": true
-        },
-        "sirv": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
-            "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
-            "dev": true,
-            "requires": {
-                "@polka/url": "^1.0.0-next.24",
-                "mrmime": "^2.0.0",
-                "totalist": "^3.0.0"
-            }
-        },
-        "slash": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-            "dev": true
-        },
-        "sockjs": {
-            "version": "0.3.24",
-            "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
-            "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
-            "dev": true,
-            "requires": {
-                "faye-websocket": "^0.11.3",
-                "uuid": "^8.3.2",
-                "websocket-driver": "^0.7.4"
-            },
-            "dependencies": {
-                "uuid": {
-                    "version": "8.3.2",
-                    "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-                    "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-                    "dev": true
-                }
-            }
-        },
-        "source-map": {
-            "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-            "dev": true
-        },
-        "source-map-js": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
-            "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
-        },
-        "source-map-support": {
-            "version": "0.5.21",
-            "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
-            "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
-            "dev": true,
-            "requires": {
-                "buffer-from": "^1.0.0",
-                "source-map": "^0.6.0"
-            }
-        },
-        "spark-md5": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz",
-            "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
-        },
-        "spdx-correct": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-            "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-            "dev": true,
-            "requires": {
-                "spdx-expression-parse": "^3.0.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "spdx-exceptions": {
-            "version": "2.5.0",
-            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
-            "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
-            "dev": true
-        },
-        "spdx-expression-parse": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-            "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-            "dev": true,
-            "requires": {
-                "spdx-exceptions": "^2.1.0",
-                "spdx-license-ids": "^3.0.0"
-            }
-        },
-        "spdx-license-ids": {
-            "version": "3.0.23",
-            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz",
-            "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==",
-            "dev": true
-        },
-        "spdy": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
-            "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
-            "dev": true,
-            "requires": {
-                "debug": "^4.1.0",
-                "handle-thing": "^2.0.0",
-                "http-deceiver": "^1.2.7",
-                "select-hose": "^2.0.0",
-                "spdy-transport": "^3.0.0"
-            }
-        },
-        "spdy-transport": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
-            "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "sprintf-js": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
-            "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
-            "dev": true
-        },
-        "ssf": {
-            "version": "0.11.2",
-            "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
-            "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
-            "requires": {
-                "frac": "~1.1.2"
-            }
-        },
-        "ssri": {
-            "version": "8.0.1",
-            "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
-            "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
-            "dev": true,
-            "requires": {
-                "minipass": "^3.1.1"
-            }
-        },
-        "stable": {
-            "version": "0.1.8",
-            "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
-            "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
-            "dev": true
-        },
-        "stackframe": {
-            "version": "1.3.4",
-            "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
-            "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
-            "dev": true
-        },
-        "statuses": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
-            "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
-            "dev": true
-        },
-        "string_decoder": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-            "dev": true,
-            "requires": {
-                "safe-buffer": "~5.2.0"
-            }
-        },
-        "string-width": {
-            "version": "4.2.3",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-            "dev": true,
-            "requires": {
-                "emoji-regex": "^8.0.0",
-                "is-fullwidth-code-point": "^3.0.0",
-                "strip-ansi": "^6.0.1"
-            }
-        },
-        "strip-ansi": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-            "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-            "dev": true,
-            "requires": {
-                "ansi-regex": "^5.0.1"
-            }
-        },
-        "strip-eof": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-            "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
-            "dev": true
-        },
-        "strip-final-newline": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-            "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-            "dev": true
-        },
-        "strip-json-comments": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-            "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
-            "dev": true
-        },
-        "stylehacks": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz",
-            "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.21.4",
-                "postcss-selector-parser": "^6.0.4"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "6.1.2",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-                    "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "supports-color": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-            "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-            "dev": true,
-            "requires": {
-                "has-flag": "^4.0.0"
-            }
-        },
-        "supports-preserve-symlinks-flag": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-            "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-            "dev": true
-        },
-        "svgo": {
-            "version": "2.8.0",
-            "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
-            "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
-            "dev": true,
-            "requires": {
-                "@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"
-            },
-            "dependencies": {
-                "commander": {
-                    "version": "7.2.0",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-                    "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-                    "dev": true
-                }
-            }
-        },
-        "tapable": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
-            "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
-            "dev": true
-        },
-        "terser": {
-            "version": "5.46.0",
-            "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz",
-            "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==",
-            "dev": true,
-            "requires": {
-                "@jridgewell/source-map": "^0.3.3",
-                "acorn": "^8.15.0",
-                "commander": "^2.20.0",
-                "source-map-support": "~0.5.20"
-            },
-            "dependencies": {
-                "commander": {
-                    "version": "2.20.3",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-                    "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-                    "dev": true
-                }
-            }
-        },
-        "terser-webpack-plugin": {
-            "version": "5.3.16",
-            "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
-            "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
-            "dev": true,
-            "requires": {
-                "@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"
-            }
-        },
-        "text-table": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-            "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
-            "dev": true
-        },
-        "thenify": {
-            "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
-            "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
-            "dev": true,
-            "requires": {
-                "any-promise": "^1.0.0"
-            }
-        },
-        "thenify-all": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
-            "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
-            "dev": true,
-            "requires": {
-                "thenify": ">= 3.1.0 < 4"
-            }
-        },
-        "thread-loader": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz",
-            "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==",
-            "dev": true,
-            "requires": {
-                "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"
-            },
-            "dependencies": {
-                "json5": {
-                    "version": "2.2.3",
-                    "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-                    "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-                    "dev": true
-                },
-                "loader-utils": {
-                    "version": "2.0.4",
-                    "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
-                    "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-                    "dev": true,
-                    "requires": {
-                        "big.js": "^5.2.2",
-                        "emojis-list": "^3.0.0",
-                        "json5": "^2.1.2"
-                    }
-                },
-                "schema-utils": {
-                    "version": "3.3.0",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-                    "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                }
-            }
-        },
-        "thunky": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
-            "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
-            "dev": true
-        },
-        "tinyglobby": {
-            "version": "0.2.15",
-            "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
-            "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
-            "dev": true,
-            "peer": true,
-            "requires": {
-                "fdir": "^6.5.0",
-                "picomatch": "^4.0.3"
-            },
-            "dependencies": {
-                "fdir": {
-                    "version": "6.5.0",
-                    "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
-                    "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
-                    "dev": true,
-                    "peer": true,
-                    "requires": {}
-                },
-                "picomatch": {
-                    "version": "4.0.3",
-                    "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
-                    "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
-                    "dev": true,
-                    "peer": true
-                }
-            }
-        },
-        "tmp": {
-            "version": "0.2.5",
-            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
-            "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
-            "dev": true
-        },
-        "to-regex-range": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-            "dev": true,
-            "requires": {
-                "is-number": "^7.0.0"
-            }
-        },
-        "toidentifier": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
-            "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
-            "dev": true
-        },
-        "totalist": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
-            "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
-            "dev": true
-        },
-        "tr46": {
-            "version": "0.0.3",
-            "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-            "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-            "dev": true
-        },
-        "tslib": {
-            "version": "2.8.1",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
-            "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-            "dev": true
-        },
-        "type": {
-            "version": "2.7.3",
-            "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
-            "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="
-        },
-        "type-check": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-            "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-            "dev": true,
-            "requires": {
-                "prelude-ls": "^1.2.1"
-            }
-        },
-        "type-fest": {
-            "version": "0.20.2",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-            "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-            "dev": true
-        },
-        "type-is": {
-            "version": "1.6.18",
-            "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-            "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
-            "dev": true,
-            "requires": {
-                "media-typer": "0.3.0",
-                "mime-types": "~2.1.24"
-            }
-        },
-        "undici-types": {
-            "version": "7.18.2",
-            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
-            "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
-            "dev": true
-        },
-        "uniq": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
-            "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==",
-            "dev": true
-        },
-        "universalify": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
-            "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
-            "dev": true
-        },
-        "unpipe": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-            "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
-            "dev": true
-        },
-        "update-browserslist-db": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
-            "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
-            "dev": true,
-            "requires": {
-                "escalade": "^3.2.0",
-                "picocolors": "^1.1.1"
-            }
-        },
-        "update-check": {
-            "version": "1.5.4",
-            "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz",
-            "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==",
-            "dev": true,
-            "requires": {
-                "registry-auth-token": "3.3.2",
-                "registry-url": "3.1.0"
-            }
-        },
-        "uri-js": {
-            "version": "4.4.1",
-            "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-            "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-            "dev": true,
-            "requires": {
-                "punycode": "^2.1.0"
-            }
-        },
-        "urijs": {
-            "version": "1.19.11",
-            "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz",
-            "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
-            "dev": true
-        },
-        "util-deprecate": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-            "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-            "dev": true
-        },
-        "utila": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
-            "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==",
-            "dev": true
-        },
-        "utils-merge": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-            "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
-            "dev": true
-        },
-        "uuid": {
-            "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
-            "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
-        },
-        "uview-ui": {
-            "version": "2.0.38",
-            "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.38.tgz",
-            "integrity": "sha512-6egHDf9lXHKpG3hEjRE0vMx4+VWwKk/ReTf5x18KrIKqdvdPRqO3+B8Unh7vYYwrIxzAWIlmhZ9RJpKI/4UqPQ=="
-        },
-        "validate-npm-package-license": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-            "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-            "dev": true,
-            "requires": {
-                "spdx-correct": "^3.0.0",
-                "spdx-expression-parse": "^3.0.0"
-            }
-        },
-        "vary": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-            "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
-            "dev": true
-        },
-        "vue": {
-            "version": "3.5.29",
-            "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.29.tgz",
-            "integrity": "sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==",
-            "peer": true,
-            "requires": {
-                "@vue/compiler-dom": "3.5.29",
-                "@vue/compiler-sfc": "3.5.29",
-                "@vue/runtime-dom": "3.5.29",
-                "@vue/server-renderer": "3.5.29",
-                "@vue/shared": "3.5.29"
-            }
-        },
-        "vue-hot-reload-api": {
-            "version": "2.3.4",
-            "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
-            "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
-            "dev": true
-        },
-        "vue-loader": {
-            "version": "17.4.2",
-            "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz",
-            "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==",
-            "dev": true,
-            "requires": {
-                "chalk": "^4.1.0",
-                "hash-sum": "^2.0.0",
-                "watchpack": "^2.4.0"
-            },
-            "dependencies": {
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                },
-                "hash-sum": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
-                    "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
-                    "dev": true
-                }
-            }
-        },
-        "vue-style-loader": {
-            "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
-            "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==",
-            "dev": true,
-            "requires": {
-                "hash-sum": "^1.0.2",
-                "loader-utils": "^1.0.2"
-            }
-        },
-        "vue-template-es2015-compiler": {
-            "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
-            "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
-            "dev": true
-        },
-        "vuex": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
-            "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
-            "requires": {
-                "@vue/devtools-api": "^6.0.0-beta.11"
-            }
-        },
-        "watchpack": {
-            "version": "2.5.1",
-            "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
-            "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
-            "dev": true,
-            "requires": {
-                "glob-to-regexp": "^0.4.1",
-                "graceful-fs": "^4.1.2"
-            }
-        },
-        "wbuf": {
-            "version": "1.7.3",
-            "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
-            "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
-            "dev": true,
-            "requires": {
-                "minimalistic-assert": "^1.0.0"
-            }
-        },
-        "wcwidth": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
-            "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
-            "dev": true,
-            "requires": {
-                "defaults": "^1.0.3"
-            }
-        },
-        "web-vitals": {
-            "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz",
-            "integrity": "sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg=="
-        },
-        "webidl-conversions": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-            "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-            "dev": true
-        },
-        "webpack": {
-            "version": "5.105.2",
-            "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz",
-            "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==",
-            "dev": true,
-            "requires": {
-                "@types/eslint-scope": "^3.7.7",
-                "@types/estree": "^1.0.8",
-                "@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.15.0",
-                "acorn-import-phases": "^1.0.3",
-                "browserslist": "^4.28.1",
-                "chrome-trace-event": "^1.0.2",
-                "enhanced-resolve": "^5.19.0",
-                "es-module-lexer": "^2.0.0",
-                "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.3.1",
-                "mime-types": "^2.1.27",
-                "neo-async": "^2.6.2",
-                "schema-utils": "^4.3.3",
-                "tapable": "^2.3.0",
-                "terser-webpack-plugin": "^5.3.16",
-                "watchpack": "^2.5.1",
-                "webpack-sources": "^3.3.3"
-            },
-            "dependencies": {
-                "eslint-scope": {
-                    "version": "5.1.1",
-                    "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-                    "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-                    "dev": true,
-                    "requires": {
-                        "esrecurse": "^4.3.0",
-                        "estraverse": "^4.1.1"
-                    }
-                },
-                "estraverse": {
-                    "version": "4.3.0",
-                    "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-                    "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-                    "dev": true
-                }
-            }
-        },
-        "webpack-bundle-analyzer": {
-            "version": "4.10.2",
-            "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz",
-            "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==",
-            "dev": true,
-            "requires": {
-                "@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"
-            },
-            "dependencies": {
-                "commander": {
-                    "version": "7.2.0",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-                    "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-                    "dev": true
-                }
-            }
-        },
-        "webpack-chain": {
-            "version": "6.5.1",
-            "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz",
-            "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==",
-            "dev": true,
-            "requires": {
-                "deepmerge": "^1.5.2",
-                "javascript-stringify": "^2.0.1"
-            }
-        },
-        "webpack-dev-middleware": {
-            "version": "5.3.4",
-            "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
-            "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
-            "dev": true,
-            "requires": {
-                "colorette": "^2.0.10",
-                "memfs": "^3.4.3",
-                "mime-types": "^2.1.31",
-                "range-parser": "^1.2.1",
-                "schema-utils": "^4.0.0"
-            }
-        },
-        "webpack-dev-server": {
-            "version": "4.15.2",
-            "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
-            "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
-            "dev": true,
-            "requires": {
-                "@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"
-            },
-            "dependencies": {
-                "ws": {
-                    "version": "8.19.0",
-                    "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
-                    "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==",
-                    "dev": true,
-                    "requires": {}
-                }
-            }
-        },
-        "webpack-merge": {
-            "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
-            "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
-            "dev": true,
-            "requires": {
-                "lodash": "^4.17.15"
-            }
-        },
-        "webpack-sources": {
-            "version": "3.3.4",
-            "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz",
-            "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==",
-            "dev": true
-        },
-        "webpack-virtual-modules": {
-            "version": "0.4.6",
-            "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz",
-            "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==",
-            "dev": true
-        },
-        "websocket-driver": {
-            "version": "0.7.4",
-            "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
-            "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
-            "dev": true,
-            "requires": {
-                "http-parser-js": ">=0.5.1",
-                "safe-buffer": ">=5.1.0",
-                "websocket-extensions": ">=0.1.1"
-            }
-        },
-        "websocket-extensions": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
-            "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
-            "dev": true
-        },
-        "weixin-js-sdk": {
-            "version": "1.6.5",
-            "resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.5.tgz",
-            "integrity": "sha512-Gph1WAWB2YN/lMOFB/ymb+hbU/wYazzJgu6PMMktCy9cSCeW5wA6Zwt0dpahJbJ+RJEwtTv2x9iIu0U4enuVSQ=="
-        },
-        "whatwg-fetch": {
-            "version": "3.6.20",
-            "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz",
-            "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==",
-            "dev": true
-        },
-        "whatwg-url": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-            "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-            "dev": true,
-            "requires": {
-                "tr46": "~0.0.3",
-                "webidl-conversions": "^3.0.0"
-            }
-        },
-        "which": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-            "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-            "dev": true,
-            "requires": {
-                "isexe": "^2.0.0"
-            }
-        },
-        "wildcard": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
-            "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
-            "dev": true
-        },
-        "wmf": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
-            "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
-        },
-        "word": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
-            "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
-        },
-        "word-wrap": {
-            "version": "1.2.5",
-            "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
-            "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
-            "dev": true
-        },
-        "wrap-ansi": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-            "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-            "dev": true,
-            "requires": {
-                "ansi-styles": "^4.0.0",
-                "string-width": "^4.1.0",
-                "strip-ansi": "^6.0.0"
-            }
-        },
-        "wrap-loader": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/wrap-loader/-/wrap-loader-0.2.0.tgz",
-            "integrity": "sha512-Qdhdu7vr2H8dLE2sKySQznOBHXIHbKg7PZ5aqkeBOQHGqxLfcJw/ZlB40j67b1tks9OYqSBCHc+uHtGRCmQYlg==",
-            "dev": true,
-            "requires": {
-                "loader-utils": "^1.1.0"
-            }
-        },
-        "wrappy": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-            "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-            "dev": true
-        },
-        "ws": {
-            "version": "7.5.10",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
-            "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
-            "dev": true,
-            "requires": {}
-        },
-        "xgplayer": {
-            "version": "3.0.23",
-            "resolved": "https://registry.npmjs.org/xgplayer/-/xgplayer-3.0.23.tgz",
-            "integrity": "sha512-Bn3zQfMMAZimlVG9EeIDybMcklc+6FH8Sv47KpTq4K6ofCzyhPG/KenxailDedlHmxjb5B2o+240TpJtMQ3oJA==",
-            "requires": {
-                "danmu.js": ">=1.1.6",
-                "delegate": "^3.2.0",
-                "downloadjs": "1.4.7",
-                "eventemitter3": "^4.0.7",
-                "xgplayer-subtitles": "3.0.23"
-            }
-        },
-        "xgplayer-subtitles": {
-            "version": "3.0.23",
-            "resolved": "https://registry.npmjs.org/xgplayer-subtitles/-/xgplayer-subtitles-3.0.23.tgz",
-            "integrity": "sha512-deGdV75giVzfTTdG9XATmji39NHwKTpEelWt2rRx/RyXGgU2bQFp0Ft7yWaK2Uu8A/WVrP5fpxEAj4MstREMkQ==",
-            "requires": {
-                "eventemitter3": "^4.0.7"
-            }
-        },
-        "xlsx": {
-            "version": "0.18.5",
-            "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
-            "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
-            "requires": {
-                "adler-32": "~1.3.0",
-                "cfb": "~1.2.1",
-                "codepage": "~1.15.0",
-                "crc-32": "~1.2.1",
-                "ssf": "~0.11.2",
-                "wmf": "~1.0.1",
-                "word": "~0.3.0"
-            }
-        },
-        "xregexp": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
-            "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==",
-            "dev": true
-        },
-        "y18n": {
-            "version": "5.0.8",
-            "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
-            "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-            "dev": true
-        },
-        "yallist": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-            "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
-            "dev": true
-        },
-        "yaml": {
-            "version": "1.10.2",
-            "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-            "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-            "dev": true
-        },
-        "yargs": {
-            "version": "16.2.0",
-            "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-            "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
-            "dev": true,
-            "requires": {
-                "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"
-            }
-        },
-        "yargs-parser": {
-            "version": "20.2.9",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-            "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-            "dev": true
-        },
-        "yocto-queue": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-            "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-            "dev": true
-        }
     }
 }

+ 1 - 0
package.json

@@ -14,6 +14,7 @@
         "crypto-js": "^4.2.0",
         "date-fns": "^2.30.0",
         "dayjs": "^1.11.19",
+        "hls.js": "^1.6.15",
         "image-tools": "^1.4.0",
         "jsqr": "^1.4.0",
         "jweixin-module": "^1.6.0",

+ 96 - 96
pages.json

@@ -211,93 +211,93 @@
 				"navigationStyle": "custom"
 			}
 		},
-		{
-			"path": "pages/course/info",
-			"style": {
-				"navigationBarTitleText": "课程详情",
-				"navigationBarTextStyle":"black",
-				"navigationStyle": "custom",
-				"scrollIndicator": "none",
-				"bounce": "none",
-				"titleNView": false,
-				"enablePullDownRefresh": false,
-				"backgroundColor": "#f7f7f7",
-				"backgroundColorTop":"#ffffff",
-				"app-plus": {  
-					"titleNView": false,  
-					"screenOrientation" : [
-						"portrait-primary", 
-						"portrait-secondary", 
-						"landscape-primary", 
-						"landscape-secondary" 
-					],
-					"subNVues":[{  
-						"id": "privilege",   
-						"path":"pages/course/privilege", 
-						"type":"popup",
-							"style": {  
-								"position": "absolute",
-								 "bottom": "0",
-								 "left": "0",
-								 "width": "100%",  
-								 "height": "1150upx",  
-								 "mask":"rgba(0,0,0,0.5)",
-								 "background": "transparent",
-								 "border-top-left-radius": "20px",
-								 "border-top-right-radius": "20px"
-							}  
-					    }
-					    ,{
-								"id": "commentN",
-								"path":"pages/course/commentN", 
-								"type":"popup",
-								"style": {  
-										"position": "absolute",
-										 "top": "450upx",
-										 "bottom": "0",
-										 "left": "0",
-										 "width": "100%",  
-										 "mask":"rgba(0,0,0,0.5)",
-										 "background": "transparent",
-										 "border-top-left-radius": "20px",
-										 "border-top-right-radius": "20px"
-								  }  
-						  }  
-						 ,{
-									"id": "catalogueN", 
-									"path":"pages/course/catalogueN",
-									"type":"popup",
-									"style": {  
-											"position": "absolute",
-											 "bottom": "0",
-											 "left": "0",
-											 "width": "100%",  
-											 "height": "85%",  
-											 "mask":"rgba(0,0,0,0.5)",
-											 "background": "transparent",
-											 "border-top-left-radius": "20px",
-											 "border-top-right-radius": "20px"
-									 }  
-						  }
-						 ,{
-								"id": "videoPopup",
-								"path": "pages/course/videoPopup", 
-								"type":"popup",
-								"style": {
-									"position": "absolute",
-									"bottom": "0",
-									"left": "0",
-									"width": "100%",
-									"height": "100%",
-									"mask":"rgba(0,0,0,0.6)",
-									"background": "rgba(0,0,0,0.6)"
-								}
-						}
-					]  
+		// {
+		// 	"path": "pages/course/info",
+		// 	"style": {
+		// 		"navigationBarTitleText": "课程详情",
+		// 		"navigationBarTextStyle":"black",
+		// 		"navigationStyle": "custom",
+		// 		"scrollIndicator": "none",
+		// 		"bounce": "none",
+		// 		"titleNView": false,
+		// 		"enablePullDownRefresh": false,
+		// 		"backgroundColor": "#f7f7f7",
+		// 		"backgroundColorTop":"#ffffff",
+		// 		"app-plus": {  
+		// 			"titleNView": false,  
+		// 			"screenOrientation" : [
+		// 				"portrait-primary", 
+		// 				"portrait-secondary", 
+		// 				"landscape-primary", 
+		// 				"landscape-secondary" 
+		// 			],
+		// 			"subNVues":[{  
+		// 				"id": "privilege",   
+		// 				"path":"pages/course/privilege", 
+		// 				"type":"popup",
+		// 					"style": {  
+		// 						"position": "absolute",
+		// 						 "bottom": "0",
+		// 						 "left": "0",
+		// 						 "width": "100%",  
+		// 						 "height": "1150upx",  
+		// 						 "mask":"rgba(0,0,0,0.5)",
+		// 						 "background": "transparent",
+		// 						 "border-top-left-radius": "20px",
+		// 						 "border-top-right-radius": "20px"
+		// 					}  
+		// 			    }
+		// 			    ,{
+		// 						"id": "commentN",
+		// 						"path":"pages/course/commentN", 
+		// 						"type":"popup",
+		// 						"style": {  
+		// 								"position": "absolute",
+		// 								 "top": "450upx",
+		// 								 "bottom": "0",
+		// 								 "left": "0",
+		// 								 "width": "100%",  
+		// 								 "mask":"rgba(0,0,0,0.5)",
+		// 								 "background": "transparent",
+		// 								 "border-top-left-radius": "20px",
+		// 								 "border-top-right-radius": "20px"
+		// 						  }  
+		// 				  }  
+		// 				 ,{
+		// 							"id": "catalogueN", 
+		// 							"path":"pages/course/catalogueN",
+		// 							"type":"popup",
+		// 							"style": {  
+		// 									"position": "absolute",
+		// 									 "bottom": "0",
+		// 									 "left": "0",
+		// 									 "width": "100%",  
+		// 									 "height": "85%",  
+		// 									 "mask":"rgba(0,0,0,0.5)",
+		// 									 "background": "transparent",
+		// 									 "border-top-left-radius": "20px",
+		// 									 "border-top-right-radius": "20px"
+		// 							 }  
+		// 				  }
+		// 				 ,{
+		// 						"id": "videoPopup",
+		// 						"path": "pages/course/videoPopup", 
+		// 						"type":"popup",
+		// 						"style": {
+		// 							"position": "absolute",
+		// 							"bottom": "0",
+		// 							"left": "0",
+		// 							"width": "100%",
+		// 							"height": "100%",
+		// 							"mask":"rgba(0,0,0,0.6)",
+		// 							"background": "rgba(0,0,0,0.6)"
+		// 						}
+		// 				}
+		// 			]  
 				
-				} 
-			}
-		},
+		// 		} 
+		// 	}
+		// },
 		
 		{
 			"path": "pages/course/introduce",
@@ -2834,16 +2834,16 @@
 						"navigationBarBackgroundColor": "#ffffff"
 					}
 				},
-				{
-					"path": "index",
-					"style": {
-						"navigationBarTitleText": "直播间",
-						"enablePullDownRefresh": false,
-						"navigationStyle": "custom",
-						"navigationBarTextStyle": "black",
-						"navigationBarBackgroundColor": "#ffffff"
-					}
-				},
+				// {
+				// 	"path": "index",
+				// 	"style": {
+				// 		"navigationBarTitleText": "直播间",
+				// 		"enablePullDownRefresh": false,
+				// 		"navigationStyle": "custom",
+				// 		"navigationBarTextStyle": "black",
+				// 		"navigationBarBackgroundColor": "#ffffff"
+				// 	}
+				// },
 				{
 					"path": "livingList",
 					"style": {

+ 0 - 3022
pages/course/info.vue

@@ -1,3022 +0,0 @@
-<template>
-	<view class="content">
-		<view :style="{height: statusBarHeight+'px',width: '100%',background:'#000'}"></view>
-		<view class="video-box">
-			<!-- 返回按钮 -->
-			<!-- #ifdef APP-PLUS -->
-			<image class="back-img" @click.stop="$navBack()" src="@/static/image/hall/back_white_icon.png"></image>
-			<!-- #endif -->
-			<view class="cousrseImg x-c" v-show="!pickCatalog.url">
-				<u-loading-icon size="30"></u-loading-icon>
-				<!-- <image :src="data.imgUrl" mode="aspectFit"></image> -->
-			</view>
-			<!-- 视频 -->
-			<view class="video-container" 
-				style="position: relative;height: 422rpx;" 
-				:videoPlayStatus="videoPlayStatus" 
-				:change:videoPlayStatus="xgplayer.changeVideo"
-				:danmuFunInfo="danmuFunInfo"
-				:change:danmuFunInfo="xgplayer.danmuFun">
-					<view id="detail-video"
-					:pickCatalog="pickCatalog" 
-					:change:pickCatalog="xgplayer.initJs"
-					:exitFullscreen="exitFullscreen"
-					:change:exitFullscreen="xgplayer.handleExitFullscreen"
-					@click.stop="clickVideo"></view>
-				
-				<image class="back-img" v-if="fullScreen" @click.stop="videoback" src="@/static/image/hall/back_white_icon.png"></image>
-				<!-- 疗法 -->
-				<view v-if="showTherapy&&fullScreen" class="horizontal" @tap.stop>
-					<view class="goods" @tap.stop="goToPro(showTherapyItem.packageId)">
-						<image :src="showTherapyItem.imgUrl" mode="aspectFill" class="goodsimg"></image>
-						<view class="goodsname textOne">{{showTherapyItem.packageName}}</view>
-					</view>
-					<view style="width: 20px;height: 20px;position: absolute;right:0rpx;top:0rpx;z-index:999">
-						<image style="width: 20px;height: 20px" src="@/static/images/close40.png"
-							@tap.stop="closeTherapy"></image>
-					</view>
-				</view>
-				<view class="audiobox es es-ver es-ac es-pc" v-if="showAudio" @click.stop>
-					<view class="audiobox-title">
-						<image class="back" @click.stop="$navBack()" src="@/static/image/hall/back_white_icon.png"></image>
-						<view class="textOne">
-						{{catalogueList[pickCatalogIdx]&&catalogueList[pickCatalogIdx].title}}
-						</view>
-					</view>
-					<view class="es es-ver es-ac es-pc">
-						<view class="es es-ac es-pc">
-							<image class="es-icon-52 es-icon-play-last"
-								src="/static/images/other/video/play-last.png" @tap="endedPlayPrev()"></image>
-							<image class="es-icon-88 es-ml-50 es-mr-50"
-								:src="audioPlayIng?'/static/images/other/video/play-stop.png':'/static/image/hall/video_icon.png'" @tap="playAudioAction()"></image>
-							<image class="es-icon-52 es-icon-play-next"
-								src="/static/images/other/video/play-next.png" @tap="endedPlayNext('click')"></image>
-						</view>
-						<view class="audiobox-time">{{$formatSeconds(tempAudioDuration)}} / {{$formatSeconds(pickCatalog.seconds)}}</view>
-					</view>
-					<view class="audiobox-video x-ac" @tap="backPlayVideo">返回视频</view>
-				</view>
-				<!-- 视频控制栏 -->
-				<view class="es" 
-				:style="{paddingLeft:fullScreen ? statusBarHeight+'px': 0,display: isPause||isClickVideo?'flex':'none'}"
-				style="width: 100%;height: 48px;position: absolute;z-index: 999;bottom: 0;left: 0;background: transparent;">
-					<view class="xgplayer" id="controls_new_root" style="flex: 1;background:transparent;"></view>
-					<view v-if="fullScreen" class="xgplayer-switch xgplayer-icon es es-ac es-pc" style="padding: 0 8px 8px 8px;">
-						<view class="danmu-controls es es-ac es-pc" @click="openDanmu">
-							点我发弹幕
-						</view>
-						<view class="danmu-controls-r es es-ac es-pc">
-							<image class="xg-img danmu-switch-open" v-show="danmuFunInfo.switch==1" src="/static/images/other/course/danmu-on.png" @tap="switchDanmu(0)"></image>
-							<image class="xg-img danmu-switch-open" v-show="danmuFunInfo.switch==0" src="/static/images/other/course/danmu-off.png" @tap="switchDanmu(1)"></image>
-						</view>
-					</view>
-				</view>
-				<!-- 弹幕设置 -->
-				<uni-popup ref="danmuPopup" type="bottom" style="z-index: 999;">
-					<view class="danmuPopup" :style="{marginLeft:fullScreen ? statusBarHeight+'px': 0}">
-						<view class="danmuPopup-head border-line" style="margin-bottom: 20px;">
-							<image class="danmu-icon" v-show="danmuFunInfo.switch==1" src="/static/images/other/course/danmu-on.png" @click="switchDanmu(0)"></image>
-							<image class="danmu-icon" v-show="danmuFunInfo.switch==0" src="/static/images/other/course/danmu-off.png" @click="switchDanmu(1)"></image>
-							<image class="danmu-icon" src="/static/images/other/course/danmu-style-on.png" mode="aspectFill" @click="openDanmuStyle(2)"></image>
-							<u--input class="danmuPopup-input" placeholder="发个弹幕吧~" border="surround" shape="circle" focus :adjustPosition="false" :autoBlur="true" maxlength="140" clearable v-model="danmuIput.txt"></u--input>
-							<button class="danmuPopup-send" 
-							:disabled="danmubtnLoading"
-							@click="sendDanmu"
-							>发送</button>
-						</view>
-						<view 
-						class="danmuPopup-con"
-						:style="{height: danmuboxHeight ? fullScreen ? `calc(${danmuboxHeight}px + 20px)` : danmuboxHeight+'px' : 'auto'}">
-							<view class="es" style="margin-bottom: 25px;">
-								<view class="es-mr-24px">弹幕字号</view>
-								<view class="es">
-									<view class="es-mr-24px" v-for="size in danmuFontSize" :style="{color: danmuIput.fontSize==size ?'#FF5C03':'#757575'}" @click="clickStyle('font',size)">{{size=='16px'?'默认':'较小'}}</view>
-								</view>
-							</view>
-							<view class="es" style="margin-bottom: 25px;">
-								<view class="es-mr-24px">弹幕位置</view>
-								<view class="es">
-									<view class="es-mr-24px" v-for="mode in danmuMode" :style="{color: danmuIput.mode==mode ?'#FF5C03':'#757575'}" @click="clickStyle('mode',mode)">
-										{{mode=='top'?'置顶':mode=='bottom'?'置底':'滚动'}}
-									</view>
-								</view>
-							</view>
-							<view class="es" style="margin-bottom: 25px;">
-								<view class="es-mr-24px">弹幕颜色</view>
-								<view class="es es-fx" style="flex-wrap: wrap;">
-									<view class="es-mr-24px coloritem" v-for="color in colorList" 
-									:style="{background: color,border:`2px solid ${danmuIput.color== color ?'#FF5C03':'#F5F7FA'}`}"
-									 @click="clickStyle('color',color)"></view>
-								</view>
-							</view>
-							<view class="es">
-								<view class="es-mr-24px">弹幕位置</view>
-								<view class="es">
-									<view class="es-mr-24px" v-for="item in danmuArea" :style="{color: danmuFunInfo.area==item ?'#FF5C03':'#757575'}" @click="clickArea(item)">
-										{{item*100+'%'}}
-									</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</uni-popup>
-			</view>
-		</view>
-		<scroll-view class="scroll-Y" :scroll-y="true" :style="'height:' + clientHeight + 'px;'" v-show="!isShowList">
-			<view class="video-info">
-				<view class="video-info-header">
-					<view class="video-info-headerl">
-						<image mode="aspectFill" :src="data.talentAvatar"></image>
-						<text class="textOne">{{data.courseName}}</text>
-					</view>
-					<button class="follow-btn" @tap="doFollow()">
-						<image v-show="!isFollow" src="@/static/image/hall/guanzhu_icon.png" mode="aspectFill"></image>
-						<text>{{isFollow?"已关注":"关注"}}</text>
-					</button>
-				</view>
-				
-				<view>
-					<view class="video-info-voicebox2">
-						<text>{{data.views}}次播放 · 总时长:{{data.totalDuration}}</text>
-						<view class="x-c" @click="isExpand = !isExpand" v-if="showExpandText">
-							<text>{{isExpand ? '收起简介' : '展开简介'}}</text>
-							<view :class="isExpand ? 'rotate':''"><uni-icons type="down" size="14"
-									color="#bbbbbb"></uni-icons></view>
-						</view>
-					</view>
-					<view :class="showDes|| !showExpandText? 'opacity video-info-desc':'video-info-desc' "
-						id="descbox-desc" :style="{height: isExpand ? 'auto': '84rpx'}">
-						{{data.description}}
-						<image v-show="!isExpand&&showExpandText" class="desc-image x-c"
-							src="/static/images/other/bg_bar.png"></image>
-					</view>
-				</view>
-				
-				<!-- 参考文献 -->
-				<view class="es es-mb-32" v-if="$isIos()">
-					<text class="es es-fs-24 es-c-99"> --参考文献:包括但不限于《内科学》、《外科学》、《中医学》等医学专业书籍</text>
-				</view>
-
-				<view class="video-info-footer">
-					<view @tap="handleListen()">
-						<image src="@/static/image/hall/sound_icon24.png" mode="aspectFill"></image>
-						<text :style="{color: showAudio ? '#FF5C03':'#757575'}">听声</text>
-					</view>
-
-					<view @tap="$navTo('./note?courseId='+courseId)" v-if="!$qconfig.isAppStore">
-						<image src="@/static/image/hall/note_icon24.png" mode="aspectFill"></image>
-						<text>笔记</text>
-					</view>
-					<view @tap="doFavorite()">
-						<image
-							:src="isFavorite?'/static/image/hall/collect_on_icon24.png':'/static/image/hall/collect_icon24.png'"
-							mode="aspectFill"></image>
-						<text>{{isFavorite?"已收藏":"收藏"}}</text>
-					</view>
-					<view @tap="doLike()">
-						<image :src="isLike?'/static/image/hall/like_on_icon.png':'/static/image/hall/like_icon.png'"
-							mode="aspectFill"></image>
-						<text>{{isLike?"喜欢":"喜欢"}}</text>
-					</view>
-					<view @tap="openShare()">
-						<image src="@/static/image/hall/weixin_icon.png" mode="aspectFill"></image>
-						<text>分享</text>
-					</view>
-					<view @tap="openDanmu()" :style="{display: $isLogin()&&!showAudio ? 'flex':'none'}">
-						<image src="@/static/images/other/course/danmu-set.png" mode="aspectFill"></image>
-						<text>弹幕</text>
-					</view>
-				</view>
-			</view>
-			
-			<!-- 讲堂目录 -->
-			<view class="video-directory">
-				<view class="box-header">
-					<view class="box-header-title">讲堂目录</view>
-					<view class="box-header-r" @tap="goToCatalogue()">
-						<text>共{{catalogueList.length}}节</text>
-						<image src="@/static/image/hall/my_right_arrow_right_icon.png" mode="aspectFill"></image>
-					</view>
-				</view>
-
-				<scroll-view class="video-directory-scrollx" scroll-x="true" :scroll-into-view="scrollIntoViewId"
-					scroll-with-animation="true" overflow-anchor="none">
-					<view :id="'cataLogue' + index"
-						:class="pickCatalogIdx == index ? 'active-scrollitem video-directory-scrollitem':'video-directory-scrollitem'"
-						v-for="(item,index) in catalogueList" :key="index" @click="pickCatalogAction(index)">
-						<view
-							:class="index>1 && canShowVip(item) ? 'freeflag freeflag-member':'freeflag freeflag-free'">
-							{{ index>1 && canShowVip(item) ? '限时特惠' : '免费'}}
-						</view>
-						<view class="video-directory-num">
-							<text>第{{item.courseSort}}讲</text>
-							<image v-if='pickCatalogIdx == index' src="@/static/image/hall/hear_icon.png"></image>
-							<view class="empty" v-else></view>
-						</view>
-						<view class="video-directory-title">
-							<view class="textTwo">{{item.title}}</view>
-							<!-- <view class="imagebox">
-			  						<view class="mask" v-if='pickCatalogIdx != index'>
-			  							<image src="@/static/image/hall/video_icon.png" mode="aspectFill"></image>
-			  						</view>
-			  						<image class="video-directory-img" src="@/static/image/home1/logo.png" mode="aspectFill"></image>
-			  					</view> -->
-						</view>
-					</view>
-				</scroll-view>
-			</view>
-			<!-- 课程疗法 -->
-			<view class="therapy" v-show="packageJsonList&&packageJsonList.length > 0">
-				<view class="box-header-title" style="margin-bottom: 20rpx;">课程疗法</view>
-				<scroll-view class="therapy-scrollx" scroll-x="true" :scroll-into-view="scrollIntoTherapy"
-					scroll-with-animation="true" overflow-anchor="none">
-					<view :class="therapyIndex == idx ? 'therapy-active therapy-scrollitem':'therapy-scrollitem'"
-						:id="'therapy' + idx" v-for="(item,idx) in packageJsonList" :key="idx"
-						@click="handleTherapy(item,idx)">
-						<image mode="aspectFill" class="therapy-goodsimg" :src="item.imgUrl"></image>
-						<view class="therapy-goodsname textTwo">{{item.packageName}}</view>
-					</view>
-				</scroll-view>
-			</view>
-			<!-- 评论 -->
-			<view class="video-comment" v-if="$qconfig.isAppStore">
-				<view class="box-header">
-					<view class="box-header-title">评论</view>
-					<view class="box-header-r" @tap="goToComment()">
-						<!-- <text>共{{data.commentNum}}条</text> -->
-						<text>去评论/更多评论</text>
-						<image src="@/static/image/hall/my_right_arrow_right_icon.png" mode="aspectFill"></image>
-					</view>
-				</view>
-				<view style="padding: 20rpx 24rpx;">
-					<commentList :commentList="data.commentList" />
-				</view>
-			</view>
-
-			<!-- 猜你喜欢 -->
-			<view class="video-comment">
-				<view class="box-header">
-					<view class="box-header-title">猜你喜欢</view>
-					<view class="box-header-r" v-if="false">
-						<text>更多</text>
-						<image src="@/static/image/hall/my_right_arrow_right_icon.png" mode="aspectFill"></image>
-					</view>
-				</view>
-				<view class="hall-box">
-					<hallItem class="gapitem" v-for="(item, index) in dataList " :key="index" :item="item"
-						@click.native="navTo('/pages/course/info?courseId='+item.courseId)" />
-				</view>
-			</view>
-		</scroll-view>
-
-		<!-- h5下载 -->
-		<h5-down-app-tip :pageUrl="pageUrl" :type="'course'" :courseId="courseId" />
-
-		<!-- 分享弹窗 -->
-		<u-popup :show="showShare" @close="closeShareAct()">
-			<share-box :shareItem="shareItem" @closeShare='closeShareAct()'></share-box>
-		</u-popup>
-
-		<!-- VIP特权弹窗 -->
-		<uni-popup ref="popPrivilege" type="bottom" borderRadius="10rpx 10rpx 0px 0px">
-			<view class="privilegeBox es es-ver es-br-38 es-pt-30 es-pb-30 ">
-				<view class="es es-fx es-pc es-h-56 es-ml-48 es-mr-48">
-					<image class="es-w-74 es-h-40" style="position: absolute;left:60rpx;top:0"
-						src="../../static/image/course/xiangyun.png"></image>
-					<view class="es-fs-40 es-h-56 es-fw-500" style="color: #FFDAA3;">开通VIP专享以下特权</view>
-					<image class="es-w-74 es-h-40" style="position: absolute;right:60rpx;top:0"
-						src="../../static/image/course/xiangyun2.png"></image>
-					<image class="es-w-40 es-h-40" style="position: absolute;right:-20rpx;top:-10rpx"
-						@tap="closePrivilege" src="/static/images/close40.png"></image>
-				</view>
-
-				<view class="sec1 es-mt-20 es-ml-48 es-mr-48">
-					<view class="es x-bc es-pl-28 es-pt-12">
-						<view class="l1">
-							<view class="x-f">
-								<image class="es-w-44 es-h-44" src="../../static/image/course/privilege/fozhu.png">
-								</image>
-								<view class="es-ml-8 es-c-white es-fs-32 es-fw-600">名家讲堂</view>
-							</view>
-							<view class="es-fs-30 es-mt-10 es-c-99">畅享10000+VIP视频</view>
-						</view>
-						<view class="es">
-							<image src="../../static/image/course/zyx.png" class="es-w-183 es-h-98 es-br-15"></image>
-							<!-- <view class="es-fs-20 es-br-8 es-w-80 es-h-30 es-fw-bold x-c" style="position:absolute; right: 0;top:10rpx;background: #000;opacity: 0.7;color: #FFDAA3;">10000+</view> -->
-						</view>
-					</view>
-				</view>
-
-				<view class="sec2 es es-fx es-pc es-h-56 es-mt-40 es-ml-48 es-mr-48">
-					<!-- <image class="es-w-148 es-h-3" style="position: absolute;left:0;top:16rpx" src="../../static/image/course/privilege/line1.png"></image> -->
-					<view class="es-fs-30 es-h-56 es-fw-bold" style="color: #FFDAA3;">超多权益待你开启</view>
-					<!-- <image class="es-w-148 es-h-3" style="position: absolute;right:0;top:16rpx" src="../../static/image/course/privilege/line2.png"></image> -->
-				</view>
-
-				<view class="primenu-box es es-fx es-pc es-mt-20 es-ml-48 es-mr-48">
-					<view class="content-inner">
-						<view class="item">
-							<image v-if="$isIos()" class="img" src="/static/image/course/privilege/she.png" mode="heightFix"></image>
-							<text class="label">AI舌诊</text>
-						</view>
-						<view class="item">
-							<image class="img jlxw" src="/static/image/course/privilege/tizhi.png" mode="heightFix">
-							</image>
-							<text class="label">体质检测</text>
-						</view>
-						<view class="item">
-							<image class="img" src="/static/image/course/privilege/baike.png" mode="heightFix"></image>
-							<text class="label">养生百科</text>
-						</view>
-						<view class="item">
-							<image class="img" src="/static/image/course/privilege/yishu.png" mode="heightFix"></image>
-							<text class="label">经典医书</text>
-						</view>
-						<view class="item">
-							<image class="img" src="/static/image/course/privilege/more.png" mode="heightFix"></image>
-							<text class="label">多设备登陆</text>
-						</view>
-						<view class="item">
-							<image class="img" src="/static/image/course/privilege/ad.png" mode="heightFix"></image>
-							<text class="label">去除广告</text>
-						</view>
-					</view>
-				</view>
-
-				<view class="es-ml-48 es-mr-48 es-mt-10 es-pt-10 es-pb-10 es-br-5" style="background:#2a2f32">
-					<view v-for="(item, index) in vipMethods" :key="index" @tap="changeVipMethod(index)"
-						class="vipMethodItem es x-bc">
-						<view class="x-bc es-ml-14">
-							<view class="es-fs-32  es-fw-500 es-ml-14">{{item}}</view>
-						</view>
-						<image v-if="vipMethodIdx==index" class="es-w-40 es-h-40 es-br-ban es-mr-14 es-mr-26"
-							src="../../static/image/course/vipBuy/check.png"></image>
-						<view v-else class="es-w-40 es-h-40 es-br-ban es-mr-14 es-mr-26 circle"></view>
-					</view>
-				</view>
-
-				<view v-if="isShowPayType" class="es-ml-48 es-mr-48 es-mt-40 x-bc" style="background:#2a2f32">
-					<view v-for="(item, index) in payTypes" :key="index" @tap="changePayType(index)"
-						class="payTypeItem es x-bc " :class="payType==index+1?'pt_ac':''">
-						<view class="x-bc es-ml-14">
-							<image class="es-w-59 es-h-52"
-								:src="index==0?'../../static/image/course/vipBuy/wx.png':'../../static/image/course/vipBuy/zfb.png'">
-							</image>
-							<view class="es-fs-33 es-c-white es-fw-500 es-ml-14">{{item}}</view>
-						</view>
-						<image v-if="payType==index+1" src="../../static/image/course/vipBuy/check.png"
-							class="es-w-40 es-h-40 es-br-ban es-mr-14"></image>
-						<view v-else class="es-w-40 es-h-40 es-br-ban es-mr-14 circle"></view>
-					</view>
-				</view>
-
-				<view class="es es-mt-40 es-ml-48 es-mr-48 x-c">
-					<view @tap="doBuy()" class="es-h-94 x-c es-fw-700 es-fs-34 vipCourseBtn vipAc es-br-46"
-						style="width: 310rpx;">
-						立即购买
-					</view>
-				</view>
-			</view>
-		</uni-popup>
-
-		<uni-popup ref="popTip" type="dialog">
-		<uni-popup-dialog cancelText="支付失败" confirmText="支付成功" mode="base" content="是否已支付成功?" title="提示" :duration="2000" :before-close="true" @close="confirmTip" @confirm="confirmTip"></uni-popup-dialog>
-		</uni-popup>
-
-		<!-- 评论弹窗 -->
-		<popupBottom ref="mescrollItem" :visible.sync="specVisible" @close="closePop" :cmdId="courseId"
-			:smsNum="data.commentNum" :title="data.commentNum+'条评论'" :type="1" radius="32" maxHeight="1200">
-		</popupBottom>
-	</view>
-</template>
-
-<script>
-	import {getUserInfo} from '@/api/user';
-	import { getCourseById,getCourseList,getCourseVideoList,checkFavorite,checkFollow,checkLike,doFavorite,doFollow,doLike,addDuration,
-	createCourseOrder,createIntegralOrder,getIntegral,createVipOrder,aliPayment,wxPayment,getCourseOrderById,getComments,saveMsg } from '@/api/course';
-	import commentList from "./components/commentList.vue";
-	import hallItem from "./components/hallItem.vue";
-	import popupBottom from '@/components/popupBottom/popupBottom.vue';
-	import MescrollCompMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js";
-	import adMask from "@/components/adMask/adMask.vue";
-	import { couponPop } from '@/utils/couponPop';
-	
-	export default {
-		mixins: [MescrollCompMixin],
-	    components: {
-	    	popupBottom,
-			commentList,
-			hallItem,
-			adMask
-	    },
-		data() {
-			return {
-				player: null,
-				Events: null,
-				isH5: false,
-				showDes: false,
-				showExpandText: false,
-				isExpand: true,
-				textHeight: 0, //文本高度
-				courseId: null,
-				isShare: false,
-				videoId: null,
-				isLearning: false,
-				data: {
-					courseId: null,
-					imgUrl: "",
-					talentAvatar: "",
-					price: "",
-					remark: "",
-					noteNum: 0,
-					courseName: "",
-					description: "",
-					cataIndex: 0,
-					isFast: 1,
-					isAutoPlay: false,
-					commentList: [{
-						avatar: "",
-						content: "",
-						createTime: "",
-						nickName: ""
-					}]
-				},
-				dataList: [],
-				talentId: null,
-				studyLog: null,
-				isNext: 0,			
-				user: {},
-				isFavorite: 0,
-				isFollow: 0,
-				isLike: 0,
-				clientHeight: 0,
-				isShowList: false, // 是否展示讲堂目录列表
-				catalogueList: [],
-				scrollIntoViewId: 'cataLogue0',
-				pickCatalog: {
-					// videoUrl: "https://tcpv.ylrzcloud.com/course/20241014/1728890026184.mp4",
-					videoUrl:"",
-					thumbnail: "",
-					duration: 0,
-					videoId: 0,
-					seconds: 0,
-					studyTime: null,
-					isFast: 1,
-				},
-				pickCatalogIdx: 0,
-				packageJsonList: [],
-				poster: '',
-				showShare: false,
-				shareItem: {
-					imageUrl: "",
-					title: "",
-					path: ""
-				},
-				fullScreen: false,
-				showTherapy: false,
-				showTherapyItem: {},
-				playDuration:0, // 播放时长
-				timer: null, // 定时器
-				lookDuration: 0 ,// 观看时长
-				countdowning: false, // 观看时长计时开关
-				showAudio: false, //音频展示
-				videoPlayStatus:{
-					status: '',
-					tempAudioDuration: 0,
-					studyTime: 0,
-				}, // 视频播放状态
-				pageUrl: '',
-				courseOrderId:0,
-				scrollIntoTherapy: 'therapy0',
-				therapyIndex: null,
-				allLookTimer: null, // 定时器
-				allLookDuration:0,//H5未登录状态播放五分钟就跳出登录页面
-				tempAudioDuration:0, //用于记录视频和音频播放的时间,达到无缝续播				
-				audioTimer:null,
-				playTime:"00:00",
-				studyTimes:0,
-				audioContext: null,
-				audioPlayIng:false,  
-				isPostBack:true,//页面是否已初次加载
-				specVisible: false,
-				esComment:null,
-				vipSelIndex:0,
-				vipMethods:["开通会员"],
-				vipMethodIdx:0,
-				isShowPayType:false,
-				payTypes:["微信支付","支付宝支付"],
-				payType:1,//微信支付1  支付宝支付2
-				createType:3,//1直接购买,2芳华币兑换 3开通会员
-				orderId:null,
-				order:null,
-				showPayTips:false,
-				isPlayIng:false,//是否正在播放
-				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
-				direction: "",
-				nodeTime: 0,
-				exitFullscreen: '', //是否退出全屏yes , no 加上时间戳
-				danmubtnLoading: false,
-				colorList:['#ffffff','#e70012','#fcf103','#009843','#00a0ea','#e2027f'],
-				danmuMode:['scroll','top','bottom'],
-				danmuArea:[0.1,0.25,0.5,0.75,1],
-				danmuFontSize: ['18px','16px'],
-				danmuIput: {
-					txt: '',
-					mode: 'scroll',
-					color: '#ffffff',
-					fontSize: '18px',
-				},
-				danmuItem:{
-					//发送弹幕
-					duration: 10000,
-					id: '',
-					txt: '',
-					mode: 'scroll',
-					style: {
-						color: '#ffffff',
-						fontSize: '18px',
-						border: 'solid 1px #ffffff',
-						borderRadius: '5px',
-						padding: '2px 5px',
-						backgroundColor: 'rgba(255, 255, 255, 0.1)'
-					}
-				},
-				danmuFunInfo: {
-					time: new Date().getTime(),
-					event: '',
-					switch: 1,
-					area: 0.25
-				},
-				socket:null,
-				isSocketOpen: false,
-				isSend:true,
-				reOpenSocket: false,
-				pingpangTimes:null,
-				danmuboxHeight: 0,
-				isPause: true, // 视频是否暂停
-				isClickVideo: false, // 是否点击视频
-			}
-		},
-		onLoad(options) {
-			this.courseId = options.courseId;
-			this.isShare = options.isShare || false
-			this.videoId = options.videoId || null;
-			this.isLearning = options.isLearning || false;
-			// #ifdef APP-PLUS
-			uni.getSubNVueById('videoPopup').hide();
-			uni.$on('getEventType', (data) => {
-				uni.getSubNVueById('videoPopup').hide();
-				if(data.type == 'confirm') {
-					// 确认
-					this.tipConfirm(data.extraData)
-				} else {
-					// 取消
-					this.tipCancel(data.extraData)
-				}
-			})
-			// #endif
-			this.esComment=this.$refs["esComment"];
-			
-			let that=this;
-			uni.$on('refreshTitle', (pingCount) => {
-				that.data.commentNum=pingCount;
-			}); 
-			this.getCourseInfo();
-			if (this.$isLogin()) {
-				this.getUserInfo();
-				this.checkFavorite();
-				this.checkLike();
-				// #ifndef H5
-				uni.onKeyboardHeightChange(this.keyboardHeightChange);
-				// #endif
-			}
-		},
-		onShow() {
-			this.exitFullscreen = 'no'+ new Date().getTime()
-			//#ifdef H5
-			this.isH5 = true;
-			//#endif
-			
-			//#ifdef APP-PLUS
-			   if(this.$isLogin()){
-			   		if(!this.timer){
-			   			this.timer=setInterval(() => {
-			   				if(this.countdowning){   //观看时长计时开关开启
-			   					this.lookDuration+=5;
-			   					this.addIntegral();	
-			   				}			
-			   			}, 5000);
-			   		}
-			   }
-			//#endif
-			if(!this.$isLogin()){
-					if(!this.allLookTimer){
-						this.allLookTimer=setInterval(() => {
-							if(this.countdowning){   //观看时长计时开关开启
-								this.allLookDuration+=5;
-							}			
-						}, 5000);
-					}
-			}
-			this.playFun()
-			if(this.showPayTips){
-				this.$refs.popTip.open();
-				this.showPayTips=false;
-			}
-		},
-		onReady() {
-			this.audioContext = uni.createInnerAudioContext();
-			uni.getSystemInfo({
-				success: (res) => {
-					this.clientHeight = res.windowHeight - uni.upx2px(422) - res.statusBarHeight;
-				}
-			});
-		},
-		onHide() {
-			const type = this.showAudio ? 'audio' : 'video'
-			this.pauseFun(type);
-		},
-		onUnload() {
-			if(this.socket!=null){
-				this.socket.close()
-				clearInterval(this.pingpangTimes)
-				this.socket = null
-			}
-			// #ifndef H5
-			uni.offKeyboardHeightChange(this.keyboardHeightChange);
-			// #endif
-			this.exitFullscreen = 'yes'+ new Date().getTime()
-		    // 页面卸载时清除计时器
-		    this.endCountsTime();
-			this.addStudyCourse();
-			this.destoryAudio();
-			// #ifdef APP-PLUS
-			uni.$off('getEventType');
-			// #endif 
-			uni.$emit('refreshStudyTime', {});
-			uni.$off("backStudyTime");
-			uni.$off("refreshUser");
-			uni.$off("showPayTips");
-			uni.$off("pickCatalogAction");
-			uni.$off("refreshTitle");
-			uni.$off("refreshCatalog");
-		},
-		methods: {
-			endCountsTime(){
-				if (this.timer) {
-				   clearInterval(this.timer);
-				   this.timer = null;
-				}
-				if (this.allLookTimer) {
-				   clearInterval(this.allLookTimer);
-				   this.allLookTimer = null;
-				}
-			},
-			getCourseInfo() {
-				this.showDes = false
-				getCourseById(this.courseId).then(res => {
-						if (res.code == 200) {
-							this.data = res.data;
-							this.dataList = res.data.courseList;
-							this.talentId = res.data.talentId;
-							this.studyLog = res.data.studyLog;
-							this.isNext = res.data.isNext;
-							this.videoId = this.studyLog ? this.studyLog.videoId : null;
-							this.vipMethods = ["开通会员"];
-							if (this.data.isIntegral == 1) {
-								this.vipMethods.push("芳华币兑换")
-							}
-							if (this.data.sellPrice > 0) {
-								this.vipMethods.push(this.data.sellPrice + "元购买");
-							}
-							setTimeout(()=>{
-								this.getDescHeight()
-							},10)
-							this.getCourseVideoList();
-							if (this.$isLogin()) {
-								this.checkFollow();
-							}
-						}
-					},
-					rej => {}
-				);
-			},
-			getDescHeight() {
-				this.$nextTick(() => {
-					const query = uni.createSelectorQuery().in(this);
-					query
-						.select("#descbox-desc")
-						.boundingClientRect((data) => {
-							this.textHeight = data.height
-							this.isExpand = this.textHeight > uni.upx2px(84) ? false : true
-							this.showExpandText = this.textHeight >= uni.upx2px(84) ? true : false
-							this.showDes = true
-						})
-						.exec();
-				})
-			},
-			//课程目录
-			getCourseVideoList() {
-				let that = this;
-				const params = {
-					"courseId": this.courseId
-				};
-				getCourseVideoList(params, 1, 50).then(res => {
-						if (res.code == 200) {
-							this.catalogueList = res.data.list;
-							if (this.catalogueList.length > 0) {
-								this.pickCatalogIdx = this.getCatalogIdx();
-								//开始播放计时
-								if (this.data.isAutoPlay == 1) {
-									this.pickCatalogMethod(this.pickCatalogIdx);
-								}
-							}
-						}
-					},
-					rej => {}
-				);
-			},
-			canShowVip(item) {
-				return true;
-				if (this.user.isVip) {
-					return false;
-				}
-				return item.isVip == 1 && item.isBuy == 0;
-			},
-			getCatalogIdx() {
-				let index = this.catalogueList.findIndex(item => item.videoId == this.videoId);
-				if (!this.videoId || index < 0) {
-					index = 0;
-				}
-				return index;
-			},
-			getUserInfo() {
-				let that = this;
-				getUserInfo().then(res => {
-						if (res.code == 200) {
-							if (res.user != null) {
-								uni.setStorageSync('userInfo', JSON.stringify(res.user));
-								this.user = res.user;
-							} else {
-								uni.showToast({
-									icon: 'none',
-									title: res.msg,
-								});
-							}
-						}
-					},
-					rej => {}
-				);
-			},
-			checkFavorite() {
-				checkFavorite(this.courseId).then(res => {
-						if (res.code == 200) {
-							this.isFavorite = res.isFavorite;
-						}
-					},
-					rej => {}
-				);
-			},
-			checkFollow() {
-				checkFollow(this.talentId).then(res => {
-						if (res.code == 200) {
-							this.isFollow = res.isFollow;
-						}
-					},
-					rej => {}
-				);
-			},
-			checkLike() {
-				checkLike(this.courseId).then(res => {
-						if (res.code == 200) {
-							this.isLike = res.isLike;
-						}
-					},
-					rej => {}
-				);
-			},
-			doFollow() {
-				if (!this.$isLogin()) {
-					this.$showLoginPage();
-					return;
-				}
-				uni.showLoading({
-					title: ""
-				});
-				doFollow(this.talentId).then(res => {
-						uni.hideLoading();
-						if (res.code == 200) {
-							uni.showToast({
-								title: '操作成功',
-								icon: 'none'
-							});
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-						}
-						this.isFollow = !this.isFollow;
-					},
-					rej => {}
-				);
-			},
-			doFavorite() {
-				if (!this.$isLogin()) {
-					this.$showLoginPage();
-					return;
-				}
-				uni.showLoading({title: ""});
-				doFavorite(this.courseId).then(res => {
-						uni.hideLoading();
-						if (res.code == 200) {
-							uni.showToast({
-								title: '操作成功',
-								icon: 'none'
-							});
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-						}
-						this.isFavorite = !this.isFavorite;
-					},
-					rej => {}
-				);
-
-			},
-			doLike() {
-				if (!this.$isLogin()) {
-					this.$showLoginPage();
-					return;
-				}
-				uni.showLoading({
-					title: ""
-				});
-				doLike(this.courseId).then(res => {
-						uni.hideLoading();
-						if (res.code == 200) {
-							uni.showToast({
-								title: '操作成功',
-								icon: 'none'
-							});
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-						}
-						this.isLike = !this.isLike;
-					},
-					rej => {}
-				);
-			},
-			openShare() {
-				if (this.isH5) {
-					return;
-				}
-				if (this.$isEmpty(this.pickCatalog.title)) {
-					this.shareItem.title = this.data.courseName;
-				} else {
-					this.shareItem.title = this.data.courseName + "-" + this.pickCatalog.title;
-				}
-				this.shareItem.isMini = false
-				this.shareItem.imageUrl = this.data.imgUrl;
-				this.shareItem.compressImage = 1;
-				this.shareItem.courseId = this.courseId;
-				this.shareItem.summary = !this.$isEmpty(this.data.description) ? this.data.description : "";
-				let cdn = uni.getStorageSync('h5Path');
-				this.shareItem.url = cdn + "/pages/course/info?courseId=" + this.courseId;
-				this.showShare = true;
-			},
-			goToComment(){
-				if(this.isH5){
-					this.specVisible=true;
-				}
-				else{
-					const subNVue = uni.getSubNVueById('commentN');
-					const windowInfo = uni.getWindowInfo();
-					const statusBarHeight = windowInfo.statusBarHeight || 0;
-					const topPx = uni.upx2px(422) + statusBarHeight + 20;
-					subNVue.setStyle({
-						top: topPx + 'px'
-					});
-					subNVue.show('slide-in-bottom', 250);
-					uni.$emit('comment', {  
-					    videoId: this.pickCatalog.videoId,  
-					    courseId: this.courseId 
-					});
-				}
-			},
-			closePop(){
-				this.specVisible=false;
-			},
-			navTo(url) {
-				uni.navigateTo({
-					url: url
-				});
-			},
-			openVipCourse(index) {
-				if(!this.isPostBack){
-					this.isPostBack=true;
-					return;
-				}
-				this.showPopPrivilege(index);
-			},
-			showPopPrivilege(index){
-				if(this.isH5){
-					this.$refs.popPrivilege.open("bottom");
-				}
-				else{
-					const subNVue = uni.getSubNVueById('privilege');
-					subNVue.show('slide-in-bottom', 250);
-					let pickCatalog=this.catalogueList[index];
-					uni.$emit('privilege', {  
-					    videoId: pickCatalog.videoId,  
-					    courseId: this.courseId,
-						sellPrice:this.data.sellPrice,
-						catalogIndex:index,
-						integral: this.data.integral,
-					});
-				}
-			},
-			changeVip(index){
-				this.vipSelIndex=index;
-				if(index==2){
-					this.showPopPrivilege();
-				}
-			},
-			changeVipMethod(index){
-			    this.vipMethodIdx=index;	
-				const vipMethod=this.vipMethods[index];
-				this.isShowPayType=false;
-				if(vipMethod.indexOf('元购买')!=-1){  //直接购买
-					this.isShowPayType=true;
-					this.createType=1;
-				}
-				if(vipMethod.indexOf('芳华币兑换')!=-1){  //芳华币兑换
-					this.createType=2;
-				}
-				if(vipMethod.indexOf('开通会员')!=-1){  //开通会员
-					this.createType=3;
-				}
-			},
-			changePayType(index){
-				this.payType=index+1;
-			},
-			doBuy(){
-				if(this.createType==1){  //直接购买
-					 this.createCourseOrder();
-				}
-				else if(this.createType==2){   //芳华币兑换
-					 this.createIntegralOrder();
-				}
-				else{  //开通会员
-					 this.$navTo('.cc');	
-				}
-			},
-			createCourseOrder(){
-			   	if(!this.$isLogin()){
-			   		this.$showLoginPage();
-			   		return;
-			   	}
-			   	uni.showLoading({title:""});
-				let params={"courseId":this.courseId,"createType":this.createType,"videoId":this.pickCatalog.videoId,"payType":this.payType};
-			   	createCourseOrder(params).then(res => {
-			   			uni.hideLoading();
-			   			if(res.code==200){
-							this.order=res.order;
-							if(this.payType==1){  //微信支付
-								this.doWxPay();
-							}else{   //支付宝
-								this.doAlipay();
-							}
-			   			}else{
-			   				uni.showToast({title: res.msg,icon: 'none'});
-			   			}
-			   		},
-			   		rej => {}
-			   	);
-			},
-			createIntegralOrder(){
-			   	if(!this.$isLogin()){
-			   		this.$showLoginPage();
-			   		return;
-			   	}
-			   	uni.showLoading({title:""});
-				let params={"courseId":this.courseId,"videoId":this.pickCatalog.videoId};
-			   	createIntegralOrder(params).then(res => {
-			   			uni.hideLoading();
-			   			if(res.code==200){
-			   				uni.showToast({title: res.msg,icon: 'success'});
-							
-			   			}else{
-			   				uni.showToast({title: res.msg,icon: 'none'});
-			   			}
-			   		},
-			   		rej => {}
-			   	);
-			},
-			doAlipay(){
-				var data = {orderId:this.order.orderId};
-				uni.showLoading();
-				aliPayment(data).then(res => {
-						uni.hideLoading()
-						this.$refs.popPrivilege.close();
-						if(res.code==200){
-							this.$refs.popTip.open();
-							if (uni.getSystemInfoSync().platform == 'android') {
-								var alipayScheme ='alipays://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
-								
-							}else{
-							    var alipayScheme ='alipay://platformapi/startApp?&saId=10000007&qrcode=' + res.data.qr_code;
-							    	
-							}
-							console.log(alipayScheme)
-							// 在uni-app中使用plus.runtime.openURL打开URL
-							plus.runtime.openURL(alipayScheme, function(error) {
-							  // console.error('打开支付宝失败: ' + error.message);
-							  // 处理打开支付宝失败的情况,比如提示用户或者跳转到其他支付方式
-							});
-						}
-						else{
-							uni.showToast({
-								title:res.msg,
-								icon:'none'
-							})
-							
-						}
-					},
-					rej => {}
-				);
-			},
-			doWxPay(){
-				var that=this;
-				plus.share.getServices(function(res){
-				    var sweixin = null;  
-				    for(var i=0;i<res.length;i++){  
-				        var t = res[i];  
-				        if(t.id == 'weixin'){  
-				            sweixin = t;  
-				        }  
-				    }  
-					if(sweixin){
-						console.log('调起小程序')
-						that.$refs.popPrivilege.close();
-						that.$refs.popTip.open()
-						//唤起微信跳转小程序
-						sweixin.launchMiniProgram({
-							id:"gh_feb7753a310b",//gh_7a6a32e5ef61 御君方互医
-							path:'pages_order/coursePayment?orderId='+that.orderId+"&payMethod=app",
-							type:0
-						},function(){
-							console.log("微信唤起成功");
-							return true;
-						},function(e){
-							console.log("微信唤起失败",e);
-							uni.showToast({
-								title:'微信唤起失败,请检查是否有微信应用',
-								icon:'none'
-							})
-							return false;
-						})
-						
-					}else{
-						uni.showToast({
-							title:'微信唤起失败,请检查是否有微信应用',
-							icon:'none',
-							duration:3000
-						})
-						return false;
-					}
-				      
-				},function(res){  
-				    console.log(JSON.stringify(res));  
-				});
-			},
-			goToCatalogue(){
-				if(this.isH5){
-					 let url='./catalogue?courseId='+this.courseId+'&videoId='+this.pickCatalog.videoId+'&isAutoPlay='+this.data.isAutoPlay+'&studyTimes='+this.tempAudioDuration;
-					 this.$navTo(url);	
-				}
-				else{
-					const subNVue = uni.getSubNVueById('catalogueN');
-					subNVue.show('slide-in-bottom', 250);
-					uni.$emit('catalogue', {  
-					    videoId: this.pickCatalog.videoId,  
-					    courseId: this.courseId,
-						pickCatalogIdx:this.pickCatalogIdx 
-					});
-				}
-			},
-			pickCatalogAction(index,type){
-				if (this.pickCatalogIdx === index) return;
-				if(type == 'catalogueN'&&this.isNext == 1 && this.pickCatalogIdx != index - 1) {
-					const type = this.showAudio ? 'audio' : 'video'
-					this.pauseFun(type);
-					this.openTips(index)
-					return
-				}
-				console.log("qxj pickCatalogAction");
-				this.pickCatalogActionFun(index,type)
-			},
-			pickCatalogActionFun(index,type) {
-				if(!this.$isLogin()){   //切换小节需要登录
-					this.$showLoginPage();
-					return;
-				}
-				if(this.isH5 && index>1){
-					uni.showToast({title: "请下载App观看",icon: 'none'});
-					return;
-				}
-				//切换之前添加课程目录学习记录
-				this.addStudyCourse();
-				this.addIntegral();	//加芳华币
-				this.pickCatalogMethod(index,type);
-			},
-			pickCatalogMethod(index,type){
-				setTimeout(()=>{
-					this.scrollIntoViewId = 'cataLogue' + index;
-				},100)
-				let tempCatalogue=this.catalogueList[index];
-				this.lookDuration=0;//重置观看当前小节的课程时长
-				if(tempCatalogue.isVip==1){  //需要Vip才能观看
-					if(!this.$isLogin()){
-						this.$showLoginPage();
-						return;
-					}
-					if(this.user==null){
-						this.user=this.$getUserInfo();
-					}
-					if(this.user.isVip!=1 && tempCatalogue.isBuy!=1){
-						this.openVipCourse(index);
-						return;
-					}
-				}
-				this.pickCatalogIdx=index;
-				//传递消息给小节弹窗
-				uni.$emit('pickCatalogIdx', { pickCatalogIdx:index,type:type });  
-				this.pickCatalog=this.catalogueList[index];
-				//let tempUrl="https://tcpv.ylrzcloud.com/course/2025125/1764917825726.mp4"; //腾讯云cdn播放地址
-				//let tempUrl="https://tcpv-ylrzcloud.tliveapp.com/course/2025125/1764917825726.mp4?nopcdn=1"; //腾讯云重定向cdn
-				//let tempUrl="https://ylwatch-1322623152.cos.ap-chongqing.myqcloud.com/video/tcpv.mp4";//腾讯云源站视频
-				//let tempUrl="https://rtobs.ylrztop.com/course/2025125/1764911857622.mp4";
-				// this.pickCatalog.lineOne=tempUrl;
-				// this.pickCatalog.lineTwo=tempUrl;
-				// this.pickCatalog.videoUrl=tempUrl;
-				this.pickCatalog.isFast = this.data.isFast;
-				this.pickCatalog=this.catalogueList[index];
-				this.pickCatalog.isFast = this.data.isFast;
-				this.packageJsonList = this.pickCatalog && this.pickCatalog.packageJson ? JSON.parse(this.pickCatalog.packageJson) : [];
-				this.initStudyTime(this.pickCatalog.studyTime || 0)
-				const url = this.pickCatalog.lineTwo ? this.pickCatalog.lineTwo : this.pickCatalog.videoUrl
-				this.resetAudioContext(url);
-			},
-			resetAudioContext(url) {
-				if (this.audioContext==null) {
-				    this.audioContext = uni.createInnerAudioContext();
-				}
-				this.audioContext.src = url
-				// this.audioContext.src = this.pickCatalog.videoUrl;
-				this.audioContext.onTimeUpdate(()=>{
-					this.initStudyTime(this.audioContext.currentTime)
-				})
-			},
-			changeLine(data) {
-				this.resetAudioContext(data.url)
-			},
-			endedPlayNext(type){
-				let nextCatalog=this.catalogueList[this.pickCatalogIdx+1];
-				if(!nextCatalog){
-					return;
-				}
-				if(nextCatalog && this.pickCatalogIdx<this.catalogueList.length-1){  //未播放到最后一节自动续播
-					this.pickCatalogAction(this.pickCatalogIdx+1)
-				}
-			},
-			endedPlayPrev(){
-				if(this.pickCatalogIdx == 0) {
-					uni.showToast({
-						title: '已经是第一节视频了',
-						icon: 'none',
-						position: 'top',
-						duration: 2000
-					})
-					return 
-				}
-				let nextCatalog=this.catalogueList[this.pickCatalogIdx-1];
-				if(!nextCatalog){
-					return;
-				}
-				this.pickCatalogAction(this.pickCatalogIdx-1)
-			},
-			addStudyCourse(){
-				if(this.catalogueList.length==0 || this.tempAudioDuration==0){
-					return;
-				}
-				// this.pickCatalog=this.catalogueList[this.pickCatalogIdx];
-				// this.packageJsonList = this.pickCatalog && this.pickCatalog.packageJson ? JSON.parse(this.pickCatalog.packageJson) : [];
-				if(this.pickCatalog.isBuy==0){
-					return;
-				}
-				console.log('this.pickCatalog.videoId',this.pickCatalog.videoId)
-				uni.setStorageSync("videoId",this.pickCatalog.videoId);
-				const parmas={"courseId":parseInt(this.courseId),"duration":this.tempAudioDuration,"videoId":this.pickCatalog.videoId};
-				addDuration(parmas).then(res => {
-						if(res.code==200){
-							if(res.alert) {
-								couponPop({},e=>{
-									uni.navigateTo({
-										url:'/pages/doctor/doctorList'
-									})
-								})
-							}
-						}
-					},
-					rej => {}
-				);
-			},
-			addIntegral(){
-				// 观看到视频时长50%加一次芳华币
-				if(this.lookDuration==0 || this.playDuration==0){
-					return;
-				}
-				// this.pickCatalog=this.catalogueList[this.pickCatalogIdx];
-				// this.packageJsonList = this.pickCatalog && this.pickCatalog.packageJson ? JSON.parse(this.pickCatalog.packageJson) : []
-				if(this.lookDuration<this.pickCatalog.seconds*0.5){
-					return;
-				}
-				let data={videoId:this.pickCatalog.videoId,duration:this.lookDuration};
-				getIntegral(data).then(res => {
-						if(res.code==200){
-							uni.showToast({icon:'none',title:res.msg,duration:3000,position:'bottom'});
-							this.countdowning=false;
-						}
-					},
-					rej => {}
-				);
-			},
-			closeShareAct(){
-				this.showShare=false;
-			},
-			closeTherapy() {
-				this.showTherapy = false
-			},
-			goToPro(productId) {
-				this.exitFullscreen = 'yes'+ new Date().getTime()
-				this.showTherapy = false
-				setTimeout(()=> {
-					uni.navigateTo({
-						url: "/pages/store/packageDetails?packageId="+productId
-					});
-				}, 500);
-			},
-			// 返回视频
-			backPlayVideo() {
-				this.showAudio = false;
-				this.audioPlayIng = false;
-				this.isLearning=false;
-				this.pauseFun('audio');
-				this.playFun();
-			},
-			// 点击视频
-			clickVideo() {
-				this.isClickVideo = true
-				setTimeout(()=>{
-					this.isClickVideo = false
-				},3000)
-			},
-			changeCountdowning(data) {
-				this.countdowning=data.countdowning;
-				// 视频是否暂停
-				if(data.isXGPause==false) {
-					setTimeout(()=>{
-						this.isPause = data.isXGPause
-					},3000)
-				} else {
-					this.isPause = data.isXGPause
-				}
-			},
-			onTimeUpdate(data) {
-				this.playDuration = Math.round(data.time)
-				this.initStudyTime(this.playDuration)
-				if(data.time>=this.pickCatalog.seconds){
-					this.countdowning = false;  //观看时长开关关闭					  
-				}
-				if(this.isH5){
-					 if(this.allLookDuration>=300){   //H5未登录状态播放五分钟就跳出登录页面
-						 if(!this.$isLogin()){
-							 this.$showLoginPage();
-							 const type = this.showAudio ? 'audio' : 'video'
-							 this.pauseFun(type);
-						 }
-					 }
-				}
-				else{
-					 if(this.allLookDuration>=120){   //未登录状态播放两分钟就跳出登录页面
-						 if(!this.$isLogin()){
-							 this.$showLoginPage();
-							 const type = this.showAudio ? 'audio' : 'video'
-							 this.pauseFun(type);
-						 }
-					 }
-				}
-				uni.$u.throttle(this.checkTherapy, 1000,false);
-			},
-			checkTherapy() {
-				let currentTime = Math.round(this.tempAudioDuration || 0)
-				let node = this.packageJsonList.filter(item => item.duration == currentTime)
-				if(node&&node.length > 0) {
-					this.nodeTime = node[0].duration
-					this.showTherapyItem = node[0]
-					if(!this.showTherapy) {
-						this.showTherapy = true
-					}
-				} else {
-					if(this.showTherapy && this.nodeTime && this.nodeTime > currentTime) {
-						this.showTherapy = false
-					}
-				}
-			},
-			// 打开集观看提示弹窗
-			openTips(index){
-				// #ifdef APP-PLUS
-				uni.$emit('getTipShowType', {index:index})
-				uni.getSubNVueById('videoPopup').show();
-				// #endif 
-			},
-			tipConfirm() { // 提示确认
-				// 继续播放
-				//传递消息给小节弹窗
-				uni.$emit('pickCatalogIdx', {pickCatalogIdx:this.pickCatalogIdx,type: 'catalogueN'}); 
-				this.playFun()
-			},
-			tipCancel(index) { // 提示取消
-				// 播放选择的一节
-				this.pickCatalogActionFun(index,'catalogueN')
-			}, 
-			// 听声
-			handleListen() {
-				if(this.showAudio) {
-					this.backPlayVideo()
-				} else {
-					// 打开音频
-					this.showAudio = true
-					this.pauseFun('video');
-					this.playFun()
-				}
-			},
-			// 播放音频
-			playAudioAction(type) {
-				if(!this.audioPlayIng){
-					setTimeout(()=>{
-						this.audioContext.play()
-					},200)
-				}
-				else{
-					this.pauseAudioAction()
-				}
-				this.audioPlayIng=!this.audioPlayIng;
-			},
-			// 播放
-			playFun() {
-				// console.log("initSocket videoId:",this.pickCatalog.videoId)
-				this.reOpenSocket = false
-				if(this.pickCatalog.videoId) {
-					this.getDanmuList()
-					if (this.socket) {
-						this.socket.close({
-							success:()=>{
-								this.reOpenSocket = true
-								clearInterval(this.pingpangTimes)
-							}
-						})
-					} else {
-						this.initSocket()
-					}
-				}
-				this.audioPlayIng = false
-				if(this.showAudio) {
-					const ended = this.tempAudioDuration == this.pickCatalog.seconds
-					this.audioContext.seek(ended ? 0: this.tempAudioDuration);
-					// this.audioContext.onSeeked(() => {
-						this.playAudioAction()
-					// })
-				} else {
-					this.videoPlayStatus={
-						status: 'play'+ new Date().getTime(),
-						tempAudioDuration: this.tempAudioDuration || 0,
-						studyTime: this.pickCatalog.studyTime,
-					}
-				}
-			},
-			initStudyTime(time){
-				this.tempAudioDuration = Math.round(time)
-			},
-			// 暂停音频
-			pauseAudioAction() {
-				if(this.audioContext) {
-					setTimeout(()=>{
-						this.audioContext.pause();
-					},200)
-				   clearInterval(this.audioTimer);
-				   this.audioTimer=null;
-				}
-			},
-			destoryAudio() {
-				if(this.audioContext) {
-					this.audioContext.destroy();
-					clearInterval(this.audioTimer);
-					this.audioTimer=null;
-				}
-			},
-			// 暂停
-			pauseFun(type) {
-				this.audioPlayIng = true
-				if(type == 'audio') {
-					this.pauseAudioAction()
-				} else if(type == 'video'){
-					this.videoPlayStatus={
-						status: 'pause'+ new Date().getTime(),
-						tempAudioDuration: this.tempAudioDuration || 0,
-						studyTime: this.pickCatalog.studyTime,
-					}
-				}
-			},
-			closePrivilege(){
-				this.$refs.popPrivilege.close();
-			},
-			closeTip(){
-				this.$refs.popTip.close();
-			},
-			canShowVip(item){
-				return true;
-				if(this.user.isVip){
-					return false;
-				}
-				return item.isVip==1 && item.isBuy==0;
-			},
-			confirmTip() {
-				this.getUserInfo();
-				this.getCourseInfo();
-				this.$refs.popTip.close();
-				uni.showLoading({title:"请稍侯...",mask:true,duration:3000});
-				setTimeout(()=>{
-					this.getCourseOrderById();
-				},2000);
-			},
-			getCourseOrderById(){
-				getCourseOrderById(this.courseOrderId).then(res => {
-					    uni.hideLoading();
-						if(res.code==200){
-							if(res.order.status==2 || res.order.payTime!=null){
-								// #ifdef APP-PLUS
-								if(plus.runtime.channel=="baidu"){  //获取渠道标识
-									let bdCmdType=uni.getStorageSync("bdCmdType");
-									if(bdCmdType!=null && parseInt(bdCmdType)<=2){
-									    //this.$registerIdCode("orders",2,res.order.payMoney.toString()); //已下单
-									}
-								}
-								//  #endif
-								uni.showToast({title:"支付成功",icon:'success'});
-							}
-							else if(res.order.status==1){
-								uni.showToast({title:"课程待支付请稍侯",icon:'none'});
-							}
-							else{
-								uni.showToast({title:"支付失败",icon:'error'});
-							}
-						}
-					},
-					rej => {}
-				);
-			},
-			handleTherapy(item,idx) {
-				this.scrollIntoTherapy = 'therapy' + idx,
-				this.therapyIndex = idx
-				setTimeout(()=> {
-					uni.navigateTo({
-						url: "/pages/store/packageDetails?packageId="+item.packageId
-					});
-				}, 500);
-			},
-			onFullscreenChange(data) {
-				this.fullScreen = data.isFullscreen
-				// direction取为 vertical 或 horizontal
-				this.direction = data.direction
-				if (!data.isFullscreen) {
-					// 退出全屏,锁定竖屏
-					// #ifdef APP-PLUS
-					plus.screen.lockOrientation('portrait-primary');
-					// #endif
-				}
-			},
-			// 全屏返回
-			videoback() {
-				this.exitFullscreen = 'yes'+ new Date().getTime()
-			},
-			// 弹幕
-			openDanmu() {
-				// #ifdef H5
-				uni.showToast({
-					title: "请下载app发弹幕",
-					icon: "none"
-				})
-				return
-				// #endif
-				this.danmuIput= {
-					txt: '',
-					mode: 'scroll',
-					color: '#ffffff',
-					fontSize: '18px',
-				}
-				this.$refs.danmuPopup.open()
-			},
-			keyboardHeightChange(res) {
-				// #ifndef H5
-				 this.danmuboxHeight = res.height
-				// #endif
-			},
-			openDanmuStyle(type) {
-				if(type==2) {
-					uni.hideKeyboard()
-				}
-			},
-			clickStyle(type,value) {
-				if(type=='mode') {
-					this.danmuIput.mode = value
-				} else if(type=='font') {
-					this.danmuIput.fontSize = value
-				} else if(type=='color') {
-					this.danmuIput.color = value
-					this.danmuIput.border = `solid 1px ${value}`
-				}
-			},
-			clickArea(value) {
-				this.danmuFunInfo = {
-					time: new Date().getTime(),
-					event: 'setArea',
-					switch: this.danmuFunInfo.switch,
-					area: value
-				}
-			},
-			// 发送弹幕
-			sendDanmu() {
-				if(this.danmuIput.txt==''||this.danmuIput.txt.trim()=='') {
-					uni.showToast({
-						title: '弹幕不能为空',
-						icon: 'none'
-					})
-					return;
-				}
-				if (!this.isSend) {
-					return;
-				}
-				const param = {
-					userId: this.user.userId || '',
-					userType: 2, // 1-管理员,2-用户
-					courseId: this.courseId,
-					videoId: this.pickCatalog.videoId,
-					type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
-					content: this.danmuIput.txt,
-					time: this.tempAudioDuration, // 弹幕对应视频时间节点()秒
-					fontSize: this.danmuIput.fontSize,
-					mode: this.danmuIput.mode,
-					color: this.danmuIput.color,
-				}
-				saveMsg(param).then(res=>{
-					if(res.code == 200) {
-						const status = res.status ? 0 : 1
-						this.sendMsg(param,status);
-					} else {
-						uni.showToast({
-							title: res.msg,
-							icon: "none"
-						})
-					}
-				})
-			},
-			//  弹幕开关
-			switchDanmu(type) {
-				this.danmuFunInfo = {
-					time: new Date().getTime(),
-					event: 'switch',
-					switch: type,
-					area: this.danmuFunInfo.area
-				}
-			},
-			// 弹幕列表
-			getDanmuList(){
-				this.danmuFunInfo = {
-					time: new Date().getTime(),
-					event: 'clearDanmuList',
-					switch: this.danmuFunInfo.switch,
-					area: this.danmuFunInfo.area,
-				}
-				let patam = {
-					pageNum: 1,
-					pageSize: 300,
-					courseId: this.courseId,
-					videoId: this.pickCatalog.videoId,
-					openCommentStatus: 2,// 1-开启评论;2-开启弹幕;3-关闭
-				}
-				getComments(patam).then(res=>{
-					let danmuList = []
-					if(res.code == 200&&res.data.list&&res.data.list.length>0) {
-						let arry = res.data.list.sort((a, b) => a.time - b.time)
-						danmuList = arry.map(item=>({
-							duration: this.danmuItem.duration,
-							id: item.commentId,
-							txt: item.content,
-							start: Number(item.time || 0)*1000, // 单位:ms 毫秒
-							mode: item.mode|| this.danmuItem.mode,
-							style: {
-								color: item.color || this.danmuItem.style.color,
-								fontSize: item.fontSize || this.danmuItem.style.fontSize,
-								padding: this.danmuItem.style.padding,
-								border:this.user.userId ==item.userId ? item.color ? `solid 1px ${item.color}`: this.danmuItem.style.border : 'none',
-								borderRadius: this.user.userId==item.userId ? this.danmuItem.style.borderRadius : 0,
-								backgroundColor: this.user.userId==item.userId ? this.danmuItem.style.backgroundColor : 'transparent'
-							}
-						}))
-					}
-					try {
-						this.danmuFunInfo = {
-							time: new Date().getTime(),
-							event: 'getDanmuList',
-							switch: this.danmuFunInfo.switch,
-							danmuList: danmuList,
-							area: this.danmuFunInfo.area
-						}
-					} catch (e) {
-						console.log('e',e)
-					}
-				})
-			},
-			//创建一个socket连接
-			initSocket() {
-				let userId = this.user.userId;
-				let that = this;
-				this.socket = uni.connectSocket({
-					// url: getApp().globalData.danmuWSUrl + "/ws/barrage/" + this.pickCatalog.videoId,
-					url: getApp().globalData.danmuWSUrl + "/app/webSocket/" + userId,
-					multiple: true,
-					// header: {
-					// 	'token': uni.getStorageSync('AppToken')
-					// },
-					success: res => {
-						console.log('WebSocket连接已打开1!');
-						that.isSocketOpen = true
-						that.reOpenSocket = false
-						
-						// 保持心跳
-						if(that.pingpangTimes) {
-							clearInterval(that.pingpangTimes)
-							that.pingpangTimes= null
-						}
-						that.pingpangTimes=setInterval(()=>{
-							// let data={cmd:"heartbeat",userId: userId};
-							let data = {
-								userId: userId || '',
-								userType: 2, // 1-管理员,2-用户
-								courseId: that.courseId,
-								videoId: that.pickCatalog.videoId,
-								type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
-								cmd:'heartbeat'
-							}
-							that.socket.send({
-								data: JSON.stringify(data),
-								success: () => {
-									// console.log('WebSocket发送心条数据!');
-								},
-								fail: () => {
-									that.isSocketOpen=false
-								}
-							});
-						},15000)
-					},
-					error: err => {
-						console.log(err)
-					},
-				})
-				this.socket.onMessage((res) => {
-					// console.log("收到消息parse",JSON.parse(res.data))
-					const redata = JSON.parse(res.data);
-					if(redata.cmd=="heartbeat"){
-						  //心跳
-						  // console.log("heartbeat")
-					}else if(redata.cmd=="sendMsg"){
-						that.isSend=true;
-						that.addMsg(redata);
-					}
-				})
-				//监听socket打开
-				this.socket.onOpen(() => {
-					console.log('WebSocket连接已打开2!');
-					that.isSocketOpen = true
-					that.reOpenSocket = false
-					that.isSend = true;
-				})
-				//监听socket关闭
-				this.socket.onClose(() => {
-					that.isSocketOpen = false
-					that.socket = null
-					console.log('WebSocket连接已关闭!',that.reOpenSocket);
-					if(that.pingpangTimes) {
-						clearInterval(that.pingpangTimes)
-						that.pingpangTimes= null
-					}
-					if(that.reOpenSocket) {
-						//重启
-						that.initSocket()
-					}
-					// that.msgEnd = true
-				})
-				//监听socket错误
-				this.socket.onError((err) => {
-					console.log("socket err:",err)
-					that.isSocketOpen = false
-					that.reOpenSocket = false
-					that.socket = null
-					if(that.pingpangTimes) {
-						clearInterval(that.pingpangTimes)
-						that.pingpangTimes= null
-					}
-				})
-			},
-			sendMsg(param,status) {
-				if(status == 1) {
-					this.isSend = true;
-					this.addMsg({msg: param.content,time: param.time},2)
-					return
-				}
-				if (this.isSocketOpen) {
-					var userId = this.user.userId;
-					var data = {
-						userId: userId || '',
-						userType: 2, // 1-管理员,2-用户
-						courseId: this.courseId,
-						videoId: this.pickCatalog.videoId,
-						type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
-						msg: param.content,
-						cmd: 'sendMsg',
-						time: param.time,
-						fontSize: param.fontSize,
-						mode: param.mode,
-						color: param.color,
-					};
-					this.socket.send({
-						data: JSON.stringify(data),
-						success: () => {
-							console.log("发送成功",data)
-							this.$refs.danmuPopup.close()
-							this.isSend = false;
-						},
-						fail: () => {
-							console.log("发送失败")
-						}
-					});
-							
-				}
-			},
-			// 收到消息
-			addMsg(data,type) {
-				let obj  = {}
-				if (type==2) {
-					obj = {
-						content: data.msg,
-						courseId: this.courseId,
-						type: 1,
-						userId: this.userId,
-						userType: 2,
-						videoId: this.pickCatalog.videoId,
-						nickName: '',
-						time: data.time,
-						fontSize: data.fontSize,
-						mode: data.mode,
-						color: data.color,
-					}
-				} else {
-					obj = {
-						content: data.msg,
-						courseId: this.courseId,
-						type: data.type,
-						userId: data.userId,
-						userType: data.userType,
-						videoId: this.pickCatalog.videoId,
-						nickName: data.nickName,
-						time: data.time,
-						fontSize: data.fontSize,
-						mode: data.mode,
-						color: data.color,
-					}
-				}
-				this.addDanmuMsg(obj)
-			},
-			addDanmuMsg(content) {
-				const id = content.userId +'_' + new Date().getTime()
-				const mystyle = {
-					color: content.color || this.danmuItem.style.color,
-					fontSize: content.fontSize || this.danmuItem.style.fontSize,
-					border: content.color ? `solid 1px ${content.color}`: this.danmuItem.style.border,
-					borderRadius: this.danmuItem.style.borderRadius,
-					padding: this.danmuItem.style.padding,
-					backgroundColor: this.danmuItem.style.backgroundColor
-				}
-				const otherstyle = {
-					color: content.color || this.danmuItem.style.color,
-					fontSize: content.fontSize || this.danmuItem.style.fontSize,
-					padding: this.danmuItem.style.padding,
-				}
-				const mode = content.mode || this.danmuItem.mode
-				const danmuItem = {
-					//发送弹幕
-					duration: content.duration ? content.duration : mode=='scro11'? this.danmuItem.duration : this.danmuItem.duration,
-					id: content.id || id,
-					txt: content.content,
-					mode: mode,
-					style: this.user.userId == content.userId ? mystyle : otherstyle
-				}
-				this.danmuFunInfo = {
-					time: new Date().getTime(),
-					event: 'send',
-					switch: this.danmuFunInfo.switch,
-					danmuItem: danmuItem,
-					area: this.danmuFunInfo.area
-				}
-			},
-		},
-		created() {
-			let that = this;
-			uni.$on('backStudyTime', function(data) {
-				 that.videoId=data.videoId;
-				 that.pickCatalogIdx=that.getCatalogIdx();
-				 that.pickCatalog=that.catalogueList[that.pickCatalogIdx];
-				 that.pickCatalog.studyTime=data.studyTimes;
-				 that.catalogueList[that.pickCatalogIdx]=that.pickCatalog;
-				
-				 that.packageJsonList = that.pickCatalog && that.pickCatalog.packageJson ? JSON.parse(that.pickCatalog.packageJson) : []
-				 that.pickCatalogMethod(that.pickCatalogIdx);
-			});
-			
-			uni.$on('showPayTips', function(data) {
-				console.log("qxj showPayTips")
-				that.courseOrderId=data.courseOrderId;
-				//that.showPayTips=true;
-				that.$refs.popTip.open();
-			});
-			
-			uni.$on('refreshUser', function(data) {
-				that.getUserInfo();
-				that.getCourseInfo();
-			});
-			
-			uni.$on('pickCatalogAction', function(data) {
-				that.pickCatalogAction(data.index,data.type);
-			});
-			uni.$on('refreshCatalog', function(index) {
-				let catalog=that.catalogueList[index];
-				catalog.isBuy=true;
-				that.catalogueList[index]=catalog;
-				that.pickCatalogAction(index);
-			});
-		},
-		beforeDestroy() {
-			if(this.socket!=null){
-				this.socket.close()
-			}
-			if(this.pingpangTimes) {
-				clearInterval(this.pingpangTimes)
-				this.pingpangTimes= null
-			}
-			this.danmuFunInfo = {
-				time: new Date().getTime(),
-				event: '',
-				area: this.danmuFunInfo.area
-			}
-		},
-		destroyed() {
-			uni.$off("backStudyTime");
-			uni.$off("refreshUser");
-			uni.$off("showPayTips");
-			uni.$off("pickCatalogAction");
-			uni.$off("refreshTitle");
-			uni.$off("refreshCatalog");
-			// #ifdef APP-PLUS
-			uni.$off('getEventType');
-			// #endif 
-		}
-	}
-
-</script>
-
-<script module="xgplayer" lang="renderjs">
-	// import Player from "xgplayer"
-	// import Mp4Plugin from "xgplayer-mp4"
-	// import 'xgplayer/dist/index.min.css';
-	import Danmu from 'xgplayer/es/plugins/danmu'
-	// import "xgplayer/es/plugins/danmu/index.css"
-	let xgPlayer
-	const openDanmu='/static/images/other/course/danmukai.png';
-	const closeDanmu='/static/images/other/course/danmukai_1.png';
-	export default {
-		data() {
-			return {
-				player: null,
-				ownerInstance: null,
-				ownerInstanceVideo: null,
-				isFullscreen: false,
-				isCSSFull: false,
-				lineName:"",
-				danmuInstance: null,
-				newDanmu: {
-					//发送弹幕
-					duration: 10000,
-					id: '',
-					txt: '',
-					mode: 'scroll',
-					style: {
-						color: '#ffffff',
-						fontSize: '18px',
-						border: 'solid 1px #ffffff',
-						borderRadius: '10px',
-						padding: '5px 11px',
-						backgroundColor: 'rgba(255, 255, 255, 0.1)'
-					}
-				},
-				isXGPause: true,
-			}
-		},
-		beforeDestroy() {
-			if(this.player) {
-				if(this.isFullscreen) {
-					if(this.isCSSFull) {
-						this.player.exitCssFullscreen()
-					} else {
-						this.player.exitFullscreen()
-					}
-				}
-				this.player.destroy() // 销毁播放器
-				this.player = null 
-			}
-		},
-		methods: {
-			initJs(newValue, oldValue,ownerInstance) {
-				if (typeof window.Player === 'function') {
-					this.initPlayer(newValue, oldValue,ownerInstance)
-				} else {
-					// 动态引入较大类库避免影响页面展示
-					const script = document.createElement('script')
-					// view 层的页面运行在根目录
-					script.src = 'https://unpkg.byted-static.com/xgplayer/3.0.20/dist/index.min.js'
-					script.onload = this.initPlayer.bind(this, newValue, oldValue,ownerInstance)
-					document.head.appendChild(script)
-					const l_tag = document.createElement('link'); // 引入播放器css
-					l_tag.rel = 'stylesheet';
-					l_tag.href = 'https://unpkg.byted-static.com/xgplayer/3.0.20/dist/index.min.css';
-					document.body.appendChild(l_tag);
-				}
-			},
-
-			initPlayer(newValue, oldValue,ownerInstance) {
-				this.Events = window.Player.Events
-				if (!this.ownerInstance) this.ownerInstance = ownerInstance
-				let xgplayerOption = {
-					lang: 'zh',
-					url: "",
-					id: 'detail-video',
-					autoplay: false,
-					// height: uni.upx2px(422),
-					height: '100%',
-					width: '100%',
-					poster: "",
-					'x5-video-player-type': 'h5', // 微信内置浏览器设置,防止被浏览器劫持
-					playsinline: true,
-					playbackRate: false,
-					ignores: ['volume', 'miniscreen', 'keyboard'],
-					plugins: [Danmu],
-					danmu: {
-						"comments": [],
-						"area": {
-								  "start": 0,
-								  "end": 0.25
-						},
-						"closeDefaultBtn": true,
-						"defaultOpen": true,
-						ext: {
-							channelSize: 30
-						}
-					},
-					startTime: 0, // 起始播放时间
-					fullscreenTarget: document.querySelector('.video-container'),
-					controls: {
-						root: document.getElementById('controls_new_root')  // 指定播放器之外挂载dom
-					} ,
-					// icons: {
-					// 	openDanmu: openDanmu,
-					// 	closeDanmu: closeDanmu
-					// },
-					commonStyle: {
-						// 播放完成部分进度条底色
-						playedColor: '#FF5C03',
-						cachedColor: 'transparent'
-					},
-					seekedStatus: 'auto',
-					disableGesture: true,
-					closeVideoTouch: true,
-					closeVideoDblclick: true,
-					closeVideoClick: false,
-					progress: {
-						isDraggingSeek: false,
-						isCloseClickSeek: true,
-						closeMoveSeek: true
-					},
-					fullscreen:{
-						useScreenOrientation: true,
-						lockOrientationType: 'landscape'
-					},
-					definition: {
-						defaultDefinition: "线路二"
-					}
-				}
-				xgplayerOption.url = newValue.lineTwo ? newValue.lineTwo : newValue.videoUrl
-				xgplayerOption.definition.defaultDefinition = newValue.lineTwo ? '线路二' :'线路一'
-				if(!xgplayerOption.url) return
-				xgplayerOption.poster = newValue.thumbnail
-				if(newValue.studyTime && newValue.seconds != newValue.studyTime) {
-					xgplayerOption.startTime = newValue.studyTime
-				}
-				if(newValue.isFast == 1) {
-					// 允许拖动进度条
-					xgplayerOption.progress.isCloseClickSeek = false
-					xgplayerOption.progress.closeMoveSeek = false
-				}else {
-					// 不允许拖动进度条
-					xgplayerOption.progress.isCloseClickSeek = true
-					xgplayerOption.progress.closeMoveSeek = true
-				}
-				if(this.player) { 
-					// this.player.off()
-					this.player.playNext({
-						url: newValue.lineTwo ? newValue.lineTwo : newValue.videoUrl,
-						startTime: newValue.startTime || 0,
-						poster:xgplayerOption.thumbnail  || '',
-						ignores:xgplayerOption.ignores,
-						progress: xgplayerOption.progress,
-						definition: xgplayerOption.definition,
-					})
-				} else {
-					this.player = new Player(xgplayerOption);
-					this.danmuInstance = this.player.getPlugin('danmu')
-					this.progressMove(xgplayerOption)
-				}
-				if(newValue.isFast == 1) {
-					this.player.getPlugin('progress').show()
-				}else {
-					this.player.getPlugin('progress').hide()
-				}
-				let lines=[]
-				if(newValue.lineOne) {
-					lines.push({
-						name: '线路一', 
-						definition: '线路一', 
-						url:newValue.lineOne
-					})
-				}
-				if(newValue.lineTwo) {
-					lines.push({
-						name: '线路二', 
-						definition: '线路二', 
-						url:newValue.lineTwo
-					})
-				} 
-				if(newValue.lineThree) {
-					lines.push({
-						name: '线路三', 
-						definition: '线路三', 
-						url:newValue.lineThree
-					})
-				} 
-				this.player.emit('resourceReady', lines)
-				this.rjsPlayFun(xgplayerOption)
-			},
-			progressMove(data) {
-		
-				const Events = this.Events
-				this.player.on(Events.PlAY, () => {
-					this.isXGPause = false
-				  this.ownerInstance.callMethod("changeCountdowning",{countdowning:true,isXGPause:this.isXGPause})
-				})
-				this.player.on(Events.PLAYING, () => {
-					// console.log("===播放Events.PLAYING")
-					this.isXGPause = false
-				  this.ownerInstance.callMethod("changeCountdowning",{countdowning:true,isXGPause:this.isXGPause})
-				})
-				this.player.on(Events.WAITING, () => {
-					this.ownerInstance.callMethod("changeCountdowning",{countdowning:false,isXGPause:this.isXGPause})
-				})
-				this.player.on(Events.PAUSE, () => {
-					console.log("===暂停Events.PAUSE")
-					this.isXGPause = true
-				  this.ownerInstance.callMethod("changeCountdowning",{countdowning:false,isXGPause:this.isXGPause})
-				})
-				this.player.on(Events.ERROR, (error) => {
-					console.log('video error:', error)
-					this.ownerInstance.callMethod("changeCountdowning",{countdowning:false,isXGPause:this.isXGPause})
-				})
-				// 监听用户的播放进度
-				this.player.on(Events.TIME_UPDATE, () => {
-					this.ownerInstance.callMethod("onTimeUpdate",{time: this.player.currentTime});
-				})
-				this.player.on(Events.ENDED, () => {
-					this.ownerInstance.callMethod("changeCountdowning",{countdowning:false,isXGPause:this.isXGPause})
-					this.ownerInstance.callMethod("endedPlayNext")
-				})
-				this.player.on(Events.FULLSCREEN_CHANGE, (isFullscreen) => {
-					if(this.isFullscreen == isFullscreen) return
-					this.isFullscreen = isFullscreen
-					plus.screen.lockOrientation('landscape')
-					this.ownerInstance.callMethod("onFullscreenChange",{isFullscreen:isFullscreen})
-				})
-				this.player.on(Events.CSS_FULLSCREEN_CHANGE, (isFullscreen) => {
-					if(this.isFullscreen == isFullscreen) return
-					this.isCSSFull = true
-					this.isFullscreen = isFullscreen
-					this.ownerInstance.callMethod("onFullscreenChange",{isFullscreen:isFullscreen})
-				})
-				// 清晰度发生变化
-				this.player.on(Events.DEFINITION_CHANGE, (res) => {
-					if(this.lineName == res.to.name) return
-					this.lineName = res.to.name
-					this.ownerInstance.callMethod("changeLine",{url: res.to.url})
-				})
-			},
-			rjsPlayFun(xgplayerOption){
-				this.ownerInstance.callMethod("playFun",{time: xgplayerOption.startTime})
-			},
-			changeVideo(newValue, oldValue,ownerInstance) {
-				if (!this.ownerInstanceVideo) this.ownerInstanceVideo = ownerInstance
-				if(this.player) {
-					if(newValue.status.indexOf('play') > -1) {
-						const tempAudioDuration = newValue.tempAudioDuration
-						const flag = newValue.tempAudioDuration != newValue.studyTime
-						if(flag) {
-							this.player.seek(tempAudioDuration)
-							this.player.on(this.Events.SEEKED, () => {
-								setTimeout(()=>{
-									this.player.play()
-								},200)
-							})
-						} else {
-							setTimeout(()=>{
-								this.player.play()
-							},200)
-						}
-					}else if(newValue.status.indexOf('pause') > -1) {
-						this.player.pause()
-					}
-				}
-			},
-			handleExitFullscreen(newValue, oldValue,ownerInstance) {
-				// 退出全屏
-				if(this.player&&this.isFullscreen && newValue.indexOf('yes') > -1) {
-					if(this.isCSSFull) {
-						this.player.exitCssFullscreen()
-					} else {
-						this.player.exitFullscreen()
-					}
-				}
-			},
-			// 发送弹幕
-			danmuFun(newValue, oldValue,ownerInstance) {
-				if(oldValue && newValue.event == oldValue.event && newValue.time == oldValue.time) {
-					return
-				}
-				if(newValue.event=='send') {
-					// 发送弹幕
-					// console.log("===========发送弹幕",this.danmuInstance)
-					this.danmuInstance.sendComment(newValue.danmuItem)
-				}else if(newValue.event=='switch'){
-					// 弹幕开关
-					// console.log("===========弹幕开关",newValue.switch)
-					if(newValue.switch == 1) {
-						this.danmuInstance.start()
-					} else {
-						this.danmuInstance.stop()
-					}
-				} else if(newValue.event=="getDanmuList") {
-					// console.log("===========弹幕列表")
-					this.danmuInstance.updateComments(newValue.danmuList,true)
-				} else if(newValue.event=="clearDanmuList") {
-					// console.log("===========清除列表")
-					this.danmuInstance.clear()
-				} else if(newValue.event=="setArea"){
-					this.danmuInstance.setArea({
-						start: 0,
-						end: newValue.area,
-					})
-				}
-			}
-		}
-	}
-</script>
-
-<style>
-	@import './danmu.css';
-</style>
-<style lang="scss" scoped>
-	@mixin u-flex($flexD, $alignI, $justifyC) {
-		display: flex;
-		flex-direction: $flexD;
-		align-items: $alignI;
-		justify-content: $justifyC;
-	}
-	.es-mr-24px {
-		margin-right: 24px;
-	}
-	.coloritem {
-		height: 24px;
-		width: 24px;
-		margin-bottom: 12px;
-		border-radius: 5px;
-	}
-	.danmu-controls {
-		background-color: #F5F7FA;
-		overflow: hidden;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 12px;
-		color: #999999;
-		padding: 0 10px;
-		border-radius: 50px 0 0 50px;
-		height: 28px;
-		overflow: hidden;
-		box-sizing: border-box;
-		&-r {
-			padding: 0 10px;
-			border-radius: 0 50px 50px 0;
-			height: 28px;
-			overflow: hidden;
-			box-sizing: border-box;
-			background-color: #fff;
-			image {
-				height: 20px;
-				width: 20px;
-			}
-		}
-	}
-	::v-deep {
-		.danmu-switch-open, .danmu-switch-closed {
-			height: 25px;
-			width:  25px;
-		}
-	}
-	.xgplayer-switch {
-		background-image: linear-gradient(180deg,transparent,rgba(0,0,0,.37),rgba(0,0,0,.75),rgba(0,0,0,.75));
-	}
-	.danmuPopup {
-		background-color: #fff;
-		&-head {
-			width: 100%;
-			padding: 10px;
-			box-sizing: border-box;
-			overflow: hidden;
-			@include u-flex(row,center,flex-start);
-			.danmu-icon {
-				height: 24px;
-				width: 24px;
-				margin-right: 12px;
-			}
-		}
-		&-input {
-			flex: 1;
-			height: 35px;
-		}
-		&-send {
-			flex-shrink: 0;
-			height: 35px;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			padding: 5px 15px;
-			box-sizing: border-box;
-			background: #FF5C03 !important;
-			border-radius: 22px;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 500;
-			font-size: 15px;
-			color: #fff !important;
-			margin-left: 12px;
-			&::after {
-				border: none;
-			}
-		}
-		&-con {
-			background-color: #F5F7FA;
-			padding: 24px 12px 48px 12px;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 14px;
-			color: #757575;
-		}
-	}
-	.content {
-		background: #f7f7f7;
-	}
-	.cousrseImg {
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 422rpx;
-		background-color: #000;
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-	.video-box {
-		width: 100%;
-		height: 422rpx;
-		overflow: hidden;
-		position: relative;
-		// padding-top: var(--status-bar-height);
-	}
-
-	.scroll-Y {
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 28rpx;
-		color: #222222;
-	}
-
-	.horizontal {
-		width: 130px;
-		height: 150px;
-		position: absolute;
-		bottom: 50px;
-		left: 20px;
-		z-index: 999;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: flex-end;
-		background-color: transparent;
-
-		.es-w-40 {
-			width: 20px;
-		}
-
-		.es-h-40 {
-			height: 20px;
-		}
-
-		.goods {
-			width: 120px;
-			height: 140px;
-			border-radius: 10px;
-			background-color: rgba(255, 255, 255, 0.4);
-			overflow: hidden;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			justify-content: center;
-		}
-
-		.goodsimg {
-			width: 100px;
-			height: 100px;
-			border-radius: 10px;
-		}
-
-		.goodsname {
-			width: 100px;
-			font-size: 12px;
-			box-sizing: border-box;
-			padding-top: 7px;
-			verflow: hidden;
-			word-break: break-all;
-		}
-	}
-
-	.rotate {
-		transform: rotate(-180deg);
-	}
-
-	.status_bar {
-		background-color: #000;
-	}
-
-	.back-img {
-		width: 25px;
-		height: 25px;
-		position: absolute;
-		top: 10px;
-		left: 34rpx;
-		z-index: 99;
-	}
-
-	.audiobox {
-		width: 100%;
-		height: 422rpx;
-		position: absolute;
-		top: 0;
-		left: 0;
-		background-color: #333;
-		z-index: 9990;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 26rpx;
-		color: #fff;
-
-		&-video {
-			background-color: rgba(255, 255, 255, 0.3);
-			padding: 8rpx 20rpx;
-			border-radius: 50rpx;
-			position: absolute;
-			bottom: 40rpx;
-			left: 50%;
-			transform: translateX(-50%);
-			z-index: 9991;
-			text-align: center;
-		}
-
-		&-title {
-			position: absolute;
-			top: 0;
-			left: 0;
-			z-index: 9991;
-			padding: 30rpx 40rpx;
-			width: 100%;
-			box-sizing: border-box;
-			background: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.8) 100%);
-			display: flex;
-			align-items: center;
-			.back {
-				width: 50rpx;
-				height: 50rpx;
-				margin-right: 15rpx;
-				flex-shrink: 0;
-			}
-		}
-
-		&-time {
-			margin-top: 18rpx;
-			font-size: 24rpx;
-		}
-	}
-	.scroll-Y {
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 28rpx;
-		color: #222222;
-	}
-
-	.video-info {
-		padding: 24rpx;
-		background-color: #fff;
-
-		&-header {
-			width: 100%;
-			@include u-flex(row, center, space-between);
-		}
-
-		&-headerl {
-			flex: 1;
-			@include u-flex(row, center, flex-start);
-			font-weight: 500;
-			font-size: 32rpx;
-			overflow: hidden;
-
-			image {
-				flex-shrink: 0;
-				width: 88rpx;
-				height: 88rpx;
-				margin-right: 28rpx;
-				background: #F5F7FA;
-				border-radius: 50%;
-				overflow: hidden;
-			}
-		}
-
-		.follow-btn {
-			@include u-flex(row, center, center);
-			height: 56rpx;
-			min-width: 154rpx;
-			padding: 0 23rpx;
-			background: #FF5C03;
-			border-radius: 28rpx 28rpx 28rpx 28rpx;
-			color: #FFFFFF;
-			font-size: 28rpx;
-
-			image {
-				height: 32rpx;
-				width: 32rpx;
-				margin-right: 6rpx;
-			}
-		}
-
-		&-voice {
-			width: 100%;
-			padding: 24rpx 20rpx 38rpx 28rpx;
-			margin-top: 26rpx;
-			background: #F5F7FA;
-			border-radius: 16rpx 16rpx 16rpx 16rpx;
-			box-sizing: border-box;
-
-			image {
-				width: 48rpx;
-				height: 48rpx;
-			}
-
-			&-l {
-				@include u-flex(row, center, flex-start);
-
-				image {
-					margin-right: 20rpx;
-				}
-			}
-		}
-
-		&-voicebox1 {
-			@include u-flex(row, center, space-between);
-		}
-
-		&-voicebox2 {
-			padding: 24rpx 0;
-			@include u-flex(row, center, space-between);
-			font-weight: 400;
-			font-size: 26rpx;
-			color: #757575;
-		}
-
-		::v-deep .uni-collapse-item__title-arrow {
-			margin-right: -8rpx;
-		}
-
-		.opacity {
-			position: relative !important;
-			opacity: 1 !important;
-			z-index: 1 !important;
-		}
-
-		&-desc {
-			margin-bottom: 32rpx;
-			font-weight: 400;
-			font-size: 28rpx;
-			color: #222222;
-			word-break: break-all;
-			overflow: hidden;
-			line-height: 42rpx;
-			position: absolute;
-			opacity: 0;
-			z-index: -1;
-
-			.desc-image {
-				height: 60rpx;
-				width: 100%;
-				position: absolute;
-				bottom: 0;
-				left: 0;
-			}
-		}
-
-		.text-clamp {
-			display: -webkit-box;
-			-webkit-line-clamp: 2;
-			/* 显示的行数 */
-			-webkit-box-orient: vertical;
-			/* 内容会垂直堆叠 */
-			overflow: hidden;
-			/* 隐藏溢出的内容 */
-			text-overflow: ellipsis;
-			/* 当内容被裁剪时显示省略号 */
-		}
-
-		&-footer {
-			@include u-flex(row, center, space-between);
-			color: #757575;
-			font-weight: 400;
-			font-size: 24rpx;
-
-			view {
-				width: 128rpx;
-				height: 104rpx;
-				@include u-flex(column, center, center);
-			}
-
-			image {
-				width: 48rpx;
-				height: 48rpx;
-				margin-bottom: 8rpx;
-			}
-		}
-	}
-
-	.box-header {
-		height: 80rpx;
-		padding: 0 24rpx;
-		@include u-flex(row, center, space-between);
-		font-weight: 500;
-		font-size: 24rpx;
-		color: #999999;
-
-		&-title {
-			color: #222222;
-			font-size: 34rpx;
-		}
-
-		&-r {
-			@include u-flex(row, center, flex-start);
-
-			image {
-				width: 48rpx;
-				height: 48rpx;
-			}
-		}
-	}
-
-	.therapy {
-		background-color: #fff;
-		padding-left: 24rpx;
-		padding-bottom: 20rpx;
-
-		&-scrollx {
-			white-space: nowrap;
-			width: 100%;
-			// margin-left: 24rpx;
-		}
-
-		&-scrollitem {
-			display: inline-block;
-			overflow: hidden;
-			background: #F5F7FA;
-			padding: 10rpx;
-			margin-right: 20rpx;
-			border-radius: 10rpx;
-			overflow: hidden;
-			border: 1rpx solid #F5F7FA;
-			box-sizing: border-box;
-			position: relative;
-			overflow: hidden;
-
-			image {
-				width: 200rpx;
-				height: 200rpx;
-				border-radius: 10rpx;
-				background-color: #F5F7FA;
-			}
-
-			&::after {
-				content: '查看详情';
-				background-color: #F5F7FA;
-				position: absolute;
-				top: 0;
-				left: 0;
-				font-weight: 400;
-				font-size: 20rpx;
-				padding: 4rpx 14rpx;
-				border-radius: 10rpx 0 10rpx 0;
-				color: #757575;
-			}
-		}
-
-		&-active {
-			background: #fff;
-			border: 1rpx solid #FF5C03;
-
-			.therapy-goodsname {
-				color: #FF5C03 !important;
-			}
-
-			&::after {
-				background: #fff;
-				color: #FF5C03 !important;
-			}
-		}
-
-		&-goodsname {
-			margin-top: 6rpx;
-			width: 200rpx;
-			min-height: 64rpx;
-			font-size: 24rpx;
-			color: #757575;
-			word-break: break-all;
-			white-space: normal;
-		}
-	}
-
-	.video-directory {
-		background-color: #fff;
-		padding-top: 12rpx;
-		margin-top: 20rpx;
-
-		&-scrollx {
-			white-space: nowrap;
-			width: calc(100% - 24rpx);
-			margin-left: 24rpx;
-		}
-
-		&-scrollitem {
-			display: inline-block;
-			width: 276rpx;
-			height: 160rpx;
-			background: #F5F7FA;
-			border-radius: 8rpx 8rpx 8rpx 8rpx;
-			margin-right: 18rpx;
-			padding: 20rpx 12rpx 20rpx 20rpx;
-			box-sizing: border-box;
-			position: relative;
-			margin-bottom: 20rpx;
-		}
-
-		.freeflag {
-			min-width: 68rpx;
-			height: 32rpx;
-			padding: 0 12rpx 0 12rpx;
-			text-align: center;
-			line-height: 32rpx;
-			position: absolute;
-			right: 0;
-			top: 0;
-			font-weight: 500;
-			font-size: 20rpx;
-			color: #FFFFFF;
-			border-radius: 0 8rpx 0 8rpx;
-			&-free {
-				// background: url('@/static/image/hall/free_lable_bg.png') no-repeat right / 100% 32rpx;
-				background-color: #FF5C03;
-			}
-
-			&-member {
-				// background: url('@/static/image/hall/member_label_bg.png') no-repeat right / 100% 32rpx;
-				background-color: #FFB205;
-			}
-		}
-
-		&-num {
-			font-weight: 500;
-			font-size: 28rpx;
-			@include u-flex(row, center, flex-start);
-
-			image,
-			.empty {
-				width: 48rpx;
-				height: 48rpx;
-				margin-left: 10rpx;
-			}
-		}
-
-		&-title {
-			@include u-flex(row, center, space-between);
-			font-size: 24rpx;
-			color: #757575;
-			word-break: break-all;
-			white-space: normal;
-
-			.imagebox {
-				flex-shrink: 0;
-				margin: 0 8rpx;
-				position: relative;
-
-				image {
-					width: 92rpx;
-					height: 72rpx;
-					border-radius: 8rpx 8rpx 8rpx 8rpx;
-					overflow: hidden;
-				}
-			}
-		}
-
-		.mask {
-			width: 92rpx;
-			height: 72rpx;
-			border-radius: 8rpx 8rpx 8rpx 8rpx;
-			background: rgba(0, 0, 0, 0.2);
-			overflow: hidden;
-			position: absolute;
-			top: 0;
-			left: 0;
-			z-index: 1;
-			@include u-flex(row, center, center);
-
-			image {
-				width: 24rpx;
-				height: 24rpx;
-			}
-		}
-
-		.active-scrollitem {
-			background: #FCF0E7;
-			color: #FF5C03;
-
-			.video-directory-title {
-				color: #FF5C03;
-			}
-		}
-	}
-
-	.video-comment {
-		background-color: #fff;
-		padding-top: 12rpx;
-		margin-top: 20rpx;
-	}
-
-	.hall-box {
-		@include u-flex(row, center, flex-start);
-		flex-wrap: wrap;
-		margin: 0 -18rpx -18rpx 0;
-		padding: 12rpx 24rpx 24rpx 24rpx;
-
-		.gapitem {
-			margin: 0 18rpx 18rpx 0;
-		}
-	}
-
-	.popbox {
-		background-color: #fff;
-		position: relative;
-
-		.box-header {
-			padding-top: 12rpx;
-			padding-bottom: 12rpx;
-			box-sizing: border-box;
-			background-color: #fff;
-		}
-
-		.popbox-body {
-
-			.comment,
-			.directoryinfo {
-				padding: 24rpx;
-			}
-		}
-
-		.search-box {
-			@include u-flex(row, center, space-between);
-			padding: 10px 24rpx;
-
-			.search {
-				padding: 0;
-				flex: 1;
-
-				image {
-					width: 24rpx;
-					height: 24rpx;
-					padding-left: 16rpx;
-				}
-			}
-		}
-	}
-
-	.search-btn {
-		flex-shrink: 0;
-		height: 68rpx;
-		padding: 0 42rpx;
-		margin-left: 20rpx;
-		background: #FCF0E7;
-		border-radius: 34rpx 34rpx 34rpx 34rpx;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 600;
-		font-size: 26rpx;
-		color: #FF5C03;
-		text-align: center;
-		line-height: 68rpx;
-	}
-
-	.comment-inputbox {
-		@include u-flex(row, center, space-between);
-		padding: 28rpx 24rpx;
-		box-sizing: border-box;
-		background: #FFFFFF;
-
-		.inputbox {
-			flex: 1;
-			height: 72rpx;
-			padding-left: 24rpx;
-			background: #F5F7FA;
-			border-radius: 36rpx 36rpx 36rpx 36rpx;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 26rpx;
-			color: #999999;
-			line-height: 72rpx;
-		}
-
-		.release-btn {
-			@extend .search-btn;
-		}
-	}
-
-	.audio {
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 500;
-		font-size: 24rpx;
-		color: #757575;
-
-		&-play {
-			display: flex;
-			flex-direction: row;
-			align-items: center;
-		}
-
-		&-icon {
-			width: 48rpx;
-			height: 48rpx;
-		}
-
-		&-slider {
-			flex: 1;
-		}
-
-		&-time {
-			flex-shrink: 0;
-		}
-	}
-
-	.vipCourseBtn {
-		background: #1B1F22;
-		border-radius: 46rpx;
-		border: 1px solid #FFDAA3;
-		color: #FFDAA3;
-		width: calc(33.33333% - 46.6666rpx);
-	}
-
-	.vipAc {
-		background: linear-gradient(90deg, #FFE0B2, #F8BA8B);
-		border-radius: 46rpx;
-		border: 1px solid #FFDAA3;
-		color: #1B1F22;
-	}
-
-	.privilegeBox {
-		background-color: #171a1d;
-		box-sizing: border-box;
-	}
-
-	.primenu-box {
-		border-radius: 16rpx;
-		margin-top: 0rpx;
-		padding: 10rpx 20rpx;
-	}
-
-	.content-inner {
-		display: flex;
-		flex-wrap: wrap;
-		min-height: 310rpx;
-	}
-
-	.content-inner .item {
-		width: calc(33.3333333%);
-		height: 150rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-		margin-top: 0rpx;
-
-	}
-
-	.content-inner .item .img {
-		width: 84rpx;
-		height: 84rpx;
-		margin-bottom: 8rpx;
-	}
-
-	.content-inner .item .label {
-		font-size: 32rpx;
-		color: #83878A;
-
-	}
-
-	.vipMethodItem {
-		border-radius: 10rpx;
-		width: calc(100%);
-		height: 70rpx;
-		color: #FDD8A1;
-	}
-
-	.payTypeItem {
-		background-color: #1B1F22;
-		border: 1px solid #fff;
-		border-radius: 10rpx;
-		width: calc(50% - 15rpx);
-		height: 94rpx;
-	}
-
-	.circle {
-		border: 1px solid #FDD8A1;
-	}
-
-	.pt_ac {
-		border: 1px solid #FDD8A1;
-	}
-
-	.slider-box {
-		flex: 1
-	}
-</style>

+ 422 - 191
pages_live/components/liveVideo.vue

@@ -9,9 +9,27 @@
 					orientation="vertical" :enable-play-gesture="false" min-cache="1" max-cache="3"
 					@statechange="onLiveStateChange" @error="onLiveError" class="item"></live-player> -->
 
-				<!-- 录播 -->
+				<!-- 实时直播:HLS(与 ces.vue 一致:flvHlsUrl 转 m3u8 + hls.js / 原生 HLS) -->
+				<video v-if="liveItem.livingUrl && liveItem.liveType == 1" :id="`myVideo_${liveId}`" :autoplay="true"
+					class="item video-elem" :controls="false" :poster="videoPosterUrl" :src="liveType1PlayUrl"
+					:object-fit="liveItem.showType==2||isFullscreen?'contain':'fill'" :custom-cache="false"
+					:http-cache="false" :show-center-play-btn="false" :enable-play-gesture="true"
+					@error="videoError" @play="onVideoPlay" @pause="onVideoPause" @waiting="onVideoWaiting"
+					preload="auto" type="application/x-mpegURL"></video>
+				<!-- <view v-if="liveItem.livingUrl && liveItem.liveType == 1" class="time"
+					:class="isFullscreen ? 'look-time' : 'time'">已播放:{{ diffTotalTime }}</view> -->
+				<view v-if="liveItem.livingUrl && liveItem.liveType == 1" class="custom-controls" @click.stop="toggleFullscreen">
+					<image style="width:46rpx;height: 46rpx;" src="/static/images/live/full_screen.png"  />
+				</view>
+				<view v-if="liveItem.livingUrl && liveItem.liveType == 1 && isFullscreen" class="fullscreen-exit-btn" @click="exitFullscreen">
+					<image src="/static/images/live/half_screen.png" class="exit-fullscreen-icon" />
+					<text class="exit-text">退出全屏</text>
+				</view>
+
+				<!-- 录播:HLS 走 hls.js + video(与实时直播一致);其它格式直接 src -->
 				<video v-if="liveItem.videoUrl && liveItem.liveType == 2" :id="`myVideo_${liveId}`" :autoplay="true"
-					class="item" :src="liveItem.videoUrl" :controls="false"
+					class="item video-elem" :src="vodBindSrc" :controls="false"
+					:poster="videoPosterUrl"
 					:object-fit="liveItem.showType==2||isFullscreen?'contain':'fill'" :custom-cache="false"
 					:enable-progress-gesture="false" vslide-gesture-in-fullscreen="false" :show-center-play-btn="false"
 					:http-cache="false" loop @error="videoError" @timeupdate="onVideoTimeUpdate"
@@ -19,6 +37,8 @@
 					@waiting="onVideoWaiting" :enable-play-gesture="false" :play-strategy="1"
 					@dblclick="preventDoubleClick" preload="auto" :enable-stash-buffer="false" :stash-initial-size="0"
 					:stash-max-size="0" :stash-time="0" type="application/x-mpegURL"></video>
+				<!-- 加载完成前用封面遮住视频,避免露出系统灰色占位 -->
+				<!-- <view v-if="liveItem.videoUrl && liveItem.liveType == 2 && !videoLoaded" class="video-cover-poster" :style="videoPosterStyle"></view> -->
 				<view v-if="liveItem.videoUrl && liveItem.liveType == 2" class="time"
 					:class="isFullscreen ? 'look-time' : 'time'">{{ diffTotalTime }}</view>
 				<view class="custom-controls" @click.stop="toggleFullscreen">
@@ -41,23 +61,24 @@
 		</view>
 
 		<!-- 直播回放状态 -->
-		<view class="videolist" v-if="liveItem.status == 4">
+			<view class="videolist" v-if="liveItem.status == 4">
 			<view class="video" :class="liveItem.showType == 1 ? 'video_row' : ''">
-				<!-- 直播回放 -->
-				<video v-if="liveItem.videoUrl && liveItem.liveType == 3" :id="`myVideo_${liveId}`" class="item"
-					:src="liveItem.videoUrl" :autoplay="true" :controls="true" object-fit="cover" :custom-cache="false"
+				<!-- 直播回放:poster 与加载遮罩避免出现系统灰色图标 -->
+				<video v-if="liveItem.videoUrl && liveItem.liveType == 3" :id="`myVideo_${liveId}`" class="item video-elem"
+					:src="vodBindSrc" :poster="videoPosterUrl" :autoplay="true" :controls="true" object-fit="cover" :custom-cache="false"
 					:enable-progress-gesture="liveItem.isSpeedAllowed" vslide-gesture-in-fullscreen="true"
 					:show-center-play-btn="true" :http-cache="false" loop @error="videoError"
 					@timeupdate="onVideoTimeUpdate" @loadedmetadata="onVideoMetaLoaded" @pause="onVideoPause"
 					@play="onVideoPlay" :enable-play-gesture="true" preload="auto" @waiting="onVideoWaiting"
 					type="application/x-mpegURL"></video>
+				<!-- <view v-if="liveItem.videoUrl && liveItem.liveType == 3 && !videoLoaded" class="video-cover-poster" :style="videoPosterStyle"></view> -->
 				<view v-if="liveItem.videoUrl && liveItem.liveType == 3" class="lable">直播回放</view>
 			</view>
 
 		</view>
 		<view class="trailer-box" v-if="liveItem.status == 1">
 			<video v-if="liveItem.previewUrl" :id="`myVideo_${liveId}`" class="trailer-video" :src="liveItem.previewUrl"
-				:autoplay="true" loop object-fit="cover" :custom-cache="false" :enable-progress-gesture="false"
+				:poster="videoPosterUrl" :autoplay="true" loop object-fit="cover" :custom-cache="false" :enable-progress-gesture="false"
 				vslide-gesture-in-fullscreen="false" :show-center-play-btn="false" :http-cache="false"
 				@error="videoError" @loadedmetadata="onVideoMetaLoaded" @pause="onVideoPause" @play="onVideoPlay"
 				:disable-progress="true" :enable-play-gesture="true" @waiting="onVideoWaiting" preload="auto"
@@ -82,7 +103,7 @@
 					</view>
 				</view>
 			</view>
-			<view class="trailer-actions">
+			<!-- <view class="trailer-actions">
 				<button open-type="share" class="button-reset share-button">
 					<view class="action-button" @click="handleAgreement">
 						<text>分享给好友</text>
@@ -92,9 +113,8 @@
 				<view class="action-button reserve-button" @click="handleAgreement">
 					<image class="button-icon " src="/static/images/trailer.png"></image>
 					<text>{{ hasSubscribed ? '已预约' : '预约直播'}}</text>
-					<!-- <text>预约直播</text> -->
 				</view>
-			</view>
+			</view> -->
 		</view>
 
 		<!-- 无直播状态 -->
@@ -117,6 +137,9 @@
 	import {
 		getUserInfo
 	} from '@/api/user';
+	// #ifdef H5
+	import Hls from 'hls.js';
+	// #endif
 
 	export default {
 		name: 'LiveVideoPlayer',
@@ -177,11 +200,25 @@
 				diffTotalTime: '',
 				videoCurrentTime: 0,
 				videoProgressKey: '',
+				// 第一遍录播是否已看完:标记用,用于业务/统计
+				firstPassWatchedKey: '',
+				hasMarkedFirstPassWatched: false,
 				startTime: 0,
 				stayTime: 0,
 				// 内部状态跟踪
 				hasInitialized: false,
-				lastLiveItemStatus: null
+				lastLiveItemStatus: null,
+				_isDestroyed: false,
+				/** 实时直播 HLS 实例(仅 H5 hls.js) */
+				hlsInstance: null,
+				/** 非 H5 端 video 直接播放 m3u8 */
+				liveType1PlayUrl: '',
+				/** 录播/回放 m3u8 在非 H5 端赋给 video.src;H5 端由 hls.js 接管时保持空串 */
+				vodPlayUrl: '',
+				_liveHlsInitRetries: 0,
+				videoRetryCounts: {},
+				videoRetryCount: 0,
+				maxRetryCount: 3
 			};
 		},
 		watch: {
@@ -209,6 +246,37 @@
 					}
 				},
 				immediate: true
+			},
+			// 视频地址变化时重置加载状态,使封面遮罩再次显示,避免露出灰色占位
+			'liveItem.videoUrl'(newUrl) {
+				if (!newUrl || !this.liveItem) return;
+				this.videoLoaded = false;
+				const t = this.liveItem.liveType;
+				const s = this.liveItem.status;
+				if (this.isHlsPlaylistUrl(newUrl) && ((t === 2 && s === 2) || (t === 3 && s === 4))) {
+					this.$nextTick(() => {
+						this.initVodHlsPlayer();
+					});
+				}
+			},
+			'liveItem.livingUrl'(url) {
+				if (this._isDestroyed || !this.liveItem) return;
+				if (this.liveItem.liveType === 1 && this.liveItem.status === 2 && url) {
+					this.$nextTick(() => {
+						this.initLiveHlsPlayer();
+					});
+				}
+			},
+			// 首轮播放:当 liveItem 在 loadedmetadata 之后才具备 duration/startTime 时,补跑 setVideoProgress
+			'liveItem.duration': {
+				handler(duration) {
+					if (this._isDestroyed || !this.liveItem) return;
+					const t = this.liveItem.liveType;
+					if ((t !== 2 && t !== 3) || !duration || !this.liveItem.startTime) return;
+					if (!this.videoLoaded) return;
+					this.$nextTick(() => this.setVideoProgress());
+				},
+				immediate: false
 			}
 		},
 		async created() {
@@ -229,6 +297,30 @@
 			shouldShowFullscreenButton() {
 				return this.liveItem.showType == 1 && !this.isFullscreen;
 			},
+			// 视频封面图(优先直播封面,避免加载时出现系统灰色图标)
+			videoPosterUrl() {
+				const url = this.liveItem && (this.liveItem.liveImgUrl);
+				return url || '';
+			},
+			// 加载遮罩层背景图样式
+			videoPosterStyle() {
+				const url = this.videoPosterUrl;
+				if (!url) return { background: '#1a1a1a' };
+				return { backgroundImage: `url(${url})`, backgroundSize: 'cover', backgroundPosition: 'center' };
+			},
+			/** 录播/回放:m3u8 用 vodPlayUrl;H5+hls 未就绪时保持空串,避免浏览器直解 m3u8 */
+			vodBindSrc() {
+				const url = this.liveItem && this.liveItem.videoUrl;
+				if (!url) return '';
+				if (!this.isHlsPlaylistUrl(url)) return url;
+				if (this.vodPlayUrl) return this.vodPlayUrl;
+				// #ifdef H5
+				return '';
+				// #endif
+				// #ifndef H5
+				return url;
+				// #endif
+			},
 		},
 		beforeUnmount() {
 			this.cleanup();
@@ -236,8 +328,180 @@
 			this.isFullscreen = false;
 			this.showCustomControls = true;
 		},
+		beforeDestroy() {
+			// Vue2 生命周期,确保离开页面时清理定时器
+			this._isDestroyed = true;
+			this.cleanup();
+			this.isFullscreen = false;
+			this.showCustomControls = true;
+		},
 
 		methods: {
+			normalizeVideoUrl(url) {
+				if (!url || typeof url !== 'string') return url;
+
+				// 拆分出 hash / query,确保替换只作用于路径部分
+				const hashIndex = url.indexOf('#');
+				const hasHash = hashIndex >= 0;
+				const beforeHash = hasHash ? url.slice(0, hashIndex) : url;
+				const hashPart = hasHash ? url.slice(hashIndex) : '';
+
+				const qIndex = beforeHash.indexOf('?');
+				const ampIndex = beforeHash.indexOf('&');
+				// 兼容某些地方直接拼接 `&t=`(即便原 URL 没有 `?`)
+				const queryIndex =
+					qIndex === -1 ? ampIndex : ampIndex === -1 ? qIndex : Math.min(qIndex, ampIndex);
+				const hasQuery = queryIndex >= 0;
+				const pathPart = hasQuery ? beforeHash.slice(0, queryIndex) : beforeHash;
+				const queryPart = hasQuery ? beforeHash.slice(queryIndex) : '';
+
+				const lowerPath = pathPart.toLowerCase();
+				// 已经是目标格式则不处理
+				if (lowerPath.endsWith('-h264.mp4')) return url;
+				if (!lowerPath.endsWith('.m3u8')) return url;
+
+				const newPath = pathPart.slice(0, -'.m3u8'.length) + '-h264.mp4';
+				return `${newPath}${queryPart}${hashPart}`;
+			},
+			/** 实时直播拉流地址:与 ces.vue 一致,将 flv 转为 m3u8 */
+			normalizeLivingUrl(url) {
+				if (!url || typeof url !== 'string') return '';
+				return url.replace('flv', 'm3u8');
+			},
+			/** 是否为 HLS 点播地址(.m3u8,忽略 query/hash) */
+			isHlsPlaylistUrl(url) {
+				if (!url || typeof url !== 'string') return false;
+				const path = url.split(/[?#]/)[0].toLowerCase();
+				return path.endsWith('.m3u8');
+			},
+			getH5RawVideoElement() {
+				// #ifdef H5
+				if (typeof document === 'undefined') return null;
+				const id = `myVideo_${this.liveId}`;
+				let el = document.getElementById(id);
+				if (el && el.tagName && el.tagName.toLowerCase() === 'video') return el;
+				if (el && el.getElementsByTagName) {
+					const v = el.getElementsByTagName('video')[0];
+					if (v) return v;
+				}
+				return null;
+				// #endif
+				// #ifndef H5
+				return null;
+				// #endif
+			},
+			destroyLiveHls() {
+				if (this.hlsInstance) {
+					try {
+						this.hlsInstance.destroy();
+					} catch (e) {}
+					this.hlsInstance = null;
+				}
+				this.liveType1PlayUrl = '';
+				this.vodPlayUrl = '';
+			},
+			/**
+			 * H5:将 m3u8 交给 hls.js 或原生 HLS 播放
+			 */
+			_attachHlsToElement(videoEl, url) {
+				// #ifdef H5
+				if (typeof Hls !== 'undefined' && Hls.isSupported()) {
+					const hls = new Hls();
+					this.hlsInstance = hls;
+					hls.attachMedia(videoEl);
+					hls.on(Hls.Events.MEDIA_ATTACHED, () => {
+						hls.loadSource(url);
+						hls.on(Hls.Events.MANIFEST_PARSED, () => {
+							videoEl.play().catch(() => {});
+						});
+					});
+					hls.on(Hls.Events.ERROR, (event, data) => {
+						console.error('HLS 错误:', data);
+					});
+				} else if (videoEl.canPlayType('application/vnd.apple.mpegurl')) {
+					videoEl.src = url;
+					videoEl.play().catch(() => {});
+				} else {
+					console.error('浏览器不支持 HLS');
+				}
+				// #endif
+			},
+			/**
+			 * 实时直播 HLS 播放(对齐 ces.vue:Hls.isSupported 时用 hls.js,否则尝试原生 HLS)
+			 * 非 H5 端将 m3u8 赋给 video 的 src,由系统播放器解码
+			 */
+			initLiveHlsPlayer() {
+				if (this._isDestroyed || !this.liveItem) return;
+				if (this.liveItem.liveType !== 1 || this.liveItem.status !== 2 || !this.liveItem.livingUrl) return;
+				const url = this.normalizeLivingUrl(this.liveItem.livingUrl);
+				if (!url || !url.trim()) {
+					console.error('直播地址为空,无法初始化 HLS');
+					return;
+				}
+				this.destroyLiveHls();
+				this.$nextTick(() => {
+					// #ifdef H5
+					const videoEl = this.getH5RawVideoElement();
+					if (!videoEl) {
+						this._liveHlsInitRetries = (this._liveHlsInitRetries || 0) + 1;
+						if (this._liveHlsInitRetries <= 10) {
+							setTimeout(() => {
+								if (!this._isDestroyed) this.initLiveHlsPlayer();
+							}, 300);
+						}
+						return;
+					}
+					this._liveHlsInitRetries = 0;
+					this._attachHlsToElement(videoEl, url);
+					// #endif
+					// #ifndef H5
+					this.liveType1PlayUrl = url;
+					this.$nextTick(() => {
+						const ctx = uni.createVideoContext(`myVideo_${this.liveId}`, this);
+						if (ctx) ctx.play();
+					});
+					// #endif
+				});
+			},
+			/**
+			 * 录播/回放:m3u8 使用 video + hls.js(H5);非 m3u8 仍用直链 src
+			 */
+			initVodHlsPlayer() {
+				if (this._isDestroyed || !this.liveItem || !this.liveItem.videoUrl) return;
+				const t = this.liveItem.liveType;
+				const st = this.liveItem.status;
+				if (!((t === 2 && st === 2) || (t === 3 && st === 4))) return;
+				const url = this.liveItem.videoUrl;
+				if (!this.isHlsPlaylistUrl(url)) {
+					// 从 m3u8 切到 mp4 等格式时需先拆掉 hls
+					this.destroyLiveHls();
+					return;
+				}
+				this.destroyLiveHls();
+				this.$nextTick(() => {
+					// #ifdef H5
+					const videoEl = this.getH5RawVideoElement();
+					if (!videoEl) {
+						this._liveHlsInitRetries = (this._liveHlsInitRetries || 0) + 1;
+						if (this._liveHlsInitRetries <= 10) {
+							setTimeout(() => {
+								if (!this._isDestroyed) this.initVodHlsPlayer();
+							}, 300);
+						}
+						return;
+					}
+					this._liveHlsInitRetries = 0;
+					this._attachHlsToElement(videoEl, url);
+					// #endif
+					// #ifndef H5
+					this.vodPlayUrl = url;
+					this.$nextTick(() => {
+						const ctx = uni.createVideoContext(`myVideo_${this.liveId}`, this);
+						if (ctx) ctx.play();
+					});
+					// #endif
+				});
+			},
 			// 退出全屏
 			exitFullscreen() {
 				console.log('执行退出全屏');
@@ -415,138 +679,57 @@
 					this.checkNetworkStatus();
 					
 					// 鸿蒙系统特殊处理:如果已经标记为需要使用 video 组件
-					if (this.isHarmonyOS && this.useVideoComponentInstead) {
-						console.log('鸿蒙系统使用 video 组件播放视频');
-						const videoId = `myVideo_${this.liveId}`;
-						const videoContext = uni.createVideoContext(videoId, this);
-						if (videoContext) {
-							// 鸿蒙系统特殊处理:延迟播放
-							setTimeout(() => {
-								console.log('鸿蒙系统执行 video 组件播放');
-								videoContext.play();
-							}, 500);
-						}
-						return;
-					}
+					// if (this.isHarmonyOS && this.useVideoComponentInstead) {
+					// 	console.log('鸿蒙系统使用 video 组件播放视频');
+					// 	const videoId = `myVideo_${this.liveId}`;
+					// 	const videoContext = uni.createVideoContext(videoId, this);
+					// 	if (videoContext) {
+					// 		// 鸿蒙系统特殊处理:延迟播放
+					// 		setTimeout(() => {
+					// 			console.log('鸿蒙系统执行 video 组件播放');
+					// 			videoContext.play();
+					// 		}, 500);
+					// 	}
+					// 	return;
+					// }
 					
-					// 直播流使用live-player
+					// 实时直播:HLS(与 ces.vue 一致,见 initLiveHlsPlayer)
 					if (this.liveItem.liveType === 1 && this.liveItem.livingUrl && this.liveItem.status == 2) {
-						const livePlayerId = `myLivePlayer_${this.liveId}`;
-						try {
-							//const livePlayerContext = uni.createLivePlayerContext(livePlayerId, this);
-							if (livePlayerContext) {
-								if (this.isHarmonyOS) {
-									console.log('鸿蒙系统播放直播');
-									console.log('直播流URL:', this.liveItem.livingUrl);
-									console.log('直播ID:', this.liveId);
-									// 鸿蒙系统特殊处理:延迟播放并添加重试机制
-									setTimeout(() => {
-										this.harmonyOSLivePlay(livePlayerContext, 0);
-									}, 500);
-								} else {
-									livePlayerContext.play();
-								}
-							}
-						} catch (e) {
-							console.warn('createLivePlayerContext API不可用,使用video标签播放:', e);
-							// 降级使用video标签播放
-							const videoId = `myVideo_${this.liveId}`;
-							const videoContext = uni.createVideoContext(videoId, this);
-							if (videoContext) {
-								videoContext.play();
-							}
-						}
+						this.initLiveHlsPlayer();
+						this.$nextTick(() => {
+							const videoContext = uni.createVideoContext(`myVideo_${this.liveId}`, this);
+							if (videoContext) videoContext.play();
+						});
 					} else if (this.liveItem.status == 1 && this.liveItem.previewUrl) {
 						const videoId = `myVideo_${this.liveId}`;
 						const videoContext = uni.createVideoContext(videoId, this);
 
 						if (videoContext) {
-							if (this.isHarmonyOS) {
-								// 鸿蒙系统特殊处理:延迟播放
-								setTimeout(() => {
-									videoContext.play();
-								}, 500);
-							} else {
+							// if (this.isHarmonyOS) {
+							// 	// 鸿蒙系统特殊处理:延迟播放
+							// 	setTimeout(() => {
+							// 		videoContext.play();
+							// 	}, 500);
+							// } else {
 								videoContext.play();
-							}
+							// }
 						}
 					} else if (this.liveItem.liveType === 2 && this.liveItem.videoUrl && this.liveItem.status == 2) {
-						// 检查是否为HLS格式的视频流
-						const isHLS = this.liveItem.videoUrl.toLowerCase().endsWith('.m3u8');
-						console.log('视频URL:', this.liveItem.videoUrl, '是否为HLS格式:', isHLS);
-						
-						if (isHLS && !this.isHarmonyOS) {
-							// 非鸿蒙系统:HLS格式使用live-player播放
-							const livePlayerId = `myLivePlayer_${this.liveId}`;
-							try {
-								//const livePlayerContext = uni.createLivePlayerContext(livePlayerId, this);
-								if (livePlayerContext) {
-									livePlayerContext.play();
-								}
-							} catch (e) {
-								console.warn('createLivePlayerContext API不可用,使用video标签播放:', e);
-								// 降级使用video标签播放
-								const videoId = `myVideo_${this.liveId}`;
-								const videoContext = uni.createVideoContext(videoId, this);
-								if (videoContext) {
-									videoContext.play();
-								}
-							}
-						} else {
-							// 鸿蒙系统或普通视频格式:使用video组件播放
-							const videoId = `myVideo_${this.liveId}`;
-							const videoContext = uni.createVideoContext(videoId, this);
-							if (videoContext) {
-								if (this.isHarmonyOS) {
-									// 鸿蒙系统特殊处理:延迟播放
-									setTimeout(() => {
-										console.log('鸿蒙系统执行 video 组件播放');
-										videoContext.play();
-									}, 500);
-								} else {
-									videoContext.play();
-								}
-							}
+						if (this.isHlsPlaylistUrl(this.liveItem.videoUrl)) {
+							this.initVodHlsPlayer();
 						}
-					} // 回放视频使用video
-					else if (this.liveItem.liveType === 3 && this.liveItem.videoUrl && this.liveItem.status == 4) {
-						// 检查是否为HLS格式的视频流
-						const isHLS = this.liveItem.videoUrl.toLowerCase().endsWith('.m3u8');
-						console.log('回放视频URL:', this.liveItem.videoUrl, '是否为HLS格式:', isHLS);
-						
-						if (isHLS && !this.isHarmonyOS) {
-							// 非鸿蒙系统:HLS格式使用live-player播放
-							const livePlayerId = `myLivePlayer_${this.liveId}`;
-							try {
-								//const livePlayerContext = uni.createLivePlayerContext(livePlayerId, this);
-								if (livePlayerContext) {
-									livePlayerContext.play();
-								}
-							} catch (e) {
-								console.warn('createLivePlayerContext API不可用,使用video标签播放:', e);
-								// 降级使用video标签播放
-								const videoId = `myVideo_${this.liveId}`;
-								const videoContext = uni.createVideoContext(videoId, this);
-								if (videoContext) {
-									videoContext.play();
-								}
-							}
-						} else {
-							// 鸿蒙系统或普通视频格式:使用video组件播放
-							const videoId = `myVideo_${this.liveId}`;
-							const videoContext = uni.createVideoContext(videoId, this);
-							if (videoContext) {
-								if (this.isHarmonyOS) {
-									// 鸿蒙系统特殊处理:延迟播放
-									setTimeout(() => {
-										console.log('鸿蒙系统执行 video 组件播放');
-										videoContext.play();
-									}, 500);
-								} else {
-									videoContext.play();
-								}
-							}
+						this.$nextTick(() => {
+							const videoContext = uni.createVideoContext(`myVideo_${this.liveId}`, this);
+							if (videoContext) videoContext.play();
+						});
+					} else if (this.liveItem.liveType === 3 && this.liveItem.videoUrl && this.liveItem.status == 4) {
+						if (this.isHlsPlaylistUrl(this.liveItem.videoUrl)) {
+							this.initVodHlsPlayer();
 						}
+						this.$nextTick(() => {
+							const videoContext = uni.createVideoContext(`myVideo_${this.liveId}`, this);
+							if (videoContext) videoContext.play();
+						});
 					}
 				} catch (error) {
 					console.error('播放视频失败:', error);
@@ -574,22 +757,9 @@
 						}
 					} else if (this.liveItem.status == 2) {
 							if (this.liveItem.liveType === 1) {
-									const livePlayerId = `myLivePlayer_${this.liveId}`;
-									try {
-										//const livePlayerContext = uni.createLivePlayerContext(livePlayerId, this);
-										if (livePlayerContext) {
-											livePlayerContext.pause();
-										}
-									} catch (e) {
-										console.warn('createLivePlayerContext API不可用,使用video标签暂停:', e);
-										// 降级使用video标签暂停
-										const videoId = `myVideo_${this.liveId}`;
-										const videoContext = uni.createVideoContext(videoId, this);
-										if (videoContext) {
-											videoContext.pause();
-										}
-									}
-								} else if (this.liveItem.liveType === 2) {
+								const videoContext = uni.createVideoContext(`myVideo_${this.liveId}`, this);
+								if (videoContext) videoContext.pause();
+							} else if (this.liveItem.liveType === 2) {
 								const videoId = `myVideo_${this.liveId}`;
 								const videoContext = uni.createVideoContext(videoId, this);
 								if (videoContext) {
@@ -603,13 +773,14 @@
 			},
 			// 视频错误处理
 			videoError(e, liveItem) {
-				if (!liveItem || !this.liveId) return;
+				const item = liveItem || this.liveItem;
+				if (!item || !this.liveId) return;
 				// 初始化重试计数
-				if (this.videoRetryCounts[liveItem.liveId] === undefined) {
-					this.videoRetryCounts[liveItem.liveId] = 0;
+				if (this.videoRetryCounts[this.liveId] === undefined) {
+					this.videoRetryCounts[this.liveId] = 0;
 				}
 				// 限制重试次数
-				if (this.videoRetryCounts[liveItem.liveId] >= 3) {
+				if (this.videoRetryCounts[this.liveId] >= 3) {
 					console.error(`直播间 ${this.liveId} 视频加载失败,停止重试`);
 					// 显示错误提示
 					uni.showToast({
@@ -631,6 +802,7 @@
 				}, 2000);
 			}, // 视频暂停
 			onVideoPause(e) {
+				// 录播循环播放;实时直播允许用户暂停,不强制续播
 				if (this.liveItem.liveType === 2) {
 					const videoId = `myVideo_${this.liveId}`;
 					const videoContext = uni.createVideoContext(videoId, this);
@@ -642,7 +814,7 @@
 				this.saveVideoProgress();
 			}, //直播、录播缓冲
 			getLiveInternetTraffic() {
-				if (!this.liveId) return;
+				if (this._isDestroyed || !this.liveId) return;
 				const currentTime = (this.stayTime / this.liveItem.duration) * 100;
 				const param = {
 					userId: this.userData.userId || '',
@@ -766,17 +938,22 @@
 				internetTraffic(param);
 			},
 			saveVideoProgress() {
-				if (this.videoProgressKey) {
-					uni.setStorage({
-						key: this.videoProgressKey,
-						data: this.videoCurrentTime,
-						success: () => {},
-						fail: (err) => {
-							console.error('保存视频进度失败:', err);
-						}
-					});
+				if (!this.videoProgressKey) return;
+				const time = this.videoCurrentTime;
+				if (time === undefined || time === null) return;
+				// 使用同步写入,确保退出/onHide 时进度在页面销毁前落盘,第二次进入能可靠断点续播
+				try {
+					uni.setStorageSync(this.videoProgressKey, time);
+				} catch (err) {
+					console.error('保存视频进度失败:', err);
 				}
 			},
+			/** 是否已看完第一遍录播(本地标记,按 liveId) */
+			getFirstPassWatched(liveId) {
+				const key = liveId != null ? `firstPassWatched_${liveId}` : this.firstPassWatchedKey;
+				if (!key) return false;
+				return uni.getStorageSync(key) === '1';
+			},
 			getTimeDifferenceInSeconds(createTimeStr, useServerTime) {
 				// 参数检查,确保createTimeStr不为undefined或null
 				if (!createTimeStr) {
@@ -820,36 +997,55 @@
 				}
 			},
 			setVideoProgress() {
-				console.log('设置视频进度');
-				// 只有录播和回放需要设置进度
+				// 防止 liveItem 尚未就绪(如 App 首次进入时先于 getliving 调用)
+				if (!this.liveItem || this.liveItem.liveType === undefined) return;
+				// 只有录播(liveType=2)和回放(liveType=3)需要设置进度
 				if (this.liveItem.liveType !== 2 && this.liveItem.liveType !== 3) {
 					return;
 				}
+				if (!this.liveItem.duration) return;
 				let currentTime = 0;
+				const diff = this.getTimeDifferenceInSeconds(this.liveItem.startTime);
+				let isLiveSync = false; // 是否按开播时间+实际时间计算的节点(第一遍录播中返回)
+
 				if (this.liveItem.liveType === 2) {
-					// 录播:计算当前时间与开始时间的差值,对视频总时长取模
-					const diff = this.getTimeDifferenceInSeconds(this.liveItem.startTime);
-					if (diff > this.liveItem.duration) {
-						console.log("开始断点续播了")
-						const storedProgress = uni.getStorageSync(this.videoProgressKey) || 0;
-						console.log("开始断点续播了storedProgress", storedProgress)
-						currentTime = storedProgress >= this.liveItem.duration ? 0 : storedProgress || 0;
-						console.log("开始断点续播了currentTime", currentTime)
+					// 录播逻辑:
+					// 1. 第一遍录播中(diff < duration):所有人跟随直播进度,从开播第 diff 秒开始
+					// 2. 首轮结束后(diff >= duration):有存储进度即断点续播,不要求先看完第一遍
+					if (diff < this.liveItem.duration) {
+						// 第一遍录播中:与直播同步
+						currentTime = diff;
+						isLiveSync = true;
 					} else {
-						currentTime = diff % this.liveItem.duration;
+						// 首轮已结束:有进度就断点续播,否则从开头
+						const storedProgress = uni.getStorageSync(this.videoProgressKey);
+						const hasStored = storedProgress !== undefined && storedProgress !== null && storedProgress !== '';
+						if (hasStored) {
+							const sec = Number(storedProgress);
+							currentTime = (sec >= 0 && sec < this.liveItem.duration) ? sec : 0;
+						} else {
+							currentTime = 0;
+						}
 					}
-
-					// currentTime = diff % this.liveItem.duration;
 				} else if (this.liveItem.liveType === 3) {
-					// 回放:从存储中获取进度
+					// 回放:从存储中获取进度,无则从0
 					const storedProgress = uni.getStorageSync(this.videoProgressKey);
-					currentTime = storedProgress || 0;
+					currentTime = (storedProgress !== undefined && storedProgress !== null && storedProgress !== '') ? Number(storedProgress) : 0;
 				}
+
 				const videoId = `myVideo_${this.liveId}`;
 				const videoContext = uni.createVideoContext(videoId, this);
 				if (videoContext) {
 					videoContext.seek(currentTime);
 				}
+				// 通知父组件:本次设置的播放节点(含“按开播+实际时间”续播),便于同步原生/UI
+				this.$emit('video-progress-seek', {
+					currentTime,
+					isLiveSync,
+					liveId: this.liveId,
+					startTime: this.liveItem.startTime,
+					duration: this.liveItem.duration
+				});
 			}, // 视频播放
 			onVideoPlay(e) {
 				console.log('视频播放');
@@ -880,7 +1076,11 @@
 			// 录播时间点
 			onVideoMetaLoaded(e) {
 				console.log("录播时间点", e)
+				this.videoLoaded = true; // 已加载,隐藏封面遮罩,避免露出系统灰色图标
 				this.videoProgressKey = `videoProgress_${this.liveId}`;
+				if (this.liveItem.liveType === 2 || this.liveItem.liveType === 3) {
+					this.firstPassWatchedKey = `firstPassWatched_${this.liveId}`;
+				}
 				this.setVideoProgress();
 			},
 			// 视频时间更新
@@ -891,8 +1091,23 @@
 				// 每隔10秒保存一次进度(避免频繁存储)
 				if (Math.floor(this.videoCurrentTime) % 10 === 0) {
 					this.saveVideoProgress();
+					this.$emit('video-progress-update', e.detail.currentTime);
+				}
+				// 录播:播放到结尾时标记「已看完第一遍」(只标记一次,不再依赖 diff,避免首次完整观看未在首轮窗口内导致第二次无法断点续播)
+				if (this.liveItem.liveType === 2 && this.firstPassWatchedKey && !this.hasMarkedFirstPassWatched && this.liveItem.duration) {
+					const nearEnd = this.videoCurrentTime >= Math.max(0, this.liveItem.duration - 1);
+					if (nearEnd) {
+						this.hasMarkedFirstPassWatched = true;
+						// 若本地已标记过(例如上次看过),不再重复写 storage 和 emit
+						if (this.getFirstPassWatched(this.liveId)) {
+							// 仅同步内存状态,避免重复通知
+						} else {
+							uni.setStorageSync(this.firstPassWatchedKey, '1');
+							this.$emit('first-pass-watched', { liveId: this.liveId });
+						}
+					}
 				}
-	// 更新视频最后更新时间(用于检测是否卡顿)
+	           // 更新视频最后更新时间(用于检测是否卡顿)
 				this.lastVideoUpdateTime = Date.now();
 				// 如果视频在更新,说明没有卡顿,清除等待状态
 				if (this.waitingStartTime && this.lastVideoUpdateTime - this.waitingStartTime < 1000) {
@@ -927,6 +1142,11 @@
 
 				this.uuId = generateRandomString(16);
 				this.localIsAgreement = uni.getStorageSync('isAgreement');
+				// 录播/回放:尽早设置进度 key,便于退出时保存进度(断点续播)
+				if (this.liveId && this.liveItem && (this.liveItem.liveType === 2 || this.liveItem.liveType === 3)) {
+					this.videoProgressKey = `videoProgress_${this.liveId}`;
+					this.firstPassWatchedKey = `firstPassWatched_${this.liveId}`;
+				}
 
 				// 立即检查当前状态并启动相应功能
 				if (this.liveItem?.status === 1 && this.liveItem.startTime) {
@@ -935,15 +1155,15 @@
 				} else if (this.liveItem?.status === 2) {
 					this.startTimeTimer(this.liveItem);
 					// 鸿蒙系统特殊处理:延迟播放以确保组件完全初始化
-					if (this.isHarmonyOS) {
-						console.log('鸿蒙系统延迟播放以确保组件初始化');
-						setTimeout(() => {
-							console.log('鸿蒙系统执行播放');
-							this.playVideo();
-						}, 1000);
-					} else {
+					// if (this.isHarmonyOS) {
+					// 	console.log('鸿蒙系统延迟播放以确保组件初始化');
+					// 	setTimeout(() => {
+					// 		console.log('鸿蒙系统执行播放');
+					// 		this.playVideo();
+					// 	}, 1000);
+					// } else {
 						this.playVideo();
-					}
+					// }
 				}
 
 				this.startTimer();
@@ -955,12 +1175,6 @@
 					// 延迟100ms后强制UI更新
 					setTimeout(() => {
 						this.$forceUpdate();
-						console.log('鸿蒙系统组件初始化后强制UI更新');
-						// 再延迟100ms后再次强制UI更新
-						setTimeout(() => {
-							this.$forceUpdate();
-							console.log('鸿蒙系统组件初始化后二次强制UI更新');
-						}, 100);
 					}, 100);
 				}
 			},
@@ -1093,6 +1307,12 @@
 
 			// 清理方法
 			cleanup() {
+				this._isDestroyed = true;
+				this.destroyLiveHls();
+				// 录播/回放:离开页面前保存播放进度,便于断点续播
+				if (this.liveItem && (this.liveItem.liveType === 2 || this.liveItem.liveType === 3) && this.videoProgressKey) {
+					this.saveVideoProgress();
+				}
 				if (this.liveStartTimer) {
 					clearInterval(this.liveStartTimer);
 					this.liveStartTimer = null;
@@ -1164,11 +1384,22 @@
 		.video {
 			height: 100vh;
 			width: 100%;
+			position: relative;
 
 			.item {
 				width: 100%;
 				height: 100%;
 			}
+			/* 加载完成前用封面遮住视频区域,避免出现系统自带的灰色图标 */
+			.video-cover-poster {
+				position: absolute;
+				left: 0;
+				top: 0;
+				width: 100%;
+				height: 100%;
+				z-index: 2;
+				pointer-events: none;
+			}
 
 			.time {
 				color: #ffffff;

+ 0 - 197
pages_live/index.vue

@@ -1,197 +0,0 @@
-<template>
-	<view class="container">
-		<web-view ref="webviewRef" :src="pageUrl" v-if="pageUrl" update-title allow="fullscreen" @message="handleMessage"></web-view>
-		<image src="@/static/images/course_expiration_img.png" mode="aspectFill"></image>
-		<view>{{msg}}</view>
-	</view>
-</template>
-
-<script>
-	import {getRealLink,updateSopAppLink} from "@/api/courseAnswer.js"
-	import {getUserLiveInfo} from '@/api/living.js'
-	export default {
-		data() {
-			return {
-				pageUrl:"",
-				msg: '加载中...',
-				userInfo: {}
-			}
-		},
-		onLoad(option) {
-			this.userInfo = uni.getStorageSync("userInfo") ? JSON.parse(uni.getStorageSync("userInfo")) : {};
-			console.log("qxj liveToken",uni.getStorageInfoSync("liveToken"));
-			this.getUserLiveInfo();
-			// const userId = this.userInfo.userId || ''
-			const liveId = option.liveId
-			if (liveId) {
-			    //const baseUrl ="https://h5vips.cdwjyyh.com/appweb/pages_live/living?liveId="+liveId+"&source=app"+'&t='+ new Date().getTime();
-				const baseUrl = "http://192.168.110.66:8081/appweb/pages_live/living?liveId=" + liveId + "&source=app";
-				// 用一个集合传参到 living(web-view 内 H5 与原生 storage 隔离)
-				const payload = {
-					liveId,
-					source: 'app',
-					appToken: uni.getStorageSync('AppToken') || '',
-					liveToken: uni.getStorageSync('liveToken') || '',
-					userInfo: uni.getStorageSync('userInfo') || '',
-					//userData: uni.getStorageSync('userData') || '',
-					liveUser: uni.getStorageSync('liveUser') || '',
-					hasSubscribed: String(uni.getStorageSync('subscribe_status_' + liveId) ?? '')
-				}
-				console.log("event===info===",uni.getStorageSync('liveUser'))
-				this.pageUrl = baseUrl + '&payload=' + encodeURIComponent(JSON.stringify(payload))+ '&t=' + new Date().getTime();
-				//console.log("===pageUrl===",this.pageUrl);
-				
-			} else {
-				this.msg="缺少直播Id"
-				uni.showToast({
-					title: "缺少直播Id",
-					icon: 'error'
-				})
-			}
-		},
-		onUnload() {
-			// #ifdef APP-PLUS
-			plus.navigator.setFullscreen(false);
-			plus.screen.lockOrientation('portrait-primary');
-			// #endif
-		},
-		onBackPress() {
-			// #ifdef APP-PLUS
-			// 返回时退出全屏
-			plus.navigator.setFullscreen(false);
-			plus.screen.lockOrientation('portrait-primary');
-			// #endif
-		},
-		methods: {
-		getUserLiveInfo(){
-			getUserLiveInfo().then((res) => {
-						if (res.code == 200) {
-							uni.setStorageSync('liveUser', JSON.stringify(res.user))
-							//console.log('liveUser', res.user)
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: '请求失败'
-							})
-						}
-					},
-					(rej) => {})
-			},
-		
-			handleMessage(event) {
-				console.log('点击事件',event)
-				const info = event.detail.data[0]
-				// #ifdef APP-PLUS
-				// if(info.login != 1) {
-				// 	// 退出登录
-				// 	let IMUserID = uni.getStorageSync('IMUserID');
-				// 	//Igexin.unbindAlias(IMUserID);
-				// 	uni.removeStorage({key: "IMUserID"});
-				// 	uni.setStorageSync("AppToken",null);
-				// 	uni.setStorageSync("liveToken",null);		
-				// 	uni.removeStorage({ key: 'IMToken' });
-				// 	uni.removeStorageSync("onLaunch",null)
-				// 	uni.removeStorageSync("imUnread",null);
-				// 	uni.removeStorageSync("companyUser");
-				// 	uni.removeStorageSync("CompanyUserToken");
-					
-				// 	uni.$emit("refreshUserInfo");
-				// 	let pages = getCurrentPages();
-					
-				// 	let url = pages[ pages.length - 1]; //当前页页面实例
-				// 	//如果登录界面已打开,自动关闭
-				// 	if(url!=undefined&&url.route=="pages/auth/loginIndex"){
-				// 		return;
-				// 	}
-				// 	uni.navigateTo({
-				// 		url: '/pages/auth/loginIndex'
-				// 	});
-				// 	return
-				// }
-				// if (info&&info.isFullscreen) {
-				// 	plus.screen.lockOrientation('landscape-primary');
-				// } else {
-				// 	plus.screen.lockOrientation('portrait-primary');
-				// }
-				//立即购买
-				if(info&&info.pagesUrl) {
-					if(info.isBack){
-						uni.navigateBack()
-					}else{
-						console.log('+++++++++++++++++++++++++++++')
-						uni.navigateTo({
-							url: info.pagesUrl
-						})
-					}
-					
-				}
-				// //
-				// if(info&&info.productId) {
-				// 	uni.navigateTo({
-				// 		url: info.pagesUrl
-				// 	})
-				// }
-				// console.log("event===info===",info)
-				// if(info&&info.pagesUrl) {
-				// 	uni.navigateTo({
-				// 		url: info.pagesUrl
-				// 	})
-				// }
-				// #endif
-			},
-			getLink(sortLink) {
-				this.msg = '加载中...'
-				const userId = this.userInfo.userId || ''
-				getRealLink({sortLink: sortLink}).then(res => {
-					if (res.code == 200) {
-						// 如果响应中包含真实链接,则跳转到真实链接
-					    let pageUrl= res.realLink + "&userId="+userId+"&source=app&time=" + new Date().getTime();
-						this.pageUrl = pageUrl;
-					} else {
-						this.msg = '课程已过期或链接无效'
-						uni.showModal({
-							title: '提示',
-							content: '课程已过期或链接无效',
-							showCancel: false,
-							success: function(res) {
-								if (res.confirm) {
-									console.log('用户点击确定');
-								} else if (res.cancel) {
-									console.log('用户点击取消');
-								}
-							}
-						});
-					}
-				}).catch(err => {
-					this.msg = '发生错误,请稍后再试'
-					uni.showToast({
-						title: '发生错误,请稍后再试',
-						icon: 'none'
-					});
-				})
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-	.container {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		padding-bottom: 88rpx;
-		justify-content: center;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 32rpx;
-		color: #757575;
-		line-height: 48rpx;
-		text-align: center;
-
-		image {
-			width: 428rpx;
-			height: 360rpx;
-			margin-bottom: 30rpx;
-		}
-	}
-</style>

+ 0 - 226
pages_live/indexQ.vue

@@ -1,226 +0,0 @@
-<template>
-	<view class="container">
-		<web-view ref="webviewRef" :src="pageUrl" v-if="pageUrl" update-title allow="fullscreen" @message="handleMessage"></web-view>
-		<image src="@/static/images/course_expiration_img.png" mode="aspectFill"></image>
-		<view>{{ msg }}</view>
-	</view>
-</template>
-
-<script>
-import { getRealLink, updateSopAppLink } from '@/api/courseAnswer.js';
-import { getUserLiveInfo } from '@/api/living.js';
-export default {
-	data() {
-		return {
-			pageUrl: '',
-			msg: '加载中...',
-			userInfo: {}
-		};
-	},
-	onLoad(option) {
-		this.userInfo = uni.getStorageSync('userInfo') ? JSON.parse(uni.getStorageSync('userInfo')) : {};
-		this.getUserLiveInfo();
-		// const userId = this.userInfo.userId || ''
-		const liveId = option.liveId;
-		if (liveId) {
-			this.pageUrl = 'https://h5vips.cdwjyyh.com/appweb/pages_live/living?liveId=' + liveId + '&source=app' + '&t=' + new Date().getTime();
-			//this.pageUrl="http://192.168.110.206:8080/appweb/pages_live/living?liveId="+liveId+"&source=app"
-			//this.getLink(link)
-			//this.getCourseRead(link)
-		} else {
-			this.msg = '缺少直播Id';
-			uni.showToast({
-				title: '缺少直播Id',
-				icon: 'error'
-			});
-		}
-	},
-	onUnload() {
-		// #ifdef APP-PLUS
-		plus.navigator.setFullscreen(false);
-		plus.screen.lockOrientation('portrait-primary');
-		// #endif
-	},
-	onBackPress() {
-		// #ifdef APP-PLUS
-		// 返回时退出全屏
-		plus.navigator.setFullscreen(false);
-		plus.screen.lockOrientation('portrait-primary');
-		// #endif
-	},
-	methods: {
-		getUserLiveInfo() {
-			getUserLiveInfo().then(
-				(res) => {
-					if (res.code == 200) {
-						uni.setStorageSync('liveUser', JSON.stringify(res.user));
-						//console.log('liveUser', res.user)
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: '请求失败'
-						});
-					}
-				},
-				(rej) => {}
-			);
-		},
-		getCourseRead(id) {
-			updateSopAppLink(id).then((res) => {
-				if (res.code == 200) {
-					this.$updateMsgDot();
-				}
-			});
-		},
-		handleMessage(event) {
-			console.log('点击事件', event);
-			const info = event.detail.data[0];
-			// #ifdef APP-PLUS
-			// H5 请求获取 Token
-			if (info && info.action === 'getToken') {
-				const AppToken = uni.getStorageSync('AppToken');
-				const liveToken = uni.getStorageSync('liveToken');
-				const userInfo = uni.getStorageSync('userInfo');
-				const userData = uni.getStorageSync('userData');
-				const liveUser = uni.getStorageSync('liveUser');
-				const data = {
-					AppToken,
-					liveToken,
-					userInfo,
-					userData,
-					liveUser
-				};
-				// 获取当前 webview
-				// 注意:这里假设 web-view 是当前页面的第一个子 webview
-				const currentWebview = this.$scope.$getAppWebview().children()[0];
-				if (currentWebview) {
-					// 调用 H5 的全局方法 setAppInfo
-					currentWebview.evalJS(`setAppInfo(${JSON.stringify(data)})`);
-				}
-				return;
-			}
-
-			// if (info.login != 1) {
-			// 		// 退出登录
-			// 		let IMUserID = uni.getStorageSync('IMUserID');
-			// 		//Igexin.unbindAlias(IMUserID);
-			// 		uni.removeStorage({ key: 'IMUserID' });
-			// 		uni.setStorageSync('AppToken', null);
-			// 		uni.setStorageSync('liveToken', null);
-			// 		uni.removeStorage({ key: 'IMToken' });
-			// 		uni.removeStorageSync('onLaunch', null);
-			// 		uni.removeStorageSync('imUnread', null);
-			// 		uni.removeStorageSync('companyUser');
-			// 		uni.removeStorageSync('CompanyUserToken');
-
-			// 		uni.$emit('refreshUserInfo');
-			// 		let pages = getCurrentPages();
-
-			// 		let url = pages[pages.length - 1]; //当前页页面实例
-			// 		//如果登录界面已打开,自动关闭
-			// 		if (url != undefined && url.route == 'pages/auth/loginIndex') {
-			// 			return;
-			// 		}
-			// 		uni.navigateTo({
-			// 			url: '/pages/auth/loginIndex'
-			// 		});
-			// 		return;
-			// }
-			if (info && info.isFullscreen) {
-				plus.screen.lockOrientation('landscape-primary');
-			} else {
-				plus.screen.lockOrientation('portrait-primary');
-			}
-			//立即购买
-			if (info && info.pagesUrl) {
-				if (info.isBack) {
-					// 从直播间列表点进直播时,栈为 [livingList, index],直接 navigateBack 即可,避免 redirectTo 造成 [livingList, livingList] 需返回两次
-					const pages = getCurrentPages();
-					const prev = pages.length > 1 ? pages[pages.length - 2] : null;
-					const prevRoute = prev ? prev.route || (prev.$page && prev.$page.fullPath) : '';
-					if (pages.length > 1 && prevRoute === 'pages_live/livingList') {
-						uni.navigateBack();
-					} else {
-						uni.redirectTo({
-							url: info.pagesUrl
-						});
-					}
-				} else {
-					console.log('+++++++++++++++++++++++++++++');
-					uni.navigateTo({
-						url: info.pagesUrl
-					});
-				}
-			}
-			// //
-			// if(info&&info.productId) {
-			// 	uni.navigateTo({
-			// 		url: info.pagesUrl
-			// 	})
-			// }
-			// console.log("event===info===",info)
-			// if(info&&info.pagesUrl) {
-			// 	uni.navigateTo({
-			// 		url: info.pagesUrl
-			// 	})
-			// }
-			// #endif
-		},
-		getLink(sortLink) {
-			this.msg = '加载中...';
-			const userId = this.userInfo.userId || '';
-			getRealLink({ sortLink: sortLink })
-				.then((res) => {
-					if (res.code == 200) {
-						// 如果响应中包含真实链接,则跳转到真实链接
-						let pageUrl = res.realLink + '&userId=' + userId + '&source=app&time=' + new Date().getTime();
-						this.pageUrl = pageUrl;
-					} else {
-						this.msg = '课程已过期或链接无效';
-						uni.showModal({
-							title: '提示',
-							content: '课程已过期或链接无效',
-							showCancel: false,
-							success: function (res) {
-								if (res.confirm) {
-									console.log('用户点击确定');
-								} else if (res.cancel) {
-									console.log('用户点击取消');
-								}
-							}
-						});
-					}
-				})
-				.catch((err) => {
-					this.msg = '发生错误,请稍后再试';
-					uni.showToast({
-						title: '发生错误,请稍后再试',
-						icon: 'none'
-					});
-				});
-		}
-	}
-};
-</script>
-
-<style scoped lang="scss">
-.container {
-	display: flex;
-	flex-direction: column;
-	align-items: center;
-	padding-bottom: 88rpx;
-	justify-content: center;
-	font-family: PingFang SC, PingFang SC;
-	font-weight: 400;
-	font-size: 32rpx;
-	color: #757575;
-	line-height: 48rpx;
-	text-align: center;
-
-	image {
-		width: 428rpx;
-		height: 360rpx;
-		margin-bottom: 30rpx;
-	}
-}
-</style>

+ 177 - 189
pages_live/living.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="swiper-wrapper">
 		<!-- 状态栏占位 -->
-		<image src="https://fs-1323137866.cos.ap-chongqing.myqcloud.com/live_bg.jpg" class="live-bg"></image>
+		<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/appimgs/live_bg.jpg" class="live-bg"></image>
 		<view class="container" :class="isFullscreen ? 'fullscreen ' : ''">
 			<view class="content">
 				<view class="content-top"  style="position:absolute; z-index: 9999;" :style="{top: paddingTop+'px'}">
@@ -74,12 +74,12 @@
 						<LikeButton :initialCount="100" :heartsPerClick="5" @like="onLike" />
 						<view class="txt" style="font-size: 30rpx;">{{ formattedLikeCount || 0 }}</view>
 					</view>
-					<view class="side-item">
+					<!-- <view class="side-item">
 						<button open-type="share" class="button button-reset">
 							<image class="image" src="/static/images/live/weixin1.png" mode="widthFix" />
 						</button>
 						<view class="txt" style="font-size: 30rpx;">分享</view>
-					</view>
+					</view> -->
 				</view>
 
 				<!-- 直播 -->
@@ -157,7 +157,7 @@
 			<u-popup :show="!!integral.status" round="20rpx" mode="center" bgColor="#ffffff" zIndex="10076">
 				<view class="integral-box">
 					<view class="top">
-						<view class="title">观看视频领芳华币</view>
+						<view class="title">观看视频领币</view>
 						<image class="photo" src="/static/images/live/integral_bg.png" mode="widthFix" />
 					</view>
 					<view class="item">
@@ -186,7 +186,7 @@
 					<image class="img" src="/static/images/live/red_card.png" />
 					<view class="red-content">
 						<view class="title">{{ redCard.msg }}</view>
-						<view class="txt">直播惊喜芳华币</view>
+						<view class="txt">直播惊喜币</view>
 						<view class="button" @click="isShowRedCard = false">确认</view>
 					</view>
 				</view>
@@ -228,7 +228,7 @@
 					<view class="item" @click="navgetTo('/pages/user/integral/integralGoodsList'), (isMore = false)">
 						<image class="w48 h48" src="/static/image/my/member_icon.png" />
 						
-						<view style="text-align: center">芳华币</view>
+						<view style="text-align: center">币</view>
 					</view>
 					<view class="item" @click="goOrder(), (isMore = false)">
 						<image class="w48 h48" src="/static/image/my/my_cforder_icon.png" />
@@ -266,7 +266,7 @@
 							<image class="w104 h104" :src="item.img" />
 							<view class="name">{{ item.giftName }}</view>
 							<view v-if="activeIndex === index" class="button" @click="sendliveGift(item)">赠送</view>
-							<view class="number" v-else>{{ item.price }}芳华币</view>
+							<view class="number" v-else>{{ item.price }}币</view>
 						</view>
 					</view>
 				</view>
@@ -586,10 +586,11 @@
 				userInfo: '',
 				urlOption: {},
 				source: '', // app,app内嵌H5页面
+				liveUserId:null
 			}
 		},
 		async onLoad(options) {
-			console.log(options,'options')
+			// console.log(options,'options')
 			// 支持从 index 传入的集合参数 payload
 			let payload = {}
 			if (options.payload && options.source === 'app') {
@@ -606,15 +607,15 @@
 			}
 			this.source = opts.source || ''
 			if (this.source === 'app') {
+				// console.log('111111111',opts)
 				// 从 payload 写入 storage(web-view 内与原生隔离,由 index 通过 payload 传入)
-				uni.setStorageSync('AppToken', opts.appToken)
+				//uni.setStorageSync('AppToken', opts.appToken)
 				uni.setStorageSync('liveToken', opts.liveToken)
 				uni.setStorageSync('userInfo', opts.userInfo)
-				console.log('++++++++++++++++++++++++Token+', opts.appToken)
-				console.log('——————————————————————————liveUser', opts.liveUser)
-				uni.setStorageSync('liveUser', opts.liveUser)
-				uni.setStorageSync('subscribe_status_' + this.liveId, opts.hasSubscribed === 'true')
-				console.log('——————————————————————————subscribe_status_', uni.getStorageSync('subscribe_status_' + this.liveId))
+				uni.setStorageSync('userData',  opts.userInfo)
+				uni.setStorageSync('subscribe_status_' + this.liveId, opts.hasSubscribed == 'true')
+				console.log('++++++++++++subscribe_status_', opts)
+				//console.log('——————————————————————————subscribe_status_', uni.getStorageSync('subscribe_status_' + this.liveId))
 			}
 			if (opts.scene) {
 				this.scene = opts.scene
@@ -629,30 +630,34 @@
 					this.qrFrom = `&companyId=${params.b||this.liveItem.companyId||-1}&companyUserId=${params.c}`
 				}
 			}
+
 			if (opts.companyId && opts.companyUserId) {
 				this.qrFrom = `&companyId=${opts.companyId||this.liveItem.companyId||-1}&companyUserId=${opts.companyUserId}`
 			}
+
 			// 保存url参数
 			this.urlOption = opts
-			this.userinfo = JSON.parse(uni.getStorageSync("userInfo"))
-			this.userData = JSON.parse(uni.getStorageSync("userInfo"))
+			this.userinfo = uni.getStorageSync("userInfo")
+			this.userData = JSON.parse(uni.getStorageSync("userInfo")) 
+			console.log('++++++++++++++++++++++++this.userData', this.userData)
+			console.log('++++++++++++++++++++++++this.userId', this.userData.userId)
 			this.hasSubscribed = uni.getStorageSync('subscribe_status_' + this.liveId) || false;
-			try {
-				const isLogin = await checkLiveToken();
-				this.hasCheckedLogin = true;
-				if (isLogin) {
-					// 登录后:优先加载直播间信息,然后加载视频资源
-					await this.haveLogin();
-				} else {
-					// 未登录:先登录,登录成功后再加载数据
-					// #ifdef MP-WEIXIN
-					this.goLogin();
-					 // #endif
-				}
-			} catch (error) {
-				console.error('初始化失败:', error);
-				this.hasCheckedLogin = true;
-			}
+			// try {
+			// 	const isLogin = await checkLiveToken();
+			// 	this.hasCheckedLogin = true;
+			// 	if (isLogin) {
+			// 		// 登录后:优先加载直播间信息,然后加载视频资源
+			// 		await this.haveLogin();
+			// 	} else {
+			// 		// 未登录:先登录,登录成功后再加载数据
+			// 		// #ifdef MP-WEIXIN
+			// 		this.goLogin();
+			// 		 // #endif
+			// 	}
+			// } catch (error) {
+			// 	console.error('初始化失败:', error);
+			// 	this.hasCheckedLogin = true;
+			// }
 
 			this.startMemoryMonitor();
 
@@ -718,10 +723,13 @@
 		},
 		async onShow() {
 			try {
+				console.error('初始化失败:liveUserId', JSON.parse(uni.getStorageSync('userInfo')) )
+				const userData= JSON.parse(uni.getStorageSync('userInfo')).userId
 				const isLogin = await checkLiveToken()
 				if (isLogin) {
+					this.liveUserId=userData.userId
 					await this.haveLogin();
-					//await this.getUserLiveInfo()
+					// await this.getUserLiveInfo()
 				} else {
 					// #ifdef MP-WEIXIN
 					this.goLogin();
@@ -731,12 +739,12 @@
 			} catch (error) {
 				console.error('初始化失败:', error)
 			}
-			if (this.liveId) {
-				await this.getLiveMsg(this.liveItem)
-			}
-			if (!this.liveViewData) {
-				this.getliveViewData()
-			}
+			// if (this.liveId) {
+			// 	await this.getLiveMsg(this.liveItem)
+			// }
+			// if (!this.liveViewData) {
+			// 	this.getliveViewData()
+			// }
 			this.uuId = generateRandomString(16)
 			const isLiveLogin = uni.getStorageSync('isLiveLogin')
 			this.share = uni.getStorageSync('share')
@@ -764,7 +772,7 @@
 
 			if (isLiveLogin) {
 				if (this.liveId) {
-					const userInfo = uni.getStorageSync('userInfo');
+					const userInfo =JSON.parse(uni.getStorageSync('userInfo'));
 					if (userInfo) {
 						await this.getliving(this.liveId)
 						this.getCurrentActivities()
@@ -777,7 +785,7 @@
 			}
 
 			await this.resumePageActivity()
-			this.userinfo = uni.getStorageSync('userInfo')
+			this.userinfo = JSON.parse(uni.getStorageSync('userInfo'))
 			this.isAgreement = uni.getStorageSync('isAgreement')
 
 			this.$nextTick(() => {
@@ -822,11 +830,11 @@
 			}
 
 			// 页面加载完成后确保聊天内容滚动到底部
-			this.$nextTick(() => {
-				setTimeout(() => {
-					this.forceScrollToBottomOnSend();
-				}, 500);
-			});
+			// this.$nextTick(() => {
+			// 	setTimeout(() => {
+			// 		this.forceScrollToBottomOnSend();
+			// 	}, 500);
+			// });
 		},
 		onShareAppMessage() {
 			return {
@@ -974,6 +982,23 @@
 			}
 		},
 		methods: { 
+			// getUserLiveInfo(){
+			// 	getUserLiveInfo().then((res) => {
+			// 				if (res.code == 200) {
+			// 					const liveUserId=res.user.userId
+			// 					uni.setStorageSync('liveUserId', liveUserId)
+			// 					uni.setStorageSync('liveUserId11111', JSON.stringify(res.user))
+			// 					console.log('liveUser', res.user)
+			// 				} else {
+			// 					uni.showToast({
+			// 						icon: 'none',
+			// 						title: '请求失败'
+			// 					})
+			// 				}
+			// 			},
+			// 			(rej) => {}
+			// 		)
+			// },
 			// 芳华币
 			// 微信昵称授权相关方法
 			shouquan() {
@@ -1000,13 +1025,13 @@
 				document.addEventListener('UniAppJSBridgeReady', callback, { once: true })
 			  }
 			},
-			plusReady(callback) {
-			  if (window.plus) {
-				callback()
-			  } else {
-				document.addEventListener('plusready', callback, { once: true })
-			  }
-			},
+			// plusReady(callback) {
+			//   if (window.plus) {
+			// 	callback()
+			//   } else {
+			// 	document.addEventListener('plusready', callback, { once: true })
+			//   }
+			// },
 			confimrname() {
 				if (this.user.nickname == '') {
 					uni.showToast({
@@ -1081,8 +1106,8 @@
 													uni.setStorageSync('userData', JSON.stringify(res.user));
 												}
 										
-										this.userInfo = uni.getStorageSync('userInfo');
-										this.userData = uni.getStorageSync('userData');
+										this.userInfo = JSON.parse(uni.getStorageSync('userInfo'));
+										this.userData =JSON.parse(uni.getStorageSync('userInfo'));
 										// uni.setStorageSync('auto_userInfo', JSON.stringify(res.user));
 										// this.user = res.user
 										this.$store.commit('setCoureLogin', 1);
@@ -1116,10 +1141,10 @@
 				if (this.isOnload) {
 					return;
 				}
-				this.userInfo = uni.getStorageSync('userInfo');
-				if (this.userInfo) {
-					await this.getUserInfo();
-				}
+				// this.userInfo = uni.getStorageSync('userInfo');
+				// if (this.userInfo) {
+				// 	await this.getUserInfo();
+				// }
 				if (this.liveId) {
 					// 优先加载直播间信息(包含视频资源URL)
 					this.isOnload = true;
@@ -1147,7 +1172,7 @@
 						this.integralNum = res.data.integral
 					}
 				}).catch(error => {
-					console.error("获取芳华币数据失败:", error);
+					console.error("获取币数据失败:", error);
 
 				});
 			},
@@ -1398,9 +1423,6 @@
 					return;
 				}
 
-
-
-
 				// 使用服务器时间重新计算初始状态,确保设备时间不一致时也能正确判断
 				const liveStartTime = this.getLiveStartTime();
 				if (!liveStartTime) {
@@ -1610,22 +1632,28 @@
 			},
 			onInputFocus(value) {
 				this.isFocus = true
+				// 输入框聚焦时隐藏商品讲解卡片
+				this.isShowGoods = false
 				console.log('输入框聚焦:', value)
 			},
 			onInputBlur(value) {
 				this.isFocus = false
+				// 输入框失焦时恢复显示商品讲解卡片
+				if (this.goodsCard && Object.keys(this.goodsCard).length > 0) {
+					this.isShowGoods = true
+				}
 				console.log('输入框失焦:', value)
 			},
 			onSendMessage(message) {
 				console.log('发送消息:', message)
-				this.sendMsg()
+				this.sendMsg(1, message)
 			},
 			onInputChange(value) {
 				this.value = value
 			},
 			handleLiveStart() {
 				console.log('直播开始')
-				const userInfo = uni.getStorageSync('userInfo');
+				const userInfo = JSON.parse(uni.getStorageSync('userInfo'))
 				const isLiveLogin = uni.getStorageSync('isLiveLogin')
 
 				if (userInfo && isLiveLogin) {
@@ -1959,65 +1987,14 @@
 				// #endif
 			},
 			forceScrollToBottomOnSend() {
-				console.log('执行强制滚动到底部(发送消息专用)')
-
-				if (this.scrollTimer) {
-					clearTimeout(this.scrollTimer)
-					this.scrollTimer = null
-				}
-
-				this.lastScrollTime = Date.now()
-
-				// H5 环境下的特殊处理
-				// #ifdef H5
-				console.log('H5环境:使用 scroll-top 滚动')
-				// 清空 scroll-into-view,避免与 scroll-top 冲突
-				this.scrollIntoView = ''
-
-				// 使用时间戳作为 scroll-top 值,确保每次都变化以触发滚动
-				const now = Date.now()
-				this.scrollTop = now
-
-				// 延迟多次滚动,确保 DOM 完全更新后也能滚动到底部
-				setTimeout(() => {
-					this.scrollTop = now + 1
-				}, 50)
-				setTimeout(() => {
-					this.scrollTop = 999999999
-				}, 100)
-				setTimeout(() => {
-					this.scrollTop = 9999999999
-				}, 150)
-				// #endif
-
-				// 非 H5 环境下的处理
-				// #ifndef H5
-				this.scrollIntoView = ''
-
-				if (this.talklist.length > 0) {
-					const lastMessage = this.talklist[this.talklist.length - 1]
-					if (lastMessage && lastMessage.uniqueId) {
-						this.scrollIntoView = `list_${lastMessage.uniqueId}`
-					}
-				}
-
-				const targetScrollTop = Date.now()
-				this.scrollTop = targetScrollTop
-				this.nativeScrollToBottom()
-
+				// 重置滚动时间戳,确保不会因为防抖而忽略滚动
+				this.lastScrollTime = 0
+				// 参照 cc.nvue:发送后先滚动到底部,200ms 后再滚一次确保生效
+				
 				this.$nextTick(() => {
-					this.scrollIntoView = ''
-					this.scrollTop = targetScrollTop + 1
-					setTimeout(() => {
-						this.nativeScrollToBottom()
-					}, 50)
+					this.currentScrollTop = 99999;
+					this.scrollToBottom()
 				})
-
-				this.scrollTimer = setTimeout(() => {
-					this.checkAndForceScroll(targetScrollTop)
-					this.scrollTimer = null
-				}, 200)
-				// #endif
 			},
 			checkAndForceScroll(targetScrollTop) {
 				// H5 环境下的特殊处理
@@ -2185,48 +2162,59 @@
 				this.heartBeatRetryCount = 0
 			},
 			scrollToBottom() {
-				const now = Date.now()
-				if (now - this.lastScrollTime < this.scrollDebounceDelay) {
-					console.log('滚动防抖:忽略频繁调用')
-					return
-				}
-				this.lastScrollTime = now
-				if (this.scrollTimer) {
-					clearTimeout(this.scrollTimer)
-					this.scrollTimer = null
-				}
-
-				// H5 环境下的特殊处理:只做一次 DOM 滚动,避免多次滚动
-				// #ifdef H5
-				this.scrollIntoView = ''
-				this.scrollTop = now
-				this.scrollTimer = setTimeout(() => {
-					this.scrollTop = 999999999
-					this.scrollTimer = null
-					this.h5DomScrollToBottom()
-				}, 300)
-				// #endif
-
-				// 非 H5 环境
-				// #ifndef H5
-				this.scrollTop = 999999999
-				// #endif
-
-				// 通用方案:使用 scroll-into-view
+				// 参照 cc.nvue:无防抖,先设 scrollIntoView + scrollTop,50ms 后再设一次
 				this.$nextTick(() => {
-					if (this.talklist && this.talklist.length > 0) {
-						const lastMessage = this.talklist[this.talklist.length - 1]
-						const targetId = `list_${lastMessage.uniqueId || (this.talklist.length - 1)}`
-						console.log(
-							`尝试滚动到元素: ${targetId}, 当前消息数量: ${this.talklist.length}, 最后消息ID: ${lastMessage.uniqueId}`
-						)
-						this.scrollIntoView = targetId
-
-						setTimeout(() => {
-							this.scrollIntoView = ''
-						}, 200)
+					const lastIndex = (this.talklist && this.talklist.length) ? this.talklist.length - 1 : -1
+					if (lastIndex >= 0) {
+						const lastMessage = this.talklist[lastIndex]
+						const targetId = `list_${lastMessage.uniqueId != null ? lastMessage.uniqueId : lastIndex}`
+						this.scrollIntoView = `list_${lastIndex}`
+						// 使用时间戳确保每次都触发滚动
+						this.scrollTop = Date.now()
 					}
 				})
+				// const now = Date.now()
+				// if (now - this.lastScrollTime < this.scrollDebounceDelay) {
+				// 	console.log('滚动防抖:忽略频繁调用')
+				// 	return
+				// }
+				// this.lastScrollTime = now
+				// if (this.scrollTimer) {
+				// 	clearTimeout(this.scrollTimer)
+				// 	this.scrollTimer = null
+				// }
+
+				// // H5 环境下的特殊处理:只做一次 DOM 滚动,避免多次滚动
+				// // #ifdef H5
+				// this.scrollIntoView = ''
+				// this.scrollTop = now
+				// this.scrollTimer = setTimeout(() => {
+				// 	this.scrollTop = 999999999
+				// 	this.scrollTimer = null
+				// 	this.h5DomScrollToBottom()
+				// }, 300)
+				// // #endif
+
+				// // 非 H5 环境
+				// // #ifndef H5
+				// this.scrollTop = 999999999
+				// // #endif
+
+				// // 通用方案:使用 scroll-into-view
+				// this.$nextTick(() => {
+				// 	if (this.talklist && this.talklist.length > 0) {
+				// 		const lastMessage = this.talklist[this.talklist.length - 1]
+				// 		const targetId = `list_${lastMessage.uniqueId || (this.talklist.length - 1)}`
+				// 		console.log(
+				// 			`尝试滚动到元素: ${targetId}, 当前消息数量: ${this.talklist.length}, 最后消息ID: ${lastMessage.uniqueId}`
+				// 		)
+				// 		this.scrollIntoView = targetId
+
+				// 		setTimeout(() => {
+				// 			this.scrollIntoView = ''
+				// 		}, 200)
+				// 	}
+				// })
 			},
 			// H5 下通过 DOM 直接设置滚动位置,避免 scroll-view 的 scroll-top 不生效
 			h5DomScrollToBottom() {
@@ -2295,14 +2283,14 @@
 			},
 			async resumePageActivity() {
 				if (this.liveItem) {
-					const userInfo = uni.getStorageSync('userInfo');
+					const userInfo = JSON.parse(uni.getStorageSync('userInfo'))
 					if (userInfo) {
 						await this.getliving(this.liveId)
 					}
 					this.startTimeTimer(this.liveItem)
 				}
 				if (!this.isSocketAvailable()) {
-					const userInfo = uni.getStorageSync('userInfo');
+					const userInfo = JSON.parse(uni.getStorageSync('userInfo'))
 					if (userInfo) {
 						this.initSocket()
 					}
@@ -3046,12 +3034,7 @@
 						const reversedTalkList = [...rows].reverse()
 						this.talklist = Array.isArray(reversedTalkList) ? reversedTalkList : []
 						this.$nextTick(() => {
-							// #ifdef H5
-							setTimeout(() => this.h5DomScrollToBottom(), 400)
-							// #endif
-							// #ifndef H5
-							setTimeout(() => this.scrollToBottom(), 300)
-							// #endif
+							this.forceScrollToBottomOnSend()
 						})
 					} else {
 						this.talklist = []
@@ -3276,7 +3259,7 @@
 							this.liveCountdown = this.handleTime(res.data.startTime, 0)
 							if (!this.liveCountdown) {
 								uni.removeStorageSync('isAgreement')
-								const userInfo = uni.getStorageSync('userInfo');
+								const userInfo = JSON.parse(uni.getStorageSync('userInfo'))
 								if (userInfo) {
 									await this.getliving(this.liveId)
 								}
@@ -3404,6 +3387,7 @@
 				// 	url: '/pages_live/shopping/goods?productId=' + productId + '&liveId=' + this.liveId +
 				// 		'&goodsId=' + goodsId + '&storeId=' + this.storeId
 				// })
+				console.log('跳转',productId,goodsId)
 			   this.postMessage({login: 1,pagesUrl:'/pages_live/shopping/goods?productId=' + productId + '&liveId=' + this.liveId +'&goodsId=' + goodsId + '&storeId=' + this.storeId})
 			},
 			async queryCollect() {
@@ -3552,6 +3536,7 @@
 					return
 				}
 				if (!this.userData || !this.userData.userId) {
+					console.error('sokect',this.userData)
 					console.error('用户信息缺失,无法初始化WebSocket')
 					return
 				}
@@ -3564,18 +3549,17 @@
 				// setTimeout(() => {
 				// 	this.getliveUserInit(false)
 				// }, 200)
-                const liveUser = JSON.parse(uni.getStorageSync("liveUser"))||''
-				console.log('liveUser11111111111',liveUser)
+				this.liveUserId =JSON.parse(uni.getStorageSync('userInfo')).userId
 				const now = new Date()
 				this.timestamp = now.getTime()
 				const signature = CryptoJS.HmacSHA256(
-					`${this.liveId}${liveUser.userId}${this.userType}${this.timestamp}`, this.timestamp.toString()
+					`${this.liveId}${this.liveUserId}${this.userType}${this.timestamp}`, this.timestamp.toString()
 				).toString(CryptoJS.enc.Hex)
                 
 				try {
-					const baseWsUrl = 'wss://im.fhhx.runtzh.com/ws/app/webSocket'
+					const baseWsUrl = 'wss://liveapp.zkhj6.com/ws/app/webSocket'
 					let wsUrl =
-						`${baseWsUrl}?userId=${liveUser.userId}&liveId=${this.liveId}&userType=${this.userType}&timestamp=${this.timestamp}&signature=${signature}`
+						`${baseWsUrl}?userId=${this.liveUserId}&liveId=${this.liveId}&userType=${this.userType}&timestamp=${this.timestamp}&signature=${signature}`
 					if (this.qrFrom) {
 						wsUrl += this.qrFrom
 					}
@@ -3800,7 +3784,7 @@
 				if (isMyMessage) {
 					this.$nextTick(() => {
 						// 重置滚动时间戳,确保不会因为防抖而忽略滚动
-						this.lastScrollTime = 0
+						// this.lastScrollTime = 0
 						this.forceScrollToBottomOnSend()
 					})
 				} else {
@@ -3820,6 +3804,7 @@
 							cmd: socketMessage.cmd || '',
 							ts: Date.now()
 						}
+						console.log('websocketlist',message)
 						if (socketMessage.cmd == 'sendMsg') {
 							if (!this.isSocketAvailable()) {
 								uni.showToast({
@@ -3975,7 +3960,7 @@
 								clearInterval(this.redTimer)
 								this.redTimer = null
 							}
-							const userInfo = uni.getStorageSync('userInfo');
+							const userInfo = JSON.parse(uni.getStorageSync('userInfo'))
 							if (userInfo) {
 								await this.getliving(this.liveId)
 							}
@@ -4047,20 +4032,21 @@
 					return
 				}
 				const liveId = this.liveId
+				const userData=JSON.parse(uni.getStorageSync('userInfo'))
 				const data = {
 					liveId,
-					userId: this.userData.userId,
+					userId: userData.userId,
 					userType: 0,
 					cmd: 'sendMsg',
 					msg: text,
-					nickName: this.userData.nickname || '未命名',
-					avatar: this.userData.avatar || '/static/images/live/avatar.png'
+					nickName: userData.nickname || '未命名',
+					avatar: userData.avatar || '/static/images/live/avatar.png'
 				}
 				try {
 					this.socket.send({
 						data: JSON.stringify(data),
 						success: () => {
-							this.forceScrollToBottomOnSend()
+							// this.forceScrollToBottomOnSend()
 						},
 						fail: (err) => {
 							console.error('消息发送失败:', err)
@@ -4090,13 +4076,13 @@
 					}
 				}
 			},
-			sendMsg(retries = 1) {
+			sendMsg(retries = 1, message = null) {
 				if (this.isSending) return
 				this.isSending = true
 				setTimeout(() => {
 					this.isSending = false
 				}, 800)
-				const text = (this.value || '').trim()
+				const text = (message || this.value || '').trim()
 				if (!text) {
 					uni.showToast({
 						title: '不能发送空消息',
@@ -4110,7 +4096,7 @@
 							title: `连接不稳定,正在重试(${retries}次)...`,
 							icon: 'none'
 						})
-						setTimeout(() => this.sendMsg(retries - 1), 500)
+						setTimeout(() => this.sendMsg(retries - 1, text), 500)
 					} else {
 						uni.showToast({
 							title: '连接已断开,发送失败',
@@ -4122,20 +4108,22 @@
 				}
 				const liveId = this.liveId
 				this.value = ''
+				const userData=JSON.parse(uni.getStorageSync('userInfo'))
 				const data = {
 					liveId,
-					userId: this.userData.userId,
+					userId: userData.userId,
 					userType: 0,
 					cmd: 'sendMsg',
 					msg: text,
-					nickName: this.userData.nickname || '未命名',
-					avatar: this.userData.avatar || '/static/images/live/avatar.png'
+					nickName: userData.nickname || '未命名',
+					avatar: userData.avatar || '/static/images/live/avatar.png'
 				}
 				try {
 				this.socket.send({
 					data: JSON.stringify(data),
 					success: () => {
 						this.value = ''
+						console.error('消息发送成功:', data)
 						// 滚动会在 addToTalkList 中处理,这里不需要重复滚动
 					},
 						fail: (err) => {
@@ -4145,7 +4133,7 @@
 									title: `发送失败,正在重试(${retries}次)`,
 									icon: 'none'
 								})
-								setTimeout(() => this.sendMsg(retries - 1), 500)
+								setTimeout(() => this.sendMsg(retries - 1, text), 500)
 							} else {
 								uni.showToast({
 									title: '发送失败,请稍后再试',
@@ -4158,7 +4146,7 @@
 				} catch (err) {
 					console.error('发送消息异常:', err)
 					if (retries > 0) {
-						setTimeout(() => this.sendMsg(retries - 1), 500)
+						setTimeout(() => this.sendMsg(retries - 1, text), 500)
 					} else {
 						uni.showToast({
 							title: '发送失败,请稍后再试',

+ 7 - 7
pages_live/livingQ.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="swiper-wrapper">
 		<!-- 状态栏占位 -->
-		<image src="https://fs-1323137866.cos.ap-chongqing.myqcloud.com/live_bg.jpg" class="live-bg"></image>
+		<image src="https://zkzh-2025.oss-cn-beijing.aliyuncs.com/appimgs/live_bg.jpg" class="live-bg"></image>
 		<view class="container" :class="isFullscreen ? 'fullscreen ' : ''">
 			<view class="content">
 				<view class="content-top"  style="position:absolute; z-index: 9999;" :style="{top: paddingTop+'px'}">
@@ -1615,7 +1615,7 @@
 			},
 			onSendMessage(message) {
 				console.log('发送消息:', message)
-				this.sendMsg()
+				this.sendMsg(1, message)
 			},
 			onInputChange(value) {
 				this.value = value
@@ -4088,13 +4088,13 @@
 					}
 				}
 			},
-			sendMsg(retries = 1) {
+			sendMsg(retries = 1, message = null) {
 				if (this.isSending) return
 				this.isSending = true
 				setTimeout(() => {
 					this.isSending = false
 				}, 800)
-				const text = (this.value || '').trim()
+				const text = (message || this.value || '').trim()
 				if (!text) {
 					uni.showToast({
 						title: '不能发送空消息',
@@ -4108,7 +4108,7 @@
 							title: `连接不稳定,正在重试(${retries}次)...`,
 							icon: 'none'
 						})
-						setTimeout(() => this.sendMsg(retries - 1), 500)
+						setTimeout(() => this.sendMsg(retries - 1, text), 500)
 					} else {
 						uni.showToast({
 							title: '连接已断开,发送失败',
@@ -4143,7 +4143,7 @@
 									title: `发送失败,正在重试(${retries}次)`,
 									icon: 'none'
 								})
-								setTimeout(() => this.sendMsg(retries - 1), 500)
+								setTimeout(() => this.sendMsg(retries - 1, text), 500)
 							} else {
 								uni.showToast({
 									title: '发送失败,请稍后再试',
@@ -4156,7 +4156,7 @@
 				} catch (err) {
 					console.error('发送消息异常:', err)
 					if (retries > 0) {
-						setTimeout(() => this.sendMsg(retries - 1), 500)
+						setTimeout(() => this.sendMsg(retries - 1, text), 500)
 					} else {
 						uni.showToast({
 							title: '发送失败,请稍后再试',

+ 2 - 0
pages_live/shopping/goods.vue

@@ -252,6 +252,7 @@
 			},
 			//商品详情
 			getliveGoods() {
+				console.log(45544)
 				if (!this.productId) return;
 				uni.showLoading({
 					title: '加载中'
@@ -259,6 +260,7 @@
 				liveGoodsDetail(this.productId).then(res => {
 						uni.hideLoading()
 						if (res.code == 200) {
+							console.log(res)
 							this.goosDetail = res.data
 							this.banner = res.data.sliderImage.split(',');
 

+ 2 - 2
pages_live/shopping/storeOrderDetail.vue

@@ -5,14 +5,14 @@
 			<image class="bg" src="/static/images/integral/coin_points_mall_top_bg.png" mode=""></image>
 			<view class="top-inner">
 				<!-- 这里是状态栏 -->
-				<view class="fixed-top-box">
+				<!-- <view class="fixed-top-box">
 					<view class="status_bar" :style="{height: statusBarHeight}"></view>
 					<view class="back-box" @click="back">
 						<image src="/static/images/live/back_white.png" mode=""></image>
 						<text class="title">订单详情</text>
 						<text></text>
 					</view>
-				</view>
+				</view> -->
 
 				<!-- 顶部固定后站位元素 -->
 				<view style="padding-bottom: 88upx;">