@dan-uni/dan-any 0.9.4 → 0.9.5
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 +4 -0
- package/dist/index.js +88 -78
- package/dist/index.min.js +97 -92
- package/dist/index.umd.min.js +332 -231
- package/dist/src/ass-gen/ass/create.d.ts +1 -2
- package/dist/src/ass-gen/ass/dialogue.d.ts +1 -2
- package/dist/src/ass-gen/ass/event.d.ts +1 -2
- package/dist/src/ass-gen/ass/info.d.ts +2 -2
- package/dist/src/ass-gen/ass/style.d.ts +1 -2
- package/dist/src/ass-gen/config.d.ts +1 -2
- package/package.json +6 -6
- package/src/ass-gen/__tests__/generate.test.ts +2 -2
- package/src/ass-gen/ass/create.ts +7 -6
- package/src/ass-gen/ass/dialogue.ts +1 -2
- package/src/ass-gen/ass/event.ts +2 -3
- package/src/ass-gen/ass/info.ts +1 -2
- package/src/ass-gen/ass/raw.ts +7 -7
- package/src/ass-gen/ass/style.ts +1 -2
- package/src/ass-gen/config.ts +1 -1
- package/src/ass-gen/index.ts +7 -4
- package/src/ass-gen/util/layout.ts +1 -1
- package/src/index.ts +18 -11
- package/src/proto/gen/bili/dm_pb.ts +1 -1
- package/src/proto/gen/danuni_pb.ts +1 -1
- package/src/utils/dm-gen.ts +28 -27
- package/types/tsconfig.tsbuildinfo +1 -1
package/dist/index.umd.min.js
CHANGED
|
@@ -5250,6 +5250,11 @@
|
|
|
5250
5250
|
var implementation = __webpack_require__("../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js");
|
|
5251
5251
|
module1.exports = Function.prototype.bind || implementation;
|
|
5252
5252
|
},
|
|
5253
|
+
"../../node_modules/.pnpm/generator-function@2.0.1/node_modules/generator-function/index.js": function(module1) {
|
|
5254
|
+
"use strict";
|
|
5255
|
+
const cached = (function*() {}).constructor;
|
|
5256
|
+
module1.exports = ()=>cached;
|
|
5257
|
+
},
|
|
5253
5258
|
"../../node_modules/.pnpm/get-intrinsic@1.3.0/node_modules/get-intrinsic/index.js": function(module1, __unused_webpack_exports, __webpack_require__) {
|
|
5254
5259
|
"use strict";
|
|
5255
5260
|
var undefined;
|
|
@@ -6105,7 +6110,7 @@
|
|
|
6105
6110
|
return tryFunctionObject(value);
|
|
6106
6111
|
};
|
|
6107
6112
|
},
|
|
6108
|
-
"../../node_modules/.pnpm/is-generator-function@1.1.
|
|
6113
|
+
"../../node_modules/.pnpm/is-generator-function@1.1.2/node_modules/is-generator-function/index.js": function(module1, __unused_webpack_exports, __webpack_require__) {
|
|
6109
6114
|
"use strict";
|
|
6110
6115
|
var callBound = __webpack_require__("../../node_modules/.pnpm/call-bound@1.0.4/node_modules/call-bound/index.js");
|
|
6111
6116
|
var safeRegexTest = __webpack_require__("../../node_modules/.pnpm/safe-regex-test@1.1.0/node_modules/safe-regex-test/index.js");
|
|
@@ -6114,13 +6119,7 @@
|
|
|
6114
6119
|
var getProto = __webpack_require__("../../node_modules/.pnpm/get-proto@1.0.1/node_modules/get-proto/index.js");
|
|
6115
6120
|
var toStr = callBound('Object.prototype.toString');
|
|
6116
6121
|
var fnToStr = callBound('Function.prototype.toString');
|
|
6117
|
-
var
|
|
6118
|
-
if (!hasToStringTag) return false;
|
|
6119
|
-
try {
|
|
6120
|
-
return Function('return function*() {}')();
|
|
6121
|
-
} catch (e) {}
|
|
6122
|
-
};
|
|
6123
|
-
var GeneratorFunction;
|
|
6122
|
+
var getGeneratorFunction = __webpack_require__("../../node_modules/.pnpm/generator-function@2.0.1/node_modules/generator-function/index.js");
|
|
6124
6123
|
module1.exports = function(fn) {
|
|
6125
6124
|
if ('function' != typeof fn) return false;
|
|
6126
6125
|
if (isFnRegex(fnToStr(fn))) return true;
|
|
@@ -6129,11 +6128,8 @@
|
|
|
6129
6128
|
return '[object GeneratorFunction]' === str;
|
|
6130
6129
|
}
|
|
6131
6130
|
if (!getProto) return false;
|
|
6132
|
-
|
|
6133
|
-
|
|
6134
|
-
GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;
|
|
6135
|
-
}
|
|
6136
|
-
return getProto(fn) === GeneratorFunction;
|
|
6131
|
+
var GeneratorFunction = getGeneratorFunction();
|
|
6132
|
+
return GeneratorFunction && getProto(fn) === GeneratorFunction.prototype;
|
|
6137
6133
|
};
|
|
6138
6134
|
},
|
|
6139
6135
|
"../../node_modules/.pnpm/is-nan@1.3.2/node_modules/is-nan/implementation.js": function(module1) {
|
|
@@ -12490,7 +12486,7 @@
|
|
|
12490
12486
|
"../../node_modules/.pnpm/util@0.12.5/node_modules/util/support/types.js": function(__unused_webpack_module, exports1, __webpack_require__) {
|
|
12491
12487
|
"use strict";
|
|
12492
12488
|
var isArgumentsObject = __webpack_require__("../../node_modules/.pnpm/is-arguments@1.2.0/node_modules/is-arguments/index.js");
|
|
12493
|
-
var isGeneratorFunction = __webpack_require__("../../node_modules/.pnpm/is-generator-function@1.1.
|
|
12489
|
+
var isGeneratorFunction = __webpack_require__("../../node_modules/.pnpm/is-generator-function@1.1.2/node_modules/is-generator-function/index.js");
|
|
12494
12490
|
var whichTypedArray = __webpack_require__("../../node_modules/.pnpm/which-typed-array@1.1.19/node_modules/which-typed-array/index.js");
|
|
12495
12491
|
var isTypedArray = __webpack_require__("../../node_modules/.pnpm/is-typed-array@1.1.15/node_modules/is-typed-array/index.js");
|
|
12496
12492
|
function uncurryThis(f) {
|
|
@@ -14597,7 +14593,7 @@ and limitations under the License.
|
|
|
14597
14593
|
}
|
|
14598
14594
|
}, validationOptions);
|
|
14599
14595
|
}
|
|
14600
|
-
const
|
|
14596
|
+
const OptionsBuilder_defaultOptions = {
|
|
14601
14597
|
preserveOrder: false,
|
|
14602
14598
|
attributeNamePrefix: '@_',
|
|
14603
14599
|
attributesGroupName: false,
|
|
@@ -14637,7 +14633,7 @@ and limitations under the License.
|
|
|
14637
14633
|
captureMetaData: false
|
|
14638
14634
|
};
|
|
14639
14635
|
const buildOptions = function(options) {
|
|
14640
|
-
return Object.assign({},
|
|
14636
|
+
return Object.assign({}, OptionsBuilder_defaultOptions, options);
|
|
14641
14637
|
};
|
|
14642
14638
|
const nameStartChar = ':A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';
|
|
14643
14639
|
const nameChar = nameStartChar + '\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040';
|
|
@@ -14694,147 +14690,229 @@ and limitations under the License.
|
|
|
14694
14690
|
return METADATA_SYMBOL;
|
|
14695
14691
|
}
|
|
14696
14692
|
}
|
|
14697
|
-
|
|
14698
|
-
|
|
14699
|
-
|
|
14700
|
-
|
|
14701
|
-
|
|
14702
|
-
|
|
14703
|
-
|
|
14704
|
-
|
|
14705
|
-
|
|
14706
|
-
|
|
14707
|
-
|
|
14708
|
-
|
|
14709
|
-
|
|
14710
|
-
|
|
14711
|
-
|
|
14712
|
-
|
|
14713
|
-
|
|
14714
|
-
|
|
14715
|
-
|
|
14716
|
-
|
|
14717
|
-
|
|
14718
|
-
if (
|
|
14719
|
-
|
|
14720
|
-
|
|
14721
|
-
|
|
14722
|
-
|
|
14723
|
-
|
|
14724
|
-
|
|
14725
|
-
|
|
14726
|
-
|
|
14727
|
-
|
|
14728
|
-
|
|
14729
|
-
|
|
14730
|
-
i
|
|
14731
|
-
|
|
14732
|
-
|
|
14733
|
-
|
|
14734
|
-
|
|
14735
|
-
|
|
14736
|
-
|
|
14737
|
-
|
|
14738
|
-
|
|
14739
|
-
|
|
14740
|
-
|
|
14741
|
-
|
|
14742
|
-
|
|
14743
|
-
|
|
14744
|
-
|
|
14745
|
-
};
|
|
14746
|
-
function readEntityExp(xmlData, i) {
|
|
14747
|
-
i = skipWhitespace(xmlData, i);
|
|
14748
|
-
let entityName = "";
|
|
14749
|
-
while(i < xmlData.length && !/\s/.test(xmlData[i]) && '"' !== xmlData[i] && "'" !== xmlData[i]){
|
|
14750
|
-
entityName += xmlData[i];
|
|
14751
|
-
i++;
|
|
14693
|
+
class DocTypeReader {
|
|
14694
|
+
constructor(processEntities){
|
|
14695
|
+
this.suppressValidationErr = !processEntities;
|
|
14696
|
+
}
|
|
14697
|
+
readDocType(xmlData, i) {
|
|
14698
|
+
const entities = {};
|
|
14699
|
+
if ('O' === xmlData[i + 3] && 'C' === xmlData[i + 4] && 'T' === xmlData[i + 5] && 'Y' === xmlData[i + 6] && 'P' === xmlData[i + 7] && 'E' === xmlData[i + 8]) {
|
|
14700
|
+
i += 9;
|
|
14701
|
+
let angleBracketsCount = 1;
|
|
14702
|
+
let hasBody = false, comment = false;
|
|
14703
|
+
for(; i < xmlData.length; i++)if ('<' !== xmlData[i] || comment) if ('>' === xmlData[i]) {
|
|
14704
|
+
if (comment) {
|
|
14705
|
+
if ("-" === xmlData[i - 1] && "-" === xmlData[i - 2]) {
|
|
14706
|
+
comment = false;
|
|
14707
|
+
angleBracketsCount--;
|
|
14708
|
+
}
|
|
14709
|
+
} else angleBracketsCount--;
|
|
14710
|
+
if (0 === angleBracketsCount) break;
|
|
14711
|
+
} else if ('[' === xmlData[i]) hasBody = true;
|
|
14712
|
+
else xmlData[i];
|
|
14713
|
+
else {
|
|
14714
|
+
if (hasBody && hasSeq(xmlData, "!ENTITY", i)) {
|
|
14715
|
+
i += 7;
|
|
14716
|
+
let entityName, val;
|
|
14717
|
+
[entityName, val, i] = this.readEntityExp(xmlData, i + 1, this.suppressValidationErr);
|
|
14718
|
+
if (-1 === val.indexOf("&")) entities[entityName] = {
|
|
14719
|
+
regx: RegExp(`&${entityName};`, "g"),
|
|
14720
|
+
val: val
|
|
14721
|
+
};
|
|
14722
|
+
} else if (hasBody && hasSeq(xmlData, "!ELEMENT", i)) {
|
|
14723
|
+
i += 8;
|
|
14724
|
+
const { index } = this.readElementExp(xmlData, i + 1);
|
|
14725
|
+
i = index;
|
|
14726
|
+
} else if (hasBody && hasSeq(xmlData, "!ATTLIST", i)) i += 8;
|
|
14727
|
+
else if (hasBody && hasSeq(xmlData, "!NOTATION", i)) {
|
|
14728
|
+
i += 9;
|
|
14729
|
+
const { index } = this.readNotationExp(xmlData, i + 1, this.suppressValidationErr);
|
|
14730
|
+
i = index;
|
|
14731
|
+
} else if (hasSeq(xmlData, "!--", i)) comment = true;
|
|
14732
|
+
else throw new Error("Invalid DOCTYPE");
|
|
14733
|
+
angleBracketsCount++;
|
|
14734
|
+
}
|
|
14735
|
+
if (0 !== angleBracketsCount) throw new Error("Unclosed DOCTYPE");
|
|
14736
|
+
} else throw new Error("Invalid Tag instead of DOCTYPE");
|
|
14737
|
+
return {
|
|
14738
|
+
entities,
|
|
14739
|
+
i
|
|
14740
|
+
};
|
|
14752
14741
|
}
|
|
14753
|
-
|
|
14754
|
-
|
|
14755
|
-
|
|
14756
|
-
|
|
14757
|
-
|
|
14758
|
-
|
|
14759
|
-
|
|
14760
|
-
|
|
14761
|
-
|
|
14762
|
-
|
|
14763
|
-
|
|
14764
|
-
|
|
14765
|
-
|
|
14766
|
-
|
|
14767
|
-
|
|
14768
|
-
|
|
14769
|
-
|
|
14770
|
-
|
|
14771
|
-
|
|
14742
|
+
readEntityExp(xmlData, i) {
|
|
14743
|
+
i = skipWhitespace(xmlData, i);
|
|
14744
|
+
let entityName = "";
|
|
14745
|
+
while(i < xmlData.length && !/\s/.test(xmlData[i]) && '"' !== xmlData[i] && "'" !== xmlData[i]){
|
|
14746
|
+
entityName += xmlData[i];
|
|
14747
|
+
i++;
|
|
14748
|
+
}
|
|
14749
|
+
validateEntityName(entityName);
|
|
14750
|
+
i = skipWhitespace(xmlData, i);
|
|
14751
|
+
if (!this.suppressValidationErr) {
|
|
14752
|
+
if ("SYSTEM" === xmlData.substring(i, i + 6).toUpperCase()) throw new Error("External entities are not supported");
|
|
14753
|
+
else if ("%" === xmlData[i]) throw new Error("Parameter entities are not supported");
|
|
14754
|
+
}
|
|
14755
|
+
let entityValue = "";
|
|
14756
|
+
[i, entityValue] = this.readIdentifierVal(xmlData, i, "entity");
|
|
14757
|
+
i--;
|
|
14758
|
+
return [
|
|
14759
|
+
entityName,
|
|
14760
|
+
entityValue,
|
|
14761
|
+
i
|
|
14762
|
+
];
|
|
14772
14763
|
}
|
|
14773
|
-
|
|
14774
|
-
|
|
14775
|
-
|
|
14776
|
-
|
|
14777
|
-
|
|
14778
|
-
|
|
14779
|
-
|
|
14780
|
-
|
|
14781
|
-
if ("PUBLIC" === identifierType) {
|
|
14782
|
-
[i, publicIdentifier] = readIdentifierVal(xmlData, i, "publicIdentifier");
|
|
14764
|
+
readNotationExp(xmlData, i) {
|
|
14765
|
+
i = skipWhitespace(xmlData, i);
|
|
14766
|
+
let notationName = "";
|
|
14767
|
+
while(i < xmlData.length && !/\s/.test(xmlData[i])){
|
|
14768
|
+
notationName += xmlData[i];
|
|
14769
|
+
i++;
|
|
14770
|
+
}
|
|
14771
|
+
this.suppressValidationErr || validateEntityName(notationName);
|
|
14783
14772
|
i = skipWhitespace(xmlData, i);
|
|
14784
|
-
|
|
14785
|
-
|
|
14786
|
-
|
|
14787
|
-
|
|
14773
|
+
const identifierType = xmlData.substring(i, i + 6).toUpperCase();
|
|
14774
|
+
if (!this.suppressValidationErr && "SYSTEM" !== identifierType && "PUBLIC" !== identifierType) throw new Error(`Expected SYSTEM or PUBLIC, found "${identifierType}"`);
|
|
14775
|
+
i += identifierType.length;
|
|
14776
|
+
i = skipWhitespace(xmlData, i);
|
|
14777
|
+
let publicIdentifier = null;
|
|
14778
|
+
let systemIdentifier = null;
|
|
14779
|
+
if ("PUBLIC" === identifierType) {
|
|
14780
|
+
[i, publicIdentifier] = this.readIdentifierVal(xmlData, i, "publicIdentifier");
|
|
14781
|
+
i = skipWhitespace(xmlData, i);
|
|
14782
|
+
if ('"' === xmlData[i] || "'" === xmlData[i]) [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, "systemIdentifier");
|
|
14783
|
+
} else if ("SYSTEM" === identifierType) {
|
|
14784
|
+
[i, systemIdentifier] = this.readIdentifierVal(xmlData, i, "systemIdentifier");
|
|
14785
|
+
if (!this.suppressValidationErr && !systemIdentifier) throw new Error("Missing mandatory system identifier for SYSTEM notation");
|
|
14786
|
+
}
|
|
14787
|
+
return {
|
|
14788
|
+
notationName,
|
|
14789
|
+
publicIdentifier,
|
|
14790
|
+
systemIdentifier,
|
|
14791
|
+
index: --i
|
|
14792
|
+
};
|
|
14788
14793
|
}
|
|
14789
|
-
|
|
14790
|
-
|
|
14791
|
-
|
|
14792
|
-
|
|
14793
|
-
index: --i
|
|
14794
|
-
};
|
|
14795
|
-
}
|
|
14796
|
-
function readIdentifierVal(xmlData, i, type) {
|
|
14797
|
-
let identifierVal = "";
|
|
14798
|
-
const startChar = xmlData[i];
|
|
14799
|
-
if ('"' !== startChar && "'" !== startChar) throw new Error(`Expected quoted string, found "${startChar}"`);
|
|
14800
|
-
i++;
|
|
14801
|
-
while(i < xmlData.length && xmlData[i] !== startChar){
|
|
14802
|
-
identifierVal += xmlData[i];
|
|
14794
|
+
readIdentifierVal(xmlData, i, type) {
|
|
14795
|
+
let identifierVal = "";
|
|
14796
|
+
const startChar = xmlData[i];
|
|
14797
|
+
if ('"' !== startChar && "'" !== startChar) throw new Error(`Expected quoted string, found "${startChar}"`);
|
|
14803
14798
|
i++;
|
|
14804
|
-
|
|
14805
|
-
|
|
14806
|
-
|
|
14807
|
-
|
|
14808
|
-
i
|
|
14809
|
-
identifierVal
|
|
14810
|
-
];
|
|
14811
|
-
}
|
|
14812
|
-
function readElementExp(xmlData, i) {
|
|
14813
|
-
i = skipWhitespace(xmlData, i);
|
|
14814
|
-
let elementName = "";
|
|
14815
|
-
while(i < xmlData.length && !/\s/.test(xmlData[i])){
|
|
14816
|
-
elementName += xmlData[i];
|
|
14799
|
+
while(i < xmlData.length && xmlData[i] !== startChar){
|
|
14800
|
+
identifierVal += xmlData[i];
|
|
14801
|
+
i++;
|
|
14802
|
+
}
|
|
14803
|
+
if (xmlData[i] !== startChar) throw new Error(`Unterminated ${type} value`);
|
|
14817
14804
|
i++;
|
|
14805
|
+
return [
|
|
14806
|
+
i,
|
|
14807
|
+
identifierVal
|
|
14808
|
+
];
|
|
14818
14809
|
}
|
|
14819
|
-
|
|
14820
|
-
|
|
14821
|
-
|
|
14822
|
-
|
|
14823
|
-
|
|
14824
|
-
else if ("(" === xmlData[i]) {
|
|
14825
|
-
i++;
|
|
14826
|
-
while(i < xmlData.length && ")" !== xmlData[i]){
|
|
14827
|
-
contentModel += xmlData[i];
|
|
14810
|
+
readElementExp(xmlData, i) {
|
|
14811
|
+
i = skipWhitespace(xmlData, i);
|
|
14812
|
+
let elementName = "";
|
|
14813
|
+
while(i < xmlData.length && !/\s/.test(xmlData[i])){
|
|
14814
|
+
elementName += xmlData[i];
|
|
14828
14815
|
i++;
|
|
14829
14816
|
}
|
|
14830
|
-
if (
|
|
14831
|
-
|
|
14832
|
-
|
|
14833
|
-
|
|
14834
|
-
|
|
14835
|
-
|
|
14836
|
-
|
|
14817
|
+
if (!this.suppressValidationErr && !isName(elementName)) throw new Error(`Invalid element name: "${elementName}"`);
|
|
14818
|
+
i = skipWhitespace(xmlData, i);
|
|
14819
|
+
let contentModel = "";
|
|
14820
|
+
if ("E" === xmlData[i] && hasSeq(xmlData, "MPTY", i)) i += 4;
|
|
14821
|
+
else if ("A" === xmlData[i] && hasSeq(xmlData, "NY", i)) i += 2;
|
|
14822
|
+
else if ("(" === xmlData[i]) {
|
|
14823
|
+
i++;
|
|
14824
|
+
while(i < xmlData.length && ")" !== xmlData[i]){
|
|
14825
|
+
contentModel += xmlData[i];
|
|
14826
|
+
i++;
|
|
14827
|
+
}
|
|
14828
|
+
if (")" !== xmlData[i]) throw new Error("Unterminated content model");
|
|
14829
|
+
} else if (!this.suppressValidationErr) throw new Error(`Invalid Element Expression, found "${xmlData[i]}"`);
|
|
14830
|
+
return {
|
|
14831
|
+
elementName,
|
|
14832
|
+
contentModel: contentModel.trim(),
|
|
14833
|
+
index: i
|
|
14834
|
+
};
|
|
14835
|
+
}
|
|
14836
|
+
readAttlistExp(xmlData, i) {
|
|
14837
|
+
i = skipWhitespace(xmlData, i);
|
|
14838
|
+
let elementName = "";
|
|
14839
|
+
while(i < xmlData.length && !/\s/.test(xmlData[i])){
|
|
14840
|
+
elementName += xmlData[i];
|
|
14841
|
+
i++;
|
|
14842
|
+
}
|
|
14843
|
+
validateEntityName(elementName);
|
|
14844
|
+
i = skipWhitespace(xmlData, i);
|
|
14845
|
+
let attributeName = "";
|
|
14846
|
+
while(i < xmlData.length && !/\s/.test(xmlData[i])){
|
|
14847
|
+
attributeName += xmlData[i];
|
|
14848
|
+
i++;
|
|
14849
|
+
}
|
|
14850
|
+
if (!validateEntityName(attributeName)) throw new Error(`Invalid attribute name: "${attributeName}"`);
|
|
14851
|
+
i = skipWhitespace(xmlData, i);
|
|
14852
|
+
let attributeType = "";
|
|
14853
|
+
if ("NOTATION" === xmlData.substring(i, i + 8).toUpperCase()) {
|
|
14854
|
+
attributeType = "NOTATION";
|
|
14855
|
+
i += 8;
|
|
14856
|
+
i = skipWhitespace(xmlData, i);
|
|
14857
|
+
if ("(" !== xmlData[i]) throw new Error(`Expected '(', found "${xmlData[i]}"`);
|
|
14858
|
+
i++;
|
|
14859
|
+
let allowedNotations = [];
|
|
14860
|
+
while(i < xmlData.length && ")" !== xmlData[i]){
|
|
14861
|
+
let notation = "";
|
|
14862
|
+
while(i < xmlData.length && "|" !== xmlData[i] && ")" !== xmlData[i]){
|
|
14863
|
+
notation += xmlData[i];
|
|
14864
|
+
i++;
|
|
14865
|
+
}
|
|
14866
|
+
notation = notation.trim();
|
|
14867
|
+
if (!validateEntityName(notation)) throw new Error(`Invalid notation name: "${notation}"`);
|
|
14868
|
+
allowedNotations.push(notation);
|
|
14869
|
+
if ("|" === xmlData[i]) {
|
|
14870
|
+
i++;
|
|
14871
|
+
i = skipWhitespace(xmlData, i);
|
|
14872
|
+
}
|
|
14873
|
+
}
|
|
14874
|
+
if (")" !== xmlData[i]) throw new Error("Unterminated list of notations");
|
|
14875
|
+
i++;
|
|
14876
|
+
attributeType += " (" + allowedNotations.join("|") + ")";
|
|
14877
|
+
} else {
|
|
14878
|
+
while(i < xmlData.length && !/\s/.test(xmlData[i])){
|
|
14879
|
+
attributeType += xmlData[i];
|
|
14880
|
+
i++;
|
|
14881
|
+
}
|
|
14882
|
+
const validTypes = [
|
|
14883
|
+
"CDATA",
|
|
14884
|
+
"ID",
|
|
14885
|
+
"IDREF",
|
|
14886
|
+
"IDREFS",
|
|
14887
|
+
"ENTITY",
|
|
14888
|
+
"ENTITIES",
|
|
14889
|
+
"NMTOKEN",
|
|
14890
|
+
"NMTOKENS"
|
|
14891
|
+
];
|
|
14892
|
+
if (!this.suppressValidationErr && !validTypes.includes(attributeType.toUpperCase())) throw new Error(`Invalid attribute type: "${attributeType}"`);
|
|
14893
|
+
}
|
|
14894
|
+
i = skipWhitespace(xmlData, i);
|
|
14895
|
+
let defaultValue = "";
|
|
14896
|
+
if ("#REQUIRED" === xmlData.substring(i, i + 8).toUpperCase()) {
|
|
14897
|
+
defaultValue = "#REQUIRED";
|
|
14898
|
+
i += 8;
|
|
14899
|
+
} else if ("#IMPLIED" === xmlData.substring(i, i + 7).toUpperCase()) {
|
|
14900
|
+
defaultValue = "#IMPLIED";
|
|
14901
|
+
i += 7;
|
|
14902
|
+
} else [i, defaultValue] = this.readIdentifierVal(xmlData, i, "ATTLIST");
|
|
14903
|
+
return {
|
|
14904
|
+
elementName,
|
|
14905
|
+
attributeName,
|
|
14906
|
+
attributeType,
|
|
14907
|
+
defaultValue,
|
|
14908
|
+
index: i
|
|
14909
|
+
};
|
|
14910
|
+
}
|
|
14837
14911
|
}
|
|
14912
|
+
const skipWhitespace = (data, index)=>{
|
|
14913
|
+
while(index < data.length && /\s/.test(data[index]))index++;
|
|
14914
|
+
return index;
|
|
14915
|
+
};
|
|
14838
14916
|
function hasSeq(data, seq, i) {
|
|
14839
14917
|
for(let j = 0; j < seq.length; j++)if (seq[j] !== data[i + j + 1]) return false;
|
|
14840
14918
|
return true;
|
|
@@ -15085,6 +15163,7 @@ and limitations under the License.
|
|
|
15085
15163
|
let currentNode = xmlObj;
|
|
15086
15164
|
let textData = "";
|
|
15087
15165
|
let jPath = "";
|
|
15166
|
+
const docTypeReader = new DocTypeReader(this.options.processEntities);
|
|
15088
15167
|
for(let i = 0; i < xmlData.length; i++){
|
|
15089
15168
|
const ch = xmlData[i];
|
|
15090
15169
|
if ('<' === ch) if ('/' === xmlData[i + 1]) {
|
|
@@ -15132,7 +15211,7 @@ and limitations under the License.
|
|
|
15132
15211
|
}
|
|
15133
15212
|
i = endIndex;
|
|
15134
15213
|
} else if ('!D' === xmlData.substr(i + 1, 2)) {
|
|
15135
|
-
const result = readDocType(xmlData, i);
|
|
15214
|
+
const result = docTypeReader.readDocType(xmlData, i);
|
|
15136
15215
|
this.docTypeEntities = result.entities;
|
|
15137
15216
|
i = result.i;
|
|
15138
15217
|
} else if ('![' === xmlData.substr(i + 1, 2)) {
|
|
@@ -15651,9 +15730,8 @@ and limitations under the License.
|
|
|
15651
15730
|
this.options = buildOptions(options);
|
|
15652
15731
|
}
|
|
15653
15732
|
parse(xmlData, validationOption) {
|
|
15654
|
-
if ("string"
|
|
15655
|
-
else if (xmlData
|
|
15656
|
-
else throw new Error("XML data is accepted in String or Bytes[] form.");
|
|
15733
|
+
if ("string" != typeof xmlData && xmlData.toString) xmlData = xmlData.toString();
|
|
15734
|
+
else if ("string" != typeof xmlData) throw new Error("XML data is accepted in String or Bytes[] form.");
|
|
15657
15735
|
if (validationOption) {
|
|
15658
15736
|
if (true === validationOption) validationOption = {};
|
|
15659
15737
|
const result = validate(xmlData, validationOption);
|
|
@@ -16156,7 +16234,7 @@ and limitations under the License.
|
|
|
16156
16234
|
const protoInt64 = /*@__PURE__*/ makeInt64Support();
|
|
16157
16235
|
function makeInt64Support() {
|
|
16158
16236
|
const dv = new DataView(new ArrayBuffer(8));
|
|
16159
|
-
const ok = "function" == typeof BigInt && "function" == typeof dv.getBigInt64 && "function" == typeof dv.getBigUint64 && "function" == typeof dv.setBigInt64 && "function" == typeof dv.setBigUint64 && ("object" != typeof process || "object" != typeof process.env || "1" !== process.env.BUF_BIGINT_DISABLE);
|
|
16237
|
+
const ok = "function" == typeof BigInt && "function" == typeof dv.getBigInt64 && "function" == typeof dv.getBigUint64 && "function" == typeof dv.setBigInt64 && "function" == typeof dv.setBigUint64 && (!!globalThis.Deno || "object" != typeof process || "object" != typeof process.env || "1" !== process.env.BUF_BIGINT_DISABLE);
|
|
16160
16238
|
if (ok) {
|
|
16161
16239
|
const MIN = BigInt("-9223372036854775808");
|
|
16162
16240
|
const MAX = BigInt("9223372036854775807");
|
|
@@ -18083,6 +18161,16 @@ and limitations under the License.
|
|
|
18083
18161
|
jsonFormat: 1,
|
|
18084
18162
|
enforceNamingStyle: 2,
|
|
18085
18163
|
defaultSymbolVisibility: 1
|
|
18164
|
+
},
|
|
18165
|
+
1001: {
|
|
18166
|
+
fieldPresence: 1,
|
|
18167
|
+
enumType: 1,
|
|
18168
|
+
repeatedFieldEncoding: 1,
|
|
18169
|
+
utf8Validation: 2,
|
|
18170
|
+
messageEncoding: 1,
|
|
18171
|
+
jsonFormat: 1,
|
|
18172
|
+
enforceNamingStyle: 1,
|
|
18173
|
+
defaultSymbolVisibility: 2
|
|
18086
18174
|
}
|
|
18087
18175
|
};
|
|
18088
18176
|
function addFile(proto, reg) {
|
|
@@ -19586,7 +19674,10 @@ and limitations under the License.
|
|
|
19586
19674
|
number: 10,
|
|
19587
19675
|
type: 8,
|
|
19588
19676
|
label: 1,
|
|
19589
|
-
defaultValue: "false"
|
|
19677
|
+
defaultValue: "false",
|
|
19678
|
+
options: {
|
|
19679
|
+
deprecated: true
|
|
19680
|
+
}
|
|
19590
19681
|
},
|
|
19591
19682
|
{
|
|
19592
19683
|
name: "debug_redact",
|
|
@@ -20890,7 +20981,7 @@ and limitations under the License.
|
|
|
20890
20981
|
function timestamp_timestampMs(timestamp) {
|
|
20891
20982
|
return 1000 * Number(timestamp.seconds) + Math.round(timestamp.nanos / 1000000);
|
|
20892
20983
|
}
|
|
20893
|
-
var package_namespaceObject = JSON.parse('{"
|
|
20984
|
+
var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"0.9.5","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
|
|
20894
20985
|
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
20895
20986
|
const DmSegMobileReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 30);
|
|
20896
20987
|
const DmWebViewReplySchema = /*@__PURE__*/ message_messageDesc(file_bili_dm, 39);
|
|
@@ -23247,16 +23338,16 @@ and limitations under the License.
|
|
|
23247
23338
|
}({});
|
|
23248
23339
|
const ExtraDanUniChapterTypeDict = {
|
|
23249
23340
|
chs: {
|
|
23250
|
-
ch:
|
|
23251
|
-
rev:
|
|
23252
|
-
op:
|
|
23253
|
-
int:
|
|
23254
|
-
ed:
|
|
23255
|
-
prvw:
|
|
23256
|
-
cut:
|
|
23257
|
-
dup:
|
|
23258
|
-
biz:
|
|
23259
|
-
promo:
|
|
23341
|
+
ch: '其它片段',
|
|
23342
|
+
rev: '回顾',
|
|
23343
|
+
op: '片头',
|
|
23344
|
+
int: '中场',
|
|
23345
|
+
ed: '片尾',
|
|
23346
|
+
prvw: '预告',
|
|
23347
|
+
cut: '删减',
|
|
23348
|
+
dup: '补档',
|
|
23349
|
+
biz: '商业广告',
|
|
23350
|
+
promo: '推广'
|
|
23260
23351
|
}
|
|
23261
23352
|
};
|
|
23262
23353
|
var dm_gen_ExtraDanUniChapterAction = /*#__PURE__*/ function(ExtraDanUniChapterAction) {
|
|
@@ -23355,22 +23446,27 @@ and limitations under the License.
|
|
|
23355
23446
|
minify() {
|
|
23356
23447
|
const def = UniDM.create();
|
|
23357
23448
|
const dan = UniDM.create(this);
|
|
23358
|
-
|
|
23359
|
-
|
|
23360
|
-
|
|
23361
|
-
if (
|
|
23362
|
-
|
|
23363
|
-
|
|
23364
|
-
|
|
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
|
+
};
|
|
23457
|
+
const result = {
|
|
23458
|
+
SOID: dan.SOID
|
|
23459
|
+
};
|
|
23460
|
+
for (const key of Object.keys(dan)){
|
|
23461
|
+
const value = dan[key];
|
|
23462
|
+
if (shouldKeep(key, value)) {
|
|
23463
|
+
if ('SOID' === key) continue;
|
|
23464
|
+
Reflect.set(result, key, value);
|
|
23365
23465
|
}
|
|
23366
|
-
else delete dan[k];
|
|
23367
23466
|
}
|
|
23368
|
-
return
|
|
23467
|
+
return result;
|
|
23369
23468
|
}
|
|
23370
|
-
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {
|
|
23371
|
-
include: [],
|
|
23372
|
-
exclude: []
|
|
23373
|
-
}) {
|
|
23469
|
+
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
|
|
23374
23470
|
if (!this.extra) return this;
|
|
23375
23471
|
{
|
|
23376
23472
|
if (!include) include = [];
|
|
@@ -23385,16 +23481,16 @@ and limitations under the License.
|
|
|
23385
23481
|
clone.content = `${this.content} x${merge.count}`;
|
|
23386
23482
|
} else if (danuni.chapter) {
|
|
23387
23483
|
const chapter = danuni.chapter;
|
|
23388
|
-
if ("cut" === chapter.type) clone.content = `[
|
|
23389
|
-
else if ("dup" === chapter.type) clone.content = `[
|
|
23390
|
-
else clone.content = `[
|
|
23484
|
+
if ("cut" === chapter.type) clone.content = `[提示]${clone.platform}源${ExtraDanUniChapterTypeDict.chs[chapter.type]}了${chapter.duration}秒`;
|
|
23485
|
+
else if ("dup" === chapter.type) clone.content = `[提示(${ExtraDanUniChapterTypeDict.chs[chapter.type]})]${clone.platform}源-${chapter.duration}秒`;
|
|
23486
|
+
else clone.content = `[空降(${ExtraDanUniChapterTypeDict.chs[chapter.type]})]${hh_mm_ss_default().fromS(clone.progress + chapter.duration)}`;
|
|
23391
23487
|
}
|
|
23392
23488
|
} else if (check('bili') && clone.extra.bili) {
|
|
23393
23489
|
const bili = clone.extra.bili;
|
|
23394
|
-
if (7 === bili.mode && bili.adv) clone.content = `[B
|
|
23490
|
+
if (7 === bili.mode && bili.adv) clone.content = `[B站高级弹幕]${dm_gen_JSON.parse(bili.adv)[4] || ''}`;
|
|
23395
23491
|
else if (bili.command) {
|
|
23396
23492
|
const command = bili.command;
|
|
23397
|
-
clone.content = `[B
|
|
23493
|
+
clone.content = `[B站指令弹幕]${command.content}`;
|
|
23398
23494
|
clone.fontsize = 36;
|
|
23399
23495
|
}
|
|
23400
23496
|
}
|
|
@@ -23509,7 +23605,7 @@ and limitations under the License.
|
|
|
23509
23605
|
mode,
|
|
23510
23606
|
senderID: senderID.toString(),
|
|
23511
23607
|
ctime: this.transCtime(args.ctime, 's'),
|
|
23512
|
-
weight: args.weight
|
|
23608
|
+
weight: args.weight || (3 === pool ? 1 : 0),
|
|
23513
23609
|
pool,
|
|
23514
23610
|
attr: DMAttrUtils.fromBin(args.attr, platform_PlatformVideoSource.Bilibili),
|
|
23515
23611
|
platform: platform_PlatformVideoSource.Bilibili,
|
|
@@ -23883,7 +23979,7 @@ and limitations under the License.
|
|
|
23883
23979
|
});
|
|
23884
23980
|
const DanUniConvertTipTemplate = {
|
|
23885
23981
|
meassage: 'Converted by DanUni!',
|
|
23886
|
-
version: `JS/TS ${package_namespaceObject.
|
|
23982
|
+
version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
|
|
23887
23983
|
};
|
|
23888
23984
|
class UniPool {
|
|
23889
23985
|
constructor(dans, options = {}, info = {
|
|
@@ -23930,7 +24026,7 @@ and limitations under the License.
|
|
|
23930
24026
|
return stats;
|
|
23931
24027
|
}
|
|
23932
24028
|
getMost(key) {
|
|
23933
|
-
return this.getStat(key).
|
|
24029
|
+
return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
|
|
23934
24030
|
}
|
|
23935
24031
|
get most() {
|
|
23936
24032
|
return {
|
|
@@ -23992,7 +24088,7 @@ and limitations under the License.
|
|
|
23992
24088
|
}
|
|
23993
24089
|
merge(lifetime = 0) {
|
|
23994
24090
|
if (!this.shared.SOID) {
|
|
23995
|
-
console.error("
|
|
24091
|
+
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
23996
24092
|
return this;
|
|
23997
24093
|
}
|
|
23998
24094
|
if (lifetime <= 0) return this;
|
|
@@ -24101,7 +24197,7 @@ and limitations under the License.
|
|
|
24101
24197
|
'str',
|
|
24102
24198
|
'bin'
|
|
24103
24199
|
];
|
|
24104
|
-
const err =
|
|
24200
|
+
const err = '无法识别该文件,请手动指定格式!';
|
|
24105
24201
|
const parseJSON = (json)=>{
|
|
24106
24202
|
try {
|
|
24107
24203
|
if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
|
|
@@ -24175,16 +24271,16 @@ and limitations under the License.
|
|
|
24175
24271
|
const fileStr = new TextDecoder().decode(file);
|
|
24176
24272
|
const prStr = parseStr(fileStr);
|
|
24177
24273
|
if (prStr) return prStr;
|
|
24178
|
-
errmesg = `${err}(
|
|
24274
|
+
errmesg = `${err}(定位: bin->string)`;
|
|
24179
24275
|
} catch {}
|
|
24180
24276
|
} else if (mod.includes('json')) {
|
|
24181
24277
|
const prJSON = parseJSON(file);
|
|
24182
|
-
if (!prJSON) throw new Error(`${err}(
|
|
24278
|
+
if (!prJSON) throw new Error(`${err}(定位: json)`);
|
|
24183
24279
|
return prJSON;
|
|
24184
24280
|
}
|
|
24185
24281
|
} else if (isString(file)) {
|
|
24186
24282
|
const prStr = parseStr(file);
|
|
24187
|
-
if (!prStr) throw new Error(`${err}(
|
|
24283
|
+
if (!prStr) throw new Error(`${err}(定位: string)`);
|
|
24188
24284
|
return prStr;
|
|
24189
24285
|
}
|
|
24190
24286
|
throw new Error(errmesg ?? err);
|
|
@@ -24282,7 +24378,7 @@ and limitations under the License.
|
|
|
24282
24378
|
};
|
|
24283
24379
|
if (options?.avoidSenderIDWithAt) {
|
|
24284
24380
|
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
24285
|
-
if (!ok) throw new Error(
|
|
24381
|
+
if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
|
|
24286
24382
|
}
|
|
24287
24383
|
const builder = new Builder({
|
|
24288
24384
|
ignoreAttributes: false
|
|
@@ -24417,14 +24513,16 @@ and limitations under the License.
|
|
|
24417
24513
|
static fromASS(ass, options) {
|
|
24418
24514
|
return parseAssRawField(ass, options);
|
|
24419
24515
|
}
|
|
24420
|
-
toASS(canvasCtx, options
|
|
24421
|
-
|
|
24422
|
-
|
|
24516
|
+
toASS(canvasCtx, options) {
|
|
24517
|
+
const defaultOptions = {
|
|
24518
|
+
substyle: {}
|
|
24519
|
+
};
|
|
24520
|
+
const finalOptions = options ?? defaultOptions;
|
|
24423
24521
|
const fn = this.shared.SOID;
|
|
24424
24522
|
return generateASS(this, {
|
|
24425
24523
|
filename: fn,
|
|
24426
24524
|
title: fn,
|
|
24427
|
-
...
|
|
24525
|
+
...finalOptions
|
|
24428
24526
|
}, canvasCtx);
|
|
24429
24527
|
}
|
|
24430
24528
|
}
|
|
@@ -24536,7 +24634,7 @@ and limitations under the License.
|
|
|
24536
24634
|
};
|
|
24537
24635
|
};
|
|
24538
24636
|
const measureTextWidthConstructor = (canvasContext)=>{
|
|
24539
|
-
const supportTextMeasure = !!canvasContext.measureText(
|
|
24637
|
+
const supportTextMeasure = !!canvasContext.measureText('中');
|
|
24540
24638
|
if (supportTextMeasure) return (fontName, fontSize, bold, text)=>{
|
|
24541
24639
|
canvasContext.font = `${bold ? 'bold' : 'normal'} ${fontSize}px ${fontName}`;
|
|
24542
24640
|
const textWidth = canvasContext.measureText(text).width;
|
|
@@ -24614,7 +24712,7 @@ and limitations under the License.
|
|
|
24614
24712
|
const layoutDanmaku = (inputList, config, canvasCtx)=>{
|
|
24615
24713
|
const list = [
|
|
24616
24714
|
...UniPool2DanmakuLists(inputList)
|
|
24617
|
-
].
|
|
24715
|
+
].toSorted((x, y)=>x.time - y.time);
|
|
24618
24716
|
const layout = initializeLayout(config, canvasCtx);
|
|
24619
24717
|
return DanmakuList2UniPool(list.map(layout).filter((danmaku)=>!!danmaku));
|
|
24620
24718
|
};
|
|
@@ -24628,7 +24726,7 @@ and limitations under the License.
|
|
|
24628
24726
|
const minorSecond = Math.floor((seconds - integer) * 100);
|
|
24629
24727
|
return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
|
|
24630
24728
|
};
|
|
24631
|
-
const encode = (text)=>text.toString().replaceAll('{',
|
|
24729
|
+
const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
|
|
24632
24730
|
const scrollCommand = ({ start, end, top })=>`\\move(${start},${top},${end},${top})`;
|
|
24633
24731
|
const fixCommand = ({ top, left })=>`\\an8\\pos(${left},${top})`;
|
|
24634
24732
|
const colorCommand = (color)=>`\\c${formatColor(color)}`;
|
|
@@ -24697,7 +24795,7 @@ and limitations under the License.
|
|
|
24697
24795
|
throw new Error(`Unknown danmaku type: ${danmaku.type}`);
|
|
24698
24796
|
}
|
|
24699
24797
|
};
|
|
24700
|
-
const
|
|
24798
|
+
const event_event = (list, config)=>{
|
|
24701
24799
|
const content = [
|
|
24702
24800
|
'[Events]',
|
|
24703
24801
|
'Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text',
|
|
@@ -24708,11 +24806,11 @@ and limitations under the License.
|
|
|
24708
24806
|
];
|
|
24709
24807
|
return content.join('\n');
|
|
24710
24808
|
};
|
|
24711
|
-
const
|
|
24809
|
+
const info_info = ({ playResX, playResY }, { filename, title })=>{
|
|
24712
24810
|
const content = [
|
|
24713
24811
|
'[Script Info]',
|
|
24714
24812
|
`Title: ${title}`,
|
|
24715
|
-
`Original Script:
|
|
24813
|
+
`Original Script: 根据 ${filename} 的弹幕信息,由 ${package_namespaceObject.TB} 生成`,
|
|
24716
24814
|
'ScriptType: v4.00+',
|
|
24717
24815
|
'Collisions: Reverse',
|
|
24718
24816
|
`PlayResX: ${playResX}`,
|
|
@@ -24724,17 +24822,17 @@ and limitations under the License.
|
|
|
24724
24822
|
var lib = __webpack_require__("../../node_modules/.pnpm/browserify-zlib@0.2.0/node_modules/browserify-zlib/lib/index.js");
|
|
24725
24823
|
var base16384_lib = __webpack_require__("../../node_modules/.pnpm/base16384@1.0.0/node_modules/base16384/lib/index.js");
|
|
24726
24824
|
var raw_Buffer = __webpack_require__("../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js")["Buffer"];
|
|
24727
|
-
const compressTypes = [
|
|
24825
|
+
const compressTypes = new Set([
|
|
24728
24826
|
'brotli',
|
|
24729
24827
|
'gzip'
|
|
24730
|
-
];
|
|
24731
|
-
const baseTypes = [
|
|
24828
|
+
]);
|
|
24829
|
+
const baseTypes = new Set([
|
|
24732
24830
|
'base64',
|
|
24733
24831
|
'base18384'
|
|
24734
|
-
];
|
|
24832
|
+
]);
|
|
24735
24833
|
function fromUint16Array(array) {
|
|
24736
24834
|
let result = '';
|
|
24737
|
-
for (const element of array)result += String.
|
|
24835
|
+
for (const element of array)result += String.fromCodePoint(element);
|
|
24738
24836
|
return result;
|
|
24739
24837
|
}
|
|
24740
24838
|
function raw_raw(list, config, context, compressType = 'brotli', baseType = 'base18384') {
|
|
@@ -24757,14 +24855,14 @@ and limitations under the License.
|
|
|
24757
24855
|
{
|
|
24758
24856
|
let compressType = lineCompressType.replace(';RawCompressType: ', '').trim();
|
|
24759
24857
|
let baseType = lineBaseType.replace(';RawBaseType: ', '').trim();
|
|
24760
|
-
if (!compressTypes.
|
|
24761
|
-
if (!baseTypes.
|
|
24858
|
+
if (!compressTypes.has(compressType)) compressType = 'gzip';
|
|
24859
|
+
if (!baseTypes.has(baseType)) baseType = 'base64';
|
|
24762
24860
|
const text = lineRaw.replace(';Raw: ', '').trim();
|
|
24763
|
-
const buffer = 'base64' === baseType ? raw_Buffer.from(text, 'base64') : raw_Buffer.from(base16384_lib.decode(raw_Buffer.from(text, '
|
|
24861
|
+
const buffer = 'base64' === baseType ? raw_Buffer.from(text, 'base64') : raw_Buffer.from(base16384_lib.decode(raw_Buffer.from(text, 'utf8').toString('utf8')));
|
|
24764
24862
|
let decompress;
|
|
24765
24863
|
decompress = 'brotli' === compressType ? (0, lib.brotliDecompressSync)(buffer) : (0, lib.gunzipSync)(buffer);
|
|
24766
24864
|
try {
|
|
24767
|
-
return JSON.parse(decompress.toString('
|
|
24865
|
+
return JSON.parse(decompress.toString('utf8'));
|
|
24768
24866
|
} catch {
|
|
24769
24867
|
return;
|
|
24770
24868
|
}
|
|
@@ -24811,21 +24909,22 @@ and limitations under the License.
|
|
|
24811
24909
|
];
|
|
24812
24910
|
return content.join('\n');
|
|
24813
24911
|
};
|
|
24814
|
-
const
|
|
24912
|
+
const default_context = {
|
|
24815
24913
|
filename: 'unknown',
|
|
24816
24914
|
title: 'unknown'
|
|
24817
|
-
}
|
|
24915
|
+
};
|
|
24916
|
+
const create_ass = (list, rawList, config, context = default_context, rawConfig)=>{
|
|
24818
24917
|
const Elist = UniPool2DanmakuLists(list);
|
|
24819
24918
|
const ErawList = UniPool2DanmakuLists(rawList);
|
|
24820
24919
|
const content = [
|
|
24821
|
-
|
|
24920
|
+
info_info(config, context),
|
|
24822
24921
|
style(config),
|
|
24823
|
-
|
|
24922
|
+
event_event(Elist, config)
|
|
24824
24923
|
];
|
|
24825
24924
|
if (config.includeRaw) content.push(raw_raw(ErawList, config, context, rawConfig?.compressType, rawConfig?.baseType));
|
|
24826
24925
|
return `${content.join('\n\n')}\n`;
|
|
24827
24926
|
};
|
|
24828
|
-
const
|
|
24927
|
+
const getConfig = (overrides = {})=>{
|
|
24829
24928
|
const defaults = {
|
|
24830
24929
|
fontSize: [
|
|
24831
24930
|
25,
|
|
@@ -24861,10 +24960,10 @@ and limitations under the License.
|
|
|
24861
24960
|
return config;
|
|
24862
24961
|
};
|
|
24863
24962
|
function generateASS(danmaku, options, canvasCtx) {
|
|
24864
|
-
const config =
|
|
24963
|
+
const config = getConfig(options.substyle);
|
|
24865
24964
|
const mergedList = danmaku.merge(config.mergeIn);
|
|
24866
24965
|
const layoutList = layoutDanmaku(mergedList, config, canvasCtx);
|
|
24867
|
-
const content =
|
|
24966
|
+
const content = create_ass(layoutList, danmaku, config, {
|
|
24868
24967
|
filename: options?.filename || 'unknown',
|
|
24869
24968
|
title: options?.title || 'unknown'
|
|
24870
24969
|
}, options.raw);
|
|
@@ -24872,15 +24971,15 @@ and limitations under the License.
|
|
|
24872
24971
|
}
|
|
24873
24972
|
function parseAssRawField(ass, options) {
|
|
24874
24973
|
const raw = deRaw(ass);
|
|
24875
|
-
if (
|
|
24876
|
-
return
|
|
24974
|
+
if (raw) return DanmakuList2UniPool(raw.list, options);
|
|
24975
|
+
return UniPool.create();
|
|
24877
24976
|
}
|
|
24878
24977
|
const src_JSON_0 = json_bigint_default()({
|
|
24879
24978
|
useNativeBigInt: true
|
|
24880
24979
|
});
|
|
24881
24980
|
const src_DanUniConvertTipTemplate = {
|
|
24882
24981
|
meassage: 'Converted by DanUni!',
|
|
24883
|
-
version: `JS/TS ${package_namespaceObject.
|
|
24982
|
+
version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
|
|
24884
24983
|
};
|
|
24885
24984
|
class src_UniPool {
|
|
24886
24985
|
constructor(dans, options = {}, info = {
|
|
@@ -24927,7 +25026,7 @@ and limitations under the License.
|
|
|
24927
25026
|
return stats;
|
|
24928
25027
|
}
|
|
24929
25028
|
getMost(key) {
|
|
24930
|
-
return this.getStat(key).
|
|
25029
|
+
return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
|
|
24931
25030
|
}
|
|
24932
25031
|
get most() {
|
|
24933
25032
|
return {
|
|
@@ -24989,7 +25088,7 @@ and limitations under the License.
|
|
|
24989
25088
|
}
|
|
24990
25089
|
merge(lifetime = 0) {
|
|
24991
25090
|
if (!this.shared.SOID) {
|
|
24992
|
-
console.error("
|
|
25091
|
+
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
24993
25092
|
return this;
|
|
24994
25093
|
}
|
|
24995
25094
|
if (lifetime <= 0) return this;
|
|
@@ -25098,7 +25197,7 @@ and limitations under the License.
|
|
|
25098
25197
|
'str',
|
|
25099
25198
|
'bin'
|
|
25100
25199
|
];
|
|
25101
|
-
const err =
|
|
25200
|
+
const err = '无法识别该文件,请手动指定格式!';
|
|
25102
25201
|
const parseJSON = (json)=>{
|
|
25103
25202
|
try {
|
|
25104
25203
|
if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
|
|
@@ -25172,16 +25271,16 @@ and limitations under the License.
|
|
|
25172
25271
|
const fileStr = new TextDecoder().decode(file);
|
|
25173
25272
|
const prStr = parseStr(fileStr);
|
|
25174
25273
|
if (prStr) return prStr;
|
|
25175
|
-
errmesg = `${err}(
|
|
25274
|
+
errmesg = `${err}(定位: bin->string)`;
|
|
25176
25275
|
} catch {}
|
|
25177
25276
|
} else if (mod.includes('json')) {
|
|
25178
25277
|
const prJSON = parseJSON(file);
|
|
25179
|
-
if (!prJSON) throw new Error(`${err}(
|
|
25278
|
+
if (!prJSON) throw new Error(`${err}(定位: json)`);
|
|
25180
25279
|
return prJSON;
|
|
25181
25280
|
}
|
|
25182
25281
|
} else if (isString(file)) {
|
|
25183
25282
|
const prStr = parseStr(file);
|
|
25184
|
-
if (!prStr) throw new Error(`${err}(
|
|
25283
|
+
if (!prStr) throw new Error(`${err}(定位: string)`);
|
|
25185
25284
|
return prStr;
|
|
25186
25285
|
}
|
|
25187
25286
|
throw new Error(errmesg ?? err);
|
|
@@ -25279,7 +25378,7 @@ and limitations under the License.
|
|
|
25279
25378
|
};
|
|
25280
25379
|
if (options?.avoidSenderIDWithAt) {
|
|
25281
25380
|
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
25282
|
-
if (!ok) throw new Error(
|
|
25381
|
+
if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
|
|
25283
25382
|
}
|
|
25284
25383
|
const builder = new Builder({
|
|
25285
25384
|
ignoreAttributes: false
|
|
@@ -25414,14 +25513,16 @@ and limitations under the License.
|
|
|
25414
25513
|
static fromASS(ass, options) {
|
|
25415
25514
|
return parseAssRawField(ass, options);
|
|
25416
25515
|
}
|
|
25417
|
-
toASS(canvasCtx, options
|
|
25418
|
-
|
|
25419
|
-
|
|
25516
|
+
toASS(canvasCtx, options) {
|
|
25517
|
+
const defaultOptions = {
|
|
25518
|
+
substyle: {}
|
|
25519
|
+
};
|
|
25520
|
+
const finalOptions = options ?? defaultOptions;
|
|
25420
25521
|
const fn = this.shared.SOID;
|
|
25421
25522
|
return generateASS(this, {
|
|
25422
25523
|
filename: fn,
|
|
25423
25524
|
title: fn,
|
|
25424
|
-
...
|
|
25525
|
+
...finalOptions
|
|
25425
25526
|
}, canvasCtx);
|
|
25426
25527
|
}
|
|
25427
25528
|
}
|