@dan-uni/dan-any 0.9.3 → 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 +202 -172
- package/dist/index.min.js +211 -186
- package/dist/index.umd.min.js +446 -325
- 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/dist/src/index.d.ts +5 -1
- 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 +61 -37
- 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.js
CHANGED
|
@@ -60,7 +60,7 @@ __webpack_require__.d(dm_gen_namespaceObject, {
|
|
|
60
60
|
Pools: ()=>dm_gen_Pools,
|
|
61
61
|
UniDM: ()=>UniDM
|
|
62
62
|
});
|
|
63
|
-
var package_namespaceObject = JSON.parse('{"
|
|
63
|
+
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"}');
|
|
64
64
|
const file_bili_dm = /*@__PURE__*/ fileDesc("Cg1iaWxpL2RtLnByb3RvEiBiaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MSJkCgZBdmF0YXISCgoCaWQYASABKAkSCwoDdXJsGAIgASgJEkEKC2F2YXRhcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyVHlwZSIjCgZCdWJibGUSDAoEdGV4dBgBIAEoCRILCgN1cmwYAiABKAkixgEKCEJ1YmJsZVYyEgwKBHRleHQYASABKAkSCwoDdXJsGAIgASgJEkEKC2J1YmJsZV90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQnViYmxlVHlwZRIVCg1leHBvc3VyZV9vbmNlGAQgASgIEkUKDWV4cG9zdXJlX3R5cGUYBSABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiWwoGQnV0dG9uEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUiWAoOQnV6endvcmRDb25maWcSRgoIa2V5d29yZHMYASADKAsyNC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdXp6d29yZFNob3dDb25maWcieAoSQnV6endvcmRTaG93Q29uZmlnEgwKBG5hbWUYASABKAkSDgoGc2NoZW1hGAIgASgJEg4KBnNvdXJjZRgDIAEoBRIKCgJpZBgEIAEoAxITCgtidXp6d29yZF9pZBgFIAEoAxITCgtzY2hlbWFfdHlwZRgGIAEoBSJ7CghDaGVja0JveBIMCgR0ZXh0GAEgASgJEjwKBHR5cGUYAiABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja2JveFR5cGUSFQoNZGVmYXVsdF92YWx1ZRgDIAEoCBIMCgRzaG93GAQgASgIIm8KCkNoZWNrQm94VjISDAoEdGV4dBgBIAEoCRI8CgR0eXBlGAIgASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2hlY2tib3hUeXBlEhUKDWRlZmF1bHRfdmFsdWUYAyABKAgiggIKC0NsaWNrQnV0dG9uEhUKDXBvcnRyYWl0X3RleHQYASADKAkSFgoObGFuZHNjYXBlX3RleHQYAiADKAkSGwoTcG9ydHJhaXRfdGV4dF9mb2N1cxgDIAMoCRIcChRsYW5kc2NhcGVfdGV4dF9mb2N1cxgEIAMoCRJBCgtyZW5kZXJfdHlwZRgFIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlJlbmRlclR5cGUSDAoEc2hvdxgGIAEoCBI4CgZidWJibGUYByABKAsyKC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5CdWJibGUiswIKDUNsaWNrQnV0dG9uVjISFQoNcG9ydHJhaXRfdGV4dBgBIAMoCRIWCg5sYW5kc2NhcGVfdGV4dBgCIAMoCRIbChNwb3J0cmFpdF90ZXh0X2ZvY3VzGAMgAygJEhwKFGxhbmRzY2FwZV90ZXh0X2ZvY3VzGAQgAygJEkEKC3JlbmRlcl90eXBlGAUgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIXCg90ZXh0X2lucHV0X3Bvc3QYBiABKAgSFQoNZXhwb3N1cmVfb25jZRgHIAEoCBJFCg1leHBvc3VyZV90eXBlGAggASgOMi4uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwb3N1cmVUeXBlIksKB0NvbW1hbmQSQAoLY29tbWFuZF9kbXMYASADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Db21tYW5kRG0i5gEKCUNvbW1hbmREbRIKCgJpZBgBIAEoAxILCgNvaWQYAiABKAMSCwoDbWlkGAMgASgDEg8KB2NvbW1hbmQYBCABKAkSDwoHY29udGVudBgFIAEoCRIQCghwcm9ncmVzcxgGIAEoBRINCgVjdGltZRgHIAEoCRINCgVtdGltZRgIIAEoCRINCgVleHRyYRgJIAEoCRINCgVpZFN0chgKIAEoCRIMCgR0eXBlGAsgASgFEhMKC2F1dG9fY3JlYXRlGAwgASgIEhIKCmNvdW50X2Rvd24YDSABKAUSDAoEYXR0chgOIAEoBSJQCg1EYW5tYWt1QUlGbGFnEj8KCGRtX2ZsYWdzGAEgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUZsYWciiwMKC0Rhbm1ha3VFbGVtEgoKAmlkGAEgASgDEhAKCHByb2dyZXNzGAIgASgFEgwKBG1vZGUYAyABKAUSEAoIZm9udHNpemUYBCABKAUSPwoFY29sb3IYBSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIQCghtaWRfaGFzaBgGIAEoCRIPCgdjb250ZW50GAcgASgJEg0KBWN0aW1lGAggASgDEg4KBndlaWdodBgJIAEoBRIOCgZhY3Rpb24YCiABKAkSDAoEcG9vbBgLIAEoBRIOCgZpZF9zdHIYDCABKAkSDAoEYXR0chgNIAEoBRIRCglhbmltYXRpb24YFiABKAkSDQoFZXh0cmEYFyABKAkSQgoIY29sb3JmdWwYGCABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbUNvbG9yZnVsVHlwZRIMCgR0eXBlGBkgASgFEgsKA29pZBgaIAEoAyIpCgtEYW5tYWt1RmxhZxIMCgRkbWlkGAEgASgDEgwKBGZsYWcYAiABKAUiSwoRRGFubWFrdUZsYWdDb25maWcSEAoIcmVjX2ZsYWcYASABKAUSEAoIcmVjX3RleHQYAiABKAkSEgoKcmVjX3N3aXRjaBgDIAEoBSKLBwoYRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnEikKIXBsYXllcl9kYW5tYWt1X3VzZV9kZWZhdWx0X2NvbmZpZxgBIAEoCBIsCiRwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9zd2l0Y2gYBCABKAgSKwojcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWwYBSABKAUSHwoXcGxheWVyX2Rhbm1ha3VfYmxvY2t0b3AYBiABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tzY3JvbGwYByABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tib3R0b20YCCABKAgSJAoccGxheWVyX2Rhbm1ha3VfYmxvY2tjb2xvcmZ1bBgJIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9ibG9ja3JlcGVhdBgKIAEoCBIjChtwbGF5ZXJfZGFubWFrdV9ibG9ja3NwZWNpYWwYCyABKAgSHgoWcGxheWVyX2Rhbm1ha3Vfb3BhY2l0eRgMIAEoAhIkChxwbGF5ZXJfZGFubWFrdV9zY2FsaW5nZmFjdG9yGA0gASgCEh0KFXBsYXllcl9kYW5tYWt1X2RvbWFpbhgOIAEoAhIcChRwbGF5ZXJfZGFubWFrdV9zcGVlZBgPIAEoBRIkChxpbmxpbmVfcGxheWVyX2Rhbm1ha3Vfc3dpdGNoGBAgASgIEikKIXBsYXllcl9kYW5tYWt1X3Nlbmlvcl9tb2RlX3N3aXRjaBgRIAEoBRIuCiZwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92MhgSIAEoBRKYAQoqcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfbGV2ZWxfdjJfbWFwGBMgAygLMmQuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVEZWZhdWx0UGxheWVyQ29uZmlnLlBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EiUKHXBsYXllcl9kYW5tYWt1X2VuYWJsZV9oZXJkX2RtGBQgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEi7AkKEURhbm11UGxheWVyQ29uZmlnEh0KFXBsYXllcl9kYW5tYWt1X3N3aXRjaBgBIAEoCBIiChpwbGF5ZXJfZGFubWFrdV9zd2l0Y2hfc2F2ZRgCIAEoCBIpCiFwbGF5ZXJfZGFubWFrdV91c2VfZGVmYXVsdF9jb25maWcYAyABKAgSLAokcGxheWVyX2Rhbm1ha3VfYWlfcmVjb21tZW5kZWRfc3dpdGNoGAQgASgIEisKI3BsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsGAUgASgFEh8KF3BsYXllcl9kYW5tYWt1X2Jsb2NrdG9wGAYgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2Nrc2Nyb2xsGAcgASgIEiIKGnBsYXllcl9kYW5tYWt1X2Jsb2NrYm90dG9tGAggASgIEiQKHHBsYXllcl9kYW5tYWt1X2Jsb2NrY29sb3JmdWwYCSABKAgSIgoacGxheWVyX2Rhbm1ha3VfYmxvY2tyZXBlYXQYCiABKAgSIwobcGxheWVyX2Rhbm1ha3VfYmxvY2tzcGVjaWFsGAsgASgIEh4KFnBsYXllcl9kYW5tYWt1X29wYWNpdHkYDCABKAISJAoccGxheWVyX2Rhbm1ha3Vfc2NhbGluZ2ZhY3RvchgNIAEoAhIdChVwbGF5ZXJfZGFubWFrdV9kb21haW4YDiABKAISHAoUcGxheWVyX2Rhbm1ha3Vfc3BlZWQYDyABKAUSJgoecGxheWVyX2Rhbm1ha3VfZW5hYmxlYmxvY2tsaXN0GBAgASgIEiQKHGlubGluZV9wbGF5ZXJfZGFubWFrdV9zd2l0Y2gYESABKAgSJAocaW5saW5lX3BsYXllcl9kYW5tYWt1X2NvbmZpZxgSIAEoBRImCh5wbGF5ZXJfZGFubWFrdV9pb3Nfc3dpdGNoX3NhdmUYEyABKAUSKQohcGxheWVyX2Rhbm1ha3Vfc2VuaW9yX21vZGVfc3dpdGNoGBQgASgFEi4KJnBsYXllcl9kYW5tYWt1X2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBUgASgFEpEBCipwbGF5ZXJfZGFubWFrdV9haV9yZWNvbW1lbmRlZF9sZXZlbF92Ml9tYXAYFiADKAsyXS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckNvbmZpZy5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsVjJNYXBFbnRyeRIlCh1wbGF5ZXJfZGFubWFrdV9lbmFibGVfaGVyZF9kbRgXIAEoCBImCh5wbGF5ZXJfZGFubWFrdV9ibG9ja3RvcF9ib3R0b20YGCABKAgSIAoYcGxheWVyX2Rhbm1ha3VfZG9tYWluX3YyGBkgASgFEh4KFnBsYXllcl9kYW5tYWt1X2RlbnNpdHkYGiABKAUSJQodcGxheWVyX2Rhbm1ha3Vfc3VidGl0bGVfcHJvb2YYGyABKAgSIwobcGxheWVyX2Rhbm1ha3VfcGVvcGxlX3Byb29mGBwgASgIGksKKVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMk1hcEVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoBToCOAEiMAoWRGFubXVQbGF5ZXJDb25maWdQYW5lbBIWCg5zZWxlY3Rpb25fdGV4dBgBIAEoCSJLChhEYW5tdVBsYXllckR5bmFtaWNDb25maWcSEAoIcHJvZ3Jlc3MYASABKAUSHQoVcGxheWVyX2Rhbm1ha3VfZG9tYWluGA4gASgCIpADChVEYW5tdVBsYXllclZpZXdDb25maWcSYQodZGFubXVrdV9kZWZhdWx0X3BsYXllcl9jb25maWcYASABKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdURlZmF1bHRQbGF5ZXJDb25maWcSUgoVZGFubXVrdV9wbGF5ZXJfY29uZmlnGAIgASgLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWcSYQodZGFubXVrdV9wbGF5ZXJfZHluYW1pY19jb25maWcYAyADKAsyOi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tdVBsYXllckR5bmFtaWNDb25maWcSXQobZGFubXVrdV9wbGF5ZXJfY29uZmlnX3BhbmVsGAQgASgLMjguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJDb25maWdQYW5lbCKZBQoURGFubXVXZWJQbGF5ZXJDb25maWcSEQoJZG1fc3dpdGNoGAEgASgIEhEKCWFpX3N3aXRjaBgCIAEoCBIQCghhaV9sZXZlbBgDIAEoBRIQCghibG9ja3RvcBgEIAEoCBITCgtibG9ja3Njcm9sbBgFIAEoCBITCgtibG9ja2JvdHRvbRgGIAEoCBISCgpibG9ja2NvbG9yGAcgASgIEhQKDGJsb2Nrc3BlY2lhbBgIIAEoCBIUCgxwcmV2ZW50c2hhZGUYCSABKAgSDQoFZG1hc2sYCiABKAgSDwoHb3BhY2l0eRgLIAEoAhIOCgZkbWFyZWEYDCABKAUSEQoJc3BlZWRwbHVzGA0gASgCEhAKCGZvbnRzaXplGA4gASgCEhIKCnNjcmVlbnN5bmMYDyABKAgSEQoJc3BlZWRzeW5jGBAgASgIEhIKCmZvbnRmYW1pbHkYESABKAkSDAoEYm9sZBgSIAEoCBISCgpmb250Ym9yZGVyGBMgASgFEhEKCWRyYXdfdHlwZRgUIAEoCRIaChJzZW5pb3JfbW9kZV9zd2l0Y2gYFSABKAUSEwoLYWlfbGV2ZWxfdjIYFiABKAUSYQoPYWlfbGV2ZWxfdjJfbWFwGBcgAygLMkguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcuQWlMZXZlbFYyTWFwRW50cnkSFwoPYmxvY2t0b3BfYm90dG9tGBggASgIEhIKCmRtX2FyZWFfdjIYGSABKAUSEgoKZG1fZGVuc2l0eRgaIAEoBRozChFBaUxldmVsVjJNYXBFbnRyeRILCgNrZXkYASABKAUSDQoFdmFsdWUYAiABKAU6AjgBIlkKCkRtQ29sb3JmdWwSPgoEdHlwZRgBIAEoDjIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWxUeXBlEgsKA3NyYxgCIAEoCSJQCg9EbUV4cG9SZXBvcnRSZXESEgoKc2Vzc2lvbl9pZBgBIAEoCRILCgNvaWQYAiABKAMSDQoFZG1pZHMYAyABKAwSDQoFc3BtaWQYBCABKAkiEQoPRG1FeHBvUmVwb3J0UmVzIm0KCkRtSGVyZFZpZXcSGwoTZGlzcGxheV9oZXJkX2RtX251bRgBIAEoBRJCCghoZXJkX2RtcxgCIAMoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlZpZXdIZXJkRG1FbGVtIpYCCgpEbU1hc2tXYWxsEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAxIPCgdjb250ZW50GAMgASgJEk0KDGNvbnRlbnRfdHlwZRgEIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRJFCghiaXpfdHlwZRgFIAEoDjIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxCaXpUeXBlEkUKCGNvbnRlbnRzGAYgAygLMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbENvbnRlbnQiawoRRG1NYXNrV2FsbENvbnRlbnQSRQoEdHlwZRgBIAEoDjI3LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtTWFza1dhbGxDb250ZW50VHlwZRIPCgdjb250ZW50GAIgASgJIs0QChFEbVBsYXllckNvbmZpZ1JlcRIKCgJ0cxgBIAEoAxJFCgZzd2l0Y2gYAiABKAsyNS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1U3dpdGNoEk4KC3N3aXRjaF9zYXZlGAMgASgLMjkuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVN3aXRjaFNhdmUSWwoSdXNlX2RlZmF1bHRfY29uZmlnGAQgASgLMj8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVVzZURlZmF1bHRDb25maWcSYQoVYWlfcmVjb21tZW5kZWRfc3dpdGNoGAUgASgLMkIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRTd2l0Y2gSXwoUYWlfcmVjb21tZW5kZWRfbGV2ZWwYBiABKAsyQS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEkkKCGJsb2NrdG9wGAcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrdG9wEk8KC2Jsb2Nrc2Nyb2xsGAggASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2Nrc2Nyb2xsEk8KC2Jsb2NrYm90dG9tGAkgASgLMjouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUJsb2NrYm90dG9tElMKDWJsb2NrY29sb3JmdWwYCiABKAsyPC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tjb2xvcmZ1bBJPCgtibG9ja3JlcGVhdBgLIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VCbG9ja3JlcGVhdBJRCgxibG9ja3NwZWNpYWwYDCABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEkcKB29wYWNpdHkYDSABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1T3BhY2l0eRJTCg1zY2FsaW5nZmFjdG9yGA4gASgLMjwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdVNjYWxpbmdmYWN0b3ISRQoGZG9tYWluGA8gASgLMjUuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpbhJDCgVzcGVlZBgQIAEoCzI0LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTcGVlZBJXCg9lbmFibGVibG9ja2xpc3QYESABKAsyPi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0El4KGWlubGluZVBsYXllckRhbm1ha3VTd2l0Y2gYEiABKAsyOy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5JbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoElsKEnNlbmlvcl9tb2RlX3N3aXRjaBgTIAEoCzI/LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTZW5pb3JNb2RlU3dpdGNoEmQKF2FpX3JlY29tbWVuZGVkX2xldmVsX3YyGBQgASgLMkMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUFpUmVjb21tZW5kZWRMZXZlbFYyElMKDmVuYWJsZV9oZXJkX2RtGBUgASgLMjsuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRJWCg9ibG9ja3RvcF9ib3R0b20YFiABKAsyPS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SSgoJZG9tYWluX3YyGBcgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUGxheWVyRGFubWFrdURvbWFpblYyEkcKB2RlbnNpdHkYGCABKAsyNi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5QbGF5ZXJEYW5tYWt1RGVuc2l0eRJUCg5zdWJ0aXRsZV9wcm9vZhgZIAEoCzI8LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VTdWJ0aXRsZVByb29mElAKDHBlb3BsZV9wcm9vZhgaIAEoCzI6LmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBsYXllckRhbm1ha3VQZW9wbGVQcm9vZiIvCgtEbVNlZ0NvbmZpZxIRCglwYWdlX3NpemUYASABKAMSDQoFdG90YWwYAiABKAMikQIKEERtU2VnTW9iaWxlUmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBRJACgdhaV9mbGFnGAMgASgLMi8uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubWFrdUFJRmxhZxIVCg1zZWdtZW50X3J1bGVzGAQgAygDEkIKDGNvbG9yZnVsX3NyYxgFIAMoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtQ29sb3JmdWwSEwoLY29udGV4dF9zcmMYBiABKAkiygEKDkRtU2VnTW9iaWxlUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDEhYKDnRlZW5hZ2Vyc19tb2RlGAUgASgFEgoKAnBzGAYgASgDEgoKAnBlGAcgASgDEhEKCXB1bGxfbW9kZRgIIAEoBRISCgpmcm9tX3NjZW5lGAkgASgFEg0KBXNwbWlkGAogASgJEhMKC2NvbnRleHRfZXh0GAsgASgJIlwKDURtU2VnT3R0UmVwbHkSPAoFZWxlbXMYASADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RWxlbRINCgVzdGF0ZRgCIAEoBSJMCgtEbVNlZ090dFJlcRILCgNwaWQYASABKAMSCwoDb2lkGAIgASgDEgwKBHR5cGUYAyABKAUSFQoNc2VnbWVudF9pbmRleBgEIAEoAyJdCg1EbVNlZ1NES1JlcGx5Eg4KBmNsb3NlZBgBIAEoCBI8CgVlbGVtcxgCIAMoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VFbGVtIkwKC0RtU2VnU0RLUmVxEgsKA3BpZBgBIAEoAxILCgNvaWQYAiABKAMSDAoEdHlwZRgDIAEoBRIVCg1zZWdtZW50X2luZGV4GAQgASgDIncKCURtU3ViVmlldxIMCgR0eXBlGAEgASgFEgsKA29pZBgCIAEoAxILCgNwaWQYAyABKAMSQgoLcG9zdF9wYW5lbDIYBCADKAsyLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxWMiKhCQoLRG1WaWV3UmVwbHkSDgoGY2xvc2VkGAEgASgIEjkKBG1hc2sYAiABKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb01hc2sSQQoIc3VidGl0bGUYAyABKAsyLy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5WaWRlb1N1YnRpdGxlEhMKC3NwZWNpYWxfZG1zGAQgAygJEkQKB2FpX2ZsYWcYBSABKAsyMy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EYW5tYWt1RmxhZ0NvbmZpZxJOCg1wbGF5ZXJfY29uZmlnGAYgASgLMjcuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVQbGF5ZXJWaWV3Q29uZmlnEhYKDnNlbmRfYm94X3N0eWxlGAcgASgFEg0KBWFsbG93GAggASgIEhEKCWNoZWNrX2JveBgJIAEoCBIaChJjaGVja19ib3hfc2hvd19tc2cYCiABKAkSGAoQdGV4dF9wbGFjZWhvbGRlchgLIAEoCRIZChFpbnB1dF9wbGFjZWhvbGRlchgMIAEoCRIdChVyZXBvcnRfZmlsdGVyX2NvbnRlbnQYDSADKAkSQQoLZXhwb19yZXBvcnQYDiABKAsyLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvUmVwb3J0EkkKD2J1enp3b3JkX2NvbmZpZxgPIAEoCzIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1enp3b3JkQ29uZmlnEkIKC2V4cHJlc3Npb25zGBAgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgRIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGBIgAygJEkIKC3Bvc3RfcGFuZWwyGBMgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISQgoMZG1fbWFza193YWxsGBQgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1NYXNrV2FsbBI9CgdkbV9oZXJkGBUgASgLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1IZXJkVmlldxI6Cgdjb21tYW5kGBYgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ29tbWFuZBIKCgJrdhgXIAEoCRI+CglzdWJfdmlld3MYGCADKAsyKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVN1YlZpZXcSNgoDcW9lGBkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUW9lSW5mbyJtCglEbVZpZXdSZXESCwoDcGlkGAEgASgDEgsKA29pZBgCIAEoAxIMCgR0eXBlGAMgASgFEg0KBXNwbWlkGAQgASgJEhQKDGlzX2hhcmRfYm9vdBgFIAEoBRITCgtjb250ZXh0X2V4dBgGIAEoCSKBBgoORG1XZWJWaWV3UmVwbHkSDQoFc3RhdGUYASABKAUSDAoEdGV4dBgCIAEoCRIRCgl0ZXh0X3NpZGUYAyABKAkSPQoGZG1fc2dlGAQgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdDb25maWcSQQoEZmxhZxgFIAEoCzIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRhbm1ha3VGbGFnQ29uZmlnEhMKC3NwZWNpYWxfZG1zGAYgAygJEhEKCWNoZWNrX2JveBgHIAEoCBINCgVjb3VudBgIIAEoAxJACgtjb21tYW5kX2RtcxgJIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNvbW1hbmREbRJNCg1wbGF5ZXJfY29uZmlnGAogASgLMjYuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRGFubXVXZWJQbGF5ZXJDb25maWcSHQoVcmVwb3J0X2ZpbHRlcl9jb250ZW50GAsgAygJEkIKC2V4cHJlc3Npb25zGAwgAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbnMSPwoKcG9zdF9wYW5lbBgNIAMoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbBIVCg1hY3Rpdml0eV9tZXRhGA4gAygJEkIKC3Bvc3RfcGFuZWwyGA8gAygLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFBhbmVsVjISPgoJc3ViX3ZpZXdzGBAgAygLMisuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TdWJWaWV3EjYKA3FvZRgRIAEoCzIpLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlFvZUluZm8iKgoKRXhwb1JlcG9ydBIcChRzaG91bGRfcmVwb3J0X2F0X2VuZBgBIAEoCCJkCgpFeHByZXNzaW9uEg8KB2tleXdvcmQYASADKAkSCwoDdXJsGAIgASgJEjgKBnBlcmlvZBgDIAMoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBlcmlvZCJJCgtFeHByZXNzaW9ucxI6CgRkYXRhGAEgAygLMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRXhwcmVzc2lvbiIqChlJbmxpbmVQbGF5ZXJEYW5tYWt1U3dpdGNoEg0KBXZhbHVlGAEgASgIIicKBUxhYmVsEg0KBXRpdGxlGAEgASgJEg8KB2NvbnRlbnQYAiADKAkihwEKB0xhYmVsVjISDQoFdGl0bGUYASABKAkSDwoHY29udGVudBgCIAMoCRIVCg1leHBvc3VyZV9vbmNlGAMgASgIEkUKDWV4cG9zdXJlX3R5cGUYBCABKA4yLi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5FeHBvc3VyZVR5cGUiJAoGUGVyaW9kEg0KBXN0YXJ0GAEgASgDEgsKA2VuZBgCIAEoAyIwCh9QbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZExldmVsEg0KBXZhbHVlGAEgASgFIjIKIVBsYXllckRhbm1ha3VBaVJlY29tbWVuZGVkTGV2ZWxWMhINCgV2YWx1ZRgBIAEoBSIxCiBQbGF5ZXJEYW5tYWt1QWlSZWNvbW1lbmRlZFN3aXRjaBINCgV2YWx1ZRgBIAEoCCIpChhQbGF5ZXJEYW5tYWt1QmxvY2tib3R0b20SDQoFdmFsdWUYASABKAgiKwoaUGxheWVyRGFubWFrdUJsb2NrY29sb3JmdWwSDQoFdmFsdWUYASABKAgiKQoYUGxheWVyRGFubWFrdUJsb2NrcmVwZWF0Eg0KBXZhbHVlGAEgASgIIikKGFBsYXllckRhbm1ha3VCbG9ja3Njcm9sbBINCgV2YWx1ZRgBIAEoCCIqChlQbGF5ZXJEYW5tYWt1QmxvY2tzcGVjaWFsEg0KBXZhbHVlGAEgASgIIiYKFVBsYXllckRhbm1ha3VCbG9ja3RvcBINCgV2YWx1ZRgBIAEoCCIsChtQbGF5ZXJEYW5tYWt1QmxvY2t0b3BCb3R0b20SDQoFdmFsdWUYASABKAgiJQoUUGxheWVyRGFubWFrdURlbnNpdHkSDQoFdmFsdWUYASABKAUiJAoTUGxheWVyRGFubWFrdURvbWFpbhINCgV2YWx1ZRgBIAEoAiImChVQbGF5ZXJEYW5tYWt1RG9tYWluVjISDQoFdmFsdWUYASABKAUiKgoZUGxheWVyRGFubWFrdUVuYWJsZUhlcmREbRINCgV2YWx1ZRgBIAEoCCItChxQbGF5ZXJEYW5tYWt1RW5hYmxlYmxvY2tsaXN0Eg0KBXZhbHVlGAEgASgIIiUKFFBsYXllckRhbm1ha3VPcGFjaXR5Eg0KBXZhbHVlGAEgASgCIikKGFBsYXllckRhbm1ha3VQZW9wbGVQcm9vZhINCgV2YWx1ZRgBIAEoCCIrChpQbGF5ZXJEYW5tYWt1U2NhbGluZ2ZhY3RvchINCgV2YWx1ZRgBIAEoAiIuCh1QbGF5ZXJEYW5tYWt1U2VuaW9yTW9kZVN3aXRjaBINCgV2YWx1ZRgBIAEoBSIjChJQbGF5ZXJEYW5tYWt1U3BlZWQSDQoFdmFsdWUYASABKAUiKwoaUGxheWVyRGFubWFrdVN1YnRpdGxlUHJvb2YSDQoFdmFsdWUYASABKAgiOAoTUGxheWVyRGFubWFrdVN3aXRjaBINCgV2YWx1ZRgBIAEoCBISCgpjYW5faWdub3JlGAIgASgIIigKF1BsYXllckRhbm1ha3VTd2l0Y2hTYXZlEg0KBXZhbHVlGAEgASgIIi4KHVBsYXllckRhbm1ha3VVc2VEZWZhdWx0Q29uZmlnEg0KBXZhbHVlGAEgASgIIowDCglQb3N0UGFuZWwSDQoFc3RhcnQYASABKAMSCwoDZW5kGAIgASgDEhAKCHByaW9yaXR5GAMgASgDEg4KBmJpel9pZBgEIAEoAxJECghiaXpfdHlwZRgFIAEoDjIyLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RQYW5lbEJpelR5cGUSQwoMY2xpY2tfYnV0dG9uGAYgASgLMi0uYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQ2xpY2tCdXR0b24SPwoKdGV4dF9pbnB1dBgHIAEoCzIrLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dBI9CgljaGVja19ib3gYCCABKAsyKi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5DaGVja0JveBI2CgV0b2FzdBgJIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0Iq0ECgtQb3N0UGFuZWxWMhINCgVzdGFydBgBIAEoAxILCgNlbmQYAiABKAMSRAoIYml6X3R5cGUYAyABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Qb3N0UGFuZWxCaXpUeXBlEkUKDGNsaWNrX2J1dHRvbhgEIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNsaWNrQnV0dG9uVjISQQoKdGV4dF9pbnB1dBgFIAEoCzItLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRleHRJbnB1dFYyEj8KCWNoZWNrX2JveBgGIAEoCzIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkNoZWNrQm94VjISOAoFdG9hc3QYByABKAsyKS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5Ub2FzdFYyEjoKBmJ1YmJsZRgIIAEoCzIqLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1YmJsZVYyEjgKBWxhYmVsGAkgASgLMikuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuTGFiZWxWMhJBCgtwb3N0X3N0YXR1cxgKIAEoDjIsLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlBvc3RTdGF0dXMiFwoHUW9lSW5mbxIMCgRpbmZvGAEgASgJIikKCFJlc3BvbnNlEgwKBGNvZGUYASABKAUSDwoHbWVzc2FnZRgCIAEoCSL5AgoMU3VidGl0bGVJdGVtEgoKAmlkGAEgASgDEg4KBmlkX3N0chgCIAEoCRILCgNsYW4YAyABKAkSDwoHbGFuX2RvYxgEIAEoCRIUCgxzdWJ0aXRsZV91cmwYBSABKAkSOgoGYXV0aG9yGAYgASgLMiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVXNlckluZm8SPAoEdHlwZRgHIAEoDjIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlVHlwZRIVCg1sYW5fZG9jX2JyaWVmGAggASgJEkEKB2FpX3R5cGUYCSABKA4yMC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpVHlwZRJFCglhaV9zdGF0dXMYCiABKA4yMi5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5TdWJ0aXRsZUFpU3RhdHVzIugCCglUZXh0SW5wdXQSHAoUcG9ydHJhaXRfcGxhY2Vob2xkZXIYASADKAkSHQoVbGFuZHNjYXBlX3BsYWNlaG9sZGVyGAIgAygJEkEKC3JlbmRlcl90eXBlGAMgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVuZGVyVHlwZRIYChBwbGFjZWhvbGRlcl9wb3N0GAQgASgIEgwKBHNob3cYBSABKAgSOAoGYXZhdGFyGAYgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEkEKC3Bvc3Rfc3RhdHVzGAcgASgOMiwuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUG9zdFN0YXR1cxI2CgVsYWJlbBgIIAEoCzInLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkxhYmVsIvsBCgtUZXh0SW5wdXRWMhIcChRwb3J0cmFpdF9wbGFjZWhvbGRlchgBIAMoCRIdChVsYW5kc2NhcGVfcGxhY2Vob2xkZXIYAiADKAkSQQoLcmVuZGVyX3R5cGUYAyABKA4yLC5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5SZW5kZXJUeXBlEhgKEHBsYWNlaG9sZGVyX3Bvc3QYBCABKAgSOAoGYXZhdGFyGAUgAygLMiguYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuQXZhdGFyEhgKEHRleHRfaW5wdXRfbGltaXQYBiABKAUibwoFVG9hc3QSDAoEdGV4dBgBIAEoCRIQCghkdXJhdGlvbhgCIAEoBRIMCgRzaG93GAMgASgIEjgKBmJ1dHRvbhgEIAEoCzIoLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkJ1dHRvbiJiCg1Ub2FzdEJ1dHRvblYyEgwKBHRleHQYASABKAkSQwoGYWN0aW9uGAIgASgOMjMuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuVG9hc3RGdW5jdGlvblR5cGUicwoHVG9hc3RWMhIMCgR0ZXh0GAEgASgJEhAKCGR1cmF0aW9uGAIgASgFEkgKD3RvYXN0X2J1dHRvbl92MhgDIAEoCzIvLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlRvYXN0QnV0dG9uVjIiXAoIVXNlckluZm8SCwoDbWlkGAEgASgDEgwKBG5hbWUYAiABKAkSCwoDc2V4GAMgASgJEgwKBGZhY2UYBCABKAkSDAoEc2lnbhgFIAEoCRIMCgRyYW5rGAYgASgFIlMKCVZpZGVvTWFzaxILCgNjaWQYASABKAMSDAoEcGxhdBgCIAEoBRILCgNmcHMYAyABKAUSDAoEdGltZRgEIAEoAxIQCghtYXNrX3VybBgFIAEoCSJwCg1WaWRlb1N1YnRpdGxlEgsKA2xhbhgBIAEoCRIPCgdsYW5fZG9jGAIgASgJEkEKCXN1YnRpdGxlcxgDIAMoCzIuLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLlN1YnRpdGxlSXRlbSKSAQoOVmlld0hlcmREbUVsZW0SEAoIaGVyZF9tc2cYASABKAkSFgoOaGVyZF9zdGFydF9jbnQYAiABKAUSFAoMaGVyZF9lbmRfY250GAMgASgFEhIKCnJlZ2V4X3J1bGUYBCABKAkSFgoOc3RhcnRfcHJvZ3Jlc3MYBSABKAUSFAoMZW5kX3Byb2dyZXNzGAYgASgFKjMKCkF2YXRhclR5cGUSEgoOQXZhdGFyVHlwZU5vbmUQABIRCg1BdmF0YXJUeXBlTkZUEAEqWQoKQnViYmxlVHlwZRISCg5CdWJibGVUeXBlTm9uZRAAEhkKFUJ1YmJsZVR5cGVDbGlja0J1dHRvbhABEhwKGEJ1YmJsZVR5cGVEbVNldHRpbmdQYW5lbBACKlgKDENoZWNrYm94VHlwZRIUChBDaGVja2JveFR5cGVOb25lEAASGQoVQ2hlY2tib3hUeXBlRW5jb3VyYWdlEAESFwoTQ2hlY2tib3hUeXBlQ29sb3JETRACKjUKDkRtQ29sb3JmdWxUeXBlEgwKCE5vbmVUeXBlEAASFQoPVmlwR3JhZHVhbENvbG9yEOHUAypgChFEbU1hc2tXYWxsQml6VHlwZRILCgdVbmtub3duEAASBwoDT0dWEAESCgoGQml6UGljEAISCAoETXV0ZRADEgoKBlJlY29yZBAEEgkKBUNsb3VkEAUSCAoEQUlHQxAGKnYKFURtTWFza1dhbGxDb250ZW50VHlwZRIgChxEbU1hc2tXYWxsQ29udGVudFR5cGVVbmtub3duEAASHQoZRG1NYXNrV2FsbENvbnRlbnRUeXBlVGV4dBABEhwKGERtTWFza1dhbGxDb250ZW50VHlwZVBpYxACKjwKDEV4cG9zdXJlVHlwZRIUChBFeHBvc3VyZVR5cGVOb25lEAASFgoSRXhwb3N1cmVUeXBlRE1TZW5kEAEqgwIKEFBvc3RQYW5lbEJpelR5cGUSGAoUUG9zdFBhbmVsQml6VHlwZU5vbmUQABIdChlQb3N0UGFuZWxCaXpUeXBlRW5jb3VyYWdlEAESGwoXUG9zdFBhbmVsQml6VHlwZUNvbG9yRE0QAhIZChVQb3N0UGFuZWxCaXpUeXBlTkZURE0QAxIdChlQb3N0UGFuZWxCaXpUeXBlRnJhZ0Nsb3NlEAQSHQoZUG9zdFBhbmVsQml6VHlwZVJlY29tbWVuZBAFEhwKGFBvc3RQYW5lbEJpelR5cGVQbG90TGVhaxAGEiIKHlBvc3RQYW5lbEJpelR5cGVBbnRpSGFyYXNzbWVudBAHKjgKClBvc3RTdGF0dXMSFAoQUG9zdFN0YXR1c05vcm1hbBAAEhQKEFBvc3RTdGF0dXNDbG9zZWQQASpOCgpSZW5kZXJUeXBlEhIKDlJlbmRlclR5cGVOb25lEAASFAoQUmVuZGVyVHlwZVNpbmdsZRABEhYKElJlbmRlclR5cGVSb3RhdGlvbhACKjYKEFN1YnRpdGxlQWlTdGF0dXMSCAoETm9uZRAAEgwKCEV4cG9zdXJlEAESCgoGQXNzaXN0EAIqKwoOU3VidGl0bGVBaVR5cGUSCgoGTm9ybWFsEAASDQoJVHJhbnNsYXRlEAEqHgoMU3VidGl0bGVUeXBlEgYKAkNDEAASBgoCQUkQASpOChFUb2FzdEZ1bmN0aW9uVHlwZRIZChVUb2FzdEZ1bmN0aW9uVHlwZU5vbmUQABIeChpUb2FzdEZ1bmN0aW9uVHlwZVBvc3RQYW5lbBABMqAFCgJETRJzCgtEbVNlZ01vYmlsZRIwLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnTW9iaWxlUmVxGjIuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1TZWdNb2JpbGVSZXBseRJkCgZEbVZpZXcSKy5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXEaLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVZpZXdSZXBseRJxCg5EbVBsYXllckNvbmZpZxIzLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtUGxheWVyQ29uZmlnUmVxGiouYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuUmVzcG9uc2USagoIRG1TZWdPdHQSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ090dFJlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnT3R0UmVwbHkSagoIRG1TZWdTREsSLS5iaWxpYmlsaS5jb21tdW5pdHkuc2VydmljZS5kbS52MS5EbVNlZ1NES1JlcRovLmJpbGliaWxpLmNvbW11bml0eS5zZXJ2aWNlLmRtLnYxLkRtU2VnU0RLUmVwbHkSdAoMRG1FeHBvUmVwb3J0EjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVxGjEuYmlsaWJpbGkuY29tbXVuaXR5LnNlcnZpY2UuZG0udjEuRG1FeHBvUmVwb3J0UmVzYgZwcm90bzM");
|
|
65
65
|
const DmSegMobileReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 30);
|
|
66
66
|
const DmWebViewReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_bili_dm, 39);
|
|
@@ -216,16 +216,16 @@ var dm_gen_ExtraDanUniChapterType = /*#__PURE__*/ function(ExtraDanUniChapterTyp
|
|
|
216
216
|
}({});
|
|
217
217
|
const ExtraDanUniChapterTypeDict = {
|
|
218
218
|
chs: {
|
|
219
|
-
ch:
|
|
220
|
-
rev:
|
|
221
|
-
op:
|
|
222
|
-
int:
|
|
223
|
-
ed:
|
|
224
|
-
prvw:
|
|
225
|
-
cut:
|
|
226
|
-
dup:
|
|
227
|
-
biz:
|
|
228
|
-
promo:
|
|
219
|
+
ch: '其它片段',
|
|
220
|
+
rev: '回顾',
|
|
221
|
+
op: '片头',
|
|
222
|
+
int: '中场',
|
|
223
|
+
ed: '片尾',
|
|
224
|
+
prvw: '预告',
|
|
225
|
+
cut: '删减',
|
|
226
|
+
dup: '补档',
|
|
227
|
+
biz: '商业广告',
|
|
228
|
+
promo: '推广'
|
|
229
229
|
}
|
|
230
230
|
};
|
|
231
231
|
var dm_gen_ExtraDanUniChapterAction = /*#__PURE__*/ function(ExtraDanUniChapterAction) {
|
|
@@ -324,22 +324,27 @@ class UniDM {
|
|
|
324
324
|
minify() {
|
|
325
325
|
const def = UniDM.create();
|
|
326
326
|
const dan = UniDM.create(this);
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
if (
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
327
|
+
const shouldKeep = (key, value)=>{
|
|
328
|
+
if ('SOID' === key) return true;
|
|
329
|
+
if (null == value) return false;
|
|
330
|
+
if (value === def[key]) return false;
|
|
331
|
+
if ('attr' === key && Array.isArray(value) && 0 === value.length) return false;
|
|
332
|
+
if ('extraStr' === key && '{}' === value) return false;
|
|
333
|
+
return true;
|
|
334
|
+
};
|
|
335
|
+
const result = {
|
|
336
|
+
SOID: dan.SOID
|
|
337
|
+
};
|
|
338
|
+
for (const key of Object.keys(dan)){
|
|
339
|
+
const value = dan[key];
|
|
340
|
+
if (shouldKeep(key, value)) {
|
|
341
|
+
if ('SOID' === key) continue;
|
|
342
|
+
Reflect.set(result, key, value);
|
|
334
343
|
}
|
|
335
|
-
else delete dan[k];
|
|
336
344
|
}
|
|
337
|
-
return
|
|
345
|
+
return result;
|
|
338
346
|
}
|
|
339
|
-
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {
|
|
340
|
-
include: [],
|
|
341
|
-
exclude: []
|
|
342
|
-
}) {
|
|
347
|
+
downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
|
|
343
348
|
if (!this.extra) return this;
|
|
344
349
|
{
|
|
345
350
|
if (!include) include = [];
|
|
@@ -354,16 +359,16 @@ class UniDM {
|
|
|
354
359
|
clone.content = `${this.content} x${merge.count}`;
|
|
355
360
|
} else if (danuni.chapter) {
|
|
356
361
|
const chapter = danuni.chapter;
|
|
357
|
-
if ("cut" === chapter.type) clone.content = `[
|
|
358
|
-
else if ("dup" === chapter.type) clone.content = `[
|
|
359
|
-
else clone.content = `[
|
|
362
|
+
if ("cut" === chapter.type) clone.content = `[提示]${clone.platform}源${ExtraDanUniChapterTypeDict.chs[chapter.type]}了${chapter.duration}秒`;
|
|
363
|
+
else if ("dup" === chapter.type) clone.content = `[提示(${ExtraDanUniChapterTypeDict.chs[chapter.type]})]${clone.platform}源-${chapter.duration}秒`;
|
|
364
|
+
else clone.content = `[空降(${ExtraDanUniChapterTypeDict.chs[chapter.type]})]${hh_mm_ss.fromS(clone.progress + chapter.duration)}`;
|
|
360
365
|
}
|
|
361
366
|
} else if (check('bili') && clone.extra.bili) {
|
|
362
367
|
const bili = clone.extra.bili;
|
|
363
|
-
if (7 === bili.mode && bili.adv) clone.content = `[B
|
|
368
|
+
if (7 === bili.mode && bili.adv) clone.content = `[B站高级弹幕]${dm_gen_JSON.parse(bili.adv)[4] || ''}`;
|
|
364
369
|
else if (bili.command) {
|
|
365
370
|
const command = bili.command;
|
|
366
|
-
clone.content = `[B
|
|
371
|
+
clone.content = `[B站指令弹幕]${command.content}`;
|
|
367
372
|
clone.fontsize = 36;
|
|
368
373
|
}
|
|
369
374
|
}
|
|
@@ -478,7 +483,7 @@ class UniDM {
|
|
|
478
483
|
mode,
|
|
479
484
|
senderID: senderID.toString(),
|
|
480
485
|
ctime: this.transCtime(args.ctime, 's'),
|
|
481
|
-
weight: args.weight
|
|
486
|
+
weight: args.weight || (3 === pool ? 1 : 0),
|
|
482
487
|
pool,
|
|
483
488
|
attr: DMAttrUtils.fromBin(args.attr, platform_PlatformVideoSource.Bilibili),
|
|
484
489
|
platform: platform_PlatformVideoSource.Bilibili,
|
|
@@ -852,7 +857,7 @@ const src_JSON = json_bigint({
|
|
|
852
857
|
});
|
|
853
858
|
const DanUniConvertTipTemplate = {
|
|
854
859
|
meassage: 'Converted by DanUni!',
|
|
855
|
-
version: `JS/TS ${package_namespaceObject.
|
|
860
|
+
version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
|
|
856
861
|
};
|
|
857
862
|
class UniPool {
|
|
858
863
|
constructor(dans, options = {}, info = {
|
|
@@ -899,7 +904,7 @@ class UniPool {
|
|
|
899
904
|
return stats;
|
|
900
905
|
}
|
|
901
906
|
getMost(key) {
|
|
902
|
-
return this.getStat(key).
|
|
907
|
+
return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
|
|
903
908
|
}
|
|
904
909
|
get most() {
|
|
905
910
|
return {
|
|
@@ -961,7 +966,7 @@ class UniPool {
|
|
|
961
966
|
}
|
|
962
967
|
merge(lifetime = 0) {
|
|
963
968
|
if (!this.shared.SOID) {
|
|
964
|
-
console.error("
|
|
969
|
+
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
965
970
|
return this;
|
|
966
971
|
}
|
|
967
972
|
if (lifetime <= 0) return this;
|
|
@@ -1064,8 +1069,13 @@ class UniPool {
|
|
|
1064
1069
|
minify() {
|
|
1065
1070
|
return this.dans.map((d)=>d.minify());
|
|
1066
1071
|
}
|
|
1067
|
-
static import(file, options) {
|
|
1068
|
-
|
|
1072
|
+
static import(file, options, mod) {
|
|
1073
|
+
if (!mod) mod = [
|
|
1074
|
+
'json',
|
|
1075
|
+
'str',
|
|
1076
|
+
'bin'
|
|
1077
|
+
];
|
|
1078
|
+
const err = '无法识别该文件,请手动指定格式!';
|
|
1069
1079
|
const parseJSON = (json)=>{
|
|
1070
1080
|
try {
|
|
1071
1081
|
if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
|
|
@@ -1087,63 +1097,68 @@ class UniPool {
|
|
|
1087
1097
|
} catch {}
|
|
1088
1098
|
};
|
|
1089
1099
|
const parseStr = (file)=>{
|
|
1090
|
-
try {
|
|
1100
|
+
if (mod.includes('json')) try {
|
|
1091
1101
|
if (isJSON(file)) {
|
|
1092
1102
|
const json = src_JSON.parse(file);
|
|
1093
1103
|
return parseJSON(json);
|
|
1094
1104
|
}
|
|
1095
1105
|
} catch {}
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1106
|
+
if (mod.includes('str')) {
|
|
1107
|
+
try {
|
|
1108
|
+
const xmlParser = new XMLParser({
|
|
1109
|
+
ignoreAttributes: false
|
|
1110
|
+
});
|
|
1111
|
+
const xml = xmlParser.parse(file);
|
|
1112
|
+
if (xml?.i?.d) return {
|
|
1113
|
+
pool: this.fromBiliXML(file, options),
|
|
1114
|
+
fmt: 'bili.xml'
|
|
1115
|
+
};
|
|
1116
|
+
} catch {}
|
|
1117
|
+
try {
|
|
1118
|
+
return {
|
|
1119
|
+
pool: this.fromASS(file, options),
|
|
1120
|
+
fmt: 'common.ass'
|
|
1121
|
+
};
|
|
1122
|
+
} catch {}
|
|
1123
|
+
}
|
|
1112
1124
|
};
|
|
1113
1125
|
let errmesg;
|
|
1114
|
-
if (isObject(file))
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1126
|
+
if (isObject(file)) {
|
|
1127
|
+
if (file instanceof ArrayBuffer || file instanceof Uint8Array) {
|
|
1128
|
+
if (mod.includes('bin')) {
|
|
1129
|
+
try {
|
|
1130
|
+
return {
|
|
1131
|
+
pool: this.fromPb(file),
|
|
1132
|
+
fmt: 'danuni.pb.bin'
|
|
1133
|
+
};
|
|
1134
|
+
} catch {}
|
|
1135
|
+
try {
|
|
1136
|
+
return {
|
|
1137
|
+
pool: this.fromBiliGrpc(file),
|
|
1138
|
+
fmt: 'bili.pb.bin'
|
|
1139
|
+
};
|
|
1140
|
+
} catch {}
|
|
1141
|
+
try {
|
|
1142
|
+
return {
|
|
1143
|
+
pool: this.fromBiliCommandGrpc(file),
|
|
1144
|
+
fmt: 'bili.cmd.pb.bin'
|
|
1145
|
+
};
|
|
1146
|
+
} catch {}
|
|
1147
|
+
}
|
|
1148
|
+
try {
|
|
1149
|
+
const fileStr = new TextDecoder().decode(file);
|
|
1150
|
+
const prStr = parseStr(fileStr);
|
|
1151
|
+
if (prStr) return prStr;
|
|
1152
|
+
errmesg = `${err}(定位: bin->string)`;
|
|
1153
|
+
} catch {}
|
|
1154
|
+
} else if (mod.includes('json')) {
|
|
1155
|
+
const prJSON = parseJSON(file);
|
|
1156
|
+
if (!prJSON) throw new Error(`${err}(定位: json)`);
|
|
1157
|
+
return prJSON;
|
|
1158
|
+
}
|
|
1159
|
+
} else if (isString(file)) {
|
|
1145
1160
|
const prStr = parseStr(file);
|
|
1146
|
-
if (!prStr) throw new Error(`${err}(
|
|
1161
|
+
if (!prStr) throw new Error(`${err}(定位: string)`);
|
|
1147
1162
|
return prStr;
|
|
1148
1163
|
}
|
|
1149
1164
|
throw new Error(errmesg ?? err);
|
|
@@ -1241,7 +1256,7 @@ class UniPool {
|
|
|
1241
1256
|
};
|
|
1242
1257
|
if (options?.avoidSenderIDWithAt) {
|
|
1243
1258
|
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
1244
|
-
if (!ok) throw new Error(
|
|
1259
|
+
if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
|
|
1245
1260
|
}
|
|
1246
1261
|
const builder = new XMLBuilder({
|
|
1247
1262
|
ignoreAttributes: false
|
|
@@ -1376,14 +1391,16 @@ class UniPool {
|
|
|
1376
1391
|
static fromASS(ass, options) {
|
|
1377
1392
|
return parseAssRawField(ass, options);
|
|
1378
1393
|
}
|
|
1379
|
-
toASS(canvasCtx, options
|
|
1380
|
-
|
|
1381
|
-
|
|
1394
|
+
toASS(canvasCtx, options) {
|
|
1395
|
+
const defaultOptions = {
|
|
1396
|
+
substyle: {}
|
|
1397
|
+
};
|
|
1398
|
+
const finalOptions = options ?? defaultOptions;
|
|
1382
1399
|
const fn = this.shared.SOID;
|
|
1383
1400
|
return generateASS(this, {
|
|
1384
1401
|
filename: fn,
|
|
1385
1402
|
title: fn,
|
|
1386
|
-
...
|
|
1403
|
+
...finalOptions
|
|
1387
1404
|
}, canvasCtx);
|
|
1388
1405
|
}
|
|
1389
1406
|
}
|
|
@@ -1495,7 +1512,7 @@ const splitGrids = ({ fontSize, padding, playResY, bottomSpace })=>{
|
|
|
1495
1512
|
};
|
|
1496
1513
|
};
|
|
1497
1514
|
const measureTextWidthConstructor = (canvasContext)=>{
|
|
1498
|
-
const supportTextMeasure = !!canvasContext.measureText(
|
|
1515
|
+
const supportTextMeasure = !!canvasContext.measureText('中');
|
|
1499
1516
|
if (supportTextMeasure) return (fontName, fontSize, bold, text)=>{
|
|
1500
1517
|
canvasContext.font = `${bold ? 'bold' : 'normal'} ${fontSize}px ${fontName}`;
|
|
1501
1518
|
const textWidth = canvasContext.measureText(text).width;
|
|
@@ -1573,7 +1590,7 @@ const initializeLayout = (config, canvasCtx)=>{
|
|
|
1573
1590
|
const layoutDanmaku = (inputList, config, canvasCtx)=>{
|
|
1574
1591
|
const list = [
|
|
1575
1592
|
...UniPool2DanmakuLists(inputList)
|
|
1576
|
-
].
|
|
1593
|
+
].toSorted((x, y)=>x.time - y.time);
|
|
1577
1594
|
const layout = initializeLayout(config, canvasCtx);
|
|
1578
1595
|
return DanmakuList2UniPool(list.map(layout).filter((danmaku)=>!!danmaku));
|
|
1579
1596
|
};
|
|
@@ -1587,7 +1604,7 @@ const formatTime = (seconds)=>{
|
|
|
1587
1604
|
const minorSecond = Math.floor((seconds - integer) * 100);
|
|
1588
1605
|
return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
|
|
1589
1606
|
};
|
|
1590
|
-
const encode = (text)=>text.toString().replaceAll('{',
|
|
1607
|
+
const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
|
|
1591
1608
|
const scrollCommand = ({ start, end, top })=>`\\move(${start},${top},${end},${top})`;
|
|
1592
1609
|
const fixCommand = ({ top, left })=>`\\an8\\pos(${left},${top})`;
|
|
1593
1610
|
const colorCommand = (color)=>`\\c${formatColor(color)}`;
|
|
@@ -1656,7 +1673,7 @@ const calculateDanmakuPosition = (danmaku, config)=>{
|
|
|
1656
1673
|
throw new Error(`Unknown danmaku type: ${danmaku.type}`);
|
|
1657
1674
|
}
|
|
1658
1675
|
};
|
|
1659
|
-
const
|
|
1676
|
+
const event_event = (list, config)=>{
|
|
1660
1677
|
const content = [
|
|
1661
1678
|
'[Events]',
|
|
1662
1679
|
'Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text',
|
|
@@ -1667,11 +1684,11 @@ const ass_event = (list, config)=>{
|
|
|
1667
1684
|
];
|
|
1668
1685
|
return content.join('\n');
|
|
1669
1686
|
};
|
|
1670
|
-
const
|
|
1687
|
+
const info_info = ({ playResX, playResY }, { filename, title })=>{
|
|
1671
1688
|
const content = [
|
|
1672
1689
|
'[Script Info]',
|
|
1673
1690
|
`Title: ${title}`,
|
|
1674
|
-
`Original Script:
|
|
1691
|
+
`Original Script: 根据 ${filename} 的弹幕信息,由 ${package_namespaceObject.TB} 生成`,
|
|
1675
1692
|
'ScriptType: v4.00+',
|
|
1676
1693
|
'Collisions: Reverse',
|
|
1677
1694
|
`PlayResX: ${playResX}`,
|
|
@@ -1680,17 +1697,17 @@ const ass_info = ({ playResX, playResY }, { filename, title })=>{
|
|
|
1680
1697
|
];
|
|
1681
1698
|
return content.join('\n');
|
|
1682
1699
|
};
|
|
1683
|
-
const compressTypes = [
|
|
1700
|
+
const compressTypes = new Set([
|
|
1684
1701
|
'brotli',
|
|
1685
1702
|
'gzip'
|
|
1686
|
-
];
|
|
1687
|
-
const baseTypes = [
|
|
1703
|
+
]);
|
|
1704
|
+
const baseTypes = new Set([
|
|
1688
1705
|
'base64',
|
|
1689
1706
|
'base18384'
|
|
1690
|
-
];
|
|
1707
|
+
]);
|
|
1691
1708
|
function fromUint16Array(array) {
|
|
1692
1709
|
let result = '';
|
|
1693
|
-
for (const element of array)result += String.
|
|
1710
|
+
for (const element of array)result += String.fromCodePoint(element);
|
|
1694
1711
|
return result;
|
|
1695
1712
|
}
|
|
1696
1713
|
function raw_raw(list, config, context, compressType = 'brotli', baseType = 'base18384') {
|
|
@@ -1713,14 +1730,14 @@ function deRaw(ass) {
|
|
|
1713
1730
|
{
|
|
1714
1731
|
let compressType = lineCompressType.replace(';RawCompressType: ', '').trim();
|
|
1715
1732
|
let baseType = lineBaseType.replace(';RawBaseType: ', '').trim();
|
|
1716
|
-
if (!compressTypes.
|
|
1717
|
-
if (!baseTypes.
|
|
1733
|
+
if (!compressTypes.has(compressType)) compressType = 'gzip';
|
|
1734
|
+
if (!baseTypes.has(baseType)) baseType = 'base64';
|
|
1718
1735
|
const text = lineRaw.replace(';Raw: ', '').trim();
|
|
1719
|
-
const buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(decode(Buffer.from(text, '
|
|
1736
|
+
const buffer = 'base64' === baseType ? Buffer.from(text, 'base64') : Buffer.from(decode(Buffer.from(text, 'utf8').toString('utf8')));
|
|
1720
1737
|
let decompress;
|
|
1721
1738
|
decompress = 'brotli' === compressType ? brotliDecompressSync(buffer) : gunzipSync(buffer);
|
|
1722
1739
|
try {
|
|
1723
|
-
return JSON.parse(decompress.toString('
|
|
1740
|
+
return JSON.parse(decompress.toString('utf8'));
|
|
1724
1741
|
} catch {
|
|
1725
1742
|
return;
|
|
1726
1743
|
}
|
|
@@ -1767,21 +1784,22 @@ const style = ({ fontName, fontSize, color: configColor, outlineColor, backColor
|
|
|
1767
1784
|
];
|
|
1768
1785
|
return content.join('\n');
|
|
1769
1786
|
};
|
|
1770
|
-
const
|
|
1787
|
+
const default_context = {
|
|
1771
1788
|
filename: 'unknown',
|
|
1772
1789
|
title: 'unknown'
|
|
1773
|
-
}
|
|
1790
|
+
};
|
|
1791
|
+
const create_ass = (list, rawList, config, context = default_context, rawConfig)=>{
|
|
1774
1792
|
const Elist = UniPool2DanmakuLists(list);
|
|
1775
1793
|
const ErawList = UniPool2DanmakuLists(rawList);
|
|
1776
1794
|
const content = [
|
|
1777
|
-
|
|
1795
|
+
info_info(config, context),
|
|
1778
1796
|
style(config),
|
|
1779
|
-
|
|
1797
|
+
event_event(Elist, config)
|
|
1780
1798
|
];
|
|
1781
1799
|
if (config.includeRaw) content.push(raw_raw(ErawList, config, context, rawConfig?.compressType, rawConfig?.baseType));
|
|
1782
1800
|
return `${content.join('\n\n')}\n`;
|
|
1783
1801
|
};
|
|
1784
|
-
const
|
|
1802
|
+
const getConfig = (overrides = {})=>{
|
|
1785
1803
|
const defaults = {
|
|
1786
1804
|
fontSize: [
|
|
1787
1805
|
25,
|
|
@@ -1817,10 +1835,10 @@ const ass_gen_config = (overrides = {})=>{
|
|
|
1817
1835
|
return config;
|
|
1818
1836
|
};
|
|
1819
1837
|
function generateASS(danmaku, options, canvasCtx) {
|
|
1820
|
-
const config =
|
|
1838
|
+
const config = getConfig(options.substyle);
|
|
1821
1839
|
const mergedList = danmaku.merge(config.mergeIn);
|
|
1822
1840
|
const layoutList = layoutDanmaku(mergedList, config, canvasCtx);
|
|
1823
|
-
const content =
|
|
1841
|
+
const content = create_ass(layoutList, danmaku, config, {
|
|
1824
1842
|
filename: options?.filename || 'unknown',
|
|
1825
1843
|
title: options?.title || 'unknown'
|
|
1826
1844
|
}, options.raw);
|
|
@@ -1828,15 +1846,15 @@ function generateASS(danmaku, options, canvasCtx) {
|
|
|
1828
1846
|
}
|
|
1829
1847
|
function parseAssRawField(ass, options) {
|
|
1830
1848
|
const raw = deRaw(ass);
|
|
1831
|
-
if (
|
|
1832
|
-
return
|
|
1849
|
+
if (raw) return DanmakuList2UniPool(raw.list, options);
|
|
1850
|
+
return UniPool.create();
|
|
1833
1851
|
}
|
|
1834
1852
|
const src_JSON_0 = json_bigint({
|
|
1835
1853
|
useNativeBigInt: true
|
|
1836
1854
|
});
|
|
1837
1855
|
const src_DanUniConvertTipTemplate = {
|
|
1838
1856
|
meassage: 'Converted by DanUni!',
|
|
1839
|
-
version: `JS/TS ${package_namespaceObject.
|
|
1857
|
+
version: `JS/TS ${package_namespaceObject.UU} (v${package_namespaceObject.rE})`
|
|
1840
1858
|
};
|
|
1841
1859
|
class src_UniPool {
|
|
1842
1860
|
constructor(dans, options = {}, info = {
|
|
@@ -1883,7 +1901,7 @@ class src_UniPool {
|
|
|
1883
1901
|
return stats;
|
|
1884
1902
|
}
|
|
1885
1903
|
getMost(key) {
|
|
1886
|
-
return this.getStat(key).
|
|
1904
|
+
return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
|
|
1887
1905
|
}
|
|
1888
1906
|
get most() {
|
|
1889
1907
|
return {
|
|
@@ -1945,7 +1963,7 @@ class src_UniPool {
|
|
|
1945
1963
|
}
|
|
1946
1964
|
merge(lifetime = 0) {
|
|
1947
1965
|
if (!this.shared.SOID) {
|
|
1948
|
-
console.error("
|
|
1966
|
+
console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
|
|
1949
1967
|
return this;
|
|
1950
1968
|
}
|
|
1951
1969
|
if (lifetime <= 0) return this;
|
|
@@ -2048,8 +2066,13 @@ class src_UniPool {
|
|
|
2048
2066
|
minify() {
|
|
2049
2067
|
return this.dans.map((d)=>d.minify());
|
|
2050
2068
|
}
|
|
2051
|
-
static import(file, options) {
|
|
2052
|
-
|
|
2069
|
+
static import(file, options, mod) {
|
|
2070
|
+
if (!mod) mod = [
|
|
2071
|
+
'json',
|
|
2072
|
+
'str',
|
|
2073
|
+
'bin'
|
|
2074
|
+
];
|
|
2075
|
+
const err = '无法识别该文件,请手动指定格式!';
|
|
2053
2076
|
const parseJSON = (json)=>{
|
|
2054
2077
|
try {
|
|
2055
2078
|
if (Array.isArray(json) && json.every((d)=>d.SOID)) return {
|
|
@@ -2071,63 +2094,68 @@ class src_UniPool {
|
|
|
2071
2094
|
} catch {}
|
|
2072
2095
|
};
|
|
2073
2096
|
const parseStr = (file)=>{
|
|
2074
|
-
try {
|
|
2097
|
+
if (mod.includes('json')) try {
|
|
2075
2098
|
if (isJSON(file)) {
|
|
2076
2099
|
const json = src_JSON_0.parse(file);
|
|
2077
2100
|
return parseJSON(json);
|
|
2078
2101
|
}
|
|
2079
2102
|
} catch {}
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2103
|
+
if (mod.includes('str')) {
|
|
2104
|
+
try {
|
|
2105
|
+
const xmlParser = new XMLParser({
|
|
2106
|
+
ignoreAttributes: false
|
|
2107
|
+
});
|
|
2108
|
+
const xml = xmlParser.parse(file);
|
|
2109
|
+
if (xml?.i?.d) return {
|
|
2110
|
+
pool: this.fromBiliXML(file, options),
|
|
2111
|
+
fmt: 'bili.xml'
|
|
2112
|
+
};
|
|
2113
|
+
} catch {}
|
|
2114
|
+
try {
|
|
2115
|
+
return {
|
|
2116
|
+
pool: this.fromASS(file, options),
|
|
2117
|
+
fmt: 'common.ass'
|
|
2118
|
+
};
|
|
2119
|
+
} catch {}
|
|
2120
|
+
}
|
|
2096
2121
|
};
|
|
2097
2122
|
let errmesg;
|
|
2098
|
-
if (isObject(file))
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2123
|
+
if (isObject(file)) {
|
|
2124
|
+
if (file instanceof ArrayBuffer || file instanceof Uint8Array) {
|
|
2125
|
+
if (mod.includes('bin')) {
|
|
2126
|
+
try {
|
|
2127
|
+
return {
|
|
2128
|
+
pool: this.fromPb(file),
|
|
2129
|
+
fmt: 'danuni.pb.bin'
|
|
2130
|
+
};
|
|
2131
|
+
} catch {}
|
|
2132
|
+
try {
|
|
2133
|
+
return {
|
|
2134
|
+
pool: this.fromBiliGrpc(file),
|
|
2135
|
+
fmt: 'bili.pb.bin'
|
|
2136
|
+
};
|
|
2137
|
+
} catch {}
|
|
2138
|
+
try {
|
|
2139
|
+
return {
|
|
2140
|
+
pool: this.fromBiliCommandGrpc(file),
|
|
2141
|
+
fmt: 'bili.cmd.pb.bin'
|
|
2142
|
+
};
|
|
2143
|
+
} catch {}
|
|
2144
|
+
}
|
|
2145
|
+
try {
|
|
2146
|
+
const fileStr = new TextDecoder().decode(file);
|
|
2147
|
+
const prStr = parseStr(fileStr);
|
|
2148
|
+
if (prStr) return prStr;
|
|
2149
|
+
errmesg = `${err}(定位: bin->string)`;
|
|
2150
|
+
} catch {}
|
|
2151
|
+
} else if (mod.includes('json')) {
|
|
2152
|
+
const prJSON = parseJSON(file);
|
|
2153
|
+
if (!prJSON) throw new Error(`${err}(定位: json)`);
|
|
2154
|
+
return prJSON;
|
|
2155
|
+
}
|
|
2156
|
+
} else if (isString(file)) {
|
|
2129
2157
|
const prStr = parseStr(file);
|
|
2130
|
-
if (!prStr) throw new Error(`${err}(
|
|
2158
|
+
if (!prStr) throw new Error(`${err}(定位: string)`);
|
|
2131
2159
|
return prStr;
|
|
2132
2160
|
}
|
|
2133
2161
|
throw new Error(errmesg ?? err);
|
|
@@ -2225,7 +2253,7 @@ class src_UniPool {
|
|
|
2225
2253
|
};
|
|
2226
2254
|
if (options?.avoidSenderIDWithAt) {
|
|
2227
2255
|
const ok = this.dans.every((d)=>d.senderID.endsWith(`@${platform_PlatformVideoSource.Bilibili}`));
|
|
2228
|
-
if (!ok) throw new Error(
|
|
2256
|
+
if (!ok) throw new Error('存在其他来源的senderID,请关闭该功能再试!');
|
|
2229
2257
|
}
|
|
2230
2258
|
const builder = new XMLBuilder({
|
|
2231
2259
|
ignoreAttributes: false
|
|
@@ -2360,14 +2388,16 @@ class src_UniPool {
|
|
|
2360
2388
|
static fromASS(ass, options) {
|
|
2361
2389
|
return parseAssRawField(ass, options);
|
|
2362
2390
|
}
|
|
2363
|
-
toASS(canvasCtx, options
|
|
2364
|
-
|
|
2365
|
-
|
|
2391
|
+
toASS(canvasCtx, options) {
|
|
2392
|
+
const defaultOptions = {
|
|
2393
|
+
substyle: {}
|
|
2394
|
+
};
|
|
2395
|
+
const finalOptions = options ?? defaultOptions;
|
|
2366
2396
|
const fn = this.shared.SOID;
|
|
2367
2397
|
return generateASS(this, {
|
|
2368
2398
|
filename: fn,
|
|
2369
2399
|
title: fn,
|
|
2370
|
-
...
|
|
2400
|
+
...finalOptions
|
|
2371
2401
|
}, canvasCtx);
|
|
2372
2402
|
}
|
|
2373
2403
|
}
|