@dan-uni/dan-any 0.7.8 → 0.8.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/dist/index.js +155 -94
- package/dist/index.umd.min.js +310 -10785
- package/dist/src/ass-gen/index.d.ts +3 -2
- package/dist/src/ass-gen/types.d.ts +24 -0
- package/dist/src/ass-gen/util/layout.d.ts +3 -3
- package/dist/src/index.d.ts +62 -17
- package/dist/src/utils/dm-gen.d.ts +6 -2
- package/package.json +4 -5
- package/rslib.config.ts +0 -1
- package/src/ass-gen/__tests__/canvas.test.ts +8 -4
- package/src/ass-gen/__tests__/generate.test.ts +10 -4
- package/src/ass-gen/index.ts +9 -3
- package/src/ass-gen/types.ts +25 -1
- package/src/ass-gen/util/layout.ts +12 -19
- package/src/index.test.ts +26 -11
- package/src/index.ts +105 -43
- 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 +26 -6
package/dist/index.js
CHANGED
|
@@ -5,11 +5,9 @@ import { create, fromBinary, toBinary } from "@bufbuild/protobuf";
|
|
|
5
5
|
import { file_google_protobuf_timestamp, timestampDate, timestampFromDate, timestampNow } from "@bufbuild/protobuf/wkt";
|
|
6
6
|
import { fileDesc, messageDesc as codegenv2_messageDesc } from "@bufbuild/protobuf/codegenv2";
|
|
7
7
|
import { Expose, plainToInstance } from "class-transformer";
|
|
8
|
-
import { IsDate, IsEmail, IsEnum, IsInt, IsNotEmpty, IsNumber, IsOptional, IsString, Max, Min, validateOrReject } from "class-validator";
|
|
8
|
+
import { IsDate, IsEmail, IsEnum, IsInt, IsNotEmpty, IsNumber, IsOptional, IsString, Max, Min, isEmail, validateOrReject } from "class-validator";
|
|
9
9
|
import hh_mm_ss from "hh-mm-ss";
|
|
10
10
|
import jssha from "jssha";
|
|
11
|
-
import { Canvas as external_fabric_Canvas } from "fabric";
|
|
12
|
-
import { StaticCanvas } from "fabric/node";
|
|
13
11
|
import { brotliCompressSync, brotliDecompressSync, gunzipSync, gzipSync } from "node:zlib";
|
|
14
12
|
import { decode, encode as external_base16384_encode } from "base16384";
|
|
15
13
|
var __webpack_require__ = {};
|
|
@@ -62,6 +60,7 @@ __webpack_require__.d(dm_gen_namespaceObject, {
|
|
|
62
60
|
Pools: ()=>dm_gen_Pools,
|
|
63
61
|
UniDM: ()=>UniDM
|
|
64
62
|
});
|
|
63
|
+
var package_namespaceObject = JSON.parse('{"u2":"@dan-uni/dan-any","i8":"0.8.5","e8":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
|
|
65
64
|
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
66
65
|
const DmSegMobileReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 30);
|
|
67
66
|
const DmWebViewReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 39);
|
|
@@ -423,11 +422,13 @@ class UniDM {
|
|
|
423
422
|
}
|
|
424
423
|
return mode;
|
|
425
424
|
}
|
|
426
|
-
static fromBili(args, cid, options) {
|
|
425
|
+
static fromBili(args, cid, options, recSOID) {
|
|
427
426
|
if (args.oid && !cid) cid = args.oid;
|
|
428
|
-
const SOID = `def_${platform_PlatformVideoSource.Bilibili}+${id_gen_UniID.fromBili({
|
|
427
|
+
const SOID = recSOID || `def_${platform_PlatformVideoSource.Bilibili}+${id_gen_UniID.fromBili({
|
|
429
428
|
cid
|
|
430
|
-
})}`, senderID =
|
|
429
|
+
})}`, senderID = isEmail(args.midHash, {
|
|
430
|
+
require_tld: false
|
|
431
|
+
}) ? args.midHash : id_gen_UniID.fromBili({
|
|
431
432
|
midHash: args.midHash
|
|
432
433
|
});
|
|
433
434
|
let mode = 0;
|
|
@@ -524,7 +525,7 @@ class UniDM {
|
|
|
524
525
|
this.color,
|
|
525
526
|
this.ctime.getTime() / 1000,
|
|
526
527
|
this.extra.bili?.pool || this.pool,
|
|
527
|
-
this.senderID,
|
|
528
|
+
options?.avoidSenderIDWithAt ? this.senderID.replaceAll(`@${platform_PlatformVideoSource.Bilibili}`, '') : this.senderID,
|
|
528
529
|
this.extra.bili?.dmid || this.DMID || this.toDMID(),
|
|
529
530
|
this.weight
|
|
530
531
|
].join(',')
|
|
@@ -640,7 +641,7 @@ class UniDM {
|
|
|
640
641
|
color: this.color,
|
|
641
642
|
uid: this.senderID,
|
|
642
643
|
m: this.content,
|
|
643
|
-
cid: Number(this.DMID)
|
|
644
|
+
cid: this.DMID ? Number.parseInt(Buffer.from(this.DMID).toString('hex'), 16) : 0
|
|
644
645
|
};
|
|
645
646
|
}
|
|
646
647
|
constructor(){
|
|
@@ -839,10 +840,17 @@ _ts_decorate([
|
|
|
839
840
|
const src_JSON = json_bigint({
|
|
840
841
|
useNativeBigInt: true
|
|
841
842
|
});
|
|
843
|
+
const DanUniConvertTipTemplate = {
|
|
844
|
+
meassage: 'Converted by DanUni!',
|
|
845
|
+
version: `JS/TS ${package_namespaceObject.u2} (v${package_namespaceObject.i8})`
|
|
846
|
+
};
|
|
842
847
|
class UniPool {
|
|
843
|
-
constructor(dans, options = {}
|
|
848
|
+
constructor(dans, options = {}, info = {
|
|
849
|
+
fromConverted: false
|
|
850
|
+
}){
|
|
844
851
|
this.dans = dans;
|
|
845
852
|
this.options = options;
|
|
853
|
+
this.info = info;
|
|
846
854
|
if (false !== options.dedupe) options.dedupe = true;
|
|
847
855
|
if (this.options.dedupe) this.dedupe();
|
|
848
856
|
}
|
|
@@ -992,15 +1000,21 @@ class UniPool {
|
|
|
992
1000
|
if (dans instanceof UniPool) return new UniPool([
|
|
993
1001
|
...this.dans,
|
|
994
1002
|
...dans.dans
|
|
995
|
-
]
|
|
1003
|
+
], {
|
|
1004
|
+
...this.options,
|
|
1005
|
+
...dans.options
|
|
1006
|
+
}, {
|
|
1007
|
+
...this.info,
|
|
1008
|
+
...dans.info
|
|
1009
|
+
});
|
|
996
1010
|
if (dans instanceof UniDM) return new UniPool([
|
|
997
1011
|
...this.dans,
|
|
998
1012
|
dans
|
|
999
|
-
]);
|
|
1013
|
+
], this.options, this.info);
|
|
1000
1014
|
if (Array.isArray(dans) && dans.every((d)=>d instanceof UniDM)) return new UniPool([
|
|
1001
1015
|
...this.dans,
|
|
1002
1016
|
...dans
|
|
1003
|
-
]);
|
|
1017
|
+
], this.options, this.info);
|
|
1004
1018
|
return this;
|
|
1005
1019
|
}
|
|
1006
1020
|
split(key) {
|
|
@@ -1011,8 +1025,9 @@ class UniPool {
|
|
|
1011
1025
|
return [
|
|
1012
1026
|
...set
|
|
1013
1027
|
].map((v)=>new UniPool(this.dans.filter((d)=>d[key] === v), {
|
|
1028
|
+
...this.options,
|
|
1014
1029
|
dedupe: false
|
|
1015
|
-
}));
|
|
1030
|
+
}, this.info));
|
|
1016
1031
|
}
|
|
1017
1032
|
dedupe() {
|
|
1018
1033
|
if (false !== this.options.dmid) {
|
|
@@ -1123,7 +1138,7 @@ class UniPool {
|
|
|
1123
1138
|
];
|
|
1124
1139
|
}
|
|
1125
1140
|
});
|
|
1126
|
-
return new UniPool(result);
|
|
1141
|
+
return new UniPool(result, this.options, this.info);
|
|
1127
1142
|
}
|
|
1128
1143
|
minify() {
|
|
1129
1144
|
return this.dans.map((d)=>d.minify());
|
|
@@ -1134,14 +1149,14 @@ class UniPool {
|
|
|
1134
1149
|
return this.dans;
|
|
1135
1150
|
case 'danuni.bin':
|
|
1136
1151
|
return this.toPb();
|
|
1152
|
+
case 'bili.xml':
|
|
1153
|
+
return this.toBiliXML();
|
|
1137
1154
|
case 'dplayer.json':
|
|
1138
1155
|
return this.toDplayer();
|
|
1139
1156
|
case 'artplayer.json':
|
|
1140
1157
|
return this.toArtplayer();
|
|
1141
1158
|
case 'ddplay.json':
|
|
1142
1159
|
return this.toDDplay();
|
|
1143
|
-
case 'common.ass':
|
|
1144
|
-
return this.toASS();
|
|
1145
1160
|
default:
|
|
1146
1161
|
{
|
|
1147
1162
|
const message = '(err) Unknown format or unsupported now!';
|
|
@@ -1154,6 +1169,7 @@ class UniPool {
|
|
|
1154
1169
|
const data = fromBinary(DanmakuReplySchema, new Uint8Array(bin));
|
|
1155
1170
|
return new UniPool(data.danmakus.map((d)=>UniDM.create({
|
|
1156
1171
|
...d,
|
|
1172
|
+
progress: d.progress / 1000,
|
|
1157
1173
|
mode: d.mode,
|
|
1158
1174
|
ctime: timestampDate(d.ctime || timestampNow()),
|
|
1159
1175
|
pool: d.pool,
|
|
@@ -1165,7 +1181,7 @@ class UniPool {
|
|
|
1165
1181
|
danmakus: this.dans.map((d)=>({
|
|
1166
1182
|
SOID: d.SOID,
|
|
1167
1183
|
DMID: d.DMID,
|
|
1168
|
-
progress: d.progress,
|
|
1184
|
+
progress: 1000 * d.progress,
|
|
1169
1185
|
mode: d.mode,
|
|
1170
1186
|
fontsize: d.fontsize,
|
|
1171
1187
|
color: d.color,
|
|
@@ -1183,7 +1199,7 @@ class UniPool {
|
|
|
1183
1199
|
static fromBiliXML(xml, options) {
|
|
1184
1200
|
const parser = new XMLParser({
|
|
1185
1201
|
ignoreAttributes: false
|
|
1186
|
-
}), oriData = parser.parse(xml), dans = oriData.i.d;
|
|
1202
|
+
}), oriData = parser.parse(xml), dans = oriData.i.d, fromConverted = !!oriData.danuni, cid = BigInt(oriData.i.chatid);
|
|
1187
1203
|
return new UniPool(dans.map((d)=>{
|
|
1188
1204
|
const p_str = d['@_p'], p_arr = p_str.split(',');
|
|
1189
1205
|
return UniDM.fromBili({
|
|
@@ -1197,18 +1213,24 @@ class UniPool {
|
|
|
1197
1213
|
midHash: p_arr[6],
|
|
1198
1214
|
id: BigInt(p_arr[7]),
|
|
1199
1215
|
weight: Number.parseInt(p_arr[8])
|
|
1200
|
-
},
|
|
1201
|
-
}).filter((d)=>null !== d), options
|
|
1216
|
+
}, cid, options, fromConverted ? oriData.danuni?.data : void 0);
|
|
1217
|
+
}).filter((d)=>null !== d), options, {
|
|
1218
|
+
fromConverted
|
|
1219
|
+
});
|
|
1202
1220
|
}
|
|
1203
|
-
toBiliXML() {
|
|
1221
|
+
toBiliXML(options) {
|
|
1204
1222
|
const genCID = (id)=>{
|
|
1205
1223
|
const UniID = id_gen_UniID.fromString(id);
|
|
1206
1224
|
if (UniID.domain === platform_PlatformVideoSource.Bilibili) {
|
|
1207
1225
|
const cid = UniID.id.replaceAll(`def_${platform_PlatformVideoSource.Bilibili}+`, '');
|
|
1208
1226
|
if (cid) return cid;
|
|
1209
1227
|
}
|
|
1210
|
-
return
|
|
1228
|
+
return !options?.cid || id;
|
|
1211
1229
|
};
|
|
1230
|
+
if (options?.avoidSenderIDWithAt) {
|
|
1231
|
+
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
1232
|
+
if (!ok) throw new Error("\u5B58\u5728\u5176\u4ED6\u6765\u6E90\u7684senderID\uFF0C\u8BF7\u5173\u95ED\u8BE5\u529F\u80FD\u518D\u8BD5\uFF01");
|
|
1233
|
+
}
|
|
1212
1234
|
const builder = new XMLBuilder({
|
|
1213
1235
|
ignoreAttributes: false
|
|
1214
1236
|
});
|
|
@@ -1217,6 +1239,10 @@ class UniPool {
|
|
|
1217
1239
|
'@_version': '1.0',
|
|
1218
1240
|
'@_encoding': 'UTF-8'
|
|
1219
1241
|
},
|
|
1242
|
+
danuni: {
|
|
1243
|
+
...DanUniConvertTipTemplate,
|
|
1244
|
+
data: this.shared.SOID
|
|
1245
|
+
},
|
|
1220
1246
|
i: {
|
|
1221
1247
|
chatserver: 'chat.bilibili.com',
|
|
1222
1248
|
chatid: genCID(this.dans[0].SOID),
|
|
@@ -1225,7 +1251,7 @@ class UniPool {
|
|
|
1225
1251
|
state: 0,
|
|
1226
1252
|
real_name: 0,
|
|
1227
1253
|
source: 'k-v',
|
|
1228
|
-
d: this.dans.map((dan)=>dan.toBiliXML())
|
|
1254
|
+
d: this.dans.map((dan)=>dan.toBiliXML(options))
|
|
1229
1255
|
}
|
|
1230
1256
|
});
|
|
1231
1257
|
}
|
|
@@ -1247,11 +1273,14 @@ class UniPool {
|
|
|
1247
1273
|
mode: d[1],
|
|
1248
1274
|
color: d[2],
|
|
1249
1275
|
midHash: d[3]
|
|
1250
|
-
}, playerID, domain, options)), options
|
|
1276
|
+
}, playerID, domain, options)), options, {
|
|
1277
|
+
fromConverted: !!json.danuni
|
|
1278
|
+
});
|
|
1251
1279
|
}
|
|
1252
1280
|
toDplayer() {
|
|
1253
1281
|
return {
|
|
1254
1282
|
code: 0,
|
|
1283
|
+
danuni: DanUniConvertTipTemplate,
|
|
1255
1284
|
data: this.dans.map((dan)=>{
|
|
1256
1285
|
const d = dan.toDplayer();
|
|
1257
1286
|
return [
|
|
@@ -1265,26 +1294,31 @@ class UniPool {
|
|
|
1265
1294
|
};
|
|
1266
1295
|
}
|
|
1267
1296
|
static fromArtplayer(json, playerID, domain = 'other', options) {
|
|
1268
|
-
return new UniPool(json.map((d)=>UniDM.fromArtplayer({
|
|
1297
|
+
return new UniPool(json.danmuku.map((d)=>UniDM.fromArtplayer({
|
|
1269
1298
|
content: d.text,
|
|
1270
1299
|
progress: d.time || 0,
|
|
1271
1300
|
mode: d.mode || 0,
|
|
1272
1301
|
color: Number((d.color || 'FFFFFF').replace('#', '0x')),
|
|
1273
1302
|
style: d.style
|
|
1274
|
-
}, playerID, domain, options)), options
|
|
1303
|
+
}, playerID, domain, options)), options, {
|
|
1304
|
+
fromConverted: !!json.danuni
|
|
1305
|
+
});
|
|
1275
1306
|
}
|
|
1276
1307
|
toArtplayer() {
|
|
1277
|
-
return
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1308
|
+
return {
|
|
1309
|
+
danuni: DanUniConvertTipTemplate,
|
|
1310
|
+
danmuku: this.dans.map((dan)=>{
|
|
1311
|
+
const d = dan.toArtplayer();
|
|
1312
|
+
return {
|
|
1313
|
+
text: d.content,
|
|
1314
|
+
time: d.progress,
|
|
1315
|
+
mode: d.mode,
|
|
1316
|
+
color: `#${d.color.toString(16).toUpperCase() || 'FFFFFF'}`,
|
|
1317
|
+
border: d.border,
|
|
1318
|
+
style: d.style
|
|
1319
|
+
};
|
|
1320
|
+
})
|
|
1321
|
+
};
|
|
1288
1322
|
}
|
|
1289
1323
|
static fromDDPlay(json, episodeId, options) {
|
|
1290
1324
|
return new UniPool(json.comments.map((d)=>{
|
|
@@ -1297,10 +1331,13 @@ class UniPool {
|
|
|
1297
1331
|
progress: Number.parseFloat(p_arr[0]),
|
|
1298
1332
|
uid: p_arr[3]
|
|
1299
1333
|
}, episodeId, void 0, options);
|
|
1300
|
-
}), options
|
|
1334
|
+
}), options, {
|
|
1335
|
+
fromConverted: !!json.danuni
|
|
1336
|
+
});
|
|
1301
1337
|
}
|
|
1302
1338
|
toDDplay() {
|
|
1303
1339
|
return {
|
|
1340
|
+
danuni: DanUniConvertTipTemplate,
|
|
1304
1341
|
count: this.dans.length,
|
|
1305
1342
|
comments: this.dans.map((dan)=>{
|
|
1306
1343
|
const d = dan.toDDplay();
|
|
@@ -1315,7 +1352,7 @@ class UniPool {
|
|
|
1315
1352
|
static fromASS(ass) {
|
|
1316
1353
|
return parseAssRawField(ass);
|
|
1317
1354
|
}
|
|
1318
|
-
toASS(options = {
|
|
1355
|
+
toASS(canvasCtx, options = {
|
|
1319
1356
|
substyle: {}
|
|
1320
1357
|
}) {
|
|
1321
1358
|
const fn = this.shared.SOID;
|
|
@@ -1323,7 +1360,7 @@ class UniPool {
|
|
|
1323
1360
|
filename: fn,
|
|
1324
1361
|
title: fn,
|
|
1325
1362
|
...options
|
|
1326
|
-
});
|
|
1363
|
+
}, canvasCtx);
|
|
1327
1364
|
}
|
|
1328
1365
|
}
|
|
1329
1366
|
const color_pad = (s)=>s.length < 2 ? `0${s}` : s;
|
|
@@ -1433,18 +1470,7 @@ const splitGrids = ({ fontSize, padding, playResY, bottomSpace })=>{
|
|
|
1433
1470
|
2: arrayOfLength(linesCount, 0)
|
|
1434
1471
|
};
|
|
1435
1472
|
};
|
|
1436
|
-
const
|
|
1437
|
-
let isWeb;
|
|
1438
|
-
try {
|
|
1439
|
-
isWeb = !!window;
|
|
1440
|
-
} catch {
|
|
1441
|
-
isWeb = false;
|
|
1442
|
-
}
|
|
1443
|
-
const Canvas = isWeb ? external_fabric_Canvas : StaticCanvas;
|
|
1444
|
-
const canvasContext = new Canvas(void 0, {
|
|
1445
|
-
width: 50,
|
|
1446
|
-
height: 50
|
|
1447
|
-
}).getContext();
|
|
1473
|
+
const measureTextWidthConstructor = (canvasContext)=>{
|
|
1448
1474
|
const supportTextMeasure = !!canvasContext.measureText("\u4E2D");
|
|
1449
1475
|
if (supportTextMeasure) return (fontName, fontSize, bold, text)=>{
|
|
1450
1476
|
canvasContext.font = `${bold ? 'bold' : 'normal'} ${fontSize}px ${fontName}`;
|
|
@@ -1453,7 +1479,7 @@ const measureTextWidth = (()=>{
|
|
|
1453
1479
|
};
|
|
1454
1480
|
console.warn('[Warn] node-canvas is installed without text measure support, layout may not be correct');
|
|
1455
1481
|
return (_fontName, fontSize, _bold, text)=>text.length * fontSize;
|
|
1456
|
-
}
|
|
1482
|
+
};
|
|
1457
1483
|
const resolveAvailableFixGrid = (grids, time)=>{
|
|
1458
1484
|
for (const [i, grid] of grids.entries())if (grid <= time) return i;
|
|
1459
1485
|
return -1;
|
|
@@ -1466,7 +1492,7 @@ const resolveAvailableScrollGrid = (grids, rectWidth, screenWidth, time, duratio
|
|
|
1466
1492
|
}
|
|
1467
1493
|
return -1;
|
|
1468
1494
|
};
|
|
1469
|
-
const initializeLayout = (config)=>{
|
|
1495
|
+
const initializeLayout = (config, canvasCtx)=>{
|
|
1470
1496
|
const { playResX, playResY, fontName, fontSize, bold, padding, scrollTime, fixTime, bottomSpace } = config;
|
|
1471
1497
|
const [paddingTop, paddingRight, paddingBottom, paddingLeft] = padding;
|
|
1472
1498
|
const defaultFontSize = fontSize[FontSize.NORMAL];
|
|
@@ -1475,7 +1501,7 @@ const initializeLayout = (config)=>{
|
|
|
1475
1501
|
return (danmaku)=>{
|
|
1476
1502
|
const targetGrids = grids[danmaku.type];
|
|
1477
1503
|
const danmakuFontSize = fontSize[danmaku.fontSizeType];
|
|
1478
|
-
const rectWidth =
|
|
1504
|
+
const rectWidth = measureTextWidthConstructor(canvasCtx)(fontName, danmakuFontSize, bold, danmaku.content) + paddingLeft + paddingRight;
|
|
1479
1505
|
const verticalOffset = paddingTop + Math.round((defaultFontSize - danmakuFontSize) / 2);
|
|
1480
1506
|
if (danmaku.type === DanmakuType.SCROLL) {
|
|
1481
1507
|
const scrollGrids = targetGrids;
|
|
@@ -1520,11 +1546,11 @@ const initializeLayout = (config)=>{
|
|
|
1520
1546
|
}
|
|
1521
1547
|
};
|
|
1522
1548
|
};
|
|
1523
|
-
const layoutDanmaku = (inputList, config)=>{
|
|
1549
|
+
const layoutDanmaku = (inputList, config, canvasCtx)=>{
|
|
1524
1550
|
const list = [
|
|
1525
1551
|
...UniPool2DanmakuLists(inputList)
|
|
1526
1552
|
].sort((x, y)=>x.time - y.time);
|
|
1527
|
-
const layout = initializeLayout(config);
|
|
1553
|
+
const layout = initializeLayout(config, canvasCtx);
|
|
1528
1554
|
return DanmakuList2UniPool(list.map(layout).filter((danmaku)=>!!danmaku));
|
|
1529
1555
|
};
|
|
1530
1556
|
const formatTime = (seconds)=>{
|
|
@@ -1617,8 +1643,7 @@ const ass_event = (list, config)=>{
|
|
|
1617
1643
|
];
|
|
1618
1644
|
return content.join('\n');
|
|
1619
1645
|
};
|
|
1620
|
-
|
|
1621
|
-
const info = ({ playResX, playResY }, { filename, title })=>{
|
|
1646
|
+
const ass_info = ({ playResX, playResY }, { filename, title })=>{
|
|
1622
1647
|
const content = [
|
|
1623
1648
|
'[Script Info]',
|
|
1624
1649
|
`Title: ${title}`,
|
|
@@ -1717,7 +1742,7 @@ const ass_create = (list, rawList, config, context = {
|
|
|
1717
1742
|
}, rawConfig)=>{
|
|
1718
1743
|
const Elist = UniPool2DanmakuLists(list), ErawList = UniPool2DanmakuLists(rawList);
|
|
1719
1744
|
const content = [
|
|
1720
|
-
|
|
1745
|
+
ass_info(config, context),
|
|
1721
1746
|
style(config),
|
|
1722
1747
|
ass_event(Elist, config)
|
|
1723
1748
|
];
|
|
@@ -1759,10 +1784,10 @@ const ass_gen_config = (overrides = {})=>{
|
|
|
1759
1784
|
config.backColor = config.backColor && formatColor(hexColorToRGB(config.backColor));
|
|
1760
1785
|
return config;
|
|
1761
1786
|
};
|
|
1762
|
-
function generateASS(danmaku, options) {
|
|
1787
|
+
function generateASS(danmaku, options, canvasCtx) {
|
|
1763
1788
|
const config = ass_gen_config(options.substyle);
|
|
1764
1789
|
const mergedList = danmaku.merge(config.mergeIn);
|
|
1765
|
-
const layoutList = layoutDanmaku(mergedList, config);
|
|
1790
|
+
const layoutList = layoutDanmaku(mergedList, config, canvasCtx);
|
|
1766
1791
|
const content = ass_create(layoutList, danmaku, config, {
|
|
1767
1792
|
filename: options?.filename || 'unknown',
|
|
1768
1793
|
title: options?.title || 'unknown'
|
|
@@ -1777,10 +1802,17 @@ function parseAssRawField(ass) {
|
|
|
1777
1802
|
const src_JSON_0 = json_bigint({
|
|
1778
1803
|
useNativeBigInt: true
|
|
1779
1804
|
});
|
|
1805
|
+
const src_DanUniConvertTipTemplate = {
|
|
1806
|
+
meassage: 'Converted by DanUni!',
|
|
1807
|
+
version: `JS/TS ${package_namespaceObject.u2} (v${package_namespaceObject.i8})`
|
|
1808
|
+
};
|
|
1780
1809
|
class src_UniPool {
|
|
1781
|
-
constructor(dans, options = {}
|
|
1810
|
+
constructor(dans, options = {}, info = {
|
|
1811
|
+
fromConverted: false
|
|
1812
|
+
}){
|
|
1782
1813
|
this.dans = dans;
|
|
1783
1814
|
this.options = options;
|
|
1815
|
+
this.info = info;
|
|
1784
1816
|
if (false !== options.dedupe) options.dedupe = true;
|
|
1785
1817
|
if (this.options.dedupe) this.dedupe();
|
|
1786
1818
|
}
|
|
@@ -1930,15 +1962,21 @@ class src_UniPool {
|
|
|
1930
1962
|
if (dans instanceof src_UniPool) return new src_UniPool([
|
|
1931
1963
|
...this.dans,
|
|
1932
1964
|
...dans.dans
|
|
1933
|
-
]
|
|
1965
|
+
], {
|
|
1966
|
+
...this.options,
|
|
1967
|
+
...dans.options
|
|
1968
|
+
}, {
|
|
1969
|
+
...this.info,
|
|
1970
|
+
...dans.info
|
|
1971
|
+
});
|
|
1934
1972
|
if (dans instanceof UniDM) return new src_UniPool([
|
|
1935
1973
|
...this.dans,
|
|
1936
1974
|
dans
|
|
1937
|
-
]);
|
|
1975
|
+
], this.options, this.info);
|
|
1938
1976
|
if (Array.isArray(dans) && dans.every((d)=>d instanceof UniDM)) return new src_UniPool([
|
|
1939
1977
|
...this.dans,
|
|
1940
1978
|
...dans
|
|
1941
|
-
]);
|
|
1979
|
+
], this.options, this.info);
|
|
1942
1980
|
return this;
|
|
1943
1981
|
}
|
|
1944
1982
|
split(key) {
|
|
@@ -1949,8 +1987,9 @@ class src_UniPool {
|
|
|
1949
1987
|
return [
|
|
1950
1988
|
...set
|
|
1951
1989
|
].map((v)=>new src_UniPool(this.dans.filter((d)=>d[key] === v), {
|
|
1990
|
+
...this.options,
|
|
1952
1991
|
dedupe: false
|
|
1953
|
-
}));
|
|
1992
|
+
}, this.info));
|
|
1954
1993
|
}
|
|
1955
1994
|
dedupe() {
|
|
1956
1995
|
if (false !== this.options.dmid) {
|
|
@@ -2061,7 +2100,7 @@ class src_UniPool {
|
|
|
2061
2100
|
];
|
|
2062
2101
|
}
|
|
2063
2102
|
});
|
|
2064
|
-
return new src_UniPool(result);
|
|
2103
|
+
return new src_UniPool(result, this.options, this.info);
|
|
2065
2104
|
}
|
|
2066
2105
|
minify() {
|
|
2067
2106
|
return this.dans.map((d)=>d.minify());
|
|
@@ -2072,14 +2111,14 @@ class src_UniPool {
|
|
|
2072
2111
|
return this.dans;
|
|
2073
2112
|
case 'danuni.bin':
|
|
2074
2113
|
return this.toPb();
|
|
2114
|
+
case 'bili.xml':
|
|
2115
|
+
return this.toBiliXML();
|
|
2075
2116
|
case 'dplayer.json':
|
|
2076
2117
|
return this.toDplayer();
|
|
2077
2118
|
case 'artplayer.json':
|
|
2078
2119
|
return this.toArtplayer();
|
|
2079
2120
|
case 'ddplay.json':
|
|
2080
2121
|
return this.toDDplay();
|
|
2081
|
-
case 'common.ass':
|
|
2082
|
-
return this.toASS();
|
|
2083
2122
|
default:
|
|
2084
2123
|
{
|
|
2085
2124
|
const message = '(err) Unknown format or unsupported now!';
|
|
@@ -2092,6 +2131,7 @@ class src_UniPool {
|
|
|
2092
2131
|
const data = fromBinary(DanmakuReplySchema, new Uint8Array(bin));
|
|
2093
2132
|
return new src_UniPool(data.danmakus.map((d)=>UniDM.create({
|
|
2094
2133
|
...d,
|
|
2134
|
+
progress: d.progress / 1000,
|
|
2095
2135
|
mode: d.mode,
|
|
2096
2136
|
ctime: timestampDate(d.ctime || timestampNow()),
|
|
2097
2137
|
pool: d.pool,
|
|
@@ -2103,7 +2143,7 @@ class src_UniPool {
|
|
|
2103
2143
|
danmakus: this.dans.map((d)=>({
|
|
2104
2144
|
SOID: d.SOID,
|
|
2105
2145
|
DMID: d.DMID,
|
|
2106
|
-
progress: d.progress,
|
|
2146
|
+
progress: 1000 * d.progress,
|
|
2107
2147
|
mode: d.mode,
|
|
2108
2148
|
fontsize: d.fontsize,
|
|
2109
2149
|
color: d.color,
|
|
@@ -2121,7 +2161,7 @@ class src_UniPool {
|
|
|
2121
2161
|
static fromBiliXML(xml, options) {
|
|
2122
2162
|
const parser = new XMLParser({
|
|
2123
2163
|
ignoreAttributes: false
|
|
2124
|
-
}), oriData = parser.parse(xml), dans = oriData.i.d;
|
|
2164
|
+
}), oriData = parser.parse(xml), dans = oriData.i.d, fromConverted = !!oriData.danuni, cid = BigInt(oriData.i.chatid);
|
|
2125
2165
|
return new src_UniPool(dans.map((d)=>{
|
|
2126
2166
|
const p_str = d['@_p'], p_arr = p_str.split(',');
|
|
2127
2167
|
return UniDM.fromBili({
|
|
@@ -2135,18 +2175,24 @@ class src_UniPool {
|
|
|
2135
2175
|
midHash: p_arr[6],
|
|
2136
2176
|
id: BigInt(p_arr[7]),
|
|
2137
2177
|
weight: Number.parseInt(p_arr[8])
|
|
2138
|
-
},
|
|
2139
|
-
}).filter((d)=>null !== d), options
|
|
2178
|
+
}, cid, options, fromConverted ? oriData.danuni?.data : void 0);
|
|
2179
|
+
}).filter((d)=>null !== d), options, {
|
|
2180
|
+
fromConverted
|
|
2181
|
+
});
|
|
2140
2182
|
}
|
|
2141
|
-
toBiliXML() {
|
|
2183
|
+
toBiliXML(options) {
|
|
2142
2184
|
const genCID = (id)=>{
|
|
2143
2185
|
const UniID = id_gen_UniID.fromString(id);
|
|
2144
2186
|
if (UniID.domain === platform_PlatformVideoSource.Bilibili) {
|
|
2145
2187
|
const cid = UniID.id.replaceAll(`def_${platform_PlatformVideoSource.Bilibili}+`, '');
|
|
2146
2188
|
if (cid) return cid;
|
|
2147
2189
|
}
|
|
2148
|
-
return
|
|
2190
|
+
return !options?.cid || id;
|
|
2149
2191
|
};
|
|
2192
|
+
if (options?.avoidSenderIDWithAt) {
|
|
2193
|
+
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
2194
|
+
if (!ok) throw new Error("\u5B58\u5728\u5176\u4ED6\u6765\u6E90\u7684senderID\uFF0C\u8BF7\u5173\u95ED\u8BE5\u529F\u80FD\u518D\u8BD5\uFF01");
|
|
2195
|
+
}
|
|
2150
2196
|
const builder = new XMLBuilder({
|
|
2151
2197
|
ignoreAttributes: false
|
|
2152
2198
|
});
|
|
@@ -2155,6 +2201,10 @@ class src_UniPool {
|
|
|
2155
2201
|
'@_version': '1.0',
|
|
2156
2202
|
'@_encoding': 'UTF-8'
|
|
2157
2203
|
},
|
|
2204
|
+
danuni: {
|
|
2205
|
+
...src_DanUniConvertTipTemplate,
|
|
2206
|
+
data: this.shared.SOID
|
|
2207
|
+
},
|
|
2158
2208
|
i: {
|
|
2159
2209
|
chatserver: 'chat.bilibili.com',
|
|
2160
2210
|
chatid: genCID(this.dans[0].SOID),
|
|
@@ -2163,7 +2213,7 @@ class src_UniPool {
|
|
|
2163
2213
|
state: 0,
|
|
2164
2214
|
real_name: 0,
|
|
2165
2215
|
source: 'k-v',
|
|
2166
|
-
d: this.dans.map((dan)=>dan.toBiliXML())
|
|
2216
|
+
d: this.dans.map((dan)=>dan.toBiliXML(options))
|
|
2167
2217
|
}
|
|
2168
2218
|
});
|
|
2169
2219
|
}
|
|
@@ -2185,11 +2235,14 @@ class src_UniPool {
|
|
|
2185
2235
|
mode: d[1],
|
|
2186
2236
|
color: d[2],
|
|
2187
2237
|
midHash: d[3]
|
|
2188
|
-
}, playerID, domain, options)), options
|
|
2238
|
+
}, playerID, domain, options)), options, {
|
|
2239
|
+
fromConverted: !!json.danuni
|
|
2240
|
+
});
|
|
2189
2241
|
}
|
|
2190
2242
|
toDplayer() {
|
|
2191
2243
|
return {
|
|
2192
2244
|
code: 0,
|
|
2245
|
+
danuni: src_DanUniConvertTipTemplate,
|
|
2193
2246
|
data: this.dans.map((dan)=>{
|
|
2194
2247
|
const d = dan.toDplayer();
|
|
2195
2248
|
return [
|
|
@@ -2203,26 +2256,31 @@ class src_UniPool {
|
|
|
2203
2256
|
};
|
|
2204
2257
|
}
|
|
2205
2258
|
static fromArtplayer(json, playerID, domain = 'other', options) {
|
|
2206
|
-
return new src_UniPool(json.map((d)=>UniDM.fromArtplayer({
|
|
2259
|
+
return new src_UniPool(json.danmuku.map((d)=>UniDM.fromArtplayer({
|
|
2207
2260
|
content: d.text,
|
|
2208
2261
|
progress: d.time || 0,
|
|
2209
2262
|
mode: d.mode || 0,
|
|
2210
2263
|
color: Number((d.color || 'FFFFFF').replace('#', '0x')),
|
|
2211
2264
|
style: d.style
|
|
2212
|
-
}, playerID, domain, options)), options
|
|
2265
|
+
}, playerID, domain, options)), options, {
|
|
2266
|
+
fromConverted: !!json.danuni
|
|
2267
|
+
});
|
|
2213
2268
|
}
|
|
2214
2269
|
toArtplayer() {
|
|
2215
|
-
return
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2270
|
+
return {
|
|
2271
|
+
danuni: src_DanUniConvertTipTemplate,
|
|
2272
|
+
danmuku: this.dans.map((dan)=>{
|
|
2273
|
+
const d = dan.toArtplayer();
|
|
2274
|
+
return {
|
|
2275
|
+
text: d.content,
|
|
2276
|
+
time: d.progress,
|
|
2277
|
+
mode: d.mode,
|
|
2278
|
+
color: `#${d.color.toString(16).toUpperCase() || 'FFFFFF'}`,
|
|
2279
|
+
border: d.border,
|
|
2280
|
+
style: d.style
|
|
2281
|
+
};
|
|
2282
|
+
})
|
|
2283
|
+
};
|
|
2226
2284
|
}
|
|
2227
2285
|
static fromDDPlay(json, episodeId, options) {
|
|
2228
2286
|
return new src_UniPool(json.comments.map((d)=>{
|
|
@@ -2235,10 +2293,13 @@ class src_UniPool {
|
|
|
2235
2293
|
progress: Number.parseFloat(p_arr[0]),
|
|
2236
2294
|
uid: p_arr[3]
|
|
2237
2295
|
}, episodeId, void 0, options);
|
|
2238
|
-
}), options
|
|
2296
|
+
}), options, {
|
|
2297
|
+
fromConverted: !!json.danuni
|
|
2298
|
+
});
|
|
2239
2299
|
}
|
|
2240
2300
|
toDDplay() {
|
|
2241
2301
|
return {
|
|
2302
|
+
danuni: src_DanUniConvertTipTemplate,
|
|
2242
2303
|
count: this.dans.length,
|
|
2243
2304
|
comments: this.dans.map((dan)=>{
|
|
2244
2305
|
const d = dan.toDDplay();
|
|
@@ -2253,7 +2314,7 @@ class src_UniPool {
|
|
|
2253
2314
|
static fromASS(ass) {
|
|
2254
2315
|
return parseAssRawField(ass);
|
|
2255
2316
|
}
|
|
2256
|
-
toASS(options = {
|
|
2317
|
+
toASS(canvasCtx, options = {
|
|
2257
2318
|
substyle: {}
|
|
2258
2319
|
}) {
|
|
2259
2320
|
const fn = this.shared.SOID;
|
|
@@ -2261,7 +2322,7 @@ class src_UniPool {
|
|
|
2261
2322
|
filename: fn,
|
|
2262
2323
|
title: fn,
|
|
2263
2324
|
...options
|
|
2264
|
-
});
|
|
2325
|
+
}, canvasCtx);
|
|
2265
2326
|
}
|
|
2266
2327
|
}
|
|
2267
2328
|
export { UniDM, dm_gen_namespaceObject as UniDMTools, id_gen_namespaceObject as UniIDTools, src_UniPool as UniPool, platform_namespaceObject as platform };
|