@dan-uni/dan-any 0.9.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -60,11 +60,11 @@ __webpack_require__.d(dm_gen_namespaceObject, {
60
60
  Pools: ()=>dm_gen_Pools,
61
61
  UniDM: ()=>UniDM
62
62
  });
63
- var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"0.9.8","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
63
+ var package_namespaceObject = JSON.parse('{"UU":"@dan-uni/dan-any","rE":"1.0.0","TB":"https://github.com/ani-uni/danuni/tree/master/packages/dan-any#readme"}');
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);
67
- const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLCAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSEAoIcGxhdGZvcm0YDSABKAkSEgoFZXh0cmEYDiABKAlIAIgBAUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
67
+ const file_danuni = /*@__PURE__*/ fileDesc("CgxkYW51bmkucHJvdG8SEWRhbnVuaS5kYW5tYWt1LnYxIjIKCmxpc3REYW5SZXESCgoCSUQYASABKAkSEAoDc2VnGAIgASgFSACIAQFCBgoEX3NlZyLUAgoHRGFubWFrdRIMCgRTT0lEGAEgASgJEgwKBERNSUQYAiABKAkSEAoIcHJvZ3Jlc3MYAyABKAUSJQoEbW9kZRgEIAEoDjIXLmRhbnVuaS5kYW5tYWt1LnYxLk1vZGUSEAoIZm9udHNpemUYBSABKAUSDQoFY29sb3IYBiABKAUSEAoIc2VuZGVySUQYByABKAkSDwoHY29udGVudBgIIAEoCRIpCgVjdGltZRgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDgoGd2VpZ2h0GAogASgFEiUKBHBvb2wYCyABKA4yFy5kYW51bmkuZGFubWFrdS52MS5Qb29sEgwKBGF0dHIYDCADKAkSFQoIcGxhdGZvcm0YDSABKAlIAIgBARISCgVleHRyYRgOIAEoCUgBiAEBQgsKCV9wbGF0Zm9ybUIICgZfZXh0cmEiPAoMRGFubWFrdVJlcGx5EiwKCGRhbm1ha3VzGAEgAygLMhouZGFudW5pLmRhbm1ha3UudjEuRGFubWFrdSo9CgRNb2RlEgoKBk5vcm1hbBAAEgoKBkJvdHRvbRABEgcKA1RvcBACEgsKB1JldmVyc2UQAxIHCgNFeHQQBCopCgRQb29sEgcKA0RlZhAAEgcKA1N1YhABEgcKA0FkdhACEgYKAkl4EAMyXQoORGFubWFrdVNlcnZpY2USSwoHbGlzdERhbhIdLmRhbnVuaS5kYW5tYWt1LnYxLmxpc3REYW5SZXEaHy5kYW51bmkuZGFubWFrdS52MS5EYW5tYWt1UmVwbHkiAFAAYgZwcm90bzM", [
68
68
  file_google_protobuf_timestamp
69
69
  ]);
70
70
  const DanmakuReplySchema = /*@__PURE__*/ codegenv2_messageDesc(file_danuni, 2);
@@ -309,6 +309,7 @@ class UniDM {
309
309
  return this.options.dmid(this);
310
310
  }
311
311
  isSameAs(dan, options) {
312
+ if (this === dan) return true;
312
313
  if (4 === this.mode || 4 === dan.mode) return false;
313
314
  if (!options?.skipDanuniMerge && (this.extra.danuni?.merge || dan.extra.danuni?.merge)) return false;
314
315
  const isSame = (k)=>this[k] === dan[k];
@@ -322,26 +323,22 @@ class UniDM {
322
323
  return checks;
323
324
  }
324
325
  minify() {
325
- const def = UniDM.create();
326
- const dan = UniDM.create(this);
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
- };
326
+ const def = new UniDM();
335
327
  const result = {
336
- SOID: dan.SOID
328
+ SOID: this.SOID
337
329
  };
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);
343
- }
344
- }
330
+ if (this.progress !== def.progress) result.progress = this.progress;
331
+ if (this.mode !== def.mode) result.mode = this.mode;
332
+ if (this.fontsize !== def.fontsize) result.fontsize = this.fontsize;
333
+ if (this.color !== def.color) result.color = this.color;
334
+ if (this.senderID !== def.senderID) result.senderID = this.senderID;
335
+ if (this.content !== def.content) result.content = this.content;
336
+ if (this.weight !== def.weight) result.weight = this.weight;
337
+ if (this.pool !== def.pool) result.pool = this.pool;
338
+ if (this.attr.length > 0) result.attr = this.attr;
339
+ if (void 0 !== this.platform) result.platform = this.platform;
340
+ if (this.extraStr && '{}' !== this.extraStr) result.extraStr = this.extraStr;
341
+ if (void 0 !== this.DMID) result.DMID = this.DMID;
345
342
  return result;
346
343
  }
347
344
  downgradeAdvcancedDan({ include, exclude, cleanExtra = false } = {}) {
@@ -893,46 +890,91 @@ class UniPool {
893
890
  return fn(this);
894
891
  }
895
892
  get shared() {
896
- const isShared = (key)=>this.dans.every((d)=>d[key]);
897
- return {
898
- SOID: isShared('SOID') ? this.dans[0].SOID : void 0,
899
- senderID: isShared('senderID') ? this.dans[0].senderID : void 0,
900
- platform: isShared('platform') ? this.dans[0].platform : void 0,
901
- pool: isShared('pool') ? this.dans[0].pool : void 0,
902
- mode: isShared('mode') ? this.dans[0].mode : void 0,
903
- color: isShared('color') ? this.dans[0].color : void 0
904
- };
893
+ if (0 === this.dans.length) return {};
894
+ const keys = [
895
+ 'SOID',
896
+ 'senderID',
897
+ 'platform',
898
+ 'pool',
899
+ 'mode',
900
+ 'color'
901
+ ];
902
+ const result = {};
903
+ for (const key of keys){
904
+ const sharedVal = this.getShared(key);
905
+ if (void 0 !== sharedVal) result[key] = sharedVal;
906
+ }
907
+ return result;
905
908
  }
906
909
  getShared(key) {
907
- const isShared = (key)=>this.dans.every((d)=>d[key]);
908
- return isShared(key) ? this.dans[0][key] : void 0;
910
+ if (0 === this.dans.length) return;
911
+ const firstVal = this.dans[0][key];
912
+ for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
913
+ return firstVal;
909
914
  }
910
915
  getStat(key) {
911
- const default_stat = [];
912
- const stats = this.dans.reduce((stat, dan)=>{
913
- const valWithCount = stat.find((i)=>i.val === dan[key]);
914
- if (valWithCount) valWithCount.count++;
915
- else stat.push({
916
- val: dan[key],
917
- count: 1
918
- });
919
- return stat;
920
- }, default_stat);
921
- return stats;
916
+ const statMap = new Map();
917
+ for (const dan of this.dans){
918
+ const val = dan[key];
919
+ statMap.set(val, (statMap.get(val) || 0) + 1);
920
+ }
921
+ return statMap;
922
922
  }
923
923
  getMost(key) {
924
- return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
924
+ const stats = this.getStat(key);
925
+ if (0 === stats.size) return {
926
+ val: void 0,
927
+ count: 0
928
+ };
929
+ let mostVal;
930
+ let maxCount = 0;
931
+ for (const [val, count] of stats.entries())if (count > maxCount) {
932
+ maxCount = count;
933
+ mostVal = val;
934
+ }
935
+ return {
936
+ val: mostVal,
937
+ count: maxCount
938
+ };
925
939
  }
926
940
  get most() {
941
+ const keys = [
942
+ 'mode',
943
+ 'fontsize',
944
+ 'color',
945
+ 'senderID',
946
+ 'content',
947
+ 'weight',
948
+ 'pool',
949
+ 'platform'
950
+ ];
951
+ const statMaps = new Map();
952
+ for (const dan of this.dans)for (const key of keys){
953
+ if (!statMaps.has(key)) statMaps.set(key, new Map());
954
+ const statMap = statMaps.get(key);
955
+ const val = dan[key];
956
+ statMap.set(val, (statMap.get(val) || 0) + 1);
957
+ }
958
+ const result = {};
959
+ for (const key of keys){
960
+ const statMap = statMaps.get(key);
961
+ let mostVal;
962
+ let maxCount = 0;
963
+ for (const [val, count] of statMap.entries())if (count > maxCount) {
964
+ maxCount = count;
965
+ mostVal = val;
966
+ }
967
+ result[key] = mostVal;
968
+ }
927
969
  return {
928
- mode: this.getMost('mode').val,
929
- fontsize: this.getMost('fontsize').val,
930
- color: this.getMost('color').val,
931
- senderID: this.getMost('senderID').val,
932
- content: this.getMost('content').val,
933
- weight: this.getMost('weight').val,
934
- pool: this.getMost('pool').val,
935
- platform: this.getMost('platform').val
970
+ mode: result.mode,
971
+ fontsize: result.fontsize,
972
+ color: result.color,
973
+ senderID: result.senderID,
974
+ content: result.content,
975
+ weight: result.weight,
976
+ pool: result.pool,
977
+ platform: result.platform
936
978
  };
937
979
  }
938
980
  static create(options) {
@@ -960,7 +1002,7 @@ class UniPool {
960
1002
  return this;
961
1003
  }
962
1004
  split(key) {
963
- if (this.shared[key]) return [
1005
+ if (this.getShared(key)) return [
964
1006
  this
965
1007
  ];
966
1008
  const set = new Set(this.dans.map((d)=>d[key]));
@@ -982,44 +1024,27 @@ class UniPool {
982
1024
  this.options.dedupe = false;
983
1025
  }
984
1026
  merge(lifetime = 0) {
985
- if (!this.shared.SOID) {
1027
+ if (!this.getShared('SOID')) {
986
1028
  console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
987
1029
  return this;
988
1030
  }
989
1031
  if (lifetime <= 0) return this;
990
- const mergeContext = this.dans.reduce(([result, cache, mergeObj], danmaku)=>{
991
- const key = [
992
- 'content',
993
- 'mode',
994
- 'pool',
995
- 'platform'
996
- ].map((k)=>danmaku[k]).join('|');
1032
+ const result = [];
1033
+ const cache = {};
1034
+ const mergeObj = {};
1035
+ for (const danmaku of this.dans){
1036
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
997
1037
  const cached = cache[key];
998
- const lastAppearTime = cached?.progress || 0;
999
- if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
1038
+ if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
1000
1039
  skipDanuniMerge: true
1001
1040
  })) {
1002
- const senders = mergeObj[key].senders;
1003
- senders.push(danmaku.senderID);
1004
- const extra = danmaku.extra;
1005
- extra.danuni = extra.danuni || {};
1006
- extra.danuni.merge = {
1007
- count: senders.length,
1008
- duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
1009
- senders,
1010
- taolu_count: senders.length,
1011
- taolu_senders: senders
1012
- };
1013
- danmaku.extraStr = src_JSON.stringify(extra);
1041
+ mergeObj[key].senders.push(danmaku.senderID);
1042
+ mergeObj[key].count = mergeObj[key].senders.length;
1043
+ mergeObj[key].taolu_count = mergeObj[key].count;
1044
+ mergeObj[key].taolu_senders = mergeObj[key].senders;
1045
+ mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
1014
1046
  cache[key] = danmaku;
1015
- mergeObj[key] = extra.danuni.merge;
1016
- return [
1017
- result,
1018
- cache,
1019
- mergeObj
1020
- ];
1021
- }
1022
- {
1047
+ } else {
1023
1048
  mergeObj[key] = {
1024
1049
  count: 1,
1025
1050
  duration: 0,
@@ -1032,55 +1057,31 @@ class UniPool {
1032
1057
  ]
1033
1058
  };
1034
1059
  cache[key] = danmaku;
1035
- const extra = danmaku.extra;
1036
- extra.danuni = extra.danuni || {};
1037
- extra.danuni.merge = mergeObj[key];
1038
- danmaku.extraStr = src_JSON.stringify(extra);
1039
1060
  result.push(danmaku);
1040
- return [
1041
- result,
1042
- cache,
1043
- mergeObj
1044
- ];
1045
1061
  }
1046
- }, [
1047
- [],
1048
- {},
1049
- {}
1050
- ]);
1051
- const [result, _cache, mergeObj] = mergeContext;
1052
- result.forEach((danmaku, i)=>{
1053
- const key = [
1054
- 'content',
1055
- 'mode',
1056
- 'platform',
1057
- 'pool'
1058
- ].map((k)=>danmaku[k]).join('|');
1059
- const extra = result[i].extra;
1062
+ }
1063
+ for (const danmaku of result){
1064
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
1060
1065
  const mergeData = mergeObj[key];
1061
- result[i].extraStr = src_JSON.stringify({
1062
- ...extra,
1063
- danuni: {
1064
- ...extra.danuni,
1065
- merge: mergeData
1066
- }
1067
- });
1068
- if (mergeData?.count) if (mergeData.count <= 1) {
1069
- const updatedExtra = {
1070
- ...extra
1071
- };
1072
- if (updatedExtra.danuni) {
1073
- delete updatedExtra.danuni.merge;
1074
- if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
1075
- }
1076
- result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON.stringify(updatedExtra) : void 0;
1077
- } else {
1078
- result[i].senderID = 'merge[bot]@dan-any';
1079
- result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
1066
+ const extra = danmaku.extra;
1067
+ if (mergeData.count > 1) {
1068
+ danmaku.senderID = 'merge[bot]@dan-any';
1069
+ if (danmaku.attr) {
1070
+ if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
1071
+ } else danmaku.attr = [
1080
1072
  dm_gen_DMAttr.Protect
1081
1073
  ];
1074
+ extra.danuni = extra.danuni || {};
1075
+ extra.danuni.merge = mergeData;
1076
+ danmaku.extraStr = src_JSON.stringify(extra);
1077
+ } else {
1078
+ if (extra.danuni?.merge) {
1079
+ delete extra.danuni.merge;
1080
+ if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
1081
+ }
1082
+ danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON.stringify(extra) : void 0;
1082
1083
  }
1083
- });
1084
+ }
1084
1085
  return new UniPool(result, this.options, this.info);
1085
1086
  }
1086
1087
  minify() {
@@ -1103,14 +1104,18 @@ class UniPool {
1103
1104
  pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
1104
1105
  fmt: 'artplayer.json'
1105
1106
  };
1106
- if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
1107
+ if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
1107
1108
  pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
1108
1109
  fmt: 'ddplay.json'
1109
1110
  };
1110
- else if (json?.code == 0 && json.data && json.data.every((d)=>Array.isArray(d))) return {
1111
+ else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
1111
1112
  pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
1112
1113
  fmt: 'dplayer.json'
1113
1114
  };
1115
+ else if (0 == json.code && '0' == json.message && json.data && json.data.page && json.data.result && Array.isArray(json.data.result) && json.data.result.every((d)=>d.id && d.oid)) return {
1116
+ pool: this.fromBiliUp(json, options),
1117
+ fmt: 'bili.up.json'
1118
+ };
1114
1119
  } catch {}
1115
1120
  };
1116
1121
  const parseStr = (file)=>{
@@ -1278,7 +1283,7 @@ class UniPool {
1278
1283
  source: 'k-v',
1279
1284
  danuni: {
1280
1285
  ...DanUniConvertTipTemplate,
1281
- data: this.shared.SOID
1286
+ data: this.getShared('SOID')
1282
1287
  },
1283
1288
  d: this.dans.map((dan)=>dan.toBiliXML(options))
1284
1289
  }
@@ -1417,7 +1422,7 @@ class UniPool {
1417
1422
  substyle: {}
1418
1423
  };
1419
1424
  const finalOptions = options ?? defaultOptions;
1420
- const fn = this.shared.SOID;
1425
+ const fn = this.getShared('SOID');
1421
1426
  return generateASS(this, {
1422
1427
  filename: fn,
1423
1428
  title: fn,
@@ -1626,10 +1631,10 @@ const formatTime = (seconds)=>{
1626
1631
  return `${hour}:${pad(minute)}:${pad(second)}.${minorSecond}`;
1627
1632
  };
1628
1633
  const encode = (text)=>text.toString().replaceAll('{', '{').replaceAll('}', '}').replaceAll(/\r|\n/g, '');
1629
- const scrollCommand = ({ start, end, top })=>`\\move(${start},${top},${end},${top})`;
1630
- const fixCommand = ({ top, left })=>`\\an8\\pos(${left},${top})`;
1631
- const colorCommand = (color)=>`\\c${formatColor(color)}`;
1632
- const borderColorCommand = (color)=>`\\3c${formatColor(color)}`;
1634
+ const scrollCommand = ({ start, end, top })=>String.raw`\move(${start},${top},${end},${top})`;
1635
+ const fixCommand = ({ top, left })=>String.raw`\an8\pos(${left},${top})`;
1636
+ const colorCommand = (color)=>String.raw`\c${formatColor(color)}`;
1637
+ const borderColorCommand = (color)=>String.raw`\3c${formatColor(color)}`;
1633
1638
  const dialogue = (danmaku, config)=>{
1634
1639
  const { fontSizeType, content, time } = danmaku;
1635
1640
  const { scrollTime, fixTime } = config;
@@ -1894,46 +1899,91 @@ class src_UniPool {
1894
1899
  return fn(this);
1895
1900
  }
1896
1901
  get shared() {
1897
- const isShared = (key)=>this.dans.every((d)=>d[key]);
1898
- return {
1899
- SOID: isShared('SOID') ? this.dans[0].SOID : void 0,
1900
- senderID: isShared('senderID') ? this.dans[0].senderID : void 0,
1901
- platform: isShared('platform') ? this.dans[0].platform : void 0,
1902
- pool: isShared('pool') ? this.dans[0].pool : void 0,
1903
- mode: isShared('mode') ? this.dans[0].mode : void 0,
1904
- color: isShared('color') ? this.dans[0].color : void 0
1905
- };
1902
+ if (0 === this.dans.length) return {};
1903
+ const keys = [
1904
+ 'SOID',
1905
+ 'senderID',
1906
+ 'platform',
1907
+ 'pool',
1908
+ 'mode',
1909
+ 'color'
1910
+ ];
1911
+ const result = {};
1912
+ for (const key of keys){
1913
+ const sharedVal = this.getShared(key);
1914
+ if (void 0 !== sharedVal) result[key] = sharedVal;
1915
+ }
1916
+ return result;
1906
1917
  }
1907
1918
  getShared(key) {
1908
- const isShared = (key)=>this.dans.every((d)=>d[key]);
1909
- return isShared(key) ? this.dans[0][key] : void 0;
1919
+ if (0 === this.dans.length) return;
1920
+ const firstVal = this.dans[0][key];
1921
+ for(let i = 1; i < this.dans.length; i++)if (this.dans[i][key] !== firstVal) return;
1922
+ return firstVal;
1910
1923
  }
1911
1924
  getStat(key) {
1912
- const default_stat = [];
1913
- const stats = this.dans.reduce((stat, dan)=>{
1914
- const valWithCount = stat.find((i)=>i.val === dan[key]);
1915
- if (valWithCount) valWithCount.count++;
1916
- else stat.push({
1917
- val: dan[key],
1918
- count: 1
1919
- });
1920
- return stat;
1921
- }, default_stat);
1922
- return stats;
1925
+ const statMap = new Map();
1926
+ for (const dan of this.dans){
1927
+ const val = dan[key];
1928
+ statMap.set(val, (statMap.get(val) || 0) + 1);
1929
+ }
1930
+ return statMap;
1923
1931
  }
1924
1932
  getMost(key) {
1925
- return this.getStat(key).toSorted((a, b)=>b.count - a.count)[0];
1933
+ const stats = this.getStat(key);
1934
+ if (0 === stats.size) return {
1935
+ val: void 0,
1936
+ count: 0
1937
+ };
1938
+ let mostVal;
1939
+ let maxCount = 0;
1940
+ for (const [val, count] of stats.entries())if (count > maxCount) {
1941
+ maxCount = count;
1942
+ mostVal = val;
1943
+ }
1944
+ return {
1945
+ val: mostVal,
1946
+ count: maxCount
1947
+ };
1926
1948
  }
1927
1949
  get most() {
1950
+ const keys = [
1951
+ 'mode',
1952
+ 'fontsize',
1953
+ 'color',
1954
+ 'senderID',
1955
+ 'content',
1956
+ 'weight',
1957
+ 'pool',
1958
+ 'platform'
1959
+ ];
1960
+ const statMaps = new Map();
1961
+ for (const dan of this.dans)for (const key of keys){
1962
+ if (!statMaps.has(key)) statMaps.set(key, new Map());
1963
+ const statMap = statMaps.get(key);
1964
+ const val = dan[key];
1965
+ statMap.set(val, (statMap.get(val) || 0) + 1);
1966
+ }
1967
+ const result = {};
1968
+ for (const key of keys){
1969
+ const statMap = statMaps.get(key);
1970
+ let mostVal;
1971
+ let maxCount = 0;
1972
+ for (const [val, count] of statMap.entries())if (count > maxCount) {
1973
+ maxCount = count;
1974
+ mostVal = val;
1975
+ }
1976
+ result[key] = mostVal;
1977
+ }
1928
1978
  return {
1929
- mode: this.getMost('mode').val,
1930
- fontsize: this.getMost('fontsize').val,
1931
- color: this.getMost('color').val,
1932
- senderID: this.getMost('senderID').val,
1933
- content: this.getMost('content').val,
1934
- weight: this.getMost('weight').val,
1935
- pool: this.getMost('pool').val,
1936
- platform: this.getMost('platform').val
1979
+ mode: result.mode,
1980
+ fontsize: result.fontsize,
1981
+ color: result.color,
1982
+ senderID: result.senderID,
1983
+ content: result.content,
1984
+ weight: result.weight,
1985
+ pool: result.pool,
1986
+ platform: result.platform
1937
1987
  };
1938
1988
  }
1939
1989
  static create(options) {
@@ -1961,7 +2011,7 @@ class src_UniPool {
1961
2011
  return this;
1962
2012
  }
1963
2013
  split(key) {
1964
- if (this.shared[key]) return [
2014
+ if (this.getShared(key)) return [
1965
2015
  this
1966
2016
  ];
1967
2017
  const set = new Set(this.dans.map((d)=>d[key]));
@@ -1983,44 +2033,27 @@ class src_UniPool {
1983
2033
  this.options.dedupe = false;
1984
2034
  }
1985
2035
  merge(lifetime = 0) {
1986
- if (!this.shared.SOID) {
2036
+ if (!this.getShared('SOID')) {
1987
2037
  console.error("本功能仅支持同弹幕库内使用,可先 .split('SOID') 在分别使用");
1988
2038
  return this;
1989
2039
  }
1990
2040
  if (lifetime <= 0) return this;
1991
- const mergeContext = this.dans.reduce(([result, cache, mergeObj], danmaku)=>{
1992
- const key = [
1993
- 'content',
1994
- 'mode',
1995
- 'pool',
1996
- 'platform'
1997
- ].map((k)=>danmaku[k]).join('|');
2041
+ const result = [];
2042
+ const cache = {};
2043
+ const mergeObj = {};
2044
+ for (const danmaku of this.dans){
2045
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
1998
2046
  const cached = cache[key];
1999
- const lastAppearTime = cached?.progress || 0;
2000
- if (cached && danmaku.progress - lastAppearTime <= lifetime && danmaku.isSameAs(cached, {
2047
+ if (cached && danmaku.progress - cached.progress <= lifetime && danmaku.isSameAs(cached, {
2001
2048
  skipDanuniMerge: true
2002
2049
  })) {
2003
- const senders = mergeObj[key].senders;
2004
- senders.push(danmaku.senderID);
2005
- const extra = danmaku.extra;
2006
- extra.danuni = extra.danuni || {};
2007
- extra.danuni.merge = {
2008
- count: senders.length,
2009
- duration: Number.parseFloat((danmaku.progress - cached.progress).toFixed(3)),
2010
- senders,
2011
- taolu_count: senders.length,
2012
- taolu_senders: senders
2013
- };
2014
- danmaku.extraStr = src_JSON_0.stringify(extra);
2050
+ mergeObj[key].senders.push(danmaku.senderID);
2051
+ mergeObj[key].count = mergeObj[key].senders.length;
2052
+ mergeObj[key].taolu_count = mergeObj[key].count;
2053
+ mergeObj[key].taolu_senders = mergeObj[key].senders;
2054
+ mergeObj[key].duration = Number.parseFloat((danmaku.progress - cached.progress).toFixed(3));
2015
2055
  cache[key] = danmaku;
2016
- mergeObj[key] = extra.danuni.merge;
2017
- return [
2018
- result,
2019
- cache,
2020
- mergeObj
2021
- ];
2022
- }
2023
- {
2056
+ } else {
2024
2057
  mergeObj[key] = {
2025
2058
  count: 1,
2026
2059
  duration: 0,
@@ -2033,55 +2066,31 @@ class src_UniPool {
2033
2066
  ]
2034
2067
  };
2035
2068
  cache[key] = danmaku;
2036
- const extra = danmaku.extra;
2037
- extra.danuni = extra.danuni || {};
2038
- extra.danuni.merge = mergeObj[key];
2039
- danmaku.extraStr = src_JSON_0.stringify(extra);
2040
2069
  result.push(danmaku);
2041
- return [
2042
- result,
2043
- cache,
2044
- mergeObj
2045
- ];
2046
2070
  }
2047
- }, [
2048
- [],
2049
- {},
2050
- {}
2051
- ]);
2052
- const [result, _cache, mergeObj] = mergeContext;
2053
- result.forEach((danmaku, i)=>{
2054
- const key = [
2055
- 'content',
2056
- 'mode',
2057
- 'platform',
2058
- 'pool'
2059
- ].map((k)=>danmaku[k]).join('|');
2060
- const extra = result[i].extra;
2071
+ }
2072
+ for (const danmaku of result){
2073
+ const key = `${danmaku.content}|${danmaku.mode}|${danmaku.pool}|${danmaku.platform}`;
2061
2074
  const mergeData = mergeObj[key];
2062
- result[i].extraStr = src_JSON_0.stringify({
2063
- ...extra,
2064
- danuni: {
2065
- ...extra.danuni,
2066
- merge: mergeData
2067
- }
2068
- });
2069
- if (mergeData?.count) if (mergeData.count <= 1) {
2070
- const updatedExtra = {
2071
- ...extra
2072
- };
2073
- if (updatedExtra.danuni) {
2074
- delete updatedExtra.danuni.merge;
2075
- if (0 === Object.keys(updatedExtra.danuni).length) delete updatedExtra.danuni;
2076
- }
2077
- result[i].extraStr = Object.keys(updatedExtra).length > 0 ? src_JSON_0.stringify(updatedExtra) : void 0;
2078
- } else {
2079
- result[i].senderID = 'merge[bot]@dan-any';
2080
- result[i].attr ? result[i].attr.push(dm_gen_DMAttr.Protect) : result[i].attr = [
2075
+ const extra = danmaku.extra;
2076
+ if (mergeData.count > 1) {
2077
+ danmaku.senderID = 'merge[bot]@dan-any';
2078
+ if (danmaku.attr) {
2079
+ if (!danmaku.attr.includes(dm_gen_DMAttr.Protect)) danmaku.attr.push(dm_gen_DMAttr.Protect);
2080
+ } else danmaku.attr = [
2081
2081
  dm_gen_DMAttr.Protect
2082
2082
  ];
2083
+ extra.danuni = extra.danuni || {};
2084
+ extra.danuni.merge = mergeData;
2085
+ danmaku.extraStr = src_JSON_0.stringify(extra);
2086
+ } else {
2087
+ if (extra.danuni?.merge) {
2088
+ delete extra.danuni.merge;
2089
+ if (0 === Object.keys(extra.danuni).length) delete extra.danuni;
2090
+ }
2091
+ danmaku.extraStr = Object.keys(extra).length > 0 ? src_JSON_0.stringify(extra) : void 0;
2083
2092
  }
2084
- });
2093
+ }
2085
2094
  return new src_UniPool(result, this.options, this.info);
2086
2095
  }
2087
2096
  minify() {
@@ -2104,14 +2113,18 @@ class src_UniPool {
2104
2113
  pool: this.fromArtplayer(json, json.danuni?.data ?? '', void 0, options),
2105
2114
  fmt: 'artplayer.json'
2106
2115
  };
2107
- if (json.count && json.comments && json.comments.every((d)=>d.m)) return {
2116
+ if (json.count && json.comments && Array.isArray(json.comments) && json.comments.every((d)=>d.m)) return {
2108
2117
  pool: this.fromDDPlay(json, json.danuni?.data ?? '', options),
2109
2118
  fmt: 'ddplay.json'
2110
2119
  };
2111
- else if (json?.code == 0 && json.data && json.data.every((d)=>Array.isArray(d))) return {
2120
+ else if (0 == json.code && json.data && Array.isArray(json.data) && json.data.every((d)=>Array.isArray(d))) return {
2112
2121
  pool: this.fromDplayer(json, json.danuni?.data ?? '', void 0, options),
2113
2122
  fmt: 'dplayer.json'
2114
2123
  };
2124
+ else if (0 == json.code && '0' == json.message && json.data && json.data.page && json.data.result && Array.isArray(json.data.result) && json.data.result.every((d)=>d.id && d.oid)) return {
2125
+ pool: this.fromBiliUp(json, options),
2126
+ fmt: 'bili.up.json'
2127
+ };
2115
2128
  } catch {}
2116
2129
  };
2117
2130
  const parseStr = (file)=>{
@@ -2279,7 +2292,7 @@ class src_UniPool {
2279
2292
  source: 'k-v',
2280
2293
  danuni: {
2281
2294
  ...src_DanUniConvertTipTemplate,
2282
- data: this.shared.SOID
2295
+ data: this.getShared('SOID')
2283
2296
  },
2284
2297
  d: this.dans.map((dan)=>dan.toBiliXML(options))
2285
2298
  }
@@ -2418,7 +2431,7 @@ class src_UniPool {
2418
2431
  substyle: {}
2419
2432
  };
2420
2433
  const finalOptions = options ?? defaultOptions;
2421
- const fn = this.shared.SOID;
2434
+ const fn = this.getShared('SOID');
2422
2435
  return generateASS(this, {
2423
2436
  filename: fn,
2424
2437
  title: fn,