@dan-uni/dan-any 0.9.9 → 1.0.0
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/dist/index.js +245 -240
- package/dist/index.min.js +250 -245
- package/dist/index.umd.min.js +296 -281
- package/dist/src/index.d.ts +17 -7
- package/dist/src/proto/gen/danuni_pb.d.ts +2 -2
- package/package.json +5 -5
- package/src/ass-gen/ass/dialogue.ts +4 -4
- package/src/index.ts +164 -130
- package/src/proto/gen/bili/dm_pb.ts +1 -1
- package/src/proto/gen/danuni_pb.ts +4 -4
- package/src/proto/src/danuni.proto +1 -1
- package/src/utils/dm-gen.ts +16 -19
package/dist/index.umd.min.js
CHANGED
|
@@ -10272,7 +10272,7 @@
|
|
|
10272
10272
|
function _isUint8Array(obj) {
|
|
10273
10273
|
return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
|
|
10274
10274
|
}
|
|
10275
|
-
var debugUtil = __webpack_require__("?
|
|
10275
|
+
var debugUtil = __webpack_require__("?8beb");
|
|
10276
10276
|
var debug;
|
|
10277
10277
|
debug = debugUtil && debugUtil.debuglog ? debugUtil.debuglog('stream') : function() {};
|
|
10278
10278
|
var BufferList = __webpack_require__("../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/buffer_list.js");
|
|
@@ -11653,7 +11653,7 @@
|
|
|
11653
11653
|
return ("string" === hint ? String : Number)(input);
|
|
11654
11654
|
}
|
|
11655
11655
|
var _require = __webpack_require__("../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js"), Buffer = _require.Buffer;
|
|
11656
|
-
var _require2 = __webpack_require__("?
|
|
11656
|
+
var _require2 = __webpack_require__("?c028"), inspect = _require2.inspect;
|
|
11657
11657
|
var custom = inspect && inspect.custom || 'inspect';
|
|
11658
11658
|
function copyBuffer(src, target, offset) {
|
|
11659
11659
|
Buffer.prototype.copy.call(src, target, offset);
|
|
@@ -13153,13 +13153,13 @@
|
|
|
13153
13153
|
}
|
|
13154
13154
|
exports1.callbackify = callbackify;
|
|
13155
13155
|
},
|
|
13156
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13156
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isByteLength.js": function(module1, exports1, __webpack_require__) {
|
|
13157
13157
|
"use strict";
|
|
13158
13158
|
Object.defineProperty(exports1, "__esModule", {
|
|
13159
13159
|
value: true
|
|
13160
13160
|
});
|
|
13161
13161
|
exports1["default"] = isByteLength;
|
|
13162
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13162
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13163
13163
|
function _interopRequireDefault(e) {
|
|
13164
13164
|
return e && e.__esModule ? e : {
|
|
13165
13165
|
default: e
|
|
@@ -13189,18 +13189,18 @@
|
|
|
13189
13189
|
module1.exports = exports1["default"];
|
|
13190
13190
|
module1.exports["default"] = exports1["default"];
|
|
13191
13191
|
},
|
|
13192
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13192
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isEmail.js": function(module1, exports1, __webpack_require__) {
|
|
13193
13193
|
"use strict";
|
|
13194
13194
|
Object.defineProperty(exports1, "__esModule", {
|
|
13195
13195
|
value: true
|
|
13196
13196
|
});
|
|
13197
13197
|
exports1["default"] = isEmail;
|
|
13198
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13199
|
-
var _checkHost = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13200
|
-
var _isByteLength = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13201
|
-
var _isFQDN = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13202
|
-
var _isIP = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13203
|
-
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13198
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13199
|
+
var _checkHost = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/checkHost.js"));
|
|
13200
|
+
var _isByteLength = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isByteLength.js"));
|
|
13201
|
+
var _isFQDN = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isFQDN.js"));
|
|
13202
|
+
var _isIP = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isIP.js"));
|
|
13203
|
+
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/merge.js"));
|
|
13204
13204
|
function _interopRequireDefault(e) {
|
|
13205
13205
|
return e && e.__esModule ? e : {
|
|
13206
13206
|
default: e
|
|
@@ -13296,14 +13296,14 @@
|
|
|
13296
13296
|
module1.exports = exports1["default"];
|
|
13297
13297
|
module1.exports["default"] = exports1["default"];
|
|
13298
13298
|
},
|
|
13299
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13299
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isFQDN.js": function(module1, exports1, __webpack_require__) {
|
|
13300
13300
|
"use strict";
|
|
13301
13301
|
Object.defineProperty(exports1, "__esModule", {
|
|
13302
13302
|
value: true
|
|
13303
13303
|
});
|
|
13304
13304
|
exports1["default"] = isFQDN;
|
|
13305
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13306
|
-
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13305
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13306
|
+
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/merge.js"));
|
|
13307
13307
|
function _interopRequireDefault(e) {
|
|
13308
13308
|
return e && e.__esModule ? e : {
|
|
13309
13309
|
default: e
|
|
@@ -13342,13 +13342,13 @@
|
|
|
13342
13342
|
module1.exports = exports1["default"];
|
|
13343
13343
|
module1.exports["default"] = exports1["default"];
|
|
13344
13344
|
},
|
|
13345
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13345
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isIP.js": function(module1, exports1, __webpack_require__) {
|
|
13346
13346
|
"use strict";
|
|
13347
13347
|
Object.defineProperty(exports1, "__esModule", {
|
|
13348
13348
|
value: true
|
|
13349
13349
|
});
|
|
13350
13350
|
exports1["default"] = isIP;
|
|
13351
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13351
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13352
13352
|
function _interopRequireDefault(e) {
|
|
13353
13353
|
return e && e.__esModule ? e : {
|
|
13354
13354
|
default: e
|
|
@@ -13382,15 +13382,15 @@
|
|
|
13382
13382
|
module1.exports = exports1["default"];
|
|
13383
13383
|
module1.exports["default"] = exports1["default"];
|
|
13384
13384
|
},
|
|
13385
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13385
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isJSON.js": function(module1, exports1, __webpack_require__) {
|
|
13386
13386
|
"use strict";
|
|
13387
13387
|
Object.defineProperty(exports1, "__esModule", {
|
|
13388
13388
|
value: true
|
|
13389
13389
|
});
|
|
13390
13390
|
exports1["default"] = isJSON;
|
|
13391
|
-
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13392
|
-
var _includesArray = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13393
|
-
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
13391
|
+
var _assertString = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js"));
|
|
13392
|
+
var _includesArray = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/includesArray.js"));
|
|
13393
|
+
var _merge = _interopRequireDefault(__webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/merge.js"));
|
|
13394
13394
|
function _interopRequireDefault(e) {
|
|
13395
13395
|
return e && e.__esModule ? e : {
|
|
13396
13396
|
default: e
|
|
@@ -13424,7 +13424,7 @@
|
|
|
13424
13424
|
module1.exports = exports1["default"];
|
|
13425
13425
|
module1.exports["default"] = exports1["default"];
|
|
13426
13426
|
},
|
|
13427
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13427
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/assertString.js": function(module1, exports1) {
|
|
13428
13428
|
"use strict";
|
|
13429
13429
|
Object.defineProperty(exports1, "__esModule", {
|
|
13430
13430
|
value: true
|
|
@@ -13437,7 +13437,7 @@
|
|
|
13437
13437
|
module1.exports = exports1["default"];
|
|
13438
13438
|
module1.exports["default"] = exports1["default"];
|
|
13439
13439
|
},
|
|
13440
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13440
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/checkHost.js": function(module1, exports1) {
|
|
13441
13441
|
"use strict";
|
|
13442
13442
|
Object.defineProperty(exports1, "__esModule", {
|
|
13443
13443
|
value: true
|
|
@@ -13456,7 +13456,7 @@
|
|
|
13456
13456
|
module1.exports = exports1["default"];
|
|
13457
13457
|
module1.exports["default"] = exports1["default"];
|
|
13458
13458
|
},
|
|
13459
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13459
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/includesArray.js": function(module1, exports1) {
|
|
13460
13460
|
"use strict";
|
|
13461
13461
|
Object.defineProperty(exports1, "__esModule", {
|
|
13462
13462
|
value: true
|
|
@@ -13471,7 +13471,7 @@
|
|
|
13471
13471
|
module1.exports = exports1["default"];
|
|
13472
13472
|
module1.exports["default"] = exports1["default"];
|
|
13473
13473
|
},
|
|
13474
|
-
"../../node_modules/.pnpm/validator@13.15.
|
|
13474
|
+
"../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/util/merge.js": function(module1, exports1) {
|
|
13475
13475
|
"use strict";
|
|
13476
13476
|
Object.defineProperty(exports1, "__esModule", {
|
|
13477
13477
|
value: true
|
|
@@ -13564,8 +13564,8 @@
|
|
|
13564
13564
|
return number + '';
|
|
13565
13565
|
};
|
|
13566
13566
|
},
|
|
13567
|
-
"?
|
|
13568
|
-
"?
|
|
13567
|
+
"?c028": function() {},
|
|
13568
|
+
"?8beb": function() {},
|
|
13569
13569
|
"../../node_modules/.pnpm/available-typed-arrays@1.0.7/node_modules/available-typed-arrays/index.js": function(module1, __unused_webpack_exports, __webpack_require__) {
|
|
13570
13570
|
"use strict";
|
|
13571
13571
|
var possibleNames = __webpack_require__("../../node_modules/.pnpm/possible-typed-array-names@1.1.0/node_modules/possible-typed-array-names/index.js");
|
|
@@ -14211,11 +14211,11 @@ and limitations under the License.
|
|
|
14211
14211
|
"use strict";
|
|
14212
14212
|
__webpack_require__.r(__webpack_exports__);
|
|
14213
14213
|
__webpack_require__.d(__webpack_exports__, {
|
|
14214
|
-
UniDMTools: ()=>dm_gen_namespaceObject,
|
|
14215
|
-
UniIDTools: ()=>id_gen_namespaceObject,
|
|
14216
|
-
UniDM: ()=>UniDM,
|
|
14217
14214
|
platform: ()=>platform_namespaceObject,
|
|
14218
|
-
|
|
14215
|
+
UniDM: ()=>UniDM,
|
|
14216
|
+
UniDMTools: ()=>dm_gen_namespaceObject,
|
|
14217
|
+
UniPool: ()=>src_UniPool,
|
|
14218
|
+
UniIDTools: ()=>id_gen_namespaceObject
|
|
14219
14219
|
});
|
|
14220
14220
|
var platform_namespaceObject = {};
|
|
14221
14221
|
__webpack_require__.r(platform_namespaceObject);
|
|
@@ -14246,7 +14246,7 @@ and limitations under the License.
|
|
|
14246
14246
|
UniDM: ()=>UniDM
|
|
14247
14247
|
});
|
|
14248
14248
|
__webpack_require__("../../node_modules/.pnpm/reflect-metadata@0.2.2/node_modules/reflect-metadata/ReflectLite.js");
|
|
14249
|
-
var isJSON = __webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
14249
|
+
var isJSON = __webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isJSON.js");
|
|
14250
14250
|
var isJSON_default = /*#__PURE__*/ __webpack_require__.n(isJSON);
|
|
14251
14251
|
function IsJSON_isJSON(value) {
|
|
14252
14252
|
return 'string' == typeof value && isJSON_default()(value);
|
|
@@ -15086,6 +15086,15 @@ and limitations under the License.
|
|
|
15086
15086
|
this.saveTextToParentTag = saveTextToParentTag;
|
|
15087
15087
|
this.addChild = addChild;
|
|
15088
15088
|
this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes);
|
|
15089
|
+
if (this.options.stopNodes && this.options.stopNodes.length > 0) {
|
|
15090
|
+
this.stopNodesExact = new Set();
|
|
15091
|
+
this.stopNodesWildcard = new Set();
|
|
15092
|
+
for(let i = 0; i < this.options.stopNodes.length; i++){
|
|
15093
|
+
const stopNodeExp = this.options.stopNodes[i];
|
|
15094
|
+
if ('string' == typeof stopNodeExp) if (stopNodeExp.startsWith("*.")) this.stopNodesWildcard.add(stopNodeExp.substring(2));
|
|
15095
|
+
else this.stopNodesExact.add(stopNodeExp);
|
|
15096
|
+
}
|
|
15097
|
+
}
|
|
15089
15098
|
}
|
|
15090
15099
|
}
|
|
15091
15100
|
function addExternalEntities(externalEntities) {
|
|
@@ -15245,7 +15254,7 @@ and limitations under the License.
|
|
|
15245
15254
|
}
|
|
15246
15255
|
if (tagName !== xmlObj.tagname) jPath += jPath ? "." + tagName : tagName;
|
|
15247
15256
|
const startIndex = i;
|
|
15248
|
-
if (this.isItStopNode(this.
|
|
15257
|
+
if (this.isItStopNode(this.stopNodesExact, this.stopNodesWildcard, jPath, tagName)) {
|
|
15249
15258
|
let tagContent = "";
|
|
15250
15259
|
if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) {
|
|
15251
15260
|
if ("/" === tagName[tagName.length - 1]) {
|
|
@@ -15330,12 +15339,9 @@ and limitations under the License.
|
|
|
15330
15339
|
}
|
|
15331
15340
|
return textData;
|
|
15332
15341
|
}
|
|
15333
|
-
function isItStopNode(
|
|
15334
|
-
|
|
15335
|
-
|
|
15336
|
-
const stopNodeExp = stopNodes[stopNodePath];
|
|
15337
|
-
if (allNodesExp === stopNodeExp || jPath === stopNodeExp) return true;
|
|
15338
|
-
}
|
|
15342
|
+
function isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName) {
|
|
15343
|
+
if (stopNodesWildcard && stopNodesWildcard.has(currentTagName)) return true;
|
|
15344
|
+
if (stopNodesExact && stopNodesExact.has(jPath)) return true;
|
|
15339
15345
|
return false;
|
|
15340
15346
|
}
|
|
15341
15347
|
function tagExpWithClosingIndex(xmlData, i, closingChar = ">") {
|
|
@@ -17077,10 +17083,14 @@ and limitations under the License.
|
|
|
17077
17083
|
function reflect_reflect(messageDesc, message, check = true) {
|
|
17078
17084
|
return new ReflectMessageImpl(messageDesc, message, check);
|
|
17079
17085
|
}
|
|
17086
|
+
const messageSortedFields = new WeakMap();
|
|
17080
17087
|
class ReflectMessageImpl {
|
|
17081
17088
|
get sortedFields() {
|
|
17082
|
-
|
|
17083
|
-
|
|
17089
|
+
const cached = messageSortedFields.get(this.desc);
|
|
17090
|
+
if (cached) return cached;
|
|
17091
|
+
const sortedFields = this.desc.fields.concat().sort((a, b)=>a.number - b.number);
|
|
17092
|
+
messageSortedFields.set(this.desc, sortedFields);
|
|
17093
|
+
return sortedFields;
|
|
17084
17094
|
}
|
|
17085
17095
|
constructor(messageDesc, message, check = true){
|
|
17086
17096
|
this.lists = new Map();
|
|
@@ -20981,11 +20991,11 @@ and limitations under the License.
|
|
|
20981
20991
|
function timestamp_timestampMs(timestamp) {
|
|
20982
20992
|
return 1000 * Number(timestamp.seconds) + Math.round(timestamp.nanos / 1000000);
|
|
20983
20993
|
}
|
|
20984
|
-
var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"0.
|
|
20994
|
+
var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"1.0.0","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
|
|
20985
20995
|
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
20986
20996
|
const DmSegMobileReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 30);
|
|
20987
20997
|
const DmWebViewReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 39);
|
|
20988
|
-
const file_danuni = /*@__PURE__*/ fileDesc("
|
|
20998
|
+
const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLUAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSFQoIcGxhdGZvcm0YDSABKAlIAIgBARISCgVleHRyYRgOIAEoCUgBiAEBQgsKCV9wbGF0Zm9ybUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
|
|
20989
20999
|
file_google_protobuf_timestamp
|
|
20990
21000
|
]);
|
|
20991
21001
|
const DanmakuReplySchema = /*@__PURE__*/ message_messageDesc(file_danuni, 2);
|
|
@@ -22016,7 +22026,7 @@ and limitations under the License.
|
|
|
22016
22026
|
if ('string' == typeof schemaNameOrObject) return container_getFromContainer(Validator_Validator).validateOrReject(schemaNameOrObject, objectOrValidationOptions, maybeValidatorOptions);
|
|
22017
22027
|
return container_getFromContainer(Validator_Validator).validateOrReject(schemaNameOrObject, objectOrValidationOptions);
|
|
22018
22028
|
}
|
|
22019
|
-
var isEmail = __webpack_require__("../../node_modules/.pnpm/validator@13.15.
|
|
22029
|
+
var isEmail = __webpack_require__("../../node_modules/.pnpm/validator@13.15.23/node_modules/validator/lib/isEmail.js");
|
|
22020
22030
|
var isEmail_default = /*#__PURE__*/ __webpack_require__.n(isEmail);
|
|
22021
22031
|
var IS_EMAIL = 'isEmail';
|
|
22022
22032
|
function IsEmail_isEmail(value, options) {
|
|
@@ -23431,6 +23441,7 @@ and limitations under the License.
|
|
|
23431
23441
|
return this.options.dmid(this);
|
|
23432
23442
|
}
|
|
23433
23443
|
isSameAs(dan, options) {
|
|
23444
|
+
if (this === dan) return true;
|
|
23434
23445
|
if (4 === this.mode || 4 === dan.mode) return false;
|
|
23435
23446
|
if (!options?.skipDanuniMerge && (this.extra.danuni?.merge || dan.extra.danuni?.merge)) return false;
|
|
23436
23447
|
const isSame = (k)=>this[k] === dan[k];
|
|
@@ -23444,26 +23455,22 @@ and limitations under the License.
|
|
|
23444
23455
|
return checks;
|
|
23445
23456
|
}
|
|
23446
23457
|
minify() {
|
|
23447
|
-
const def = UniDM
|
|
23448
|
-
const dan = UniDM.create(this);
|
|
23449
|
-
const shouldKeep = (key, value)=>{
|
|
23450
|
-
if ('SOID' === key) return true;
|
|
23451
|
-
if (null == value) return false;
|
|
23452
|
-
if (value === def[key]) return false;
|
|
23453
|
-
if ('attr' === key && Array.isArray(value) && 0 === value.length) return false;
|
|
23454
|
-
if ('extraStr' === key && '{}' === value) return false;
|
|
23455
|
-
return true;
|
|
23456
|
-
};
|
|
23458
|
+
const def = new UniDM();
|
|
23457
23459
|
const result = {
|
|
23458
|
-
SOID:
|
|
23460
|
+
SOID: this.SOID
|
|
23459
23461
|
};
|
|
23460
|
-
|
|
23461
|
-
|
|
23462
|
-
|
|
23463
|
-
|
|
23464
|
-
|
|
23465
|
-
|
|
23466
|
-
|
|
23462
|
+
if (this.progress !== def.progress) result.progress = this.progress;
|
|
23463
|
+
if (this.mode !== def.mode) result.mode = this.mode;
|
|
23464
|
+
if (this.fontsize !== def.fontsize) result.fontsize = this.fontsize;
|
|
23465
|
+
if (this.color !== def.color) result.color = this.color;
|
|
23466
|
+
if (this.senderID !== def.senderID) result.senderID = this.senderID;
|
|
23467
|
+
if (this.content !== def.content) result.content = this.content;
|
|
23468
|
+
if (this.weight !== def.weight) result.weight = this.weight;
|
|
23469
|
+
if (this.pool !== def.pool) result.pool = this.pool;
|
|
23470
|
+
if (this.attr.length > 0) result.attr = this.attr;
|
|
23471
|
+
if (void 0 !== this.platform) result.platform = this.platform;
|
|
23472
|
+
if (this.extraStr && '{}' !== this.extraStr) result.extraStr = this.extraStr;
|
|
23473
|
+
if (void 0 !== this.DMID) result.DMID = this.DMID;
|
|
23467
23474
|
return result;
|
|
23468
23475
|
}
|
|
23469
23476
|
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
|
|
@@ -24015,46 +24022,91 @@ and limitations under the License.
|
|
|
24015
24022
|
return fn(this);
|
|
24016
24023
|
}
|
|
24017
24024
|
get shared() {
|
|
24018
|
-
|
|
24019
|
-
|
|
24020
|
-
|
|
24021
|
-
|
|
24022
|
-
|
|
24023
|
-
|
|
24024
|
-
|
|
24025
|
-
|
|
24026
|
-
|
|
24025
|
+
if (0 === this.dans.length) return {};
|
|
24026
|
+
const keys = [
|
|
24027
|
+
'SOID',
|
|
24028
|
+
'senderID',
|
|
24029
|
+
'platform',
|
|
24030
|
+
'pool',
|
|
24031
|
+
'mode',
|
|
24032
|
+
'color'
|
|
24033
|
+
];
|
|
24034
|
+
const result = {};
|
|
24035
|
+
for (const key of keys){
|
|
24036
|
+
const sharedVal = this.getShared(key);
|
|
24037
|
+
if (void 0 !== sharedVal) result[key] = sharedVal;
|
|
24038
|
+
}
|
|
24039
|
+
return result;
|
|
24027
24040
|
}
|
|
24028
24041
|
getShared(key) {
|
|
24029
|
-
|
|
24030
|
-
|
|
24042
|
+
if (0 === this.dans.length) return;
|
|
24043
|
+
const firstVal = this.dans[0][key];
|
|
24044
|
+
for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
|
|
24045
|
+
return firstVal;
|
|
24031
24046
|
}
|
|
24032
24047
|
getStat(key) {
|
|
24033
|
-
const
|
|
24034
|
-
const
|
|
24035
|
-
const
|
|
24036
|
-
|
|
24037
|
-
|
|
24038
|
-
|
|
24039
|
-
count: 1
|
|
24040
|
-
});
|
|
24041
|
-
return stat;
|
|
24042
|
-
}, default_stat);
|
|
24043
|
-
return stats;
|
|
24048
|
+
const statMap = new Map();
|
|
24049
|
+
for (const dan of this.dans){
|
|
24050
|
+
const val = dan[key];
|
|
24051
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
24052
|
+
}
|
|
24053
|
+
return statMap;
|
|
24044
24054
|
}
|
|
24045
24055
|
getMost(key) {
|
|
24046
|
-
|
|
24056
|
+
const stats = this.getStat(key);
|
|
24057
|
+
if (0 === stats.size) return {
|
|
24058
|
+
val: void 0,
|
|
24059
|
+
count: 0
|
|
24060
|
+
};
|
|
24061
|
+
let mostVal;
|
|
24062
|
+
let maxCount = 0;
|
|
24063
|
+
for (const [val, count] of stats.entries())if (count > maxCount) {
|
|
24064
|
+
maxCount = count;
|
|
24065
|
+
mostVal = val;
|
|
24066
|
+
}
|
|
24067
|
+
return {
|
|
24068
|
+
val: mostVal,
|
|
24069
|
+
count: maxCount
|
|
24070
|
+
};
|
|
24047
24071
|
}
|
|
24048
24072
|
get most() {
|
|
24073
|
+
const keys = [
|
|
24074
|
+
'mode',
|
|
24075
|
+
'fontsize',
|
|
24076
|
+
'color',
|
|
24077
|
+
'senderID',
|
|
24078
|
+
'content',
|
|
24079
|
+
'weight',
|
|
24080
|
+
'pool',
|
|
24081
|
+
'platform'
|
|
24082
|
+
];
|
|
24083
|
+
const statMaps = new Map();
|
|
24084
|
+
for (const dan of this.dans)for (const key of keys){
|
|
24085
|
+
if (!statMaps.has(key)) statMaps.set(key, new Map());
|
|
24086
|
+
const statMap = statMaps.get(key);
|
|
24087
|
+
const val = dan[key];
|
|
24088
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
24089
|
+
}
|
|
24090
|
+
const result = {};
|
|
24091
|
+
for (const key of keys){
|
|
24092
|
+
const statMap = statMaps.get(key);
|
|
24093
|
+
let mostVal;
|
|
24094
|
+
let maxCount = 0;
|
|
24095
|
+
for (const [val, count] of statMap.entries())if (count > maxCount) {
|
|
24096
|
+
maxCount = count;
|
|
24097
|
+
mostVal = val;
|
|
24098
|
+
}
|
|
24099
|
+
result[key] = mostVal;
|
|
24100
|
+
}
|
|
24049
24101
|
return {
|
|
24050
|
-
mode:
|
|
24051
|
-
fontsize:
|
|
24052
|
-
color:
|
|
24053
|
-
senderID:
|
|
24054
|
-
content:
|
|
24055
|
-
weight:
|
|
24056
|
-
pool:
|
|
24057
|
-
platform:
|
|
24102
|
+
mode: result.mode,
|
|
24103
|
+
fontsize: result.fontsize,
|
|
24104
|
+
color: result.color,
|
|
24105
|
+
senderID: result.senderID,
|
|
24106
|
+
content: result.content,
|
|
24107
|
+
weight: result.weight,
|
|
24108
|
+
pool: result.pool,
|
|
24109
|
+
platform: result.platform
|
|
24058
24110
|
};
|
|
24059
24111
|
}
|
|
24060
24112
|
static create(options) {
|
|
@@ -24082,7 +24134,7 @@ and limitations under the License.
|
|
|
24082
24134
|
return this;
|
|
24083
24135
|
}
|
|
24084
24136
|
split(key) {
|
|
24085
|
-
if (this.
|
|
24137
|
+
if (this.getShared(key)) return [
|
|
24086
24138
|
this
|
|
24087
24139
|
];
|
|
24088
24140
|
const set = new Set(this.dans.map((d)=>d[key]));
|
|
@@ -24104,44 +24156,27 @@ and limitations under the License.
|
|
|
24104
24156
|
this.options.dedupe = false;
|
|
24105
24157
|
}
|
|
24106
24158
|
merge(lifetime = 0) {
|
|
24107
|
-
if (!this.
|
|
24159
|
+
if (!this.getShared('SOID')) {
|
|
24108
24160
|
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
24109
24161
|
return this;
|
|
24110
24162
|
}
|
|
24111
24163
|
if (lifetime <= 0) return this;
|
|
24112
|
-
const
|
|
24113
|
-
|
|
24114
|
-
|
|
24115
|
-
|
|
24116
|
-
|
|
24117
|
-
'platform'
|
|
24118
|
-
].map((k)=>danmaku[k]).join('|');
|
|
24164
|
+
const result = [];
|
|
24165
|
+
const cache = {};
|
|
24166
|
+
const mergeObj = {};
|
|
24167
|
+
for (const danmaku of this.dans){
|
|
24168
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
24119
24169
|
const cached = cache[key];
|
|
24120
|
-
|
|
24121
|
-
if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
|
|
24170
|
+
if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
|
|
24122
24171
|
skipDanuniMerge: true
|
|
24123
24172
|
})) {
|
|
24124
|
-
|
|
24125
|
-
senders.
|
|
24126
|
-
|
|
24127
|
-
|
|
24128
|
-
|
|
24129
|
-
count: senders.length,
|
|
24130
|
-
duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
|
|
24131
|
-
senders,
|
|
24132
|
-
taolu_count: senders.length,
|
|
24133
|
-
taolu_senders: senders
|
|
24134
|
-
};
|
|
24135
|
-
danmaku.extraStr = src_JSON.stringify(extra);
|
|
24173
|
+
mergeObj[key].senders.push(danmaku.senderID);
|
|
24174
|
+
mergeObj[key].count = mergeObj[key].senders.length;
|
|
24175
|
+
mergeObj[key].taolu_count = mergeObj[key].count;
|
|
24176
|
+
mergeObj[key].taolu_senders = mergeObj[key].senders;
|
|
24177
|
+
mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
|
|
24136
24178
|
cache[key] = danmaku;
|
|
24137
|
-
|
|
24138
|
-
return [
|
|
24139
|
-
result,
|
|
24140
|
-
cache,
|
|
24141
|
-
mergeObj
|
|
24142
|
-
];
|
|
24143
|
-
}
|
|
24144
|
-
{
|
|
24179
|
+
} else {
|
|
24145
24180
|
mergeObj[key] = {
|
|
24146
24181
|
count: 1,
|
|
24147
24182
|
duration: 0,
|
|
@@ -24154,55 +24189,31 @@ and limitations under the License.
|
|
|
24154
24189
|
]
|
|
24155
24190
|
};
|
|
24156
24191
|
cache[key] = danmaku;
|
|
24157
|
-
const extra = danmaku.extra;
|
|
24158
|
-
extra.danuni = extra.danuni || {};
|
|
24159
|
-
extra.danuni.merge = mergeObj[key];
|
|
24160
|
-
danmaku.extraStr = src_JSON.stringify(extra);
|
|
24161
24192
|
result.push(danmaku);
|
|
24162
|
-
return [
|
|
24163
|
-
result,
|
|
24164
|
-
cache,
|
|
24165
|
-
mergeObj
|
|
24166
|
-
];
|
|
24167
24193
|
}
|
|
24168
|
-
}
|
|
24169
|
-
|
|
24170
|
-
{}
|
|
24171
|
-
{}
|
|
24172
|
-
]);
|
|
24173
|
-
const [result, _cache, mergeObj] = mergeContext;
|
|
24174
|
-
result.forEach((danmaku, i)=>{
|
|
24175
|
-
const key = [
|
|
24176
|
-
'content',
|
|
24177
|
-
'mode',
|
|
24178
|
-
'platform',
|
|
24179
|
-
'pool'
|
|
24180
|
-
].map((k)=>danmaku[k]).join('|');
|
|
24181
|
-
const extra = result[i].extra;
|
|
24194
|
+
}
|
|
24195
|
+
for (const danmaku of result){
|
|
24196
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
24182
24197
|
const mergeData = mergeObj[key];
|
|
24183
|
-
|
|
24184
|
-
|
|
24185
|
-
|
|
24186
|
-
|
|
24187
|
-
|
|
24188
|
-
}
|
|
24189
|
-
});
|
|
24190
|
-
if (mergeData?.count) if (mergeData.count <= 1) {
|
|
24191
|
-
const updatedExtra = {
|
|
24192
|
-
...extra
|
|
24193
|
-
};
|
|
24194
|
-
if (updatedExtra.danuni) {
|
|
24195
|
-
delete updatedExtra.danuni.merge;
|
|
24196
|
-
if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
|
|
24197
|
-
}
|
|
24198
|
-
result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON.stringify(updatedExtra) : void 0;
|
|
24199
|
-
} else {
|
|
24200
|
-
result[i].senderID = 'merge[bot]@dan-any';
|
|
24201
|
-
result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
|
|
24198
|
+
const extra = danmaku.extra;
|
|
24199
|
+
if (mergeData.count > 1) {
|
|
24200
|
+
danmaku.senderID = 'merge[bot]@dan-any';
|
|
24201
|
+
if (danmaku.attr) {
|
|
24202
|
+
if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
|
|
24203
|
+
} else danmaku.attr = [
|
|
24202
24204
|
dm_gen_DMAttr.Protect
|
|
24203
24205
|
];
|
|
24206
|
+
extra.danuni = extra.danuni || {};
|
|
24207
|
+
extra.danuni.merge = mergeData;
|
|
24208
|
+
danmaku.extraStr = src_JSON.stringify(extra);
|
|
24209
|
+
} else {
|
|
24210
|
+
if (extra.danuni?.merge) {
|
|
24211
|
+
delete extra.danuni.merge;
|
|
24212
|
+
if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
|
|
24213
|
+
}
|
|
24214
|
+
danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON.stringify(extra) : void 0;
|
|
24204
24215
|
}
|
|
24205
|
-
}
|
|
24216
|
+
}
|
|
24206
24217
|
return new UniPool(result, this.options, this.info);
|
|
24207
24218
|
}
|
|
24208
24219
|
minify() {
|
|
@@ -24225,7 +24236,7 @@ and limitations under the License.
|
|
|
24225
24236
|
pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
24226
24237
|
fmt: 'artplayer.json'
|
|
24227
24238
|
};
|
|
24228
|
-
if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
|
|
24239
|
+
if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
|
|
24229
24240
|
pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
|
|
24230
24241
|
fmt: 'ddplay.json'
|
|
24231
24242
|
};
|
|
@@ -24404,7 +24415,7 @@ and limitations under the License.
|
|
|
24404
24415
|
source: 'k-v',
|
|
24405
24416
|
danuni: {
|
|
24406
24417
|
...DanUniConvertTipTemplate,
|
|
24407
|
-
data: this.
|
|
24418
|
+
data: this.getShared('SOID')
|
|
24408
24419
|
},
|
|
24409
24420
|
d: this.dans.map((dan)=>dan.toBiliXML(options))
|
|
24410
24421
|
}
|
|
@@ -24543,7 +24554,7 @@ and limitations under the License.
|
|
|
24543
24554
|
substyle: {}
|
|
24544
24555
|
};
|
|
24545
24556
|
const finalOptions = options ?? defaultOptions;
|
|
24546
|
-
const fn = this.
|
|
24557
|
+
const fn = this.getShared('SOID');
|
|
24547
24558
|
return generateASS(this, {
|
|
24548
24559
|
filename: fn,
|
|
24549
24560
|
title: fn,
|
|
@@ -24752,10 +24763,10 @@ and limitations under the License.
|
|
|
24752
24763
|
return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
|
|
24753
24764
|
};
|
|
24754
24765
|
const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
|
|
24755
|
-
const scrollCommand = ({ start, end, top })
|
|
24756
|
-
const fixCommand = ({ top, left })
|
|
24757
|
-
const colorCommand = (color)
|
|
24758
|
-
const borderColorCommand = (color)
|
|
24766
|
+
const scrollCommand = ({ start, end, top })=>String.raw`\move(${start},${top},${end},${top})`;
|
|
24767
|
+
const fixCommand = ({ top, left })=>String.raw`\an8\pos(${left},${top})`;
|
|
24768
|
+
const colorCommand = (color)=>String.raw`\c${formatColor(color)}`;
|
|
24769
|
+
const borderColorCommand = (color)=>String.raw`\3c${formatColor(color)}`;
|
|
24759
24770
|
const dialogue = (danmaku, config)=>{
|
|
24760
24771
|
const { fontSizeType, content, time } = danmaku;
|
|
24761
24772
|
const { scrollTime, fixTime } = config;
|
|
@@ -25023,46 +25034,91 @@ and limitations under the License.
|
|
|
25023
25034
|
return fn(this);
|
|
25024
25035
|
}
|
|
25025
25036
|
get shared() {
|
|
25026
|
-
|
|
25027
|
-
|
|
25028
|
-
|
|
25029
|
-
|
|
25030
|
-
|
|
25031
|
-
|
|
25032
|
-
|
|
25033
|
-
|
|
25034
|
-
|
|
25037
|
+
if (0 === this.dans.length) return {};
|
|
25038
|
+
const keys = [
|
|
25039
|
+
'SOID',
|
|
25040
|
+
'senderID',
|
|
25041
|
+
'platform',
|
|
25042
|
+
'pool',
|
|
25043
|
+
'mode',
|
|
25044
|
+
'color'
|
|
25045
|
+
];
|
|
25046
|
+
const result = {};
|
|
25047
|
+
for (const key of keys){
|
|
25048
|
+
const sharedVal = this.getShared(key);
|
|
25049
|
+
if (void 0 !== sharedVal) result[key] = sharedVal;
|
|
25050
|
+
}
|
|
25051
|
+
return result;
|
|
25035
25052
|
}
|
|
25036
25053
|
getShared(key) {
|
|
25037
|
-
|
|
25038
|
-
|
|
25054
|
+
if (0 === this.dans.length) return;
|
|
25055
|
+
const firstVal = this.dans[0][key];
|
|
25056
|
+
for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
|
|
25057
|
+
return firstVal;
|
|
25039
25058
|
}
|
|
25040
25059
|
getStat(key) {
|
|
25041
|
-
const
|
|
25042
|
-
const
|
|
25043
|
-
const
|
|
25044
|
-
|
|
25045
|
-
|
|
25046
|
-
|
|
25047
|
-
count: 1
|
|
25048
|
-
});
|
|
25049
|
-
return stat;
|
|
25050
|
-
}, default_stat);
|
|
25051
|
-
return stats;
|
|
25060
|
+
const statMap = new Map();
|
|
25061
|
+
for (const dan of this.dans){
|
|
25062
|
+
const val = dan[key];
|
|
25063
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
25064
|
+
}
|
|
25065
|
+
return statMap;
|
|
25052
25066
|
}
|
|
25053
25067
|
getMost(key) {
|
|
25054
|
-
|
|
25068
|
+
const stats = this.getStat(key);
|
|
25069
|
+
if (0 === stats.size) return {
|
|
25070
|
+
val: void 0,
|
|
25071
|
+
count: 0
|
|
25072
|
+
};
|
|
25073
|
+
let mostVal;
|
|
25074
|
+
let maxCount = 0;
|
|
25075
|
+
for (const [val, count] of stats.entries())if (count > maxCount) {
|
|
25076
|
+
maxCount = count;
|
|
25077
|
+
mostVal = val;
|
|
25078
|
+
}
|
|
25079
|
+
return {
|
|
25080
|
+
val: mostVal,
|
|
25081
|
+
count: maxCount
|
|
25082
|
+
};
|
|
25055
25083
|
}
|
|
25056
25084
|
get most() {
|
|
25085
|
+
const keys = [
|
|
25086
|
+
'mode',
|
|
25087
|
+
'fontsize',
|
|
25088
|
+
'color',
|
|
25089
|
+
'senderID',
|
|
25090
|
+
'content',
|
|
25091
|
+
'weight',
|
|
25092
|
+
'pool',
|
|
25093
|
+
'platform'
|
|
25094
|
+
];
|
|
25095
|
+
const statMaps = new Map();
|
|
25096
|
+
for (const dan of this.dans)for (const key of keys){
|
|
25097
|
+
if (!statMaps.has(key)) statMaps.set(key, new Map());
|
|
25098
|
+
const statMap = statMaps.get(key);
|
|
25099
|
+
const val = dan[key];
|
|
25100
|
+
statMap.set(val, (statMap.get(val) || 0) + 1);
|
|
25101
|
+
}
|
|
25102
|
+
const result = {};
|
|
25103
|
+
for (const key of keys){
|
|
25104
|
+
const statMap = statMaps.get(key);
|
|
25105
|
+
let mostVal;
|
|
25106
|
+
let maxCount = 0;
|
|
25107
|
+
for (const [val, count] of statMap.entries())if (count > maxCount) {
|
|
25108
|
+
maxCount = count;
|
|
25109
|
+
mostVal = val;
|
|
25110
|
+
}
|
|
25111
|
+
result[key] = mostVal;
|
|
25112
|
+
}
|
|
25057
25113
|
return {
|
|
25058
|
-
mode:
|
|
25059
|
-
fontsize:
|
|
25060
|
-
color:
|
|
25061
|
-
senderID:
|
|
25062
|
-
content:
|
|
25063
|
-
weight:
|
|
25064
|
-
pool:
|
|
25065
|
-
platform:
|
|
25114
|
+
mode: result.mode,
|
|
25115
|
+
fontsize: result.fontsize,
|
|
25116
|
+
color: result.color,
|
|
25117
|
+
senderID: result.senderID,
|
|
25118
|
+
content: result.content,
|
|
25119
|
+
weight: result.weight,
|
|
25120
|
+
pool: result.pool,
|
|
25121
|
+
platform: result.platform
|
|
25066
25122
|
};
|
|
25067
25123
|
}
|
|
25068
25124
|
static create(options) {
|
|
@@ -25090,7 +25146,7 @@ and limitations under the License.
|
|
|
25090
25146
|
return this;
|
|
25091
25147
|
}
|
|
25092
25148
|
split(key) {
|
|
25093
|
-
if (this.
|
|
25149
|
+
if (this.getShared(key)) return [
|
|
25094
25150
|
this
|
|
25095
25151
|
];
|
|
25096
25152
|
const set = new Set(this.dans.map((d)=>d[key]));
|
|
@@ -25112,44 +25168,27 @@ and limitations under the License.
|
|
|
25112
25168
|
this.options.dedupe = false;
|
|
25113
25169
|
}
|
|
25114
25170
|
merge(lifetime = 0) {
|
|
25115
|
-
if (!this.
|
|
25171
|
+
if (!this.getShared('SOID')) {
|
|
25116
25172
|
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
25117
25173
|
return this;
|
|
25118
25174
|
}
|
|
25119
25175
|
if (lifetime <= 0) return this;
|
|
25120
|
-
const
|
|
25121
|
-
|
|
25122
|
-
|
|
25123
|
-
|
|
25124
|
-
|
|
25125
|
-
'platform'
|
|
25126
|
-
].map((k)=>danmaku[k]).join('|');
|
|
25176
|
+
const result = [];
|
|
25177
|
+
const cache = {};
|
|
25178
|
+
const mergeObj = {};
|
|
25179
|
+
for (const danmaku of this.dans){
|
|
25180
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
25127
25181
|
const cached = cache[key];
|
|
25128
|
-
|
|
25129
|
-
if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
|
|
25182
|
+
if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
|
|
25130
25183
|
skipDanuniMerge: true
|
|
25131
25184
|
})) {
|
|
25132
|
-
|
|
25133
|
-
senders.
|
|
25134
|
-
|
|
25135
|
-
|
|
25136
|
-
|
|
25137
|
-
count: senders.length,
|
|
25138
|
-
duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
|
|
25139
|
-
senders,
|
|
25140
|
-
taolu_count: senders.length,
|
|
25141
|
-
taolu_senders: senders
|
|
25142
|
-
};
|
|
25143
|
-
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
25185
|
+
mergeObj[key].senders.push(danmaku.senderID);
|
|
25186
|
+
mergeObj[key].count = mergeObj[key].senders.length;
|
|
25187
|
+
mergeObj[key].taolu_count = mergeObj[key].count;
|
|
25188
|
+
mergeObj[key].taolu_senders = mergeObj[key].senders;
|
|
25189
|
+
mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
|
|
25144
25190
|
cache[key] = danmaku;
|
|
25145
|
-
|
|
25146
|
-
return [
|
|
25147
|
-
result,
|
|
25148
|
-
cache,
|
|
25149
|
-
mergeObj
|
|
25150
|
-
];
|
|
25151
|
-
}
|
|
25152
|
-
{
|
|
25191
|
+
} else {
|
|
25153
25192
|
mergeObj[key] = {
|
|
25154
25193
|
count: 1,
|
|
25155
25194
|
duration: 0,
|
|
@@ -25162,55 +25201,31 @@ and limitations under the License.
|
|
|
25162
25201
|
]
|
|
25163
25202
|
};
|
|
25164
25203
|
cache[key] = danmaku;
|
|
25165
|
-
const extra = danmaku.extra;
|
|
25166
|
-
extra.danuni = extra.danuni || {};
|
|
25167
|
-
extra.danuni.merge = mergeObj[key];
|
|
25168
|
-
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
25169
25204
|
result.push(danmaku);
|
|
25170
|
-
return [
|
|
25171
|
-
result,
|
|
25172
|
-
cache,
|
|
25173
|
-
mergeObj
|
|
25174
|
-
];
|
|
25175
25205
|
}
|
|
25176
|
-
}
|
|
25177
|
-
|
|
25178
|
-
{}
|
|
25179
|
-
{}
|
|
25180
|
-
]);
|
|
25181
|
-
const [result, _cache, mergeObj] = mergeContext;
|
|
25182
|
-
result.forEach((danmaku, i)=>{
|
|
25183
|
-
const key = [
|
|
25184
|
-
'content',
|
|
25185
|
-
'mode',
|
|
25186
|
-
'platform',
|
|
25187
|
-
'pool'
|
|
25188
|
-
].map((k)=>danmaku[k]).join('|');
|
|
25189
|
-
const extra = result[i].extra;
|
|
25206
|
+
}
|
|
25207
|
+
for (const danmaku of result){
|
|
25208
|
+
const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
|
|
25190
25209
|
const mergeData = mergeObj[key];
|
|
25191
|
-
|
|
25192
|
-
|
|
25193
|
-
|
|
25194
|
-
|
|
25195
|
-
|
|
25196
|
-
}
|
|
25197
|
-
});
|
|
25198
|
-
if (mergeData?.count) if (mergeData.count <= 1) {
|
|
25199
|
-
const updatedExtra = {
|
|
25200
|
-
...extra
|
|
25201
|
-
};
|
|
25202
|
-
if (updatedExtra.danuni) {
|
|
25203
|
-
delete updatedExtra.danuni.merge;
|
|
25204
|
-
if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
|
|
25205
|
-
}
|
|
25206
|
-
result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON_0.stringify(updatedExtra) : void 0;
|
|
25207
|
-
} else {
|
|
25208
|
-
result[i].senderID = 'merge[bot]@dan-any';
|
|
25209
|
-
result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
|
|
25210
|
+
const extra = danmaku.extra;
|
|
25211
|
+
if (mergeData.count > 1) {
|
|
25212
|
+
danmaku.senderID = 'merge[bot]@dan-any';
|
|
25213
|
+
if (danmaku.attr) {
|
|
25214
|
+
if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
|
|
25215
|
+
} else danmaku.attr = [
|
|
25210
25216
|
dm_gen_DMAttr.Protect
|
|
25211
25217
|
];
|
|
25218
|
+
extra.danuni = extra.danuni || {};
|
|
25219
|
+
extra.danuni.merge = mergeData;
|
|
25220
|
+
danmaku.extraStr = src_JSON_0.stringify(extra);
|
|
25221
|
+
} else {
|
|
25222
|
+
if (extra.danuni?.merge) {
|
|
25223
|
+
delete extra.danuni.merge;
|
|
25224
|
+
if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
|
|
25225
|
+
}
|
|
25226
|
+
danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON_0.stringify(extra) : void 0;
|
|
25212
25227
|
}
|
|
25213
|
-
}
|
|
25228
|
+
}
|
|
25214
25229
|
return new src_UniPool(result, this.options, this.info);
|
|
25215
25230
|
}
|
|
25216
25231
|
minify() {
|
|
@@ -25233,7 +25248,7 @@ and limitations under the License.
|
|
|
25233
25248
|
pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
|
|
25234
25249
|
fmt: 'artplayer.json'
|
|
25235
25250
|
};
|
|
25236
|
-
if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
|
|
25251
|
+
if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
|
|
25237
25252
|
pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
|
|
25238
25253
|
fmt: 'ddplay.json'
|
|
25239
25254
|
};
|
|
@@ -25412,7 +25427,7 @@ and limitations under the License.
|
|
|
25412
25427
|
source: 'k-v',
|
|
25413
25428
|
danuni: {
|
|
25414
25429
|
...src_DanUniConvertTipTemplate,
|
|
25415
|
-
data: this.
|
|
25430
|
+
data: this.getShared('SOID')
|
|
25416
25431
|
},
|
|
25417
25432
|
d: this.dans.map((dan)=>dan.toBiliXML(options))
|
|
25418
25433
|
}
|
|
@@ -25551,7 +25566,7 @@ and limitations under the License.
|
|
|
25551
25566
|
substyle: {}
|
|
25552
25567
|
};
|
|
25553
25568
|
const finalOptions = options ?? defaultOptions;
|
|
25554
|
-
const fn = this.
|
|
25569
|
+
const fn = this.getShared('SOID');
|
|
25555
25570
|
return generateASS(this, {
|
|
25556
25571
|
filename: fn,
|
|
25557
25572
|
title: fn,
|