@jax-data-science/sci-image-visualizer 0.14.0 → 0.15.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.
Files changed (23) hide show
  1. package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +39 -3
  2. package/esm2022/lib/channel-histogram/channel-tree.mjs +65 -0
  3. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +1 -1
  4. package/esm2022/lib/contracts/image.contract.mjs +1 -1
  5. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +5 -8
  6. package/esm2022/lib/spatial/lod.mjs +19 -1
  7. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +47 -10
  8. package/esm2022/lib/store/visualizer-store.service.mjs +20 -3
  9. package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-qUeMuBb0.mjs} +198 -29
  10. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-qUeMuBb0.mjs.map +1 -0
  11. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-U1ODcfYD.mjs} +3 -2
  12. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-U1ODcfYD.mjs.map} +1 -1
  13. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +2 -1
  14. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  15. package/lib/channel-histogram/channel-histogram.component.d.ts +14 -0
  16. package/lib/channel-histogram/channel-tree.d.ts +30 -0
  17. package/lib/contracts/channel-histogram-api.contract.d.ts +2 -0
  18. package/lib/contracts/image.contract.d.ts +6 -0
  19. package/lib/spatial/lod.d.ts +11 -1
  20. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +18 -1
  21. package/lib/store/visualizer-store.service.d.ts +7 -1
  22. package/package.json +1 -1
  23. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs.map +0 -1
@@ -33,4 +33,4 @@ export const LUT_COLORS = [
33
33
  * (VisualizationModule / provideVisualization); hosts inject it, they do not provide it.
34
34
  */
35
35
  export const CHANNEL_HISTOGRAM_API = new InjectionToken('CHANNEL_HISTOGRAM_API');
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFzQi9DOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBRTFDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsU0FBMEI7SUFDNUYsSUFBSSxPQUFPLFNBQVMsS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDckQsT0FBTyxLQUFLLElBQUksd0JBQXdCLElBQUksS0FBSyxHQUFHLHdCQUF3QixDQUFDO0FBQy9FLENBQUM7QUFFRDtvQ0FDb0M7QUFDcEMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFtRDtJQUN4RSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNqQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNuQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNyQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtDQUNyQyxDQUFDO0FBc0ZGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUF1Qix1QkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElJbWFnZU1ldGFkYXRhIH0gZnJvbSAnLi9pbWFnZS5jb250cmFjdCc7XG5pbXBvcnQgeyBDb2xvcm1hcE5vZGUgfSBmcm9tICcuL2Rpc3BsYXktdHlwZXMnO1xuXG4vKipcbiAqIERpc3BsYXkgc3RhdGUgZm9yIG9uZSBpbWFnZSBjaGFubmVsIGluIHRoZSBDaGFubmVscyAmIEhpc3RvZ3JhbSBwYW5lLlxuICogYG1pbmAvYG1heGAgYXJlIHRoZSBkaXNwbGF5IHdpbmRvdyAoY29udHJhc3QvYnJpZ2h0bmVzcykgaW4gcmF3IDAuLjI1NSBzcGFjZTtcbiAqIGBnYW1tYWAgc2hhcGVzIHRoZSB0cmFuc2ZlciBjdXJ2ZTsgYGNvbG9yYCBpcyB0aGUgY2hhbm5lbCdzIGRpc3BsYXkgdGludFxuICogKHVzZWQgd2hlbiBjb21wb3NpdGluZyBtdWx0aXBsZSBjaGFubmVscyk7IGB2aXNpYmxlYCB0b2dnbGVzIGl0IG9uL29mZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hhbm5lbFN0YXRlIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSB0aW50IGFzIGAjcnJnZ2JiYC4gKi9cbiAgY29sb3I6IHN0cmluZztcbiAgbWluOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xuICBnYW1tYTogbnVtYmVyO1xuICB2aXNpYmxlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEhvdyBtYW55IGNoYW5uZWxzIG9mIGEgbXVsdGljaGFubmVsIGltYWdlIHN0YXJ0IHZpc2libGUuIEVhY2ggdmlzaWJsZSBjaGFubmVsIGlzIGRyYXduXG4gKiBmcm9tIHRpbGVzIG9mIGl0cyBvd24sIHNvIGEgMjItY2hhbm5lbCBwbGF0ZSBzaG93ZWQgZXZlcnkgY2hhbm5lbCBhdCBvbmNlIGFuZCBhc2tlZCB0aGVcbiAqIHNlcnZlciBmb3IgMjIgdGlsZXMgcGVyIHBvc2l0aW9uIG9uIGV2ZXJ5IHBhbiBhbmQgem9vbS4gQ2hhbm5lbHMgcGFzdCB0aGVzZSBzdGFydCBoaWRkZW5cbiAqIChvbmUgY2xpY2sgc2hvd3MgdGhlbSksIGFuZCBhIGhpZGRlbiBjaGFubmVsIGZldGNoZXMgbm8gdGlsZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZJU0lCTEVfQ0hBTk5FTFMgPSA0O1xuXG4vKipcbiAqIFdoZXRoZXIgY2hhbm5lbCBgaW5kZXhgIG9mIGBjb3VudGAgc3RhcnRzIHZpc2libGU6IGFzIHRoZSBpbWFnZSBzYXlzIHdoZW4gaXRzXG4gKiBgY2hhbm5lbEluZm9gIGRvZXMsIGVsc2UgZXZlcnkgY2hhbm5lbCBvZiBhbiBpbWFnZSB3aXRoIGF0IG1vc3RcbiAqIHtAbGluayBERUZBVUxUX1ZJU0lCTEVfQ0hBTk5FTFN9LCBhbmQgdGhlIGZpcnN0IHtAbGluayBERUZBVUxUX1ZJU0lCTEVfQ0hBTk5FTFN9IG9mIG9uZSB3aXRoIG1vcmUuXG4gKiBPbmx5IGEgYm9vbGVhbiBzYXlzOiBhIGRlc2NyaXB0b3IncyBgbnVsbGAgKGEgSlNPTiBmaWVsZCBsZWZ0IGVtcHR5KSBsZWF2ZXMgdGhlIGRlZmF1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0Q2hhbm5lbFZpc2libGUoaW5kZXg6IG51bWJlciwgY291bnQ6IG51bWJlciwgc3BlY2lmaWVkPzogYm9vbGVhbiB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBzcGVjaWZpZWQgPT09ICdib29sZWFuJykgcmV0dXJuIHNwZWNpZmllZDtcbiAgcmV0dXJuIGNvdW50IDw9IERFRkFVTFRfVklTSUJMRV9DSEFOTkVMUyB8fCBpbmRleCA8IERFRkFVTFRfVklTSUJMRV9DSEFOTkVMUztcbn1cblxuLyoqIFRoZSBzdGFuZGFyZCBMVVQgcHNldWRvLWNvbG91cnMgKG1pcnJvcnMgRmlqaSdzIE1lcmdlIENoYW5uZWxzIHBhbGV0dGUpIGZvclxuICogIHF1aWNrIHBlci1jaGFubmVsIGFzc2lnbm1lbnQuICovXG5leHBvcnQgY29uc3QgTFVUX0NPTE9SUzogUmVhZG9ubHlBcnJheTx7IG5hbWU6IHN0cmluZzsgY29sb3I6IHN0cmluZyB9PiA9IFtcbiAgeyBuYW1lOiAnUmVkJywgY29sb3I6ICcjZmYwMDAwJyB9LFxuICB7IG5hbWU6ICdHcmVlbicsIGNvbG9yOiAnIzAwZmYwMCcgfSxcbiAgeyBuYW1lOiAnQmx1ZScsIGNvbG9yOiAnIzAwMDBmZicgfSxcbiAgeyBuYW1lOiAnR3JheScsIGNvbG9yOiAnI2ZmZmZmZicgfSxcbiAgeyBuYW1lOiAnQ3lhbicsIGNvbG9yOiAnIzAwZmZmZicgfSxcbiAgeyBuYW1lOiAnTWFnZW50YScsIGNvbG9yOiAnI2ZmMDBmZicgfSxcbiAgeyBuYW1lOiAnWWVsbG93JywgY29sb3I6ICcjZmZmZjAwJyB9LFxuXTtcblxuLyoqIEEgYmlubmVkIGludGVuc2l0eSBoaXN0b2dyYW0gZm9yIG9uZSBjaGFubmVsLlxuICpcbiAqIFRoZSA4LWJpdCBjbGllbnQgcGF0aCAoUkdCIC8gOC1iaXQgZ3JheXNjYWxlLCBzYW1wbGVkIGZyb20gZGlzcGxheWVkIHRpbGVzKVxuICogbGVhdmVzIHRoZSBuYXRpdmUgZmllbGRzIHVuZGVmaW5lZCBhbmQgYGJpbnNgIHNwYW4gMC4uMjU1LiBUaGUgbmF0aXZlIHBhdGhcbiAqICg+OC1iaXQgaW1hZ2VzLCBmcm9tIHRoZSBzZXJ2ZXIgYC9oaXN0b2dyYW1gIGVuZHBvaW50KSBmaWxscyBgYml0RGVwdGhgLFxuICogYHJhbmdlTWluYC9gcmFuZ2VNYXhgICh0aGUgcGl4ZWwtdHlwZSBzcGFuIHRoZSBiaW5zIGNvdmVyKSBhbmRcbiAqIGBvYnNlcnZlZE1pbmAvYG9ic2VydmVkTWF4YCAodGhlIGFjdHVhbCBleHRyZW1lcyBzZWVuKSwgc28gdGhlIGRpYWxvZyBjYW5cbiAqIGxhYmVsIHRoZSB3aW5kb3cvYXhpcyBpbiBuYXRpdmUgdW5pdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIElIaXN0b2dyYW0ge1xuICAvKiogTGVmdCBlZGdlIG9mIGVhY2ggYmluICgwLi4yNTUgZm9yIHRoZSA4LWJpdCBwYXRoLCBuYXRpdmUgdW5pdHMgb3RoZXJ3aXNlKS4gKi9cbiAgYmluczogbnVtYmVyW107XG4gIC8qKiBQaXhlbCBjb3VudCBwZXIgYmluLCBsZW5ndGggPSBiaW4gY291bnQuICovXG4gIGNvdW50czogbnVtYmVyW107XG4gIC8qKiBMYXJnZXN0IGJpbiBjb3VudCwgZm9yIHktYXhpcyBzY2FsaW5nLiAqL1xuICBtYXg6IG51bWJlcjtcbiAgLyoqIE5hdGl2ZSBiaXQgZGVwdGggKDgsIDE2LCDigKYpIOKAlCBwcmVzZW50IG9ubHkgb24gdGhlIG5hdGl2ZSBzZXJ2ZXIgcGF0aC4gKi9cbiAgYml0RGVwdGg/OiBudW1iZXI7XG4gIC8qKiBQaXhlbC10eXBlIHJhbmdlIHRoZSBiaW5zIHNwYW4gKGUuZy4gMC4uNjU1MzUpLCBuYXRpdmUgcGF0aCBvbmx5LiAqL1xuICByYW5nZU1pbj86IG51bWJlcjtcbiAgcmFuZ2VNYXg/OiBudW1iZXI7XG4gIC8qKiBBY3R1YWwgbWluL21heCBwaXhlbCBvYnNlcnZlZCAoYXV0by1jb250cmFzdCBzZWVkKSwgbmF0aXZlIHBhdGggb25seS4gKi9cbiAgb2JzZXJ2ZWRNaW4/OiBudW1iZXI7XG4gIG9ic2VydmVkTWF4PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFB1YmxpYywgaW1wbGVtZW50YXRpb24tYWdub3N0aWMgc3VyZmFjZSB0aGUgQ2hhbm5lbHMgJiBIaXN0b2dyYW0gcGFuZSAoYW5cbiAqIGV4dGVybmFsIGNvbnN1bWVyIG9mIHRoZSB2aXN1YWxpemF0aW9uIHBhY2thZ2UpIGRlcGVuZHMgb24uIEl0IGV4cG9zZXMgdGhlXG4gKiBwZXItY2hhbm5lbCBkaXNwbGF5IHdpbmRvdy9nYW1tYS92aXNpYmlsaXR5LCBhbiBpbnRlbnNpdHkgaGlzdG9ncmFtIGNvbXB1dGVkXG4gKiBmcm9tIHRoZSBjdXJyZW50bHktZGlzcGxheWVkIHBpeGVscywgYW5kIHRoZSBMVVQvY29sb3JtYXAgY29udHJvbHMgdGhhdCB1c2VkXG4gKiB0byBsaXZlIGluIHRoZSB0b29sYmFyLiBUaGUgcGFuZSBpbmplY3RzIHRoaXMgdmlhIHtAbGluayBDSEFOTkVMX0hJU1RPR1JBTV9BUEl9XG4gKiAoYm91bmQgdG8gdGhlIGNvbmNyZXRlIGBSb3V0aW5nVmlzdWFsaXplclNlcnZpY2VgIHdpdGggYHVzZUV4aXN0aW5nYCkgc28gaXRcbiAqIG5ldmVyIHJlYWNoZXMgdGhlIGltcGxlbWVudGF0aW9uLiBFdmVyeSBzZXR0ZXIgbGl2ZS11cGRhdGVzIHdoaWNoZXZlciBiYWNrZW5kXG4gKiAoUGxvdGx5IG9yIE9wZW5TZWFkcmFnb24pIGlzIG9uIHNjcmVlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hhbm5lbEhpc3RvZ3JhbUFwaSB7XG4gIC8vIOKUgOKUgCBjaGFubmVscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIFRoZSBjaGFubmVscyBvZiB0aGUgY3VycmVudCBpbWFnZSAoMSBmb3IgZ3JheXNjYWxlLCAzIGZvciBSR0IpLiAqL1xuICBnZXRDaGFubmVscyQoKTogT2JzZXJ2YWJsZTxJQ2hhbm5lbFN0YXRlW10+O1xuICAvKiogUGF0Y2ggb25lIGNoYW5uZWwncyBzdGF0ZSAod2luZG93L2dhbW1hL3Zpc2liaWxpdHkvY29sb3IpOyBsaXZlLXVwZGF0ZXMuICovXG4gIHNldENoYW5uZWxTdGF0ZShpbmRleDogbnVtYmVyLCBwYXJ0aWFsOiBQYXJ0aWFsPElDaGFubmVsU3RhdGU+KTogdm9pZDtcbiAgLyoqIFNldCB0aGUgY2hhbm5lbCBzZWxlY3RlZCBpbiB0aGUgcGFuZSDigJQgdGhlIGJhbmQgYSBzaW5nbGUtc2NhbGFyIDNEIFN1cmZhY2UgZm9sbG93cy4gKi9cbiAgc2V0U2VsZWN0ZWRDaGFubmVsKGluZGV4OiBudW1iZXIpOiB2b2lkO1xuICAvKiogQXV0by13aW5kb3cgdGhlIGdpdmVuIGNoYW5uZWxzIGJ5IHNhdHVyYXRpbmcgYHNhdHVyYXRpb25gICgwLi4xKSBvZiBwaXhlbHNcbiAgICogIGF0IGVhY2ggZW5kIG9mIHRoZWlyIGhpc3RvZ3JhbS4gKi9cbiAgYXV0b0NvbnRyYXN0KGluZGljZXM6IG51bWJlcltdLCBzYXR1cmF0aW9uOiBudW1iZXIpOiB2b2lkO1xuICAvKiogUmVzZXQgdGhlIGdpdmVuIGNoYW5uZWxzIHRvIHRoZWlyIGRlcml2ZWQgZGVmYXVsdHM6IGZ1bGwgZGlzcGxheSByYW5nZVxuICAgKiAgKDAuLjI1NSksIGdhbW1hIDEsIGFuZCB0aGUgY2hhbm5lbCdzIGRlZmF1bHQgdGludCBjb2xvdXIuICovXG4gIHJlc2V0Q29udHJhc3QoaW5kaWNlczogbnVtYmVyW10pOiB2b2lkO1xuXG4gIC8vIOKUgOKUgCBoaXN0b2dyYW0g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBCaW5uZWQgaGlzdG9ncmFtIGZvciBhIGNoYW5uZWwgZnJvbSB0aGUgZGlzcGxheWVkIHBpeGVscywgb3IgbnVsbCB3aGVuIG5vXG4gICAqICBpbWFnZS9waXhlbHMgYXJlIGF2YWlsYWJsZS4gU3luY2hyb25vdXMgOC1iaXQgcGF0aCAodXNlZCBieSBhdXRvLWNvbnRyYXN0KS4gKi9cbiAgZ2V0SGlzdG9ncmFtKGNoYW5uZWxJbmRleDogbnVtYmVyLCBiaW5zOiBudW1iZXIpOiBJSGlzdG9ncmFtIHwgbnVsbDtcbiAgLyoqIEhpc3RvZ3JhbSBmb3IgYSBjaGFubmVsIGFzIGFuIGFzeW5jIHN0cmVhbTogZW1pdHMgdGhlICoqbmF0aXZlKiogYml0LWRlcHRoXG4gICAqICBoaXN0b2dyYW0gKGZyb20gdGhlIHNlcnZlcikgZm9yID44LWJpdCBpbWFnZXMsIGVsc2UgdGhlIDgtYml0IGNsaWVudFxuICAgKiAgaGlzdG9ncmFtLiBUaGUgZGlhbG9nIHVzZXMgdGhpcyBzbyAxNi1iaXQgc3RhY2tzIGdldCBhIHRydWUgZGlzdHJpYnV0aW9uLiAqL1xuICBnZXRIaXN0b2dyYW0kKGNoYW5uZWxJbmRleDogbnVtYmVyLCBiaW5zOiBudW1iZXIpOiBPYnNlcnZhYmxlPElIaXN0b2dyYW0gfCBudWxsPjtcblxuICAvLyDilIDilIAgZGlzcGxheSBvcHRpb25zIChtb3ZlZCBvdXQgb2YgdGhlIHRvb2xiYXIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBnZXRDb2xvcm1hcCgpOiBPYnNlcnZhYmxlPENvbG9ybWFwTm9kZSB8IG51bGw+O1xuICBzZXRDb2xvcm1hcChjb2xvcm1hcDogQ29sb3JtYXBOb2RlKTogdm9pZDtcbiAgZ2V0Q29sb3JtYXBPcHRpb25zKCk6IENvbG9ybWFwTm9kZVtdO1xuICBnZXRSZXZlcnNlU2NhbGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc2V0UmV2ZXJzZVNjYWxlKHJldmVyc2U6IGJvb2xlYW4pOiB2b2lkO1xuICBnZXRHcmF5c2NhbGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNldEdyYXlzY2FsZShvbjogYm9vbGVhbik6IHZvaWQ7XG4gIGdldEludmVydCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc2V0SW52ZXJ0KG9uOiBib29sZWFuKTogdm9pZDtcblxuICAvLyDilIDilIAgaW1hZ2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldEltYWdlTWV0YSgpOiBPYnNlcnZhYmxlPElJbWFnZU1ldGFkYXRhW10+O1xuXG4gIC8qKiBFeHBvcnQgdGhlIGRpc3BsYXllZCBpbWFnZSDigJQgY29tcG9zaXRlZCB3aXRoIHRoZSBjdXJyZW50IHBlci1jaGFubmVsXG4gICAqICBwc2V1ZG8tY29sb3VycyAvIHdpbmRvdyAvIGNvbG9ybWFwIOKAlCBhcyBhIHB1YmxpY2F0aW9uLXJlYWR5IFBORyBkb3dubG9hZC4gKi9cbiAgZXhwb3J0Q29tcG9zaXRlKCk6IHZvaWQ7XG5cbiAgLyoqIEV4cG9ydCB0aGUgdW5kZXJseWluZyBpbWFnZSBkYXRhIOKAlCBhbGwgKG9yIHRoZSB2aXNpYmxlKSBjaGFubmVscyBhdCBuYXRpdmVcbiAgICogIGJpdCBkZXB0aCDigJQgYXMgYSBkYXRhLXByZXNlcnZpbmcgbXVsdGktYmFuZCBUSUZGIGRvd25sb2FkLiBTZXJ2ZXItc2lkZSwgc29cbiAgICogIGl0IGtlZXBzIHRydWUgMTYtYml0IHZhbHVlcyAodGhlIFBORyBjb21wb3NpdGUgaXMgYW4gOC1iaXQgZmlndXJlKS4gT25seVxuICAgKiAgbWVhbmluZ2Z1bCBmb3IgPjgtYml0IGltYWdlczsgYSBuby1vcCBvbiBiYWNrZW5kcyB0aGF0IGNhbid0IHByb3ZpZGUgaXQuICovXG4gIGV4cG9ydERhdGEoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBESSB0b2tlbiBmb3IgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUncyBBUEkuIFRoZSBsaWJyYXJ5IGJpbmRzIGl0IHRvIGl0cyByb3V0ZXJcbiAqIChWaXN1YWxpemF0aW9uTW9kdWxlIC8gcHJvdmlkZVZpc3VhbGl6YXRpb24pOyBob3N0cyBpbmplY3QgaXQsIHRoZXkgZG8gbm90IHByb3ZpZGUgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBDSEFOTkVMX0hJU1RPR1JBTV9BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48SUNoYW5uZWxIaXN0b2dyYW1BcGk+KCdDSEFOTkVMX0hJU1RPR1JBTV9BUEknKTtcbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUF3Qi9DOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBRTFDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsU0FBMEI7SUFDNUYsSUFBSSxPQUFPLFNBQVMsS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDckQsT0FBTyxLQUFLLElBQUksd0JBQXdCLElBQUksS0FBSyxHQUFHLHdCQUF3QixDQUFDO0FBQy9FLENBQUM7QUFFRDtvQ0FDb0M7QUFDcEMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFtRDtJQUN4RSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNqQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNuQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNsQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNyQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtDQUNyQyxDQUFDO0FBc0ZGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUF1Qix1QkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElJbWFnZU1ldGFkYXRhIH0gZnJvbSAnLi9pbWFnZS5jb250cmFjdCc7XG5pbXBvcnQgeyBDb2xvcm1hcE5vZGUgfSBmcm9tICcuL2Rpc3BsYXktdHlwZXMnO1xuXG4vKipcbiAqIERpc3BsYXkgc3RhdGUgZm9yIG9uZSBpbWFnZSBjaGFubmVsIGluIHRoZSBDaGFubmVscyAmIEhpc3RvZ3JhbSBwYW5lLlxuICogYG1pbmAvYG1heGAgYXJlIHRoZSBkaXNwbGF5IHdpbmRvdyAoY29udHJhc3QvYnJpZ2h0bmVzcykgaW4gcmF3IDAuLjI1NSBzcGFjZTtcbiAqIGBnYW1tYWAgc2hhcGVzIHRoZSB0cmFuc2ZlciBjdXJ2ZTsgYGNvbG9yYCBpcyB0aGUgY2hhbm5lbCdzIGRpc3BsYXkgdGludFxuICogKHVzZWQgd2hlbiBjb21wb3NpdGluZyBtdWx0aXBsZSBjaGFubmVscyk7IGB2aXNpYmxlYCB0b2dnbGVzIGl0IG9uL29mZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hhbm5lbFN0YXRlIHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSB0aW50IGFzIGAjcnJnZ2JiYC4gKi9cbiAgY29sb3I6IHN0cmluZztcbiAgbWluOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xuICBnYW1tYTogbnVtYmVyO1xuICB2aXNpYmxlOiBib29sZWFuO1xuICAvKiogVGhlIGdyb3VwcyB0aGUgY2hhbm5lbCBpcyBpbiwgb3V0ZXJtb3N0IGZpcnN0IChgSUNoYW5uZWxJbmZvLmdyb3VwYCk7IGFic2VudCB3aGVuIGl0IGlzIGluIG5vbmUuICovXG4gIGdyb3VwPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSG93IG1hbnkgY2hhbm5lbHMgb2YgYSBtdWx0aWNoYW5uZWwgaW1hZ2Ugc3RhcnQgdmlzaWJsZS4gRWFjaCB2aXNpYmxlIGNoYW5uZWwgaXMgZHJhd25cbiAqIGZyb20gdGlsZXMgb2YgaXRzIG93biwgc28gYSAyMi1jaGFubmVsIHBsYXRlIHNob3dlZCBldmVyeSBjaGFubmVsIGF0IG9uY2UgYW5kIGFza2VkIHRoZVxuICogc2VydmVyIGZvciAyMiB0aWxlcyBwZXIgcG9zaXRpb24gb24gZXZlcnkgcGFuIGFuZCB6b29tLiBDaGFubmVscyBwYXN0IHRoZXNlIHN0YXJ0IGhpZGRlblxuICogKG9uZSBjbGljayBzaG93cyB0aGVtKSwgYW5kIGEgaGlkZGVuIGNoYW5uZWwgZmV0Y2hlcyBubyB0aWxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVklTSUJMRV9DSEFOTkVMUyA9IDQ7XG5cbi8qKlxuICogV2hldGhlciBjaGFubmVsIGBpbmRleGAgb2YgYGNvdW50YCBzdGFydHMgdmlzaWJsZTogYXMgdGhlIGltYWdlIHNheXMgd2hlbiBpdHNcbiAqIGBjaGFubmVsSW5mb2AgZG9lcywgZWxzZSBldmVyeSBjaGFubmVsIG9mIGFuIGltYWdlIHdpdGggYXQgbW9zdFxuICoge0BsaW5rIERFRkFVTFRfVklTSUJMRV9DSEFOTkVMU30sIGFuZCB0aGUgZmlyc3Qge0BsaW5rIERFRkFVTFRfVklTSUJMRV9DSEFOTkVMU30gb2Ygb25lIHdpdGggbW9yZS5cbiAqIE9ubHkgYSBib29sZWFuIHNheXM6IGEgZGVzY3JpcHRvcidzIGBudWxsYCAoYSBKU09OIGZpZWxkIGxlZnQgZW1wdHkpIGxlYXZlcyB0aGUgZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDaGFubmVsVmlzaWJsZShpbmRleDogbnVtYmVyLCBjb3VudDogbnVtYmVyLCBzcGVjaWZpZWQ/OiBib29sZWFuIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHNwZWNpZmllZCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gc3BlY2lmaWVkO1xuICByZXR1cm4gY291bnQgPD0gREVGQVVMVF9WSVNJQkxFX0NIQU5ORUxTIHx8IGluZGV4IDwgREVGQVVMVF9WSVNJQkxFX0NIQU5ORUxTO1xufVxuXG4vKiogVGhlIHN0YW5kYXJkIExVVCBwc2V1ZG8tY29sb3VycyAobWlycm9ycyBGaWppJ3MgTWVyZ2UgQ2hhbm5lbHMgcGFsZXR0ZSkgZm9yXG4gKiAgcXVpY2sgcGVyLWNoYW5uZWwgYXNzaWdubWVudC4gKi9cbmV4cG9ydCBjb25zdCBMVVRfQ09MT1JTOiBSZWFkb25seUFycmF5PHsgbmFtZTogc3RyaW5nOyBjb2xvcjogc3RyaW5nIH0+ID0gW1xuICB7IG5hbWU6ICdSZWQnLCBjb2xvcjogJyNmZjAwMDAnIH0sXG4gIHsgbmFtZTogJ0dyZWVuJywgY29sb3I6ICcjMDBmZjAwJyB9LFxuICB7IG5hbWU6ICdCbHVlJywgY29sb3I6ICcjMDAwMGZmJyB9LFxuICB7IG5hbWU6ICdHcmF5JywgY29sb3I6ICcjZmZmZmZmJyB9LFxuICB7IG5hbWU6ICdDeWFuJywgY29sb3I6ICcjMDBmZmZmJyB9LFxuICB7IG5hbWU6ICdNYWdlbnRhJywgY29sb3I6ICcjZmYwMGZmJyB9LFxuICB7IG5hbWU6ICdZZWxsb3cnLCBjb2xvcjogJyNmZmZmMDAnIH0sXG5dO1xuXG4vKiogQSBiaW5uZWQgaW50ZW5zaXR5IGhpc3RvZ3JhbSBmb3Igb25lIGNoYW5uZWwuXG4gKlxuICogVGhlIDgtYml0IGNsaWVudCBwYXRoIChSR0IgLyA4LWJpdCBncmF5c2NhbGUsIHNhbXBsZWQgZnJvbSBkaXNwbGF5ZWQgdGlsZXMpXG4gKiBsZWF2ZXMgdGhlIG5hdGl2ZSBmaWVsZHMgdW5kZWZpbmVkIGFuZCBgYmluc2Agc3BhbiAwLi4yNTUuIFRoZSBuYXRpdmUgcGF0aFxuICogKD44LWJpdCBpbWFnZXMsIGZyb20gdGhlIHNlcnZlciBgL2hpc3RvZ3JhbWAgZW5kcG9pbnQpIGZpbGxzIGBiaXREZXB0aGAsXG4gKiBgcmFuZ2VNaW5gL2ByYW5nZU1heGAgKHRoZSBwaXhlbC10eXBlIHNwYW4gdGhlIGJpbnMgY292ZXIpIGFuZFxuICogYG9ic2VydmVkTWluYC9gb2JzZXJ2ZWRNYXhgICh0aGUgYWN0dWFsIGV4dHJlbWVzIHNlZW4pLCBzbyB0aGUgZGlhbG9nIGNhblxuICogbGFiZWwgdGhlIHdpbmRvdy9heGlzIGluIG5hdGl2ZSB1bml0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUhpc3RvZ3JhbSB7XG4gIC8qKiBMZWZ0IGVkZ2Ugb2YgZWFjaCBiaW4gKDAuLjI1NSBmb3IgdGhlIDgtYml0IHBhdGgsIG5hdGl2ZSB1bml0cyBvdGhlcndpc2UpLiAqL1xuICBiaW5zOiBudW1iZXJbXTtcbiAgLyoqIFBpeGVsIGNvdW50IHBlciBiaW4sIGxlbmd0aCA9IGJpbiBjb3VudC4gKi9cbiAgY291bnRzOiBudW1iZXJbXTtcbiAgLyoqIExhcmdlc3QgYmluIGNvdW50LCBmb3IgeS1heGlzIHNjYWxpbmcuICovXG4gIG1heDogbnVtYmVyO1xuICAvKiogTmF0aXZlIGJpdCBkZXB0aCAoOCwgMTYsIOKApikg4oCUIHByZXNlbnQgb25seSBvbiB0aGUgbmF0aXZlIHNlcnZlciBwYXRoLiAqL1xuICBiaXREZXB0aD86IG51bWJlcjtcbiAgLyoqIFBpeGVsLXR5cGUgcmFuZ2UgdGhlIGJpbnMgc3BhbiAoZS5nLiAwLi42NTUzNSksIG5hdGl2ZSBwYXRoIG9ubHkuICovXG4gIHJhbmdlTWluPzogbnVtYmVyO1xuICByYW5nZU1heD86IG51bWJlcjtcbiAgLyoqIEFjdHVhbCBtaW4vbWF4IHBpeGVsIG9ic2VydmVkIChhdXRvLWNvbnRyYXN0IHNlZWQpLCBuYXRpdmUgcGF0aCBvbmx5LiAqL1xuICBvYnNlcnZlZE1pbj86IG51bWJlcjtcbiAgb2JzZXJ2ZWRNYXg/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHVibGljLCBpbXBsZW1lbnRhdGlvbi1hZ25vc3RpYyBzdXJmYWNlIHRoZSBDaGFubmVscyAmIEhpc3RvZ3JhbSBwYW5lIChhblxuICogZXh0ZXJuYWwgY29uc3VtZXIgb2YgdGhlIHZpc3VhbGl6YXRpb24gcGFja2FnZSkgZGVwZW5kcyBvbi4gSXQgZXhwb3NlcyB0aGVcbiAqIHBlci1jaGFubmVsIGRpc3BsYXkgd2luZG93L2dhbW1hL3Zpc2liaWxpdHksIGFuIGludGVuc2l0eSBoaXN0b2dyYW0gY29tcHV0ZWRcbiAqIGZyb20gdGhlIGN1cnJlbnRseS1kaXNwbGF5ZWQgcGl4ZWxzLCBhbmQgdGhlIExVVC9jb2xvcm1hcCBjb250cm9scyB0aGF0IHVzZWRcbiAqIHRvIGxpdmUgaW4gdGhlIHRvb2xiYXIuIFRoZSBwYW5lIGluamVjdHMgdGhpcyB2aWEge0BsaW5rIENIQU5ORUxfSElTVE9HUkFNX0FQSX1cbiAqIChib3VuZCB0byB0aGUgY29uY3JldGUgYFJvdXRpbmdWaXN1YWxpemVyU2VydmljZWAgd2l0aCBgdXNlRXhpc3RpbmdgKSBzbyBpdFxuICogbmV2ZXIgcmVhY2hlcyB0aGUgaW1wbGVtZW50YXRpb24uIEV2ZXJ5IHNldHRlciBsaXZlLXVwZGF0ZXMgd2hpY2hldmVyIGJhY2tlbmRcbiAqIChQbG90bHkgb3IgT3BlblNlYWRyYWdvbikgaXMgb24gc2NyZWVuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDaGFubmVsSGlzdG9ncmFtQXBpIHtcbiAgLy8g4pSA4pSAIGNoYW5uZWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogVGhlIGNoYW5uZWxzIG9mIHRoZSBjdXJyZW50IGltYWdlICgxIGZvciBncmF5c2NhbGUsIDMgZm9yIFJHQikuICovXG4gIGdldENoYW5uZWxzJCgpOiBPYnNlcnZhYmxlPElDaGFubmVsU3RhdGVbXT47XG4gIC8qKiBQYXRjaCBvbmUgY2hhbm5lbCdzIHN0YXRlICh3aW5kb3cvZ2FtbWEvdmlzaWJpbGl0eS9jb2xvcik7IGxpdmUtdXBkYXRlcy4gKi9cbiAgc2V0Q2hhbm5lbFN0YXRlKGluZGV4OiBudW1iZXIsIHBhcnRpYWw6IFBhcnRpYWw8SUNoYW5uZWxTdGF0ZT4pOiB2b2lkO1xuICAvKiogU2V0IHRoZSBjaGFubmVsIHNlbGVjdGVkIGluIHRoZSBwYW5lIOKAlCB0aGUgYmFuZCBhIHNpbmdsZS1zY2FsYXIgM0QgU3VyZmFjZSBmb2xsb3dzLiAqL1xuICBzZXRTZWxlY3RlZENoYW5uZWwoaW5kZXg6IG51bWJlcik6IHZvaWQ7XG4gIC8qKiBBdXRvLXdpbmRvdyB0aGUgZ2l2ZW4gY2hhbm5lbHMgYnkgc2F0dXJhdGluZyBgc2F0dXJhdGlvbmAgKDAuLjEpIG9mIHBpeGVsc1xuICAgKiAgYXQgZWFjaCBlbmQgb2YgdGhlaXIgaGlzdG9ncmFtLiAqL1xuICBhdXRvQ29udHJhc3QoaW5kaWNlczogbnVtYmVyW10sIHNhdHVyYXRpb246IG51bWJlcik6IHZvaWQ7XG4gIC8qKiBSZXNldCB0aGUgZ2l2ZW4gY2hhbm5lbHMgdG8gdGhlaXIgZGVyaXZlZCBkZWZhdWx0czogZnVsbCBkaXNwbGF5IHJhbmdlXG4gICAqICAoMC4uMjU1KSwgZ2FtbWEgMSwgYW5kIHRoZSBjaGFubmVsJ3MgZGVmYXVsdCB0aW50IGNvbG91ci4gKi9cbiAgcmVzZXRDb250cmFzdChpbmRpY2VzOiBudW1iZXJbXSk6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIGhpc3RvZ3JhbSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIEJpbm5lZCBoaXN0b2dyYW0gZm9yIGEgY2hhbm5lbCBmcm9tIHRoZSBkaXNwbGF5ZWQgcGl4ZWxzLCBvciBudWxsIHdoZW4gbm9cbiAgICogIGltYWdlL3BpeGVscyBhcmUgYXZhaWxhYmxlLiBTeW5jaHJvbm91cyA4LWJpdCBwYXRoICh1c2VkIGJ5IGF1dG8tY29udHJhc3QpLiAqL1xuICBnZXRIaXN0b2dyYW0oY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IElIaXN0b2dyYW0gfCBudWxsO1xuICAvKiogSGlzdG9ncmFtIGZvciBhIGNoYW5uZWwgYXMgYW4gYXN5bmMgc3RyZWFtOiBlbWl0cyB0aGUgKipuYXRpdmUqKiBiaXQtZGVwdGhcbiAgICogIGhpc3RvZ3JhbSAoZnJvbSB0aGUgc2VydmVyKSBmb3IgPjgtYml0IGltYWdlcywgZWxzZSB0aGUgOC1iaXQgY2xpZW50XG4gICAqICBoaXN0b2dyYW0uIFRoZSBkaWFsb2cgdXNlcyB0aGlzIHNvIDE2LWJpdCBzdGFja3MgZ2V0IGEgdHJ1ZSBkaXN0cmlidXRpb24uICovXG4gIGdldEhpc3RvZ3JhbSQoY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IE9ic2VydmFibGU8SUhpc3RvZ3JhbSB8IG51bGw+O1xuXG4gIC8vIOKUgOKUgCBkaXNwbGF5IG9wdGlvbnMgKG1vdmVkIG91dCBvZiB0aGUgdG9vbGJhcikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldENvbG9ybWFwKCk6IE9ic2VydmFibGU8Q29sb3JtYXBOb2RlIHwgbnVsbD47XG4gIHNldENvbG9ybWFwKGNvbG9ybWFwOiBDb2xvcm1hcE5vZGUpOiB2b2lkO1xuICBnZXRDb2xvcm1hcE9wdGlvbnMoKTogQ29sb3JtYXBOb2RlW107XG4gIGdldFJldmVyc2VTY2FsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRSZXZlcnNlU2NhbGUocmV2ZXJzZTogYm9vbGVhbik6IHZvaWQ7XG4gIGdldEdyYXlzY2FsZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc2V0R3JheXNjYWxlKG9uOiBib29sZWFuKTogdm9pZDtcbiAgZ2V0SW52ZXJ0JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRJbnZlcnQob246IGJvb2xlYW4pOiB2b2lkO1xuXG4gIC8vIOKUgOKUgCBpbWFnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0SW1hZ2VNZXRhKCk6IE9ic2VydmFibGU8SUltYWdlTWV0YWRhdGFbXT47XG5cbiAgLyoqIEV4cG9ydCB0aGUgZGlzcGxheWVkIGltYWdlIOKAlCBjb21wb3NpdGVkIHdpdGggdGhlIGN1cnJlbnQgcGVyLWNoYW5uZWxcbiAgICogIHBzZXVkby1jb2xvdXJzIC8gd2luZG93IC8gY29sb3JtYXAg4oCUIGFzIGEgcHVibGljYXRpb24tcmVhZHkgUE5HIGRvd25sb2FkLiAqL1xuICBleHBvcnRDb21wb3NpdGUoKTogdm9pZDtcblxuICAvKiogRXhwb3J0IHRoZSB1bmRlcmx5aW5nIGltYWdlIGRhdGEg4oCUIGFsbCAob3IgdGhlIHZpc2libGUpIGNoYW5uZWxzIGF0IG5hdGl2ZVxuICAgKiAgYml0IGRlcHRoIOKAlCBhcyBhIGRhdGEtcHJlc2VydmluZyBtdWx0aS1iYW5kIFRJRkYgZG93bmxvYWQuIFNlcnZlci1zaWRlLCBzb1xuICAgKiAgaXQga2VlcHMgdHJ1ZSAxNi1iaXQgdmFsdWVzICh0aGUgUE5HIGNvbXBvc2l0ZSBpcyBhbiA4LWJpdCBmaWd1cmUpLiBPbmx5XG4gICAqICBtZWFuaW5nZnVsIGZvciA+OC1iaXQgaW1hZ2VzOyBhIG5vLW9wIG9uIGJhY2tlbmRzIHRoYXQgY2FuJ3QgcHJvdmlkZSBpdC4gKi9cbiAgZXhwb3J0RGF0YSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIERJIHRva2VuIGZvciB0aGUgQ2hhbm5lbHMgJiBIaXN0b2dyYW0gcGFuZSdzIEFQSS4gVGhlIGxpYnJhcnkgYmluZHMgaXQgdG8gaXRzIHJvdXRlclxuICogKFZpc3VhbGl6YXRpb25Nb2R1bGUgLyBwcm92aWRlVmlzdWFsaXphdGlvbik7IGhvc3RzIGluamVjdCBpdCwgdGhleSBkbyBub3QgcHJvdmlkZSBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENIQU5ORUxfSElTVE9HUkFNX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJQ2hhbm5lbEhpc3RvZ3JhbUFwaT4oJ0NIQU5ORUxfSElTVE9HUkFNX0FQSScpO1xuIl19
@@ -8,4 +8,4 @@
8
8
  * structurally, so the host keeps passing its own instances unchanged.
9
9
  */
10
10
  export {};
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9pbWFnZS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGlicmFyeS1vd25lZCBkYXRhIGludGVyZmFjZXMgZm9yIHRoZSBpbWFnZSB0aGUgdmlzdWFsaXphdGlvbiByZW5kZXJzLlxuICpcbiAqIFRoZSB2aXN1YWxpemF0aW9uIHBhY2thZ2UgbXVzdCBub3QgaW1wb3J0IHRoZSBob3N0IGFwcCdzIGNvbmNyZXRlIG1vZGVsc1xuICogKGBtYWluL21vZGVscy9maWxlLWluZm9gKSwgb3IgaXQgY2FuJ3QgYmVjb21lIGEgc3RhbmRhbG9uZSBsaWJyYXJ5LiBUaGVzZVxuICogc2xpbSBpbnRlcmZhY2VzIGRlY2xhcmUgb25seSB0aGUgZmllbGRzIHRoZSBsaWJyYXJ5IHJlYWRzL3dyaXRlczsgdGhlIGhvc3Qnc1xuICogYEltYWdlSW5mb2AvYEltYWdlTWV0YWRhdGFgIGNsYXNzZXMgYXJlIHB1cmUgZGF0YSBob2xkZXJzIHRoYXQgc2F0aXNmeSB0aGVtXG4gKiBzdHJ1Y3R1cmFsbHksIHNvIHRoZSBob3N0IGtlZXBzIHBhc3NpbmcgaXRzIG93biBpbnN0YW5jZXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVnaW9uU291cmNlIH0gZnJvbSAnLi4vcmVnaW9uLXNvdXJjZS9yZWdpb24tc291cmNlJztcblxuLyoqIFBlci1jaGFubmVsIG1ldGFkYXRhIGZyb20gdGhlIHNlcnZlciBkZXNjcmlwdG9yIChpc3N1ZSAjNzYpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hhbm5lbEluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTdWdnZXN0ZWQgZGlzcGxheSB0aW50IGFzIFwiI1JSR0dCQlwiLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICAvKiogRW1iZWRkZWQgMjU2LWVudHJ5IGRpc3BsYXkgTFVUIGFzIFwiI1JSR0dCQlwiIChpbnRlbnNpdHnihpJjb2xvciksIG9yXG4gICAqICBudWxsL3VuZGVmaW5lZCB3aGVuIHRoZSBmaWxlIGhhcyBubyBwYWxldHRlIGZvciB0aGlzIGNoYW5uZWwuICovXG4gIGx1dD86IHN0cmluZ1tdIHwgbnVsbDtcbiAgYml0RGVwdGg/OiBudW1iZXI7XG4gIC8qKiBQaXhlbC10eXBlIG1pbmltdW0gKGUuZy4gMCBmb3IgdW5zaWduZWQpLiBOYXRpdmUtdW5pdCBmbG9vciBvZiB0aGUgd2luZG93LiAqL1xuICBtaW5BbGxvd2VkPzogbnVtYmVyO1xuICAvKiogUGl4ZWwtdHlwZSBtYXhpbXVtIChlLmcuIDY1NTM1IGZvciB1bnNpZ25lZCAxNi1iaXQpLiBOYXRpdmUtdW5pdCBjZWlsaW5nLiAqL1xuICBtYXhBbGxvd2VkPzogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGUgY2hhbm5lbCBzdGFydHMgdmlzaWJsZTsgZWxzZSB0aGUgZmlyc3QgYERFRkFVTFRfVklTSUJMRV9DSEFOTkVMU2AgZG8uICovXG4gIHZpc2libGU/OiBib29sZWFuO1xufVxuXG4vKiogUGVyLXNlcmllcyBpbWFnZSBtZXRhZGF0YSAocGh5c2ljYWwgc2l6ZSArIGRpbWVuc2lvbnMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VNZXRhZGF0YSB7XG4gIGNoYW5uZWxDb3VudDogbnVtYmVyO1xuICByZ2JDaGFubmVsczogbnVtYmVyO1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgejogbnVtYmVyO1xuICAvKiogUGh5c2ljYWwgcGl4ZWwgc2l6ZSBpbiDCtW07IG51bGwvdW5kZWZpbmVkIHdoZW4gdGhlIGZvcm1hdCByZXBvcnRzIG5vbmUuICovXG4gIG1wcFg/OiBudW1iZXIgfCBudWxsO1xuICBtcHBZPzogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFBoeXNpY2FsIHNwYWNpbmcgQkVUV0VFTiBzbGljZXMgaW4gwrVtIOKAlCB0aGUgeiBjb3VudGVycGFydCBvZiBgbXBwWGAvYG1wcFlgLFxuICAgKiAgZm9yIGEgc3RhY2sgdGhhdCBrbm93cyBpdCAoYSByZXNhbXBsZWQgdm9sdW1lLCBhIGNvbmZvY2FsIHN0YWNrKS4gSXQgaXMgd2hhdFxuICAgKiAgbGV0cyB0aGUgM0Qgdm9sdW1lIHZpZXcgcmVuZGVyIHRydWUgYW5pc290cm9weTogd2l0aCBhbGwgdGhyZWUgcHJlc2VudCB0aGVcbiAgICogIHdvcmxkIGJveCBpcyB0aGUgaW1hZ2UncyByZWFsIHBoeXNpY2FsIGV4dGVudCwgc28gNDAgeCA0MCB4IDIwMCDCtW0gdm94ZWxzXG4gICAqICByZWFkIGFzIGEgYnJhaW4gYW5kIG5vdCBhcyBhIGN1YmUtYXNwZWN0IGJyaWNrLiBBYnNlbnQsIHRoZSB2aWV3IGZhbGxzIGJhY2tcbiAgICogIHRvIGl0cyByZXNvbHV0aW9uLWludmFyaWFudCByZWZlcmVuY2UgYm94LCB3aGljaCBpcyBzaGFwZS1vbmx5LiAqL1xuICBtcHBaPzogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFBlci1jaGFubmVsIG5hbWUvY29sb3IvTFVUIGZvciBtdWx0aWNoYW5uZWwgKG5vbi1SR0IpIGltYWdlcywgd2hlbiBrbm93bi4gKi9cbiAgY2hhbm5lbEluZm8/OiBJQ2hhbm5lbEluZm9bXSB8IG51bGw7XG59XG5cbi8qKiBUaGUgaW1hZ2UgY3VycmVudGx5IGJlaW5nIHZpc3VhbGl6ZWQuIEZpZWxkIG9wdGlvbmFsaXR5IG1pcnJvcnMgdGhlIGhvc3Qnc1xuICogIGBJbWFnZUluZm9gIHNvIGl0cyBpbnN0YW5jZXMgYXJlIGFzc2lnbmFibGUgdG8gdGhpcyBpbnRlcmZhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZUluZm8ge1xuICBpc0dyYXlzY2FsZTogYm9vbGVhbjtcbiAgdHJ1ZUltYWdlU2l6ZTogbnVtYmVyW107XG4gIHVybHM6IHN0cmluZ1tdO1xuICAvKiogT3B0aW9uYWwgc21hbGwtdGllciBVUkxzIChmYXN0IGJsdXJyeSBwbGFjZWhvbGRlciksIDE6MSB3aXRoIGB1cmxzYC4gKi9cbiAgc21hbGxVcmxzPzogc3RyaW5nW107XG4gIGlzU3RhY2s6IGJvb2xlYW47XG4gIHNob3dTdGFjazogYm9vbGVhbjtcbiAgc2NhbGVSYXRpbzogYm9vbGVhbjtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgcm9pSnNvblN0cj86IHN0cmluZztcbiAgLyoqIFBlci1zbGljZSBST0kgR2VvSlNPTiwgYWxpZ25lZCAxOjEgd2l0aCBgdXJsc2AsIGZvciBhIGZvbGRlciBzdGFjayB3aGVyZVxuICAgKiAgZWFjaCBzbGljZSBpcyBhIHNlcGFyYXRlIGZpbGUgd2l0aCBpdHMgb3duIHNpYmxpbmcgYDxzdGVtPi5nZW9qc29uYFxuICAgKiAgKGBudWxsYCBmb3Igc2xpY2VzIHdpdGhvdXQgb25lKS4gV2hlbiBwcmVzZW50LCB0aGUgY29tcG9uZW50IGFwcGxpZXNcbiAgICogIGByb2lKc29uU3Ryc1t6XWAgZm9yIHRoZSBkaXNwbGF5ZWQgc2xpY2UgYW5kIHN3YXBzIGl0IG9uIHNjcnViIOKAlCBhc1xuICAgKiAgb3Bwb3NlZCB0byB0aGUgc2NhbGFyIGByb2lKc29uU3RyYCwgd2hpY2ggaXMgb25lIFJPSSBzZXQgZm9yIHRoZSB3aG9sZVxuICAgKiAgaW1hZ2UgKGEgc2luZ2xlIGZpbGUgb3IgYSBzZXJ2ZXIgei1zdGFjaykuIChqaXQtdWkjOTMpICovXG4gIHJvaUpzb25TdHJzPzogKHN0cmluZyB8IG51bGwpW107XG4gIC8qKiBCYXNlIFVSTCBvZiBhIHNlcnZlci1zaWRlIHJlZ2lvbiBzb3VyY2UgZm9yIHRoaXMgaW1hZ2UgKHNlZSBgb3Blbkh0dHBSZWdpb25Tb3VyY2VgKTpcbiAgICogIGl0cyByZWdpb25zIGFyZSBkcmF3biBmcm9tIHRoZSBzZXJ2ZXIncyBsZXZlbC1vZi1kZXRhaWwgdGlsZXMgaW5zdGVhZCBvZiBiZWluZyBsb2FkZWRcbiAgICogIGZyb20gYHJvaUpzb25TdHJgLiBPbiBhIHN0YWNrLCBzbGljZSB6IHNob3dzIHRoZSBzb3VyY2UncyBwbGFuZSB6LiAqL1xuICByZWdpb25Tb3VyY2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBUaGUgaW1hZ2UncyBvd24gcmVnaW9ucywgb25lIHJlZ2lvbiBzb3VyY2UgcGVyIHNsaWNlLCBvcGVuZWQgdGhlIGZpcnN0IHRpbWUgaXRzIHNsaWNlIGlzXG4gICAqICBzaG93bjogd2hhdCBhbiBpbWFnZSBidWlsdCBmcm9tIGFubm90YXRpb25zIGFsb25lIGNhcnJpZXMgKHNlZSBgb3BlbkFubm90YXRpb25zYDogYSBsYWJlbFxuICAgKiAgdm9sdW1lIHRyYWNlZCBzbGljZSBieSBzbGljZSwgYSBmb2xkZXIgb2YgcGVyLXNsaWNlIEdlb0pTT04pLiBBdHRhY2hlZCB3aGVuIHRoZSBpbWFnZSBsYW5kcyxcbiAgICogIHJlcGxhY2luZyBpdHMgcmVnaW9ucywgYXMgYW4gaW1wb3J0ZWQgbGFiZWwgdm9sdW1lIG9yIGZvbGRlciBpczsgdGFrZXMgcHJlY2VkZW5jZSBvdmVyXG4gICAqICBgcm9pSnNvblN0cnNgLCBgcm9pSnNvblN0cmAgYW5kIGByZWdpb25Tb3VyY2VVcmxgLiBLZXllZCBieSBzbGljZSBpbmRleC4gKi9cbiAgcmVnaW9uU2xpY2VzPzogUmVhZG9ubHlNYXA8bnVtYmVyLCAoKSA9PiBQcm9taXNlPFJlZ2lvblNvdXJjZT4+O1xuICAvKiogUGVyLXNsaWNlLCBwZXItY2hhbm5lbCBwbGFuZSBVUkxzIGZvciBhIFNFUlZFUkxFU1MgbXVsdGljaGFubmVsIGltYWdlXG4gICAqICAoYHRpbGVkOiBmYWxzZWAgKyBgaW1hZ2VNZXRhWzBdLmNoYW5uZWxDb3VudCA+IDFgKS4gYGNoYW5uZWxVcmxzW3pdW2NdYFxuICAgKiAgaXMgYSBjb21wbGV0ZSBzaW5nbGUtYmFuZCBpbWFnZSBvZiBjaGFubmVsIGMgYXQgc2xpY2Ugei4gVGhlIE9TRCBzaW1wbGVcbiAgICogIHBhdGggY29tcG9zaXRlcyB0aGVtIGNsaWVudC1zaWRlIOKAlCBwZXItY2hhbm5lbCBjb2xvdXIvd2luZG93L2dhbW1hIGZyb21cbiAgICogIHRoZSBjaGFubmVsIHBhbmUg4oCUIGluc3RlYWQgb2Ygb3BlbmluZyB0aGUgZmxhdCBgdXJsc1t6XWAuIChqaXQtdWkjNzYpICovXG4gIGNoYW5uZWxVcmxzPzogc3RyaW5nW11bXTtcbiAgaW1hZ2VNZXRhOiBJSW1hZ2VNZXRhZGF0YVtdO1xuICAvKiogSG93IHRoZSBPcGVuU2VhZHJhZ29uIGJhY2tlbmQgc2hvdWxkIHNvdXJjZSB0aGlzIGltYWdlLlxuICAgKiAgLSBgdHJ1ZWAvYWJzZW50IChkZWZhdWx0KTogc2VydmVyLXRpbGVkIOKAlCBPU0QgcG9sbHMgYC90aWxlcy9pbmZvYCBmb3IgYVxuICAgKiAgICBweXJhbWlkIGFuZCBmZXRjaGVzIHRpbGVzIGZyb20gdGhlIHNsaWRlLWNyb3Agc2VydmVyICh3aG9sZS1zbGlkZSBwYXRoKS5cbiAgICogIC0gYGZhbHNlYDogYSBzZWxmLWNvbnRhaW5lZCwgZGlyZWN0bHktbG9hZGFibGUgaW1hZ2Ug4oCUIGB1cmxzW3pJbmRleF1gIGlzIGFcbiAgICogICAgY29tcGxldGUgaW1hZ2UgKGUuZy4gYSBgYmxvYjpgIFVSTCBidWlsdCBmcm9tIGEgY2xpZW50LXNpZGUgcGl4ZWwgYnVmZmVyKSxcbiAgICogICAgb3BlbmVkIHZpYSBPU0QncyBzaW5nbGUtaW1hZ2Ugc291cmNlIHdpdGggbm8gdGlsZSBzZXJ2ZXIuIExldHMgaW4tbWVtb3J5XG4gICAqICAgIGltYWdlcyAodGhlIHByb2Nlc3NpbmcgcGlwZWxpbmUpIHVzZSB0aGUgT1NEIHZpZXdlciB3aXRob3V0IGEgcm91bmQtdHJpcC4gKi9cbiAgdGlsZWQ/OiBib29sZWFuO1xuICAvKiogT25lLXNob3QgaGludDogb3BlbiB0aGUgc3RhY2sgb24gdGhpcyBzbGljZSBpbnN0ZWFkIG9mIHNsaWNlIDAgKGUuZy4gdGhlXG4gICAqICBob3N0IGNsaWNrZWQgYSBzcGVjaWZpYyBmaWxlIHdpdGhpbiBhIG51bWJlcmVkIGltYWdlIHNlcmllcykuIFRoZVxuICAgKiAgY29tcG9uZW50IGNvbnN1bWVzIGFuZCBjbGVhcnMgdGhpcyB0aGUgZmlyc3QgdGltZSBpdCBzZWVzIHRoZSBvYmplY3QsIHNvXG4gICAqICByZS1kZWxpdmVyaW5nIHRoZSBzYW1lIEltYWdlSW5mbyAoZS5nLiBhIHBsb3QtdHlwZSBzd2l0Y2gpIGRvZXNuJ3QgcmVzZXRcbiAgICogIHRoZSB1c2VyJ3MgY3VycmVudCBzY3J1YiBwb3NpdGlvbi4gKi9cbiAgaW5pdGlhbFpJbmRleD86IG51bWJlcjtcbn1cbiJdfQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9pbWFnZS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGlicmFyeS1vd25lZCBkYXRhIGludGVyZmFjZXMgZm9yIHRoZSBpbWFnZSB0aGUgdmlzdWFsaXphdGlvbiByZW5kZXJzLlxuICpcbiAqIFRoZSB2aXN1YWxpemF0aW9uIHBhY2thZ2UgbXVzdCBub3QgaW1wb3J0IHRoZSBob3N0IGFwcCdzIGNvbmNyZXRlIG1vZGVsc1xuICogKGBtYWluL21vZGVscy9maWxlLWluZm9gKSwgb3IgaXQgY2FuJ3QgYmVjb21lIGEgc3RhbmRhbG9uZSBsaWJyYXJ5LiBUaGVzZVxuICogc2xpbSBpbnRlcmZhY2VzIGRlY2xhcmUgb25seSB0aGUgZmllbGRzIHRoZSBsaWJyYXJ5IHJlYWRzL3dyaXRlczsgdGhlIGhvc3Qnc1xuICogYEltYWdlSW5mb2AvYEltYWdlTWV0YWRhdGFgIGNsYXNzZXMgYXJlIHB1cmUgZGF0YSBob2xkZXJzIHRoYXQgc2F0aXNmeSB0aGVtXG4gKiBzdHJ1Y3R1cmFsbHksIHNvIHRoZSBob3N0IGtlZXBzIHBhc3NpbmcgaXRzIG93biBpbnN0YW5jZXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVnaW9uU291cmNlIH0gZnJvbSAnLi4vcmVnaW9uLXNvdXJjZS9yZWdpb24tc291cmNlJztcblxuLyoqIFBlci1jaGFubmVsIG1ldGFkYXRhIGZyb20gdGhlIHNlcnZlciBkZXNjcmlwdG9yIChpc3N1ZSAjNzYpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hhbm5lbEluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTdWdnZXN0ZWQgZGlzcGxheSB0aW50IGFzIFwiI1JSR0dCQlwiLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICAvKiogRW1iZWRkZWQgMjU2LWVudHJ5IGRpc3BsYXkgTFVUIGFzIFwiI1JSR0dCQlwiIChpbnRlbnNpdHnihpJjb2xvciksIG9yXG4gICAqICBudWxsL3VuZGVmaW5lZCB3aGVuIHRoZSBmaWxlIGhhcyBubyBwYWxldHRlIGZvciB0aGlzIGNoYW5uZWwuICovXG4gIGx1dD86IHN0cmluZ1tdIHwgbnVsbDtcbiAgYml0RGVwdGg/OiBudW1iZXI7XG4gIC8qKiBQaXhlbC10eXBlIG1pbmltdW0gKGUuZy4gMCBmb3IgdW5zaWduZWQpLiBOYXRpdmUtdW5pdCBmbG9vciBvZiB0aGUgd2luZG93LiAqL1xuICBtaW5BbGxvd2VkPzogbnVtYmVyO1xuICAvKiogUGl4ZWwtdHlwZSBtYXhpbXVtIChlLmcuIDY1NTM1IGZvciB1bnNpZ25lZCAxNi1iaXQpLiBOYXRpdmUtdW5pdCBjZWlsaW5nLiAqL1xuICBtYXhBbGxvd2VkPzogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGUgY2hhbm5lbCBzdGFydHMgdmlzaWJsZTsgZWxzZSB0aGUgZmlyc3QgYERFRkFVTFRfVklTSUJMRV9DSEFOTkVMU2AgZG8uICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGdyb3VwcyB0aGUgY2hhbm5lbCBpcyBpbiwgb3V0ZXJtb3N0IGZpcnN0LCBhcyB0aGUgaW1hZ2UncyBtZXRhZGF0YSBkZXNjcmliZXMgdGhlbSAoYW5cbiAgICogaW5zdHJ1bWVudCBwYW5lbCdzIGtpbmQgb2YgdGFyZ2V0LCB0aGVuIHRoZSBwYW5lbDogYFsnUHJvdGVpbiBJRicsICdDZWxsIFNpZ25hbGluZyddYCk7IHRoZVxuICAgKiBDaGFubmVscyBwYW5lIGxpc3RzIHRoZSBjaGFubmVscyBhcyBhIHRyZWUgb2YgdGhlbS4gQWJzZW50IG9yIGVtcHR5IGZvciBhIGNoYW5uZWwgaW4gbm9uZS5cbiAgICovXG4gIGdyb3VwPzogc3RyaW5nW10gfCBudWxsO1xufVxuXG4vKiogUGVyLXNlcmllcyBpbWFnZSBtZXRhZGF0YSAocGh5c2ljYWwgc2l6ZSArIGRpbWVuc2lvbnMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VNZXRhZGF0YSB7XG4gIGNoYW5uZWxDb3VudDogbnVtYmVyO1xuICByZ2JDaGFubmVsczogbnVtYmVyO1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgejogbnVtYmVyO1xuICAvKiogUGh5c2ljYWwgcGl4ZWwgc2l6ZSBpbiDCtW07IG51bGwvdW5kZWZpbmVkIHdoZW4gdGhlIGZvcm1hdCByZXBvcnRzIG5vbmUuICovXG4gIG1wcFg/OiBudW1iZXIgfCBudWxsO1xuICBtcHBZPzogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFBoeXNpY2FsIHNwYWNpbmcgQkVUV0VFTiBzbGljZXMgaW4gwrVtIOKAlCB0aGUgeiBjb3VudGVycGFydCBvZiBgbXBwWGAvYG1wcFlgLFxuICAgKiAgZm9yIGEgc3RhY2sgdGhhdCBrbm93cyBpdCAoYSByZXNhbXBsZWQgdm9sdW1lLCBhIGNvbmZvY2FsIHN0YWNrKS4gSXQgaXMgd2hhdFxuICAgKiAgbGV0cyB0aGUgM0Qgdm9sdW1lIHZpZXcgcmVuZGVyIHRydWUgYW5pc290cm9weTogd2l0aCBhbGwgdGhyZWUgcHJlc2VudCB0aGVcbiAgICogIHdvcmxkIGJveCBpcyB0aGUgaW1hZ2UncyByZWFsIHBoeXNpY2FsIGV4dGVudCwgc28gNDAgeCA0MCB4IDIwMCDCtW0gdm94ZWxzXG4gICAqICByZWFkIGFzIGEgYnJhaW4gYW5kIG5vdCBhcyBhIGN1YmUtYXNwZWN0IGJyaWNrLiBBYnNlbnQsIHRoZSB2aWV3IGZhbGxzIGJhY2tcbiAgICogIHRvIGl0cyByZXNvbHV0aW9uLWludmFyaWFudCByZWZlcmVuY2UgYm94LCB3aGljaCBpcyBzaGFwZS1vbmx5LiAqL1xuICBtcHBaPzogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFBlci1jaGFubmVsIG5hbWUvY29sb3IvTFVUIGZvciBtdWx0aWNoYW5uZWwgKG5vbi1SR0IpIGltYWdlcywgd2hlbiBrbm93bi4gKi9cbiAgY2hhbm5lbEluZm8/OiBJQ2hhbm5lbEluZm9bXSB8IG51bGw7XG59XG5cbi8qKiBUaGUgaW1hZ2UgY3VycmVudGx5IGJlaW5nIHZpc3VhbGl6ZWQuIEZpZWxkIG9wdGlvbmFsaXR5IG1pcnJvcnMgdGhlIGhvc3Qnc1xuICogIGBJbWFnZUluZm9gIHNvIGl0cyBpbnN0YW5jZXMgYXJlIGFzc2lnbmFibGUgdG8gdGhpcyBpbnRlcmZhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZUluZm8ge1xuICBpc0dyYXlzY2FsZTogYm9vbGVhbjtcbiAgdHJ1ZUltYWdlU2l6ZTogbnVtYmVyW107XG4gIHVybHM6IHN0cmluZ1tdO1xuICAvKiogT3B0aW9uYWwgc21hbGwtdGllciBVUkxzIChmYXN0IGJsdXJyeSBwbGFjZWhvbGRlciksIDE6MSB3aXRoIGB1cmxzYC4gKi9cbiAgc21hbGxVcmxzPzogc3RyaW5nW107XG4gIGlzU3RhY2s6IGJvb2xlYW47XG4gIHNob3dTdGFjazogYm9vbGVhbjtcbiAgc2NhbGVSYXRpbzogYm9vbGVhbjtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgcm9pSnNvblN0cj86IHN0cmluZztcbiAgLyoqIFBlci1zbGljZSBST0kgR2VvSlNPTiwgYWxpZ25lZCAxOjEgd2l0aCBgdXJsc2AsIGZvciBhIGZvbGRlciBzdGFjayB3aGVyZVxuICAgKiAgZWFjaCBzbGljZSBpcyBhIHNlcGFyYXRlIGZpbGUgd2l0aCBpdHMgb3duIHNpYmxpbmcgYDxzdGVtPi5nZW9qc29uYFxuICAgKiAgKGBudWxsYCBmb3Igc2xpY2VzIHdpdGhvdXQgb25lKS4gV2hlbiBwcmVzZW50LCB0aGUgY29tcG9uZW50IGFwcGxpZXNcbiAgICogIGByb2lKc29uU3Ryc1t6XWAgZm9yIHRoZSBkaXNwbGF5ZWQgc2xpY2UgYW5kIHN3YXBzIGl0IG9uIHNjcnViIOKAlCBhc1xuICAgKiAgb3Bwb3NlZCB0byB0aGUgc2NhbGFyIGByb2lKc29uU3RyYCwgd2hpY2ggaXMgb25lIFJPSSBzZXQgZm9yIHRoZSB3aG9sZVxuICAgKiAgaW1hZ2UgKGEgc2luZ2xlIGZpbGUgb3IgYSBzZXJ2ZXIgei1zdGFjaykuIChqaXQtdWkjOTMpICovXG4gIHJvaUpzb25TdHJzPzogKHN0cmluZyB8IG51bGwpW107XG4gIC8qKiBCYXNlIFVSTCBvZiBhIHNlcnZlci1zaWRlIHJlZ2lvbiBzb3VyY2UgZm9yIHRoaXMgaW1hZ2UgKHNlZSBgb3Blbkh0dHBSZWdpb25Tb3VyY2VgKTpcbiAgICogIGl0cyByZWdpb25zIGFyZSBkcmF3biBmcm9tIHRoZSBzZXJ2ZXIncyBsZXZlbC1vZi1kZXRhaWwgdGlsZXMgaW5zdGVhZCBvZiBiZWluZyBsb2FkZWRcbiAgICogIGZyb20gYHJvaUpzb25TdHJgLiBPbiBhIHN0YWNrLCBzbGljZSB6IHNob3dzIHRoZSBzb3VyY2UncyBwbGFuZSB6LiAqL1xuICByZWdpb25Tb3VyY2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBUaGUgaW1hZ2UncyBvd24gcmVnaW9ucywgb25lIHJlZ2lvbiBzb3VyY2UgcGVyIHNsaWNlLCBvcGVuZWQgdGhlIGZpcnN0IHRpbWUgaXRzIHNsaWNlIGlzXG4gICAqICBzaG93bjogd2hhdCBhbiBpbWFnZSBidWlsdCBmcm9tIGFubm90YXRpb25zIGFsb25lIGNhcnJpZXMgKHNlZSBgb3BlbkFubm90YXRpb25zYDogYSBsYWJlbFxuICAgKiAgdm9sdW1lIHRyYWNlZCBzbGljZSBieSBzbGljZSwgYSBmb2xkZXIgb2YgcGVyLXNsaWNlIEdlb0pTT04pLiBBdHRhY2hlZCB3aGVuIHRoZSBpbWFnZSBsYW5kcyxcbiAgICogIHJlcGxhY2luZyBpdHMgcmVnaW9ucywgYXMgYW4gaW1wb3J0ZWQgbGFiZWwgdm9sdW1lIG9yIGZvbGRlciBpczsgdGFrZXMgcHJlY2VkZW5jZSBvdmVyXG4gICAqICBgcm9pSnNvblN0cnNgLCBgcm9pSnNvblN0cmAgYW5kIGByZWdpb25Tb3VyY2VVcmxgLiBLZXllZCBieSBzbGljZSBpbmRleC4gKi9cbiAgcmVnaW9uU2xpY2VzPzogUmVhZG9ubHlNYXA8bnVtYmVyLCAoKSA9PiBQcm9taXNlPFJlZ2lvblNvdXJjZT4+O1xuICAvKiogUGVyLXNsaWNlLCBwZXItY2hhbm5lbCBwbGFuZSBVUkxzIGZvciBhIFNFUlZFUkxFU1MgbXVsdGljaGFubmVsIGltYWdlXG4gICAqICAoYHRpbGVkOiBmYWxzZWAgKyBgaW1hZ2VNZXRhWzBdLmNoYW5uZWxDb3VudCA+IDFgKS4gYGNoYW5uZWxVcmxzW3pdW2NdYFxuICAgKiAgaXMgYSBjb21wbGV0ZSBzaW5nbGUtYmFuZCBpbWFnZSBvZiBjaGFubmVsIGMgYXQgc2xpY2Ugei4gVGhlIE9TRCBzaW1wbGVcbiAgICogIHBhdGggY29tcG9zaXRlcyB0aGVtIGNsaWVudC1zaWRlIOKAlCBwZXItY2hhbm5lbCBjb2xvdXIvd2luZG93L2dhbW1hIGZyb21cbiAgICogIHRoZSBjaGFubmVsIHBhbmUg4oCUIGluc3RlYWQgb2Ygb3BlbmluZyB0aGUgZmxhdCBgdXJsc1t6XWAuIChqaXQtdWkjNzYpICovXG4gIGNoYW5uZWxVcmxzPzogc3RyaW5nW11bXTtcbiAgaW1hZ2VNZXRhOiBJSW1hZ2VNZXRhZGF0YVtdO1xuICAvKiogSG93IHRoZSBPcGVuU2VhZHJhZ29uIGJhY2tlbmQgc2hvdWxkIHNvdXJjZSB0aGlzIGltYWdlLlxuICAgKiAgLSBgdHJ1ZWAvYWJzZW50IChkZWZhdWx0KTogc2VydmVyLXRpbGVkIOKAlCBPU0QgcG9sbHMgYC90aWxlcy9pbmZvYCBmb3IgYVxuICAgKiAgICBweXJhbWlkIGFuZCBmZXRjaGVzIHRpbGVzIGZyb20gdGhlIHNsaWRlLWNyb3Agc2VydmVyICh3aG9sZS1zbGlkZSBwYXRoKS5cbiAgICogIC0gYGZhbHNlYDogYSBzZWxmLWNvbnRhaW5lZCwgZGlyZWN0bHktbG9hZGFibGUgaW1hZ2Ug4oCUIGB1cmxzW3pJbmRleF1gIGlzIGFcbiAgICogICAgY29tcGxldGUgaW1hZ2UgKGUuZy4gYSBgYmxvYjpgIFVSTCBidWlsdCBmcm9tIGEgY2xpZW50LXNpZGUgcGl4ZWwgYnVmZmVyKSxcbiAgICogICAgb3BlbmVkIHZpYSBPU0QncyBzaW5nbGUtaW1hZ2Ugc291cmNlIHdpdGggbm8gdGlsZSBzZXJ2ZXIuIExldHMgaW4tbWVtb3J5XG4gICAqICAgIGltYWdlcyAodGhlIHByb2Nlc3NpbmcgcGlwZWxpbmUpIHVzZSB0aGUgT1NEIHZpZXdlciB3aXRob3V0IGEgcm91bmQtdHJpcC4gKi9cbiAgdGlsZWQ/OiBib29sZWFuO1xuICAvKiogT25lLXNob3QgaGludDogb3BlbiB0aGUgc3RhY2sgb24gdGhpcyBzbGljZSBpbnN0ZWFkIG9mIHNsaWNlIDAgKGUuZy4gdGhlXG4gICAqICBob3N0IGNsaWNrZWQgYSBzcGVjaWZpYyBmaWxlIHdpdGhpbiBhIG51bWJlcmVkIGltYWdlIHNlcmllcykuIFRoZVxuICAgKiAgY29tcG9uZW50IGNvbnN1bWVzIGFuZCBjbGVhcnMgdGhpcyB0aGUgZmlyc3QgdGltZSBpdCBzZWVzIHRoZSBvYmplY3QsIHNvXG4gICAqICByZS1kZWxpdmVyaW5nIHRoZSBzYW1lIEltYWdlSW5mbyAoZS5nLiBhIHBsb3QtdHlwZSBzd2l0Y2gpIGRvZXNuJ3QgcmVzZXRcbiAgICogIHRoZSB1c2VyJ3MgY3VycmVudCBzY3J1YiBwb3NpdGlvbi4gKi9cbiAgaW5pdGlhbFpJbmRleD86IG51bWJlcjtcbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { colormapFromLut } from 'napari-js';
2
2
  import { NO_CATEGORY, isCategoricalColumn, } from '../../../contracts/spatial-dataset.contract';
3
3
  import { DEFAULT_CATEGORICAL_PALETTE, MISSING_COLOR, contrastWindow, parseHex, resolveCategoryColors, } from '../../../spatial/spatial-encoding';
4
- import { POLYGON_LEVEL_MIN_CELL_PX, cellTypeColumnFor, cellsShown, polygonLevelFor, tileId, tilesInRect, typicalCellDiameter, } from '../../../spatial/lod';
4
+ import { POLYGON_LEVEL_MIN_CELL_PX, cellTypeColumnFor, cellsShown, drawnCellSets, polygonLevelFor, tileId, tilesInRect, typicalCellDiameter, } from '../../../spatial/lod';
5
5
  import { filterRings, mergePolygonTiles } from '../../../spatial/spatial-tile-merge';
6
6
  import { geneFilterKey } from '../../../spatial/spatial-gene-filter';
7
7
  import { ContrastWindowCache } from '../napari-spatial-encoding';
@@ -204,13 +204,10 @@ export class CellLayers {
204
204
  let nuclei = null;
205
205
  let geometryKey;
206
206
  if (tiled) {
207
- const both = view.cellSet === 'both';
208
- const set = !both && view.cellSet && tiled.sets.some((s) => s.name === view.cellSet)
209
- ? view.cellSet
210
- : (tiled.defaultSet ?? tiled.sets[0]?.name);
211
- if (!set)
207
+ const drawn = drawnCellSets(tiled, view.cellSet);
208
+ if (!drawn)
212
209
  return null;
213
- const nucleusSet = both ? tiled.sets.find((s) => s.name !== set)?.name : undefined;
210
+ const { set, nucleusSet } = drawn;
214
211
  const keys = tilesInRect(rect, level, tiled.levels, tiled.bounds, MAX_CELL_TILES);
215
212
  geometryKey = `${dataset.id}|${set}|${nucleusSet ?? ''}|${hiddenKey}|${keys.map(tileId).join(',')}`;
216
213
  if (geometryKey === this.cellGeometryKey && this.currentRings) {
@@ -272,4 +269,4 @@ function categoryRgba(meta) {
272
269
  const hex = meta && meta.kind === 'categorical' ? resolveCategoryColors(meta) : [DEFAULT_CATEGORICAL_PALETTE[0]];
273
270
  return hex.map((h) => rgba01(parseHex(h)));
274
271
  }
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1sYXllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFDTCxXQUFXLEVBS1gsbUJBQW1CLEdBQ3BCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsRUFDUixxQkFBcUIsR0FDdEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUtqRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFvQjFCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQWNyQixZQUNtQixJQUFxQixFQUNyQixNQUFxQyxFQUNyQyxNQUF5QixFQUN6QixJQUFvQjtRQUhwQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUErQjtRQUNyQyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQWpCL0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDOUIsMEVBQTBFO1FBQ2xFLGlCQUFZLEdBQThC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TUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbG9ybWFwRnJvbUx1dCB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IENvbG9ybWFwLCBSR0JBIH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUgeyBSZ2IgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7XG4gIE5PX0NBVEVHT1JZLFxuICBTcGF0aWFsQ29sdW1uLFxuICBTcGF0aWFsRGF0YXNldCxcbiAgU3BhdGlhbFBvbHlnb25UaWxlLFxuICBTcGF0aWFsUG9seWdvbnMsXG4gIGlzQ2F0ZWdvcmljYWxDb2x1bW4sXG59IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFLFxuICBNSVNTSU5HX0NPTE9SLFxuICBjb250cmFzdFdpbmRvdyxcbiAgcGFyc2VIZXgsXG4gIHJlc29sdmVDYXRlZ29yeUNvbG9ycyxcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25NYXNrIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5pbXBvcnQge1xuICBEYXRhUmVjdCxcbiAgUE9MWUdPTl9MRVZFTF9NSU5fQ0VMTF9QWCxcbiAgY2VsbFR5cGVDb2x1bW5Gb3IsXG4gIGNlbGxzU2hvd24sXG4gIHBvbHlnb25MZXZlbEZvcixcbiAgdGlsZUlkLFxuICB0aWxlc0luUmVjdCxcbiAgdHlwaWNhbENlbGxEaWFtZXRlcixcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9sb2QnO1xuaW1wb3J0IHsgZmlsdGVyUmluZ3MsIG1lcmdlUG9seWdvblRpbGVzIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXRpbGUtbWVyZ2UnO1xuaW1wb3J0IHsgZ2VuZUZpbHRlcktleSB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1nZW5lLWZpbHRlcic7XG5pbXBvcnQgeyBDb250cmFzdFdpbmRvd0NhY2hlIH0gZnJvbSAnLi4vbmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcnO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yaWNhbExvb2t1cCwgSGlkZGVuQ29kZXMgfSBmcm9tICcuL2NhdGVnb3JpY2FsLWxvb2t1cCc7XG5pbXBvcnQgdHlwZSB7IE9yZGVyZWRMYXllckdyb3VwcywgVGlsZUdyb3VwIH0gZnJvbSAnLi9sYXllci1ncm91cHMnO1xuaW1wb3J0IHR5cGUgeyBQbGFuQ29udGV4dCB9IGZyb20gJy4vcGxhbi1jb250ZXh0JztcblxuY29uc3QgTUFYX0NFTExfVElMRVMgPSA0ODtcblxuLyoqIFRoZSBjZWxscycgY29sb3VycyBhcyBhIHNoYXBlcyBsYXllciB0YWtlcyB0aGVtOiBwZXItc2hhcGUgUkdCQSwgdmFsdWVzIG92ZXIgYSBjb2xvcm1hcCwgb3JcbiAqICBvbmUgY29sb3VyLiAqL1xuaW50ZXJmYWNlIENlbGxDb2xvcnMge1xuICB2YWx1ZXM/OiBGbG9hdDMyQXJyYXk7XG4gIGNvbG9ybWFwPzogQ29sb3JtYXA7XG4gIGNvbnRyYXN0TGltaXRzPzogW251bWJlciwgbnVtYmVyXTtcbiAgY29sb3I/OiBSR0JBO1xuICBmYWNlQ29sb3I/OiBGbG9hdDMyQXJyYXk7XG59XG5cbi8qKiBXaGF0IHRoZSBjZWxsIGxheWVycyBuZWVkIGZyb20gdGhlIHNlcnZpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxMYXllcnNIb3N0IHtcbiAgLyoqIFRoZSBjb250aW51b3VzIExVVCB0aGUgdmlldyBpcyB1c2luZyAoc28gY2VsbHMgY29sb3VyZWQgYnkgYSBnZW5lIG1hdGNoIHRoZSBtYXJrZXJzKS4gKi9cbiAgY29udGludW91c0x1dCh2aWV3OiBTcGF0aWFsVmlld1N0YXRlKTogUmdiW107XG4gIC8qKiBPdXRsaW5lcyBhcHBlYXJlZCBvciBkaXNhcHBlYXJlZDogdGhlIG1hcmtlcnMnIHZpc2liaWxpdHkgZm9sbG93cy4gKi9cbiAgcG9seWdvbnNTaG93bkNoYW5nZWQoc2hvd246IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBjZWxsIG91dGxpbmVzIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXcsIGF0IHRoZSBwb2x5Z29uIGxldmVsIHRoZSB6b29tIGNhbGxzIGZvcjogYSBmaWxsLFxuICogYW4gb3V0bGluZSBvciBib3RoIChwbHVzIG51Y2xldXMgb3V0bGluZXMgZm9yIHRoZSBcImJvdGhcIiBjZWxsIHNldCksIGNvbG91cmVkIGJ5IHRoZSB2aWV3J3NcbiAqIGNlbGwtY29sb3VyIG1vZGUsIHdpdGggc3dpdGNoZWQtb2ZmIGdyb3VwcyBsZWZ0IG91dCBvZiB0aGUgZ2VvbWV0cnkuXG4gKlxuICogR2VvbWV0cnkgYW5kIHN0eWxlIGFyZSBrZXllZCBhcGFydCwgc28gYSByZWNvbG91ciAoYSBuZXcgY2VsbC10eXBlIGNvbHVtbiwgYSBzZWxlY3Rpb24pXG4gKiByZXdyaXRlcyB0aGUgcGVyLXNoYXBlIHZhbHVlcyBvZiB0aGUgZXhpc3RpbmcgbGF5ZXJzIGFuZCBuZXZlciByZS1leHBhbmRzIHRoZSByaW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIENlbGxMYXllcnMge1xuICBwcml2YXRlIHBvbHlnb25zU2hvd24gPSBmYWxzZTtcbiAgLyoqIFJpbmdzIGN1cnJlbnRseSBkcmF3biBhbmQgdGhlIChkYXRhc2V0LCBzZXQsIHRpbGVzKSB0aGV5IGNhbWUgZnJvbS4gKi9cbiAgcHJpdmF0ZSBjdXJyZW50UmluZ3M6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNlbGxHZW9tZXRyeUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudE51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2VsbFN0eWxlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIFNlbGVjdGlvbiBpZGVudGl0eSDihpIgcmV2aXNpb24sIHNvIGEgY2hhbmdlIGtleSBjYW4gbmFtZSBhIHNlbGVjdGlvbiBjaGVhcGx5LiAqL1xuICBwcml2YXRlIGxhc3RTZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2VsZWN0aW9uUmV2aXNpb24gPSAwO1xuICAvKiogQ29udGludW91cyBjb2xvdXJpbmdzJyB3aW5kb3dzLCBwZXIgKHZlY3RvciwgY2xpcCwgbG9nKTogYGNvbnRyYXN0V2luZG93YCBzb3J0cyBldmVyeVxuICAgKiAgdmFsdWUsIGFuZCBhIHNlbGVjdGlvbiBvciBvcGFjaXR5IGNoYW5nZSByZWNvbG91cnMgd2l0aCB0aGUgdmVjdG9yIHVuY2hhbmdlZCAoU1BBVElBTC0xMikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29udHJhc3RXaW5kb3dzID0gbmV3IENvbnRyYXN0V2luZG93Q2FjaGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwczogT3JkZXJlZExheWVyR3JvdXBzPFRpbGVHcm91cD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb29rdXA6IENhdGVnb3JpY2FsTG9va3VwLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogQ2VsbExheWVyc0hvc3QsXG4gICkge31cblxuICAvKiogVHJ1ZSB3aGlsZSBvdXRsaW5lcyBhcmUgb24gc2NyZWVuIOKAlCB0aGUgc2VydmljZSBoaWRlcyBpdHMgZG90cyB0aGVuLiAqL1xuICBnZXQgb3V0bGluZXNTaG93bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wb2x5Z29uc1Nob3duO1xuICB9XG5cbiAgLyoqIFRoZSB2aWV3ZXIgd2VudCBhd2F5IChpdHMgbGF5ZXJzIHdpdGggaXQpOiB0aGUgb3V0bGluZXMgYXJlIG5vIGxvbmdlciBzaG93bi4gKi9cbiAgZGV0YWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBEcmF3IHRoZSBjZWxscyBjb3ZlcmluZyBgcmVjdGAgYXQgdGhlIGxldmVsIGBweFBlclVuaXRgIGNhbGxzIGZvciwgb3IgZHJvcCB0aGVtLiAqL1xuICBhc3luYyBwbGFuKFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayxcbiAgICByZWN0OiBEYXRhUmVjdCxcbiAgICBweFBlclVuaXQ6IG51bWJlcixcbiAgICBjdHg6IFBsYW5Db250ZXh0LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aWxlZCA9IGRhdGFzZXQucG9seWdvblRpbGVzO1xuICAgIGNvbnN0IHdob2xlID0gIXRpbGVkICYmIGRhdGFzZXQucG9seWdvbnMgJiYgdGhpcy5wb3J0LmdldFBvbHlnb25zO1xuICAgIGlmICghY2VsbHNTaG93bihkYXRhc2V0LCB2aWV3KSB8fCAoIXRpbGVkICYmICF3aG9sZSkpIHtcbiAgICAgIHRoaXMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaWFtZXRlciA9IHR5cGljYWxDZWxsRGlhbWV0ZXIoZGF0YXNldC5vYnNlcnZhdGlvbnMucmFkaXVzKTtcbiAgICAvLyBXaG9sZS1kYXRhc2V0IHJpbmdzIGhhdmUgb25lIGxldmVsIGFuZCBubyBjb2Fyc2VyIGZhbGxiYWNrLCBzbyB0aGV5IGFyZSBkcmF3biBhc1xuICAgIC8vIHNvb24gYXMgYSBjZWxsIGlzIGJpZyBlbm91Z2ggdG8gcmVhZCBhcyBhIHNoYXBlIHJhdGhlciB0aGFuIGEgZG90LlxuICAgIGNvbnN0IGxldmVsID0gdGlsZWRcbiAgICAgID8gcG9seWdvbkxldmVsRm9yKHB4UGVyVW5pdCwgZGlhbWV0ZXIsIHRpbGVkLmxldmVscy5sZW5ndGgpXG4gICAgICA6IHB4UGVyVW5pdCAqIGRpYW1ldGVyID49IFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFhbMl1cbiAgICAgICAgPyAwXG4gICAgICAgIDogLTE7XG4gICAgaWYgKGxldmVsIDwgMCkge1xuICAgICAgdGhpcy5kcm9wKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR3JvdXBzIHN3aXRjaGVkIG9mZiBpbiB0aGUgbGlzdDogdGhlaXIgY2VsbHMgYXJlIGxlZnQgb3V0IG9mIHRoZSBnZW9tZXRyeS5cbiAgICBjb25zdCBoaWRkZW4gPSBhd2FpdCB0aGlzLmxvb2t1cC5oaWRkZW5Db2RlcyhkYXRhc2V0LCB2aWV3KTtcbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcbiAgICBjb25zdCBsYWJlbCA9IHZpZXcuY2VsbFNldCA9PT0gJ2JvdGgnID8gJ0NlbGxzIGFuZCBudWNsZWknIDogdmlldy5jZWxsU2V0ID09PSAnbnVjbGV1cycgPyAnTnVjbGVpJyA6ICdDZWxscyc7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBhd2FpdCBjdHgudHJhY2sobGFiZWwsIHRoaXMuY2VsbEdlb21ldHJ5KGRhdGFzZXQsIHZpZXcsIHJlY3QsIGxldmVsLCBoaWRkZW4sIGN0eCkpO1xuICAgIGlmICghZ2VvbWV0cnkpIHJldHVybjtcbiAgICBjb25zdCB7IHJpbmdzLCBudWNsZWksIGdlb21ldHJ5S2V5IH0gPSBnZW9tZXRyeTtcblxuICAgIGNvbnN0IGdlb21ldHJ5Q2hhbmdlZCA9IGdlb21ldHJ5S2V5ICE9PSB0aGlzLmNlbGxHZW9tZXRyeUtleTtcbiAgICBjb25zdCBzdHlsZUtleSA9IFtcbiAgICAgIGdlb21ldHJ5S2V5LFxuICAgICAgdmlldy5jZWxsQ29sb3JNb2RlLFxuICAgICAgdmlldy5jZWxsQ29sb3JHZW5lLFxuICAgICAgdmlldy5jZWxsU2luZ2xlQ29sb3IsXG4gICAgICBjZWxsVHlwZUNvbHVtbkZvcihkYXRhc2V0LCB2aWV3KSxcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmV2KHNlbGVjdGlvbiksXG4gICAgICB2aWV3LmxvZ1NjYWxlLFxuICAgICAgdmlldy5wZXJjZW50aWxlQ2xpcC5qb2luKCksXG4gICAgICBKU09OLnN0cmluZ2lmeSh2aWV3LmNvbnRpbnVvdXNDb2xvcm1hcCksXG4gICAgICB2aWV3LmNlbGxEcmF3LFxuICAgICAgdmlldy5jZWxsT3BhY2l0eSxcbiAgICBdLmpvaW4oJ3wnKTtcbiAgICBjb25zdCBwcmVzZW50ID0gKFsnY2VsbEZpbGwnLCAnY2VsbE91dGxpbmUnLCAnbnVjbGV1c091dGxpbmUnXSBhcyBjb25zdCkuc29tZSgoZykgPT4gdGhpcy5ncm91cHMuc2hvd24oZykpO1xuICAgIGlmICghZ2VvbWV0cnlDaGFuZ2VkICYmIHN0eWxlS2V5ID09PSB0aGlzLmNlbGxTdHlsZUtleSAmJiBwcmVzZW50KSB7XG4gICAgICB0aGlzLnNldFBvbHlnb25zU2hvd24odHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbG9ycyA9IGF3YWl0IHRoaXMuY2VsbENvbG9ycyhkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24sIHJpbmdzLm9ic2VydmF0aW9uKTtcbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcblxuICAgIHRoaXMuY3VycmVudFJpbmdzID0gcmluZ3M7XG4gICAgdGhpcy5jdXJyZW50TnVjbGVpID0gbnVjbGVpO1xuICAgIC8vIEEgZ2VvbWV0cnkgbWlzc2luZyBhIGZhaWxlZCB0aWxlIGlzIGRyYXduIGJ1dCBub3QgcmVtZW1iZXJlZCwgc28gdGhlIHJldHJ5IHJlZmV0Y2hlcyBpdC5cbiAgICB0aGlzLmNlbGxHZW9tZXRyeUtleSA9IGN0eC5pbmNvbXBsZXRlID8gbnVsbCA6IGdlb21ldHJ5S2V5O1xuICAgIHRoaXMuY2VsbFN0eWxlS2V5ID0gc3R5bGVLZXk7XG4gICAgdGhpcy5kcmF3Q2VsbHMoZGF0YXNldCwgdmlldywgZ2VvbWV0cnksIGNvbG9ycywgZ2VvbWV0cnlDaGFuZ2VkKTtcbiAgICB0aGlzLnNldFBvbHlnb25zU2hvd24odHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwgbGF5ZXJzOiB0aGUgZmlsbCBhbmQgdGhlIG91dGxpbmUgdGhlIHZpZXcncyBkcmF3IG1vZGUgYXNrcyBmb3IsIGFuZCB3aXRoIFwiYm90aFwiIHRoZVxuICAgKiBudWNsZXVzIG91dGxpbmVzIG92ZXIgdGhlbS4gQSBnZW9tZXRyeSBjaGFuZ2UgYnVpbGRzIG5ldyBsYXllcnM7IGEgc3R5bGUgY2hhbmdlIHJlc3R5bGVzIHRoZW0uXG4gICAqL1xuICBwcml2YXRlIGRyYXdDZWxscyhcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHsgcmluZ3MsIG51Y2xlaSB9OiB7IHJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGU7IG51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCB9LFxuICAgIGNvbG9yczogQ2VsbENvbG9ycyxcbiAgICBnZW9tZXRyeUNoYW5nZWQ6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IGRhdGFzZXQuaW1hZ2VSZWY7XG4gICAgY29uc3QgY29tbW9uID0geyBzY2FsZTogcmVmPy5zY2FsZSA/PyBbMSwgMV0sIHRyYW5zbGF0ZTogcmVmPy50cmFuc2xhdGUgPz8gWzAsIDBdIH0gYXMgY29uc3Q7XG4gICAgY29uc3QgZmlsbCA9IHZpZXcuY2VsbERyYXcgIT09ICdvdXRsaW5lJztcbiAgICBjb25zdCBvdXRsaW5lID0gdmlldy5jZWxsRHJhdyAhPT0gJ2ZpbGwnO1xuXG4gICAgdGhpcy5ncm91cHMudXBzZXJ0U2hhcGVzKCdjZWxsRmlsbCcsIGZpbGwsIGdlb21ldHJ5Q2hhbmdlZCwgcmluZ3MsIHtcbiAgICAgIG5hbWU6ICdjZWxscycsXG4gICAgICBkcmF3OiAnZmlsbCcsXG4gICAgICBvcGFjaXR5OiB2aWV3LmNlbGxPcGFjaXR5LFxuICAgICAgLi4uY29sb3JzLFxuICAgICAgLi4uY29tbW9uLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcyhcbiAgICAgICdjZWxsT3V0bGluZScsXG4gICAgICBvdXRsaW5lLFxuICAgICAgZ2VvbWV0cnlDaGFuZ2VkLFxuICAgICAgcmluZ3MsXG4gICAgICBmaWxsXG4gICAgICAgID8gLy8gT3ZlciBhIGZpbGwsIGEgZGFyayBvdXRsaW5lIHNlcGFyYXRlcyBuZWlnaGJvdXJzIG9mIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgICAgeyBuYW1lOiAnY2VsbCBvdXRsaW5lcycsIGRyYXc6ICdvdXRsaW5lJywgY29sb3I6IFswLjA4LCAwLjA4LCAwLjEsIDFdLCBvcGFjaXR5OiAwLjcsIC4uLmNvbW1vbiB9XG4gICAgICAgIDogeyBuYW1lOiAnY2VsbCBvdXRsaW5lcycsIGRyYXc6ICdvdXRsaW5lJywgb3BhY2l0eTogMSwgLi4uY29sb3JzLCAuLi5jb21tb24gfSxcbiAgICApO1xuICAgIC8vIFwiQm90aFwiOiBudWNsZWkgb3V0bGluZWQgb3ZlciB0aGUgY2VsbHMsIGxpZ2h0IHNvIHRoZXkgcmVhZCBhZ2FpbnN0IGFueSBmaWxsLlxuICAgIGlmIChudWNsZWkpIHtcbiAgICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcygnbnVjbGV1c091dGxpbmUnLCB0cnVlLCBnZW9tZXRyeUNoYW5nZWQsIG51Y2xlaSwge1xuICAgICAgICBuYW1lOiAnbnVjbGV1cyBvdXRsaW5lcycsXG4gICAgICAgIGRyYXc6ICdvdXRsaW5lJyxcbiAgICAgICAgY29sb3I6IFswLjk1LCAwLjk1LCAwLjk4LCAxXSxcbiAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAuLi5jb21tb24sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncm91cHMuZHJvcCgnbnVjbGV1c091dGxpbmUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdGlvblJldihzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrKTogbnVtYmVyIHtcbiAgICBpZiAoc2VsZWN0aW9uICE9PSB0aGlzLmxhc3RTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmV2aXNpb24rKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uUmV2aXNpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJpbmdzJyBjb2xvdXJzIGJ5IHRoZWlyIG93bmVycywgYnkgdGhlIHZpZXcncyBjZWxsLWNvbG91ciBtb2RlIChYZW5pdW0gRXhwbG9yZXIncyBcIkNlbGxcbiAgICogQ29sb3JcIik6IG9uZSBSR0JBIHBlciBzaGFwZSBmb3IgYSBncm91cGluZywgdmFsdWVzICsgY29sb3JtYXAgZm9yIGEgbWVhc3VyZW1lbnQsIG9uZSBjb2xvdXJcbiAgICogZm9yIFwic2luZ2xlXCIuIEEgc2VsZWN0aW9uIG11dGVzIHdoYXQgaXQgbGVhdmVzIG91dC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2VsbENvbG9ycyhcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICAgb3duZXJzOiBVaW50MzJBcnJheSxcbiAgKTogUHJvbWlzZTxDZWxsQ29sb3JzPiB7XG4gICAgY29uc3QgbXV0ZWQgPSBzZWxlY3Rpb24uY291bnQgPiAwID8gc2VsZWN0aW9uLm1hc2sgOiBudWxsO1xuICAgIGNvbnN0IG1vZGUgPSB2aWV3LmNlbGxDb2xvck1vZGU7XG5cbiAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IHBhcnNlSGV4KHZpZXcuY2VsbFNpbmdsZUNvbG9yKTtcbiAgICAgIHJldHVybiB7IGNvbG9yOiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NSwgMV0gfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250aW51b3VzID0gYXN5bmMgKHJhdzogRmxvYXQzMkFycmF5LCBsb2c6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkob3duZXJzLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG93bmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB2ID0gcmF3W293bmVyc1tpXV0gPz8gTmFOO1xuICAgICAgICB2YWx1ZXNbaV0gPSBsb2cgPyBNYXRoLmxvZzFwKE1hdGgubWF4KDAsIHYpKSA6IHY7XG4gICAgICB9XG4gICAgICBjb25zdCBbY2xpcExvLCBjbGlwSGldID0gdmlldy5wZXJjZW50aWxlQ2xpcDtcbiAgICAgIC8vIEtleWVkIGJ5IHRoZSBTT1VSQ0UgdmVjdG9yICh0aGUgbG9nIGNvcHkgd291bGQgYmUgbmV3IG9uIGV2ZXJ5IGNhbGwpLCBhcyB0aGUgM0QgY2xvdWQncy5cbiAgICAgIGNvbnN0IFtsbywgaGldID0gdGhpcy5jb250cmFzdFdpbmRvd3MuZ2V0KHJhdywgY2xpcExvLCBjbGlwSGksIGxvZywgKCkgPT5cbiAgICAgICAgY29udHJhc3RXaW5kb3cobG9nID8gcmF3Lm1hcCgodikgPT4gTWF0aC5sb2cxcChNYXRoLm1heCgwLCB2KSkpIDogcmF3LCBjbGlwTG8sIGNsaXBIaSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBjb2xvcm1hcDogY29sb3JtYXBGcm9tTHV0KCdzcGF0aWFsLWNvbnRpbnVvdXMnLCB0aGlzLmhvc3QuY29udGludW91c0x1dCh2aWV3KSksXG4gICAgICAgIGNvbnRyYXN0TGltaXRzOiBbbG8sIGhpXSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGlmIChtb2RlID09PSAnZ2VuZScgJiYgdmlldy5jZWxsQ29sb3JHZW5lKSB7XG4gICAgICByZXR1cm4gY29udGludW91cyhhd2FpdCB0aGlzLnBvcnQuZ2V0RmVhdHVyZVZlY3Rvcih2aWV3LmNlbGxDb2xvckdlbmUpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKG1vZGUgPT09ICd0cmFuc2NyaXB0RGVuc2l0eScgJiYgZGF0YXNldC5jb2x1bW5zLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gJ3RyYW5zY3JpcHRfZGVuc2l0eScpKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBhd2FpdCB0aGlzLnBvcnQuZ2V0Q29sdW1uKCd0cmFuc2NyaXB0X2RlbnNpdHknKTtcbiAgICAgIGlmICghaXNDYXRlZ29yaWNhbENvbHVtbihjb2x1bW4pKSByZXR1cm4gY29udGludW91cyhjb2x1bW4udmFsdWVzLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBtb2RlID09PSAnc2VnbWVudGF0aW9uJyAmJiBkYXRhc2V0LmNvbHVtbnMuc29tZSgoYykgPT4gYy5uYW1lID09PSAnc2VnbWVudGF0aW9uX21ldGhvZCcpXG4gICAgICAgID8gJ3NlZ21lbnRhdGlvbl9tZXRob2QnXG4gICAgICAgIDogY2VsbFR5cGVDb2x1bW5Gb3IoZGF0YXNldCwgdmlldyk7XG4gICAgY29uc3QgY29kZXMgPSBuYW1lID8gYXdhaXQgdGhpcy5sb29rdXAuY29kZXMobmFtZSkgOiBudWxsO1xuICAgIGNvbnN0IHBhbGV0dGUgPSBjYXRlZ29yeVJnYmEoY29kZXM/Lm1ldGEgPz8gbnVsbCk7XG4gICAgY29uc3QgbWlzc2luZyA9IHJnYmEwMShNSVNTSU5HX0NPTE9SKTtcbiAgICAvLyBPbmUgUkdCQSBwZXIgc2hhcGUgKG5hcGFyaSBTaGFwZXMnIGBmYWNlX2NvbG9yYCk6IGFueSBudW1iZXIgb2YgY2F0ZWdvcmllcyBrZWVwcyBpdHMgb3duXG4gICAgLy8gY29sb3VyLCB3aGVyZSBhIGNvbG9ybWFwIGJhbmQgcGVyIGNhdGVnb3J5IHJhbiBvdXQgb2YgTFVUIGVudHJpZXMgcGFzdCB+MTI3LlxuICAgIGNvbnN0IGZhY2VDb2xvciA9IG5ldyBGbG9hdDMyQXJyYXkob3duZXJzLmxlbmd0aCAqIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3duZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvID0gb3duZXJzW2ldO1xuICAgICAgY29uc3QgY29kZSA9ICFjb2RlcyB8fCAobXV0ZWQgJiYgIW11dGVkW29dKSA/IE5PX0NBVEVHT1JZIDogY29kZXMuY29kZXNbb107XG4gICAgICBmYWNlQ29sb3Iuc2V0KHBhbGV0dGVbY29kZV0gPz8gbWlzc2luZywgaSAqIDQpO1xuICAgIH1cbiAgICByZXR1cm4geyBmYWNlQ29sb3IgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY2VsbCByaW5ncyAoYW5kLCBmb3IgXCJib3RoXCIsIHRoZSBudWNsZXVzIHJpbmdzKSBjb3ZlcmluZyBgcmVjdGAgYXQgYGxldmVsYCwgbWludXNcbiAgICogdGhlIGhpZGRlbiBncm91cHMg4oCUIHJldXNlZCB3aGVuIG5vdGhpbmcgdGhhdCBkZWNpZGVzIHRoZW0gY2hhbmdlZC4gTnVsbCB3aGVuIHRoZVxuICAgKiB2aWV3IHdlbnQgc3RhbGUgb3IgdGhlIGRhdGFzZXQgaGFzIG5vIHNldCB0byBkcmF3LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjZWxsR2VvbWV0cnkoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICByZWN0OiBEYXRhUmVjdCxcbiAgICBsZXZlbDogbnVtYmVyLFxuICAgIGhpZGRlbjogSGlkZGVuQ29kZXMgfCBudWxsLFxuICAgIGN0eDogUGxhbkNvbnRleHQsXG4gICk6IFByb21pc2U8eyByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlOyBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGw7IGdlb21ldHJ5S2V5OiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICBjb25zdCB0aWxlZCA9IGRhdGFzZXQucG9seWdvblRpbGVzO1xuICAgIGNvbnN0IGhpZGRlbktleSA9IGAke3ZpZXcuaGlkZGVuR3JvdXBzLmpvaW4oJ1xcdTAwMDEnKX18JHtnZW5lRmlsdGVyS2V5KHZpZXcpfWA7XG4gICAgbGV0IHJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGU7XG4gICAgbGV0IG51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGdlb21ldHJ5S2V5OiBzdHJpbmc7XG4gICAgaWYgKHRpbGVkKSB7XG4gICAgICBjb25zdCBib3RoID0gdmlldy5jZWxsU2V0ID09PSAnYm90aCc7XG4gICAgICBjb25zdCBzZXQgPVxuICAgICAgICAhYm90aCAmJiB2aWV3LmNlbGxTZXQgJiYgdGlsZWQuc2V0cy5zb21lKChzKSA9PiBzLm5hbWUgPT09IHZpZXcuY2VsbFNldClcbiAgICAgICAgICA/IHZpZXcuY2VsbFNldFxuICAgICAgICAgIDogKHRpbGVkLmRlZmF1bHRTZXQgPz8gdGlsZWQuc2V0c1swXT8ubmFtZSk7XG4gICAgICBpZiAoIXNldCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBudWNsZXVzU2V0ID0gYm90aCA/IHRpbGVkLnNldHMuZmluZCgocykgPT4gcy5uYW1lICE9PSBzZXQpPy5uYW1lIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qga2V5cyA9IHRpbGVzSW5SZWN0KHJlY3QsIGxldmVsLCB0aWxlZC5sZXZlbHMsIHRpbGVkLmJvdW5kcywgTUFYX0NFTExfVElMRVMpO1xuICAgICAgZ2VvbWV0cnlLZXkgPSBgJHtkYXRhc2V0LmlkfXwke3NldH18JHtudWNsZXVzU2V0ID8/ICcnfXwke2hpZGRlbktleX18JHtrZXlzLm1hcCh0aWxlSWQpLmpvaW4oJywnKX1gO1xuICAgICAgaWYgKGdlb21ldHJ5S2V5ID09PSB0aGlzLmNlbGxHZW9tZXRyeUtleSAmJiB0aGlzLmN1cnJlbnRSaW5ncykge1xuICAgICAgICByaW5ncyA9IHRoaXMuY3VycmVudFJpbmdzO1xuICAgICAgICBudWNsZWkgPSB0aGlzLmN1cnJlbnROdWNsZWk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbdGlsZXMsIG51Y2xldXNUaWxlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKHNldCwgay5sZXZlbCwgay5neCwgay5neSkpLFxuICAgICAgICAgIG51Y2xldXNTZXRcbiAgICAgICAgICAgID8gY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKG51Y2xldXNTZXQsIGsubGV2ZWwsIGsuZ3gsIGsuZ3kpKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUobnVsbCksXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybiBudWxsO1xuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKG1lcmdlUG9seWdvblRpbGVzKHRpbGVzKSwgaGlkZGVuKTtcbiAgICAgICAgbnVjbGVpID0gbnVjbGV1c1RpbGVzID8gZmlsdGVyUmluZ3MobWVyZ2VQb2x5Z29uVGlsZXMobnVjbGV1c1RpbGVzKSwgaGlkZGVuKSA6IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlb21ldHJ5S2V5ID0gYCR7ZGF0YXNldC5pZH18d2hvbGV8JHtoaWRkZW5LZXl9YDtcbiAgICAgIGlmIChnZW9tZXRyeUtleSA9PT0gdGhpcy5jZWxsR2VvbWV0cnlLZXkgJiYgdGhpcy5jdXJyZW50UmluZ3MpIHtcbiAgICAgICAgcmluZ3MgPSB0aGlzLmN1cnJlbnRSaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvbHlzOiBTcGF0aWFsUG9seWdvbnMgPSBhd2FpdCB0aGlzLnBvcnQuZ2V0UG9seWdvbnMhKCk7XG4gICAgICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIFdob2xlLWRhdGFzZXQgcmluZ3MgYXJlIGluZGV4LWFsaWduZWQgd2l0aCB0aGUgb2JzZXJ2YXRpb25zLlxuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKFxuICAgICAgICAgIHsgLi4ucG9seXMsIG9ic2VydmF0aW9uOiBVaW50MzJBcnJheS5mcm9tKHsgbGVuZ3RoOiBwb2x5cy5jb3VudCB9LCAoX3YsIGkpID0+IGkpIH0sXG4gICAgICAgICAgaGlkZGVuLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9O1xuICB9XG5cbiAgLyoqIFJlbW92ZSB0aGUgY2VsbCBsYXllcnMgYW5kIGZvcmdldCB3aGF0IHRoZXkgc2hvd2VkLiAqL1xuICBkcm9wKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ2NlbGxGaWxsJyk7XG4gICAgdGhpcy5ncm91cHMuZHJvcCgnY2VsbE91dGxpbmUnKTtcbiAgICB0aGlzLmdyb3Vwcy5kcm9wKCdudWNsZXVzT3V0bGluZScpO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51bGw7XG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBudWxsO1xuICAgIHRoaXMuY2VsbFN0eWxlS2V5ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IG51bGw7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9seWdvbnNTaG93bihzaG93bjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChzaG93biA9PT0gdGhpcy5wb2x5Z29uc1Nob3duKSByZXR1cm47XG4gICAgdGhpcy5wb2x5Z29uc1Nob3duID0gc2hvd247XG4gICAgdGhpcy5ob3N0LnBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duKTtcbiAgfVxufVxuXG4vKiogQW4gOC1iaXQgUkdCIGFzIGFuIG9wYXF1ZSAwLi4xIFJHQkEuICovXG5mdW5jdGlvbiByZ2JhMDEoW3IsIGcsIGJdOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiBSR0JBIHtcbiAgcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1LCAxXTtcbn1cblxuLyoqIEEgZ3JvdXBpbmcncyBjYXRlZ29yeSBjb2xvdXJzLCBhcyAwLi4xIFJHQkEgYnkgY2F0ZWdvcnkgY29kZSAob25lIGRlZmF1bHQgd2l0aG91dCBhIGdyb3VwaW5nKS4gKi9cbmZ1bmN0aW9uIGNhdGVnb3J5UmdiYShtZXRhOiBTcGF0aWFsQ29sdW1uWydtZXRhJ10gfCBudWxsKTogUkdCQVtdIHtcbiAgY29uc3QgaGV4ID0gbWV0YSAmJiBtZXRhLmtpbmQgPT09ICdjYXRlZ29yaWNhbCcgPyByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMobWV0YSkgOiBbREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFWzBdXTtcbiAgcmV0dXJuIGhleC5tYXAoKGgpID0+IHJnYmEwMShwYXJzZUhleChoKSkpO1xufVxuIl19
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1sYXllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFDTCxXQUFXLEVBS1gsbUJBQW1CLEdBQ3BCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsRUFDUixxQkFBcUIsR0FDdEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsYUFBYSxFQUNiLGVBQWUsRUFDZixNQUFNLEVBQ04sV0FBVyxFQUNYLG1CQUFtQixHQUNwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFLakUsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBb0IxQjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFjckIsWUFDbUIsSUFBcUIsRUFDckIsTUFBcUMsRUFDckMsTUFBeUIsRUFDekIsSUFBb0I7UUFIcEIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFqQi9CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzlCLDBFQUEwRTtRQUNsRSxp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SUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRUQsMkNBQTJDO0FBQzNDLFNBQVMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQW9DO0lBQzFELE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQscUdBQXFHO0FBQ3JHLFNBQVMsWUFBWSxDQUFDLElBQWtDO0lBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2xvcm1hcEZyb21MdXQgfSBmcm9tICduYXBhcmktanMnO1xuaW1wb3J0IHR5cGUgeyBDb2xvcm1hcCwgUkdCQSB9IGZyb20gJ25hcGFyaS1qcyc7XG5cbmltcG9ydCB0eXBlIHsgUmdiIH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL2NvbG9ybWFwLWx1dCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxWaWV3U3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQge1xuICBOT19DQVRFR09SWSxcbiAgU3BhdGlhbENvbHVtbixcbiAgU3BhdGlhbERhdGFzZXQsXG4gIFNwYXRpYWxQb2x5Z29uVGlsZSxcbiAgU3BhdGlhbFBvbHlnb25zLFxuICBpc0NhdGVnb3JpY2FsQ29sdW1uLFxufSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmltcG9ydCB7XG4gIERFRkFVTFRfQ0FURUdPUklDQUxfUEFMRVRURSxcbiAgTUlTU0lOR19DT0xPUixcbiAgY29udHJhc3RXaW5kb3csXG4gIHBhcnNlSGV4LFxuICByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMsXG59IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1lbmNvZGluZyc7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uTWFzayB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuaW1wb3J0IHtcbiAgRGF0YVJlY3QsXG4gIFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFgsXG4gIGNlbGxUeXBlQ29sdW1uRm9yLFxuICBjZWxsc1Nob3duLFxuICBkcmF3bkNlbGxTZXRzLFxuICBwb2x5Z29uTGV2ZWxGb3IsXG4gIHRpbGVJZCxcbiAgdGlsZXNJblJlY3QsXG4gIHR5cGljYWxDZWxsRGlhbWV0ZXIsXG59IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvbG9kJztcbmltcG9ydCB7IGZpbHRlclJpbmdzLCBtZXJnZVBvbHlnb25UaWxlcyB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC10aWxlLW1lcmdlJztcbmltcG9ydCB7IGdlbmVGaWx0ZXJLZXkgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL3NwYXRpYWwtZ2VuZS1maWx0ZXInO1xuaW1wb3J0IHsgQ29udHJhc3RXaW5kb3dDYWNoZSB9IGZyb20gJy4uL25hcGFyaS1zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxMb29rdXAsIEhpZGRlbkNvZGVzIH0gZnJvbSAnLi9jYXRlZ29yaWNhbC1sb29rdXAnO1xuaW1wb3J0IHR5cGUgeyBPcmRlcmVkTGF5ZXJHcm91cHMsIFRpbGVHcm91cCB9IGZyb20gJy4vbGF5ZXItZ3JvdXBzJztcbmltcG9ydCB0eXBlIHsgUGxhbkNvbnRleHQgfSBmcm9tICcuL3BsYW4tY29udGV4dCc7XG5cbmNvbnN0IE1BWF9DRUxMX1RJTEVTID0gNDg7XG5cbi8qKiBUaGUgY2VsbHMnIGNvbG91cnMgYXMgYSBzaGFwZXMgbGF5ZXIgdGFrZXMgdGhlbTogcGVyLXNoYXBlIFJHQkEsIHZhbHVlcyBvdmVyIGEgY29sb3JtYXAsIG9yXG4gKiAgb25lIGNvbG91ci4gKi9cbmludGVyZmFjZSBDZWxsQ29sb3JzIHtcbiAgdmFsdWVzPzogRmxvYXQzMkFycmF5O1xuICBjb2xvcm1hcD86IENvbG9ybWFwO1xuICBjb250cmFzdExpbWl0cz86IFtudW1iZXIsIG51bWJlcl07XG4gIGNvbG9yPzogUkdCQTtcbiAgZmFjZUNvbG9yPzogRmxvYXQzMkFycmF5O1xufVxuXG4vKiogV2hhdCB0aGUgY2VsbCBsYXllcnMgbmVlZCBmcm9tIHRoZSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsTGF5ZXJzSG9zdCB7XG4gIC8qKiBUaGUgY29udGludW91cyBMVVQgdGhlIHZpZXcgaXMgdXNpbmcgKHNvIGNlbGxzIGNvbG91cmVkIGJ5IGEgZ2VuZSBtYXRjaCB0aGUgbWFya2VycykuICovXG4gIGNvbnRpbnVvdXNMdXQodmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFJnYltdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duOiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgY2VsbCBvdXRsaW5lcyBvZiB0aGUgMkQgc3BhdGlhbCB2aWV3LCBhdCB0aGUgcG9seWdvbiBsZXZlbCB0aGUgem9vbSBjYWxscyBmb3I6IGEgZmlsbCxcbiAqIGFuIG91dGxpbmUgb3IgYm90aCAocGx1cyBudWNsZXVzIG91dGxpbmVzIGZvciB0aGUgXCJib3RoXCIgY2VsbCBzZXQpLCBjb2xvdXJlZCBieSB0aGUgdmlldydzXG4gKiBjZWxsLWNvbG91ciBtb2RlLCB3aXRoIHN3aXRjaGVkLW9mZiBncm91cHMgbGVmdCBvdXQgb2YgdGhlIGdlb21ldHJ5LlxuICpcbiAqIEdlb21ldHJ5IGFuZCBzdHlsZSBhcmUga2V5ZWQgYXBhcnQsIHNvIGEgcmVjb2xvdXIgKGEgbmV3IGNlbGwtdHlwZSBjb2x1bW4sIGEgc2VsZWN0aW9uKVxuICogcmV3cml0ZXMgdGhlIHBlci1zaGFwZSB2YWx1ZXMgb2YgdGhlIGV4aXN0aW5nIGxheWVycyBhbmQgbmV2ZXIgcmUtZXhwYW5kcyB0aGUgcmluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsTGF5ZXJzIHtcbiAgcHJpdmF0ZSBwb2x5Z29uc1Nob3duID0gZmFsc2U7XG4gIC8qKiBSaW5ncyBjdXJyZW50bHkgZHJhd24gYW5kIHRoZSAoZGF0YXNldCwgc2V0LCB0aWxlcykgdGhleSBjYW1lIGZyb20uICovXG4gIHByaXZhdGUgY3VycmVudFJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjZWxsR2VvbWV0cnlLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnROdWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNlbGxTdHlsZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTZWxlY3Rpb24gaWRlbnRpdHkg4oaSIHJldmlzaW9uLCBzbyBhIGNoYW5nZSBrZXkgY2FuIG5hbWUgYSBzZWxlY3Rpb24gY2hlYXBseS4gKi9cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNlbGVjdGlvblJldmlzaW9uID0gMDtcbiAgLyoqIENvbnRpbnVvdXMgY29sb3VyaW5ncycgd2luZG93cywgcGVyICh2ZWN0b3IsIGNsaXAsIGxvZyk6IGBjb250cmFzdFdpbmRvd2Agc29ydHMgZXZlcnlcbiAgICogIHZhbHVlLCBhbmQgYSBzZWxlY3Rpb24gb3Igb3BhY2l0eSBjaGFuZ2UgcmVjb2xvdXJzIHdpdGggdGhlIHZlY3RvciB1bmNoYW5nZWQgKFNQQVRJQUwtMTIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyYXN0V2luZG93cyA9IG5ldyBDb250cmFzdFdpbmRvd0NhY2hlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncm91cHM6IE9yZGVyZWRMYXllckdyb3VwczxUaWxlR3JvdXA+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9va3VwOiBDYXRlZ29yaWNhbExvb2t1cCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IENlbGxMYXllcnNIb3N0LFxuICApIHt9XG5cbiAgLyoqIFRydWUgd2hpbGUgb3V0bGluZXMgYXJlIG9uIHNjcmVlbiDigJQgdGhlIHNlcnZpY2UgaGlkZXMgaXRzIGRvdHMgdGhlbi4gKi9cbiAgZ2V0IG91dGxpbmVzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9seWdvbnNTaG93bjtcbiAgfVxuXG4gIC8qKiBUaGUgdmlld2VyIHdlbnQgYXdheSAoaXRzIGxheWVycyB3aXRoIGl0KTogdGhlIG91dGxpbmVzIGFyZSBubyBsb25nZXIgc2hvd24uICovXG4gIGRldGFjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UG9seWdvbnNTaG93bihmYWxzZSk7XG4gIH1cblxuICAvKiogRHJhdyB0aGUgY2VsbHMgY292ZXJpbmcgYHJlY3RgIGF0IHRoZSBsZXZlbCBgcHhQZXJVbml0YCBjYWxscyBmb3IsIG9yIGRyb3AgdGhlbS4gKi9cbiAgYXN5bmMgcGxhbihcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgcHhQZXJVbml0OiBudW1iZXIsXG4gICAgY3R4OiBQbGFuQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCB3aG9sZSA9ICF0aWxlZCAmJiBkYXRhc2V0LnBvbHlnb25zICYmIHRoaXMucG9ydC5nZXRQb2x5Z29ucztcbiAgICBpZiAoIWNlbGxzU2hvd24oZGF0YXNldCwgdmlldykgfHwgKCF0aWxlZCAmJiAhd2hvbGUpKSB7XG4gICAgICB0aGlzLmRyb3AoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlhbWV0ZXIgPSB0eXBpY2FsQ2VsbERpYW1ldGVyKGRhdGFzZXQub2JzZXJ2YXRpb25zLnJhZGl1cyk7XG4gICAgLy8gV2hvbGUtZGF0YXNldCByaW5ncyBoYXZlIG9uZSBsZXZlbCBhbmQgbm8gY29hcnNlciBmYWxsYmFjaywgc28gdGhleSBhcmUgZHJhd24gYXNcbiAgICAvLyBzb29uIGFzIGEgY2VsbCBpcyBiaWcgZW5vdWdoIHRvIHJlYWQgYXMgYSBzaGFwZSByYXRoZXIgdGhhbiBhIGRvdC5cbiAgICBjb25zdCBsZXZlbCA9IHRpbGVkXG4gICAgICA/IHBvbHlnb25MZXZlbEZvcihweFBlclVuaXQsIGRpYW1ldGVyLCB0aWxlZC5sZXZlbHMubGVuZ3RoKVxuICAgICAgOiBweFBlclVuaXQgKiBkaWFtZXRlciA+PSBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYWzJdXG4gICAgICAgID8gMFxuICAgICAgICA6IC0xO1xuICAgIGlmIChsZXZlbCA8IDApIHtcbiAgICAgIHRoaXMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdyb3VwcyBzd2l0Y2hlZCBvZmYgaW4gdGhlIGxpc3Q6IHRoZWlyIGNlbGxzIGFyZSBsZWZ0IG91dCBvZiB0aGUgZ2VvbWV0cnkuXG4gICAgY29uc3QgaGlkZGVuID0gYXdhaXQgdGhpcy5sb29rdXAuaGlkZGVuQ29kZXMoZGF0YXNldCwgdmlldyk7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG4gICAgY29uc3QgbGFiZWwgPSB2aWV3LmNlbGxTZXQgPT09ICdib3RoJyA/ICdDZWxscyBhbmQgbnVjbGVpJyA6IHZpZXcuY2VsbFNldCA9PT0gJ251Y2xldXMnID8gJ051Y2xlaScgOiAnQ2VsbHMnO1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gYXdhaXQgY3R4LnRyYWNrKGxhYmVsLCB0aGlzLmNlbGxHZW9tZXRyeShkYXRhc2V0LCB2aWV3LCByZWN0LCBsZXZlbCwgaGlkZGVuLCBjdHgpKTtcbiAgICBpZiAoIWdlb21ldHJ5KSByZXR1cm47XG4gICAgY29uc3QgeyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9ID0gZ2VvbWV0cnk7XG5cbiAgICBjb25zdCBnZW9tZXRyeUNoYW5nZWQgPSBnZW9tZXRyeUtleSAhPT0gdGhpcy5jZWxsR2VvbWV0cnlLZXk7XG4gICAgY29uc3Qgc3R5bGVLZXkgPSBbXG4gICAgICBnZW9tZXRyeUtleSxcbiAgICAgIHZpZXcuY2VsbENvbG9yTW9kZSxcbiAgICAgIHZpZXcuY2VsbENvbG9yR2VuZSxcbiAgICAgIHZpZXcuY2VsbFNpbmdsZUNvbG9yLFxuICAgICAgY2VsbFR5cGVDb2x1bW5Gb3IoZGF0YXNldCwgdmlldyksXG4gICAgICB0aGlzLnNlbGVjdGlvblJldihzZWxlY3Rpb24pLFxuICAgICAgdmlldy5sb2dTY2FsZSxcbiAgICAgIHZpZXcucGVyY2VudGlsZUNsaXAuam9pbigpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmlldy5jb250aW51b3VzQ29sb3JtYXApLFxuICAgICAgdmlldy5jZWxsRHJhdyxcbiAgICAgIHZpZXcuY2VsbE9wYWNpdHksXG4gICAgXS5qb2luKCd8Jyk7XG4gICAgY29uc3QgcHJlc2VudCA9IChbJ2NlbGxGaWxsJywgJ2NlbGxPdXRsaW5lJywgJ251Y2xldXNPdXRsaW5lJ10gYXMgY29uc3QpLnNvbWUoKGcpID0+IHRoaXMuZ3JvdXBzLnNob3duKGcpKTtcbiAgICBpZiAoIWdlb21ldHJ5Q2hhbmdlZCAmJiBzdHlsZUtleSA9PT0gdGhpcy5jZWxsU3R5bGVLZXkgJiYgcHJlc2VudCkge1xuICAgICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xvcnMgPSBhd2FpdCB0aGlzLmNlbGxDb2xvcnMoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uLCByaW5ncy5vYnNlcnZhdGlvbik7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IHJpbmdzO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51Y2xlaTtcbiAgICAvLyBBIGdlb21ldHJ5IG1pc3NpbmcgYSBmYWlsZWQgdGlsZSBpcyBkcmF3biBidXQgbm90IHJlbWVtYmVyZWQsIHNvIHRoZSByZXRyeSByZWZldGNoZXMgaXQuXG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBjdHguaW5jb21wbGV0ZSA/IG51bGwgOiBnZW9tZXRyeUtleTtcbiAgICB0aGlzLmNlbGxTdHlsZUtleSA9IHN0eWxlS2V5O1xuICAgIHRoaXMuZHJhd0NlbGxzKGRhdGFzZXQsIHZpZXcsIGdlb21ldHJ5LCBjb2xvcnMsIGdlb21ldHJ5Q2hhbmdlZCk7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjZWxsIGxheWVyczogdGhlIGZpbGwgYW5kIHRoZSBvdXRsaW5lIHRoZSB2aWV3J3MgZHJhdyBtb2RlIGFza3MgZm9yLCBhbmQgd2l0aCBcImJvdGhcIiB0aGVcbiAgICogbnVjbGV1cyBvdXRsaW5lcyBvdmVyIHRoZW0uIEEgZ2VvbWV0cnkgY2hhbmdlIGJ1aWxkcyBuZXcgbGF5ZXJzOyBhIHN0eWxlIGNoYW5nZSByZXN0eWxlcyB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3Q2VsbHMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICB7IHJpbmdzLCBudWNsZWkgfTogeyByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlOyBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgfSxcbiAgICBjb2xvcnM6IENlbGxDb2xvcnMsXG4gICAgZ2VvbWV0cnlDaGFuZ2VkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSBkYXRhc2V0LmltYWdlUmVmO1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgc2NhbGU6IHJlZj8uc2NhbGUgPz8gWzEsIDFdLCB0cmFuc2xhdGU6IHJlZj8udHJhbnNsYXRlID8/IFswLCAwXSB9IGFzIGNvbnN0O1xuICAgIGNvbnN0IGZpbGwgPSB2aWV3LmNlbGxEcmF3ICE9PSAnb3V0bGluZSc7XG4gICAgY29uc3Qgb3V0bGluZSA9IHZpZXcuY2VsbERyYXcgIT09ICdmaWxsJztcblxuICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcygnY2VsbEZpbGwnLCBmaWxsLCBnZW9tZXRyeUNoYW5nZWQsIHJpbmdzLCB7XG4gICAgICBuYW1lOiAnY2VsbHMnLFxuICAgICAgZHJhdzogJ2ZpbGwnLFxuICAgICAgb3BhY2l0eTogdmlldy5jZWxsT3BhY2l0eSxcbiAgICAgIC4uLmNvbG9ycyxcbiAgICAgIC4uLmNvbW1vbixcbiAgICB9KTtcbiAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoXG4gICAgICAnY2VsbE91dGxpbmUnLFxuICAgICAgb3V0bGluZSxcbiAgICAgIGdlb21ldHJ5Q2hhbmdlZCxcbiAgICAgIHJpbmdzLFxuICAgICAgZmlsbFxuICAgICAgICA/IC8vIE92ZXIgYSBmaWxsLCBhIGRhcmsgb3V0bGluZSBzZXBhcmF0ZXMgbmVpZ2hib3VycyBvZiB0aGUgc2FtZSB0eXBlLlxuICAgICAgICAgIHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIGNvbG9yOiBbMC4wOCwgMC4wOCwgMC4xLCAxXSwgb3BhY2l0eTogMC43LCAuLi5jb21tb24gfVxuICAgICAgICA6IHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIG9wYWNpdHk6IDEsIC4uLmNvbG9ycywgLi4uY29tbW9uIH0sXG4gICAgKTtcbiAgICAvLyBcIkJvdGhcIjogbnVjbGVpIG91dGxpbmVkIG92ZXIgdGhlIGNlbGxzLCBsaWdodCBzbyB0aGV5IHJlYWQgYWdhaW5zdCBhbnkgZmlsbC5cbiAgICBpZiAobnVjbGVpKSB7XG4gICAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoJ251Y2xldXNPdXRsaW5lJywgdHJ1ZSwgZ2VvbWV0cnlDaGFuZ2VkLCBudWNsZWksIHtcbiAgICAgICAgbmFtZTogJ251Y2xldXMgb3V0bGluZXMnLFxuICAgICAgICBkcmF3OiAnb3V0bGluZScsXG4gICAgICAgIGNvbG9yOiBbMC45NSwgMC45NSwgMC45OCwgMV0sXG4gICAgICAgIG9wYWNpdHk6IDAuOCxcbiAgICAgICAgLi4uY29tbW9uLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ251Y2xldXNPdXRsaW5lJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25SZXYoc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayk6IG51bWJlciB7XG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gdGhpcy5sYXN0U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gICAgICB0aGlzLnNlbGVjdGlvblJldmlzaW9uKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJldmlzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByaW5ncycgY29sb3VycyBieSB0aGVpciBvd25lcnMsIGJ5IHRoZSB2aWV3J3MgY2VsbC1jb2xvdXIgbW9kZSAoWGVuaXVtIEV4cGxvcmVyJ3MgXCJDZWxsXG4gICAqIENvbG9yXCIpOiBvbmUgUkdCQSBwZXIgc2hhcGUgZm9yIGEgZ3JvdXBpbmcsIHZhbHVlcyArIGNvbG9ybWFwIGZvciBhIG1lYXN1cmVtZW50LCBvbmUgY29sb3VyXG4gICAqIGZvciBcInNpbmdsZVwiLiBBIHNlbGVjdGlvbiBtdXRlcyB3aGF0IGl0IGxlYXZlcyBvdXQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNlbGxDb2xvcnMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICBzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrLFxuICAgIG93bmVyczogVWludDMyQXJyYXksXG4gICk6IFByb21pc2U8Q2VsbENvbG9ycz4ge1xuICAgIGNvbnN0IG11dGVkID0gc2VsZWN0aW9uLmNvdW50ID4gMCA/IHNlbGVjdGlvbi5tYXNrIDogbnVsbDtcbiAgICBjb25zdCBtb2RlID0gdmlldy5jZWxsQ29sb3JNb2RlO1xuXG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBjb25zdCBbciwgZywgYl0gPSBwYXJzZUhleCh2aWV3LmNlbGxTaW5nbGVDb2xvcik7XG4gICAgICByZXR1cm4geyBjb2xvcjogW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTUsIDFdIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udGludW91cyA9IGFzeW5jIChyYXc6IEZsb2F0MzJBcnJheSwgbG9nOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvd25lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdiA9IHJhd1tvd25lcnNbaV1dID8/IE5hTjtcbiAgICAgICAgdmFsdWVzW2ldID0gbG9nID8gTWF0aC5sb2cxcChNYXRoLm1heCgwLCB2KSkgOiB2O1xuICAgICAgfVxuICAgICAgY29uc3QgW2NsaXBMbywgY2xpcEhpXSA9IHZpZXcucGVyY2VudGlsZUNsaXA7XG4gICAgICAvLyBLZXllZCBieSB0aGUgU09VUkNFIHZlY3RvciAodGhlIGxvZyBjb3B5IHdvdWxkIGJlIG5ldyBvbiBldmVyeSBjYWxsKSwgYXMgdGhlIDNEIGNsb3VkJ3MuXG4gICAgICBjb25zdCBbbG8sIGhpXSA9IHRoaXMuY29udHJhc3RXaW5kb3dzLmdldChyYXcsIGNsaXBMbywgY2xpcEhpLCBsb2csICgpID0+XG4gICAgICAgIGNvbnRyYXN0V2luZG93KGxvZyA/IHJhdy5tYXAoKHYpID0+IE1hdGgubG9nMXAoTWF0aC5tYXgoMCwgdikpKSA6IHJhdywgY2xpcExvLCBjbGlwSGkpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgY29sb3JtYXA6IGNvbG9ybWFwRnJvbUx1dCgnc3BhdGlhbC1jb250aW51b3VzJywgdGhpcy5ob3N0LmNvbnRpbnVvdXNMdXQodmlldykpLFxuICAgICAgICBjb250cmFzdExpbWl0czogW2xvLCBoaV0gYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgIH07XG4gICAgfTtcbiAgICBpZiAobW9kZSA9PT0gJ2dlbmUnICYmIHZpZXcuY2VsbENvbG9yR2VuZSkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVvdXMoYXdhaXQgdGhpcy5wb3J0LmdldEZlYXR1cmVWZWN0b3Iodmlldy5jZWxsQ29sb3JHZW5lKSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAndHJhbnNjcmlwdERlbnNpdHknICYmIGRhdGFzZXQuY29sdW1ucy5zb21lKChjKSA9PiBjLm5hbWUgPT09ICd0cmFuc2NyaXB0X2RlbnNpdHknKSkge1xuICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgdGhpcy5wb3J0LmdldENvbHVtbigndHJhbnNjcmlwdF9kZW5zaXR5Jyk7XG4gICAgICBpZiAoIWlzQ2F0ZWdvcmljYWxDb2x1bW4oY29sdW1uKSkgcmV0dXJuIGNvbnRpbnVvdXMoY29sdW1uLnZhbHVlcywgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPVxuICAgICAgbW9kZSA9PT0gJ3NlZ21lbnRhdGlvbicgJiYgZGF0YXNldC5jb2x1bW5zLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gJ3NlZ21lbnRhdGlvbl9tZXRob2QnKVxuICAgICAgICA/ICdzZWdtZW50YXRpb25fbWV0aG9kJ1xuICAgICAgICA6IGNlbGxUeXBlQ29sdW1uRm9yKGRhdGFzZXQsIHZpZXcpO1xuICAgIGNvbnN0IGNvZGVzID0gbmFtZSA/IGF3YWl0IHRoaXMubG9va3VwLmNvZGVzKG5hbWUpIDogbnVsbDtcbiAgICBjb25zdCBwYWxldHRlID0gY2F0ZWdvcnlSZ2JhKGNvZGVzPy5tZXRhID8/IG51bGwpO1xuICAgIGNvbnN0IG1pc3NpbmcgPSByZ2JhMDEoTUlTU0lOR19DT0xPUik7XG4gICAgLy8gT25lIFJHQkEgcGVyIHNoYXBlIChuYXBhcmkgU2hhcGVzJyBgZmFjZV9jb2xvcmApOiBhbnkgbnVtYmVyIG9mIGNhdGVnb3JpZXMga2VlcHMgaXRzIG93blxuICAgIC8vIGNvbG91ciwgd2hlcmUgYSBjb2xvcm1hcCBiYW5kIHBlciBjYXRlZ29yeSByYW4gb3V0IG9mIExVVCBlbnRyaWVzIHBhc3QgfjEyNy5cbiAgICBjb25zdCBmYWNlQ29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGggKiA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG93bmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbyA9IG93bmVyc1tpXTtcbiAgICAgIGNvbnN0IGNvZGUgPSAhY29kZXMgfHwgKG11dGVkICYmICFtdXRlZFtvXSkgPyBOT19DQVRFR09SWSA6IGNvZGVzLmNvZGVzW29dO1xuICAgICAgZmFjZUNvbG9yLnNldChwYWxldHRlW2NvZGVdID8/IG1pc3NpbmcsIGkgKiA0KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZmFjZUNvbG9yIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwgcmluZ3MgKGFuZCwgZm9yIFwiYm90aFwiLCB0aGUgbnVjbGV1cyByaW5ncykgY292ZXJpbmcgYHJlY3RgIGF0IGBsZXZlbGAsIG1pbnVzXG4gICAqIHRoZSBoaWRkZW4gZ3JvdXBzIOKAlCByZXVzZWQgd2hlbiBub3RoaW5nIHRoYXQgZGVjaWRlcyB0aGVtIGNoYW5nZWQuIE51bGwgd2hlbiB0aGVcbiAgICogdmlldyB3ZW50IHN0YWxlIG9yIHRoZSBkYXRhc2V0IGhhcyBubyBzZXQgdG8gZHJhdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2VsbEdlb21ldHJ5KFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBoaWRkZW46IEhpZGRlbkNvZGVzIHwgbnVsbCxcbiAgICBjdHg6IFBsYW5Db250ZXh0LFxuICApOiBQcm9taXNlPHsgcmluZ3M6IFNwYXRpYWxQb2x5Z29uVGlsZTsgbnVjbGVpOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsOyBnZW9tZXRyeUtleTogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCBoaWRkZW5LZXkgPSBgJHt2aWV3LmhpZGRlbkdyb3Vwcy5qb2luKCdcXHUwMDAxJyl9fCR7Z2VuZUZpbHRlcktleSh2aWV3KX1gO1xuICAgIGxldCByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlO1xuICAgIGxldCBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBnZW9tZXRyeUtleTogc3RyaW5nO1xuICAgIGlmICh0aWxlZCkge1xuICAgICAgY29uc3QgZHJhd24gPSBkcmF3bkNlbGxTZXRzKHRpbGVkLCB2aWV3LmNlbGxTZXQpO1xuICAgICAgaWYgKCFkcmF3bikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCB7IHNldCwgbnVjbGV1c1NldCB9ID0gZHJhd247XG4gICAgICBjb25zdCBrZXlzID0gdGlsZXNJblJlY3QocmVjdCwgbGV2ZWwsIHRpbGVkLmxldmVscywgdGlsZWQuYm91bmRzLCBNQVhfQ0VMTF9USUxFUyk7XG4gICAgICBnZW9tZXRyeUtleSA9IGAke2RhdGFzZXQuaWR9fCR7c2V0fXwke251Y2xldXNTZXQgPz8gJyd9fCR7aGlkZGVuS2V5fXwke2tleXMubWFwKHRpbGVJZCkuam9pbignLCcpfWA7XG4gICAgICBpZiAoZ2VvbWV0cnlLZXkgPT09IHRoaXMuY2VsbEdlb21ldHJ5S2V5ICYmIHRoaXMuY3VycmVudFJpbmdzKSB7XG4gICAgICAgIHJpbmdzID0gdGhpcy5jdXJyZW50UmluZ3M7XG4gICAgICAgIG51Y2xlaSA9IHRoaXMuY3VycmVudE51Y2xlaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IFt0aWxlcywgbnVjbGV1c1RpbGVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBjdHguZmV0Y2hBbGwoa2V5cywgKGspID0+IHRoaXMucG9ydC5nZXRQb2x5Z29uVGlsZSEoc2V0LCBrLmxldmVsLCBrLmd4LCBrLmd5KSksXG4gICAgICAgICAgbnVjbGV1c1NldFxuICAgICAgICAgICAgPyBjdHguZmV0Y2hBbGwoa2V5cywgKGspID0+IHRoaXMucG9ydC5nZXRQb2x5Z29uVGlsZSEobnVjbGV1c1NldCwgay5sZXZlbCwgay5neCwgay5neSkpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShudWxsKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJpbmdzID0gZmlsdGVyUmluZ3MobWVyZ2VQb2x5Z29uVGlsZXModGlsZXMpLCBoaWRkZW4pO1xuICAgICAgICBudWNsZWkgPSBudWNsZXVzVGlsZXMgPyBmaWx0ZXJSaW5ncyhtZXJnZVBvbHlnb25UaWxlcyhudWNsZXVzVGlsZXMpLCBoaWRkZW4pIDogbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZ2VvbWV0cnlLZXkgPSBgJHtkYXRhc2V0LmlkfXx3aG9sZXwke2hpZGRlbktleX1gO1xuICAgICAgaWYgKGdlb21ldHJ5S2V5ID09PSB0aGlzLmNlbGxHZW9tZXRyeUtleSAmJiB0aGlzLmN1cnJlbnRSaW5ncykge1xuICAgICAgICByaW5ncyA9IHRoaXMuY3VycmVudFJpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9seXM6IFNwYXRpYWxQb2x5Z29ucyA9IGF3YWl0IHRoaXMucG9ydC5nZXRQb2x5Z29ucyEoKTtcbiAgICAgICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gV2hvbGUtZGF0YXNldCByaW5ncyBhcmUgaW5kZXgtYWxpZ25lZCB3aXRoIHRoZSBvYnNlcnZhdGlvbnMuXG4gICAgICAgIHJpbmdzID0gZmlsdGVyUmluZ3MoXG4gICAgICAgICAgeyAuLi5wb2x5cywgb2JzZXJ2YXRpb246IFVpbnQzMkFycmF5LmZyb20oeyBsZW5ndGg6IHBvbHlzLmNvdW50IH0sIChfdiwgaSkgPT4gaSkgfSxcbiAgICAgICAgICBoaWRkZW4sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJpbmdzLCBudWNsZWksIGdlb21ldHJ5S2V5IH07XG4gIH1cblxuICAvKiogUmVtb3ZlIHRoZSBjZWxsIGxheWVycyBhbmQgZm9yZ2V0IHdoYXQgdGhleSBzaG93ZWQuICovXG4gIGRyb3AoKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cHMuZHJvcCgnY2VsbEZpbGwnKTtcbiAgICB0aGlzLmdyb3Vwcy5kcm9wKCdjZWxsT3V0bGluZScpO1xuICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ251Y2xldXNPdXRsaW5lJyk7XG4gICAgdGhpcy5jdXJyZW50TnVjbGVpID0gbnVsbDtcbiAgICB0aGlzLmNlbGxHZW9tZXRyeUtleSA9IG51bGw7XG4gICAgdGhpcy5jZWxsU3R5bGVLZXkgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJpbmdzID0gbnVsbDtcbiAgICB0aGlzLnNldFBvbHlnb25zU2hvd24oZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb2x5Z29uc1Nob3duKHNob3duOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHNob3duID09PSB0aGlzLnBvbHlnb25zU2hvd24pIHJldHVybjtcbiAgICB0aGlzLnBvbHlnb25zU2hvd24gPSBzaG93bjtcbiAgICB0aGlzLmhvc3QucG9seWdvbnNTaG93bkNoYW5nZWQoc2hvd24pO1xuICB9XG59XG5cbi8qKiBBbiA4LWJpdCBSR0IgYXMgYW4gb3BhcXVlIDAuLjEgUkdCQS4gKi9cbmZ1bmN0aW9uIHJnYmEwMShbciwgZywgYl06IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IFJHQkEge1xuICByZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTUsIDFdO1xufVxuXG4vKiogQSBncm91cGluZydzIGNhdGVnb3J5IGNvbG91cnMsIGFzIDAuLjEgUkdCQSBieSBjYXRlZ29yeSBjb2RlIChvbmUgZGVmYXVsdCB3aXRob3V0IGEgZ3JvdXBpbmcpLiAqL1xuZnVuY3Rpb24gY2F0ZWdvcnlSZ2JhKG1ldGE6IFNwYXRpYWxDb2x1bW5bJ21ldGEnXSB8IG51bGwpOiBSR0JBW10ge1xuICBjb25zdCBoZXggPSBtZXRhICYmIG1ldGEua2luZCA9PT0gJ2NhdGVnb3JpY2FsJyA/IHJlc29sdmVDYXRlZ29yeUNvbG9ycyhtZXRhKSA6IFtERUZBVUxUX0NBVEVHT1JJQ0FMX1BBTEVUVEVbMF1dO1xuICByZXR1cm4gaGV4Lm1hcCgoaCkgPT4gcmdiYTAxKHBhcnNlSGV4KGgpKSk7XG59XG4iXX0=
@@ -20,6 +20,24 @@ export function cellsShown(dataset, view) {
20
20
  const available = !!(dataset?.polygonTiles || dataset?.polygons);
21
21
  return available && (view.showCells ?? true);
22
22
  }
23
+ /**
24
+ * The boundary sets drawn for the view's `cellSet`: that set when the dataset has it, else the
25
+ * dataset's default, else its first; for "both", that one with the other set beside it. Null when
26
+ * the dataset has no set. The renderer and the Cells panel's switches both read it, so a set kept
27
+ * from another dataset shows as what is actually drawn.
28
+ */
29
+ export function drawnCellSets(tiled, cellSet) {
30
+ if (!tiled)
31
+ return null;
32
+ const both = cellSet === 'both';
33
+ const set = !both && cellSet && tiled.sets.some((s) => s.name === cellSet)
34
+ ? cellSet
35
+ : (tiled.defaultSet ?? tiled.sets[0]?.name);
36
+ if (!set)
37
+ return null;
38
+ const nucleusSet = both ? tiled.sets.find((s) => s.name !== set)?.name : undefined;
39
+ return nucleusSet ? { set, nucleusSet } : { set };
40
+ }
23
41
  /** A column holding a hand-curated cell-type annotation, by naming convention. */
24
42
  export function isCuratedColumn(name) {
25
43
  return /curated/i.test(name);
@@ -187,4 +205,4 @@ export function transcriptLevelFor(pxPerUnit, levels, targetTilePx = 512) {
187
205
  }
188
206
  return best;
189
207
  }
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zcGF0aWFsL2xvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVUxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUJuQyx5RkFBeUY7QUFFekYsNEZBQTRGO0FBQzVGLE1BQU0sVUFBVSxVQUFVLENBQ3hCLE9BQWlFLEVBQ2pFLElBQXlDO0lBRXpDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWTtJQUMxQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLE9BQXVCLEVBQ3ZCLElBQThDO0lBRTlDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQztJQUN4RyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNuRixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ2pGLENBQUM7QUFFRCx5RkFBeUY7QUFFekYsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBVTtJQUMvQixPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQsNkZBQTZGO0FBQzdGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsR0FBNEI7SUFDMUUsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFpQyxFQUNqQyxJQUFZLEVBQ1osT0FBZSxFQUNmLE9BQWUsRUFDZixHQUE0QixFQUM1QixNQUFNLEdBQUcsSUFBSTtJQUViLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDakUsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQywyRkFBMkY7SUFDM0YsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVHLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEcsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLElBQWMsRUFDZCxLQUFhLEVBQ2IsTUFBbUMsRUFDbkMsTUFBNkIsRUFDN0IsS0FBSyxHQUFHLFFBQVE7SUFFaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUNyQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdEIsMEZBQTBGO0lBQzFGLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RixHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBYyxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ25DLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFO1lBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQUksQ0FDTixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDOUcsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDeEQsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFpQyxFQUNqQyxJQUFjLEVBQ2QsS0FBYSxFQUNiLE1BQW1DLEVBQ25DLE1BQTZCLEVBQzdCLEtBQUssR0FBRyxRQUFRO0lBRWhCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDM0YsTUFBTSxDQUFDLEdBQXlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqSCxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWMsRUFBRSxNQUE2QjtJQUN2RSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELHlGQUF5RjtBQUV6Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBeUMsRUFBRSxRQUFRLEdBQUcsRUFBRTtJQUMxRixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMxRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUNyQywrRUFBK0U7SUFDL0UsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUUvRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQWlCLEVBQUUsWUFBb0IsRUFBRSxVQUFrQixFQUFFLE1BQU0sR0FBRyxDQUFDO0lBQ3JHLE1BQU0sTUFBTSxHQUFHLFNBQVMsR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQ2pELE1BQU0sS0FBSyxHQUFHLHlCQUF5QixDQUFDO0lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxzRUFBc0U7UUFDdEUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksTUFBTSxJQUFJLEdBQUc7WUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsU0FBaUIsRUFDakIsTUFBbUMsRUFDbkMsWUFBWSxHQUFHLEdBQUc7SUFFbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxHQUFHLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNkLElBQUksR0FBRyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGV2ZWwtb2YtZGV0YWlsIHBsYW5uaW5nIGZvciB0aWxlZCBzcGF0aWFsIGdlb21ldHJ5IOKAlCBjZWxsIG91dGxpbmVzIGFuZCB0cmFuc2NyaXB0cy5cbiAqXG4gKiBUaGUgcmVuZGVyZXIga25vd3MgaXRzIGNhbWVyYSAoYSB3b3JsZC1zcGFjZSBjZW50cmUsIGEgem9vbSBpbiBjYW52YXMgcGl4ZWxzIHBlciB3b3JsZFxuICogdW5pdCwgYSBjYW52YXMgc2l6ZSk7IGEgdGlsZWQgZGF0YXNldCBrbm93cyBpdHMgZ3JpZHMgKG9uZSBwZXIgbGV2ZWwsIGluIG9ic2VydmF0aW9uXG4gKiB1bml0cykuIFRoaXMgbW9kdWxlIGlzIHRoZSBicmlkZ2U6IHdoaWNoIGxldmVsIHRoZSB6b29tIGNhbGxzIGZvciBhbmQgd2hpY2ggdGlsZXMgYXJlIG9uXG4gKiBzY3JlZW4uIEV2ZXJ5dGhpbmcgaGVyZSBpcyBwdXJlLCBzbyB0aGUgcG9saWN5IOKAlCB0aGUgcGFydCB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgdmlld1xuICogaXMgZmFzdCBhbmQgbGVnaWJsZSDigJQgaXMgdGVzdGFibGUgd2l0aG91dCBhIEdQVS5cbiAqXG4gKiBPYnNlcnZhdGlvbiB1bml0cyBtYXAgb250byB3b3JsZCB1bml0cyB0aHJvdWdoIHRoZSBkYXRhc2V0J3MgYGltYWdlUmVmYCBhZmZpbmVcbiAqIChgd29ybGQgPSBkYXRhIMK3IHNjYWxlICsgdHJhbnNsYXRlYCksIHNvIFwicGl4ZWxzIHBlciBvYnNlcnZhdGlvbiB1bml0XCIgaXNcbiAqIGB6b29tIMK3IHNjYWxlYC4gRm9yIGEgWGVuaXVtIGJ1bmRsZSB0aGUgZGF0YSB1bml0IGlzIHRoZSBtaWNyb24gYW5kIHRoZSB3b3JsZCB1bml0IHRoZVxuICogbW9ycGhvbG9neSBwaXhlbC5cbiAqL1xuXG5pbXBvcnQgeyB3b3JsZFZpZXdwb3J0IH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUge1xuICBDYXRlZ29yaWNhbENvbHVtbk1ldGEsXG4gIFNwYXRpYWxCb3VuZHMsXG4gIFNwYXRpYWxEYXRhc2V0LFxuICBTcGF0aWFsSW1hZ2VSZWYsXG4gIFNwYXRpYWxUaWxlTGV2ZWwsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgcXVhbnRpbGUgfSBmcm9tICcuL3N0YXRzJztcblxuLyoqIEEgcmVjdGFuZ2xlIGluIG9ic2VydmF0aW9uIGNvb3JkaW5hdGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhUmVjdCB7XG4gIHgwOiBudW1iZXI7XG4gIHkwOiBudW1iZXI7XG4gIHgxOiBudW1iZXI7XG4gIHkxOiBudW1iZXI7XG59XG5cbi8qKiBUaWxlIGFkZHJlc3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbGVLZXkge1xuICBsZXZlbDogbnVtYmVyO1xuICBneDogbnVtYmVyO1xuICBneTogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgV2hhdCB0aGUgdmlldyBkcmF3cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFdoZXRoZXIgY2VsbCBvdXRsaW5lcyBhcmUgZHJhd246IHRoZSB1c2VyJ3MgY2hvaWNlLCBlbHNlIG9uIHdoZW4gdGhlIGRhdGFzZXQgaGFzIGFueS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZWxsc1Nob3duKFxuICBkYXRhc2V0OiBQaWNrPFNwYXRpYWxEYXRhc2V0LCAncG9seWdvblRpbGVzJyB8ICdwb2x5Z29ucyc+IHwgbnVsbCxcbiAgdmlldzogUGljazxTcGF0aWFsVmlld1N0YXRlLCAnc2hvd0NlbGxzJz4sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgYXZhaWxhYmxlID0gISEoZGF0YXNldD8ucG9seWdvblRpbGVzIHx8IGRhdGFzZXQ/LnBvbHlnb25zKTtcbiAgcmV0dXJuIGF2YWlsYWJsZSAmJiAodmlldy5zaG93Q2VsbHMgPz8gdHJ1ZSk7XG59XG5cbi8qKiBBIGNvbHVtbiBob2xkaW5nIGEgaGFuZC1jdXJhdGVkIGNlbGwtdHlwZSBhbm5vdGF0aW9uLCBieSBuYW1pbmcgY29udmVudGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cmF0ZWRDb2x1bW4obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvY3VyYXRlZC9pLnRlc3QobmFtZSk7XG59XG5cbi8qKlxuICogVGhlIGNhdGVnb3JpY2FsIGNvbHVtbiB0aGF0IG5hbWVzIGVhY2ggY2VsbCdzIHR5cGU6IHRoZSB2aWV3J3MgY2hvaWNlIHdoZW4gaXQgaXMgYVxuICogY29sdW1uIG9mIHRoaXMgZGF0YXNldCwgZWxzZSB0aGUgZmlyc3QgY2F0ZWdvcmljYWwgY29sdW1uIHRoYXQgaXMgbm90IGEgY3VyYXRlZFxuICogYW5ub3RhdGlvbiAoYSBwaXBlbGluZSdzIGNsdXN0ZXJpbmcgaXMgdGhlIGRlZmF1bHQ7IGN1cmF0aW9uIGlzIG9wdGVkIGludG8pLCBlbHNlXG4gKiBhbnkgY2F0ZWdvcmljYWwgY29sdW1uLiBBIGNvbHVtbiBvZiBvbmUgY2F0ZWdvcnksIHN1Y2ggYXMgdGhlIGByZWdpb25gIGEgU3BhdGlhbERhdGFcbiAqIHRhYmxlIGxpbmtzIGl0cyBjZWxscyB0byB0aGVpciBzaGFwZXMgd2l0aCwgbmFtZXMgbm8gdHlwZSBhbmQgaXMgb25seSB1c2VkIHdoZW4gY2hvc2VuO1xuICogYSBkYXRhc2V0IHdpdGggbm90aGluZyBlbHNlIGhhcyBubyBjZWxsIHR5cGVzIChudWxsKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNlbGxUeXBlQ29sdW1uRm9yKFxuICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgdmlldzogUGljazxTcGF0aWFsVmlld1N0YXRlLCAnY2VsbFR5cGVDb2x1bW4nPixcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBjYXRlZ29yaWNhbCA9IGRhdGFzZXQuY29sdW1ucy5maWx0ZXIoKGMpOiBjIGlzIENhdGVnb3JpY2FsQ29sdW1uTWV0YSA9PiBjLmtpbmQgPT09ICdjYXRlZ29yaWNhbCcpO1xuICBpZiAodmlldy5jZWxsVHlwZUNvbHVtbiAmJiBjYXRlZ29yaWNhbC5zb21lKChjKSA9PiBjLm5hbWUgPT09IHZpZXcuY2VsbFR5cGVDb2x1bW4pKSB7XG4gICAgcmV0dXJuIHZpZXcuY2VsbFR5cGVDb2x1bW47XG4gIH1cbiAgY29uc3QgdHlwZWQgPSBjYXRlZ29yaWNhbC5maWx0ZXIoKGMpID0+IGMuY2F0ZWdvcmllcy5sZW5ndGggPiAxKTtcbiAgcmV0dXJuICh0eXBlZC5maW5kKChjKSA9PiAhaXNDdXJhdGVkQ29sdW1uKGMubmFtZSkpID8/IHR5cGVkWzBdKT8ubmFtZSA/PyBudWxsO1xufVxuXG4vLyDilIDilIAgVGlsZXMgaW4gdmlldyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEEgc3RhYmxlIHN0cmluZyBpZCBmb3IgYSB0aWxlIGtleSwgYGxldmVsL2d4L2d5YCDigJQgdXNhYmxlIGFzIGEgTWFwIGtleS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWxlSWQoazogVGlsZUtleSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtrLmxldmVsfS8ke2suZ3h9LyR7ay5neX1gO1xufVxuXG4vKiogQ2FudmFzIHBpeGVscyBwZXIgb2JzZXJ2YXRpb24gdW5pdCBhbG9uZyB4LCBmb3IgYSBjYW1lcmEgem9vbSBhbmQgYSBkYXRh4oaSd29ybGQgYWZmaW5lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpeGVsc1BlckRhdGFVbml0KHpvb206IG51bWJlciwgcmVmPzogU3BhdGlhbEltYWdlUmVmIHwgbnVsbCk6IG51bWJlciB7XG4gIHJldHVybiB6b29tICogTWF0aC5hYnMocmVmPy5zY2FsZT8uWzBdID8/IDEpO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIG9ic2VydmF0aW9uIHNwYWNlIHRoZSBjYW1lcmEgc2hvd3MsIHBhZGRlZCBieSBgbWFyZ2luYCAoYSBmcmFjdGlvbiBvZiB0aGVcbiAqIHZpZXdwb3J0KSBzbyB0aWxlcyBqdXN0IG9mZiBzY3JlZW4gYXJlIGFscmVhZHkgdGhlcmUgd2hlbiBhIHBhbiBicmluZ3MgdGhlbSBpbjogbmFwYXJpLWpzJ3NcbiAqIGB3b3JsZFZpZXdwb3J0YCwgbWFwcGVkIGJhY2sgdGhyb3VnaCB0aGUgaW52ZXJzZSBvZiB0aGUgZGF0YeKGkndvcmxkIGFmZmluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2libGVEYXRhUmVjdChcbiAgY2VudGVyOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdLFxuICB6b29tOiBudW1iZXIsXG4gIGNhbnZhc1c6IG51bWJlcixcbiAgY2FudmFzSDogbnVtYmVyLFxuICByZWY/OiBTcGF0aWFsSW1hZ2VSZWYgfCBudWxsLFxuICBtYXJnaW4gPSAwLjE1LFxuKTogRGF0YVJlY3QgfCBudWxsIHtcbiAgaWYgKCEoem9vbSA+IDApIHx8ICEoY2FudmFzVyA+IDApIHx8ICEoY2FudmFzSCA+IDApKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qgc3ggPSByZWY/LnNjYWxlPy5bMF0gPz8gMTtcbiAgY29uc3Qgc3kgPSByZWY/LnNjYWxlPy5bMV0gPz8gMTtcbiAgY29uc3QgdHggPSByZWY/LnRyYW5zbGF0ZT8uWzBdID8/IDA7XG4gIGNvbnN0IHR5ID0gcmVmPy50cmFuc2xhdGU/LlsxXSA/PyAwO1xuICAvLyBUaGUgd29ybGQgcmVjdCBvZiBhIGNhbnZhcyBncm93biBieSB0aGUgbWFyZ2luIG9uIGVhY2ggc2lkZSAobmFwYXJpLWpzJ3Mgd29ybGRWaWV3cG9ydCkuXG4gIGNvbnN0IHYgPSB3b3JsZFZpZXdwb3J0KGNlbnRlclswXSwgY2VudGVyWzFdLCB6b29tLCBjYW52YXNXICogKDEgKyAyICogbWFyZ2luKSwgY2FudmFzSCAqICgxICsgMiAqIG1hcmdpbikpO1xuICBjb25zdCB3eDAgPSB2Lng7XG4gIGNvbnN0IHd4MSA9IHYueCArIHYud2lkdGg7XG4gIGNvbnN0IHd5MCA9IHYueTtcbiAgY29uc3Qgd3kxID0gdi55ICsgdi5oZWlnaHQ7XG4gIGNvbnN0IGF4ID0gKHd4MCAtIHR4KSAvIHN4O1xuICBjb25zdCBieCA9ICh3eDEgLSB0eCkgLyBzeDtcbiAgY29uc3QgYXkgPSAod3kwIC0gdHkpIC8gc3k7XG4gIGNvbnN0IGJ5ID0gKHd5MSAtIHR5KSAvIHN5O1xuICByZXR1cm4geyB4MDogTWF0aC5taW4oYXgsIGJ4KSwgeTA6IE1hdGgubWluKGF5LCBieSksIHgxOiBNYXRoLm1heChheCwgYngpLCB5MTogTWF0aC5tYXgoYXksIGJ5KSB9O1xufVxuXG4vKipcbiAqIFRpbGVzIG9mIG9uZSBsZXZlbCBpbnRlcnNlY3RpbmcgYHJlY3RgLCBjbGlwcGVkIHRvIHRoZSBkYXRhc2V0J3MgYGJvdW5kc2AgKHNvIHpvb21pbmdcbiAqIG91dCBvdmVyIGVtcHR5IGNhbnZhcyBkb2VzIG5vdCBhc2sgZm9yIHRpbGVzIHRoYXQgY2Fubm90IGV4aXN0KS4gT3JkZXJlZCBmcm9tIHRoZVxuICogcmVjdGFuZ2xlJ3MgY2VudHJlIG91dHdhcmQsIHNvIHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbiBmaWxscyBpbiBmaXJzdC5cbiAqXG4gKiBUaWxlIGBnYCBjb3ZlcnMgYFtnwrdzLCAoZysxKcK3cylgLiBUaGUgdmlldydzIGZhciBlZGdlIGlzIG9wZW4g4oCUIGEgdGlsZSBzdGFydGluZyBleGFjdGx5XG4gKiBhdCBgcmVjdC54MWAgc2hvd3Mgbm90aGluZyDigJQgYnV0IHRoZSBib3VuZHMnIGZhciBlZGdlIGlzIGNsb3NlZDogdGhlIGJvdW5kcyBhcmUgdGhlXG4gKiBleHRyZW1lIG9ic2VydmF0aW9ucycgY29vcmRpbmF0ZXMsIHNvIG9uZSBzaXRzIGV4YWN0bHkgb24gYGJvdW5kc1syXWAsIGluIHRoZSB0aWxlXG4gKiBzdGFydGluZyB0aGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbGVzSW5SZWN0KFxuICByZWN0OiBEYXRhUmVjdCxcbiAgbGV2ZWw6IG51bWJlcixcbiAgbGV2ZWxzOiByZWFkb25seSBTcGF0aWFsVGlsZUxldmVsW10sXG4gIGJvdW5kcz86IFNwYXRpYWxCb3VuZHMgfCBudWxsLFxuICBsaW1pdCA9IEluZmluaXR5LFxuKTogVGlsZUtleVtdIHtcbiAgY29uc3Qgc2l6ZSA9IGxldmVsc1tsZXZlbF0/LnRpbGVTaXplO1xuICBpZiAoIShzaXplID4gMCkpIHJldHVybiBbXTtcbiAgbGV0IHsgeDAsIHkwIH0gPSByZWN0O1xuICAvLyBMYXN0IHRpbGUgYWxvbmcgYW4gYXhpczogdGhlIG9uZSBiZWZvcmUgdGhlIG9wZW4gdmlldyBlZGdlLCBhdCBtb3N0IHRoZSBjbG9zZWQgYm91bmQncy5cbiAgbGV0IGd4MSA9IE1hdGguY2VpbChyZWN0LngxIC8gc2l6ZSkgLSAxO1xuICBsZXQgZ3kxID0gTWF0aC5jZWlsKHJlY3QueTEgLyBzaXplKSAtIDE7XG4gIGlmIChib3VuZHMpIHtcbiAgICB4MCA9IE1hdGgubWF4KHgwLCBib3VuZHNbMF0pO1xuICAgIHkwID0gTWF0aC5tYXgoeTAsIGJvdW5kc1sxXSk7XG4gICAgaWYgKE1hdGgubWluKHJlY3QueDEsIGJvdW5kc1syXSkgPCB4MCB8fCBNYXRoLm1pbihyZWN0LnkxLCBib3VuZHNbM10pIDwgeTApIHJldHVybiBbXTtcbiAgICBneDEgPSBNYXRoLm1pbihneDEsIE1hdGguZmxvb3IoYm91bmRzWzJdIC8gc2l6ZSkpO1xuICAgIGd5MSA9IE1hdGgubWluKGd5MSwgTWF0aC5mbG9vcihib3VuZHNbM10gLyBzaXplKSk7XG4gIH1cbiAgY29uc3QgZ3gwID0gTWF0aC5mbG9vcih4MCAvIHNpemUpO1xuICBjb25zdCBneTAgPSBNYXRoLmZsb29yKHkwIC8gc2l6ZSk7XG4gIGNvbnN0IGN4ID0gKHJlY3QueDAgKyByZWN0LngxKSAvIDIgLyBzaXplO1xuICBjb25zdCBjeSA9IChyZWN0LnkwICsgcmVjdC55MSkgLyAyIC8gc2l6ZTtcbiAgY29uc3Qgb3V0OiBUaWxlS2V5W10gPSBbXTtcbiAgZm9yIChsZXQgZ3kgPSBneTA7IGd5IDw9IGd5MTsgZ3krKykge1xuICAgIGZvciAobGV0IGd4ID0gZ3gwOyBneCA8PSBneDE7IGd4KyspIG91dC5wdXNoKHsgbGV2ZWwsIGd4LCBneSB9KTtcbiAgfVxuICBvdXQuc29ydChcbiAgICAoYSwgYikgPT4gKGEuZ3ggKyAwLjUgLSBjeCkgKiogMiArIChhLmd5ICsgMC41IC0gY3kpICoqIDIgLSAoKGIuZ3ggKyAwLjUgLSBjeCkgKiogMiArIChiLmd5ICsgMC41IC0gY3kpICoqIDIpLFxuICApO1xuICByZXR1cm4gb3V0Lmxlbmd0aCA+IGxpbWl0ID8gb3V0LnNsaWNlKDAsIGxpbWl0KSA6IG91dDtcbn1cblxuLyoqIHtAbGluayB0aWxlc0luUmVjdH0gZm9yIGEgZ3JpZCB3aG9zZSB0aWxlICgwLCAwKSBzdGFydHMgYXQgYG9yaWdpbmAuICovXG5leHBvcnQgZnVuY3Rpb24gdGlsZXNJblJlY3RGcm9tKFxuICBvcmlnaW46IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0sXG4gIHJlY3Q6IERhdGFSZWN0LFxuICBsZXZlbDogbnVtYmVyLFxuICBsZXZlbHM6IHJlYWRvbmx5IFNwYXRpYWxUaWxlTGV2ZWxbXSxcbiAgYm91bmRzPzogU3BhdGlhbEJvdW5kcyB8IG51bGwsXG4gIGxpbWl0ID0gSW5maW5pdHksXG4pOiBUaWxlS2V5W10ge1xuICBjb25zdCBbb3gsIG95XSA9IG9yaWdpbjtcbiAgY29uc3Qgc2hpZnRlZCA9IHsgeDA6IHJlY3QueDAgLSBveCwgeTA6IHJlY3QueTAgLSBveSwgeDE6IHJlY3QueDEgLSBveCwgeTE6IHJlY3QueTEgLSBveSB9O1xuICBjb25zdCBiOiBTcGF0aWFsQm91bmRzIHwgbnVsbCA9IGJvdW5kcyA/IFtib3VuZHNbMF0gLSBveCwgYm91bmRzWzFdIC0gb3ksIGJvdW5kc1syXSAtIG94LCBib3VuZHNbM10gLSBveV0gOiBudWxsO1xuICByZXR1cm4gdGlsZXNJblJlY3Qoc2hpZnRlZCwgbGV2ZWwsIGxldmVscywgYiwgbGltaXQpO1xufVxuXG4vKiogQXJlYSBvZiBgcmVjdGAgaW5zaWRlIGBib3VuZHNgICh0aGUgd2hvbGUgcmVjdCB3aGVuIHRoZXJlIGFyZSBub25lKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXNpYmxlQXJlYShyZWN0OiBEYXRhUmVjdCwgYm91bmRzPzogU3BhdGlhbEJvdW5kcyB8IG51bGwpOiBudW1iZXIge1xuICBjb25zdCB4MCA9IGJvdW5kcyA/IE1hdGgubWF4KHJlY3QueDAsIGJvdW5kc1swXSkgOiByZWN0LngwO1xuICBjb25zdCB5MCA9IGJvdW5kcyA/IE1hdGgubWF4KHJlY3QueTAsIGJvdW5kc1sxXSkgOiByZWN0LnkwO1xuICBjb25zdCB4MSA9IGJvdW5kcyA/IE1hdGgubWluKHJlY3QueDEsIGJvdW5kc1syXSkgOiByZWN0LngxO1xuICBjb25zdCB5MSA9IGJvdW5kcyA/IE1hdGgubWluKHJlY3QueTEsIGJvdW5kc1szXSkgOiByZWN0LnkxO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgeDEgLSB4MCkgKiBNYXRoLm1heCgwLCB5MSAtIHkwKTtcbn1cblxuLy8g4pSA4pSAIExldmVscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUeXBpY2FsIGNlbGwgZGlhbWV0ZXIsIGluIG9ic2VydmF0aW9uIHVuaXRzLCB1c2VkIHRvIGp1ZGdlIGhvdyBsYXJnZSBjZWxscyBhcHBlYXIuXG4gKiBEZXJpdmVkIGZyb20gdGhlIHBlci1vYnNlcnZhdGlvbiByYWRpdXMgd2hlbiB0aGVyZSBpcyBvbmU7IDEyIMK1bSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBpY2FsQ2VsbERpYW1ldGVyKHJhZGl1czogRmxvYXQzMkFycmF5IHwgbnVtYmVyIHwgdW5kZWZpbmVkLCBmYWxsYmFjayA9IDEyKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiByYWRpdXMgPT09ICdudW1iZXInKSByZXR1cm4gcmFkaXVzID4gMCA/IHJhZGl1cyAqIDIgOiBmYWxsYmFjaztcbiAgaWYgKCFyYWRpdXM/Lmxlbmd0aCkgcmV0dXJuIGZhbGxiYWNrO1xuICAvLyBUaGUgbWVkaWFuIG9mIGEgc2FtcGxlIGlzIHBsZW50eSDigJQgdGhpcyBzZXRzIGEgdGhyZXNob2xkLCBub3QgYSBtZWFzdXJlbWVudC5cbiAgY29uc3QgbWVkaWFuID0gcXVhbnRpbGUocmFkaXVzLCAwLjUsIHsgZmlsdGVyOiAncG9zaXRpdmUnLCBzYW1wbGVTaXplOiAyMDQ4IH0pO1xuICByZXR1cm4gbWVkaWFuID09PSBudWxsID8gZmFsbGJhY2sgOiBtZWRpYW4gKiAyO1xufVxuXG4vKipcbiAqIE9uLXNjcmVlbiBjZWxsIGRpYW1ldGVyIChweCkgYXQgb3IgYWJvdmUgd2hpY2ggZWFjaCBwb2x5Z29uIGxldmVsIGlzIHVzZWQuIEEgbGV2ZWxcbiAqIGhhbHZlcyB0aGUgdmVydGljZXMgb2YgdGhlIG9uZSBiZWxvdywgc28gZWFjaCBzaG91bGQgdGFrZSBvdmVyIHdoZW4gdGhlIGNlbGwgaXMgYWJvdXRcbiAqIGhhbGYgYXMgbGFyZ2Ugb24gc2NyZWVuLiBCZWxvdyB0aGUgbGFzdCBmaW5pdGUgdGhyZXNob2xkIG91dGxpbmVzIGFyZSBub3QgZHJhd24gYXRcbiAqIGFsbCDigJQgYSBjZWxsIGEgZmV3IHBpeGVscyB3aWRlIGlzIGEgZG90LCBhbmQgdGhlIG9ic2VydmF0aW9uIG1hcmtlcnMgYWxyZWFkeSBkcmF3IGl0XG4gKiBhcyBvbmUuXG4gKlxuICogWGVuaXVtJ3MgZm91cnRoIGxldmVsICgzIHZlcnRpY2VzIHBlciBjZWxsKSBpcyBkZWxpYmVyYXRlbHkgbmV2ZXIgdXNlZDogc2VlbiBvblxuICogc2NyZWVuIGl0IGlzIGEgZmllbGQgb2YgdHJpYW5nbGVzLCB3aGljaCByZWFkcyBhcyBhbiBhcnRlZmFjdCByYXRoZXIgdGhhbiBhcyBjZWxscy5cbiAqIFRoZSBkb3RzIGJlbG93IDggcHggc2F5IHRoZSBzYW1lIHRoaW5nIG1vcmUgaG9uZXN0bHkuXG4gKi9cbmV4cG9ydCBjb25zdCBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYID0gWzM2LCAxOCwgOCwgSW5maW5pdHldO1xuXG4vKipcbiAqIFdoaWNoIHBvbHlnb24gbGV2ZWwgc3VpdHMgdGhpcyB6b29tLCBvciAtMSBmb3IgXCJ0b28gc21hbGwgdG8gb3V0bGluZVwiLlxuICogYGRldGFpbGAgPiAxIHByZWZlcnMgZmluZXIgbGV2ZWxzIChzaGFycGVyLCBzbG93ZXIpOyA8IDEgY29hcnNlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbHlnb25MZXZlbEZvcihweFBlclVuaXQ6IG51bWJlciwgY2VsbERpYW1ldGVyOiBudW1iZXIsIGxldmVsQ291bnQ6IG51bWJlciwgZGV0YWlsID0gMSk6IG51bWJlciB7XG4gIGNvbnN0IGNlbGxQeCA9IHB4UGVyVW5pdCAqIGNlbGxEaWFtZXRlciAqIGRldGFpbDtcbiAgY29uc3QgdGFibGUgPSBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYO1xuICBmb3IgKGxldCBsID0gMDsgbCA8IGxldmVsQ291bnQ7IGwrKykge1xuICAgIC8vIFBhc3QgdGhlIHRhYmxlLCBrZWVwIGhhbHZpbmc6IGVhY2ggbGV2ZWwgc3RpbGwgaGFsdmVzIHRoZSB2ZXJ0aWNlcy5cbiAgICBjb25zdCBtaW4gPSB0YWJsZVtsXSA/PyB0YWJsZVt0YWJsZS5sZW5ndGggLSAxXSAvIDIgKiogKGwgLSB0YWJsZS5sZW5ndGggKyAxKTtcbiAgICBpZiAoY2VsbFB4ID49IG1pbikgcmV0dXJuIGw7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIFdoaWNoIHRyYW5zY3JpcHQgbGV2ZWwgc3VpdHMgdGhpcyB6b29tOiB0aGUgb25lIHdob3NlIHRpbGVzIGNvbWUgb3V0IGNsb3Nlc3QgdG9cbiAqIGB0YXJnZXRUaWxlUHhgIG9uIHNjcmVlbi4gQ29hcnNlciBsZXZlbHMgYWdncmVnYXRlIG1vcmUsIHNvIHRoaXMga2VlcHMgdGhlIG51bWJlciBvZlxuICogbWFya2VycyBwZXIgc2NyZWVuIHJvdWdobHkgY29uc3RhbnQgaG93ZXZlciBmYXIgb3V0IHRoZSBjYW1lcmEgaXMg4oCUIHRoZSBwcm9wZXJ0eSB0aGF0XG4gKiBrZWVwcyB0aGUgdmlldyBmYXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdExldmVsRm9yKFxuICBweFBlclVuaXQ6IG51bWJlcixcbiAgbGV2ZWxzOiByZWFkb25seSBTcGF0aWFsVGlsZUxldmVsW10sXG4gIHRhcmdldFRpbGVQeCA9IDUxMixcbik6IG51bWJlciB7XG4gIGlmICghbGV2ZWxzLmxlbmd0aCB8fCAhKHB4UGVyVW5pdCA+IDApKSByZXR1cm4gMDtcbiAgbGV0IGJlc3QgPSAwO1xuICBsZXQgYmVzdEVyciA9IEluZmluaXR5O1xuICBmb3IgKGxldCBsID0gMDsgbCA8IGxldmVscy5sZW5ndGg7IGwrKykge1xuICAgIGNvbnN0IGVyciA9IE1hdGguYWJzKE1hdGgubG9nMigobGV2ZWxzW2xdLnRpbGVTaXplICogcHhQZXJVbml0KSAvIHRhcmdldFRpbGVQeCkpO1xuICAgIGlmIChlcnIgPCBiZXN0RXJyKSB7XG4gICAgICBiZXN0RXJyID0gZXJyO1xuICAgICAgYmVzdCA9IGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBiZXN0O1xufVxuIl19
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zcGF0aWFsL2xvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVcxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUJuQyx5RkFBeUY7QUFFekYsNEZBQTRGO0FBQzVGLE1BQU0sVUFBVSxVQUFVLENBQ3hCLE9BQWlFLEVBQ2pFLElBQXlDO0lBRXpDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixLQUE4RSxFQUM5RSxPQUFrQztJQUVsQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3hCLE1BQU0sSUFBSSxHQUFHLE9BQU8sS0FBSyxNQUFNLENBQUM7SUFDaEMsTUFBTSxHQUFHLEdBQ1AsQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQztRQUM1RCxDQUFDLENBQUMsT0FBTztRQUNULENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxD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RixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDNUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRyxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBYyxFQUNkLEtBQWEsRUFDYixNQUFtQyxFQUNuQyxNQUE2QixFQUM3QixLQUFLLEdBQUcsUUFBUTtJQUVoQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzQixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQztJQUN0QiwwRkFBMEY7SUFDMUYsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RGLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNsQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzFDLE1BQU0sR0FBRyxHQUFjLEVBQUUsQ0FBQztJQUMxQixLQUFLLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbkMsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxHQUFHLENBQUMsSUFBSSxDQUNOLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFD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Q1osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxTQUFpQixFQUNqQixNQUFtQyxFQUNuQyxZQUFZLEdBQUcsR0FBRztJQUVsQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQztJQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNqRixJQUFJLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ2QsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMZXZlbC1vZi1kZXRhaWwgcGxhbm5pbmcgZm9yIHRpbGVkIHNwYXRpYWwgZ2VvbWV0cnkg4oCUIGNlbGwgb3V0bGluZXMgYW5kIHRyYW5zY3JpcHRzLlxuICpcbiAqIFRoZSByZW5kZXJlciBrbm93cyBpdHMgY2FtZXJhIChhIHdvcmxkLXNwYWNlIGNlbnRyZSwgYSB6b29tIGluIGNhbnZhcyBwaXhlbHMgcGVyIHdvcmxkXG4gKiB1bml0LCBhIGNhbnZhcyBzaXplKTsgYSB0aWxlZCBkYXRhc2V0IGtub3dzIGl0cyBncmlkcyAob25lIHBlciBsZXZlbCwgaW4gb2JzZXJ2YXRpb25cbiAqIHVuaXRzKS4gVGhpcyBtb2R1bGUgaXMgdGhlIGJyaWRnZTogd2hpY2ggbGV2ZWwgdGhlIHpvb20gY2FsbHMgZm9yIGFuZCB3aGljaCB0aWxlcyBhcmUgb25cbiAqIHNjcmVlbi4gRXZlcnl0aGluZyBoZXJlIGlzIHB1cmUsIHNvIHRoZSBwb2xpY3kg4oCUIHRoZSBwYXJ0IHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSB2aWV3XG4gKiBpcyBmYXN0IGFuZCBsZWdpYmxlIOKAlCBpcyB0ZXN0YWJsZSB3aXRob3V0IGEgR1BVLlxuICpcbiAqIE9ic2VydmF0aW9uIHVuaXRzIG1hcCBvbnRvIHdvcmxkIHVuaXRzIHRocm91Z2ggdGhlIGRhdGFzZXQncyBgaW1hZ2VSZWZgIGFmZmluZVxuICogKGB3b3JsZCA9IGRhdGEgwrcgc2NhbGUgKyB0cmFuc2xhdGVgKSwgc28gXCJwaXhlbHMgcGVyIG9ic2VydmF0aW9uIHVuaXRcIiBpc1xuICogYHpvb20gwrcgc2NhbGVgLiBGb3IgYSBYZW5pdW0gYnVuZGxlIHRoZSBkYXRhIHVuaXQgaXMgdGhlIG1pY3JvbiBhbmQgdGhlIHdvcmxkIHVuaXQgdGhlXG4gKiBtb3JwaG9sb2d5IHBpeGVsLlxuICovXG5cbmltcG9ydCB7IHdvcmxkVmlld3BvcnQgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENhdGVnb3JpY2FsQ29sdW1uTWV0YSxcbiAgU3BhdGlhbEJvdW5kcyxcbiAgU3BhdGlhbERhdGFzZXQsXG4gIFNwYXRpYWxJbWFnZVJlZixcbiAgU3BhdGlhbFBvbHlnb25UaWxlc01ldGEsXG4gIFNwYXRpYWxUaWxlTGV2ZWwsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgcXVhbnRpbGUgfSBmcm9tICcuL3N0YXRzJztcblxuLyoqIEEgcmVjdGFuZ2xlIGluIG9ic2VydmF0aW9uIGNvb3JkaW5hdGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhUmVjdCB7XG4gIHgwOiBudW1iZXI7XG4gIHkwOiBudW1iZXI7XG4gIHgxOiBudW1iZXI7XG4gIHkxOiBudW1iZXI7XG59XG5cbi8qKiBUaWxlIGFkZHJlc3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbGVLZXkge1xuICBsZXZlbDogbnVtYmVyO1xuICBneDogbnVtYmVyO1xuICBneTogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgV2hhdCB0aGUgdmlldyBkcmF3cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFdoZXRoZXIgY2VsbCBvdXRsaW5lcyBhcmUgZHJhd246IHRoZSB1c2VyJ3MgY2hvaWNlLCBlbHNlIG9uIHdoZW4gdGhlIGRhdGFzZXQgaGFzIGFueS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZWxsc1Nob3duKFxuICBkYXRhc2V0OiBQaWNrPFNwYXRpYWxEYXRhc2V0LCAncG9seWdvblRpbGVzJyB8ICdwb2x5Z29ucyc+IHwgbnVsbCxcbiAgdmlldzogUGljazxTcGF0aWFsVmlld1N0YXRlLCAnc2hvd0NlbGxzJz4sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgYXZhaWxhYmxlID0gISEoZGF0YXNldD8ucG9seWdvblRpbGVzIHx8IGRhdGFzZXQ/LnBvbHlnb25zKTtcbiAgcmV0dXJuIGF2YWlsYWJsZSAmJiAodmlldy5zaG93Q2VsbHMgPz8gdHJ1ZSk7XG59XG5cbi8qKlxuICogVGhlIGJvdW5kYXJ5IHNldHMgZHJhd24gZm9yIHRoZSB2aWV3J3MgYGNlbGxTZXRgOiB0aGF0IHNldCB3aGVuIHRoZSBkYXRhc2V0IGhhcyBpdCwgZWxzZSB0aGVcbiAqIGRhdGFzZXQncyBkZWZhdWx0LCBlbHNlIGl0cyBmaXJzdDsgZm9yIFwiYm90aFwiLCB0aGF0IG9uZSB3aXRoIHRoZSBvdGhlciBzZXQgYmVzaWRlIGl0LiBOdWxsIHdoZW5cbiAqIHRoZSBkYXRhc2V0IGhhcyBubyBzZXQuIFRoZSByZW5kZXJlciBhbmQgdGhlIENlbGxzIHBhbmVsJ3Mgc3dpdGNoZXMgYm90aCByZWFkIGl0LCBzbyBhIHNldCBrZXB0XG4gKiBmcm9tIGFub3RoZXIgZGF0YXNldCBzaG93cyBhcyB3aGF0IGlzIGFjdHVhbGx5IGRyYXduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd25DZWxsU2V0cyhcbiAgdGlsZWQ6IFBpY2s8U3BhdGlhbFBvbHlnb25UaWxlc01ldGEsICdzZXRzJyB8ICdkZWZhdWx0U2V0Jz4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjZWxsU2V0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogeyBzZXQ6IHN0cmluZzsgbnVjbGV1c1NldD86IHN0cmluZyB9IHwgbnVsbCB7XG4gIGlmICghdGlsZWQpIHJldHVybiBudWxsO1xuICBjb25zdCBib3RoID0gY2VsbFNldCA9PT0gJ2JvdGgnO1xuICBjb25zdCBzZXQgPVxuICAgICFib3RoICYmIGNlbGxTZXQgJiYgdGlsZWQuc2V0cy5zb21lKChzKSA9PiBzLm5hbWUgPT09IGNlbGxTZXQpXG4gICAgICA/IGNlbGxTZXRcbiAgICAgIDogKHRpbGVkLmRlZmF1bHRTZXQgPz8gdGlsZWQuc2V0c1swXT8ubmFtZSk7XG4gIGlmICghc2V0KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbnVjbGV1c1NldCA9IGJvdGggPyB0aWxlZC5zZXRzLmZpbmQoKHMpID0+IHMubmFtZSAhPT0gc2V0KT8ubmFtZSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG51Y2xldXNTZXQgPyB7IHNldCwgbnVjbGV1c1NldCB9IDogeyBzZXQgfTtcbn1cblxuLyoqIEEgY29sdW1uIGhvbGRpbmcgYSBoYW5kLWN1cmF0ZWQgY2VsbC10eXBlIGFubm90YXRpb24sIGJ5IG5hbWluZyBjb252ZW50aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VyYXRlZENvbHVtbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9jdXJhdGVkL2kudGVzdChuYW1lKTtcbn1cblxuLyoqXG4gKiBUaGUgY2F0ZWdvcmljYWwgY29sdW1uIHRoYXQgbmFtZXMgZWFjaCBjZWxsJ3MgdHlwZTogdGhlIHZpZXcncyBjaG9pY2Ugd2hlbiBpdCBpcyBhXG4gKiBjb2x1bW4gb2YgdGhpcyBkYXRhc2V0LCBlbHNlIHRoZSBmaXJzdCBjYXRlZ29yaWNhbCBjb2x1bW4gdGhhdCBpcyBub3QgYSBjdXJhdGVkXG4gKiBhbm5vdGF0aW9uIChhIHBpcGVsaW5lJ3MgY2x1c3RlcmluZyBpcyB0aGUgZGVmYXVsdDsgY3VyYXRpb24gaXMgb3B0ZWQgaW50byksIGVsc2VcbiAqIGFueSBjYXRlZ29yaWNhbCBjb2x1bW4uIEEgY29sdW1uIG9mIG9uZSBjYXRlZ29yeSwgc3VjaCBhcyB0aGUgYHJlZ2lvbmAgYSBTcGF0aWFsRGF0YVxuICogdGFibGUgbGlua3MgaXRzIGNlbGxzIHRvIHRoZWlyIHNoYXBlcyB3aXRoLCBuYW1lcyBubyB0eXBlIGFuZCBpcyBvbmx5IHVzZWQgd2hlbiBjaG9zZW47XG4gKiBhIGRhdGFzZXQgd2l0aCBub3RoaW5nIGVsc2UgaGFzIG5vIGNlbGwgdHlwZXMgKG51bGwpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2VsbFR5cGVDb2x1bW5Gb3IoXG4gIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICB2aWV3OiBQaWNrPFNwYXRpYWxWaWV3U3RhdGUsICdjZWxsVHlwZUNvbHVtbic+LFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGNhdGVnb3JpY2FsID0gZGF0YXNldC5jb2x1bW5zLmZpbHRlcigoYyk6IGMgaXMgQ2F0ZWdvcmljYWxDb2x1bW5NZXRhID0+IGMua2luZCA9PT0gJ2NhdGVnb3JpY2FsJyk7XG4gIGlmICh2aWV3LmNlbGxUeXBlQ29sdW1uICYmIGNhdGVnb3JpY2FsLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gdmlldy5jZWxsVHlwZUNvbHVtbikpIHtcbiAgICByZXR1cm4gdmlldy5jZWxsVHlwZUNvbHVtbjtcbiAgfVxuICBjb25zdCB0eXBlZCA9IGNhdGVnb3JpY2FsLmZpbHRlcigoYykgPT4gYy5jYXRlZ29yaWVzLmxlbmd0aCA+IDEpO1xuICByZXR1cm4gKHR5cGVkLmZpbmQoKGMpID0+ICFpc0N1cmF0ZWRDb2x1bW4oYy5uYW1lKSkgPz8gdHlwZWRbMF0pPy5uYW1lID8/IG51bGw7XG59XG5cbi8vIOKUgOKUgCBUaWxlcyBpbiB2aWV3IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBzdGFibGUgc3RyaW5nIGlkIGZvciBhIHRpbGUga2V5LCBgbGV2ZWwvZ3gvZ3lgIOKAlCB1c2FibGUgYXMgYSBNYXAga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbGVJZChrOiBUaWxlS2V5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2subGV2ZWx9LyR7ay5neH0vJHtrLmd5fWA7XG59XG5cbi8qKiBDYW52YXMgcGl4ZWxzIHBlciBvYnNlcnZhdGlvbiB1bml0IGFsb25nIHgsIGZvciBhIGNhbWVyYSB6b29tIGFuZCBhIGRhdGHihpJ3b3JsZCBhZmZpbmUuICovXG5leHBvcnQgZnVuY3Rpb24gcGl4ZWxzUGVyRGF0YVVuaXQoem9vbTogbnVtYmVyLCByZWY/OiBTcGF0aWFsSW1hZ2VSZWYgfCBudWxsKTogbnVtYmVyIHtcbiAgcmV0dXJuIHpvb20gKiBNYXRoLmFicyhyZWY/LnNjYWxlPy5bMF0gPz8gMSk7XG59XG5cbi8qKlxuICogVGhlIHBhcnQgb2Ygb2JzZXJ2YXRpb24gc3BhY2UgdGhlIGNhbWVyYSBzaG93cywgcGFkZGVkIGJ5IGBtYXJnaW5gIChhIGZyYWN0aW9uIG9mIHRoZVxuICogdmlld3BvcnQpIHNvIHRpbGVzIGp1c3Qgb2ZmIHNjcmVlbiBhcmUgYWxyZWFkeSB0aGVyZSB3aGVuIGEgcGFuIGJyaW5ncyB0aGVtIGluOiBuYXBhcmktanMnc1xuICogYHdvcmxkVmlld3BvcnRgLCBtYXBwZWQgYmFjayB0aHJvdWdoIHRoZSBpbnZlcnNlIG9mIHRoZSBkYXRh4oaSd29ybGQgYWZmaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaWJsZURhdGFSZWN0KFxuICBjZW50ZXI6IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0sXG4gIHpvb206IG51bWJlcixcbiAgY2FudmFzVzogbnVtYmVyLFxuICBjYW52YXNIOiBudW1iZXIsXG4gIHJlZj86IFNwYXRpYWxJbWFnZVJlZiB8IG51bGwsXG4gIG1hcmdpbiA9IDAuMTUsXG4pOiBEYXRhUmVjdCB8IG51bGwge1xuICBpZiAoISh6b29tID4gMCkgfHwgIShjYW52YXNXID4gMCkgfHwgIShjYW52YXNIID4gMCkpIHJldHVybiBudWxsO1xuICBjb25zdCBzeCA9IHJlZj8uc2NhbGU/LlswXSA/PyAxO1xuICBjb25zdCBzeSA9IHJlZj8uc2NhbGU/LlsxXSA/PyAxO1xuICBjb25zdCB0eCA9IHJlZj8udHJhbnNsYXRlPy5bMF0gPz8gMDtcbiAgY29uc3QgdHkgPSByZWY/LnRyYW5zbGF0ZT8uWzFdID8/IDA7XG4gIC8vIFRoZSB3b3JsZCByZWN0IG9mIGEgY2FudmFzIGdyb3duIGJ5IHRoZSBtYXJnaW4gb24gZWFjaCBzaWRlIChuYXBhcmktanMncyB3b3JsZFZpZXdwb3J0KS5cbiAgY29uc3QgdiA9IHdvcmxkVmlld3BvcnQoY2VudGVyWzBdLCBjZW50ZXJbMV0sIHpvb20sIGNhbnZhc1cgKiAoMSArIDIgKiBtYXJnaW4pLCBjYW52YXNIICogKDEgKyAyICogbWFyZ2luKSk7XG4gIGNvbnN0IHd4MCA9IHYueDtcbiAgY29uc3Qgd3gxID0gdi54ICsgdi53aWR0aDtcbiAgY29uc3Qgd3kwID0gdi55O1xuICBjb25zdCB3eTEgPSB2LnkgKyB2LmhlaWdodDtcbiAgY29uc3QgYXggPSAod3gwIC0gdHgpIC8gc3g7XG4gIGNvbnN0IGJ4ID0gKHd4MSAtIHR4KSAvIHN4O1xuICBjb25zdCBheSA9ICh3eTAgLSB0eSkgLyBzeTtcbiAgY29uc3QgYnkgPSAod3kxIC0gdHkpIC8gc3k7XG4gIHJldHVybiB7IHgwOiBNYXRoLm1pbihheCwgYngpLCB5MDogTWF0aC5taW4oYXksIGJ5KSwgeDE6IE1hdGgubWF4KGF4LCBieCksIHkxOiBNYXRoLm1heChheSwgYnkpIH07XG59XG5cbi8qKlxuICogVGlsZXMgb2Ygb25lIGxldmVsIGludGVyc2VjdGluZyBgcmVjdGAsIGNsaXBwZWQgdG8gdGhlIGRhdGFzZXQncyBgYm91bmRzYCAoc28gem9vbWluZ1xuICogb3V0IG92ZXIgZW1wdHkgY2FudmFzIGRvZXMgbm90IGFzayBmb3IgdGlsZXMgdGhhdCBjYW5ub3QgZXhpc3QpLiBPcmRlcmVkIGZyb20gdGhlXG4gKiByZWN0YW5nbGUncyBjZW50cmUgb3V0d2FyZCwgc28gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuIGZpbGxzIGluIGZpcnN0LlxuICpcbiAqIFRpbGUgYGdgIGNvdmVycyBgW2fCt3MsIChnKzEpwrdzKWAuIFRoZSB2aWV3J3MgZmFyIGVkZ2UgaXMgb3BlbiDigJQgYSB0aWxlIHN0YXJ0aW5nIGV4YWN0bHlcbiAqIGF0IGByZWN0LngxYCBzaG93cyBub3RoaW5nIOKAlCBidXQgdGhlIGJvdW5kcycgZmFyIGVkZ2UgaXMgY2xvc2VkOiB0aGUgYm91bmRzIGFyZSB0aGVcbiAqIGV4dHJlbWUgb2JzZXJ2YXRpb25zJyBjb29yZGluYXRlcywgc28gb25lIHNpdHMgZXhhY3RseSBvbiBgYm91bmRzWzJdYCwgaW4gdGhlIHRpbGVcbiAqIHN0YXJ0aW5nIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGlsZXNJblJlY3QoXG4gIHJlY3Q6IERhdGFSZWN0LFxuICBsZXZlbDogbnVtYmVyLFxuICBsZXZlbHM6IHJlYWRvbmx5IFNwYXRpYWxUaWxlTGV2ZWxbXSxcbiAgYm91bmRzPzogU3BhdGlhbEJvdW5kcyB8IG51bGwsXG4gIGxpbWl0ID0gSW5maW5pdHksXG4pOiBUaWxlS2V5W10ge1xuICBjb25zdCBzaXplID0gbGV2ZWxzW2xldmVsXT8udGlsZVNpemU7XG4gIGlmICghKHNpemUgPiAwKSkgcmV0dXJuIFtdO1xuICBsZXQgeyB4MCwgeTAgfSA9IHJlY3Q7XG4gIC8vIExhc3QgdGlsZSBhbG9uZyBhbiBheGlzOiB0aGUgb25lIGJlZm9yZSB0aGUgb3BlbiB2aWV3IGVkZ2UsIGF0IG1vc3QgdGhlIGNsb3NlZCBib3VuZCdzLlxuICBsZXQgZ3gxID0gTWF0aC5jZWlsKHJlY3QueDEgLyBzaXplKSAtIDE7XG4gIGxldCBneTEgPSBNYXRoLmNlaWwocmVjdC55MSAvIHNpemUpIC0gMTtcbiAgaWYgKGJvdW5kcykge1xuICAgIHgwID0gTWF0aC5tYXgoeDAsIGJvdW5kc1swXSk7XG4gICAgeTAgPSBNYXRoLm1heCh5MCwgYm91bmRzWzFdKTtcbiAgICBpZiAoTWF0aC5taW4ocmVjdC54MSwgYm91bmRzWzJdKSA8IHgwIHx8IE1hdGgubWluKHJlY3QueTEsIGJvdW5kc1szXSkgPCB5MCkgcmV0dXJuIFtdO1xuICAgIGd4MSA9IE1hdGgubWluKGd4MSwgTWF0aC5mbG9vcihib3VuZHNbMl0gLyBzaXplKSk7XG4gICAgZ3kxID0gTWF0aC5taW4oZ3kxLCBNYXRoLmZsb29yKGJvdW5kc1szXSAvIHNpemUpKTtcbiAgfVxuICBjb25zdCBneDAgPSBNYXRoLmZsb29yKHgwIC8gc2l6ZSk7XG4gIGNvbnN0IGd5MCA9IE1hdGguZmxvb3IoeTAgLyBzaXplKTtcbiAgY29uc3QgY3ggPSAocmVjdC54MCArIHJlY3QueDEpIC8gMiAvIHNpemU7XG4gIGNvbnN0IGN5ID0gKHJlY3QueTAgKyByZWN0LnkxKSAvIDIgLyBzaXplO1xuICBjb25zdCBvdXQ6IFRpbGVLZXlbXSA9IFtdO1xuICBmb3IgKGxldCBneSA9IGd5MDsgZ3kgPD0gZ3kxOyBneSsrKSB7XG4gICAgZm9yIChsZXQgZ3ggPSBneDA7IGd4IDw9IGd4MTsgZ3grKykgb3V0LnB1c2goeyBsZXZlbCwgZ3gsIGd5IH0pO1xuICB9XG4gIG91dC5zb3J0KFxuICAgIChhLCBiKSA9PiAoYS5neCArIDAuNSAtIGN4KSAqKiAyICsgKGEuZ3kgKyAwLjUgLSBjeSkgKiogMiAtICgoYi5neCArIDAuNSAtIGN4KSAqKiAyICsgKGIuZ3kgKyAwLjUgLSBjeSkgKiogMiksXG4gICk7XG4gIHJldHVybiBvdXQubGVuZ3RoID4gbGltaXQgPyBvdXQuc2xpY2UoMCwgbGltaXQpIDogb3V0O1xufVxuXG4vKioge0BsaW5rIHRpbGVzSW5SZWN0fSBmb3IgYSBncmlkIHdob3NlIHRpbGUgKDAsIDApIHN0YXJ0cyBhdCBgb3JpZ2luYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWxlc0luUmVjdEZyb20oXG4gIG9yaWdpbjogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbiAgcmVjdDogRGF0YVJlY3QsXG4gIGxldmVsOiBudW1iZXIsXG4gIGxldmVsczogcmVhZG9ubHkgU3BhdGlhbFRpbGVMZXZlbFtdLFxuICBib3VuZHM/OiBTcGF0aWFsQm91bmRzIHwgbnVsbCxcbiAgbGltaXQgPSBJbmZpbml0eSxcbik6IFRpbGVLZXlbXSB7XG4gIGNvbnN0IFtveCwgb3ldID0gb3JpZ2luO1xuICBjb25zdCBzaGlmdGVkID0geyB4MDogcmVjdC54MCAtIG94LCB5MDogcmVjdC55MCAtIG95LCB4MTogcmVjdC54MSAtIG94LCB5MTogcmVjdC55MSAtIG95IH07XG4gIGNvbnN0IGI6IFNwYXRpYWxCb3VuZHMgfCBudWxsID0gYm91bmRzID8gW2JvdW5kc1swXSAtIG94LCBib3VuZHNbMV0gLSBveSwgYm91bmRzWzJdIC0gb3gsIGJvdW5kc1szXSAtIG95XSA6IG51bGw7XG4gIHJldHVybiB0aWxlc0luUmVjdChzaGlmdGVkLCBsZXZlbCwgbGV2ZWxzLCBiLCBsaW1pdCk7XG59XG5cbi8qKiBBcmVhIG9mIGByZWN0YCBpbnNpZGUgYGJvdW5kc2AgKHRoZSB3aG9sZSByZWN0IHdoZW4gdGhlcmUgYXJlIG5vbmUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2libGVBcmVhKHJlY3Q6IERhdGFSZWN0LCBib3VuZHM/OiBTcGF0aWFsQm91bmRzIHwgbnVsbCk6IG51bWJlciB7XG4gIGNvbnN0IHgwID0gYm91bmRzID8gTWF0aC5tYXgocmVjdC54MCwgYm91bmRzWzBdKSA6IHJlY3QueDA7XG4gIGNvbnN0IHkwID0gYm91bmRzID8gTWF0aC5tYXgocmVjdC55MCwgYm91bmRzWzFdKSA6IHJlY3QueTA7XG4gIGNvbnN0IHgxID0gYm91bmRzID8gTWF0aC5taW4ocmVjdC54MSwgYm91bmRzWzJdKSA6IHJlY3QueDE7XG4gIGNvbnN0IHkxID0gYm91bmRzID8gTWF0aC5taW4ocmVjdC55MSwgYm91bmRzWzNdKSA6IHJlY3QueTE7XG4gIHJldHVybiBNYXRoLm1heCgwLCB4MSAtIHgwKSAqIE1hdGgubWF4KDAsIHkxIC0geTApO1xufVxuXG4vLyDilIDilIAgTGV2ZWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFR5cGljYWwgY2VsbCBkaWFtZXRlciwgaW4gb2JzZXJ2YXRpb24gdW5pdHMsIHVzZWQgdG8ganVkZ2UgaG93IGxhcmdlIGNlbGxzIGFwcGVhci5cbiAqIERlcml2ZWQgZnJvbSB0aGUgcGVyLW9ic2VydmF0aW9uIHJhZGl1cyB3aGVuIHRoZXJlIGlzIG9uZTsgMTIgwrVtIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGljYWxDZWxsRGlhbWV0ZXIocmFkaXVzOiBGbG9hdDMyQXJyYXkgfCBudW1iZXIgfCB1bmRlZmluZWQsIGZhbGxiYWNrID0gMTIpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHJhZGl1cyA9PT0gJ251bWJlcicpIHJldHVybiByYWRpdXMgPiAwID8gcmFkaXVzICogMiA6IGZhbGxiYWNrO1xuICBpZiAoIXJhZGl1cz8ubGVuZ3RoKSByZXR1cm4gZmFsbGJhY2s7XG4gIC8vIFRoZSBtZWRpYW4gb2YgYSBzYW1wbGUgaXMgcGxlbnR5IOKAlCB0aGlzIHNldHMgYSB0aHJlc2hvbGQsIG5vdCBhIG1lYXN1cmVtZW50LlxuICBjb25zdCBtZWRpYW4gPSBxdWFudGlsZShyYWRpdXMsIDAuNSwgeyBmaWx0ZXI6ICdwb3NpdGl2ZScsIHNhbXBsZVNpemU6IDIwNDggfSk7XG4gIHJldHVybiBtZWRpYW4gPT09IG51bGwgPyBmYWxsYmFjayA6IG1lZGlhbiAqIDI7XG59XG5cbi8qKlxuICogT24tc2NyZWVuIGNlbGwgZGlhbWV0ZXIgKHB4KSBhdCBvciBhYm92ZSB3aGljaCBlYWNoIHBvbHlnb24gbGV2ZWwgaXMgdXNlZC4gQSBsZXZlbFxuICogaGFsdmVzIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgb25lIGJlbG93LCBzbyBlYWNoIHNob3VsZCB0YWtlIG92ZXIgd2hlbiB0aGUgY2VsbCBpcyBhYm91dFxuICogaGFsZiBhcyBsYXJnZSBvbiBzY3JlZW4uIEJlbG93IHRoZSBsYXN0IGZpbml0ZSB0aHJlc2hvbGQgb3V0bGluZXMgYXJlIG5vdCBkcmF3biBhdFxuICogYWxsIOKAlCBhIGNlbGwgYSBmZXcgcGl4ZWxzIHdpZGUgaXMgYSBkb3QsIGFuZCB0aGUgb2JzZXJ2YXRpb24gbWFya2VycyBhbHJlYWR5IGRyYXcgaXRcbiAqIGFzIG9uZS5cbiAqXG4gKiBYZW5pdW0ncyBmb3VydGggbGV2ZWwgKDMgdmVydGljZXMgcGVyIGNlbGwpIGlzIGRlbGliZXJhdGVseSBuZXZlciB1c2VkOiBzZWVuIG9uXG4gKiBzY3JlZW4gaXQgaXMgYSBmaWVsZCBvZiB0cmlhbmdsZXMsIHdoaWNoIHJlYWRzIGFzIGFuIGFydGVmYWN0IHJhdGhlciB0aGFuIGFzIGNlbGxzLlxuICogVGhlIGRvdHMgYmVsb3cgOCBweCBzYXkgdGhlIHNhbWUgdGhpbmcgbW9yZSBob25lc3RseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFggPSBbMzYsIDE4LCA4LCBJbmZpbml0eV07XG5cbi8qKlxuICogV2hpY2ggcG9seWdvbiBsZXZlbCBzdWl0cyB0aGlzIHpvb20sIG9yIC0xIGZvciBcInRvbyBzbWFsbCB0byBvdXRsaW5lXCIuXG4gKiBgZGV0YWlsYCA+IDEgcHJlZmVycyBmaW5lciBsZXZlbHMgKHNoYXJwZXIsIHNsb3dlcik7IDwgMSBjb2Fyc2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9seWdvbkxldmVsRm9yKHB4UGVyVW5pdDogbnVtYmVyLCBjZWxsRGlhbWV0ZXI6IG51bWJlciwgbGV2ZWxDb3VudDogbnVtYmVyLCBkZXRhaWwgPSAxKTogbnVtYmVyIHtcbiAgY29uc3QgY2VsbFB4ID0gcHhQZXJVbml0ICogY2VsbERpYW1ldGVyICogZGV0YWlsO1xuICBjb25zdCB0YWJsZSA9IFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFg7XG4gIGZvciAobGV0IGwgPSAwOyBsIDwgbGV2ZWxDb3VudDsgbCsrKSB7XG4gICAgLy8gUGFzdCB0aGUgdGFibGUsIGtlZXAgaGFsdmluZzogZWFjaCBsZXZlbCBzdGlsbCBoYWx2ZXMgdGhlIHZlcnRpY2VzLlxuICAgIGNvbnN0IG1pbiA9IHRhYmxlW2xdID8/IHRhYmxlW3RhYmxlLmxlbmd0aCAtIDFdIC8gMiAqKiAobCAtIHRhYmxlLmxlbmd0aCArIDEpO1xuICAgIGlmIChjZWxsUHggPj0gbWluKSByZXR1cm4gbDtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogV2hpY2ggdHJhbnNjcmlwdCBsZXZlbCBzdWl0cyB0aGlzIHpvb206IHRoZSBvbmUgd2hvc2UgdGlsZXMgY29tZSBvdXQgY2xvc2VzdCB0b1xuICogYHRhcmdldFRpbGVQeGAgb24gc2NyZWVuLiBDb2Fyc2VyIGxldmVscyBhZ2dyZWdhdGUgbW9yZSwgc28gdGhpcyBrZWVwcyB0aGUgbnVtYmVyIG9mXG4gKiBtYXJrZXJzIHBlciBzY3JlZW4gcm91Z2hseSBjb25zdGFudCBob3dldmVyIGZhciBvdXQgdGhlIGNhbWVyYSBpcyDigJQgdGhlIHByb3BlcnR5IHRoYXRcbiAqIGtlZXBzIHRoZSB2aWV3IGZhc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2NyaXB0TGV2ZWxGb3IoXG4gIHB4UGVyVW5pdDogbnVtYmVyLFxuICBsZXZlbHM6IHJlYWRvbmx5IFNwYXRpYWxUaWxlTGV2ZWxbXSxcbiAgdGFyZ2V0VGlsZVB4ID0gNTEyLFxuKTogbnVtYmVyIHtcbiAgaWYgKCFsZXZlbHMubGVuZ3RoIHx8ICEocHhQZXJVbml0ID4gMCkpIHJldHVybiAwO1xuICBsZXQgYmVzdCA9IDA7XG4gIGxldCBiZXN0RXJyID0gSW5maW5pdHk7XG4gIGZvciAobGV0IGwgPSAwOyBsIDwgbGV2ZWxzLmxlbmd0aDsgbCsrKSB7XG4gICAgY29uc3QgZXJyID0gTWF0aC5hYnMoTWF0aC5sb2cyKChsZXZlbHNbbF0udGlsZVNpemUgKiBweFBlclVuaXQpIC8gdGFyZ2V0VGlsZVB4KSk7XG4gICAgaWYgKGVyciA8IGJlc3RFcnIpIHtcbiAgICAgIGJlc3RFcnIgPSBlcnI7XG4gICAgICBiZXN0ID0gbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJlc3Q7XG59XG4iXX0=