@whitesev/utils 2.8.0 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +176 -176
- package/dist/index.amd.js +893 -874
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js +893 -874
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +893 -874
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +893 -874
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js +893 -874
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js +893 -874
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/CommonUtil.d.ts +59 -59
- package/dist/types/src/DOMUtils.d.ts +1 -1
- package/dist/types/src/Dictionary.d.ts +1 -1
- package/dist/types/src/Httpx.d.ts +2 -2
- package/dist/types/src/Progress.d.ts +0 -4
- package/dist/types/src/TryCatch.d.ts +2 -2
- package/dist/types/src/Utils.d.ts +365 -365
- package/dist/types/src/UtilsGMCookie.d.ts +2 -2
- package/dist/types/src/UtilsGMMenu.d.ts +1 -1
- package/dist/types/src/indexedDB.d.ts +3 -3
- package/dist/types/src/types/Event.d.ts +188 -188
- package/dist/types/src/types/Httpx.d.ts +1344 -1343
- package/dist/types/src/types/Log.d.ts +19 -19
- package/dist/types/src/types/Progress.d.ts +20 -20
- package/dist/types/src/types/React.d.ts +119 -119
- package/dist/types/src/types/TryCatch.d.ts +9 -9
- package/dist/types/src/types/UtilsGMCookie.d.ts +93 -93
- package/dist/types/src/types/UtilsGMMenu.d.ts +77 -77
- package/dist/types/src/types/Vue2.d.ts +166 -166
- package/dist/types/src/types/WindowApi.d.ts +14 -14
- package/dist/types/src/types/ajaxHooker.d.ts +151 -151
- package/dist/types/src/types/env.d.ts +7 -2
- package/dist/types/src/types/global.d.ts +31 -31
- package/package.json +16 -7
- package/src/ColorConversion.ts +105 -106
- package/src/CommonUtil.ts +280 -279
- package/src/DOMUtils.ts +251 -272
- package/src/Dictionary.ts +153 -154
- package/src/GBKEncoder.ts +108 -112
- package/src/Hooks.ts +73 -81
- package/src/Httpx.ts +1457 -1466
- package/src/LockFunction.ts +62 -62
- package/src/Log.ts +258 -259
- package/src/ModuleRaid.js +1 -0
- package/src/Progress.ts +108 -114
- package/src/TryCatch.ts +86 -86
- package/src/Utils.ts +4772 -4825
- package/src/UtilsCommon.ts +14 -14
- package/src/UtilsGMCookie.ts +254 -261
- package/src/UtilsGMMenu.ts +445 -454
- package/src/Vue.ts +233 -229
- package/src/WindowApi.ts +59 -59
- package/src/ajaxHooker/ajaxHooker.js +1 -0
- package/src/indexedDB.ts +497 -502
- package/src/types/Event.d.ts +188 -188
- package/src/types/Httpx.d.ts +1344 -1343
- package/src/types/Log.d.ts +19 -19
- package/src/types/Progress.d.ts +20 -20
- package/src/types/React.d.ts +119 -119
- package/src/types/TryCatch.d.ts +9 -9
- package/src/types/UtilsGMCookie.d.ts +93 -93
- package/src/types/UtilsGMMenu.d.ts +77 -77
- package/src/types/Vue2.d.ts +166 -166
- package/src/types/WindowApi.d.ts +14 -14
- package/src/types/ajaxHooker.d.ts +151 -151
- package/src/types/env.d.ts +7 -2
- package/src/types/global.d.ts +31 -31
package/dist/index.iife.js
CHANGED
|
@@ -10,7 +10,7 @@ var Utils = (function () {
|
|
|
10
10
|
if (typeof str !== "string") {
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
|
-
if (!str.match(/^(
|
|
13
|
+
if (!str.match(/^(#|)[0-9a-fA-F]{6}$/)) {
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
16
|
return true;
|
|
@@ -24,18 +24,10 @@ var Utils = (function () {
|
|
|
24
24
|
*/
|
|
25
25
|
hexToRgba(hex, opacity) {
|
|
26
26
|
if (!this.isHex(hex)) {
|
|
27
|
-
throw new TypeError(
|
|
27
|
+
throw new TypeError(`输入错误的hex:${hex}`);
|
|
28
28
|
}
|
|
29
29
|
return hex && hex.replace(/\s+/g, "").length === 7
|
|
30
|
-
?
|
|
31
|
-
parseInt("0x" + hex.slice(1, 3)) +
|
|
32
|
-
"," +
|
|
33
|
-
parseInt("0x" + hex.slice(3, 5)) +
|
|
34
|
-
"," +
|
|
35
|
-
parseInt("0x" + hex.slice(5, 7)) +
|
|
36
|
-
"," +
|
|
37
|
-
opacity +
|
|
38
|
-
")"
|
|
30
|
+
? `rgba(${parseInt(`0x${hex.slice(1, 3)}`)},${parseInt(`0x${hex.slice(3, 5)}`)},${parseInt(`0x${hex.slice(5, 7)}`)},${opacity})`
|
|
39
31
|
: "";
|
|
40
32
|
}
|
|
41
33
|
/**
|
|
@@ -44,14 +36,15 @@ var Utils = (function () {
|
|
|
44
36
|
*/
|
|
45
37
|
hexToRgb(str) {
|
|
46
38
|
if (!this.isHex(str)) {
|
|
47
|
-
throw new TypeError(
|
|
39
|
+
throw new TypeError(`输入错误的hex:${str}`);
|
|
48
40
|
}
|
|
49
41
|
/* replace替换查找的到的字符串 */
|
|
50
42
|
str = str.replace("#", "");
|
|
51
43
|
/* match得到查询数组 */
|
|
52
|
-
|
|
44
|
+
const hxs = str.match(/../g);
|
|
53
45
|
for (let index = 0; index < 3; index++) {
|
|
54
|
-
|
|
46
|
+
const value = parseInt(hxs[index], 16);
|
|
47
|
+
Reflect.set(hxs, index, value);
|
|
55
48
|
}
|
|
56
49
|
return hxs;
|
|
57
50
|
}
|
|
@@ -63,16 +56,16 @@ var Utils = (function () {
|
|
|
63
56
|
*/
|
|
64
57
|
rgbToHex(redValue, greenValue, blueValue) {
|
|
65
58
|
/* 验证输入的rgb值是否合法 */
|
|
66
|
-
|
|
59
|
+
const validPattern = /^\d{1,3}$/;
|
|
67
60
|
if (!validPattern.test(redValue.toString()) ||
|
|
68
61
|
!validPattern.test(greenValue.toString()) ||
|
|
69
62
|
!validPattern.test(blueValue.toString()))
|
|
70
63
|
throw new TypeError("输入错误的rgb颜色值");
|
|
71
|
-
|
|
64
|
+
const hexs = [redValue.toString(16), greenValue.toString(16), blueValue.toString(16)];
|
|
72
65
|
for (let index = 0; index < 3; index++)
|
|
73
66
|
if (hexs[index].length == 1)
|
|
74
|
-
hexs[index] =
|
|
75
|
-
return
|
|
67
|
+
hexs[index] = `0${hexs[index]}`;
|
|
68
|
+
return `#${hexs.join("")}`;
|
|
76
69
|
}
|
|
77
70
|
/**
|
|
78
71
|
* 获取颜色变暗或亮
|
|
@@ -81,11 +74,13 @@ var Utils = (function () {
|
|
|
81
74
|
*/
|
|
82
75
|
getDarkColor(color, level) {
|
|
83
76
|
if (!this.isHex(color)) {
|
|
84
|
-
throw new TypeError(
|
|
77
|
+
throw new TypeError(`输入错误的hex:${color}`);
|
|
85
78
|
}
|
|
86
|
-
|
|
79
|
+
const rgbc = this.hexToRgb(color);
|
|
87
80
|
for (let index = 0; index < 3; index++) {
|
|
88
|
-
|
|
81
|
+
const rgbcItemValue = rgbc[index];
|
|
82
|
+
const value = Math.floor(Number(rgbcItemValue) * (1 - Number(level)));
|
|
83
|
+
Reflect.set(rgbc, index, value);
|
|
89
84
|
}
|
|
90
85
|
return this.rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
|
|
91
86
|
}
|
|
@@ -96,40 +91,43 @@ var Utils = (function () {
|
|
|
96
91
|
*/
|
|
97
92
|
getLightColor(color, level) {
|
|
98
93
|
if (!this.isHex(color)) {
|
|
99
|
-
throw new TypeError(
|
|
94
|
+
throw new TypeError(`输入错误的hex:${color}`);
|
|
100
95
|
}
|
|
101
|
-
|
|
96
|
+
const rgbc = this.hexToRgb(color);
|
|
102
97
|
for (let index = 0; index < 3; index++) {
|
|
103
|
-
|
|
98
|
+
const rgbcItemValue = Number(rgbc[index]);
|
|
99
|
+
const value = Math.floor(255 - rgbcItemValue * level + rgbcItemValue);
|
|
100
|
+
Reflect.set(rgbc, index, value);
|
|
104
101
|
}
|
|
105
102
|
return this.rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
|
|
106
103
|
}
|
|
107
104
|
}
|
|
108
105
|
|
|
109
106
|
class GBKEncoder {
|
|
110
|
-
#data
|
|
107
|
+
#data;
|
|
111
108
|
#U2Ghash = {};
|
|
112
109
|
#G2Uhash = {};
|
|
113
110
|
constructor() {
|
|
114
|
-
let dataText = this.handleText("4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364");
|
|
111
|
+
const dataText = this.handleText("4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364");
|
|
115
112
|
let index = 0;
|
|
116
113
|
this.#data = dataText.match(/..../g);
|
|
117
114
|
for (let i = 0x81; i <= 0xfe; i++) {
|
|
118
115
|
for (let j = 0x40; j <= 0xfe; j++) {
|
|
119
|
-
this.#U2Ghash[this.#data[index++]] =
|
|
116
|
+
this.#U2Ghash[this.#data[index++]] = `%${i.toString(16)}%${j.toString(16)}`.toUpperCase();
|
|
120
117
|
}
|
|
121
118
|
}
|
|
122
|
-
for (
|
|
123
|
-
this.#
|
|
119
|
+
for (const key in this.#U2Ghash) {
|
|
120
|
+
const u2ghashValue = Reflect.get(this.#U2Ghash, key);
|
|
121
|
+
Reflect.set(this.#G2Uhash, u2ghashValue, key);
|
|
124
122
|
}
|
|
125
123
|
}
|
|
126
124
|
handleText(text) {
|
|
127
125
|
text = text
|
|
128
|
-
.replace(/#(\d+)\$/g, function (
|
|
126
|
+
.replace(/#(\d+)\$/g, function (_, b) {
|
|
129
127
|
return Array(+b + 3).join("#");
|
|
130
128
|
})
|
|
131
129
|
.replace(/#/g, "####")
|
|
132
|
-
.replace(/(\w\w):([\w#]+)(?:,|$)/g, function (
|
|
130
|
+
.replace(/(\w\w):([\w#]+)(?:,|$)/g, function (_, hd, dt) {
|
|
133
131
|
return dt.replace(/../g, function (a) {
|
|
134
132
|
if (a != "##") {
|
|
135
133
|
return hd + a;
|
|
@@ -149,8 +147,8 @@ var Utils = (function () {
|
|
|
149
147
|
* @param str
|
|
150
148
|
*/
|
|
151
149
|
encode(str) {
|
|
152
|
-
|
|
153
|
-
return [...str].reduce((result, val
|
|
150
|
+
const that = this;
|
|
151
|
+
return [...str].reduce((result, val) => {
|
|
154
152
|
return result + toGBK(val);
|
|
155
153
|
}, "");
|
|
156
154
|
function toGBK(val) {
|
|
@@ -159,7 +157,7 @@ var Utils = (function () {
|
|
|
159
157
|
const codePoint = val.codePointAt(i);
|
|
160
158
|
const code = String.fromCodePoint(codePoint);
|
|
161
159
|
let key = codePoint.toString(16);
|
|
162
|
-
key.length != 4 && (key =
|
|
160
|
+
key.length != 4 && (key = `000${key}`.match(/....$/)?.[0]);
|
|
163
161
|
/* Add up i by code.length */
|
|
164
162
|
i += code.length - 1;
|
|
165
163
|
/* If code is in ascii range */
|
|
@@ -173,9 +171,9 @@ var Utils = (function () {
|
|
|
173
171
|
continue;
|
|
174
172
|
}
|
|
175
173
|
/*
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
174
|
+
If 2 or more char combines to one visible code,
|
|
175
|
+
or just this code is not in GBK
|
|
176
|
+
*/
|
|
179
177
|
result += toGBK(`&#${codePoint};`);
|
|
180
178
|
}
|
|
181
179
|
return result;
|
|
@@ -186,18 +184,18 @@ var Utils = (function () {
|
|
|
186
184
|
* @param str
|
|
187
185
|
*/
|
|
188
186
|
decode(str) {
|
|
189
|
-
|
|
190
|
-
|
|
187
|
+
const GBKMatcher = /%[0-9A-F]{2}%[0-9A-F]{2}/;
|
|
188
|
+
const UTFMatcher = /%[0-9A-F]{2}/;
|
|
191
189
|
// let gbk = true;
|
|
192
190
|
let utf = true;
|
|
193
191
|
const that = this;
|
|
194
192
|
while (utf) {
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
const gbkMatch = str.match(GBKMatcher);
|
|
194
|
+
const utfMatch = str.match(UTFMatcher);
|
|
197
195
|
// gbk = Boolean(gbkMatch);
|
|
198
196
|
utf = Boolean(utfMatch);
|
|
199
197
|
if (gbkMatch && gbkMatch in that.#G2Uhash) {
|
|
200
|
-
str = str.replace(gbkMatch, String.fromCharCode(
|
|
198
|
+
str = str.replace(gbkMatch, String.fromCharCode(`0x${that.#G2Uhash[gbkMatch]}`));
|
|
201
199
|
}
|
|
202
200
|
else {
|
|
203
201
|
str = str.replace(utfMatch, decodeURIComponent(utfMatch));
|
|
@@ -211,7 +209,7 @@ var Utils = (function () {
|
|
|
211
209
|
/* 定义变量和函数 */
|
|
212
210
|
let callbackFunction = null;
|
|
213
211
|
let context = null;
|
|
214
|
-
let handleError = (
|
|
212
|
+
let handleError = () => { };
|
|
215
213
|
let defaultDetails = {
|
|
216
214
|
log: true,
|
|
217
215
|
};
|
|
@@ -243,7 +241,7 @@ var Utils = (function () {
|
|
|
243
241
|
run(callback, __context__) {
|
|
244
242
|
callbackFunction = callback;
|
|
245
243
|
context = __context__ || this;
|
|
246
|
-
|
|
244
|
+
const result = executeTryCatch(callbackFunction, handleError, context);
|
|
247
245
|
return result !== void 0 ? result : TryCatchCore;
|
|
248
246
|
},
|
|
249
247
|
};
|
|
@@ -267,8 +265,8 @@ var Utils = (function () {
|
|
|
267
265
|
catch (error) {
|
|
268
266
|
if (defaultDetails.log) {
|
|
269
267
|
callback = callback;
|
|
270
|
-
console.log(`%c ${callback?.name ? callback?.name : callback
|
|
271
|
-
console.log(`%c
|
|
268
|
+
console.log(`%c ${callback?.name ? callback?.name : `${callback}`} `, "color: #f20000");
|
|
269
|
+
console.log(`%c ${error}`, "color: #f20000");
|
|
272
270
|
console.trace(callback);
|
|
273
271
|
}
|
|
274
272
|
if (handleErrorFunc) {
|
|
@@ -287,9 +285,9 @@ var Utils = (function () {
|
|
|
287
285
|
|
|
288
286
|
class CommonUtil {
|
|
289
287
|
assign(target = {}, source = {}, isAdd = false) {
|
|
290
|
-
|
|
288
|
+
const UtilsContext = this;
|
|
291
289
|
if (Array.isArray(source)) {
|
|
292
|
-
|
|
290
|
+
const canTraverse = source.filter((item) => {
|
|
293
291
|
return typeof item === "object";
|
|
294
292
|
});
|
|
295
293
|
if (!canTraverse.length) {
|
|
@@ -305,34 +303,34 @@ var Utils = (function () {
|
|
|
305
303
|
if (isAdd) {
|
|
306
304
|
for (const sourceKeyName in source) {
|
|
307
305
|
const targetKeyName = sourceKeyName;
|
|
308
|
-
|
|
309
|
-
|
|
306
|
+
const targetValue = Reflect.get(target, targetKeyName);
|
|
307
|
+
const sourceValue = Reflect.get(source, sourceKeyName);
|
|
310
308
|
if (typeof sourceValue === "object" &&
|
|
311
309
|
sourceValue != null &&
|
|
312
310
|
sourceKeyName in target &&
|
|
313
311
|
!UtilsContext.isDOM(sourceValue)) {
|
|
314
312
|
/* 源端的值是object类型,且不是元素节点 */
|
|
315
|
-
target
|
|
313
|
+
Reflect.set(target, sourceKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
|
|
316
314
|
continue;
|
|
317
315
|
}
|
|
318
|
-
target
|
|
316
|
+
Reflect.set(target, sourceKeyName, sourceValue);
|
|
319
317
|
}
|
|
320
318
|
}
|
|
321
319
|
else {
|
|
322
320
|
for (const targetKeyName in target) {
|
|
323
321
|
if (targetKeyName in source) {
|
|
324
|
-
|
|
325
|
-
|
|
322
|
+
const targetValue = Reflect.get(target, targetKeyName);
|
|
323
|
+
const sourceValue = Reflect.get(source, targetKeyName);
|
|
326
324
|
if (typeof sourceValue === "object" &&
|
|
327
325
|
sourceValue != null &&
|
|
328
326
|
!UtilsContext.isDOM(sourceValue) &&
|
|
329
327
|
Object.keys(sourceValue).length) {
|
|
330
328
|
/* 源端的值是object类型,且不是元素节点 */
|
|
331
|
-
target
|
|
329
|
+
Reflect.set(target, targetKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
|
|
332
330
|
continue;
|
|
333
331
|
}
|
|
334
332
|
/* 直接赋值 */
|
|
335
|
-
target
|
|
333
|
+
Reflect.set(target, targetKeyName, sourceValue);
|
|
336
334
|
}
|
|
337
335
|
}
|
|
338
336
|
}
|
|
@@ -340,7 +338,7 @@ var Utils = (function () {
|
|
|
340
338
|
}
|
|
341
339
|
isNull(...args) {
|
|
342
340
|
let result = true;
|
|
343
|
-
|
|
341
|
+
const checkList = [...args];
|
|
344
342
|
for (const objItem of checkList) {
|
|
345
343
|
let itemResult = false;
|
|
346
344
|
if (objItem === null || objItem === undefined) {
|
|
@@ -366,11 +364,12 @@ var Utils = (function () {
|
|
|
366
364
|
case "boolean":
|
|
367
365
|
itemResult = !objItem;
|
|
368
366
|
break;
|
|
369
|
-
case "function":
|
|
370
|
-
|
|
367
|
+
case "function": {
|
|
368
|
+
const funcStr = objItem.toString().replace(/\s/g, "");
|
|
371
369
|
/* 排除()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){} */
|
|
372
370
|
itemResult = Boolean(funcStr.match(/^\(.*?\)=>\{\}$|^function.*?\(.*?\)\{\}$/));
|
|
373
371
|
break;
|
|
372
|
+
}
|
|
374
373
|
}
|
|
375
374
|
}
|
|
376
375
|
result = result && itemResult;
|
|
@@ -391,18 +390,23 @@ var Utils = (function () {
|
|
|
391
390
|
return target instanceof Node;
|
|
392
391
|
}
|
|
393
392
|
isNotNull(...args) {
|
|
394
|
-
|
|
393
|
+
const UtilsContext = this;
|
|
395
394
|
return !UtilsContext.isNull.apply(this, args);
|
|
396
395
|
}
|
|
397
396
|
deepClone(obj) {
|
|
398
|
-
|
|
397
|
+
const UtilsContext = this;
|
|
399
398
|
if (obj === void 0)
|
|
400
399
|
return void 0;
|
|
401
400
|
if (obj === null)
|
|
402
401
|
return null;
|
|
403
|
-
|
|
402
|
+
const clone = obj instanceof Array ? [] : {};
|
|
404
403
|
for (const [key, value] of Object.entries(obj)) {
|
|
405
|
-
|
|
404
|
+
if (typeof value === "object") {
|
|
405
|
+
Reflect.set(clone, key, UtilsContext.deepClone(value));
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
Reflect.set(clone, key, value);
|
|
409
|
+
}
|
|
406
410
|
}
|
|
407
411
|
return clone;
|
|
408
412
|
}
|
|
@@ -429,11 +433,11 @@ var Utils = (function () {
|
|
|
429
433
|
}
|
|
430
434
|
TryCatch()
|
|
431
435
|
.config({ log: false })
|
|
432
|
-
.error((
|
|
436
|
+
.error(() => {
|
|
433
437
|
TryCatch()
|
|
434
438
|
.error(() => {
|
|
435
439
|
try {
|
|
436
|
-
result = new Function(
|
|
440
|
+
result = new Function(`return ${data}`)();
|
|
437
441
|
}
|
|
438
442
|
catch (error2) {
|
|
439
443
|
if (typeof errorCallBack === "function") {
|
|
@@ -444,14 +448,14 @@ var Utils = (function () {
|
|
|
444
448
|
.run(() => {
|
|
445
449
|
if (data &&
|
|
446
450
|
/^[\],:{}\s]*$/.test(data
|
|
447
|
-
.replace(/\\(?:["
|
|
448
|
-
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][
|
|
451
|
+
.replace(/\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
|
|
452
|
+
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/g, "]")
|
|
449
453
|
.replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
|
|
450
|
-
result = new Function(
|
|
454
|
+
result = new Function(`return ${data}`)();
|
|
451
455
|
}
|
|
452
456
|
else {
|
|
453
457
|
if (typeof errorCallBack === "function") {
|
|
454
|
-
errorCallBack(new Error("target is not
|
|
458
|
+
errorCallBack(new Error("target is not JSON object"));
|
|
455
459
|
}
|
|
456
460
|
}
|
|
457
461
|
});
|
|
@@ -463,7 +467,7 @@ var Utils = (function () {
|
|
|
463
467
|
return result;
|
|
464
468
|
}
|
|
465
469
|
}
|
|
466
|
-
|
|
470
|
+
const commonUtil = new CommonUtil();
|
|
467
471
|
|
|
468
472
|
class UtilsGMCookie {
|
|
469
473
|
windowApi = {
|
|
@@ -492,14 +496,14 @@ var Utils = (function () {
|
|
|
492
496
|
if (typeof cookieName !== "string") {
|
|
493
497
|
throw new TypeError("Utils.GMCookie.get 参数cookieName 必须为字符串");
|
|
494
498
|
}
|
|
495
|
-
|
|
499
|
+
const cookies = this.getCookiesList();
|
|
496
500
|
let findValue = void 0;
|
|
497
501
|
for (const cookieItem of cookies) {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
502
|
+
const item = cookieItem.trim();
|
|
503
|
+
const itemSplit = item.split("=");
|
|
504
|
+
const itemName = itemSplit[0];
|
|
501
505
|
itemSplit.splice(0, 1);
|
|
502
|
-
|
|
506
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
503
507
|
if (itemName === cookieName) {
|
|
504
508
|
findValue = {
|
|
505
509
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -529,7 +533,7 @@ var Utils = (function () {
|
|
|
529
533
|
if (option == null) {
|
|
530
534
|
throw new Error("Utils.GMCookie.list 参数不能为空");
|
|
531
535
|
}
|
|
532
|
-
|
|
536
|
+
const resultData = [];
|
|
533
537
|
try {
|
|
534
538
|
let defaultOption = {
|
|
535
539
|
url: this.windowApi.window.location.href,
|
|
@@ -538,16 +542,16 @@ var Utils = (function () {
|
|
|
538
542
|
path: "/",
|
|
539
543
|
};
|
|
540
544
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
541
|
-
|
|
545
|
+
const cookies = this.getCookiesList();
|
|
542
546
|
cookies.forEach((item) => {
|
|
543
547
|
item = item.trim();
|
|
544
|
-
|
|
545
|
-
|
|
548
|
+
const itemSplit = item.split("=");
|
|
549
|
+
const itemName = itemSplit[0];
|
|
546
550
|
itemSplit.splice(0, 1);
|
|
547
|
-
|
|
548
|
-
|
|
551
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
552
|
+
const nameRegexp = defaultOption.name instanceof RegExp
|
|
549
553
|
? defaultOption.name
|
|
550
|
-
: new RegExp(
|
|
554
|
+
: new RegExp(`^${defaultOption.name}`, "g");
|
|
551
555
|
if (itemName.match(nameRegexp)) {
|
|
552
556
|
resultData.push({
|
|
553
557
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -581,7 +585,7 @@ var Utils = (function () {
|
|
|
581
585
|
if (option == null) {
|
|
582
586
|
throw new Error("Utils.GMCookie.list 参数不能为空");
|
|
583
587
|
}
|
|
584
|
-
|
|
588
|
+
const resultData = [];
|
|
585
589
|
let defaultOption = {
|
|
586
590
|
url: this.windowApi.window.location.href,
|
|
587
591
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -589,16 +593,16 @@ var Utils = (function () {
|
|
|
589
593
|
path: "/",
|
|
590
594
|
};
|
|
591
595
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
592
|
-
|
|
596
|
+
const cookies = this.getCookiesList();
|
|
593
597
|
cookies.forEach((item) => {
|
|
594
598
|
item = item.trim();
|
|
595
|
-
|
|
596
|
-
|
|
599
|
+
const itemSplit = item.split("=");
|
|
600
|
+
const itemName = itemSplit[0];
|
|
597
601
|
itemSplit.splice(0, 1);
|
|
598
|
-
|
|
599
|
-
|
|
602
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
603
|
+
const nameRegexp = defaultOption.name instanceof RegExp
|
|
600
604
|
? defaultOption.name
|
|
601
|
-
: new RegExp(
|
|
605
|
+
: new RegExp(`^${defaultOption.name}`, "g");
|
|
602
606
|
if (itemName.match(nameRegexp)) {
|
|
603
607
|
resultData.push({
|
|
604
608
|
domain: this.windowApi.window.location.hostname,
|
|
@@ -638,17 +642,12 @@ var Utils = (function () {
|
|
|
638
642
|
expirationDate: Math.floor(Date.now()) + 60 * 60 * 24 * 30,
|
|
639
643
|
};
|
|
640
644
|
defaultOption = commonUtil.assign(defaultOption, option);
|
|
641
|
-
|
|
645
|
+
const life = defaultOption.expirationDate
|
|
642
646
|
? defaultOption.expirationDate
|
|
643
647
|
: Math.floor(Date.now()) + 60 * 60 * 24 * 30;
|
|
644
|
-
let cookieStr = defaultOption.name
|
|
645
|
-
"=" +
|
|
646
|
-
decodeURIComponent(defaultOption.value) +
|
|
647
|
-
";expires=" +
|
|
648
|
-
new Date(life).toGMTString() +
|
|
649
|
-
"; path=/";
|
|
648
|
+
let cookieStr = `${defaultOption.name}=${decodeURIComponent(defaultOption.value)};expires=${new Date(life).toGMTString()}; path=/`;
|
|
650
649
|
if (commonUtil.isNull(defaultOption.domain)) {
|
|
651
|
-
cookieStr +=
|
|
650
|
+
cookieStr += `; domain=${defaultOption.domain}`;
|
|
652
651
|
}
|
|
653
652
|
this.windowApi.document.cookie = cookieStr;
|
|
654
653
|
}
|
|
@@ -700,14 +699,14 @@ var Utils = (function () {
|
|
|
700
699
|
if (cookieStr.trim() === "") {
|
|
701
700
|
return [];
|
|
702
701
|
}
|
|
703
|
-
|
|
704
|
-
|
|
702
|
+
const cookies = cookieStr.split(";");
|
|
703
|
+
const result = [];
|
|
705
704
|
for (const cookieItem of cookies) {
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
705
|
+
const item = cookieItem.trim();
|
|
706
|
+
const itemSplit = item.split("=");
|
|
707
|
+
const itemName = itemSplit[0];
|
|
709
708
|
itemSplit.splice(0, 1);
|
|
710
|
-
|
|
709
|
+
const itemValue = decodeURIComponent(itemSplit.join(""));
|
|
711
710
|
result.push({
|
|
712
711
|
key: itemName,
|
|
713
712
|
value: itemValue,
|
|
@@ -717,6 +716,7 @@ var Utils = (function () {
|
|
|
717
716
|
}
|
|
718
717
|
}
|
|
719
718
|
|
|
719
|
+
/* eslint-disable */
|
|
720
720
|
// ==UserScript==
|
|
721
721
|
// @name ajaxHooker
|
|
722
722
|
// @author cxxjackie
|
|
@@ -1767,15 +1767,15 @@ var Utils = (function () {
|
|
|
1767
1767
|
*/
|
|
1768
1768
|
init() {
|
|
1769
1769
|
for (let index = 0; index < this.$data.data.length; index++) {
|
|
1770
|
-
|
|
1770
|
+
const menuOption = this.$data.data[index]["data"];
|
|
1771
1771
|
menuOption.enable = Boolean(this.getLocalMenuData(menuOption.key, menuOption.enable));
|
|
1772
1772
|
if (typeof menuOption.showText !== "function") {
|
|
1773
1773
|
menuOption.showText = (menuText, menuEnable) => {
|
|
1774
1774
|
if (menuEnable) {
|
|
1775
|
-
return this.$emoji.success
|
|
1775
|
+
return `${this.$emoji.success} ${menuText}`;
|
|
1776
1776
|
}
|
|
1777
1777
|
else {
|
|
1778
|
-
return this.$emoji.error
|
|
1778
|
+
return `${this.$emoji.error} ${menuText}`;
|
|
1779
1779
|
}
|
|
1780
1780
|
};
|
|
1781
1781
|
}
|
|
@@ -1786,7 +1786,7 @@ var Utils = (function () {
|
|
|
1786
1786
|
* @param menuOptions 如果存在,使用它
|
|
1787
1787
|
*/
|
|
1788
1788
|
register(menuOptions) {
|
|
1789
|
-
|
|
1789
|
+
const that = this;
|
|
1790
1790
|
if (menuOptions == null) {
|
|
1791
1791
|
throw new TypeError("register菜单数据不能为空");
|
|
1792
1792
|
}
|
|
@@ -1794,9 +1794,9 @@ var Utils = (function () {
|
|
|
1794
1794
|
menuOptions = [menuOptions];
|
|
1795
1795
|
}
|
|
1796
1796
|
for (let index = 0; index < menuOptions.length; index++) {
|
|
1797
|
-
|
|
1797
|
+
const cloneMenuOptionData = commonUtil.deepClone(menuOptions[index].data);
|
|
1798
1798
|
const { showText, clickCallBack } = this.handleMenuData(cloneMenuOptionData);
|
|
1799
|
-
|
|
1799
|
+
const menuId = that.context.GM_Api.registerMenuCommand(showText, clickCallBack);
|
|
1800
1800
|
menuOptions[index].id = menuId;
|
|
1801
1801
|
cloneMenuOptionData.deleteMenu = function () {
|
|
1802
1802
|
that.context.GM_Api.unregisterMenuCommand(menuId);
|
|
@@ -1810,7 +1810,7 @@ var Utils = (function () {
|
|
|
1810
1810
|
* @param {string} key 键
|
|
1811
1811
|
*/
|
|
1812
1812
|
getLocalMenuData(key, defaultValue) {
|
|
1813
|
-
|
|
1813
|
+
const localData = this.context.GM_Api.getValue(this.$data.key, {});
|
|
1814
1814
|
if (key in localData) {
|
|
1815
1815
|
return localData[key];
|
|
1816
1816
|
}
|
|
@@ -1824,7 +1824,7 @@ var Utils = (function () {
|
|
|
1824
1824
|
* @param value 值
|
|
1825
1825
|
*/
|
|
1826
1826
|
setLocalMenuData(key, value) {
|
|
1827
|
-
|
|
1827
|
+
const localData = this.context.GM_Api.getValue(this.$data.key, {});
|
|
1828
1828
|
localData[key] = value;
|
|
1829
1829
|
this.context.GM_Api.setValue(this.$data.key, localData);
|
|
1830
1830
|
},
|
|
@@ -1837,10 +1837,10 @@ var Utils = (function () {
|
|
|
1837
1837
|
if (typeof menuOption.showText !== "function") {
|
|
1838
1838
|
menuOption.showText = (menuText, menuEnable) => {
|
|
1839
1839
|
if (menuEnable) {
|
|
1840
|
-
return this.$emoji.success
|
|
1840
|
+
return `${this.$emoji.success} ${menuText}`;
|
|
1841
1841
|
}
|
|
1842
1842
|
else {
|
|
1843
|
-
return this.$emoji.error
|
|
1843
|
+
return `${this.$emoji.error} ${menuText}`;
|
|
1844
1844
|
}
|
|
1845
1845
|
};
|
|
1846
1846
|
}
|
|
@@ -1851,12 +1851,12 @@ var Utils = (function () {
|
|
|
1851
1851
|
* @param menuOption
|
|
1852
1852
|
*/
|
|
1853
1853
|
handleMenuData(menuOption) {
|
|
1854
|
-
|
|
1855
|
-
|
|
1854
|
+
const that = this;
|
|
1855
|
+
const menuLocalDataItemKey = menuOption.key;
|
|
1856
1856
|
/* 菜单默认开启的状态 */
|
|
1857
|
-
|
|
1857
|
+
const defaultEnable = Boolean(this.getLocalMenuData(menuLocalDataItemKey, menuOption.enable));
|
|
1858
1858
|
/** 油猴菜单上显示的文本 */
|
|
1859
|
-
|
|
1859
|
+
const showText = menuOption.showText(menuOption.text, defaultEnable);
|
|
1860
1860
|
// const GMMenuOptions = {
|
|
1861
1861
|
// /**
|
|
1862
1862
|
// * 菜单的id
|
|
@@ -1886,7 +1886,7 @@ var Utils = (function () {
|
|
|
1886
1886
|
* @param event
|
|
1887
1887
|
*/
|
|
1888
1888
|
function clickCallBack(event) {
|
|
1889
|
-
|
|
1889
|
+
const localEnable = Boolean(that.getLocalMenuData(menuLocalDataItemKey, defaultEnable));
|
|
1890
1890
|
if (menuOption.isStoreValue) {
|
|
1891
1891
|
that.setLocalMenuData(menuLocalDataItemKey, !localEnable);
|
|
1892
1892
|
}
|
|
@@ -1999,7 +1999,7 @@ var Utils = (function () {
|
|
|
1999
1999
|
menuOptionList = [...menuOptionList, options];
|
|
2000
2000
|
}
|
|
2001
2001
|
menuOptionList.forEach((menuOption) => {
|
|
2002
|
-
|
|
2002
|
+
const oldMenuOption = this.MenuHandle.getMenuOption(menuOption.key);
|
|
2003
2003
|
if (oldMenuOption) {
|
|
2004
2004
|
// 覆盖
|
|
2005
2005
|
Object.assign(oldMenuOption, menuOption);
|
|
@@ -2167,42 +2167,42 @@ var Utils = (function () {
|
|
|
2167
2167
|
* 在Function原型上添加自定义方法.hook和.unhook
|
|
2168
2168
|
*/
|
|
2169
2169
|
initEnv() {
|
|
2170
|
-
Function.prototype.hook = function (
|
|
2170
|
+
Function.prototype.hook = function (_, hookFunc, context) {
|
|
2171
2171
|
let _context = null; //函数上下文
|
|
2172
2172
|
let _funcName = null; //函数名
|
|
2173
2173
|
_context = context || window;
|
|
2174
2174
|
_funcName = getFuncName(this);
|
|
2175
|
-
_context[
|
|
2175
|
+
_context[`realFunc_${_funcName}`] = this;
|
|
2176
2176
|
if (_context[_funcName].prototype && _context[_funcName].prototype.isHooked) {
|
|
2177
2177
|
console.log("Already has been hooked,unhook first");
|
|
2178
2178
|
return false;
|
|
2179
2179
|
}
|
|
2180
2180
|
function getFuncName(fn) {
|
|
2181
2181
|
// 获取函数名
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2182
|
+
const strFunc = fn.toString();
|
|
2183
|
+
const _regex = /function\s+(\w+)\s*\(/;
|
|
2184
|
+
const patten = strFunc.match(_regex);
|
|
2185
2185
|
if (patten) {
|
|
2186
2186
|
return patten[1];
|
|
2187
2187
|
}
|
|
2188
2188
|
return "";
|
|
2189
2189
|
}
|
|
2190
2190
|
try {
|
|
2191
|
-
new Function("_context", "_funcName", "hookFunc", `_context[_funcName] = function ${_funcName}() {
|
|
2192
|
-
let args = Array.prototype.slice.call(arguments, 0);
|
|
2193
|
-
let obj = this;
|
|
2194
|
-
hookFunc.apply(obj, args);
|
|
2195
|
-
return _context['realFunc_${_funcName}'].apply(obj, args);
|
|
2191
|
+
new Function("_context", "_funcName", "hookFunc", `_context[_funcName] = function ${_funcName}() {
|
|
2192
|
+
let args = Array.prototype.slice.call(arguments, 0);
|
|
2193
|
+
let obj = this;
|
|
2194
|
+
hookFunc.apply(obj, args);
|
|
2195
|
+
return _context['realFunc_${_funcName}'].apply(obj, args);
|
|
2196
2196
|
};`)(_context, _funcName, hookFunc);
|
|
2197
2197
|
_context[_funcName].prototype.isHooked = true;
|
|
2198
2198
|
return true;
|
|
2199
2199
|
}
|
|
2200
2200
|
catch (e) {
|
|
2201
|
-
console.log("Hook failed,check the params.");
|
|
2201
|
+
console.log("Hook failed,check the params.", e);
|
|
2202
2202
|
return false;
|
|
2203
2203
|
}
|
|
2204
2204
|
};
|
|
2205
|
-
Function.prototype.unhook = function (
|
|
2205
|
+
Function.prototype.unhook = function (_, funcName, context) {
|
|
2206
2206
|
let _context = null;
|
|
2207
2207
|
let _funcName = null;
|
|
2208
2208
|
_context = context || window;
|
|
@@ -2211,8 +2211,8 @@ var Utils = (function () {
|
|
|
2211
2211
|
console.log("No function is hooked on");
|
|
2212
2212
|
return false;
|
|
2213
2213
|
}
|
|
2214
|
-
_context[_funcName] = _context[
|
|
2215
|
-
Reflect.deleteProperty(_context,
|
|
2214
|
+
_context[_funcName] = _context[`realFunc${_funcName}`];
|
|
2215
|
+
Reflect.deleteProperty(_context, `realFunc_${_funcName}`);
|
|
2216
2216
|
return true;
|
|
2217
2217
|
};
|
|
2218
2218
|
}
|
|
@@ -2220,10 +2220,10 @@ var Utils = (function () {
|
|
|
2220
2220
|
* 删除在Function原型上添加的自定义方法.hook和.unhook
|
|
2221
2221
|
*/
|
|
2222
2222
|
cleanEnv() {
|
|
2223
|
-
if (
|
|
2223
|
+
if (Object.prototype.hasOwnProperty.call(Function.prototype, "hook")) {
|
|
2224
2224
|
Reflect.deleteProperty(Function.prototype, "hook");
|
|
2225
2225
|
}
|
|
2226
|
-
if (
|
|
2226
|
+
if (Object.prototype.hasOwnProperty.call(Function.prototype, "unhook")) {
|
|
2227
2227
|
Reflect.deleteProperty(Function.prototype, "unhook");
|
|
2228
2228
|
}
|
|
2229
2229
|
return true;
|
|
@@ -2239,7 +2239,7 @@ var Utils = (function () {
|
|
|
2239
2239
|
}
|
|
2240
2240
|
else {
|
|
2241
2241
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (charStr) {
|
|
2242
|
-
|
|
2242
|
+
const randomValue = (Math.random() * 16) | 0, randomCharValue = charStr === "x" ? randomValue : (randomValue & 0x3) | 0x8;
|
|
2243
2243
|
return randomCharValue.toString(16);
|
|
2244
2244
|
});
|
|
2245
2245
|
}
|
|
@@ -2281,9 +2281,9 @@ var Utils = (function () {
|
|
|
2281
2281
|
}
|
|
2282
2282
|
}
|
|
2283
2283
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2284
|
-
|
|
2284
|
+
const item = this.$config.configList[index];
|
|
2285
2285
|
if (typeof item.fn === "function") {
|
|
2286
|
-
|
|
2286
|
+
const result = await item.fn(details);
|
|
2287
2287
|
if (result == null) {
|
|
2288
2288
|
return;
|
|
2289
2289
|
}
|
|
@@ -2296,7 +2296,7 @@ var Utils = (function () {
|
|
|
2296
2296
|
*/
|
|
2297
2297
|
add(fn) {
|
|
2298
2298
|
if (typeof fn === "function") {
|
|
2299
|
-
|
|
2299
|
+
const uuid = GenerateUUID();
|
|
2300
2300
|
this.$config.configList.push({
|
|
2301
2301
|
id: uuid,
|
|
2302
2302
|
fn: fn,
|
|
@@ -2313,7 +2313,7 @@ var Utils = (function () {
|
|
|
2313
2313
|
*/
|
|
2314
2314
|
delete(id) {
|
|
2315
2315
|
if (typeof id === "string") {
|
|
2316
|
-
|
|
2316
|
+
const findIndex = this.$config.configList.findIndex((item) => item.id === id);
|
|
2317
2317
|
if (findIndex !== -1) {
|
|
2318
2318
|
this.$config.configList.splice(findIndex, 1);
|
|
2319
2319
|
return true;
|
|
@@ -2359,9 +2359,9 @@ var Utils = (function () {
|
|
|
2359
2359
|
}
|
|
2360
2360
|
}
|
|
2361
2361
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2362
|
-
|
|
2362
|
+
const item = this.$config.configList[index];
|
|
2363
2363
|
if (typeof item.successFn === "function") {
|
|
2364
|
-
|
|
2364
|
+
const result = await item.successFn(response, details);
|
|
2365
2365
|
if (result == null) {
|
|
2366
2366
|
return;
|
|
2367
2367
|
}
|
|
@@ -2394,9 +2394,9 @@ var Utils = (function () {
|
|
|
2394
2394
|
}
|
|
2395
2395
|
}
|
|
2396
2396
|
for (let index = 0; index < this.$config.configList.length; index++) {
|
|
2397
|
-
|
|
2397
|
+
const item = this.$config.configList[index];
|
|
2398
2398
|
if (typeof item.errorFn === "function") {
|
|
2399
|
-
|
|
2399
|
+
const result = await item.errorFn(data);
|
|
2400
2400
|
if (result == null) {
|
|
2401
2401
|
return;
|
|
2402
2402
|
}
|
|
@@ -2408,7 +2408,7 @@ var Utils = (function () {
|
|
|
2408
2408
|
* 添加请求前的回调处理配置
|
|
2409
2409
|
*/
|
|
2410
2410
|
add(successFn, errorFn) {
|
|
2411
|
-
|
|
2411
|
+
const id = GenerateUUID();
|
|
2412
2412
|
this.$config.configList.push({
|
|
2413
2413
|
id: id,
|
|
2414
2414
|
successFn: successFn,
|
|
@@ -2422,7 +2422,7 @@ var Utils = (function () {
|
|
|
2422
2422
|
*/
|
|
2423
2423
|
delete(id) {
|
|
2424
2424
|
if (typeof id === "string") {
|
|
2425
|
-
|
|
2425
|
+
const findIndex = this.$config.configList.findIndex((item) => item.id === id);
|
|
2426
2426
|
if (findIndex !== -1) {
|
|
2427
2427
|
this.$config.configList.splice(findIndex, 1);
|
|
2428
2428
|
return true;
|
|
@@ -2443,23 +2443,23 @@ var Utils = (function () {
|
|
|
2443
2443
|
* 对请求的参数进行合并处理
|
|
2444
2444
|
*/
|
|
2445
2445
|
handleBeforeRequestOptionArgs(...args) {
|
|
2446
|
-
|
|
2446
|
+
const option = {
|
|
2447
2447
|
url: void 0,
|
|
2448
2448
|
};
|
|
2449
2449
|
if (typeof args[0] === "string") {
|
|
2450
2450
|
/* 传入的是url,转为配置 */
|
|
2451
|
-
|
|
2451
|
+
const url = args[0];
|
|
2452
2452
|
option.url = url;
|
|
2453
2453
|
if (typeof args[1] === "object") {
|
|
2454
2454
|
/* 处理第二个参数details */
|
|
2455
|
-
|
|
2455
|
+
const optionArg = args[1];
|
|
2456
2456
|
commonUtil.assign(option, optionArg, true);
|
|
2457
2457
|
option.url = url;
|
|
2458
2458
|
}
|
|
2459
2459
|
}
|
|
2460
2460
|
else {
|
|
2461
2461
|
/* 传入的是配置 */
|
|
2462
|
-
|
|
2462
|
+
const optionArg = args[0];
|
|
2463
2463
|
commonUtil.assign(option, optionArg, true);
|
|
2464
2464
|
}
|
|
2465
2465
|
return option;
|
|
@@ -2472,7 +2472,7 @@ var Utils = (function () {
|
|
|
2472
2472
|
* @param reject promise抛出错误回调
|
|
2473
2473
|
*/
|
|
2474
2474
|
getRequestOption(method, userRequestOption, resolve, reject) {
|
|
2475
|
-
|
|
2475
|
+
const that = this;
|
|
2476
2476
|
let url = userRequestOption.url || this.context.#defaultRequestOption.url;
|
|
2477
2477
|
if (typeof url === "string") {
|
|
2478
2478
|
// 去除左右空格
|
|
@@ -2485,7 +2485,7 @@ var Utils = (function () {
|
|
|
2485
2485
|
}
|
|
2486
2486
|
}
|
|
2487
2487
|
}
|
|
2488
|
-
|
|
2488
|
+
const requestOption = {
|
|
2489
2489
|
url: url,
|
|
2490
2490
|
method: (method || "GET").toString().toUpperCase().trim(),
|
|
2491
2491
|
timeout: userRequestOption.timeout || this.context.#defaultRequestOption.timeout,
|
|
@@ -2507,9 +2507,12 @@ var Utils = (function () {
|
|
|
2507
2507
|
/* 对象使用深拷贝 */
|
|
2508
2508
|
fetchInit: commonUtil.deepClone(this.context.#defaultRequestOption.fetchInit),
|
|
2509
2509
|
allowInterceptConfig: {
|
|
2510
|
-
beforeRequest: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2511
|
-
|
|
2512
|
-
|
|
2510
|
+
beforeRequest: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2511
|
+
.beforeRequest,
|
|
2512
|
+
afterResponseSuccess: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2513
|
+
.afterResponseSuccess,
|
|
2514
|
+
afterResponseError: this.context.#defaultRequestOption.allowInterceptConfig
|
|
2515
|
+
.afterResponseError,
|
|
2513
2516
|
},
|
|
2514
2517
|
user: userRequestOption.user || this.context.#defaultRequestOption.user,
|
|
2515
2518
|
password: userRequestOption.password || this.context.#defaultRequestOption.password,
|
|
@@ -2537,15 +2540,17 @@ var Utils = (function () {
|
|
|
2537
2540
|
};
|
|
2538
2541
|
// 补全allowInterceptConfig参数
|
|
2539
2542
|
if (typeof userRequestOption.allowInterceptConfig === "boolean") {
|
|
2540
|
-
Object.keys(requestOption.allowInterceptConfig)
|
|
2543
|
+
const allowInterceptConfigKeys = Object.keys(requestOption.allowInterceptConfig);
|
|
2544
|
+
allowInterceptConfigKeys.forEach((keyName) => {
|
|
2541
2545
|
Reflect.set(requestOption.allowInterceptConfig, keyName, userRequestOption.allowInterceptConfig);
|
|
2542
2546
|
});
|
|
2543
2547
|
}
|
|
2544
2548
|
else {
|
|
2545
2549
|
if (typeof userRequestOption.allowInterceptConfig === "object" &&
|
|
2546
2550
|
userRequestOption.allowInterceptConfig != null) {
|
|
2547
|
-
Object.keys(
|
|
2548
|
-
|
|
2551
|
+
const allowInterceptConfigKeys = Object.keys(requestOption.allowInterceptConfig);
|
|
2552
|
+
allowInterceptConfigKeys.forEach((keyName) => {
|
|
2553
|
+
const value = Reflect.get(userRequestOption.allowInterceptConfig, keyName);
|
|
2549
2554
|
if (typeof value === "boolean" &&
|
|
2550
2555
|
Reflect.has(requestOption.allowInterceptConfig, keyName)) {
|
|
2551
2556
|
Reflect.set(requestOption.allowInterceptConfig, keyName, value);
|
|
@@ -2559,7 +2564,8 @@ var Utils = (function () {
|
|
|
2559
2564
|
}
|
|
2560
2565
|
if (typeof requestOption.headers === "object") {
|
|
2561
2566
|
if (typeof userRequestOption.headers === "object") {
|
|
2562
|
-
Object.keys(
|
|
2567
|
+
const headerKeys = Object.keys(requestOption.headers);
|
|
2568
|
+
headerKeys.forEach((keyName) => {
|
|
2563
2569
|
if (keyName in requestOption.headers && userRequestOption.headers?.[keyName] == null) {
|
|
2564
2570
|
/* 在默认的header中存在,且设置它新的值为空,那么就是默认的值 */
|
|
2565
2571
|
Reflect.deleteProperty(requestOption.headers, keyName);
|
|
@@ -2577,8 +2583,9 @@ var Utils = (function () {
|
|
|
2577
2583
|
if (typeof requestOption.fetchInit === "object") {
|
|
2578
2584
|
/* 使用assign替换且添加 */
|
|
2579
2585
|
if (typeof userRequestOption.fetchInit === "object") {
|
|
2580
|
-
Object.keys(
|
|
2581
|
-
|
|
2586
|
+
const fetchInitKeys = Object.keys(requestOption.fetchInit);
|
|
2587
|
+
fetchInitKeys.forEach((keyName) => {
|
|
2588
|
+
if (keyName in requestOption.fetchInit && Reflect.get(userRequestOption.fetchInit ?? {}, keyName) == null) {
|
|
2582
2589
|
/* 在默认的fetchInit中存在,且设置它新的值为空,那么就是默认的值 */
|
|
2583
2590
|
Reflect.deleteProperty(requestOption.fetchInit, keyName);
|
|
2584
2591
|
}
|
|
@@ -2603,7 +2610,7 @@ var Utils = (function () {
|
|
|
2603
2610
|
try {
|
|
2604
2611
|
new URL(requestOption.url);
|
|
2605
2612
|
}
|
|
2606
|
-
catch
|
|
2613
|
+
catch {
|
|
2607
2614
|
if (requestOption.url.startsWith("//")) {
|
|
2608
2615
|
// 补充https:
|
|
2609
2616
|
requestOption.url = globalThis.location.protocol + requestOption.url;
|
|
@@ -2614,7 +2621,7 @@ var Utils = (function () {
|
|
|
2614
2621
|
}
|
|
2615
2622
|
else {
|
|
2616
2623
|
// 补充origin+/
|
|
2617
|
-
requestOption.url = globalThis.location.origin
|
|
2624
|
+
requestOption.url = `${globalThis.location.origin}/${requestOption.url}`;
|
|
2618
2625
|
}
|
|
2619
2626
|
}
|
|
2620
2627
|
if (requestOption.fetchInit && !requestOption.fetch) {
|
|
@@ -2624,12 +2631,12 @@ var Utils = (function () {
|
|
|
2624
2631
|
// 转换data类型
|
|
2625
2632
|
try {
|
|
2626
2633
|
/** 是否对数据进行处理 */
|
|
2627
|
-
|
|
2634
|
+
const processData = userRequestOption.processData ?? true;
|
|
2628
2635
|
if (requestOption.data != null && processData) {
|
|
2629
|
-
|
|
2636
|
+
const method = requestOption.method;
|
|
2630
2637
|
if (method === "GET" || method === "HEAD") {
|
|
2631
2638
|
// GET类型,data如果有,那么需要转为searchParams
|
|
2632
|
-
|
|
2639
|
+
const urlObj = new URL(requestOption.url);
|
|
2633
2640
|
let urlSearch = "";
|
|
2634
2641
|
let isHandler = false;
|
|
2635
2642
|
if (typeof requestOption.data === "string") {
|
|
@@ -2639,7 +2646,7 @@ var Utils = (function () {
|
|
|
2639
2646
|
else if (typeof requestOption.data === "object") {
|
|
2640
2647
|
isHandler = true;
|
|
2641
2648
|
// URLSearchParams参数可以转普通的string:string,包括FormData
|
|
2642
|
-
|
|
2649
|
+
const searchParams = new URLSearchParams(requestOption.data);
|
|
2643
2650
|
urlSearch = searchParams.toString();
|
|
2644
2651
|
}
|
|
2645
2652
|
if (isHandler) {
|
|
@@ -2660,7 +2667,7 @@ var Utils = (function () {
|
|
|
2660
2667
|
}
|
|
2661
2668
|
else {
|
|
2662
2669
|
// xxx=xxx&xxx=
|
|
2663
|
-
urlObj.search = urlObj.search
|
|
2670
|
+
urlObj.search = `${urlObj.search}&${urlSearch}`;
|
|
2664
2671
|
}
|
|
2665
2672
|
}
|
|
2666
2673
|
}
|
|
@@ -2668,14 +2675,14 @@ var Utils = (function () {
|
|
|
2668
2675
|
}
|
|
2669
2676
|
else if (method === "POST" && requestOption.headers != null) {
|
|
2670
2677
|
// POST类型,data如果是FormData,那么需要转为string
|
|
2671
|
-
|
|
2672
|
-
|
|
2678
|
+
const headersKeyList = Object.keys(requestOption.headers);
|
|
2679
|
+
const ContentTypeIndex = headersKeyList.findIndex((headerKey) => {
|
|
2673
2680
|
return (headerKey.trim().toLowerCase() === "content-type" &&
|
|
2674
2681
|
typeof requestOption.headers[headerKey] === "string");
|
|
2675
2682
|
});
|
|
2676
2683
|
if (ContentTypeIndex !== -1) {
|
|
2677
|
-
|
|
2678
|
-
|
|
2684
|
+
const ContentTypeKey = headersKeyList[ContentTypeIndex];
|
|
2685
|
+
const ContentType = requestOption.headers[ContentTypeKey];
|
|
2679
2686
|
// 设置了Content-Type
|
|
2680
2687
|
if (ContentType.includes("application/json")) {
|
|
2681
2688
|
// application/json
|
|
@@ -2716,10 +2723,10 @@ var Utils = (function () {
|
|
|
2716
2723
|
* @param option 请求配置
|
|
2717
2724
|
*/
|
|
2718
2725
|
removeRequestNullOption(option) {
|
|
2719
|
-
Object.keys(option)
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2726
|
+
const optionKeys = Object.keys(option);
|
|
2727
|
+
optionKeys.forEach((keyName) => {
|
|
2728
|
+
const optionValue = option[keyName];
|
|
2729
|
+
if (optionValue == null || (optionValue instanceof Function && commonUtil.isNull(optionValue))) {
|
|
2723
2730
|
Reflect.deleteProperty(option, keyName);
|
|
2724
2731
|
return;
|
|
2725
2732
|
}
|
|
@@ -2737,14 +2744,14 @@ var Utils = (function () {
|
|
|
2737
2744
|
/**
|
|
2738
2745
|
* fetch的请求配置
|
|
2739
2746
|
**/
|
|
2740
|
-
|
|
2747
|
+
const fetchRequestOption = {};
|
|
2741
2748
|
if ((option.method === "GET" || option.method === "HEAD") && option.data != null) {
|
|
2742
2749
|
/* GET 或 HEAD 方法的请求不能包含 body 信息 */
|
|
2743
2750
|
Reflect.deleteProperty(option, "data");
|
|
2744
2751
|
}
|
|
2745
2752
|
/* 中止信号控制器 */
|
|
2746
|
-
|
|
2747
|
-
|
|
2753
|
+
const abortController = new AbortController();
|
|
2754
|
+
const signal = abortController.signal;
|
|
2748
2755
|
signal.onabort = () => {
|
|
2749
2756
|
option.onabort({
|
|
2750
2757
|
isFetch: true,
|
|
@@ -2789,10 +2796,10 @@ var Utils = (function () {
|
|
|
2789
2796
|
* onabort请求被取消-触发
|
|
2790
2797
|
* @param details 配置
|
|
2791
2798
|
* @param resolve promise回调
|
|
2792
|
-
* @param
|
|
2799
|
+
* @param _reject promise抛出错误回调
|
|
2793
2800
|
* @param argsResult 返回的参数列表
|
|
2794
2801
|
*/
|
|
2795
|
-
async onAbort(details, resolve,
|
|
2802
|
+
async onAbort(details, resolve, _reject, argsResult) {
|
|
2796
2803
|
// console.log(argsResult);
|
|
2797
2804
|
if (typeof details?.onabort === "function") {
|
|
2798
2805
|
details.onabort.apply(this, argsResult);
|
|
@@ -2829,7 +2836,7 @@ var Utils = (function () {
|
|
|
2829
2836
|
* @param reject 抛出错误
|
|
2830
2837
|
* @param argsResult 返回的参数列表
|
|
2831
2838
|
*/
|
|
2832
|
-
async onTimeout(details, resolve,
|
|
2839
|
+
async onTimeout(details, resolve, _reject, argsResult) {
|
|
2833
2840
|
// console.log(argsResult);
|
|
2834
2841
|
if (typeof details?.ontimeout === "function") {
|
|
2835
2842
|
// 执行配置中的ontime回调
|
|
@@ -2867,10 +2874,10 @@ var Utils = (function () {
|
|
|
2867
2874
|
* onerror请求异常-触发
|
|
2868
2875
|
* @param details 配置
|
|
2869
2876
|
* @param resolve 回调
|
|
2870
|
-
* @param
|
|
2877
|
+
* @param _reject 抛出错误
|
|
2871
2878
|
* @param argsResult 返回的参数列表
|
|
2872
2879
|
*/
|
|
2873
|
-
async onError(details, resolve,
|
|
2880
|
+
async onError(details, resolve, _reject, argsResult) {
|
|
2874
2881
|
// console.log(argsResult);
|
|
2875
2882
|
if (typeof details?.onerror === "function") {
|
|
2876
2883
|
details.onerror.apply(this, argsResult);
|
|
@@ -2904,16 +2911,15 @@ var Utils = (function () {
|
|
|
2904
2911
|
* onload加载完毕-触发
|
|
2905
2912
|
* @param details 请求的配置
|
|
2906
2913
|
* @param resolve 回调
|
|
2907
|
-
* @param
|
|
2914
|
+
* @param _reject 抛出错误
|
|
2908
2915
|
* @param argsResult 返回的参数列表
|
|
2909
2916
|
*/
|
|
2910
|
-
async onLoad(details, resolve,
|
|
2917
|
+
async onLoad(details, resolve, _reject, argsResult) {
|
|
2911
2918
|
// console.log(argsResult);
|
|
2912
2919
|
/* X浏览器会因为设置了responseType导致不返回responseText */
|
|
2913
|
-
|
|
2920
|
+
const originResponse = argsResult[0];
|
|
2914
2921
|
/* responseText为空,response不为空的情况 */
|
|
2915
|
-
if (commonUtil.isNull(originResponse["responseText"]) &&
|
|
2916
|
-
commonUtil.isNotNull(originResponse["response"])) {
|
|
2922
|
+
if (commonUtil.isNull(originResponse["responseText"]) && commonUtil.isNotNull(originResponse["response"])) {
|
|
2917
2923
|
if (typeof originResponse["response"] === "object") {
|
|
2918
2924
|
TryCatch().run(() => {
|
|
2919
2925
|
originResponse["responseText"] = JSON.stringify(originResponse["response"]);
|
|
@@ -2928,51 +2934,51 @@ var Utils = (function () {
|
|
|
2928
2934
|
typeof originResponse["responseText"] === "string" &&
|
|
2929
2935
|
originResponse["responseText"].trim() !== "") {
|
|
2930
2936
|
/** 原始的请求text */
|
|
2931
|
-
|
|
2937
|
+
const httpxResponseText = originResponse.responseText;
|
|
2932
2938
|
// 自定义个新的response
|
|
2933
2939
|
let httpxResponse = httpxResponseText;
|
|
2934
2940
|
if (details.responseType === "json") {
|
|
2935
2941
|
httpxResponse = commonUtil.toJSON(httpxResponseText);
|
|
2936
2942
|
}
|
|
2937
2943
|
else if (details.responseType === "document") {
|
|
2938
|
-
|
|
2944
|
+
const parser = new DOMParser();
|
|
2939
2945
|
httpxResponse = parser.parseFromString(httpxResponseText, "text/html");
|
|
2940
2946
|
}
|
|
2941
2947
|
else if (details.responseType === "arraybuffer") {
|
|
2942
|
-
|
|
2943
|
-
|
|
2948
|
+
const encoder = new TextEncoder();
|
|
2949
|
+
const arrayBuffer = encoder.encode(httpxResponseText);
|
|
2944
2950
|
httpxResponse = arrayBuffer;
|
|
2945
2951
|
}
|
|
2946
2952
|
else if (details.responseType === "blob") {
|
|
2947
|
-
|
|
2948
|
-
|
|
2953
|
+
const encoder = new TextEncoder();
|
|
2954
|
+
const arrayBuffer = encoder.encode(httpxResponseText);
|
|
2949
2955
|
httpxResponse = new Blob([arrayBuffer]);
|
|
2950
2956
|
}
|
|
2951
2957
|
// 尝试覆盖原response
|
|
2952
2958
|
try {
|
|
2953
|
-
|
|
2959
|
+
const setStatus = Reflect.set(originResponse, "response", httpxResponse);
|
|
2954
2960
|
if (!setStatus) {
|
|
2955
2961
|
console.warn("[Httpx-HttpxCallBack.oonLoad] 覆盖原始 response 失败,尝试添加新的httpxResponse");
|
|
2956
2962
|
try {
|
|
2957
2963
|
Reflect.set(originResponse, "httpxResponse", httpxResponse);
|
|
2958
2964
|
}
|
|
2959
|
-
catch
|
|
2965
|
+
catch {
|
|
2960
2966
|
console.warn("[Httpx-HttpxCallBack.oonLoad] httpxResponse 无法被覆盖");
|
|
2961
2967
|
}
|
|
2962
2968
|
}
|
|
2963
2969
|
}
|
|
2964
|
-
catch
|
|
2970
|
+
catch {
|
|
2965
2971
|
console.warn("[Httpx-HttpxCallBack.oonLoad] 原始 response 无法被覆盖,尝试添加新的httpxResponse");
|
|
2966
2972
|
try {
|
|
2967
2973
|
Reflect.set(originResponse, "httpxResponse", httpxResponse);
|
|
2968
2974
|
}
|
|
2969
|
-
catch
|
|
2975
|
+
catch {
|
|
2970
2976
|
console.warn("[Httpx-HttpxCallBack.oonLoad] httpxResponse 无法被覆盖");
|
|
2971
2977
|
}
|
|
2972
2978
|
}
|
|
2973
2979
|
}
|
|
2974
2980
|
/* Stay扩展中没有finalUrl,对应的是responseURL */
|
|
2975
|
-
|
|
2981
|
+
const originResponseURL = Reflect.get(originResponse, "responseURL");
|
|
2976
2982
|
if (originResponse["finalUrl"] == null && originResponseURL != null) {
|
|
2977
2983
|
Reflect.set(originResponse, "finalUrl", originResponseURL);
|
|
2978
2984
|
}
|
|
@@ -2992,7 +2998,7 @@ var Utils = (function () {
|
|
|
2992
2998
|
});
|
|
2993
2999
|
}
|
|
2994
3000
|
else {
|
|
2995
|
-
this.context.HttpxResponseCallBack.onError(details, resolve,
|
|
3001
|
+
this.context.HttpxResponseCallBack.onError(details, resolve, _reject, argsResult);
|
|
2996
3002
|
}
|
|
2997
3003
|
},
|
|
2998
3004
|
/**
|
|
@@ -3049,7 +3055,7 @@ var Utils = (function () {
|
|
|
3049
3055
|
console.log("[Httpx-HttpxRequest.request] 请求前的配置👇", details);
|
|
3050
3056
|
}
|
|
3051
3057
|
if (typeof this.context.HttpxRequestHook.beforeRequestCallBack === "function") {
|
|
3052
|
-
|
|
3058
|
+
const hookResult = await this.context.HttpxRequestHook.beforeRequestCallBack(details);
|
|
3053
3059
|
if (hookResult == null) {
|
|
3054
3060
|
return;
|
|
3055
3061
|
}
|
|
@@ -3081,7 +3087,7 @@ var Utils = (function () {
|
|
|
3081
3087
|
fetch(option.url, fetchRequestOption)
|
|
3082
3088
|
.then(async (fetchResponse) => {
|
|
3083
3089
|
/** 自定义的response */
|
|
3084
|
-
|
|
3090
|
+
const httpxResponse = {
|
|
3085
3091
|
isFetch: true,
|
|
3086
3092
|
finalUrl: fetchResponse.url,
|
|
3087
3093
|
readyState: 4,
|
|
@@ -3096,9 +3102,9 @@ var Utils = (function () {
|
|
|
3096
3102
|
};
|
|
3097
3103
|
Object.assign(httpxResponse, option.context || {});
|
|
3098
3104
|
// 把headers转为字符串
|
|
3099
|
-
|
|
3105
|
+
fetchResponse.headers.forEach((value, key) => {
|
|
3100
3106
|
httpxResponse.responseHeaders += `${key}: ${value}\n`;
|
|
3101
|
-
}
|
|
3107
|
+
});
|
|
3102
3108
|
/** 请求返回的类型 */
|
|
3103
3109
|
const fetchResponseType = fetchResponse.headers.get("Content-Type");
|
|
3104
3110
|
/* 如果需要stream,且获取到的是stream,那直接返回 */
|
|
@@ -3119,11 +3125,11 @@ var Utils = (function () {
|
|
|
3119
3125
|
/** 响应xml文档 */
|
|
3120
3126
|
let responseXML = "";
|
|
3121
3127
|
/** 先获取二进制数据 */
|
|
3122
|
-
|
|
3128
|
+
const arrayBuffer = await fetchResponse.arrayBuffer();
|
|
3123
3129
|
/** 数据编码 */
|
|
3124
3130
|
let encoding = "utf-8";
|
|
3125
3131
|
if (fetchResponse.headers.has("Content-Type")) {
|
|
3126
|
-
|
|
3132
|
+
const charsetMatched = fetchResponse.headers.get("Content-Type")?.match(/charset=(.+)/);
|
|
3127
3133
|
if (charsetMatched) {
|
|
3128
3134
|
encoding = charsetMatched[1];
|
|
3129
3135
|
encoding = encoding.toLowerCase();
|
|
@@ -3133,7 +3139,7 @@ var Utils = (function () {
|
|
|
3133
3139
|
// 去除引号
|
|
3134
3140
|
encoding = encoding.replace(/('|")/gi, "");
|
|
3135
3141
|
// 编码
|
|
3136
|
-
|
|
3142
|
+
const textDecoder = new TextDecoder(encoding);
|
|
3137
3143
|
responseText = textDecoder.decode(arrayBuffer);
|
|
3138
3144
|
response = responseText;
|
|
3139
3145
|
if (option.responseType === "arraybuffer") {
|
|
@@ -3151,11 +3157,11 @@ var Utils = (function () {
|
|
|
3151
3157
|
}
|
|
3152
3158
|
else if (option.responseType === "document" || option.responseType == null) {
|
|
3153
3159
|
// response返回格式是文档格式
|
|
3154
|
-
|
|
3160
|
+
const parser = new DOMParser();
|
|
3155
3161
|
response = parser.parseFromString(responseText, "text/html");
|
|
3156
3162
|
}
|
|
3157
3163
|
// 转为XML结构
|
|
3158
|
-
|
|
3164
|
+
const parser = new DOMParser();
|
|
3159
3165
|
responseXML = parser.parseFromString(responseText, "text/xml");
|
|
3160
3166
|
httpxResponse.response = response;
|
|
3161
3167
|
httpxResponse.responseText = responseText;
|
|
@@ -3229,6 +3235,9 @@ var Utils = (function () {
|
|
|
3229
3235
|
onreadystatechange() { },
|
|
3230
3236
|
onprogress() { },
|
|
3231
3237
|
};
|
|
3238
|
+
/**
|
|
3239
|
+
* 实例化的默认配置
|
|
3240
|
+
*/
|
|
3232
3241
|
#defaultInitOption = {
|
|
3233
3242
|
/**
|
|
3234
3243
|
* `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
|
|
@@ -3344,7 +3353,7 @@ var Utils = (function () {
|
|
|
3344
3353
|
* @param details 配置
|
|
3345
3354
|
*/
|
|
3346
3355
|
get(...args) {
|
|
3347
|
-
|
|
3356
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3348
3357
|
useRequestOption.method = "GET";
|
|
3349
3358
|
return this.request(useRequestOption, (option) => {
|
|
3350
3359
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3354,7 +3363,7 @@ var Utils = (function () {
|
|
|
3354
3363
|
* POST 请求
|
|
3355
3364
|
*/
|
|
3356
3365
|
post(...args) {
|
|
3357
|
-
|
|
3366
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3358
3367
|
useRequestOption.method = "POST";
|
|
3359
3368
|
return this.request(useRequestOption);
|
|
3360
3369
|
}
|
|
@@ -3362,7 +3371,7 @@ var Utils = (function () {
|
|
|
3362
3371
|
* HEAD 请求
|
|
3363
3372
|
*/
|
|
3364
3373
|
head(...args) {
|
|
3365
|
-
|
|
3374
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3366
3375
|
useRequestOption.method = "HEAD";
|
|
3367
3376
|
return this.request(useRequestOption, (option) => {
|
|
3368
3377
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3372,7 +3381,7 @@ var Utils = (function () {
|
|
|
3372
3381
|
* OPTIONS 请求
|
|
3373
3382
|
*/
|
|
3374
3383
|
options(...args) {
|
|
3375
|
-
|
|
3384
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3376
3385
|
useRequestOption.method = "OPTIONS";
|
|
3377
3386
|
return this.request(useRequestOption, (option) => {
|
|
3378
3387
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3382,7 +3391,7 @@ var Utils = (function () {
|
|
|
3382
3391
|
* DELETE 请求
|
|
3383
3392
|
*/
|
|
3384
3393
|
delete(...args) {
|
|
3385
|
-
|
|
3394
|
+
const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3386
3395
|
useRequestOption.method = "DELETE";
|
|
3387
3396
|
return this.request(useRequestOption, (option) => {
|
|
3388
3397
|
Reflect.deleteProperty(option, "onprogress");
|
|
@@ -3392,7 +3401,7 @@ var Utils = (function () {
|
|
|
3392
3401
|
* PUT 请求
|
|
3393
3402
|
*/
|
|
3394
3403
|
put(...args) {
|
|
3395
|
-
|
|
3404
|
+
const userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
|
|
3396
3405
|
userRequestOption.method = "PUT";
|
|
3397
3406
|
return this.request(userRequestOption);
|
|
3398
3407
|
}
|
|
@@ -3402,18 +3411,30 @@ var Utils = (function () {
|
|
|
3402
3411
|
* @param beforeRequestOption 处理请求前的配置
|
|
3403
3412
|
*/
|
|
3404
3413
|
request(details, beforeRequestOption) {
|
|
3405
|
-
|
|
3406
|
-
|
|
3414
|
+
// 对请求的参数进行合并处理
|
|
3415
|
+
const userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(details);
|
|
3416
|
+
/**
|
|
3417
|
+
* 取消请求
|
|
3418
|
+
*/
|
|
3407
3419
|
let abortFn = null;
|
|
3408
|
-
|
|
3409
|
-
|
|
3420
|
+
const promise = new globalThis.Promise(async (resolve, reject) => {
|
|
3421
|
+
// 请求配置
|
|
3422
|
+
let requestOption = this.HttpxRequestOption.getRequestOption(userRequestOption.method, userRequestOption, (resultOption) => {
|
|
3423
|
+
resolve(resultOption);
|
|
3424
|
+
}, (...args) => {
|
|
3425
|
+
reject(...args);
|
|
3426
|
+
});
|
|
3427
|
+
requestOption = this.HttpxRequestOption.removeRequestNullOption(requestOption);
|
|
3410
3428
|
if (typeof beforeRequestOption === "function") {
|
|
3411
3429
|
beforeRequestOption(requestOption);
|
|
3412
3430
|
}
|
|
3413
|
-
|
|
3431
|
+
// 处理重试逻辑
|
|
3414
3432
|
const requestResult = await this.HttpxRequest.request(requestOption);
|
|
3415
3433
|
if (requestResult != null && typeof requestResult.abort === "function") {
|
|
3416
|
-
abortFn =
|
|
3434
|
+
abortFn = () => {
|
|
3435
|
+
// 取消请求
|
|
3436
|
+
requestResult.abort();
|
|
3437
|
+
};
|
|
3417
3438
|
}
|
|
3418
3439
|
});
|
|
3419
3440
|
promise.abort = () => {
|
|
@@ -3432,10 +3453,7 @@ var Utils = (function () {
|
|
|
3432
3453
|
/* websql的版本号,由于ios的问题,版本号的写法不一样 */
|
|
3433
3454
|
// #slqVersion = "1";
|
|
3434
3455
|
/* 监听IndexDB */
|
|
3435
|
-
#indexedDB =
|
|
3436
|
-
window.mozIndexedDB ||
|
|
3437
|
-
window.webkitIndexedDB ||
|
|
3438
|
-
window.msIndexedDB;
|
|
3456
|
+
#indexedDB = globalThis.indexedDB || globalThis.mozIndexedDB || globalThis.webkitIndexedDB || globalThis.msIndexedDB;
|
|
3439
3457
|
/* 缓存数据库,避免同一个页面重复创建和销毁 */
|
|
3440
3458
|
#db = {};
|
|
3441
3459
|
// #store: IDBObjectStore = null as any;
|
|
@@ -3470,7 +3488,7 @@ var Utils = (function () {
|
|
|
3470
3488
|
this.#storeName = storeName;
|
|
3471
3489
|
this.#dbVersion = dbVersion;
|
|
3472
3490
|
if (!this.#indexedDB) {
|
|
3473
|
-
alert("很抱歉,您的浏览器不支持indexedDB");
|
|
3491
|
+
window.alert("很抱歉,您的浏览器不支持indexedDB");
|
|
3474
3492
|
throw new TypeError("很抱歉,您的浏览器不支持indexedDB");
|
|
3475
3493
|
}
|
|
3476
3494
|
}
|
|
@@ -3479,10 +3497,9 @@ var Utils = (function () {
|
|
|
3479
3497
|
* @param dbName 表名
|
|
3480
3498
|
*/
|
|
3481
3499
|
createStore(dbName) {
|
|
3482
|
-
|
|
3483
|
-
txn = this.#db[dbName].transaction(this.#storeName, "readwrite");
|
|
3500
|
+
const txn = this.#db[dbName].transaction(this.#storeName, "readwrite");
|
|
3484
3501
|
/* IndexDB的读写权限 */
|
|
3485
|
-
store = txn.objectStore(this.#storeName);
|
|
3502
|
+
const store = txn.objectStore(this.#storeName);
|
|
3486
3503
|
// this.#store = store;
|
|
3487
3504
|
return store;
|
|
3488
3505
|
}
|
|
@@ -3492,12 +3509,12 @@ var Utils = (function () {
|
|
|
3492
3509
|
* @param dbName 数据库名
|
|
3493
3510
|
*/
|
|
3494
3511
|
open(callback, dbName) {
|
|
3495
|
-
|
|
3512
|
+
const that = this;
|
|
3496
3513
|
/* 打开数据库 */
|
|
3497
3514
|
/* 如果支持IndexDB */
|
|
3498
3515
|
if (!that.#db[dbName]) {
|
|
3499
3516
|
/* 如果缓存中没有,则进行数据库的创建或打开,提高效率 */
|
|
3500
|
-
|
|
3517
|
+
const request = that.#indexedDB.open(dbName, that.#dbVersion);
|
|
3501
3518
|
request.onerror = function (event) {
|
|
3502
3519
|
callback(null, {
|
|
3503
3520
|
code: that.#statusCode.openFailed.code,
|
|
@@ -3507,26 +3524,26 @@ var Utils = (function () {
|
|
|
3507
3524
|
};
|
|
3508
3525
|
request.onsuccess = function (event) {
|
|
3509
3526
|
if (!that.#db[dbName]) {
|
|
3510
|
-
|
|
3527
|
+
const target = event.target;
|
|
3511
3528
|
that.#db[dbName] = target.result;
|
|
3512
3529
|
}
|
|
3513
|
-
|
|
3530
|
+
const store = that.createStore(dbName);
|
|
3514
3531
|
callback(store);
|
|
3515
3532
|
};
|
|
3516
3533
|
request.onupgradeneeded = function (event) {
|
|
3517
|
-
|
|
3534
|
+
const target = event.target;
|
|
3518
3535
|
that.#db[dbName] = target.result;
|
|
3519
|
-
|
|
3536
|
+
const store = that.#db[dbName].createObjectStore(that.#storeName, {
|
|
3520
3537
|
keyPath: "key",
|
|
3521
3538
|
});
|
|
3522
|
-
store.transaction.oncomplete = function (
|
|
3539
|
+
store.transaction.oncomplete = function () {
|
|
3523
3540
|
callback(store);
|
|
3524
3541
|
};
|
|
3525
3542
|
};
|
|
3526
3543
|
}
|
|
3527
3544
|
else {
|
|
3528
3545
|
/* 如果缓存中已经打开了数据库,就直接使用 */
|
|
3529
|
-
|
|
3546
|
+
const store = this.createStore(dbName);
|
|
3530
3547
|
callback(store);
|
|
3531
3548
|
}
|
|
3532
3549
|
}
|
|
@@ -3536,10 +3553,10 @@ var Utils = (function () {
|
|
|
3536
3553
|
* @param value 数据值
|
|
3537
3554
|
*/
|
|
3538
3555
|
async save(key, value) {
|
|
3539
|
-
|
|
3556
|
+
const that = this;
|
|
3540
3557
|
return new Promise((resolve) => {
|
|
3541
|
-
|
|
3542
|
-
|
|
3558
|
+
const dbName = this.#dbName;
|
|
3559
|
+
const inData = {
|
|
3543
3560
|
key: key,
|
|
3544
3561
|
value: value,
|
|
3545
3562
|
};
|
|
@@ -3552,7 +3569,7 @@ var Utils = (function () {
|
|
|
3552
3569
|
});
|
|
3553
3570
|
}
|
|
3554
3571
|
else {
|
|
3555
|
-
|
|
3572
|
+
const request = idbStore.put(inData);
|
|
3556
3573
|
request.onsuccess = function (event) {
|
|
3557
3574
|
/* 保存成功有success 字段 */
|
|
3558
3575
|
resolve({
|
|
@@ -3579,9 +3596,9 @@ var Utils = (function () {
|
|
|
3579
3596
|
* @param key 数据key
|
|
3580
3597
|
*/
|
|
3581
3598
|
async has(key) {
|
|
3582
|
-
|
|
3599
|
+
const that = this;
|
|
3583
3600
|
return new Promise((resolve) => {
|
|
3584
|
-
|
|
3601
|
+
const dbName = this.#dbName;
|
|
3585
3602
|
this.open(function (idbStore) {
|
|
3586
3603
|
/* 判断返回的数据中是否有error字段 */
|
|
3587
3604
|
if (idbStore == null) {
|
|
@@ -3592,7 +3609,7 @@ var Utils = (function () {
|
|
|
3592
3609
|
});
|
|
3593
3610
|
}
|
|
3594
3611
|
else {
|
|
3595
|
-
|
|
3612
|
+
const request = idbStore.get(key);
|
|
3596
3613
|
request.onsuccess = function (event) {
|
|
3597
3614
|
/* result 返回的是 {key: string, value: any} */
|
|
3598
3615
|
/* 键值对存储 */
|
|
@@ -3620,9 +3637,9 @@ var Utils = (function () {
|
|
|
3620
3637
|
* @param key 数据key
|
|
3621
3638
|
*/
|
|
3622
3639
|
async get(key) {
|
|
3623
|
-
|
|
3640
|
+
const that = this;
|
|
3624
3641
|
return new Promise((resolve) => {
|
|
3625
|
-
|
|
3642
|
+
const dbName = this.#dbName;
|
|
3626
3643
|
this.open(function (idbStore) {
|
|
3627
3644
|
/* 判断返回的数据中是否有error字段 */
|
|
3628
3645
|
if (idbStore == null) {
|
|
@@ -3634,13 +3651,13 @@ var Utils = (function () {
|
|
|
3634
3651
|
});
|
|
3635
3652
|
}
|
|
3636
3653
|
else {
|
|
3637
|
-
|
|
3654
|
+
const request = idbStore.get(key);
|
|
3638
3655
|
request.onsuccess = function (event) {
|
|
3639
|
-
|
|
3640
|
-
|
|
3656
|
+
const target = event.target;
|
|
3657
|
+
const result = target.result;
|
|
3641
3658
|
/* result 返回的是 {key: string, value: any} */
|
|
3642
3659
|
/* 键值对存储 */
|
|
3643
|
-
|
|
3660
|
+
const data = result ? result.value : void 0;
|
|
3644
3661
|
if (data == null) {
|
|
3645
3662
|
resolve({
|
|
3646
3663
|
success: true,
|
|
@@ -3681,10 +3698,10 @@ var Utils = (function () {
|
|
|
3681
3698
|
*/
|
|
3682
3699
|
async regexpGet(key) {
|
|
3683
3700
|
let list = [];
|
|
3684
|
-
|
|
3701
|
+
const that = this;
|
|
3685
3702
|
return new Promise((resolve) => {
|
|
3686
3703
|
/* 正则查询 */
|
|
3687
|
-
|
|
3704
|
+
const dbName = that.#dbName;
|
|
3688
3705
|
this.open(function (idbStore) {
|
|
3689
3706
|
/* 判断返回的数据中是否有error字段 */
|
|
3690
3707
|
if (idbStore == null) {
|
|
@@ -3696,16 +3713,16 @@ var Utils = (function () {
|
|
|
3696
3713
|
});
|
|
3697
3714
|
}
|
|
3698
3715
|
else {
|
|
3699
|
-
|
|
3716
|
+
const request = idbStore.getAll();
|
|
3700
3717
|
request.onsuccess = function (event) {
|
|
3701
|
-
|
|
3702
|
-
|
|
3718
|
+
const target = event.target;
|
|
3719
|
+
const result = target.result;
|
|
3703
3720
|
if (result.length !== 0) {
|
|
3704
|
-
result.forEach((dataItem
|
|
3721
|
+
result.forEach((dataItem) => {
|
|
3705
3722
|
// 当前项的key
|
|
3706
|
-
|
|
3723
|
+
const __key = dataItem["key"];
|
|
3707
3724
|
// 当前项的value
|
|
3708
|
-
|
|
3725
|
+
const __value = dataItem["value"];
|
|
3709
3726
|
if (__key.match(key)) {
|
|
3710
3727
|
list = list.concat(__value);
|
|
3711
3728
|
}
|
|
@@ -3737,10 +3754,10 @@ var Utils = (function () {
|
|
|
3737
3754
|
* @param key 数据key
|
|
3738
3755
|
*/
|
|
3739
3756
|
async delete(key) {
|
|
3740
|
-
|
|
3757
|
+
const that = this;
|
|
3741
3758
|
return new Promise((resolve) => {
|
|
3742
3759
|
/* 根据key删除某条数据 */
|
|
3743
|
-
|
|
3760
|
+
const dbName = that.#dbName;
|
|
3744
3761
|
this.open(function (idbStore) {
|
|
3745
3762
|
if (idbStore == null) {
|
|
3746
3763
|
resolve({
|
|
@@ -3751,7 +3768,7 @@ var Utils = (function () {
|
|
|
3751
3768
|
}
|
|
3752
3769
|
else {
|
|
3753
3770
|
// 删除键
|
|
3754
|
-
|
|
3771
|
+
const request = idbStore.delete(key);
|
|
3755
3772
|
request.onsuccess = function (event) {
|
|
3756
3773
|
resolve({
|
|
3757
3774
|
success: true,
|
|
@@ -3776,10 +3793,10 @@ var Utils = (function () {
|
|
|
3776
3793
|
* 删除所有数据
|
|
3777
3794
|
*/
|
|
3778
3795
|
async deleteAll() {
|
|
3779
|
-
|
|
3796
|
+
const that = this;
|
|
3780
3797
|
return new Promise((resolve) => {
|
|
3781
3798
|
/* 清空数据库 */
|
|
3782
|
-
|
|
3799
|
+
const dbName = that.#dbName;
|
|
3783
3800
|
this.open(function (idbStore) {
|
|
3784
3801
|
if (idbStore == null) {
|
|
3785
3802
|
resolve({
|
|
@@ -3790,7 +3807,7 @@ var Utils = (function () {
|
|
|
3790
3807
|
}
|
|
3791
3808
|
else {
|
|
3792
3809
|
// 清空
|
|
3793
|
-
|
|
3810
|
+
const operateResult = idbStore.clear();
|
|
3794
3811
|
operateResult.onsuccess = function (event) {
|
|
3795
3812
|
resolve({
|
|
3796
3813
|
success: true,
|
|
@@ -3823,7 +3840,7 @@ var Utils = (function () {
|
|
|
3823
3840
|
run;
|
|
3824
3841
|
isLock;
|
|
3825
3842
|
constructor(callback, context, delayTime) {
|
|
3826
|
-
|
|
3843
|
+
const that = this;
|
|
3827
3844
|
this.#callback = callback;
|
|
3828
3845
|
if (typeof context === "number") {
|
|
3829
3846
|
this.#delayTime = context;
|
|
@@ -3913,14 +3930,14 @@ var Utils = (function () {
|
|
|
3913
3930
|
* @param stack
|
|
3914
3931
|
*/
|
|
3915
3932
|
parseErrorStack(stack) {
|
|
3916
|
-
|
|
3933
|
+
const result = {
|
|
3917
3934
|
name: "",
|
|
3918
3935
|
position: "",
|
|
3919
3936
|
};
|
|
3920
3937
|
for (let stackString of stack) {
|
|
3921
3938
|
stackString = stackString.trim();
|
|
3922
|
-
|
|
3923
|
-
|
|
3939
|
+
const stackFunctionNameMatch = stackString.match(/^at[\s]+(.+?)[\s]+/i);
|
|
3940
|
+
const stackFunctionNamePositionMatch = stackString.match(/^at[\s]+.+[\s]+\((.+?)\)/i);
|
|
3924
3941
|
if (stackFunctionNameMatch == null) {
|
|
3925
3942
|
continue;
|
|
3926
3943
|
}
|
|
@@ -3928,8 +3945,8 @@ var Utils = (function () {
|
|
|
3928
3945
|
continue;
|
|
3929
3946
|
}
|
|
3930
3947
|
/* 获取最后一个,因为第一个是包含了at */
|
|
3931
|
-
|
|
3932
|
-
|
|
3948
|
+
const stackFunctionName = stackFunctionNameMatch[stackFunctionNameMatch.length - 1];
|
|
3949
|
+
const stackFunctionNamePosition = stackFunctionNamePositionMatch[stackFunctionNamePositionMatch.length - 1];
|
|
3933
3950
|
if (stackFunctionName === "" ||
|
|
3934
3951
|
stackFunctionName.match(/^(Utils\.|)Log(\.|)|.<anonymous>$|^Function.each|^NodeList.forEach|^k.fn.init.each/g)) {
|
|
3935
3952
|
continue;
|
|
@@ -3941,9 +3958,9 @@ var Utils = (function () {
|
|
|
3941
3958
|
}
|
|
3942
3959
|
}
|
|
3943
3960
|
if (result.position === "") {
|
|
3944
|
-
|
|
3961
|
+
const lastStackString = stack[stack.length - 1].trim();
|
|
3945
3962
|
if (lastStackString.startsWith("at chrome-extension://")) {
|
|
3946
|
-
|
|
3963
|
+
const lastStackMatch = lastStackString.match(/^at[\s]+(.+)/);
|
|
3947
3964
|
if (lastStackMatch) {
|
|
3948
3965
|
result.position = lastStackMatch[lastStackMatch.length - 1];
|
|
3949
3966
|
}
|
|
@@ -3973,16 +3990,18 @@ var Utils = (function () {
|
|
|
3973
3990
|
printContent(msg, color, otherStyle) {
|
|
3974
3991
|
this.checkClearConsole();
|
|
3975
3992
|
otherStyle = otherStyle || "";
|
|
3976
|
-
|
|
3993
|
+
const stackSplit = new Error().stack.split("\n");
|
|
3977
3994
|
stackSplit.splice(0, 2);
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
-
|
|
3995
|
+
const { name: callerName, position: callerPosition } = this.parseErrorStack(stackSplit);
|
|
3996
|
+
const tagName = this.tag;
|
|
3997
|
+
const that = this;
|
|
3981
3998
|
/** tag的html输出格式 */
|
|
3982
|
-
|
|
3999
|
+
const tagNameHTML = `%c[${tagName}%c`;
|
|
3983
4000
|
/** 调用的函数名的html输出格式 */
|
|
3984
4001
|
let callerNameHTML = `%c${callerName}%c]%c`;
|
|
3985
|
-
callerName.trim()
|
|
4002
|
+
if (callerName.trim() === "") {
|
|
4003
|
+
callerNameHTML = `-${callerNameHTML}`;
|
|
4004
|
+
}
|
|
3986
4005
|
/**
|
|
3987
4006
|
* 输出消息到控制台
|
|
3988
4007
|
* @param message
|
|
@@ -4068,14 +4087,14 @@ var Utils = (function () {
|
|
|
4068
4087
|
if (this.#disable)
|
|
4069
4088
|
return;
|
|
4070
4089
|
this.checkClearConsole();
|
|
4071
|
-
|
|
4090
|
+
const stack = new Error().stack.split("\n");
|
|
4072
4091
|
stack.splice(0, 1);
|
|
4073
|
-
|
|
4092
|
+
const errorStackParse = this.parseErrorStack(stack);
|
|
4074
4093
|
/** 堆栈函数名 */
|
|
4075
|
-
|
|
4094
|
+
const stackFunctionName = errorStackParse.name;
|
|
4076
4095
|
/** 堆栈位置 */
|
|
4077
|
-
|
|
4078
|
-
|
|
4096
|
+
const stackFunctionNamePosition = errorStackParse.position;
|
|
4097
|
+
const callerName = stackFunctionName;
|
|
4079
4098
|
this.#console.log(`%c[${this.tag}%c-%c${callerName}%c]%c`, ...this.#msgColorDetails, `color: ${this.#details.infoColor};`);
|
|
4080
4099
|
this.#console.table(msg);
|
|
4081
4100
|
if (this.#details.debug) {
|
|
@@ -4138,9 +4157,9 @@ var Utils = (function () {
|
|
|
4138
4157
|
*/
|
|
4139
4158
|
circleRadius: 50,
|
|
4140
4159
|
};
|
|
4141
|
-
#ctx
|
|
4142
|
-
#width
|
|
4143
|
-
#height
|
|
4160
|
+
#ctx;
|
|
4161
|
+
#width;
|
|
4162
|
+
#height;
|
|
4144
4163
|
/**
|
|
4145
4164
|
*
|
|
4146
4165
|
* @param paramConfig 配置信息
|
|
@@ -4150,14 +4169,8 @@ var Utils = (function () {
|
|
|
4150
4169
|
if (!(this.#config.canvasNode instanceof HTMLCanvasElement)) {
|
|
4151
4170
|
throw new Error("Utils.Progress 参数 canvasNode 必须是 HTMLCanvasElement");
|
|
4152
4171
|
}
|
|
4153
|
-
this.init();
|
|
4154
|
-
}
|
|
4155
|
-
/**
|
|
4156
|
-
* 初始化
|
|
4157
|
-
*/
|
|
4158
|
-
init() {
|
|
4159
4172
|
/* 获取画笔 */
|
|
4160
|
-
|
|
4173
|
+
const ctx = this.#config.canvasNode.getContext("2d");
|
|
4161
4174
|
if (ctx == null) {
|
|
4162
4175
|
throw new Error("Utils.Progress 获取画笔失败");
|
|
4163
4176
|
}
|
|
@@ -4168,8 +4181,8 @@ var Utils = (function () {
|
|
|
4168
4181
|
this.#height = this.#config.canvasNode.height;
|
|
4169
4182
|
/* 清除锯齿 */
|
|
4170
4183
|
if (window.devicePixelRatio) {
|
|
4171
|
-
this.#config.canvasNode.style.width = this.#width
|
|
4172
|
-
this.#config.canvasNode.style.height = this.#height
|
|
4184
|
+
this.#config.canvasNode.style.width = `${this.#width}px`;
|
|
4185
|
+
this.#config.canvasNode.style.height = `${this.#height}px`;
|
|
4173
4186
|
this.#config.canvasNode.height = this.#height * window.devicePixelRatio;
|
|
4174
4187
|
this.#config.canvasNode.width = this.#width * window.devicePixelRatio;
|
|
4175
4188
|
this.#ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
|
|
@@ -4181,7 +4194,7 @@ var Utils = (function () {
|
|
|
4181
4194
|
* 绘制
|
|
4182
4195
|
*/
|
|
4183
4196
|
draw() {
|
|
4184
|
-
|
|
4197
|
+
const degActive = (this.#config.progress * 360) / 100;
|
|
4185
4198
|
/* 清除画布 */
|
|
4186
4199
|
this.#ctx.clearRect(0, 0, this.#width, this.#height);
|
|
4187
4200
|
/* 开始绘制底圆 */
|
|
@@ -4195,11 +4208,11 @@ var Utils = (function () {
|
|
|
4195
4208
|
this.#ctx.strokeStyle = this.#config.lineColor;
|
|
4196
4209
|
this.#ctx.stroke();
|
|
4197
4210
|
/* 获取百分比 */
|
|
4198
|
-
|
|
4199
|
-
this.#ctx.font = this.#config.fontSize
|
|
4211
|
+
const txt = `${parseInt(this.#config.progress.toString())}%`;
|
|
4212
|
+
this.#ctx.font = `${this.#config.fontSize}px SimHei`;
|
|
4200
4213
|
/* 获取文本宽度 */
|
|
4201
|
-
|
|
4202
|
-
|
|
4214
|
+
const w = this.#ctx.measureText(txt).width;
|
|
4215
|
+
const h = this.#config.fontSize / 2;
|
|
4203
4216
|
this.#ctx.fillStyle = this.#config.textColor;
|
|
4204
4217
|
this.#ctx.fillText(txt, this.#width / 2 - w / 2, this.#height / 2 + h / 2);
|
|
4205
4218
|
}
|
|
@@ -4223,9 +4236,9 @@ var Utils = (function () {
|
|
|
4223
4236
|
* 迭代器
|
|
4224
4237
|
*/
|
|
4225
4238
|
get entries() {
|
|
4226
|
-
|
|
4239
|
+
const that = this;
|
|
4227
4240
|
return function* () {
|
|
4228
|
-
|
|
4241
|
+
const itemKeys = Object.keys(that.getItems());
|
|
4229
4242
|
for (const keyName of itemKeys) {
|
|
4230
4243
|
yield [keyName, that.get(keyName)];
|
|
4231
4244
|
}
|
|
@@ -4235,9 +4248,8 @@ var Utils = (function () {
|
|
|
4235
4248
|
* 是否可遍历
|
|
4236
4249
|
*/
|
|
4237
4250
|
get [Symbol.iterator]() {
|
|
4238
|
-
|
|
4239
|
-
|
|
4240
|
-
return that.entries();
|
|
4251
|
+
return () => {
|
|
4252
|
+
return this.entries();
|
|
4241
4253
|
};
|
|
4242
4254
|
}
|
|
4243
4255
|
/**
|
|
@@ -4324,7 +4336,7 @@ var Utils = (function () {
|
|
|
4324
4336
|
* @param callbackfn 回调函数
|
|
4325
4337
|
*/
|
|
4326
4338
|
forEach(callbackfn) {
|
|
4327
|
-
this.items.forEach((value, key
|
|
4339
|
+
this.items.forEach((value, key) => {
|
|
4328
4340
|
callbackfn(value, key, this);
|
|
4329
4341
|
});
|
|
4330
4342
|
}
|
|
@@ -4416,6 +4428,7 @@ var Utils = (function () {
|
|
|
4416
4428
|
}
|
|
4417
4429
|
}
|
|
4418
4430
|
|
|
4431
|
+
// @ts-nocheck
|
|
4419
4432
|
const VueUtils = {
|
|
4420
4433
|
/** 标签 */
|
|
4421
4434
|
ReactiveFlags: {
|
|
@@ -4454,10 +4467,10 @@ var Utils = (function () {
|
|
|
4454
4467
|
deps = [];
|
|
4455
4468
|
active = true;
|
|
4456
4469
|
fn;
|
|
4457
|
-
|
|
4470
|
+
scheduler;
|
|
4458
4471
|
constructor(fn, scheduler) {
|
|
4459
4472
|
this.fn = fn;
|
|
4460
|
-
|
|
4473
|
+
this.scheduler = scheduler;
|
|
4461
4474
|
}
|
|
4462
4475
|
run(cb) {
|
|
4463
4476
|
if (!this.active) {
|
|
@@ -4529,7 +4542,7 @@ var Utils = (function () {
|
|
|
4529
4542
|
if (VueUtils.isReactive(target)) {
|
|
4530
4543
|
return target;
|
|
4531
4544
|
}
|
|
4532
|
-
|
|
4545
|
+
const exisProxy = this.reactMap.get(target);
|
|
4533
4546
|
if (exisProxy) {
|
|
4534
4547
|
return exisProxy;
|
|
4535
4548
|
}
|
|
@@ -4542,8 +4555,8 @@ var Utils = (function () {
|
|
|
4542
4555
|
return Reflect.get(target, key, receiver);
|
|
4543
4556
|
},
|
|
4544
4557
|
set(target, key, value, receiver) {
|
|
4545
|
-
|
|
4546
|
-
|
|
4558
|
+
const oldValue = target[key];
|
|
4559
|
+
const result = Reflect.set(target, key, value, receiver);
|
|
4547
4560
|
if (oldValue !== value) {
|
|
4548
4561
|
that.trigger(target, "set", key, oldValue, value);
|
|
4549
4562
|
}
|
|
@@ -4593,11 +4606,12 @@ var Utils = (function () {
|
|
|
4593
4606
|
}
|
|
4594
4607
|
toRefs(object) {
|
|
4595
4608
|
const result = VueUtils.isArray(object) ? new Array(object.length) : {};
|
|
4596
|
-
for (
|
|
4609
|
+
for (const key in object) {
|
|
4597
4610
|
result[key] = this.toRef(object, key);
|
|
4598
4611
|
}
|
|
4599
4612
|
return result;
|
|
4600
4613
|
}
|
|
4614
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4601
4615
|
trigger(target, type, key, oldValue, value) {
|
|
4602
4616
|
const depsMap = this.targetMap.get(target);
|
|
4603
4617
|
if (!depsMap)
|
|
@@ -4605,8 +4619,9 @@ var Utils = (function () {
|
|
|
4605
4619
|
const effects = depsMap.get(key);
|
|
4606
4620
|
this.triggerEffect(effects, "effects");
|
|
4607
4621
|
}
|
|
4622
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4608
4623
|
triggerEffect(effects, name) {
|
|
4609
|
-
effects
|
|
4624
|
+
if (effects) {
|
|
4610
4625
|
effects.forEach((effect) => {
|
|
4611
4626
|
if (effect.scheduler) {
|
|
4612
4627
|
effect.scheduler();
|
|
@@ -4615,6 +4630,7 @@ var Utils = (function () {
|
|
|
4615
4630
|
effect.run();
|
|
4616
4631
|
}
|
|
4617
4632
|
});
|
|
4633
|
+
}
|
|
4618
4634
|
}
|
|
4619
4635
|
track(target, type, key) {
|
|
4620
4636
|
if (!this.activeEffect)
|
|
@@ -4631,7 +4647,7 @@ var Utils = (function () {
|
|
|
4631
4647
|
}
|
|
4632
4648
|
trackEffect(dep) {
|
|
4633
4649
|
if (this.activeEffect) {
|
|
4634
|
-
|
|
4650
|
+
const shouldTrack = !dep.has(this.activeEffect);
|
|
4635
4651
|
if (shouldTrack) {
|
|
4636
4652
|
dep.add(this.activeEffect);
|
|
4637
4653
|
this.activeEffect.deps.push(dep);
|
|
@@ -4645,7 +4661,7 @@ var Utils = (function () {
|
|
|
4645
4661
|
return value;
|
|
4646
4662
|
}
|
|
4647
4663
|
set.add(value);
|
|
4648
|
-
for (
|
|
4664
|
+
for (const key in value) {
|
|
4649
4665
|
this.traversal(value[key], set);
|
|
4650
4666
|
}
|
|
4651
4667
|
return value;
|
|
@@ -4897,6 +4913,7 @@ var Utils = (function () {
|
|
|
4897
4913
|
const setInterval = (...args) => loadOrReturnBroker().setInterval(...args);
|
|
4898
4914
|
const setTimeout$1 = (...args) => loadOrReturnBroker().setTimeout(...args);
|
|
4899
4915
|
|
|
4916
|
+
/* eslint-disable */
|
|
4900
4917
|
// ==UserScript==
|
|
4901
4918
|
// @name ModuleRaid.js
|
|
4902
4919
|
// @namespace http://tampermonkey.net/
|
|
@@ -5314,28 +5331,26 @@ var Utils = (function () {
|
|
|
5314
5331
|
return $ele?.innerHTML?.trim() === "";
|
|
5315
5332
|
});
|
|
5316
5333
|
}
|
|
5317
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5318
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5334
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5319
5335
|
// contains 语法
|
|
5320
|
-
|
|
5321
|
-
|
|
5336
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5337
|
+
const text = textMatch[2];
|
|
5322
5338
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5323
5339
|
return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
|
|
5324
5340
|
return ($ele?.textContent || $ele?.innerText)?.includes(text);
|
|
5325
5341
|
});
|
|
5326
5342
|
}
|
|
5327
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5328
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5343
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5329
5344
|
// regexp 语法
|
|
5330
|
-
|
|
5345
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5331
5346
|
let pattern = textMatch[2];
|
|
5332
|
-
|
|
5347
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5333
5348
|
let flags = "";
|
|
5334
5349
|
if (flagMatch) {
|
|
5335
5350
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5336
5351
|
flags = flagMatch[3];
|
|
5337
5352
|
}
|
|
5338
|
-
|
|
5353
|
+
const regexp = new RegExp(pattern, flags);
|
|
5339
5354
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5340
5355
|
return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
|
|
5341
5356
|
return Boolean(($ele?.textContent || $ele?.innerText)?.match(regexp));
|
|
@@ -5377,11 +5392,10 @@ var Utils = (function () {
|
|
|
5377
5392
|
selector = selector.replace(/:empty$/gi, "");
|
|
5378
5393
|
return $el.matches(selector) && $el?.innerHTML?.trim() === "";
|
|
5379
5394
|
}
|
|
5380
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5381
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5395
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5382
5396
|
// contains 语法
|
|
5383
|
-
|
|
5384
|
-
|
|
5397
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5398
|
+
const text = textMatch[2];
|
|
5385
5399
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5386
5400
|
let content = $el?.textContent || $el?.innerText;
|
|
5387
5401
|
if (typeof content !== "string") {
|
|
@@ -5389,18 +5403,17 @@ var Utils = (function () {
|
|
|
5389
5403
|
}
|
|
5390
5404
|
return $el.matches(selector) && content?.includes(text);
|
|
5391
5405
|
}
|
|
5392
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5393
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5406
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5394
5407
|
// regexp 语法
|
|
5395
|
-
|
|
5408
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5396
5409
|
let pattern = textMatch[2];
|
|
5397
|
-
|
|
5410
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5398
5411
|
let flags = "";
|
|
5399
5412
|
if (flagMatch) {
|
|
5400
5413
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5401
5414
|
flags = flagMatch[3];
|
|
5402
5415
|
}
|
|
5403
|
-
|
|
5416
|
+
const regexp = new RegExp(pattern, flags);
|
|
5404
5417
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5405
5418
|
let content = $el?.textContent || $el?.innerText;
|
|
5406
5419
|
if (typeof content !== "string") {
|
|
@@ -5418,43 +5431,41 @@ var Utils = (function () {
|
|
|
5418
5431
|
if (selector.match(/[^\s]{1}:empty$/gi)) {
|
|
5419
5432
|
// empty 语法
|
|
5420
5433
|
selector = selector.replace(/:empty$/gi, "");
|
|
5421
|
-
|
|
5434
|
+
const $closest = $el?.closest(selector);
|
|
5422
5435
|
if ($closest && $closest?.innerHTML?.trim() === "") {
|
|
5423
5436
|
return $closest;
|
|
5424
5437
|
}
|
|
5425
5438
|
return null;
|
|
5426
5439
|
}
|
|
5427
|
-
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
|
|
5428
|
-
selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5440
|
+
else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
|
|
5429
5441
|
// contains 语法
|
|
5430
|
-
|
|
5431
|
-
|
|
5442
|
+
const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
|
|
5443
|
+
const text = textMatch[2];
|
|
5432
5444
|
selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
|
|
5433
|
-
|
|
5445
|
+
const $closest = $el?.closest(selector);
|
|
5434
5446
|
if ($closest) {
|
|
5435
|
-
|
|
5447
|
+
const content = $el?.textContent || $el?.innerText;
|
|
5436
5448
|
if (typeof content === "string" && content.includes(text)) {
|
|
5437
5449
|
return $closest;
|
|
5438
5450
|
}
|
|
5439
5451
|
}
|
|
5440
5452
|
return null;
|
|
5441
5453
|
}
|
|
5442
|
-
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
|
|
5443
|
-
selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5454
|
+
else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
|
|
5444
5455
|
// regexp 语法
|
|
5445
|
-
|
|
5456
|
+
const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
|
|
5446
5457
|
let pattern = textMatch[2];
|
|
5447
|
-
|
|
5458
|
+
const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
|
|
5448
5459
|
let flags = "";
|
|
5449
5460
|
if (flagMatch) {
|
|
5450
5461
|
pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
|
|
5451
5462
|
flags = flagMatch[3];
|
|
5452
5463
|
}
|
|
5453
|
-
|
|
5464
|
+
const regexp = new RegExp(pattern, flags);
|
|
5454
5465
|
selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
|
|
5455
|
-
|
|
5466
|
+
const $closest = $el?.closest(selector);
|
|
5456
5467
|
if ($closest) {
|
|
5457
|
-
|
|
5468
|
+
const content = $el?.textContent || $el?.innerText;
|
|
5458
5469
|
if (typeof content === "string" && content.match(regexp)) {
|
|
5459
5470
|
return $closest;
|
|
5460
5471
|
}
|
|
@@ -5463,12 +5474,12 @@ var Utils = (function () {
|
|
|
5463
5474
|
}
|
|
5464
5475
|
else {
|
|
5465
5476
|
// 普通语法
|
|
5466
|
-
|
|
5477
|
+
const $closest = $el?.closest(selector);
|
|
5467
5478
|
return $closest;
|
|
5468
5479
|
}
|
|
5469
5480
|
}
|
|
5470
5481
|
}
|
|
5471
|
-
|
|
5482
|
+
const domUtils = new DOMUtils();
|
|
5472
5483
|
|
|
5473
5484
|
class Utils {
|
|
5474
5485
|
windowApi;
|
|
@@ -5481,7 +5492,7 @@ var Utils = (function () {
|
|
|
5481
5492
|
if (typeof cssText !== "string") {
|
|
5482
5493
|
throw new Error("Utils.addStyle 参数cssText 必须为String类型");
|
|
5483
5494
|
}
|
|
5484
|
-
|
|
5495
|
+
const cssNode = this.windowApi.document.createElement("style");
|
|
5485
5496
|
cssNode.setAttribute("type", "text/css");
|
|
5486
5497
|
cssNode.innerHTML = cssText;
|
|
5487
5498
|
if (this.windowApi.document.head) {
|
|
@@ -5503,23 +5514,23 @@ var Utils = (function () {
|
|
|
5503
5514
|
return cssNode;
|
|
5504
5515
|
}
|
|
5505
5516
|
/**
|
|
5506
|
-
|
|
5507
|
-
|
|
5508
|
-
|
|
5509
|
-
|
|
5510
|
-
|
|
5511
|
-
|
|
5512
|
-
|
|
5513
|
-
|
|
5514
|
-
|
|
5515
|
-
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
|
|
5517
|
+
* JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
|
|
5518
|
+
* @param target 目标数据
|
|
5519
|
+
* @param source 源数据
|
|
5520
|
+
* @param isAdd 是否可以追加键,默认false
|
|
5521
|
+
* @example
|
|
5522
|
+
* Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
|
|
5523
|
+
* >
|
|
5524
|
+
* {
|
|
5525
|
+
"1": 1,
|
|
5526
|
+
"2": {
|
|
5527
|
+
"3": 4
|
|
5528
|
+
}
|
|
5529
|
+
}
|
|
5530
|
+
*/
|
|
5520
5531
|
assign = commonUtil.assign.bind(commonUtil);
|
|
5521
5532
|
async asyncReplaceAll(string, pattern, asyncFn) {
|
|
5522
|
-
|
|
5533
|
+
const UtilsContext = this;
|
|
5523
5534
|
if (typeof string !== "string") {
|
|
5524
5535
|
throw new TypeError("string必须是字符串");
|
|
5525
5536
|
}
|
|
@@ -5591,18 +5602,18 @@ var Utils = (function () {
|
|
|
5591
5602
|
canvasElement.dispatchEvent(new MouseEvent("mouseup", eventInit));
|
|
5592
5603
|
}
|
|
5593
5604
|
checkUserClickInNode(element) {
|
|
5594
|
-
|
|
5605
|
+
const UtilsContext = this;
|
|
5595
5606
|
if (!UtilsContext.isDOM(element)) {
|
|
5596
5607
|
throw new Error("Utils.checkUserClickInNode 参数 targetNode 必须为 Element|Node 类型");
|
|
5597
5608
|
}
|
|
5598
|
-
|
|
5599
|
-
|
|
5600
|
-
|
|
5609
|
+
const clickEvent = UtilsContext.windowApi.window.event;
|
|
5610
|
+
const touchEvent = UtilsContext.windowApi.window.event;
|
|
5611
|
+
const $click = clickEvent?.composedPath()?.[0];
|
|
5601
5612
|
// 点击的x坐标
|
|
5602
|
-
|
|
5613
|
+
const clickPosX = clickEvent?.clientX != null ? clickEvent.clientX : touchEvent.touches[0].clientX;
|
|
5603
5614
|
// 点击的y坐标
|
|
5604
|
-
|
|
5605
|
-
|
|
5615
|
+
const clickPosY = clickEvent?.clientY != null ? clickEvent.clientY : touchEvent.touches[0].clientY;
|
|
5616
|
+
const {
|
|
5606
5617
|
/* 要检测的元素的相对屏幕的横坐标最左边 */
|
|
5607
5618
|
left: elementPosXLeft,
|
|
5608
5619
|
/* 要检测的元素的相对屏幕的横坐标最右边 */
|
|
@@ -5630,32 +5641,32 @@ var Utils = (function () {
|
|
|
5630
5641
|
* @param formData 需要clone的数据
|
|
5631
5642
|
*/
|
|
5632
5643
|
cloneFormData(formData, filterFn) {
|
|
5633
|
-
|
|
5634
|
-
|
|
5635
|
-
|
|
5644
|
+
const clonedFormData = new FormData();
|
|
5645
|
+
formData.forEach((value, key) => {
|
|
5646
|
+
const isFilter = typeof filterFn === "function" ? filterFn(key, value) : false;
|
|
5636
5647
|
if (typeof isFilter === "boolean" && isFilter) {
|
|
5637
|
-
|
|
5648
|
+
return;
|
|
5638
5649
|
}
|
|
5639
5650
|
clonedFormData.append(key, value);
|
|
5640
|
-
}
|
|
5651
|
+
});
|
|
5641
5652
|
return clonedFormData;
|
|
5642
5653
|
}
|
|
5643
5654
|
createOverload() {
|
|
5644
|
-
|
|
5655
|
+
const fnMap = new Map();
|
|
5645
5656
|
function overload(...args) {
|
|
5646
|
-
|
|
5647
|
-
|
|
5657
|
+
const key = args.map((it) => typeof it).join(",");
|
|
5658
|
+
const fn = fnMap.get(key);
|
|
5648
5659
|
if (!fn) {
|
|
5649
5660
|
throw new TypeError("没有找到对应的实现");
|
|
5650
5661
|
}
|
|
5651
5662
|
return fn.apply(this, args);
|
|
5652
5663
|
}
|
|
5653
5664
|
overload.addImpl = function (...args) {
|
|
5654
|
-
|
|
5665
|
+
const fn = args.pop();
|
|
5655
5666
|
if (typeof fn !== "function") {
|
|
5656
5667
|
throw new TypeError("最后一个参数必须是函数");
|
|
5657
5668
|
}
|
|
5658
|
-
|
|
5669
|
+
const key = args.join(",");
|
|
5659
5670
|
fnMap.set(key, fn);
|
|
5660
5671
|
};
|
|
5661
5672
|
return overload;
|
|
@@ -5672,7 +5683,7 @@ var Utils = (function () {
|
|
|
5672
5683
|
deepClone = commonUtil.deepClone.bind(commonUtil);
|
|
5673
5684
|
debounce(fn, delay = 0) {
|
|
5674
5685
|
let timer = null;
|
|
5675
|
-
|
|
5686
|
+
const UtilsContext = this;
|
|
5676
5687
|
return function (...args) {
|
|
5677
5688
|
UtilsContext.workerClearTimeout(timer);
|
|
5678
5689
|
timer = UtilsContext.workerSetTimeout(function () {
|
|
@@ -5681,7 +5692,7 @@ var Utils = (function () {
|
|
|
5681
5692
|
};
|
|
5682
5693
|
}
|
|
5683
5694
|
deleteParentNode(element, targetSelector) {
|
|
5684
|
-
|
|
5695
|
+
const UtilsContext = this;
|
|
5685
5696
|
if (element == null) {
|
|
5686
5697
|
return;
|
|
5687
5698
|
}
|
|
@@ -5692,7 +5703,7 @@ var Utils = (function () {
|
|
|
5692
5703
|
throw new Error("Utils.deleteParentNode 参数 targetSelector 必须为 string 类型");
|
|
5693
5704
|
}
|
|
5694
5705
|
let result = false;
|
|
5695
|
-
|
|
5706
|
+
const needRemoveDOM = domUtils.closest(element, targetSelector);
|
|
5696
5707
|
if (needRemoveDOM) {
|
|
5697
5708
|
needRemoveDOM.remove();
|
|
5698
5709
|
result = true;
|
|
@@ -5722,7 +5733,7 @@ var Utils = (function () {
|
|
|
5722
5733
|
eventNameList = [...eventName];
|
|
5723
5734
|
}
|
|
5724
5735
|
eventNameList.forEach((_eventName_) => {
|
|
5725
|
-
|
|
5736
|
+
const event = new Event(_eventName_);
|
|
5726
5737
|
if (details) {
|
|
5727
5738
|
Object.assign(event, details);
|
|
5728
5739
|
}
|
|
@@ -5730,7 +5741,7 @@ var Utils = (function () {
|
|
|
5730
5741
|
});
|
|
5731
5742
|
}
|
|
5732
5743
|
downloadBase64(base64Data, fileName, isIFrame = false) {
|
|
5733
|
-
|
|
5744
|
+
const UtilsContext = this;
|
|
5734
5745
|
if (typeof base64Data !== "string") {
|
|
5735
5746
|
throw new Error("Utils.downloadBase64 参数 base64Data 必须为 string 类型");
|
|
5736
5747
|
}
|
|
@@ -5762,7 +5773,7 @@ var Utils = (function () {
|
|
|
5762
5773
|
let strFound;
|
|
5763
5774
|
if (this.windowApi.globalThis.find) {
|
|
5764
5775
|
/* CODE FOR BROWSERS THAT SUPPORT window.find */
|
|
5765
|
-
|
|
5776
|
+
const windowFind = this.windowApi.self.find;
|
|
5766
5777
|
strFound = windowFind(str, caseSensitive, true, true, false);
|
|
5767
5778
|
if (strFound && this.windowApi.self.getSelection && !this.windowApi.self.getSelection().anchorNode) {
|
|
5768
5779
|
strFound = windowFind(str, caseSensitive, true, true, false);
|
|
@@ -5796,19 +5807,19 @@ var Utils = (function () {
|
|
|
5796
5807
|
return strFound ? true : false;
|
|
5797
5808
|
}
|
|
5798
5809
|
*findElementsWithText(element, text, filter) {
|
|
5799
|
-
|
|
5810
|
+
const that = this;
|
|
5800
5811
|
if (element.outerHTML.includes(text)) {
|
|
5801
5812
|
if (element.children.length === 0) {
|
|
5802
|
-
|
|
5813
|
+
const filterResult = typeof filter === "function" ? filter(element) : false;
|
|
5803
5814
|
if (!filterResult) {
|
|
5804
5815
|
yield element;
|
|
5805
5816
|
}
|
|
5806
5817
|
}
|
|
5807
5818
|
else {
|
|
5808
|
-
|
|
5809
|
-
for (
|
|
5819
|
+
const textElement = Array.from(element.childNodes).filter((ele) => ele.nodeType === Node.TEXT_NODE);
|
|
5820
|
+
for (const $child of textElement) {
|
|
5810
5821
|
if ($child.textContent.includes(text)) {
|
|
5811
|
-
|
|
5822
|
+
const filterResult = typeof filter === "function" ? filter(element) : false;
|
|
5812
5823
|
if (!filterResult) {
|
|
5813
5824
|
yield $child;
|
|
5814
5825
|
}
|
|
@@ -5817,7 +5828,7 @@ var Utils = (function () {
|
|
|
5817
5828
|
}
|
|
5818
5829
|
}
|
|
5819
5830
|
for (let index = 0; index < element.children.length; index++) {
|
|
5820
|
-
|
|
5831
|
+
const $child = element.children[index];
|
|
5821
5832
|
yield* that.findElementsWithText($child, text, filter);
|
|
5822
5833
|
}
|
|
5823
5834
|
}
|
|
@@ -5831,8 +5842,8 @@ var Utils = (function () {
|
|
|
5831
5842
|
findVisibleElement(element) {
|
|
5832
5843
|
let currentElement = element;
|
|
5833
5844
|
while (currentElement) {
|
|
5834
|
-
|
|
5835
|
-
if (
|
|
5845
|
+
const elementRect = currentElement.getBoundingClientRect();
|
|
5846
|
+
if (elementRect.length) {
|
|
5836
5847
|
return currentElement;
|
|
5837
5848
|
}
|
|
5838
5849
|
currentElement = currentElement.parentElement;
|
|
@@ -5846,7 +5857,7 @@ var Utils = (function () {
|
|
|
5846
5857
|
}
|
|
5847
5858
|
let result = 0;
|
|
5848
5859
|
let resultType = "KB";
|
|
5849
|
-
|
|
5860
|
+
const sizeData = {};
|
|
5850
5861
|
sizeData.B = 1;
|
|
5851
5862
|
sizeData.KB = 1024;
|
|
5852
5863
|
sizeData.MB = sizeData.KB * sizeData.KB;
|
|
@@ -5859,7 +5870,7 @@ var Utils = (function () {
|
|
|
5859
5870
|
sizeData.BB = sizeData.YB * sizeData.KB;
|
|
5860
5871
|
sizeData.NB = sizeData.BB * sizeData.KB;
|
|
5861
5872
|
sizeData.DB = sizeData.NB * sizeData.KB;
|
|
5862
|
-
for (
|
|
5873
|
+
for (const key in sizeData) {
|
|
5863
5874
|
result = byteSize / sizeData[key];
|
|
5864
5875
|
resultType = key;
|
|
5865
5876
|
if (sizeData.KB >= result) {
|
|
@@ -5872,7 +5883,7 @@ var Utils = (function () {
|
|
|
5872
5883
|
}
|
|
5873
5884
|
getNodeListValue(...args) {
|
|
5874
5885
|
let resultArray = [];
|
|
5875
|
-
for (
|
|
5886
|
+
for (const arg of args) {
|
|
5876
5887
|
let value = arg;
|
|
5877
5888
|
if (typeof arg === "function") {
|
|
5878
5889
|
/* 方法 */
|
|
@@ -5887,7 +5898,7 @@ var Utils = (function () {
|
|
|
5887
5898
|
}
|
|
5888
5899
|
getNonNullValue(...args) {
|
|
5889
5900
|
let resultValue = args[args.length - 1];
|
|
5890
|
-
|
|
5901
|
+
const UtilsContext = this;
|
|
5891
5902
|
for (const argValue of args) {
|
|
5892
5903
|
if (UtilsContext.isNotNull(argValue)) {
|
|
5893
5904
|
resultValue = argValue;
|
|
@@ -5897,7 +5908,7 @@ var Utils = (function () {
|
|
|
5897
5908
|
return resultValue;
|
|
5898
5909
|
}
|
|
5899
5910
|
formatTime(text = new Date(), formatType = "yyyy-MM-dd HH:mm:ss") {
|
|
5900
|
-
|
|
5911
|
+
const time = text == null ? new Date() : new Date(text);
|
|
5901
5912
|
/**
|
|
5902
5913
|
* 校验时间补0
|
|
5903
5914
|
* @param timeNum
|
|
@@ -5905,7 +5916,7 @@ var Utils = (function () {
|
|
|
5905
5916
|
*/
|
|
5906
5917
|
function checkTime(timeNum) {
|
|
5907
5918
|
if (timeNum < 10)
|
|
5908
|
-
return
|
|
5919
|
+
return `0${timeNum}`;
|
|
5909
5920
|
return timeNum;
|
|
5910
5921
|
}
|
|
5911
5922
|
/**
|
|
@@ -5916,7 +5927,7 @@ var Utils = (function () {
|
|
|
5916
5927
|
function timeSystemChange(hourNum) {
|
|
5917
5928
|
return hourNum > 12 ? hourNum - 12 : hourNum;
|
|
5918
5929
|
}
|
|
5919
|
-
|
|
5930
|
+
const timeRegexp = {
|
|
5920
5931
|
yyyy: time.getFullYear(),
|
|
5921
5932
|
/* 年 */
|
|
5922
5933
|
MM: checkTime(time.getMonth() + 1),
|
|
@@ -5933,7 +5944,7 @@ var Utils = (function () {
|
|
|
5933
5944
|
/* 秒 */
|
|
5934
5945
|
};
|
|
5935
5946
|
Object.keys(timeRegexp).forEach(function (key) {
|
|
5936
|
-
|
|
5947
|
+
const replaecRegexp = new RegExp(key, "g");
|
|
5937
5948
|
formatType = formatType.replace(replaecRegexp, timeRegexp[key]);
|
|
5938
5949
|
});
|
|
5939
5950
|
return formatType;
|
|
@@ -5945,12 +5956,12 @@ var Utils = (function () {
|
|
|
5945
5956
|
}
|
|
5946
5957
|
if (text.length === 8) {
|
|
5947
5958
|
/* 该字符串只有时分秒 */
|
|
5948
|
-
|
|
5949
|
-
text = today.getFullYear()
|
|
5959
|
+
const today = new Date();
|
|
5960
|
+
text = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()} ${text}`;
|
|
5950
5961
|
}
|
|
5951
5962
|
text = text.substring(0, 19);
|
|
5952
5963
|
text = text.replace(/-/g, "/");
|
|
5953
|
-
|
|
5964
|
+
const timestamp = new Date(text).getTime();
|
|
5954
5965
|
return timestamp;
|
|
5955
5966
|
}
|
|
5956
5967
|
/**
|
|
@@ -6000,16 +6011,16 @@ var Utils = (function () {
|
|
|
6000
6011
|
if (timestamp2.toString().length === 10) {
|
|
6001
6012
|
timestamp2 = timestamp2 * 1000;
|
|
6002
6013
|
}
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
|
|
6006
|
-
|
|
6007
|
-
|
|
6008
|
-
|
|
6009
|
-
|
|
6010
|
-
|
|
6011
|
-
|
|
6012
|
-
|
|
6014
|
+
const smallTimeStamp = timestamp1 > timestamp2 ? timestamp2 : timestamp1;
|
|
6015
|
+
const bigTimeStamp = timestamp1 > timestamp2 ? timestamp1 : timestamp2;
|
|
6016
|
+
const oneSecond = 1000; /* 一秒的毫秒数 */
|
|
6017
|
+
const oneMinute = 60 * oneSecond; /* 一分钟的毫秒数 */
|
|
6018
|
+
const oneHour = 60 * oneMinute; /* 一小时的毫秒数 */
|
|
6019
|
+
const oneDay = 24 * oneHour; /* 一天的毫秒数 */
|
|
6020
|
+
const oneMonth = 30 * oneDay; /* 一个月的毫秒数(30天) */
|
|
6021
|
+
const oneYear = 12 * oneMonth; /* 一年的毫秒数 */
|
|
6022
|
+
const bigDate = new Date(bigTimeStamp);
|
|
6023
|
+
const smallDate = new Date(smallTimeStamp);
|
|
6013
6024
|
let remainderValue = 1;
|
|
6014
6025
|
if (type === "年") {
|
|
6015
6026
|
remainderValue = oneYear;
|
|
@@ -6031,30 +6042,30 @@ var Utils = (function () {
|
|
|
6031
6042
|
}
|
|
6032
6043
|
let diffValue = Math.round(Math.abs((bigDate - smallDate) / remainderValue));
|
|
6033
6044
|
if (type === "auto") {
|
|
6034
|
-
|
|
6045
|
+
const timeDifference = bigTimeStamp - smallTimeStamp;
|
|
6035
6046
|
diffValue = Math.floor(timeDifference / (24 * 3600 * 1000));
|
|
6036
6047
|
if (diffValue > 0) {
|
|
6037
|
-
diffValue = diffValue
|
|
6048
|
+
diffValue = `${diffValue}天`;
|
|
6038
6049
|
}
|
|
6039
6050
|
else {
|
|
6040
6051
|
/* 计算出小时数 */
|
|
6041
|
-
|
|
6042
|
-
|
|
6052
|
+
const leave1 = timeDifference % (24 * 3600 * 1000); /* 计算天数后剩余的毫秒数 */
|
|
6053
|
+
const hours = Math.floor(leave1 / (3600 * 1000));
|
|
6043
6054
|
if (hours > 0) {
|
|
6044
|
-
diffValue = hours
|
|
6055
|
+
diffValue = `${hours}小时`;
|
|
6045
6056
|
}
|
|
6046
6057
|
else {
|
|
6047
6058
|
/* 计算相差分钟数 */
|
|
6048
|
-
|
|
6049
|
-
|
|
6059
|
+
const leave2 = leave1 % (3600 * 1000); /* 计算小时数后剩余的毫秒数 */
|
|
6060
|
+
const minutes = Math.floor(leave2 / (60 * 1000));
|
|
6050
6061
|
if (minutes > 0) {
|
|
6051
|
-
diffValue = minutes
|
|
6062
|
+
diffValue = `${minutes}分钟`;
|
|
6052
6063
|
}
|
|
6053
6064
|
else {
|
|
6054
6065
|
/* 计算相差秒数 */
|
|
6055
|
-
|
|
6056
|
-
|
|
6057
|
-
diffValue = seconds
|
|
6066
|
+
const leave3 = leave2 % (60 * 1000); /* 计算分钟数后剩余的毫秒数 */
|
|
6067
|
+
const seconds = Math.round(leave3 / 1000);
|
|
6068
|
+
diffValue = `${seconds}秒`;
|
|
6058
6069
|
}
|
|
6059
6070
|
}
|
|
6060
6071
|
}
|
|
@@ -6062,14 +6073,14 @@ var Utils = (function () {
|
|
|
6062
6073
|
return diffValue;
|
|
6063
6074
|
}
|
|
6064
6075
|
getElementSelector(element) {
|
|
6065
|
-
|
|
6076
|
+
const UtilsContext = this;
|
|
6066
6077
|
if (!element)
|
|
6067
6078
|
return void 0;
|
|
6068
6079
|
if (!element.parentElement)
|
|
6069
6080
|
return void 0;
|
|
6070
6081
|
/* 如果元素有id属性,则直接返回id选择器 */
|
|
6071
6082
|
if (element.id)
|
|
6072
|
-
return
|
|
6083
|
+
return `#${element.id}`;
|
|
6073
6084
|
/* 递归地获取父元素的选择器 */
|
|
6074
6085
|
let selector = UtilsContext.getElementSelector(element.parentElement);
|
|
6075
6086
|
if (!selector) {
|
|
@@ -6077,11 +6088,11 @@ var Utils = (function () {
|
|
|
6077
6088
|
}
|
|
6078
6089
|
/* 如果有多个相同类型的兄弟元素,则需要添加索引 */
|
|
6079
6090
|
if (element.parentElement.querySelectorAll(element.tagName).length > 1) {
|
|
6080
|
-
|
|
6081
|
-
selector +=
|
|
6091
|
+
const index = Array.prototype.indexOf.call(element.parentElement.children, element) + 1;
|
|
6092
|
+
selector += ` > ${element.tagName.toLowerCase()}:nth-child(${index})`;
|
|
6082
6093
|
}
|
|
6083
6094
|
else {
|
|
6084
|
-
selector +=
|
|
6095
|
+
selector += ` > ${element.tagName.toLowerCase()}`;
|
|
6085
6096
|
}
|
|
6086
6097
|
return selector;
|
|
6087
6098
|
}
|
|
@@ -6092,15 +6103,15 @@ var Utils = (function () {
|
|
|
6092
6103
|
* > 2
|
|
6093
6104
|
*/
|
|
6094
6105
|
getMaxValue(...args) {
|
|
6095
|
-
|
|
6106
|
+
const result = [...args];
|
|
6096
6107
|
let newResult = [];
|
|
6097
6108
|
if (result.length === 0) {
|
|
6098
6109
|
return void 0;
|
|
6099
6110
|
}
|
|
6100
6111
|
if (result.length > 1) {
|
|
6101
6112
|
if (result.length === 2 && typeof result[0] === "object" && typeof result[1] === "function") {
|
|
6102
|
-
|
|
6103
|
-
|
|
6113
|
+
const data = result[0];
|
|
6114
|
+
const handleDataFunc = result[1];
|
|
6104
6115
|
Object.keys(data).forEach((keyName) => {
|
|
6105
6116
|
newResult = [...newResult, handleDataFunc(keyName, data[keyName])];
|
|
6106
6117
|
});
|
|
@@ -6148,7 +6159,7 @@ var Utils = (function () {
|
|
|
6148
6159
|
*/
|
|
6149
6160
|
function queryMaxZIndex($ele) {
|
|
6150
6161
|
if (typeof ignoreCallBack === "function") {
|
|
6151
|
-
|
|
6162
|
+
const ignoreResult = ignoreCallBack($ele);
|
|
6152
6163
|
if (typeof ignoreResult === "boolean" && !ignoreResult) {
|
|
6153
6164
|
return;
|
|
6154
6165
|
}
|
|
@@ -6157,7 +6168,7 @@ var Utils = (function () {
|
|
|
6157
6168
|
const nodeStyle = UtilsContext.windowApi.window.getComputedStyle($ele);
|
|
6158
6169
|
/* 不对position为static和display为none的元素进行获取它们的z-index */
|
|
6159
6170
|
if (isVisibleNode(nodeStyle)) {
|
|
6160
|
-
|
|
6171
|
+
const nodeZIndex = parseInt(nodeStyle.zIndex);
|
|
6161
6172
|
if (!isNaN(nodeZIndex)) {
|
|
6162
6173
|
if (nodeZIndex > zIndex) {
|
|
6163
6174
|
// 赋值到全局
|
|
@@ -6173,7 +6184,7 @@ var Utils = (function () {
|
|
|
6173
6184
|
}
|
|
6174
6185
|
}
|
|
6175
6186
|
}
|
|
6176
|
-
target.querySelectorAll("*").forEach(($ele
|
|
6187
|
+
target.querySelectorAll("*").forEach(($ele) => {
|
|
6177
6188
|
queryMaxZIndex($ele);
|
|
6178
6189
|
});
|
|
6179
6190
|
zIndex += deviation;
|
|
@@ -6190,15 +6201,15 @@ var Utils = (function () {
|
|
|
6190
6201
|
return this.getMaxZIndexNodeInfo(deviation, target, ignoreCallBack).zIndex;
|
|
6191
6202
|
}
|
|
6192
6203
|
getMinValue(...args) {
|
|
6193
|
-
|
|
6204
|
+
const result = [...args];
|
|
6194
6205
|
let newResult = [];
|
|
6195
6206
|
if (result.length === 0) {
|
|
6196
6207
|
return void 0;
|
|
6197
6208
|
}
|
|
6198
6209
|
if (result.length > 1) {
|
|
6199
6210
|
if (result.length === 2 && typeof result[0] === "object" && typeof result[1] === "function") {
|
|
6200
|
-
|
|
6201
|
-
|
|
6211
|
+
const data = result[0];
|
|
6212
|
+
const handleDataFunc = result[1];
|
|
6202
6213
|
Object.keys(data).forEach((keyName) => {
|
|
6203
6214
|
newResult = [...newResult, handleDataFunc(keyName, data[keyName])];
|
|
6204
6215
|
});
|
|
@@ -6228,8 +6239,8 @@ var Utils = (function () {
|
|
|
6228
6239
|
* > 'Mozilla/5.0 (Linux; Android 10; MI 13 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.3490.40 Mobile Safari/537.36'
|
|
6229
6240
|
**/
|
|
6230
6241
|
getRandomAndroidUA() {
|
|
6231
|
-
|
|
6232
|
-
|
|
6242
|
+
const UtilsContext = this;
|
|
6243
|
+
const mobileNameList = [
|
|
6233
6244
|
"LDN-LX3",
|
|
6234
6245
|
"RNE-L03",
|
|
6235
6246
|
"ASUS_X00ID Build/NMF26F",
|
|
@@ -6246,14 +6257,14 @@ var Utils = (function () {
|
|
|
6246
6257
|
"MI 13 Build/OPR1.170623.027; wv",
|
|
6247
6258
|
];
|
|
6248
6259
|
/* 安卓版本 */
|
|
6249
|
-
|
|
6260
|
+
const androidVersion = UtilsContext.getRandomValue(12, 14);
|
|
6250
6261
|
/* 手机型号 */
|
|
6251
|
-
|
|
6262
|
+
const randomMobile = UtilsContext.getRandomValue(mobileNameList);
|
|
6252
6263
|
/* chrome大版本号 */
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6264
|
+
const chromeVersion1 = UtilsContext.getRandomValue(120, 132);
|
|
6265
|
+
const chromeVersion2 = UtilsContext.getRandomValue(0, 0);
|
|
6266
|
+
const chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
|
|
6267
|
+
const chromeVersion4 = UtilsContext.getRandomValue(1, 218);
|
|
6257
6268
|
return `Mozilla/5.0 (Linux; Android ${androidVersion}; ${randomMobile}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion1}.${chromeVersion2}.${chromeVersion3}.${chromeVersion4} Mobile Safari/537.36`;
|
|
6258
6269
|
}
|
|
6259
6270
|
/**
|
|
@@ -6275,20 +6286,20 @@ var Utils = (function () {
|
|
|
6275
6286
|
* > 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5068.19 Safari/537.36'
|
|
6276
6287
|
**/
|
|
6277
6288
|
getRandomPCUA() {
|
|
6278
|
-
|
|
6289
|
+
const UtilsContext = this;
|
|
6279
6290
|
/* chrome大版本号 */
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6283
|
-
|
|
6291
|
+
const chromeVersion1 = UtilsContext.getRandomValue(120, 132);
|
|
6292
|
+
const chromeVersion2 = UtilsContext.getRandomValue(0, 0);
|
|
6293
|
+
const chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
|
|
6294
|
+
const chromeVersion4 = UtilsContext.getRandomValue(1, 218);
|
|
6284
6295
|
return `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion1}.${chromeVersion2}.${chromeVersion3}.${chromeVersion4} Safari/537.36`;
|
|
6285
6296
|
}
|
|
6286
6297
|
getRandomValue(...args) {
|
|
6287
|
-
|
|
6298
|
+
const result = [...args];
|
|
6288
6299
|
if (result.length > 1) {
|
|
6289
6300
|
if (result.length === 2 && typeof result[0] === "number" && typeof result[1] === "number") {
|
|
6290
|
-
|
|
6291
|
-
|
|
6301
|
+
const leftNumber = result[0] > result[1] ? result[1] : result[0];
|
|
6302
|
+
const rightNumber = result[0] > result[1] ? result[0] : result[1];
|
|
6292
6303
|
return Math.round(Math.random() * (rightNumber - leftNumber)) + leftNumber;
|
|
6293
6304
|
}
|
|
6294
6305
|
else {
|
|
@@ -6296,12 +6307,12 @@ var Utils = (function () {
|
|
|
6296
6307
|
}
|
|
6297
6308
|
}
|
|
6298
6309
|
else if (result.length === 1) {
|
|
6299
|
-
|
|
6310
|
+
const paramData = result[0];
|
|
6300
6311
|
if (Array.isArray(paramData)) {
|
|
6301
6312
|
return paramData[Math.floor(Math.random() * paramData.length)];
|
|
6302
6313
|
}
|
|
6303
6314
|
else if (typeof paramData === "object" && Object.keys(paramData).length > 0) {
|
|
6304
|
-
|
|
6315
|
+
const paramObjDataKey = Object.keys(paramData)[Math.floor(Math.random() * Object.keys(paramData).length)];
|
|
6305
6316
|
return paramData[paramObjDataKey];
|
|
6306
6317
|
}
|
|
6307
6318
|
else {
|
|
@@ -6317,7 +6328,7 @@ var Utils = (function () {
|
|
|
6317
6328
|
* Utils.getReactObj(document.querySelector("input"))?.reactProps?.onChange({target:{value:"123"}});
|
|
6318
6329
|
*/
|
|
6319
6330
|
getReactObj(element) {
|
|
6320
|
-
|
|
6331
|
+
const result = {};
|
|
6321
6332
|
if (element == null) {
|
|
6322
6333
|
return result;
|
|
6323
6334
|
}
|
|
@@ -6343,9 +6354,9 @@ var Utils = (function () {
|
|
|
6343
6354
|
if (typeof target !== "object") {
|
|
6344
6355
|
throw new TypeError("target不是一个对象");
|
|
6345
6356
|
}
|
|
6346
|
-
|
|
6357
|
+
const objectsSymbols = Object.getOwnPropertySymbols(target);
|
|
6347
6358
|
if (typeof keyName === "string") {
|
|
6348
|
-
|
|
6359
|
+
const findSymbol = objectsSymbols.find((key) => {
|
|
6349
6360
|
return key.toString() === keyName;
|
|
6350
6361
|
});
|
|
6351
6362
|
if (findSymbol) {
|
|
@@ -6353,7 +6364,7 @@ var Utils = (function () {
|
|
|
6353
6364
|
}
|
|
6354
6365
|
}
|
|
6355
6366
|
else if (typeof keyName === "symbol") {
|
|
6356
|
-
|
|
6367
|
+
const findSymbol = objectsSymbols.find((key) => {
|
|
6357
6368
|
return key === keyName;
|
|
6358
6369
|
});
|
|
6359
6370
|
if (findSymbol) {
|
|
@@ -6361,7 +6372,7 @@ var Utils = (function () {
|
|
|
6361
6372
|
}
|
|
6362
6373
|
}
|
|
6363
6374
|
else {
|
|
6364
|
-
|
|
6375
|
+
const result = {};
|
|
6365
6376
|
objectsSymbols.forEach((item) => {
|
|
6366
6377
|
result[item] = target[item];
|
|
6367
6378
|
});
|
|
@@ -6376,12 +6387,12 @@ var Utils = (function () {
|
|
|
6376
6387
|
* > 12
|
|
6377
6388
|
*/
|
|
6378
6389
|
getTextLength(text) {
|
|
6379
|
-
|
|
6380
|
-
|
|
6390
|
+
const encoder = new TextEncoder();
|
|
6391
|
+
const bytes = encoder.encode(text);
|
|
6381
6392
|
return bytes.length;
|
|
6382
6393
|
}
|
|
6383
6394
|
getTextStorageSize(text, addType = true) {
|
|
6384
|
-
|
|
6395
|
+
const UtilsContext = this;
|
|
6385
6396
|
return UtilsContext.formatByteToSize(UtilsContext.getTextLength(text), addType);
|
|
6386
6397
|
}
|
|
6387
6398
|
getThunderUrl(url) {
|
|
@@ -6394,88 +6405,75 @@ var Utils = (function () {
|
|
|
6394
6405
|
if (url.trim() === "") {
|
|
6395
6406
|
throw new TypeError("url不能为空字符串或纯空格");
|
|
6396
6407
|
}
|
|
6397
|
-
return `thunder://${this.windowApi.globalThis.btoa(
|
|
6408
|
+
return `thunder://${this.windowApi.globalThis.btoa(`AA${url}ZZ`)}`;
|
|
6398
6409
|
}
|
|
6399
6410
|
/**
|
|
6400
|
-
|
|
6401
|
-
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
|
|
6408
|
-
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6414
|
-
|
|
6415
|
-
|
|
6416
|
-
|
|
6417
|
-
|
|
6418
|
-
|
|
6419
|
-
|
|
6420
|
-
|
|
6421
|
-
|
|
6422
|
-
|
|
6423
|
-
|
|
6424
|
-
|
|
6425
|
-
|
|
6411
|
+
* 对于GM_cookie的兼容写法,当无法使用GM_cookie时可以使用这个,但是并不完全兼容,有些写不出来且限制了httponly是无法访问的
|
|
6412
|
+
* @example
|
|
6413
|
+
let GM_cookie = new Utils.GM_Cookie();
|
|
6414
|
+
GM_cookie.list({name:"xxx_cookie_xxx"},function(cookies,error){
|
|
6415
|
+
if (!error) {
|
|
6416
|
+
console.log(cookies);
|
|
6417
|
+
console.log(cookies.value);
|
|
6418
|
+
} else {
|
|
6419
|
+
console.error(error);
|
|
6420
|
+
}
|
|
6421
|
+
});
|
|
6422
|
+
GM_cookie.set({name:"xxx_cookie_test_xxx",value:"这是Cookie测试值"},function(error){
|
|
6423
|
+
if (error) {
|
|
6424
|
+
console.error(error);
|
|
6425
|
+
} else {
|
|
6426
|
+
console.log('Cookie set successfully.');
|
|
6427
|
+
}
|
|
6428
|
+
})
|
|
6429
|
+
GM_cookie.delete({name:"xxx_cookie_test_xxx"},function(error){
|
|
6430
|
+
if (error) {
|
|
6431
|
+
console.error(error);
|
|
6432
|
+
} else {
|
|
6433
|
+
console.log('Cookie set successfully.');
|
|
6434
|
+
}
|
|
6435
|
+
})
|
|
6436
|
+
**/
|
|
6426
6437
|
GM_Cookie = UtilsGMCookie;
|
|
6427
6438
|
/**
|
|
6428
|
-
|
|
6429
|
-
|
|
6430
|
-
|
|
6431
|
-
|
|
6432
|
-
|
|
6433
|
-
|
|
6434
|
-
|
|
6435
|
-
|
|
6436
|
-
|
|
6437
|
-
|
|
6438
|
-
|
|
6439
|
-
|
|
6439
|
+
* 注册油猴菜单,要求本地存储的键名不能存在其它键名`GM_Menu_Local_Map`会冲突/覆盖
|
|
6440
|
+
* @example
|
|
6441
|
+
let GM_Menu = new Utils.GM_Menu({
|
|
6442
|
+
data: [
|
|
6443
|
+
{
|
|
6444
|
+
menu_key: "menu_key",
|
|
6445
|
+
text: "测试按钮",
|
|
6446
|
+
enable: true,
|
|
6447
|
+
accessKey: "a",
|
|
6448
|
+
autoClose: false,
|
|
6449
|
+
showText(text, enable) {
|
|
6450
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6451
|
+
},
|
|
6452
|
+
callback(data) {
|
|
6453
|
+
console.log("点击菜单,值修改为", data.enable);
|
|
6454
|
+
},
|
|
6440
6455
|
},
|
|
6441
|
-
|
|
6442
|
-
|
|
6443
|
-
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6449
|
-
|
|
6450
|
-
|
|
6451
|
-
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6456
|
-
|
|
6457
|
-
|
|
6458
|
-
|
|
6459
|
-
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
// 添加键为menu_key2的菜单项
|
|
6463
|
-
GM_Menu.add({
|
|
6464
|
-
key:"menu_key2",
|
|
6465
|
-
text: "测试按钮2",
|
|
6466
|
-
enable: false,
|
|
6467
|
-
showText(text,enable){
|
|
6468
|
-
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6469
|
-
},
|
|
6470
|
-
callback(data){
|
|
6471
|
-
console.log("点击菜单,值修改为",data.enable);
|
|
6472
|
-
}
|
|
6473
|
-
});
|
|
6474
|
-
// 使用数组的方式添加多个菜单,如menu_key3、menu_key4
|
|
6475
|
-
GM_Menu.add([
|
|
6476
|
-
{
|
|
6477
|
-
key:"menu_key3",
|
|
6478
|
-
text: "测试按钮3",
|
|
6456
|
+
],
|
|
6457
|
+
autoReload: false,
|
|
6458
|
+
GM_getValue,
|
|
6459
|
+
GM_setValue,
|
|
6460
|
+
GM_registerMenuCommand,
|
|
6461
|
+
GM_unregisterMenuCommand,
|
|
6462
|
+
});
|
|
6463
|
+
|
|
6464
|
+
|
|
6465
|
+
// 获取某个菜单项的值
|
|
6466
|
+
GM_Menu.get("menu_key");
|
|
6467
|
+
> true
|
|
6468
|
+
|
|
6469
|
+
// 获取某个菜单项的开启/关闭后显示的文本
|
|
6470
|
+
GM_Menu.getShowTextValue("menu_key");
|
|
6471
|
+
> √测试按钮
|
|
6472
|
+
|
|
6473
|
+
// 添加键为menu_key2的菜单项
|
|
6474
|
+
GM_Menu.add({
|
|
6475
|
+
key:"menu_key2",
|
|
6476
|
+
text: "测试按钮2",
|
|
6479
6477
|
enable: false,
|
|
6480
6478
|
showText(text,enable){
|
|
6481
6479
|
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
@@ -6483,152 +6481,165 @@ var Utils = (function () {
|
|
|
6483
6481
|
callback(data){
|
|
6484
6482
|
console.log("点击菜单,值修改为",data.enable);
|
|
6485
6483
|
}
|
|
6486
|
-
}
|
|
6487
|
-
|
|
6488
|
-
|
|
6489
|
-
|
|
6490
|
-
|
|
6491
|
-
|
|
6492
|
-
|
|
6484
|
+
});
|
|
6485
|
+
// 使用数组的方式添加多个菜单,如menu_key3、menu_key4
|
|
6486
|
+
GM_Menu.add([
|
|
6487
|
+
{
|
|
6488
|
+
key:"menu_key3",
|
|
6489
|
+
text: "测试按钮3",
|
|
6490
|
+
enable: false,
|
|
6491
|
+
showText(text,enable){
|
|
6492
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6493
|
+
},
|
|
6494
|
+
callback(data){
|
|
6495
|
+
console.log("点击菜单,值修改为",data.enable);
|
|
6496
|
+
}
|
|
6493
6497
|
},
|
|
6494
|
-
|
|
6495
|
-
|
|
6498
|
+
{
|
|
6499
|
+
key:"menu_key4",
|
|
6500
|
+
text: "测试按钮4",
|
|
6501
|
+
enable: false,
|
|
6502
|
+
showText(text,enable){
|
|
6503
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6504
|
+
},
|
|
6505
|
+
callback(data){
|
|
6506
|
+
console.log("点击菜单,值修改为",data.enable);
|
|
6507
|
+
}
|
|
6496
6508
|
}
|
|
6497
|
-
|
|
6498
|
-
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
|
|
6502
|
-
|
|
6503
|
-
|
|
6504
|
-
|
|
6505
|
-
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
|
|
6509
|
-
|
|
6509
|
+
]);
|
|
6510
|
+
|
|
6511
|
+
// 更新键为menu_key的显示文字和点击回调
|
|
6512
|
+
GM_Menu.update({
|
|
6513
|
+
menu_key:{
|
|
6514
|
+
text: "更新后的测试按钮",
|
|
6515
|
+
enable: true,
|
|
6516
|
+
showText(text,enable){
|
|
6517
|
+
return "[" + (enable ? "√" : "×") + "]" + text;
|
|
6518
|
+
},
|
|
6519
|
+
callback(data){
|
|
6520
|
+
console.log("点击菜单更新后的测试按钮,新值修改为",data.enable);
|
|
6521
|
+
}
|
|
6510
6522
|
}
|
|
6511
|
-
}
|
|
6512
|
-
|
|
6513
|
-
|
|
6514
|
-
|
|
6515
|
-
|
|
6516
|
-
**/
|
|
6523
|
+
});
|
|
6524
|
+
|
|
6525
|
+
// 删除键为menu_key的菜单
|
|
6526
|
+
GM_Menu.delete("menu_key");
|
|
6527
|
+
**/
|
|
6517
6528
|
GM_Menu = GMMenu;
|
|
6518
6529
|
/**
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
|
|
6529
|
-
|
|
6530
|
-
|
|
6531
|
-
|
|
6532
|
-
|
|
6533
|
-
|
|
6534
|
-
|
|
6535
|
-
|
|
6536
|
-
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6530
|
+
* 基于Function prototype,能够勾住和释放任何函数
|
|
6531
|
+
*
|
|
6532
|
+
* .hook
|
|
6533
|
+
* + realFunc {string} 用于保存原始函数的函数名称,用于unHook
|
|
6534
|
+
* + hookFunc {string} 替换的hook函数
|
|
6535
|
+
* + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
|
|
6536
|
+
* + methodName {string} 匿名函数需显式传入目标函数名eg:this.Begin = function(){....};}
|
|
6537
|
+
*
|
|
6538
|
+
* .unhook
|
|
6539
|
+
* + realFunc {string} 用于保存原始函数的函数名称,用于unHook
|
|
6540
|
+
* + funcName {string} 被Hook的函数名称
|
|
6541
|
+
* + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
|
|
6542
|
+
* @example
|
|
6543
|
+
let hook = new Utils.Hooks();
|
|
6544
|
+
hook.initEnv();
|
|
6545
|
+
function myFunction(){
|
|
6546
|
+
console.log("我自己需要执行的函数");
|
|
6547
|
+
}
|
|
6548
|
+
function testFunction(){
|
|
6549
|
+
console.log("正常执行的函数");
|
|
6550
|
+
}
|
|
6551
|
+
testFunction.hook(testFunction,myFunction,window);
|
|
6552
|
+
**/
|
|
6542
6553
|
Hooks = Hooks;
|
|
6543
6554
|
/**
|
|
6544
|
-
|
|
6545
|
-
|
|
6546
|
-
|
|
6547
|
-
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6552
|
-
|
|
6553
|
-
|
|
6554
|
-
|
|
6555
|
-
|
|
6556
|
-
|
|
6557
|
-
|
|
6558
|
-
|
|
6559
|
-
|
|
6560
|
-
|
|
6561
|
-
|
|
6562
|
-
|
|
6563
|
-
|
|
6564
|
-
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
|
|
6568
|
-
|
|
6569
|
-
|
|
6570
|
-
|
|
6571
|
-
|
|
6572
|
-
|
|
6573
|
-
|
|
6574
|
-
|
|
6575
|
-
|
|
6576
|
-
|
|
6577
|
-
|
|
6578
|
-
|
|
6579
|
-
|
|
6580
|
-
|
|
6555
|
+
* 为减少代码量和回调,把GM_xmlhttpRequest封装
|
|
6556
|
+
* 文档地址: https://www.tampermonkey.net/documentation.php?ext=iikm
|
|
6557
|
+
* 其中onloadstart、onprogress、onreadystatechange是回调形式,onabort、ontimeout、onerror可以设置全局回调函数
|
|
6558
|
+
* @param _GM_xmlHttpRequest_ 油猴中的GM_xmlhttpRequest
|
|
6559
|
+
* @example
|
|
6560
|
+
let httpx = new Utils.Httpx(GM_xmlhttpRequest);
|
|
6561
|
+
let postResp = await httpx.post({
|
|
6562
|
+
url:url,
|
|
6563
|
+
data:JSON.stringify({
|
|
6564
|
+
test:1
|
|
6565
|
+
}),
|
|
6566
|
+
timeout: 5000
|
|
6567
|
+
});
|
|
6568
|
+
console.log(postResp);
|
|
6569
|
+
> {
|
|
6570
|
+
status: true,
|
|
6571
|
+
data: {responseText: "...", response: xxx,...},
|
|
6572
|
+
msg: "请求完毕",
|
|
6573
|
+
type: "onload",
|
|
6574
|
+
}
|
|
6575
|
+
|
|
6576
|
+
if(postResp === "onload" && postResp.status){
|
|
6577
|
+
// onload
|
|
6578
|
+
}else if(postResp === "ontimeout"){
|
|
6579
|
+
// ontimeout
|
|
6580
|
+
}
|
|
6581
|
+
* @example
|
|
6582
|
+
// 也可以先配置全局参数
|
|
6583
|
+
let httpx = new Utils.Httpx(GM_xmlhttpRequest);
|
|
6584
|
+
httpx.config({
|
|
6585
|
+
timeout: 5000,
|
|
6586
|
+
async: false,
|
|
6587
|
+
responseType: "html",
|
|
6588
|
+
redirect: "follow",
|
|
6589
|
+
})
|
|
6590
|
+
// 优先级为 默认details < 全局details < 单独的details
|
|
6591
|
+
*/
|
|
6581
6592
|
Httpx = Httpx;
|
|
6582
6593
|
/**
|
|
6583
|
-
|
|
6584
|
-
|
|
6585
|
-
|
|
6586
|
-
|
|
6587
|
-
|
|
6588
|
-
|
|
6589
|
-
|
|
6590
|
-
|
|
6591
|
-
|
|
6592
|
-
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
|
|
6596
|
-
|
|
6597
|
-
|
|
6598
|
-
|
|
6599
|
-
|
|
6600
|
-
|
|
6601
|
-
|
|
6602
|
-
|
|
6603
|
-
|
|
6604
|
-
|
|
6605
|
-
|
|
6606
|
-
|
|
6594
|
+
* 浏览器端的indexedDB操作封装
|
|
6595
|
+
* @example
|
|
6596
|
+
let db = new Utils.indexedDB('web_DB', 'nav_text')
|
|
6597
|
+
let data = {name:'管理员', roleId: 1, type: 1};
|
|
6598
|
+
db.save('list',data).then((resolve)=>{
|
|
6599
|
+
console.log(resolve,'存储成功')
|
|
6600
|
+
})
|
|
6601
|
+
|
|
6602
|
+
db.get('list').then((resolve)=>{
|
|
6603
|
+
console.log(resolve,'查询成功')
|
|
6604
|
+
})
|
|
6605
|
+
|
|
6606
|
+
db.getPaging('list',20,10).then((resolve)=>{
|
|
6607
|
+
console.log(resolve,'查询分页偏移第20,一共10行成功');
|
|
6608
|
+
})
|
|
6609
|
+
|
|
6610
|
+
db.delete('list').then(resolve=>{
|
|
6611
|
+
console.log(resolve,'删除成功---->>>>>>name')
|
|
6612
|
+
})
|
|
6613
|
+
|
|
6614
|
+
db.deleteAll().then(resolve=>{
|
|
6615
|
+
console.log(resolve,'清除数据库---->>>>>>name')
|
|
6616
|
+
})
|
|
6617
|
+
**/
|
|
6607
6618
|
indexedDB = indexedDB;
|
|
6608
6619
|
isNativeFunc(target) {
|
|
6609
6620
|
return Boolean(target.toString().match(/^function .*\(\) { \[native code\] }$/));
|
|
6610
6621
|
}
|
|
6611
6622
|
isNearBottom(...args) {
|
|
6612
6623
|
let nearBottomHeight = 50;
|
|
6613
|
-
|
|
6624
|
+
const checkWindow = () => {
|
|
6614
6625
|
// 已滚动的距离
|
|
6615
|
-
|
|
6626
|
+
const scrollTop = this.windowApi.window.pageYOffset || this.windowApi.document.documentElement.scrollTop;
|
|
6616
6627
|
// 视窗高度
|
|
6617
|
-
|
|
6628
|
+
const viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
|
|
6618
6629
|
// 最大滚动距离
|
|
6619
|
-
|
|
6630
|
+
const maxScrollHeight = this.windowApi.document.documentElement.scrollHeight - nearBottomHeight;
|
|
6620
6631
|
return scrollTop + viewportHeight >= maxScrollHeight;
|
|
6621
6632
|
};
|
|
6622
|
-
|
|
6633
|
+
const checkNode = ($ele) => {
|
|
6623
6634
|
// 已滚动的距离
|
|
6624
|
-
|
|
6635
|
+
const scrollTop = $ele.scrollTop;
|
|
6625
6636
|
// 视窗高度
|
|
6626
|
-
|
|
6637
|
+
const viewportHeight = $ele.clientHeight;
|
|
6627
6638
|
// 最大滚动距离
|
|
6628
|
-
|
|
6639
|
+
const maxScrollHeight = $ele.scrollHeight - viewportHeight - nearBottomHeight;
|
|
6629
6640
|
return scrollTop >= maxScrollHeight;
|
|
6630
6641
|
};
|
|
6631
|
-
|
|
6642
|
+
const firstArg = args[0];
|
|
6632
6643
|
if (args.length === 0 || typeof args[0] === "number") {
|
|
6633
6644
|
// nearBottomHeight
|
|
6634
6645
|
//
|
|
@@ -6643,7 +6654,7 @@ var Utils = (function () {
|
|
|
6643
6654
|
return checkNode(args[0]);
|
|
6644
6655
|
}
|
|
6645
6656
|
else {
|
|
6646
|
-
throw new TypeError(
|
|
6657
|
+
throw new TypeError(`参数1类型错误${typeof firstArg}`);
|
|
6647
6658
|
}
|
|
6648
6659
|
}
|
|
6649
6660
|
/**
|
|
@@ -6673,7 +6684,7 @@ var Utils = (function () {
|
|
|
6673
6684
|
}
|
|
6674
6685
|
if (typeof target === "object") {
|
|
6675
6686
|
/* 也有种可能,这个jQuery对象是1.8.3版本的,页面中的jQuery是3.4.1版本的 */
|
|
6676
|
-
|
|
6687
|
+
const jQueryProps = [
|
|
6677
6688
|
"add",
|
|
6678
6689
|
"addBack",
|
|
6679
6690
|
"addClass",
|
|
@@ -6857,50 +6868,50 @@ var Utils = (function () {
|
|
|
6857
6868
|
*/
|
|
6858
6869
|
isNotNull = commonUtil.isNotNull.bind(commonUtil);
|
|
6859
6870
|
/**
|
|
6860
|
-
|
|
6861
|
-
|
|
6862
|
-
|
|
6863
|
-
|
|
6864
|
-
|
|
6865
|
-
|
|
6866
|
-
|
|
6867
|
-
|
|
6868
|
-
|
|
6869
|
-
|
|
6870
|
-
|
|
6871
|
-
|
|
6872
|
-
|
|
6873
|
-
|
|
6874
|
-
|
|
6875
|
-
|
|
6876
|
-
|
|
6877
|
-
|
|
6878
|
-
|
|
6879
|
-
|
|
6880
|
-
|
|
6881
|
-
|
|
6882
|
-
|
|
6883
|
-
|
|
6884
|
-
|
|
6885
|
-
|
|
6886
|
-
|
|
6887
|
-
|
|
6888
|
-
|
|
6889
|
-
|
|
6890
|
-
|
|
6891
|
-
|
|
6892
|
-
|
|
6893
|
-
|
|
6894
|
-
|
|
6895
|
-
|
|
6896
|
-
|
|
6897
|
-
|
|
6898
|
-
|
|
6899
|
-
|
|
6900
|
-
|
|
6901
|
-
|
|
6902
|
-
|
|
6903
|
-
|
|
6871
|
+
* 判断对象或数据是否为空
|
|
6872
|
+
* + `String`判空的值,如 ""、"null"、"undefined"、" "
|
|
6873
|
+
* + `Number`判空的值,如 0
|
|
6874
|
+
* + `Object`判空的值,如 {}、null、undefined
|
|
6875
|
+
* + `Array`(存在属性Symbol.iterator)判空的值,如 []
|
|
6876
|
+
* + `Boolean`判空的值,如false
|
|
6877
|
+
* + `Function`判空的值,如()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){}
|
|
6878
|
+
* @returns
|
|
6879
|
+
* + true 为空
|
|
6880
|
+
* + false 不为空
|
|
6881
|
+
* @example
|
|
6882
|
+
Utils.isNull({});
|
|
6883
|
+
> true
|
|
6884
|
+
* @example
|
|
6885
|
+
Utils.isNull([]);
|
|
6886
|
+
> true
|
|
6887
|
+
* @example
|
|
6888
|
+
Utils.isNull(" ");
|
|
6889
|
+
> true
|
|
6890
|
+
* @example
|
|
6891
|
+
Utils.isNull(function(){});
|
|
6892
|
+
> true
|
|
6893
|
+
* @example
|
|
6894
|
+
Utils.isNull(()=>{}));
|
|
6895
|
+
> true
|
|
6896
|
+
* @example
|
|
6897
|
+
Utils.isNull("undefined");
|
|
6898
|
+
> true
|
|
6899
|
+
* @example
|
|
6900
|
+
Utils.isNull("null");
|
|
6901
|
+
> true
|
|
6902
|
+
* @example
|
|
6903
|
+
Utils.isNull(" ", false);
|
|
6904
|
+
> true
|
|
6905
|
+
* @example
|
|
6906
|
+
Utils.isNull([1],[]);
|
|
6907
|
+
> false
|
|
6908
|
+
* @example
|
|
6909
|
+
Utils.isNull([],[1]);
|
|
6910
|
+
> false
|
|
6911
|
+
* @example
|
|
6912
|
+
Utils.isNull(false,[123]);
|
|
6913
|
+
> false
|
|
6914
|
+
**/
|
|
6904
6915
|
isNull = commonUtil.isNull.bind(commonUtil);
|
|
6905
6916
|
isThemeDark() {
|
|
6906
6917
|
return this.windowApi.globalThis.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
@@ -6929,15 +6940,15 @@ var Utils = (function () {
|
|
|
6929
6940
|
}
|
|
6930
6941
|
let result = true;
|
|
6931
6942
|
for (const domItem of needCheckDomList) {
|
|
6932
|
-
|
|
6943
|
+
const domDisplay = this.windowApi.window.getComputedStyle(domItem);
|
|
6933
6944
|
if (domDisplay.display === "none") {
|
|
6934
6945
|
result = false;
|
|
6935
6946
|
}
|
|
6936
6947
|
else {
|
|
6937
|
-
|
|
6948
|
+
const domClientRect = domItem.getBoundingClientRect();
|
|
6938
6949
|
if (inView) {
|
|
6939
|
-
|
|
6940
|
-
|
|
6950
|
+
const viewportWidth = this.windowApi.window.innerWidth || this.windowApi.document.documentElement.clientWidth;
|
|
6951
|
+
const viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
|
|
6941
6952
|
result = !(domClientRect.right < 0 ||
|
|
6942
6953
|
domClientRect.left > viewportWidth ||
|
|
6943
6954
|
domClientRect.bottom < 0 ||
|
|
@@ -6956,11 +6967,11 @@ var Utils = (function () {
|
|
|
6956
6967
|
}
|
|
6957
6968
|
isWebView_Via() {
|
|
6958
6969
|
let result = true;
|
|
6959
|
-
|
|
6970
|
+
const UtilsContext = this;
|
|
6960
6971
|
if (typeof this.windowApi.top.window.via === "object") {
|
|
6961
6972
|
for (const key in Object.values(this.windowApi.top.window.via)) {
|
|
6962
6973
|
if (Reflect.has(this.windowApi.top.window.via, key)) {
|
|
6963
|
-
|
|
6974
|
+
const objValueFunc = this.windowApi.top.window.via[key];
|
|
6964
6975
|
if (typeof objValueFunc === "function" && UtilsContext.isNativeFunc(objValueFunc)) {
|
|
6965
6976
|
result = true;
|
|
6966
6977
|
}
|
|
@@ -6978,11 +6989,11 @@ var Utils = (function () {
|
|
|
6978
6989
|
}
|
|
6979
6990
|
isWebView_X() {
|
|
6980
6991
|
let result = true;
|
|
6981
|
-
|
|
6992
|
+
const UtilsContext = this;
|
|
6982
6993
|
if (typeof this.windowApi.top.window.mbrowser === "object") {
|
|
6983
6994
|
for (const key in Object.values(this.windowApi.top.window.mbrowser)) {
|
|
6984
6995
|
if (Reflect.has(this.windowApi.top.window.mbrowser, key)) {
|
|
6985
|
-
|
|
6996
|
+
const objValueFunc = this.windowApi.top.window.mbrowser[key];
|
|
6986
6997
|
if (typeof objValueFunc === "function" && UtilsContext.isNativeFunc(objValueFunc)) {
|
|
6987
6998
|
result = true;
|
|
6988
6999
|
}
|
|
@@ -7009,46 +7020,46 @@ var Utils = (function () {
|
|
|
7009
7020
|
return result;
|
|
7010
7021
|
}
|
|
7011
7022
|
/**
|
|
7012
|
-
|
|
7013
|
-
|
|
7014
|
-
|
|
7015
|
-
|
|
7016
|
-
|
|
7017
|
-
|
|
7018
|
-
|
|
7019
|
-
|
|
7020
|
-
|
|
7021
|
-
|
|
7023
|
+
* 自动锁对象,用于循环判断运行的函数,在循环外new后使用,注意,如果函数内部存在异步操作,需要使用await
|
|
7024
|
+
* @example
|
|
7025
|
+
let lock = new Utils.LockFunction(()=>{console.log(1)}))
|
|
7026
|
+
lock.run();
|
|
7027
|
+
> 1
|
|
7028
|
+
* @example
|
|
7029
|
+
let lock = new Utils.LockFunction(()=>{console.log(1)}),true) -- 异步操作
|
|
7030
|
+
await lock.run();
|
|
7031
|
+
> 1
|
|
7032
|
+
**/
|
|
7022
7033
|
LockFunction = LockFunction;
|
|
7023
7034
|
/**
|
|
7024
|
-
|
|
7025
|
-
|
|
7026
|
-
|
|
7027
|
-
|
|
7028
|
-
|
|
7029
|
-
|
|
7030
|
-
|
|
7031
|
-
|
|
7032
|
-
|
|
7033
|
-
|
|
7034
|
-
|
|
7035
|
-
|
|
7036
|
-
|
|
7037
|
-
|
|
7038
|
-
|
|
7039
|
-
|
|
7040
|
-
|
|
7041
|
-
|
|
7042
|
-
|
|
7043
|
-
|
|
7044
|
-
|
|
7045
|
-
|
|
7046
|
-
|
|
7047
|
-
|
|
7048
|
-
|
|
7049
|
-
|
|
7050
|
-
|
|
7051
|
-
|
|
7035
|
+
* 日志对象
|
|
7036
|
+
* @param _GM_info_ 油猴管理器的API GM_info,或者是一个对象,如{"script":{name:"Utils.Log"}}
|
|
7037
|
+
* @example
|
|
7038
|
+
let log = new Utils.Log(GM_info);
|
|
7039
|
+
log.info("普通输出");
|
|
7040
|
+
> 普通输出
|
|
7041
|
+
|
|
7042
|
+
log.success("成功输出");
|
|
7043
|
+
> 成功输出
|
|
7044
|
+
|
|
7045
|
+
log.error("错误输出");
|
|
7046
|
+
> 错误输出
|
|
7047
|
+
|
|
7048
|
+
log.warn("警告输出");
|
|
7049
|
+
> 警告输出
|
|
7050
|
+
|
|
7051
|
+
log.tag = "自定义tag信息";
|
|
7052
|
+
log.info("自定义info的颜色","#e0e0e0");
|
|
7053
|
+
> 自定义info的颜色
|
|
7054
|
+
|
|
7055
|
+
log.config({
|
|
7056
|
+
successColor: "#31dc02",
|
|
7057
|
+
errorColor: "#e02d2d",
|
|
7058
|
+
infoColor: "black",
|
|
7059
|
+
})
|
|
7060
|
+
log.success("颜色为#31dc02");
|
|
7061
|
+
> 颜色为#31dc02
|
|
7062
|
+
*/
|
|
7052
7063
|
Log = Log;
|
|
7053
7064
|
mergeArrayToString(data, handleFunc) {
|
|
7054
7065
|
if (!(data instanceof Array)) {
|
|
@@ -7077,8 +7088,8 @@ var Utils = (function () {
|
|
|
7077
7088
|
return content;
|
|
7078
7089
|
}
|
|
7079
7090
|
mutationObserver(target, observer_config) {
|
|
7080
|
-
|
|
7081
|
-
|
|
7091
|
+
const UtilsContext = this;
|
|
7092
|
+
const default_obverser_config = {
|
|
7082
7093
|
/* 监听到元素有反馈,需执行的函数 */
|
|
7083
7094
|
callback: () => { },
|
|
7084
7095
|
config: {
|
|
@@ -7120,11 +7131,11 @@ var Utils = (function () {
|
|
|
7120
7131
|
immediate: false,
|
|
7121
7132
|
};
|
|
7122
7133
|
observer_config = UtilsContext.assign(default_obverser_config, observer_config);
|
|
7123
|
-
|
|
7134
|
+
const windowMutationObserver = this.windowApi.window.MutationObserver ||
|
|
7124
7135
|
this.windowApi.window.webkitMutationObserver ||
|
|
7125
7136
|
this.windowApi.window.MozMutationObserver;
|
|
7126
7137
|
// 观察者对象
|
|
7127
|
-
|
|
7138
|
+
const mutationObserver = new windowMutationObserver(function (mutations, observer) {
|
|
7128
7139
|
if (typeof observer_config.callback === "function") {
|
|
7129
7140
|
observer_config.callback(mutations, observer);
|
|
7130
7141
|
}
|
|
@@ -7137,7 +7148,7 @@ var Utils = (function () {
|
|
|
7137
7148
|
}
|
|
7138
7149
|
else if (UtilsContext.isJQuery(target)) {
|
|
7139
7150
|
/* 传入的参数是jQuery对象 */
|
|
7140
|
-
target.each((
|
|
7151
|
+
target.each((_, item) => {
|
|
7141
7152
|
mutationObserver.observe(item, observer_config.config);
|
|
7142
7153
|
});
|
|
7143
7154
|
}
|
|
@@ -7175,7 +7186,7 @@ var Utils = (function () {
|
|
|
7175
7186
|
threshold: [0.01, 0.99],
|
|
7176
7187
|
};
|
|
7177
7188
|
defaultOptions = this.assign(defaultOptions, options || {});
|
|
7178
|
-
|
|
7189
|
+
const intersectionObserver = new IntersectionObserver((entries, observer) => {
|
|
7179
7190
|
if (entries[0].isIntersecting) {
|
|
7180
7191
|
if (typeof callback === "function") {
|
|
7181
7192
|
callback(entries, observer);
|
|
@@ -7205,7 +7216,7 @@ var Utils = (function () {
|
|
|
7205
7216
|
return utils;
|
|
7206
7217
|
}
|
|
7207
7218
|
noConflictFunc(needReleaseObject, needReleaseName, functionNameList = [], release = true) {
|
|
7208
|
-
|
|
7219
|
+
const UtilsContext = this;
|
|
7209
7220
|
if (typeof needReleaseObject !== "object") {
|
|
7210
7221
|
throw new Error("Utils.noConflictFunc 参数 needReleaseObject 必须为 object 类型");
|
|
7211
7222
|
}
|
|
@@ -7215,7 +7226,7 @@ var Utils = (function () {
|
|
|
7215
7226
|
if (!Array.isArray(functionNameList)) {
|
|
7216
7227
|
throw new Error("Utils.noConflictFunc 参数 functionNameList 必须为 Array 类型");
|
|
7217
7228
|
}
|
|
7218
|
-
|
|
7229
|
+
const needReleaseKey = `__${needReleaseName}`;
|
|
7219
7230
|
/**
|
|
7220
7231
|
* 释放所有
|
|
7221
7232
|
*/
|
|
@@ -7303,7 +7314,9 @@ var Utils = (function () {
|
|
|
7303
7314
|
if (typeof dataUri !== "string") {
|
|
7304
7315
|
throw new Error("Utils.parseBase64ToBlob 参数 dataUri 必须为 string 类型");
|
|
7305
7316
|
}
|
|
7306
|
-
|
|
7317
|
+
const dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]);
|
|
7318
|
+
let dataUriLength = dataUriBase64Str.length;
|
|
7319
|
+
const u8arr = new Uint8Array(dataUriLength);
|
|
7307
7320
|
while (dataUriLength--) {
|
|
7308
7321
|
u8arr[dataUriLength] = dataUriBase64Str.charCodeAt(dataUriLength);
|
|
7309
7322
|
}
|
|
@@ -7318,7 +7331,9 @@ var Utils = (function () {
|
|
|
7318
7331
|
if (typeof fileName !== "string") {
|
|
7319
7332
|
throw new Error("Utils.parseBase64ToFile 参数 fileName 必须为 string 类型");
|
|
7320
7333
|
}
|
|
7321
|
-
|
|
7334
|
+
const dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]);
|
|
7335
|
+
let dataUriLength = dataUriBase64Str.length;
|
|
7336
|
+
const u8arr = new Uint8Array(dataUriLength);
|
|
7322
7337
|
while (dataUriLength--) {
|
|
7323
7338
|
u8arr[dataUriLength] = dataUriBase64Str.charCodeAt(dataUriLength);
|
|
7324
7339
|
}
|
|
@@ -7352,15 +7367,15 @@ var Utils = (function () {
|
|
|
7352
7367
|
}
|
|
7353
7368
|
parseCDATA(text = "") {
|
|
7354
7369
|
let result = "";
|
|
7355
|
-
|
|
7356
|
-
|
|
7370
|
+
const cdataRegexp = /<!\[CDATA\[([\s\S]*)\]\]>/;
|
|
7371
|
+
const cdataMatch = cdataRegexp.exec(text.trim());
|
|
7357
7372
|
if (cdataMatch && cdataMatch.length > 1) {
|
|
7358
7373
|
result = cdataMatch[cdataMatch.length - 1];
|
|
7359
7374
|
}
|
|
7360
7375
|
return result;
|
|
7361
7376
|
}
|
|
7362
7377
|
async parseFileToBase64(fileObj) {
|
|
7363
|
-
|
|
7378
|
+
const reader = new FileReader();
|
|
7364
7379
|
reader.readAsDataURL(fileObj);
|
|
7365
7380
|
return new Promise((resolve) => {
|
|
7366
7381
|
reader.onload = function (event) {
|
|
@@ -7369,14 +7384,14 @@ var Utils = (function () {
|
|
|
7369
7384
|
});
|
|
7370
7385
|
}
|
|
7371
7386
|
parseFromString(text, mimeType = "text/html") {
|
|
7372
|
-
|
|
7387
|
+
const parser = new DOMParser();
|
|
7373
7388
|
return parser.parseFromString(text, mimeType);
|
|
7374
7389
|
}
|
|
7375
7390
|
parseStringToRegExpString(text) {
|
|
7376
7391
|
if (typeof text !== "string") {
|
|
7377
7392
|
throw new TypeError("string必须是字符串");
|
|
7378
7393
|
}
|
|
7379
|
-
|
|
7394
|
+
const regString = text.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
|
|
7380
7395
|
return regString;
|
|
7381
7396
|
}
|
|
7382
7397
|
preventEvent(element, eventNameList = [], capture) {
|
|
@@ -7391,6 +7406,7 @@ var Utils = (function () {
|
|
|
7391
7406
|
}
|
|
7392
7407
|
if (arguments.length === 1) {
|
|
7393
7408
|
/* 直接阻止事件 */
|
|
7409
|
+
// eslint-disable-next-line prefer-rest-params
|
|
7394
7410
|
return stopEvent(arguments[0]);
|
|
7395
7411
|
}
|
|
7396
7412
|
else {
|
|
@@ -7406,11 +7422,11 @@ var Utils = (function () {
|
|
|
7406
7422
|
}
|
|
7407
7423
|
}
|
|
7408
7424
|
/**
|
|
7409
|
-
|
|
7410
|
-
|
|
7411
|
-
|
|
7412
|
-
|
|
7413
|
-
|
|
7425
|
+
* 在canvas元素节点上绘制进度圆圈
|
|
7426
|
+
* @example
|
|
7427
|
+
let progress = new Utils.Process({canvasNode:document.querySelector("canvas")});
|
|
7428
|
+
progress.draw();
|
|
7429
|
+
* **/
|
|
7414
7430
|
Progress = Progress;
|
|
7415
7431
|
registerTrustClickEvent(isTrustValue = true, filter) {
|
|
7416
7432
|
function trustEvent(event) {
|
|
@@ -7432,8 +7448,8 @@ var Utils = (function () {
|
|
|
7432
7448
|
}
|
|
7433
7449
|
const originalListener = EventTarget.prototype.addEventListener;
|
|
7434
7450
|
EventTarget.prototype.addEventListener = function (...args) {
|
|
7435
|
-
|
|
7436
|
-
|
|
7451
|
+
const type = args[0];
|
|
7452
|
+
const callback = args[1];
|
|
7437
7453
|
// let options = args[2];
|
|
7438
7454
|
if (filter(type)) {
|
|
7439
7455
|
if (typeof callback === "function") {
|
|
@@ -7442,7 +7458,7 @@ var Utils = (function () {
|
|
|
7442
7458
|
};
|
|
7443
7459
|
}
|
|
7444
7460
|
else if (typeof callback === "object" && "handleEvent" in callback) {
|
|
7445
|
-
|
|
7461
|
+
const oldHandleEvent = callback["handleEvent"];
|
|
7446
7462
|
args[1]["handleEvent"] = function (event) {
|
|
7447
7463
|
if (event == null) {
|
|
7448
7464
|
return;
|
|
@@ -7453,7 +7469,7 @@ var Utils = (function () {
|
|
|
7453
7469
|
event instanceof Proxy;
|
|
7454
7470
|
oldHandleEvent.call(this, trustEvent(event));
|
|
7455
7471
|
}
|
|
7456
|
-
catch
|
|
7472
|
+
catch {
|
|
7457
7473
|
Reflect.set(event, "isTrusted", isTrustValue);
|
|
7458
7474
|
}
|
|
7459
7475
|
};
|
|
@@ -7476,7 +7492,7 @@ var Utils = (function () {
|
|
|
7476
7492
|
return isNegative ? -reversedNum : reversedNum;
|
|
7477
7493
|
}
|
|
7478
7494
|
selectElementText(element, childTextNode, startIndex, endIndex) {
|
|
7479
|
-
|
|
7495
|
+
const range = this.windowApi.document.createRange();
|
|
7480
7496
|
range.selectNodeContents(element);
|
|
7481
7497
|
if (childTextNode) {
|
|
7482
7498
|
if (childTextNode.nodeType !== Node.TEXT_NODE) {
|
|
@@ -7487,7 +7503,7 @@ var Utils = (function () {
|
|
|
7487
7503
|
range.setEnd(childTextNode, endIndex);
|
|
7488
7504
|
}
|
|
7489
7505
|
}
|
|
7490
|
-
|
|
7506
|
+
const selection = this.windowApi.globalThis.getSelection();
|
|
7491
7507
|
if (selection) {
|
|
7492
7508
|
selection.removeAllRanges();
|
|
7493
7509
|
selection.addRange(range);
|
|
@@ -7515,7 +7531,7 @@ var Utils = (function () {
|
|
|
7515
7531
|
else {
|
|
7516
7532
|
textType = "text/plain";
|
|
7517
7533
|
}
|
|
7518
|
-
|
|
7534
|
+
const UtilsContext = this;
|
|
7519
7535
|
class UtilsClipboard {
|
|
7520
7536
|
#resolve;
|
|
7521
7537
|
#copyData;
|
|
@@ -7527,7 +7543,7 @@ var Utils = (function () {
|
|
|
7527
7543
|
}
|
|
7528
7544
|
async init() {
|
|
7529
7545
|
let copyStatus = false;
|
|
7530
|
-
|
|
7546
|
+
const requestPermissionStatus = await this.requestClipboardPermission();
|
|
7531
7547
|
console.log(requestPermissionStatus);
|
|
7532
7548
|
if (this.hasClipboard() && (this.hasClipboardWrite() || this.hasClipboardWriteText())) {
|
|
7533
7549
|
try {
|
|
@@ -7566,7 +7582,7 @@ var Utils = (function () {
|
|
|
7566
7582
|
*/
|
|
7567
7583
|
copyTextByTextArea() {
|
|
7568
7584
|
try {
|
|
7569
|
-
|
|
7585
|
+
const copyElement = UtilsContext.windowApi.document.createElement("textarea");
|
|
7570
7586
|
copyElement.value = this.#copyData;
|
|
7571
7587
|
copyElement.setAttribute("type", "text");
|
|
7572
7588
|
copyElement.setAttribute("style", "opacity:0;position:absolute;");
|
|
@@ -7586,20 +7602,17 @@ var Utils = (function () {
|
|
|
7586
7602
|
* 申请剪贴板权限
|
|
7587
7603
|
*/
|
|
7588
7604
|
requestClipboardPermission() {
|
|
7589
|
-
return new Promise((resolve
|
|
7605
|
+
return new Promise((resolve) => {
|
|
7590
7606
|
if (navigator.permissions && navigator.permissions.query) {
|
|
7591
7607
|
navigator.permissions
|
|
7592
7608
|
.query({
|
|
7593
7609
|
name: "clipboard-write",
|
|
7594
7610
|
})
|
|
7595
|
-
.then((
|
|
7611
|
+
.then(() => {
|
|
7596
7612
|
resolve(true);
|
|
7597
7613
|
})
|
|
7598
7614
|
.catch((error) => {
|
|
7599
|
-
console.error([
|
|
7600
|
-
"申请剪贴板权限失败,尝试直接写入👉",
|
|
7601
|
-
error.message ?? error.name ?? error.stack,
|
|
7602
|
-
]);
|
|
7615
|
+
console.error(["申请剪贴板权限失败,尝试直接写入👉", error.message ?? error.name ?? error.stack]);
|
|
7603
7616
|
resolve(false);
|
|
7604
7617
|
});
|
|
7605
7618
|
}
|
|
@@ -7626,7 +7639,7 @@ var Utils = (function () {
|
|
|
7626
7639
|
}
|
|
7627
7640
|
else {
|
|
7628
7641
|
/* 可复制对象 */
|
|
7629
|
-
|
|
7642
|
+
const textBlob = new Blob([this.#copyData], {
|
|
7630
7643
|
type: this.#copyDataType,
|
|
7631
7644
|
});
|
|
7632
7645
|
navigator.clipboard
|
|
@@ -7658,7 +7671,7 @@ var Utils = (function () {
|
|
|
7658
7671
|
});
|
|
7659
7672
|
}
|
|
7660
7673
|
setTimeout(callback, delayTime = 0) {
|
|
7661
|
-
|
|
7674
|
+
const UtilsContext = this;
|
|
7662
7675
|
if (typeof callback !== "function" && typeof callback !== "string") {
|
|
7663
7676
|
throw new TypeError("Utils.setTimeout 参数 callback 必须为 function|string 类型");
|
|
7664
7677
|
}
|
|
@@ -7672,7 +7685,7 @@ var Utils = (function () {
|
|
|
7672
7685
|
});
|
|
7673
7686
|
}
|
|
7674
7687
|
sleep(delayTime = 0) {
|
|
7675
|
-
|
|
7688
|
+
const UtilsContext = this;
|
|
7676
7689
|
if (typeof delayTime !== "number") {
|
|
7677
7690
|
throw new Error("Utils.sleep 参数 delayTime 必须为 number 类型");
|
|
7678
7691
|
}
|
|
@@ -7683,18 +7696,18 @@ var Utils = (function () {
|
|
|
7683
7696
|
});
|
|
7684
7697
|
}
|
|
7685
7698
|
dragSlider(selector, offsetX = this.windowApi.window.innerWidth) {
|
|
7686
|
-
|
|
7699
|
+
const UtilsContext = this;
|
|
7687
7700
|
function initMouseEvent(eventName, offSetX, offSetY) {
|
|
7688
|
-
|
|
7689
|
-
|
|
7701
|
+
const win = typeof unsafeWindow === "undefined" ? globalThis : unsafeWindow;
|
|
7702
|
+
const mouseEvent = UtilsContext.windowApi.document.createEvent("MouseEvents");
|
|
7690
7703
|
mouseEvent.initMouseEvent(eventName, true, true, win, 0, offSetX, offSetY, offSetX, offSetY, false, false, false, false, 0, null);
|
|
7691
7704
|
return mouseEvent;
|
|
7692
7705
|
}
|
|
7693
|
-
|
|
7706
|
+
const sliderElement = typeof selector === "string" ? domUtils.selector(selector) : selector;
|
|
7694
7707
|
if (!(sliderElement instanceof Node) || !(sliderElement instanceof Element)) {
|
|
7695
7708
|
throw new Error("Utils.dragSlider 参数selector 必须为Node/Element类型");
|
|
7696
7709
|
}
|
|
7697
|
-
|
|
7710
|
+
const rect = sliderElement.getBoundingClientRect(), x0 = rect.x || rect.left, y0 = rect.y || rect.top, x1 = x0 + offsetX, y1 = y0;
|
|
7698
7711
|
sliderElement.dispatchEvent(initMouseEvent("mousedown", x0, y0));
|
|
7699
7712
|
sliderElement.dispatchEvent(initMouseEvent("mousemove", x1, y1));
|
|
7700
7713
|
sliderElement.dispatchEvent(initMouseEvent("mouseleave", x1, y1));
|
|
@@ -7722,34 +7735,34 @@ var Utils = (function () {
|
|
|
7722
7735
|
console.error(err);
|
|
7723
7736
|
}
|
|
7724
7737
|
}
|
|
7725
|
-
exitFullScreen(
|
|
7726
|
-
if (
|
|
7727
|
-
return
|
|
7738
|
+
exitFullScreen($el = this.windowApi.document.documentElement) {
|
|
7739
|
+
if ($el.exitFullscreen) {
|
|
7740
|
+
return $el.exitFullscreen();
|
|
7728
7741
|
}
|
|
7729
|
-
else if (
|
|
7730
|
-
return
|
|
7742
|
+
else if ($el.msExitFullscreen) {
|
|
7743
|
+
return $el.msExitFullscreen();
|
|
7731
7744
|
}
|
|
7732
|
-
else if (
|
|
7733
|
-
return
|
|
7745
|
+
else if ($el.mozCancelFullScreen) {
|
|
7746
|
+
return $el.mozCancelFullScreen();
|
|
7734
7747
|
}
|
|
7735
|
-
else if (
|
|
7736
|
-
return
|
|
7748
|
+
else if ($el.webkitCancelFullScreen) {
|
|
7749
|
+
return $el.webkitCancelFullScreen();
|
|
7737
7750
|
}
|
|
7738
7751
|
else {
|
|
7739
|
-
return new Promise((
|
|
7752
|
+
return new Promise((_, reject) => {
|
|
7740
7753
|
reject(new TypeError("该浏览器不支持全屏API"));
|
|
7741
7754
|
});
|
|
7742
7755
|
}
|
|
7743
7756
|
}
|
|
7744
7757
|
sortListByProperty(data, getPropertyValueFunc, sortByDesc = true) {
|
|
7745
|
-
|
|
7758
|
+
const UtilsContext = this;
|
|
7746
7759
|
if (typeof getPropertyValueFunc !== "function" && typeof getPropertyValueFunc !== "string") {
|
|
7747
7760
|
throw new Error("Utils.sortListByProperty 参数 getPropertyValueFunc 必须为 function|string 类型");
|
|
7748
7761
|
}
|
|
7749
7762
|
if (typeof sortByDesc !== "boolean") {
|
|
7750
7763
|
throw new Error("Utils.sortListByProperty 参数 sortByDesc 必须为 boolean 类型");
|
|
7751
7764
|
}
|
|
7752
|
-
|
|
7765
|
+
const getObjValue = function (obj) {
|
|
7753
7766
|
return typeof getPropertyValueFunc === "string" ? obj[getPropertyValueFunc] : getPropertyValueFunc(obj);
|
|
7754
7767
|
};
|
|
7755
7768
|
/**
|
|
@@ -7758,9 +7771,9 @@ var Utils = (function () {
|
|
|
7758
7771
|
* @param {any} before_obj
|
|
7759
7772
|
* @returns
|
|
7760
7773
|
*/
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
|
|
7774
|
+
const sortFunc = function (after_obj, before_obj) {
|
|
7775
|
+
const beforeValue = getObjValue(before_obj); /* 前 */
|
|
7776
|
+
const afterValue = getObjValue(after_obj); /* 后 */
|
|
7764
7777
|
if (sortByDesc) {
|
|
7765
7778
|
if (afterValue > beforeValue) {
|
|
7766
7779
|
return -1;
|
|
@@ -7789,19 +7802,18 @@ var Utils = (function () {
|
|
|
7789
7802
|
* @param nodeList 元素列表
|
|
7790
7803
|
* @param getNodeListFunc 获取元素列表的函数
|
|
7791
7804
|
*/
|
|
7792
|
-
|
|
7793
|
-
|
|
7805
|
+
const sortNodeFunc = function (nodeList, getNodeListFunc) {
|
|
7806
|
+
const nodeListLength = nodeList.length;
|
|
7794
7807
|
for (let i = 0; i < nodeListLength - 1; i++) {
|
|
7795
7808
|
for (let j = 0; j < nodeListLength - 1 - i; j++) {
|
|
7796
|
-
|
|
7797
|
-
|
|
7798
|
-
|
|
7799
|
-
|
|
7800
|
-
if ((sortByDesc == true && beforeValue < afterValue) ||
|
|
7801
|
-
(sortByDesc == false && beforeValue > afterValue)) {
|
|
7809
|
+
const beforeNode = nodeList[j];
|
|
7810
|
+
const afterNode = nodeList[j + 1];
|
|
7811
|
+
const beforeValue = getObjValue(beforeNode); /* 前 */
|
|
7812
|
+
const afterValue = getObjValue(afterNode); /* 后 */
|
|
7813
|
+
if ((sortByDesc == true && beforeValue < afterValue) || (sortByDesc == false && beforeValue > afterValue)) {
|
|
7802
7814
|
/* 升序/降序 */
|
|
7803
7815
|
/* 相邻元素两两对比 */
|
|
7804
|
-
|
|
7816
|
+
const temp = beforeNode.nextElementSibling;
|
|
7805
7817
|
afterNode.after(beforeNode);
|
|
7806
7818
|
if (temp == null) {
|
|
7807
7819
|
/* 如果为空,那么是最后一个元素,使用append */
|
|
@@ -7859,7 +7871,7 @@ var Utils = (function () {
|
|
|
7859
7871
|
return newTargetString;
|
|
7860
7872
|
}
|
|
7861
7873
|
startsWith(target, searchString, position = 0) {
|
|
7862
|
-
|
|
7874
|
+
const UtilsContext = this;
|
|
7863
7875
|
if (position > target.length) {
|
|
7864
7876
|
/* 超出目标字符串的长度 */
|
|
7865
7877
|
return false;
|
|
@@ -7903,7 +7915,7 @@ var Utils = (function () {
|
|
|
7903
7915
|
*/
|
|
7904
7916
|
toJSON = commonUtil.toJSON.bind(commonUtil);
|
|
7905
7917
|
toSearchParamsStr(obj, addPrefix) {
|
|
7906
|
-
|
|
7918
|
+
const UtilsContext = this;
|
|
7907
7919
|
let searhParamsStr = "";
|
|
7908
7920
|
if (Array.isArray(obj)) {
|
|
7909
7921
|
obj.forEach((item) => {
|
|
@@ -7911,7 +7923,7 @@ var Utils = (function () {
|
|
|
7911
7923
|
searhParamsStr += UtilsContext.toSearchParamsStr(item);
|
|
7912
7924
|
}
|
|
7913
7925
|
else {
|
|
7914
|
-
searhParamsStr +=
|
|
7926
|
+
searhParamsStr += `&${UtilsContext.toSearchParamsStr(item)}`;
|
|
7915
7927
|
}
|
|
7916
7928
|
});
|
|
7917
7929
|
}
|
|
@@ -7919,7 +7931,7 @@ var Utils = (function () {
|
|
|
7919
7931
|
searhParamsStr = new URLSearchParams(Object.entries(obj)).toString();
|
|
7920
7932
|
}
|
|
7921
7933
|
if (addPrefix && !searhParamsStr.startsWith("?")) {
|
|
7922
|
-
searhParamsStr =
|
|
7934
|
+
searhParamsStr = `?${searhParamsStr}`;
|
|
7923
7935
|
}
|
|
7924
7936
|
return searhParamsStr;
|
|
7925
7937
|
}
|
|
@@ -7967,7 +7979,7 @@ var Utils = (function () {
|
|
|
7967
7979
|
}
|
|
7968
7980
|
}
|
|
7969
7981
|
waitArrayLoopToEnd(data, handleFunc) {
|
|
7970
|
-
|
|
7982
|
+
const UtilsContext = this;
|
|
7971
7983
|
if (typeof handleFunc !== "function" && typeof handleFunc !== "string") {
|
|
7972
7984
|
throw new Error("Utils.waitArrayLoopToEnd 参数 handleDataFunction 必须为 function|string 类型");
|
|
7973
7985
|
}
|
|
@@ -7977,17 +7989,17 @@ var Utils = (function () {
|
|
|
7977
7989
|
}
|
|
7978
7990
|
wait(checkFn, timeout, parent) {
|
|
7979
7991
|
const UtilsContext = this;
|
|
7980
|
-
|
|
7992
|
+
const __timeout__ = typeof timeout === "number" ? timeout : 0;
|
|
7981
7993
|
return new Promise((resolve) => {
|
|
7982
|
-
|
|
7994
|
+
const observer = UtilsContext.mutationObserver(parent || UtilsContext.windowApi.document, {
|
|
7983
7995
|
config: {
|
|
7984
7996
|
subtree: true,
|
|
7985
7997
|
childList: true,
|
|
7986
7998
|
attributes: true,
|
|
7987
7999
|
},
|
|
7988
8000
|
immediate: true,
|
|
7989
|
-
callback(
|
|
7990
|
-
|
|
8001
|
+
callback(_, __observer__) {
|
|
8002
|
+
const result = checkFn();
|
|
7991
8003
|
if (result.success) {
|
|
7992
8004
|
// 取消观察器
|
|
7993
8005
|
if (typeof __observer__?.disconnect === "function") {
|
|
@@ -8011,9 +8023,9 @@ var Utils = (function () {
|
|
|
8011
8023
|
waitNode(...args) {
|
|
8012
8024
|
// 过滤掉undefined
|
|
8013
8025
|
args = args.filter((arg) => arg !== void 0);
|
|
8014
|
-
|
|
8026
|
+
const UtilsContext = this;
|
|
8015
8027
|
// 选择器
|
|
8016
|
-
|
|
8028
|
+
const selector = args[0];
|
|
8017
8029
|
// 父元素(监听的元素)
|
|
8018
8030
|
let parent = UtilsContext.windowApi.document;
|
|
8019
8031
|
// 超时时间
|
|
@@ -8023,7 +8035,7 @@ var Utils = (function () {
|
|
|
8023
8035
|
}
|
|
8024
8036
|
if (args.length === 1) ;
|
|
8025
8037
|
else if (args.length === 2) {
|
|
8026
|
-
|
|
8038
|
+
const secondParam = args[1];
|
|
8027
8039
|
if (typeof secondParam === "number") {
|
|
8028
8040
|
// "div",10000
|
|
8029
8041
|
timeout = secondParam;
|
|
@@ -8039,9 +8051,9 @@ var Utils = (function () {
|
|
|
8039
8051
|
else if (args.length === 3) {
|
|
8040
8052
|
// "div",document,10000
|
|
8041
8053
|
// 第二个参数,parent
|
|
8042
|
-
|
|
8054
|
+
const secondParam = args[1];
|
|
8043
8055
|
// 第三个参数,timeout
|
|
8044
|
-
|
|
8056
|
+
const thirdParam = args[2];
|
|
8045
8057
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8046
8058
|
parent = secondParam;
|
|
8047
8059
|
if (typeof thirdParam === "number") {
|
|
@@ -8060,9 +8072,9 @@ var Utils = (function () {
|
|
|
8060
8072
|
}
|
|
8061
8073
|
function getNode() {
|
|
8062
8074
|
if (Array.isArray(selector)) {
|
|
8063
|
-
|
|
8075
|
+
const result = [];
|
|
8064
8076
|
for (let index = 0; index < selector.length; index++) {
|
|
8065
|
-
|
|
8077
|
+
const node = domUtils.selector(selector[index]);
|
|
8066
8078
|
if (node) {
|
|
8067
8079
|
result.push(node);
|
|
8068
8080
|
}
|
|
@@ -8079,7 +8091,7 @@ var Utils = (function () {
|
|
|
8079
8091
|
}
|
|
8080
8092
|
}
|
|
8081
8093
|
return UtilsContext.wait(() => {
|
|
8082
|
-
|
|
8094
|
+
const node = getNode();
|
|
8083
8095
|
if (node) {
|
|
8084
8096
|
return {
|
|
8085
8097
|
success: true,
|
|
@@ -8097,9 +8109,9 @@ var Utils = (function () {
|
|
|
8097
8109
|
waitAnyNode(...args) {
|
|
8098
8110
|
// 过滤掉undefined
|
|
8099
8111
|
args = args.filter((arg) => arg !== void 0);
|
|
8100
|
-
|
|
8112
|
+
const UtilsContext = this;
|
|
8101
8113
|
// 选择器
|
|
8102
|
-
|
|
8114
|
+
const selectorList = args[0];
|
|
8103
8115
|
// 父元素(监听的元素)
|
|
8104
8116
|
let parent = UtilsContext.windowApi.document;
|
|
8105
8117
|
// 超时时间
|
|
@@ -8109,7 +8121,7 @@ var Utils = (function () {
|
|
|
8109
8121
|
}
|
|
8110
8122
|
if (args.length === 1) ;
|
|
8111
8123
|
else if (args.length === 2) {
|
|
8112
|
-
|
|
8124
|
+
const secondParam = args[1];
|
|
8113
8125
|
if (typeof secondParam === "number") {
|
|
8114
8126
|
// "div",10000
|
|
8115
8127
|
timeout = secondParam;
|
|
@@ -8125,9 +8137,9 @@ var Utils = (function () {
|
|
|
8125
8137
|
else if (args.length === 3) {
|
|
8126
8138
|
// "div",document,10000
|
|
8127
8139
|
// 第二个参数,parent
|
|
8128
|
-
|
|
8140
|
+
const secondParam = args[1];
|
|
8129
8141
|
// 第三个参数,timeout
|
|
8130
|
-
|
|
8142
|
+
const thirdParam = args[2];
|
|
8131
8143
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8132
8144
|
parent = secondParam;
|
|
8133
8145
|
if (typeof thirdParam === "number") {
|
|
@@ -8144,7 +8156,7 @@ var Utils = (function () {
|
|
|
8144
8156
|
else {
|
|
8145
8157
|
throw new TypeError("Utils.waitAnyNode 参数个数错误");
|
|
8146
8158
|
}
|
|
8147
|
-
|
|
8159
|
+
const promiseList = selectorList.map((selector) => {
|
|
8148
8160
|
return UtilsContext.waitNode(selector, parent, timeout);
|
|
8149
8161
|
});
|
|
8150
8162
|
return Promise.any(promiseList);
|
|
@@ -8152,9 +8164,9 @@ var Utils = (function () {
|
|
|
8152
8164
|
waitNodeList(...args) {
|
|
8153
8165
|
// 过滤掉undefined
|
|
8154
8166
|
args = args.filter((arg) => arg !== void 0);
|
|
8155
|
-
|
|
8167
|
+
const UtilsContext = this;
|
|
8156
8168
|
// 选择器数组
|
|
8157
|
-
|
|
8169
|
+
const selector = args[0];
|
|
8158
8170
|
// 父元素(监听的元素)
|
|
8159
8171
|
let parent = UtilsContext.windowApi.document;
|
|
8160
8172
|
// 超时时间
|
|
@@ -8164,7 +8176,7 @@ var Utils = (function () {
|
|
|
8164
8176
|
}
|
|
8165
8177
|
if (args.length === 1) ;
|
|
8166
8178
|
else if (args.length === 2) {
|
|
8167
|
-
|
|
8179
|
+
const secondParam = args[1];
|
|
8168
8180
|
if (typeof secondParam === "number") {
|
|
8169
8181
|
// "div",10000
|
|
8170
8182
|
timeout = secondParam;
|
|
@@ -8180,9 +8192,9 @@ var Utils = (function () {
|
|
|
8180
8192
|
else if (args.length === 3) {
|
|
8181
8193
|
// "div",document,10000
|
|
8182
8194
|
// 第二个参数,parent
|
|
8183
|
-
|
|
8195
|
+
const secondParam = args[1];
|
|
8184
8196
|
// 第三个参数,timeout
|
|
8185
|
-
|
|
8197
|
+
const thirdParam = args[2];
|
|
8186
8198
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8187
8199
|
parent = secondParam;
|
|
8188
8200
|
if (typeof thirdParam === "number") {
|
|
@@ -8201,9 +8213,9 @@ var Utils = (function () {
|
|
|
8201
8213
|
}
|
|
8202
8214
|
function getNodeList() {
|
|
8203
8215
|
if (Array.isArray(selector)) {
|
|
8204
|
-
|
|
8216
|
+
const result = [];
|
|
8205
8217
|
for (let index = 0; index < selector.length; index++) {
|
|
8206
|
-
|
|
8218
|
+
const nodeList = domUtils.selectorAll(selector[index], parent);
|
|
8207
8219
|
if (nodeList.length) {
|
|
8208
8220
|
result.push(nodeList);
|
|
8209
8221
|
}
|
|
@@ -8213,14 +8225,14 @@ var Utils = (function () {
|
|
|
8213
8225
|
}
|
|
8214
8226
|
}
|
|
8215
8227
|
else {
|
|
8216
|
-
|
|
8228
|
+
const nodeList = domUtils.selectorAll(selector, parent);
|
|
8217
8229
|
if (nodeList.length) {
|
|
8218
8230
|
return nodeList;
|
|
8219
8231
|
}
|
|
8220
8232
|
}
|
|
8221
8233
|
}
|
|
8222
8234
|
return UtilsContext.wait(() => {
|
|
8223
|
-
|
|
8235
|
+
const node = getNodeList();
|
|
8224
8236
|
if (node) {
|
|
8225
8237
|
return {
|
|
8226
8238
|
success: true,
|
|
@@ -8238,9 +8250,9 @@ var Utils = (function () {
|
|
|
8238
8250
|
waitAnyNodeList(...args) {
|
|
8239
8251
|
// 过滤掉undefined
|
|
8240
8252
|
args = args.filter((arg) => arg !== void 0);
|
|
8241
|
-
|
|
8253
|
+
const UtilsContext = this;
|
|
8242
8254
|
// 选择器数组
|
|
8243
|
-
|
|
8255
|
+
const selectorList = args[0];
|
|
8244
8256
|
// 父元素(监听的元素)
|
|
8245
8257
|
let parent = UtilsContext.windowApi.document;
|
|
8246
8258
|
// 超时时间
|
|
@@ -8250,7 +8262,7 @@ var Utils = (function () {
|
|
|
8250
8262
|
}
|
|
8251
8263
|
if (args.length === 1) ;
|
|
8252
8264
|
else if (args.length === 2) {
|
|
8253
|
-
|
|
8265
|
+
const secondParam = args[1];
|
|
8254
8266
|
if (typeof secondParam === "number") {
|
|
8255
8267
|
// "div",10000
|
|
8256
8268
|
timeout = secondParam;
|
|
@@ -8266,9 +8278,9 @@ var Utils = (function () {
|
|
|
8266
8278
|
else if (args.length === 3) {
|
|
8267
8279
|
// "div",document,10000
|
|
8268
8280
|
// 第二个参数,parent
|
|
8269
|
-
|
|
8281
|
+
const secondParam = args[1];
|
|
8270
8282
|
// 第三个参数,timeout
|
|
8271
|
-
|
|
8283
|
+
const thirdParam = args[2];
|
|
8272
8284
|
if (typeof secondParam === "object" && secondParam instanceof Node) {
|
|
8273
8285
|
parent = secondParam;
|
|
8274
8286
|
if (typeof thirdParam === "number") {
|
|
@@ -8285,7 +8297,7 @@ var Utils = (function () {
|
|
|
8285
8297
|
else {
|
|
8286
8298
|
throw new TypeError("Utils.waitAnyNodeList 参数个数错误");
|
|
8287
8299
|
}
|
|
8288
|
-
|
|
8300
|
+
const promiseList = selectorList.map((selector) => {
|
|
8289
8301
|
return UtilsContext.waitNodeList(selector, parent, timeout);
|
|
8290
8302
|
});
|
|
8291
8303
|
return Promise.any(promiseList);
|
|
@@ -8314,13 +8326,13 @@ var Utils = (function () {
|
|
|
8314
8326
|
});
|
|
8315
8327
|
}
|
|
8316
8328
|
waitPropertyByInterval(checkObj, checkPropertyName, intervalTimer = 250, maxTime = -1) {
|
|
8317
|
-
|
|
8329
|
+
const UtilsContext = this;
|
|
8318
8330
|
if (checkObj == null) {
|
|
8319
8331
|
throw new TypeError("checkObj 不能为空对象 ");
|
|
8320
8332
|
}
|
|
8321
8333
|
let isResolve = false;
|
|
8322
8334
|
return new Promise((resolve, reject) => {
|
|
8323
|
-
|
|
8335
|
+
const interval = UtilsContext.workerSetInterval(() => {
|
|
8324
8336
|
let obj = checkObj;
|
|
8325
8337
|
if (typeof checkObj === "function") {
|
|
8326
8338
|
obj = checkObj();
|
|
@@ -8353,7 +8365,7 @@ var Utils = (function () {
|
|
|
8353
8365
|
throw new Error("Utils.waitVueByInterval 参数element 不能为空");
|
|
8354
8366
|
}
|
|
8355
8367
|
let flag = false;
|
|
8356
|
-
|
|
8368
|
+
const UtilsContext = this;
|
|
8357
8369
|
try {
|
|
8358
8370
|
await UtilsContext.waitPropertyByInterval(element, function (targetElement) {
|
|
8359
8371
|
if (targetElement == null) {
|
|
@@ -8365,7 +8377,7 @@ var Utils = (function () {
|
|
|
8365
8377
|
if (propertyName == null) {
|
|
8366
8378
|
return true;
|
|
8367
8379
|
}
|
|
8368
|
-
|
|
8380
|
+
const vueObject = targetElement[vueName];
|
|
8369
8381
|
if (typeof propertyName === "string") {
|
|
8370
8382
|
if (propertyName in vueObject) {
|
|
8371
8383
|
flag = true;
|
|
@@ -8381,6 +8393,7 @@ var Utils = (function () {
|
|
|
8381
8393
|
}
|
|
8382
8394
|
return false;
|
|
8383
8395
|
}, timer, maxTime);
|
|
8396
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8384
8397
|
}
|
|
8385
8398
|
catch (error) {
|
|
8386
8399
|
return flag;
|
|
@@ -8439,7 +8452,7 @@ var Utils = (function () {
|
|
|
8439
8452
|
if (target == null) {
|
|
8440
8453
|
return;
|
|
8441
8454
|
}
|
|
8442
|
-
|
|
8455
|
+
const handleResult = handler(target);
|
|
8443
8456
|
if (handleResult && typeof handleResult.isFind === "boolean" && handleResult.isFind) {
|
|
8444
8457
|
return handleResult.data;
|
|
8445
8458
|
}
|
|
@@ -8452,10 +8465,10 @@ var Utils = (function () {
|
|
|
8452
8465
|
*/
|
|
8453
8466
|
async asyncQueryProperty(target, handler) {
|
|
8454
8467
|
if (target == null) {
|
|
8455
|
-
// @ts-
|
|
8468
|
+
// @ts-expect-error 空返回
|
|
8456
8469
|
return;
|
|
8457
8470
|
}
|
|
8458
|
-
|
|
8471
|
+
const handleResult = await handler(target);
|
|
8459
8472
|
if (handleResult && typeof handleResult.isFind === "boolean" && handleResult.isFind) {
|
|
8460
8473
|
return handleResult.data;
|
|
8461
8474
|
}
|
|
@@ -8563,6 +8576,7 @@ var Utils = (function () {
|
|
|
8563
8576
|
workerSetTimeout(callback, timeout = 0) {
|
|
8564
8577
|
try {
|
|
8565
8578
|
return setTimeout$1(callback, timeout);
|
|
8579
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8566
8580
|
}
|
|
8567
8581
|
catch (error) {
|
|
8568
8582
|
return this.windowApi.setTimeout(callback, timeout);
|
|
@@ -8577,8 +8591,10 @@ var Utils = (function () {
|
|
|
8577
8591
|
if (timeId != null) {
|
|
8578
8592
|
clearTimeout$1(timeId);
|
|
8579
8593
|
}
|
|
8594
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8580
8595
|
}
|
|
8581
8596
|
catch (error) {
|
|
8597
|
+
// console.log(error);
|
|
8582
8598
|
}
|
|
8583
8599
|
finally {
|
|
8584
8600
|
this.windowApi.clearTimeout(timeId);
|
|
@@ -8592,6 +8608,7 @@ var Utils = (function () {
|
|
|
8592
8608
|
workerSetInterval(callback, timeout = 0) {
|
|
8593
8609
|
try {
|
|
8594
8610
|
return setInterval(callback, timeout);
|
|
8611
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8595
8612
|
}
|
|
8596
8613
|
catch (error) {
|
|
8597
8614
|
return this.windowApi.setInterval(callback, timeout);
|
|
@@ -8606,8 +8623,10 @@ var Utils = (function () {
|
|
|
8606
8623
|
if (timeId != null) {
|
|
8607
8624
|
clearInterval(timeId);
|
|
8608
8625
|
}
|
|
8626
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
8609
8627
|
}
|
|
8610
8628
|
catch (error) {
|
|
8629
|
+
// console.log(error);
|
|
8611
8630
|
}
|
|
8612
8631
|
finally {
|
|
8613
8632
|
this.windowApi.clearInterval(timeId);
|
|
@@ -8641,10 +8660,10 @@ var Utils = (function () {
|
|
|
8641
8660
|
.query({
|
|
8642
8661
|
name: "clipboard-read",
|
|
8643
8662
|
})
|
|
8644
|
-
.then((
|
|
8663
|
+
.then(() => {
|
|
8645
8664
|
readClipboardText();
|
|
8646
8665
|
})
|
|
8647
|
-
.catch((
|
|
8666
|
+
.catch(() => {
|
|
8648
8667
|
/* 该权限申请Api可能在该环境下不生效,尝试直接读取剪贴板 */
|
|
8649
8668
|
readClipboardText();
|
|
8650
8669
|
});
|
|
@@ -8681,7 +8700,7 @@ var Utils = (function () {
|
|
|
8681
8700
|
});
|
|
8682
8701
|
}
|
|
8683
8702
|
}
|
|
8684
|
-
|
|
8703
|
+
const utils = new Utils();
|
|
8685
8704
|
|
|
8686
8705
|
return utils;
|
|
8687
8706
|
|