@jax-data-science/sci-image-visualizer 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +10 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +1 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +1 -1
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +11 -7
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +20 -3
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +28 -5
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +9 -2
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +5 -2
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +81 -1
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +115 -4
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +15 -3
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +18 -2
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +9 -1
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +18 -7
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +38 -8
- package/esm2022/lib/implementations/osd/osd-tile-loading.mjs +71 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +1 -1
- package/esm2022/lib/implementations/osd/slice-cache.mjs +35 -6
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +1 -1
- package/esm2022/lib/models/class-preset.mjs +1 -1
- package/esm2022/lib/models/polygon-factory.mjs +17 -1
- package/esm2022/lib/models/region-geojson.mjs +44 -6
- package/esm2022/lib/models/region.mjs +1 -1
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
- package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +77 -13
- package/esm2022/lib/region-editor/region-editor.component.mjs +670 -42
- package/esm2022/lib/region-editor/region-metrics.mjs +20 -2
- package/esm2022/lib/region-editor/region-persistence.service.mjs +44 -10
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +24 -8
- package/esm2022/lib/region-import/label-classes.mjs +149 -0
- package/esm2022/lib/region-import/label-volume.mjs +194 -0
- package/esm2022/lib/region-import/region-import.mjs +71 -0
- package/esm2022/lib/region-overlay/region-geometry.mjs +3 -3
- package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
- package/esm2022/lib/region-overlay/region-style.mjs +97 -0
- package/esm2022/lib/region-source/http-region-source.mjs +104 -0
- package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
- package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
- package/esm2022/lib/region-source/region-source.mjs +67 -0
- package/esm2022/lib/region-source/region-tiles.mjs +708 -0
- package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
- package/esm2022/lib/routing-visualizer.service.mjs +510 -22
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/store/class-color.util.mjs +10 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-scope-cache.mjs +5 -1
- package/esm2022/lib/store/region-source-scope.mjs +186 -0
- package/esm2022/lib/store/region-store.service.mjs +774 -12
- package/esm2022/lib/store/visualizer-store.service.mjs +33 -6
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +8 -2
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +55 -15
- package/esm2022/lib/toolbar/toolbar.component.mjs +19 -5
- package/esm2022/lib/visualizer/region-load.mjs +67 -4
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +155 -7
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs} +9851 -2904
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs} +4 -4
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +3 -3
- package/fesm2022/region-source.worker.js +1067 -0
- package/index.d.ts +12 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +24 -0
- package/lib/contracts/region-editor-api.contract.d.ts +102 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/visualizer.contract.d.ts +10 -0
- package/lib/contracts/viz-config.d.ts +8 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -2
- package/lib/implementations/napari-js/napari-loading-state.d.ts +8 -1
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +6 -1
- package/lib/implementations/napari-js/napari-scene.d.ts +33 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +3 -1
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +48 -0
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +45 -1
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +2 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +2 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +4 -3
- package/lib/implementations/osd/osd-region-overlay.d.ts +10 -3
- package/lib/implementations/osd/osd-tile-loading.d.ts +43 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +14 -0
- package/lib/implementations/osd/slice-cache.d.ts +13 -3
- package/lib/implementations/tile-server/tile-protocol.d.ts +3 -0
- package/lib/models/class-preset.d.ts +7 -0
- package/lib/models/polygon-factory.d.ts +5 -0
- package/lib/models/region-geojson.d.ts +40 -0
- package/lib/models/region.d.ts +19 -0
- package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
- package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +36 -6
- package/lib/region-editor/region-editor.component.d.ts +159 -17
- package/lib/region-editor/region-metrics.d.ts +8 -0
- package/lib/region-editor/region-persistence.service.d.ts +17 -5
- package/lib/region-editor/region-table/region-table.component.d.ts +10 -4
- package/lib/region-import/label-classes.d.ts +39 -0
- package/lib/region-import/label-volume.d.ts +31 -0
- package/lib/region-import/region-import.d.ts +46 -0
- package/lib/region-overlay/region-geometry.d.ts +4 -3
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-source/http-region-source.d.ts +45 -0
- package/lib/region-source/region-source-ops.d.ts +89 -0
- package/lib/region-source/region-source-worker.d.ts +7 -0
- package/lib/region-source/region-source.d.ts +82 -0
- package/lib/region-source/region-tiles.d.ts +289 -0
- package/lib/region-source/worker-region-source.d.ts +65 -0
- package/lib/routing-visualizer.service.d.ts +168 -1
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/store/class-color.util.d.ts +6 -3
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-scope-cache.d.ts +2 -0
- package/lib/store/region-source-scope.d.ts +74 -0
- package/lib/store/region-store.service.d.ts +216 -2
- package/lib/store/visualizer-store.service.d.ts +10 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +3 -1
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +20 -9
- package/lib/toolbar/toolbar.component.d.ts +9 -2
- package/lib/visualizer/region-load.d.ts +23 -4
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +40 -0
- package/package.json +2 -2
- package/src/lib/assets/slice.svg +23 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLXZpZXdlci1saWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvb3NkL29zZC12aWV3ZXItbGlrZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBPcGVuU2VhZHJhZ29uIGZyb20gJ29wZW5zZWFkcmFnb24nO1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBhbiBPcGVuU2VhZHJhZ29uIGBWaWV3ZXJgIHRoYXQgdGhlIE9TRCBoZWxwZXJzIChvc2QtY29vcmRzLCB0aGVcbiAqIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGUgc2NhbGUgYmFyLCB0aGUgcmVnaW9uIG92ZXJsYXkgYW5kIHRoZSBzbGljZSBjYWNoZSlcbiAqIGFjdHVhbGx5IHVzZSDigJQgYW5kIG5vdGhpbmcgbW9yZSAoT1NELVBMT1RMWS0yNykuXG4gKlxuICogVGhlIHJlYWwgYE9wZW5TZWFkcmFnb24uVmlld2VyYCBpcyBhc3NpZ25hYmxlIHRvIGl0IGFzIGlzLCBzbyB0aGUgc2VydmljZVxuICogcGFzc2VzIGl0cyB2aWV3ZXIgc3RyYWlnaHQgdGhyb3VnaDsgdGhlIHNwZWNzIGJ1aWxkIGEgc21hbGwgZmFrZSAoc2VlXG4gKiBgdGVzdGluZy9mYWtlLW9zZC12aWV3ZXIudHNgKSBpbnN0ZWFkIG9mIGNhc3RpbmcgYSBwYXJ0aWFsIG9iamVjdC4gUG9pbnRzIGFuZFxuICogcmVjdGFuZ2xlcyBhcmUgc3RydWN0dXJhbCB3aGVyZSB0aGUgaGVscGVycyBvbmx5IHJlYWQgYHhgL2B5YC9gd2lkdGhgL2BoZWlnaHRgO1xuICogYE9wZW5TZWFkcmFnb24uUmVjdGAgaXMga2VwdCBvbmx5IHdoZXJlIHRoZSByZXN1bHQgZ29lcyBiYWNrIGludG8gT1NEXG4gKiAoYGltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZWAg4oaSIGB2aWV3cG9ydC5maXRCb3VuZHNgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPc2RWaWV3ZXJMaWtlIHtcbiAgLyoqIFRoZSBlbGVtZW50IE9TRCBkcmF3cyBpbnRvOyBvdmVybGF5cyAoc2NhbGUgYmFyLCByZWdpb24gU1ZHKSBhcmUgYXBwZW5kZWRcbiAgICogIGhlcmUgYW5kIGl0cyBjbGllbnQgcmVjdCBhbmNob3JzIGNsaWVudOKGlGVsZW1lbnQgY29udmVyc2lvbnMuICovXG4gIGNhbnZhczogSFRNTEVsZW1lbnQ7XG4gIC8qKiBUaGUgdmlld2VyJ3Mgcm9vdCBlbGVtZW50IChhbiBhbmNlc3RvciBvZiB0aGUgY2FudmFzIGFuZCBvZiB0aGUgdG9vbFxuICAgKiAgb3ZlcmxheXMpIOKAlCB0aGUgd2hlZWwtem9vbSBsaXN0ZW5lciBpcyBib3VuZCBoZXJlLiAqL1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgdmlld3BvcnQ6IHtcbiAgICB2aWV3ZXJFbGVtZW50VG9WaWV3cG9ydENvb3JkaW5hdGVzKHA6IE9zZFhZKTogT3NkWFk7XG4gICAgdmlld3BvcnRUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICAgIC8qKiBJbWFnZSBjb252ZXJzaW9ucyBvbiB0aGUgdmlld3BvcnQg4oCUIGFtYmlndW91cyBvbmNlIHRoZSB3b3JsZCBob2xkc1xuICAgICAqICBzZXZlcmFsIGltYWdlczsgdXNlZCBvbmx5IGFzIHRoZSBlbXB0eS13b3JsZCBmYWxsYmFjay4gKi9cbiAgICB2aWV3ZXJFbGVtZW50VG9JbWFnZUNvb3JkaW5hdGVzKHA6IE9zZFhZKTogT3NkWFk7XG4gICAgaW1hZ2VUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICAgIGltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZShyOiBPcGVuU2VhZHJhZ29uLlJlY3QpOiBPcGVuU2VhZHJhZ29uLlJlY3Q7XG4gICAgdmlld3BvcnRUb0ltYWdlUmVjdGFuZ2xlKHI6IE9zZFJlY3RMaWtlKTogT3NkUmVjdExpa2U7XG4gICAgLyoqIFZpZXdlci1lbGVtZW50IHBpeGVsIOKGkiB2aWV3cG9ydCBwb2ludCAodGhlIHdoZWVsLXpvb20gYW5jaG9yKS4gKi9cbiAgICBwb2ludEZyb21QaXhlbChwOiBPc2RYWSk6IE9zZFhZO1xuICAgIHpvb21CeShmYWN0b3I6IG51bWJlciwgcmVmUG9pbnQ/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLXZpZXdlci1saWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvb3NkL29zZC12aWV3ZXItbGlrZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBPcGVuU2VhZHJhZ29uIGZyb20gJ29wZW5zZWFkcmFnb24nO1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBhbiBPcGVuU2VhZHJhZ29uIGBWaWV3ZXJgIHRoYXQgdGhlIE9TRCBoZWxwZXJzIChvc2QtY29vcmRzLCB0aGVcbiAqIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGUgc2NhbGUgYmFyLCB0aGUgcmVnaW9uIG92ZXJsYXkgYW5kIHRoZSBzbGljZSBjYWNoZSlcbiAqIGFjdHVhbGx5IHVzZSDigJQgYW5kIG5vdGhpbmcgbW9yZSAoT1NELVBMT1RMWS0yNykuXG4gKlxuICogVGhlIHJlYWwgYE9wZW5TZWFkcmFnb24uVmlld2VyYCBpcyBhc3NpZ25hYmxlIHRvIGl0IGFzIGlzLCBzbyB0aGUgc2VydmljZVxuICogcGFzc2VzIGl0cyB2aWV3ZXIgc3RyYWlnaHQgdGhyb3VnaDsgdGhlIHNwZWNzIGJ1aWxkIGEgc21hbGwgZmFrZSAoc2VlXG4gKiBgdGVzdGluZy9mYWtlLW9zZC12aWV3ZXIudHNgKSBpbnN0ZWFkIG9mIGNhc3RpbmcgYSBwYXJ0aWFsIG9iamVjdC4gUG9pbnRzIGFuZFxuICogcmVjdGFuZ2xlcyBhcmUgc3RydWN0dXJhbCB3aGVyZSB0aGUgaGVscGVycyBvbmx5IHJlYWQgYHhgL2B5YC9gd2lkdGhgL2BoZWlnaHRgO1xuICogYE9wZW5TZWFkcmFnb24uUmVjdGAgaXMga2VwdCBvbmx5IHdoZXJlIHRoZSByZXN1bHQgZ29lcyBiYWNrIGludG8gT1NEXG4gKiAoYGltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZWAg4oaSIGB2aWV3cG9ydC5maXRCb3VuZHNgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPc2RWaWV3ZXJMaWtlIHtcbiAgLyoqIFRoZSBlbGVtZW50IE9TRCBkcmF3cyBpbnRvOyBvdmVybGF5cyAoc2NhbGUgYmFyLCByZWdpb24gU1ZHKSBhcmUgYXBwZW5kZWRcbiAgICogIGhlcmUgYW5kIGl0cyBjbGllbnQgcmVjdCBhbmNob3JzIGNsaWVudOKGlGVsZW1lbnQgY29udmVyc2lvbnMuICovXG4gIGNhbnZhczogSFRNTEVsZW1lbnQ7XG4gIC8qKiBUaGUgdmlld2VyJ3Mgcm9vdCBlbGVtZW50IChhbiBhbmNlc3RvciBvZiB0aGUgY2FudmFzIGFuZCBvZiB0aGUgdG9vbFxuICAgKiAgb3ZlcmxheXMpIOKAlCB0aGUgd2hlZWwtem9vbSBsaXN0ZW5lciBpcyBib3VuZCBoZXJlLiAqL1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgdmlld3BvcnQ6IHtcbiAgICB2aWV3ZXJFbGVtZW50VG9WaWV3cG9ydENvb3JkaW5hdGVzKHA6IE9zZFhZKTogT3NkWFk7XG4gICAgdmlld3BvcnRUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICAgIC8qKiBJbWFnZSBjb252ZXJzaW9ucyBvbiB0aGUgdmlld3BvcnQg4oCUIGFtYmlndW91cyBvbmNlIHRoZSB3b3JsZCBob2xkc1xuICAgICAqICBzZXZlcmFsIGltYWdlczsgdXNlZCBvbmx5IGFzIHRoZSBlbXB0eS13b3JsZCBmYWxsYmFjay4gKi9cbiAgICB2aWV3ZXJFbGVtZW50VG9JbWFnZUNvb3JkaW5hdGVzKHA6IE9zZFhZKTogT3NkWFk7XG4gICAgaW1hZ2VUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICAgIGltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZShyOiBPcGVuU2VhZHJhZ29uLlJlY3QpOiBPcGVuU2VhZHJhZ29uLlJlY3Q7XG4gICAgdmlld3BvcnRUb0ltYWdlUmVjdGFuZ2xlKHI6IE9zZFJlY3RMaWtlKTogT3NkUmVjdExpa2U7XG4gICAgLyoqIFZpZXdlci1lbGVtZW50IHBpeGVsIOKGkiB2aWV3cG9ydCBwb2ludCAodGhlIHdoZWVsLXpvb20gYW5jaG9yKS4gKi9cbiAgICBwb2ludEZyb21QaXhlbChwOiBPc2RYWSk6IE9zZFhZO1xuICAgIHpvb21CeShmYWN0b3I6IG51bWJlciwgcmVmUG9pbnQ/OiBPc2RYWSk6IHVua25vd247XG4gICAgYXBwbHlDb25zdHJhaW50cyhpbW1lZGlhdGVseT86IGJvb2xlYW4pOiB1bmtub3duO1xuICB9O1xuICB3b3JsZDoge1xuICAgIGdldEl0ZW1Db3VudCgpOiBudW1iZXI7XG4gICAgLyoqIGB1bmRlZmluZWRgIHBhc3QgdGhlIGVuZCBvZiB0aGUgd29ybGQgKE9TRCByZXR1cm5zIGl0IGF0IHJ1bnRpbWUpLiAqL1xuICAgIGdldEl0ZW1BdChpbmRleDogbnVtYmVyKTogT3NkVGlsZWRJbWFnZUxpa2UgfCB1bmRlZmluZWQ7XG4gICAgLyoqIC0xIHdoZW4gdGhlIGl0ZW0gaXMgbm8gbG9uZ2VyIGluIHRoZSB3b3JsZCAoZXZpY3RlZCAvIHJlbW92ZWQpLiAqL1xuICAgIGdldEluZGV4T2ZJdGVtKGl0ZW06IE9zZFRpbGVkSW1hZ2VMaWtlKTogbnVtYmVyO1xuICAgIHJlbW92ZUl0ZW0oaXRlbTogT3NkVGlsZWRJbWFnZUxpa2UpOiB2b2lkO1xuICB9O1xuICAvKiogUXVldWUgYSB0aWxlZCBpbWFnZSBpbnRvIHRoZSB3b3JsZDsgYHN1Y2Nlc3NgIGZpcmVzIG9uY2UgaXQgaXMgYWRkZWQgKG5vdFxuICAgKiAgb25jZSBpdHMgdGlsZXMgaGF2ZSBsb2FkZWQpLiAqL1xuICBhZGRUaWxlZEltYWdlKG9wdGlvbnM6IE9zZEFkZFRpbGVkSW1hZ2VPcHRpb25zKTogdm9pZDtcbiAgYWRkSGFuZGxlcihldmVudDogT3NkVmlld2VyRXZlbnROYW1lLCBoYW5kbGVyOiAoKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgcmVtb3ZlSGFuZGxlcihldmVudDogT3NkVmlld2VyRXZlbnROYW1lLCBoYW5kbGVyOiAoKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgLyoqIE9TRCdzIG93biBwYW4vem9vbSAoZHJhZyArIHdoZWVsKTsgcmVnaW9uIHRvb2xzIHN3aXRjaCBpdCBvZmYuICovXG4gIHNldE1vdXNlTmF2RW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdW5rbm93bjtcbiAgaXNNb3VzZU5hdkVuYWJsZWQoKTogYm9vbGVhbjtcbiAgLyoqIE9TRCdzIHRpbGUgcmVxdWVzdCBxdWV1ZTogdGhlIGpvYnMgbm90IHN0YXJ0ZWQgeWV0IChzZWUgT3NkUXVldWVkVGlsZUpvYikuICovXG4gIGltYWdlTG9hZGVyPzogeyBqb2JRdWV1ZT86IHVua25vd25bXSB9O1xufVxuXG4vKiogQSB0aWxlIHJlcXVlc3Qgd2FpdGluZyBpbiBPU0QncyBxdWV1ZTogYGFib3J0YCAoYmVmb3JlIGl0IHN0YXJ0cykgb25seSBtYXJrcyB0aGUgdGlsZSBhc1xuICogIG5vdCBsb2FkaW5nLCBzbyBpdCBpcyByZXF1ZXN0ZWQgYWdhaW4gd2hlbiBpdCBpcyBuZWVkZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIE9zZFF1ZXVlZFRpbGVKb2Ige1xuICB0aWxlPzogeyB0aWxlZEltYWdlPzogdW5rbm93biB9O1xuICBhYm9ydD86ICgpID0+IHZvaWQ7XG59XG5cbi8qKiBBIHBvaW50IGluIGFueSBPU0Qgc3BhY2UgKHZpZXdlci1lbGVtZW50IHB4LCB2aWV3cG9ydCB1bml0cyBvciBpbWFnZSBweCDigJRcbiAqICB0aGUgbWV0aG9kIGl0IGNvbWVzIGZyb20gc2F5cyB3aGljaCkuICovXG5leHBvcnQgaW50ZXJmYWNlIE9zZFhZIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG5cbi8qKiBBbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBpbiB0aGUgc3BhY2Ugb2YgdGhlIG1ldGhvZCB0aGF0IHByb2R1Y2VkIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPc2RSZWN0TGlrZSB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBtZW1iZXJzIG9mIGFuIE9TRCBgVGlsZWRJbWFnZWAgKG9uZSB3b3JsZCBpdGVtOiBhbiBpbWFnZSwgYSBzdGFjayBzbGljZVxuICogIG9yIG9uZSBjaGFubmVsIGxheWVyKSB0aGUgaGVscGVycyB1c2UuICovXG5leHBvcnQgaW50ZXJmYWNlIE9zZFRpbGVkSW1hZ2VMaWtlIHtcbiAgdmlld3BvcnRUb0ltYWdlQ29vcmRpbmF0ZXMocDogT3NkWFkpOiBPc2RYWTtcbiAgaW1hZ2VUb1ZpZXdwb3J0Q29vcmRpbmF0ZXMocDogT3NkWFkpOiBPc2RYWTtcbiAgaW1hZ2VUb1ZpZXdwb3J0UmVjdGFuZ2xlKHI6IE9wZW5TZWFkcmFnb24uUmVjdCk6IE9wZW5TZWFkcmFnb24uUmVjdDtcbiAgdmlld3BvcnRUb0ltYWdlUmVjdGFuZ2xlKHI6IE9zZFJlY3RMaWtlKTogT3NkUmVjdExpa2U7XG4gIHNldE9wYWNpdHkob3BhY2l0eTogbnVtYmVyKTogdm9pZDtcbiAgLyoqIExvYWQgdGlsZXMgZXZlbiB3aGlsZSBoaWRkZW4gKG9wYWNpdHkgMCk7IHdpdGhvdXQgaXQgYSBoaWRkZW4gaXRlbSBsb2FkcyBub3RoaW5nLiAqL1xuICBzZXRQcmVsb2FkPyhwcmVsb2FkOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIEZhbHNlIHdoaWxlIGFueSBvZiB0aGUgaW1hZ2UncyB0aWxlcyBhcmUgc3RpbGwgbG9hZGluZy4gKi9cbiAgZ2V0RnVsbHlMb2FkZWQoKTogYm9vbGVhbjtcbiAgLyoqIFJlLXJ1biB0aGUgdGlsZSBwaXBlbGluZSAocmVzdG9yZSArIHJlLXByb2Nlc3MpIGZvciB0aGlzIGltYWdlJ3MgdGlsZXM7XG4gICAqICB0aWxlcyBhbHJlYWR5IHN0YW1wZWQgYXQgYD49IHRTdGFtcGAgYXJlIHNraXBwZWQuIE9wdGlvbmFsOiB0aGUgc2xpY2VcbiAgICogIGNhY2hlIGZlYXR1cmUtdGVzdHMgaXQuICovXG4gIHJlcXVlc3RJbnZhbGlkYXRlPyhyZXN0b3JlVGlsZXM/OiBib29sZWFuLCB2aWV3cG9ydE9ubHk/OiBib29sZWFuLCB0U3RhbXA/OiBudW1iZXIpOiB1bmtub3duO1xufVxuXG4vKiogVGhlIGBhZGRUaWxlZEltYWdlYCBvcHRpb25zIHRoZSBzbGljZSBjYWNoZSBwYXNzZXMuIEltYWdlIHBsYWNlbWVudCBpcyBpblxuICogIHZpZXdwb3J0IHVuaXRzIChgd2lkdGg6IDFgID0gdGhlIHByaW1hcnkgaW1hZ2UncyBub3JtYWxpemVkIHdpZHRoKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3NkQWRkVGlsZWRJbWFnZU9wdGlvbnMge1xuICB0aWxlU291cmNlOiBzdHJpbmcgfCBvYmplY3Q7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBvcGFjaXR5PzogbnVtYmVyO1xuICAvKiogTG9hZCB0aWxlcyBldmVuIHdoaWxlIGhpZGRlbiAob3BhY2l0eSAwKS4gKi9cbiAgcHJlbG9hZD86IGJvb2xlYW47XG4gIC8qKiBDYW52YXMgY29tcG9zaXRlIG9wZXJhdGlvbiwgZS5nLiBgJ2xpZ2h0ZXInYCBmb3IgYWRkaXRpdmUgY2hhbm5lbHMuICovXG4gIGNvbXBvc2l0ZU9wZXJhdGlvbj86IHN0cmluZztcbiAgLyoqIEZpcmVzIG9uY2UgdGhlIGltYWdlIGlzIGluIHRoZSB3b3JsZC4gT1NEIHR5cGVzIHRoZSBwYXlsb2FkIGFzIGEgRE9NXG4gICAqICBgRXZlbnRgOyBhdCBydW50aW1lIGl0IGNhcnJpZXMgdGhlIGFkZGVkIGBpdGVtYC4gKi9cbiAgc3VjY2Vzcz8oZXZlbnQ6IEV2ZW50ICYgeyBpdGVtPzogT3NkVGlsZWRJbWFnZUxpa2UgfSk6IHZvaWQ7XG4gIGVycm9yPygpOiB2b2lkO1xufVxuXG4vKiogVGhlIHZpZXdlciBldmVudHMgdGhlIGhlbHBlcnMgc3Vic2NyaWJlIHRvLiAqL1xuZXhwb3J0IHR5cGUgT3NkVmlld2VyRXZlbnROYW1lID0gJ3VwZGF0ZS12aWV3cG9ydCcgfCAnYW5pbWF0aW9uJyB8ICdyZXNpemUnIHwgJ3JvdGF0ZSc7XG4iXX0=
|
|
@@ -185,7 +185,10 @@ export class SliceCache {
|
|
|
185
185
|
/**
|
|
186
186
|
* Add slice z's channel group: one additively-composited ('lighter' = Fiji
|
|
187
187
|
* "Composite") TiledImage per channel, hidden (opacity 0) until revealed.
|
|
188
|
-
*
|
|
188
|
+
* The visible channels' are preloaded, so the background loader can pre-fill
|
|
189
|
+
* every slice; a hidden channel's loads nothing until it is shown (a 22-channel
|
|
190
|
+
* plate fetched and decoded every channel's tiles, overflowing the tile cache:
|
|
191
|
+
* tiles evicted mid-conversion failed to decode).
|
|
189
192
|
* Cached so a revisit is an instant opacity toggle — no re-fetch, no
|
|
190
193
|
* white-flicker. Mirrors addSlice for the composite path.
|
|
191
194
|
*/
|
|
@@ -226,7 +229,7 @@ export class SliceCache {
|
|
|
226
229
|
width: 1,
|
|
227
230
|
opacity: 0, // revealed by revealChannelSlice once the group is in
|
|
228
231
|
compositeOperation: 'lighter',
|
|
229
|
-
preload:
|
|
232
|
+
preload: this.host.channelVisible(c),
|
|
230
233
|
success: (e) => {
|
|
231
234
|
const item = e?.item;
|
|
232
235
|
if (token !== this.sliceLoadToken) {
|
|
@@ -249,17 +252,37 @@ export class SliceCache {
|
|
|
249
252
|
}
|
|
250
253
|
}
|
|
251
254
|
/** Reveal slice z's channel group (each visible channel → opacity 1) and
|
|
252
|
-
* hide every other cached slice's group. Instant; no fetch/decode.
|
|
255
|
+
* hide every other cached slice's group. Instant; no fetch/decode. Only the
|
|
256
|
+
* visible channels keep loading (preload): a hidden channel's tiles are not
|
|
257
|
+
* fetched or decoded until it is shown. */
|
|
253
258
|
revealChannelSlice(z) {
|
|
259
|
+
const hidden = new Set();
|
|
254
260
|
for (const [zz, group] of this.channelSliceItems) {
|
|
255
261
|
const active = zz === z;
|
|
256
262
|
group.forEach((it, c) => {
|
|
257
263
|
if (!it)
|
|
258
264
|
return;
|
|
259
265
|
const visible = this.host.channelVisible(c);
|
|
266
|
+
if (!visible)
|
|
267
|
+
hidden.add(it);
|
|
268
|
+
quiet(() => it.setPreload?.(visible));
|
|
260
269
|
quiet(() => it.setOpacity(active && visible ? 1 : 0));
|
|
261
270
|
});
|
|
262
271
|
}
|
|
272
|
+
this.dropQueuedTiles(hidden);
|
|
273
|
+
}
|
|
274
|
+
/** Drop the tile requests still waiting in OSD's queue for `items` (channels just hidden), so
|
|
275
|
+
* the visible channels' tiles are not stuck behind them. A request already sent completes. */
|
|
276
|
+
dropQueuedTiles(items) {
|
|
277
|
+
const loader = this.host.viewer()?.imageLoader;
|
|
278
|
+
if (!items.size || !Array.isArray(loader?.jobQueue))
|
|
279
|
+
return;
|
|
280
|
+
loader.jobQueue = loader.jobQueue.filter((job) => {
|
|
281
|
+
if (!items.has(job?.tile?.tiledImage))
|
|
282
|
+
return true;
|
|
283
|
+
quiet(() => job.abort?.());
|
|
284
|
+
return false;
|
|
285
|
+
});
|
|
263
286
|
}
|
|
264
287
|
/** Show the given composite slice (opacity 1) and hide all other cached slices. */
|
|
265
288
|
showOnlySlice(z) {
|
|
@@ -423,12 +446,18 @@ export class SliceCache {
|
|
|
423
446
|
const it = this.sliceItems.get(z);
|
|
424
447
|
return it ? [it] : [];
|
|
425
448
|
}
|
|
426
|
-
/** Whether slice z's tiles are still streaming (any cached image not fully loaded).
|
|
449
|
+
/** Whether slice z's tiles are still streaming (any cached image not fully loaded). A hidden
|
|
450
|
+
* channel loads nothing, so it never becomes fully loaded: only the visible channels count, or
|
|
451
|
+
* the background loader would wait on it forever. */
|
|
427
452
|
sliceTilesLoading(z) {
|
|
428
453
|
const g = this.sliceGroup(z);
|
|
429
454
|
if (!g.length)
|
|
430
455
|
return false;
|
|
431
|
-
|
|
456
|
+
const multi = this.host.isMultiChannel();
|
|
457
|
+
return g.some((it, c) => it &&
|
|
458
|
+
(!multi || this.host.channelVisible(c)) &&
|
|
459
|
+
typeof it.getFullyLoaded === 'function' &&
|
|
460
|
+
!it.getFullyLoaded());
|
|
432
461
|
}
|
|
433
462
|
/** Remove slice z's cached image(s) from the world and the active cache. */
|
|
434
463
|
removeCachedSlice(z) {
|
|
@@ -490,4 +519,4 @@ export class SliceCache {
|
|
|
490
519
|
this.bgAttempted.clear();
|
|
491
520
|
}
|
|
492
521
|
}
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9vc2Qvc2xpY2UtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUEwQ3ZDLE1BQU0sT0FBTyxVQUFVO0lBdUNyQixZQUFvQixJQUFvQjtRQUFwQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQXRDeEMscUVBQXFFO1FBQzdELGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztRQUMxRDs7aURBRXlDO1FBQ2pDLHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO1FBQ3BGOzhFQUNzRTtRQUM5RCxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDeEMsdURBQXVEO1FBQy9DLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDaEMsMEVBQTBFO1FBQ2xFLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMxQztrRkFDMEU7UUFDbEUsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDM0I7OzZEQUVxRDtRQUM3QyxlQUFVLEdBQWtCLElBQUksQ0FBQztRQUN6Qzt1REFDK0M7UUFDdkMsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDM0IsZ0ZBQWdGO1FBQ3hFLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN4Qyx1RUFBdUU7UUFDL0Qsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDNUIsZ0ZBQWdGO1FBQy9ELDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUM1Qzs7O3lCQUdpQjtRQUNBLDJCQUFzQixHQUFHLEdBQUcsQ0FBQztRQUM5Qyw0REFBNEQ7UUFDcEQsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQXlDLElBQUksQ0FBQztJQUV4QixDQUFDO0lBRTVDLHlFQUF5RTtJQUV6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RUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPU0QsIHF1aWV0IH0gZnJvbSAnLi9vc2QtbGliJztcbmltcG9ydCB7IE9zZFRpbGVkSW1hZ2VMaWtlLCBPc2RWaWV3ZXJMaWtlIH0gZnJvbSAnLi9vc2Qtdmlld2VyLWxpa2UnO1xuXG4vKipcbiAqIFN0YWNrLXNsaWNlIGNhY2hlIGZvciB0aGUgT3BlblNlYWRyYWdvbiBiYWNrZW5kIChyZWZhY3RvcmluZyBwbGFuLCBTdGVwIDMg4oCUXG4gKiBhIHB1cmUgbW92ZSBvZiB0aGUgY2FjaGUgY2x1c3RlciBvdXQgb2YgdGhlIHZpc3VhbGl6ZXIgc2VydmljZSkuXG4gKlxuICogU2NydWJiaW5nIHRoZSB6LXNsaWRlciB1c2VkIHRvIHZpZXdlci5vcGVuKCkgYSBmcmVzaCB0aWxlIHNvdXJjZSBwZXIgc2xpY2UsXG4gKiB3aGljaCBkZXN0cm95cyB0aGUgY3VycmVudCB0aWxlZCBpbWFnZSAoYW5kIGl0cyBkZWNvZGVkK3JlY29sb3JlZCB0aWxlcyksIHNvXG4gKiByZXZpc2l0aW5nIGEgc2xpY2UgcmUtZmV0Y2hlZCBldmVyeXRoaW5nLiBJbnN0ZWFkIHdlIGtlZXAgZWFjaCB2aXNpdGVkIHNsaWNlXG4gKiBhcyBpdHMgb3duIHRpbGVkIGltYWdlIGluIHRoZSB3b3JsZCBhbmQganVzdCB0b2dnbGUgb3BhY2l0eSDigJQgYSByZXZpc2l0ZWRcbiAqIHNsaWNlIGlzIGluc3RhbnQgKG5vIG5ldHdvcmssIG5vIHJlLWRlY29kZSwgbm8gcmUtcmVjb2xvcikuIEJvdW5kZWQgYnkgYW5cbiAqIExSVSBzbyBkZWVwIHN0YWNrcyBkb24ndCBncm93IHdpdGhvdXQgbGltaXQuIE11bHRpY2hhbm5lbCBzbGljZXMgY2FjaGUgb25lXG4gKiBUaWxlZEltYWdlIHBlciBjaGFubmVsIChhZGRpdGl2ZWx5IGNvbXBvc2l0ZWQpOyBjb21wb3NpdGUgc2xpY2VzIGNhY2hlIG9uZS5cbiAqIEEgYmFja2dyb3VuZCBsb2FkZXIgcHJlLWZpbGxzIHRoZSByZXN0IG9mIHRoZSBzdGFjaywgb25lIHNsaWNlIGF0IGEgdGltZSxcbiAqIHlpZWxkaW5nIHRvIHRoZSB2aXNpYmxlIHNsaWNlIHNvIG9uLXNjcmVlbiB0aWxlcyBhbHdheXMgd2luIHRoZSBjb25uZWN0aW9uLlxuICovXG5cbi8qKiBXaGF0IHRoZSBjYWNoZSBuZWVkcyBmcm9tIHRoZSB2aXN1YWxpemVyIHNlcnZpY2UuIEFsbCBhY2Nlc3NvcnMgYXJlIGxpdmVcbiAqICAoY2FsbGVkIGF0IHVzZSB0aW1lLCBuZXZlciBjYXB0dXJlZCkgc28gdGhlIGNhY2hlIGFsd2F5cyBzZWVzIHRoZSBjdXJyZW50XG4gKiAgdmlld2VyL2Rlc2NyaXB0b3IveiDigJQgbWF0Y2hpbmcgdGhlIGZpZWxkIHJlYWRzIGl0IHJlcGxhY2VkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGljZUNhY2hlSG9zdCB7XG4gIC8qKiBUaGUgbW91bnRlZCB2aWV3ZXIsIG9yIG51bGwuICovXG4gIHZpZXdlcigpOiBPc2RWaWV3ZXJMaWtlIHwgbnVsbDtcbiAgLyoqIFRydWUgd2hlbiBhIHZpZXdlciwgZGVzY3JpcHRvciBhbmQgaW5mb0I2NCBhcmUgYWxsIHByZXNlbnQuICovXG4gIGhhc0ltYWdlKCk6IGJvb2xlYW47XG4gIC8qKiBTdGFjayBkZXB0aCAoZGVzY3JpcHRvci56LCAxIGZvciBzaW5nbGUgaW1hZ2VzKS4gKi9cbiAgc2xpY2VDb3VudCgpOiBudW1iZXI7XG4gIC8qKiBUaGUgY3VycmVudGx5IGRpc3BsYXllZCB6LXNsaWNlLiAqL1xuICBjdXJyZW50WigpOiBudW1iZXI7XG4gIC8qKiBQZXItY2hhbm5lbCByZW5kZXJpbmcgKG11bHRpY2hhbm5lbCBmbHVvcmVzY2VuY2UpIHZzIGNvbXBvc2l0ZS4gKi9cbiAgaXNNdWx0aUNoYW5uZWwoKTogYm9vbGVhbjtcbiAgLyoqIENoYW5uZWwgY291bnQgZm9yIGEgbXVsdGljaGFubmVsIGdyb3VwIGFkZC4gKi9cbiAgY2hhbm5lbENvdW50KCk6IG51bWJlcjtcbiAgLyoqIENoYW5uZWwgdmlzaWJpbGl0eSAoZHJpdmVzIGdyb3VwIHJldmVhbCBvcGFjaXR5KS4gKi9cbiAgY2hhbm5lbFZpc2libGUoYzogbnVtYmVyKTogYm9vbGVhbjtcbiAgLyoqIFRpbGUgc291cmNlIGZvciBzbGljZSB6IChvcHRpb25hbGx5IG9uZSBjaGFubmVsKS4gKi9cbiAgYnVpbGRUaWxlU291cmNlKHo6IG51bWJlciwgY2hhbm5lbD86IG51bWJlcik6IHN0cmluZyB8IG9iamVjdDtcbiAgLyoqIEEgY29tcG9zaXRlIHNsaWNlIGxhbmRlZCBpbiB0aGUgd29ybGQg4oCUIHRoZSBzZXJ2aWNlIHNhbXBsZXMgaXRzIHdpbmRvdy4gKi9cbiAgb25Db21wb3NpdGVTbGljZUFkZGVkKHo6IG51bWJlcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTbGljZUNhY2hlIHtcbiAgLyoqIHotc2xpY2Ug4oaSIGl0cyBUaWxlZEltYWdlIGluIHRoZSB2aWV3ZXIgd29ybGQgKGNvbXBvc2l0ZSBwYXRoKS4gKi9cbiAgcHJpdmF0ZSBzbGljZUl0ZW1zID0gbmV3IE1hcDxudW1iZXIsIE9zZFRpbGVkSW1hZ2VMaWtlPigpO1xuICAvKiogTXVsdGljaGFubmVsIHBlci1zbGljZSBjYWNoZTogeiDihpIgdGhlIE4gY2hhbm5lbCBUaWxlZEltYWdlcyBmb3IgdGhhdCBzbGljZVxuICAgKiAgKGFkZGl0aXZlbHkgY29tcG9zaXRlZCBieSBPU0Q7IGluZGV4ID0gY2hhbm5lbCkuIE9ubHkgdGhlIGFjdGl2ZSBzbGljZSdzXG4gICAqICB2aXNpYmxlIGNoYW5uZWxzIGhhdmUgb3BhY2l0eSA+IDAuICovXG4gIHByaXZhdGUgY2hhbm5lbFNsaWNlSXRlbXMgPSBuZXcgTWFwPG51bWJlciwgQXJyYXk8T3NkVGlsZWRJbWFnZUxpa2UgfCB1bmRlZmluZWQ+PigpO1xuICAvKiogQ2FjaGVkIG11bHRpY2hhbm5lbCBzbGljZXMgd2hvc2UgdGlsZXMgd2VyZSB0aW50ZWQgYmVmb3JlIHRoZSBsYXRlc3RcbiAgICogIGRpc3BsYXkgY2hhbmdlOyByZS10aW50ZWQgbGF6aWx5IHdoZW4gbmV4dCByZXZlYWxlZCBieSB6LXNjcnViLiAqL1xuICBwcml2YXRlIHN0YWxlU2xpY2VzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIC8qKiBNb3N0LXJlY2VudGx5LXNob3duIHogbGFzdDsgZHJpdmVzIExSVSBldmljdGlvbi4gKi9cbiAgcHJpdmF0ZSBzbGljZUxydTogbnVtYmVyW10gPSBbXTtcbiAgLyoqIHotc2xpY2VzIHdob3NlIHRpbGVkIGltYWdlIGlzIGJlaW5nIGFkZGVkIChkZWR1cGUgcmFwaWQgc2NydWJiaW5nKS4gKi9cbiAgcHJpdmF0ZSBzbGljZXNMb2FkaW5nID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIC8qKiBCdW1wZWQgd2hlbmV2ZXIgdGhlIGxvYWRlZCBpbWFnZSBjaGFuZ2VzOyBpbi1mbGlnaHQgYmFja2dyb3VuZCBzbGljZSBhZGRzXG4gICAqICBjYXB0dXJlZCB1bmRlciBhbiBvbGRlciB0b2tlbiBhcmUgZHJvcHBlZCAoY2FuY2VsbGVkIGltYWdlIHN3aXRjaCkuICovXG4gIHByaXZhdGUgc2xpY2VMb2FkVG9rZW4gPSAwO1xuICAvKiogVGhlIHNsaWNlIHRoZSBiYWNrZ3JvdW5kIGxvYWRlciBpcyBjdXJyZW50bHkgd2FpdGluZyBvbiAoaXRzIHRpbGVzIGFyZVxuICAgKiAgc3RpbGwgc3RyZWFtaW5nKTogYWRkVGlsZWRJbWFnZSAnc3VjY2VzcycgZmlyZXMgb24gYWRkLCBub3Qgb24gdGlsZSBsb2FkLFxuICAgKiAgc28gd2UgZ2F0ZSB0aGUgbmV4dCBzbGljZSBvbiBnZXRGdWxseUxvYWRlZCgpLiAqL1xuICBwcml2YXRlIGJnTG9hZGluZ1o6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAvKiogV2hlbiBiZ0xvYWRpbmdaIHN0YXJ0ZWQgbG9hZGluZyDigJQgYSBmYWxsYmFjayBzbyBhIHNsb3cvc3R1Y2sgc2xpY2UgY2FuJ3RcbiAgICogIHN0YWxsIHRoZSB3aG9sZSBiYWNrZ3JvdW5kIHBhc3MgZm9yZXZlci4gKi9cbiAgcHJpdmF0ZSBiZ0xvYWRpbmdTaW5jZSA9IDA7XG4gIC8qKiBTbGljZXMgdGhlIGJhY2tncm91bmQgbG9hZGVyIGhhcyBhbHJlYWR5IGF0dGVtcHRlZCAobm8gdGlnaHQgcmV0cnkgbG9vcCkuICovXG4gIHByaXZhdGUgYmdBdHRlbXB0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgLyoqIE1heCBjYWNoZWQgc2xpY2UgdGlsZWQgaW1hZ2VzIGtlcHQgcmVzaWRlbnQgYmVmb3JlIExSVSBldmljdGlvbi4gKi9cbiAgcHJpdmF0ZSBtYXhDYWNoZWRTbGljZXMgPSA4O1xuICAvKiogVXBwZXIgYm91bmQgb24gcmVzaWRlbnQgc2xpY2VzLCByZWdhcmRsZXNzIG9mIHN0YWNrIGRlcHRoIChtZW1vcnkgZ3VhcmQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9DQUNIRURfU0xJQ0VTX0NBUCA9IDY0O1xuICAvKiogRml0LXZpZXcgdGlsZSBidWRnZXQgYWJvdmUgd2hpY2ggYmFja2dyb3VuZCBwcmVsb2FkaW5nIGlzIHNraXBwZWQ6IGEgaHVnZVxuICAgKiAgbm8tcHlyYW1pZCBzdGFjayB3b3VsZCBwcmVsb2FkIGV2ZXJ5IHNsaWNlIGF0IGZ1bGwgcmVzb2x1dGlvbiBhbmRcbiAgICogIGZsb29kL3RpbWVvdXQuIE5vcm1hbCBzdGFja3Mgc3RheSBiZWxvdyBpdCBhbmQgS0VFUCB0aGUgZmxpY2tlci1mcmVlXG4gICAqICBwcmUtY2FjaGUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1BSRUZFVENIX0ZJVF9USUxFUyA9IDI1NjtcbiAgLyoqIFRydWUgb25seSBmb3Igc3RhY2tzIHRvbyBsYXJnZSB0byBiYWNrZ3JvdW5kLXByZWxvYWQuICovXG4gIHByaXZhdGUgc2tpcFNsaWNlUHJlZmV0Y2ggPSBmYWxzZTtcbiAgcHJpdmF0ZSBwcmVmZXRjaFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG9zdDogU2xpY2VDYWNoZUhvc3QpIHt9XG5cbiAgLy8g4pSA4pSAIGNvbmZpZ3VyYXRpb24gKHBlciBpbWFnZSwgZnJvbSBwbG90KCkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBTaXplIHRoZSBjYWNoZSBmb3IgdGhlIGxvYWRlZCBpbWFnZToga2VlcCB0aGUgd2hvbGUgc3RhY2sgcmVzaWRlbnRcbiAgICogIChjYXBwZWQpIHNvIHRoZSBiYWNrZ3JvdW5kIGxvYWRlciBmaWxscyBldmVyeSBzbGljZSB3aXRob3V0IGV2aWN0aW5nXG4gICAqICBpdHNlbGY7IHNraXAgcHJlbG9hZGluZyBlbnRpcmVseSB3aGVuIGV2ZW4gdGhlIGNvYXJzZXN0IGxldmVsJ3MgdGlsZVxuICAgKiAgZ3JpZCBpcyB0b28gbGFyZ2UgKGl0cyBzbGljZXMgb25seSBleGlzdCBhdCBmdWxsIHJlc29sdXRpb24pLiAqL1xuICBjb25maWd1cmUoc3RhY2tEZXB0aDogbnVtYmVyLCBjb2Fyc2VGaXRUaWxlczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5za2lwU2xpY2VQcmVmZXRjaCA9IGNvYXJzZUZpdFRpbGVzID4gdGhpcy5NQVhfUFJFRkVUQ0hfRklUX1RJTEVTO1xuICAgIHRoaXMubWF4Q2FjaGVkU2xpY2VzID0gc3RhY2tEZXB0aCA+IDEgPyBNYXRoLm1pbih0aGlzLk1BWF9DQUNIRURfU0xJQ0VTX0NBUCwgc3RhY2tEZXB0aCkgOiAxO1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgTFJVIGNhcCAodGhlIHZpZXdlciBzaXplcyBpdHMgdGlsZSBjYWNoZSBmcm9tIGl0KS4gKi9cbiAgbWF4U2xpY2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWF4Q2FjaGVkU2xpY2VzO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIHBlci1jaGFubmVsIGdyb3VwcyAob24gYSBmcmVzaCBwbG90KS4gKi9cbiAgY2xlYXJDaGFubmVsR3JvdXBzKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG92ZXIgdGhlIHNsaWNlIHRoZSB2aWV3ZXIganVzdCBvcGVuZWQgKHdvcmxkIGl0ZW0gMCkuIENvbXBvc2l0ZTogc2VlZFxuICAgKiB0aGUgY2FjaGUgd2l0aCBpdCwgc28gc2NydWJiaW5nIGJhY2sgdG8gaXQgbGF0ZXIgaXMgYW4gaW5zdGFudCBvcGFjaXR5XG4gICAqIHRvZ2dsZSwgbm90IGEgcmUtb3Blbi4gTXVsdGljaGFubmVsOiBkcm9wIHRoYXQgc2luZ2xlIChjaGFubmVsLTApIGltYWdlIGFuZFxuICAgKiBhZGQgdGhlIHNsaWNlJ3MgY2hhbm5lbCBncm91cCBpbnN0ZWFkOyB0aGUgYmFja2dyb3VuZCBsb2FkZXIgLyBMUlUgdGhlblxuICAgKiBwcmUtZmlsbHMgdGhlIG90aGVyIHNsaWNlcycgZ3JvdXBzIHNvIHotc2NydWIgaXMgZmxpY2tlci1mcmVlLlxuICAgKi9cbiAgYWRvcHRPcGVuZWRTbGljZSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3ZXIgPSB0aGlzLmhvc3Qudmlld2VyKCk7XG4gICAgaWYgKHRoaXMuaG9zdC5pc011bHRpQ2hhbm5lbCgpKSB7XG4gICAgICBxdWlldCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0MCA9IHZpZXdlcj8ud29ybGQ/LmdldEl0ZW1BdD8uKDApO1xuICAgICAgICBpZiAodmlld2VyICYmIGl0MCkgdmlld2VyLndvcmxkLnJlbW92ZUl0ZW0oaXQwKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRDaGFubmVsU2xpY2Uoeik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0SXRlbSA9IHZpZXdlcj8ud29ybGQ/LmdldEl0ZW1BdD8uKDApO1xuICAgIGlmIChmaXJzdEl0ZW0pIHRoaXMuc2VlZENvbXBvc2l0ZSh6LCBmaXJzdEl0ZW0pO1xuICB9XG5cbiAgLyoqIFNlZWQgdGhlIGNhY2hlIHdpdGggdGhlIGp1c3Qtb3BlbmVkIGNvbXBvc2l0ZSBzbGljZSAod29ybGQgaXRlbSAwKSwgc29cbiAgICogIHNjcnViYmluZyBiYWNrIHRvIGl0IGxhdGVyIGlzIGFuIGluc3RhbnQgb3BhY2l0eSB0b2dnbGUsIG5vdCBhIHJlLW9wZW4uICovXG4gIHNlZWRDb21wb3NpdGUoejogbnVtYmVyLCBpdGVtOiBPc2RUaWxlZEltYWdlTGlrZSk6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VJdGVtcy5zZXQoeiwgaXRlbSk7XG4gICAgdGhpcy50b3VjaFNsaWNlTHJ1KHopO1xuICB9XG5cbiAgLy8g4pSA4pSAIHNsaWNlIGRpc3BsYXkgKHNldFpJbmRleCdzIGNhY2hlIHdvcmspIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBTaG93IHNsaWNlIHo6IHJldmVhbCBpdCBpbnN0YW50bHkgd2hlbiBjYWNoZWQgKHJlLXRpbnRpbmcgYSBzdGFsZVxuICAgKiAgbXVsdGljaGFubmVsIGdyb3VwKSwgb3RoZXJ3aXNlIGFkZCBpdCBvbmNlLiBUaGUgY3VycmVudCBzbGljZSBzdGF5c1xuICAgKiAgdmlzaWJsZSB1bnRpbCB0aGUgbmV3IG9uZSBpcyBpbiDigJQgbm8gd2hpdGUtZmxpY2tlci4gKi9cbiAgc2hvd1NsaWNlKHo6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmhvc3QuaXNNdWx0aUNoYW5uZWwoKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLmdldCh6KTtcbiAgICAgIGlmIChncm91cCAmJiBncm91cC5sZW5ndGggJiYgZ3JvdXAuc29tZSgoaXQpID0+IGl0ICYmIHRoaXMuc2xpY2VJbldvcmxkKGl0KSkpIHtcbiAgICAgICAgdGhpcy5yZXZlYWxDaGFubmVsU2xpY2Uoeik7XG4gICAgICAgIC8vIElmIGEgZGlzcGxheSBjaGFuZ2UgaGFwcGVuZWQgd2hpbGUgdGhpcyBzbGljZSB3YXMgY2FjaGVkLCBpdHMgdGlsZXNcbiAgICAgICAgLy8gaG9sZCBhIHN0YWxlIHRpbnQg4oCUIHJlLWFwcGx5IG5vdyAoaXQncyB0aGUgdmlzaWJsZSBzbGljZSwgc28gdGhlXG4gICAgICAgIC8vIGJyaWVmIHJlc3RvcmUgZmxhc2ggaXMgYWNjZXB0YWJsZSwgbGlrZSBhIGZyZXNoIGxvYWQpLlxuICAgICAgICBpZiAodGhpcy5zdGFsZVNsaWNlcy5kZWxldGUoeikpIHRoaXMuaW52YWxpZGF0ZVNsaWNlKHopO1xuICAgICAgICB0aGlzLnRvdWNoU2xpY2VMcnUoeik7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVQcmVmZXRjaCgpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5zbGljZXNMb2FkaW5nLmhhcyh6KSkge1xuICAgICAgICB0aGlzLmFkZENoYW5uZWxTbGljZSh6KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5zbGljZUl0ZW1zLmdldCh6KTtcbiAgICBpZiAoY2FjaGVkICYmIHRoaXMuc2xpY2VJbldvcmxkKGNhY2hlZCkpIHtcbiAgICAgIC8vIEluc3RhbnQ6IHJldmVhbCB0aGUgY2FjaGVkIHNsaWNlLCBoaWRlIHRoZSBvdGhlcnMg4oCUIG5vIGZldGNoL2RlY29kZS5cbiAgICAgIHRoaXMuc2hvd09ubHlTbGljZSh6KTtcbiAgICAgIHRoaXMudG91Y2hTbGljZUxydSh6KTtcbiAgICAgIHRoaXMuc2NoZWR1bGVQcmVmZXRjaCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zbGljZXNMb2FkaW5nLmhhcyh6KSkgcmV0dXJuOyAvLyBhbHJlYWR5IGJlaW5nIGFkZGVkOyBzdWNjZXNzIHJldmVhbHMgaXRcbiAgICB0aGlzLmFkZFNsaWNlKHopO1xuICB9XG5cbiAgLyoqIEFkZCBhIG5ldmVyLXNlZW4gc2xpY2UgYXMgYSBoaWRkZW4gdGlsZWQgaW1hZ2UsIHRoZW4gcmV2ZWFsIGl0IG9uY2UgbG9hZGVkXG4gICAqICAoY29tcG9zaXRlIHBhdGg7IG11bHRpY2hhbm5lbCByb3V0ZXMgdG8gYWRkQ2hhbm5lbFNsaWNlKS4gKi9cbiAgcHJpdmF0ZSBhZGRTbGljZSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaG9zdC5oYXNJbWFnZSgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaG9zdC5pc011bHRpQ2hhbm5lbCgpKSB7XG4gICAgICB0aGlzLmFkZENoYW5uZWxTbGljZSh6KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld2VyID0gdGhpcy5ob3N0LnZpZXdlcigpO1xuICAgIGlmICghdmlld2VyKSByZXR1cm47XG4gICAgdGhpcy5zbGljZXNMb2FkaW5nLmFkZCh6KTtcbiAgICAvLyBUYWcgdGhpcyBhZGQgdG8gdGhlIGN1cnJlbnQgaW1hZ2U7IGlmIHRoZSB1c2VyIHN3aXRjaGVzIGltYWdlcyBiZWZvcmUgaXRcbiAgICAvLyByZXNvbHZlcywgdGhlIHN0YWxlIGNhbGxiYWNrIGlzIGRyb3BwZWQgKHRoZSBhZGQgYmVsb25ncyB0byB0aGUgb2xkIHN0YWNrKS5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuc2xpY2VMb2FkVG9rZW47XG4gICAgY29uc3QgdHMgPSB0aGlzLmhvc3QuYnVpbGRUaWxlU291cmNlKHopO1xuICAgIHRyeSB7XG4gICAgICAvLyBhZGRUaWxlZEltYWdlIGxpdmVzIG9uIHRoZSBWaWV3ZXIgKGl0IHF1ZXVlcyB0aGUgYWRkIGludG8gdGhlIHdvcmxkKS5cbiAgICAgIHZpZXdlci5hZGRUaWxlZEltYWdlKHtcbiAgICAgICAgdGlsZVNvdXJjZTogdHMsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHdpZHRoOiAxLCAvLyBtYXRjaCB0aGUgcHJpbWFyeSBpbWFnZSdzIG5vcm1hbGl6ZWQgcGxhY2VtZW50XG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIC8vIExvYWQgdGlsZXMgZXZlbiB0aG91Z2ggaXQncyBoaWRkZW4g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIHRoZSBiYWNrZ3JvdW5kXG4gICAgICAgIC8vIGxvYWRlciBmaWxsIGV2ZXJ5IHNsaWNlJ3MgY2FjaGUgc28gc2NydWJiaW5nIGdldHMgcHJvZ3Jlc3NpdmVseSBzbW9vdGhlci5cbiAgICAgICAgcHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgc3VjY2VzczogKGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gZT8uaXRlbTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IHRoaXMuc2xpY2VMb2FkVG9rZW4pIHtcbiAgICAgICAgICAgIC8vIEltYWdlIHN3aXRjaGVkIHdoaWxlIHRoaXMgd2FzIGFkZGluZyDigJQgZHJvcCB0aGUgb3JwaGFuIHNvIGl0IHN0b3BzXG4gICAgICAgICAgICAvLyBsb2FkaW5nIGluc3RlYWQgb2Ygc3RyZWFtaW5nIHRpbGVzIGZvciB0aGUgYWJhbmRvbmVkIHN0YWNrLlxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgcXVpZXQoKCkgPT4gdGhpcy5ob3N0LnZpZXdlcigpPy53b3JsZD8ucmVtb3ZlSXRlbShpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2xpY2VzTG9hZGluZy5kZWxldGUoeik7XG4gICAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5zbGljZUl0ZW1zLnNldCh6LCBpdGVtKTtcbiAgICAgICAgICB0aGlzLnRvdWNoU2xpY2VMcnUoeik7XG4gICAgICAgICAgdGhpcy5ob3N0Lm9uQ29tcG9zaXRlU2xpY2VBZGRlZCh6KTtcbiAgICAgICAgICAvLyBPbmx5IHJldmVhbCBpZiB0aGUgdXNlciBpcyBzdGlsbCBvbiB0aGlzIHNsaWNlIChmYXN0IHNjcnViYmluZyBtYXlcbiAgICAgICAgICAvLyBoYXZlIG1vdmVkIG9uIOKAlCBsZWF2ZSBpdCBjYWNoZWQvaGlkZGVuIGZvciBhIGxhdGVyIHJldmlzaXQpLlxuICAgICAgICAgIGlmICh6ID09PSB0aGlzLmhvc3QuY3VycmVudFooKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93T25seVNsaWNlKHopO1xuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVByZWZldGNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZXZpY3RTbGljZUxydSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0b2tlbiA9PT0gdGhpcy5zbGljZUxvYWRUb2tlbikgdGhpcy5zbGljZXNMb2FkaW5nLmRlbGV0ZSh6KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zbGljZXNMb2FkaW5nLmRlbGV0ZSh6KTtcbiAgICAgIGNvbnNvbGUud2FybignW09TRF0gZmFpbGVkIHRvIGFkZCB6LXNsaWNlJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIHNsaWNlIHoncyBjaGFubmVsIGdyb3VwOiBvbmUgYWRkaXRpdmVseS1jb21wb3NpdGVkICgnbGlnaHRlcicgPSBGaWppXG4gICAqIFwiQ29tcG9zaXRlXCIpIFRpbGVkSW1hZ2UgcGVyIGNoYW5uZWwsIGhpZGRlbiAob3BhY2l0eSAwKSB1bnRpbCByZXZlYWxlZC5cbiAgICogRWFjaCBpcyBwcmVsb2FkZWQgc28gdGhlIGJhY2tncm91bmQgbG9hZGVyIGNhbiBwcmUtZmlsbCBldmVyeSBzbGljZS5cbiAgICogQ2FjaGVkIHNvIGEgcmV2aXNpdCBpcyBhbiBpbnN0YW50IG9wYWNpdHkgdG9nZ2xlIOKAlCBubyByZS1mZXRjaCwgbm9cbiAgICogd2hpdGUtZmxpY2tlci4gTWlycm9ycyBhZGRTbGljZSBmb3IgdGhlIGNvbXBvc2l0ZSBwYXRoLlxuICAgKi9cbiAgYWRkQ2hhbm5lbFNsaWNlKHo6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5ob3N0Lmhhc0ltYWdlKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5jaGFubmVsU2xpY2VJdGVtcy5oYXMoeikgfHwgdGhpcy5zbGljZXNMb2FkaW5nLmhhcyh6KSkgcmV0dXJuO1xuICAgIGNvbnN0IHZpZXdlciA9IHRoaXMuaG9zdC52aWV3ZXIoKTtcbiAgICBpZiAoIXZpZXdlcikgcmV0dXJuO1xuICAgIHRoaXMuc2xpY2VzTG9hZGluZy5hZGQoeik7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnNsaWNlTG9hZFRva2VuO1xuICAgIGNvbnN0IG4gPSB0aGlzLmhvc3QuY2hhbm5lbENvdW50KCk7XG4gICAgY29uc3QgZ3JvdXA6IEFycmF5PE9zZFRpbGVkSW1hZ2VMaWtlIHwgdW5kZWZpbmVkPiA9IG5ldyBBcnJheShuKTtcbiAgICBsZXQgc2V0dGxlZCA9IDA7XG4gICAgY29uc3Qgb25TZXR0bGVkID0gKCkgPT4ge1xuICAgICAgaWYgKCsrc2V0dGxlZCA8IG4pIHJldHVybjtcbiAgICAgIGlmICh0b2tlbiAhPT0gdGhpcy5zbGljZUxvYWRUb2tlbikgcmV0dXJuOyAvLyBpbWFnZSBzd2l0Y2hlZCBtaWQtYWRkXG4gICAgICB0aGlzLnNsaWNlc0xvYWRpbmcuZGVsZXRlKHopO1xuICAgICAgdGhpcy5jaGFubmVsU2xpY2VJdGVtcy5zZXQoeiwgZ3JvdXApO1xuICAgICAgdGhpcy5zdGFsZVNsaWNlcy5kZWxldGUoeik7IC8vIGZyZXNobHkgdGludGVkIGF0IHRoZSBjdXJyZW50IGRpc3BsYXkgc3RhdGVcbiAgICAgIHRoaXMudG91Y2hTbGljZUxydSh6KTtcbiAgICAgIGlmICh6ID09PSB0aGlzLmhvc3QuY3VycmVudFooKSkge1xuICAgICAgICB0aGlzLnJldmVhbENoYW5uZWxTbGljZSh6KTsgLy8gdGlsZXMgbWF5IHN0aWxsIGJlIGRlY29kaW5nOyBvcGFjaXR5IGlzIHNldCBub3dcbiAgICAgICAgdGhpcy5zY2hlZHVsZVByZWZldGNoKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmV2aWN0U2xpY2VMcnUoKTtcbiAgICB9O1xuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbjsgYysrKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2aWV3ZXIuYWRkVGlsZWRJbWFnZSh7XG4gICAgICAgICAgdGlsZVNvdXJjZTogdGhpcy5ob3N0LmJ1aWxkVGlsZVNvdXJjZSh6LCBjKSxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgb3BhY2l0eTogMCwgLy8gcmV2ZWFsZWQgYnkgcmV2ZWFsQ2hhbm5lbFNsaWNlIG9uY2UgdGhlIGdyb3VwIGlzIGluXG4gICAgICAgICAgY29tcG9zaXRlT3BlcmF0aW9uOiAnbGlnaHRlcicsXG4gICAgICAgICAgcHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgICBzdWNjZXNzOiAoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGU/Lml0ZW07XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IHRoaXMuc2xpY2VMb2FkVG9rZW4pIHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBxdWlldCgoKSA9PiB0aGlzLmhvc3Qudmlld2VyKCk/LndvcmxkPy5yZW1vdmVJdGVtKGl0ZW0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbSkgZ3JvdXBbY10gPSBpdGVtO1xuICAgICAgICAgICAgb25TZXR0bGVkKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKCkgPT4gb25TZXR0bGVkKCksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW09TRF0gZmFpbGVkIHRvIGFkZCBjaGFubmVsIHNsaWNlIGltYWdlJywgeiwgYywgZXJyKTtcbiAgICAgICAgb25TZXR0bGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldmVhbCBzbGljZSB6J3MgY2hhbm5lbCBncm91cCAoZWFjaCB2aXNpYmxlIGNoYW5uZWwg4oaSIG9wYWNpdHkgMSkgYW5kXG4gICAqICBoaWRlIGV2ZXJ5IG90aGVyIGNhY2hlZCBzbGljZSdzIGdyb3VwLiBJbnN0YW50OyBubyBmZXRjaC9kZWNvZGUuICovXG4gIHJldmVhbENoYW5uZWxTbGljZSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFt6eiwgZ3JvdXBdIG9mIHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHp6ID09PSB6O1xuICAgICAgZ3JvdXAuZm9yRWFjaCgoaXQsIGMpID0+IHtcbiAgICAgICAgaWYgKCFpdCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB2aXNpYmxlID0gdGhpcy5ob3N0LmNoYW5uZWxWaXNpYmxlKGMpO1xuICAgICAgICBxdWlldCgoKSA9PiBpdC5zZXRPcGFjaXR5KGFjdGl2ZSAmJiB2aXNpYmxlID8gMSA6IDApKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTaG93IHRoZSBnaXZlbiBjb21wb3NpdGUgc2xpY2UgKG9wYWNpdHkgMSkgYW5kIGhpZGUgYWxsIG90aGVyIGNhY2hlZCBzbGljZXMuICovXG4gIHByaXZhdGUgc2hvd09ubHlTbGljZSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFt6eiwgaXRlbV0gb2YgdGhpcy5zbGljZUl0ZW1zKSB7XG4gICAgICBxdWlldCgoKSA9PiBpdGVtLnNldE9wYWNpdHkoenogPT09IHogPyAxIDogMCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBkaXNwbGF5IGludmFsaWRhdGlvbiAobXVsdGljaGFubmVsKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmUtdGludCBhZnRlciBhIGRpc3BsYXkgY2hhbmdlOiBpbnZhbGlkYXRlIE9OTFkgdGhlIHZpc2libGUgc2xpY2Unc1xuICAgKiAgY2hhbm5lbCBpbWFnZXMg4oCUIGludmFsaWRhdGluZyB0aGUgd2hvbGUgd29ybGQgd291bGQgcmUtcHJvY2VzcyBldmVyeVxuICAgKiAgaGlkZGVuL3ByZWxvYWRlZCBzbGljZSdzIHRpbGVzIChodW5kcmVkcyksIGZsb29kaW5nIE9TRCBhbmQgd2FzdGluZyB3b3JrXG4gICAqICBvbiB0aWxlcyB0aGF0IGFyZW4ndCBvbiBzY3JlZW4uIFRoZSBvdGhlciBjYWNoZWQgc2xpY2VzIGFyZSBtYXJrZWQgc3RhbGVcbiAgICogIGFuZCByZS10aW50ZWQgbGF6aWx5IHdoZW4gcmV2ZWFsZWQuICovXG4gIGludmFsaWRhdGVDaGFubmVsRGlzcGxheSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmludmFsaWRhdGVTbGljZSh6KTtcbiAgICB0aGlzLnN0YWxlU2xpY2VzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCB6eiBvZiB0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLmtleXMoKSkge1xuICAgICAgaWYgKHp6ICE9PSB6KSB0aGlzLnN0YWxlU2xpY2VzLmFkZCh6eik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEludmFsaWRhdGUgKHJlc3RvcmUgKyByZS1yZWNvbG9yKSBqdXN0IHRoZSBjaGFubmVsIGltYWdlcyBvZiBvbmUgY2FjaGVkXG4gICAqICBzbGljZS4gQSBzaGFyZWQgdGltZXN0YW1wIGJhdGNoZXMgdGhlIHBlci1pbWFnZSBpbnZhbGlkYXRpb25zIGludG8gb25lXG4gICAqICBwcm9jZXNzaW5nIHBhc3MgKE9TRCBkZWR1cGVzIHRpbGVzIGFscmVhZHkgc3RhbXBlZCBhdCA+PSB0U3RhbXApLiAqL1xuICBwcml2YXRlIGludmFsaWRhdGVTbGljZSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMuZ2V0KHopID8/IFtdO1xuICAgIGlmICghZ3JvdXAubGVuZ3RoKSByZXR1cm47XG4gICAgLy8gRmVhdHVyZS10ZXN0ZWQ6IGEgbW9ja2VkIE9TRCBtb2R1bGUgKHNwZWNzKSBtYXkgbm90IHByb3ZpZGUgaXQuXG4gICAgY29uc3QgdFN0YW1wID0gdHlwZW9mIE9TRC5ub3cgPT09ICdmdW5jdGlvbicgPyBPU0Qubm93KCkgOiBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgaXQgb2YgZ3JvdXApIHtcbiAgICAgIGlmIChpdCAmJiB0eXBlb2YgaXQucmVxdWVzdEludmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcXVpZXQoKCkgPT4gaXQucmVxdWVzdEludmFsaWRhdGU/Lih0cnVlLCBmYWxzZSwgdFN0YW1wKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIGJhY2tncm91bmQgc3RhY2sgcHJlbG9hZGluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogRGVib3VuY2Ugc28gYSBidXJzdCBvZiB2aWV3cG9ydC9zbGljZSBldmVudHMgY29hbGVzY2VzLCB0aGVuIGFkdmFuY2UgdGhlXG4gICAqICBiYWNrZ3JvdW5kIHN0YWNrIGxvYWRlciBieSBvbmUgc2xpY2UuICovXG4gIHNjaGVkdWxlUHJlZmV0Y2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2tpcFNsaWNlUHJlZmV0Y2gpIHJldHVybjtcbiAgICBpZiAodGhpcy5wcmVmZXRjaFRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5wcmVmZXRjaFRpbWVyKTtcbiAgICB0aGlzLnByZWZldGNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZE5leHRCYWNrZ3JvdW5kU2xpY2UoKSwgMjAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCYWNrZ3JvdW5kLWxvYWQgdGhlIHdob2xlIHN0YWNrOiBhZGQgZWFjaCBub3QteWV0LWNhY2hlZCBzbGljZSBhcyBhXG4gICAqIGhpZGRlbiwgcHJlbG9hZGVkIHRpbGVkIGltYWdlLCBvbmUgYXQgYSB0aW1lLCB3b3JraW5nIG91dHdhcmQgZnJvbSB0aGVcbiAgICogY3VycmVudCBzbGljZSDigJQgYW5kIG5ldmVyIGJsb2NraW5nIHRoZSB2aXNpYmxlIHNsaWNlIChpdCB5aWVsZHMgd2hpbGUgdGhlXG4gICAqIGN1cnJlbnQgdmlldyBpcyBzdGlsbCBzdHJlYW1pbmcgdGlsZXM7IG9ubHkgb25lIHNsaWNlIGlzIGluIGZsaWdodCBhdCBhXG4gICAqIHRpbWUgc28gdGhlIG9uLXNjcmVlbiB0aWxlcyBhbHdheXMgd2luIHRoZSBjb25uZWN0aW9uKS5cbiAgICovXG4gIHByaXZhdGUgbG9hZE5leHRCYWNrZ3JvdW5kU2xpY2UoKTogdm9pZCB7XG4gICAgdGhpcy5wcmVmZXRjaFRpbWVyID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuaG9zdC5oYXNJbWFnZSgpKSByZXR1cm47XG4gICAgY29uc3Qgc2xpY2VDb3VudCA9IHRoaXMuaG9zdC5zbGljZUNvdW50KCk7XG4gICAgaWYgKHNsaWNlQ291bnQgPD0gMSkgcmV0dXJuOyAvLyBub3QgYSBzdGFjayDigJQgbm90aGluZyB0byBwcmVsb2FkXG4gICAgLy8gWWllbGQgdG8gdGhlIHZpc2libGUgc2xpY2Ugd2hpbGUgaXQncyBzdGlsbCBzdHJlYW1pbmcgdGlsZXMuXG4gICAgaWYgKHRoaXMuc2xpY2VUaWxlc0xvYWRpbmcodGhpcy5ob3N0LmN1cnJlbnRaKCkpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlUHJlZmV0Y2goKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gR2F0ZSBvbiB0aGUgaW4tZmxpZ2h0IHNsaWNlJ3MgVElMRVMgZmluaXNoaW5nIOKAlCBhZGRUaWxlZEltYWdlJ3Mgc3VjY2Vzc1xuICAgIC8vIGZpcmVzIG9uIGFkZCwgbm90IG9uIHRpbGUgbG9hZCwgc28gd2l0aG91dCB0aGlzIHdlJ2QgYWRkIHRoZSB3aG9sZSBzdGFja1xuICAgIC8vIGF0IG9uY2UgYW5kIGZsb29kIHRoZSBjb25uZWN0aW9uLiBBIHRpbWUgZmFsbGJhY2sgcHJldmVudHMgYSBzdHVjayBzbGljZVxuICAgIC8vIGZyb20gc3RhbGxpbmcgdGhlIHBhc3MuXG4gICAgaWYgKHRoaXMuYmdMb2FkaW5nWiAhPSBudWxsKSB7XG4gICAgICBjb25zdCBhZGRpbmcgPSB0aGlzLnNsaWNlc0xvYWRpbmcuaGFzKHRoaXMuYmdMb2FkaW5nWik7XG4gICAgICBjb25zdCB0aWxlc0xvYWRpbmcgPSB0aGlzLnNsaWNlVGlsZXNMb2FkaW5nKHRoaXMuYmdMb2FkaW5nWik7XG4gICAgICBjb25zdCB0aW1lZE91dCA9IERhdGUubm93KCkgLSB0aGlzLmJnTG9hZGluZ1NpbmNlID4gODAwMDtcbiAgICAgIGlmICgoYWRkaW5nIHx8IHRpbGVzTG9hZGluZykgJiYgIXRpbWVkT3V0KSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVQcmVmZXRjaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmJnTG9hZGluZ1ogPSBudWxsOyAvLyB0aGF0IHNsaWNlJ3MgdGlsZXMgYXJlIGluIChvciBnYXZlIHVwKSDigJQgYWR2YW5jZVxuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gdGhpcy5uZWFyZXN0VW5jYWNoZWRTbGljZShzbGljZUNvdW50KTtcbiAgICBpZiAobmV4dCA9PSBudWxsKSByZXR1cm47IC8vIHdob2xlIHN0YWNrIGNhY2hlZCDigJQgZG9uZVxuICAgIHRoaXMuYmdMb2FkaW5nWiA9IG5leHQ7XG4gICAgdGhpcy5iZ0xvYWRpbmdTaW5jZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5iZ0F0dGVtcHRlZC5hZGQobmV4dCk7XG4gICAgdGhpcy5hZGRTbGljZShuZXh0KTsgLy8gaGlkZGVuICsgcHJlbG9hZCAoYWRkZWQgd2l0aCBvcGFjaXR5IDA7IG5vdCByZXZlYWxlZClcbiAgICB0aGlzLnNjaGVkdWxlUHJlZmV0Y2goKTsgLy8gcG9sbCB1bnRpbCBpdHMgdGlsZXMgbG9hZCwgdGhlbiBhZHZhbmNlXG4gIH1cblxuICAvKiogVGhlIG5vdC15ZXQtY2FjaGVkIHNsaWNlIGNsb3Nlc3QgdG8gdGhlIGN1cnJlbnQgb25lIChsb2FkIG5lYXJlc3QgZmlyc3QpLFxuICAgKiAgc2tpcHBpbmcgYW55IGFscmVhZHkgYXR0ZW1wdGVkIHNvIGEgZmFpbGVkL3Nsb3cgb25lIGlzbid0IHJldHJpZWQgaW4gYSBsb29wLiAqL1xuICBwcml2YXRlIG5lYXJlc3RVbmNhY2hlZFNsaWNlKHNsaWNlQ291bnQ6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGN1ciA9IHRoaXMuaG9zdC5jdXJyZW50WigpO1xuICAgIGZvciAobGV0IGQgPSAwOyBkIDwgc2xpY2VDb3VudDsgZCsrKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVzID0gZCA9PT0gMCA/IFtjdXJdIDogW2N1ciAtIGQsIGN1ciArIGRdO1xuICAgICAgZm9yIChjb25zdCB6IG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPj0gMCAmJlxuICAgICAgICAgIHogPCBzbGljZUNvdW50ICYmXG4gICAgICAgICAgIXRoaXMuc2xpY2VDYWNoZUhhcyh6KSAmJlxuICAgICAgICAgICF0aGlzLnNsaWNlc0xvYWRpbmcuaGFzKHopICYmXG4gICAgICAgICAgIXRoaXMuYmdBdHRlbXB0ZWQuaGFzKHopXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB6O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgYmFja2dyb3VuZCBzdGFjayBwcmVsb2FkaW5nIGFuZCBpbnZhbGlkYXRlIGFueSBpbi1mbGlnaHQgc2xpY2UgYWRkLlxuICAgKiBDYWxsZWQgd2hlbiBhIGRpZmZlcmVudCBpbWFnZSBpcyBzZWxlY3RlZCBzbyB0aGUgcHJldmlvdXMgc3RhY2sgc3RvcHNcbiAgICogbG9hZGluZyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGZpbmlzaGluZyBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICovXG4gIGNhbmNlbEJhY2tncm91bmRMb2FkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByZWZldGNoVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnByZWZldGNoVGltZXIpO1xuICAgICAgdGhpcy5wcmVmZXRjaFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5zbGljZXNMb2FkaW5nLmNsZWFyKCk7XG4gICAgdGhpcy5iZ0xvYWRpbmdaID0gbnVsbDtcbiAgICB0aGlzLmJnQXR0ZW1wdGVkLmNsZWFyKCk7XG4gICAgdGhpcy5zbGljZUxvYWRUb2tlbisrOyAvLyBkcm9wIHBlbmRpbmcgYWRkVGlsZWRJbWFnZSBjYWxsYmFja3MgZnJvbSB0aGUgb2xkIGltYWdlXG4gICAgLy8gQWJvcnQgaW4tZmxpZ2h0IGJhY2tncm91bmQgdGlsZXMgaW1tZWRpYXRlbHkgYnkgZHJvcHBpbmcgdGhlIGhpZGRlblxuICAgIC8vIHByZWxvYWRlZCBzbGljZXMgKHJlbW92ZUl0ZW0gY2FuY2VscyB0aGVpciBwZW5kaW5nIHRpbGUgbG9hZHMpLiBLZWVwIHRoZVxuICAgIC8vIHZpc2libGUgc2xpY2Ugc28gdGhlIGN1cnJlbnQgdmlldyBkb2Vzbid0IGJsYW5rIGJlZm9yZSB0aGUgbmV4dCBwbG90LlxuICAgIHRoaXMuZHJvcEhpZGRlblNsaWNlcygpO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBldmVyeSBjYWNoZWQgc2xpY2UgZXhjZXB0IHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIG9uZSwgYWJvcnRpbmdcbiAgICogIHRoZWlyIGluLWZsaWdodCB0aWxlIHJlcXVlc3RzLiAqL1xuICBwcml2YXRlIGRyb3BIaWRkZW5TbGljZXMoKTogdm9pZCB7XG4gICAgY29uc3QgdiA9IHRoaXMuaG9zdC52aWV3ZXIoKTtcbiAgICBpZiAoIXYpIHJldHVybjtcbiAgICBjb25zdCBjdXIgPSB0aGlzLmhvc3QuY3VycmVudFooKTtcbiAgICBmb3IgKGNvbnN0IFt6LCBpdGVtXSBvZiBbLi4udGhpcy5zbGljZUl0ZW1zXSkge1xuICAgICAgaWYgKHogPT09IGN1cikgY29udGludWU7XG4gICAgICB0aGlzLnNsaWNlSXRlbXMuZGVsZXRlKHopO1xuICAgICAgcXVpZXQoKCkgPT4gdi53b3JsZC5yZW1vdmVJdGVtKGl0ZW0pKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbeiwgZ3JvdXBdIG9mIFsuLi50aGlzLmNoYW5uZWxTbGljZUl0ZW1zXSkge1xuICAgICAgaWYgKHogPT09IGN1cikgY29udGludWU7XG4gICAgICB0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLmRlbGV0ZSh6KTtcbiAgICAgIGZvciAoY29uc3QgaXQgb2YgZ3JvdXApIHtcbiAgICAgICAgaWYgKGl0KSB7XG4gICAgICAgICAgcXVpZXQoKCkgPT4gdi53b3JsZC5yZW1vdmVJdGVtKGl0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zbGljZUxydSA9IHRoaXMuc2xpY2VDYWNoZUhhcyhjdXIpID8gW2N1cl0gOiBbXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBjYWNoZSBib29ra2VlcGluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogV2hldGhlciBzbGljZSB6IGlzIGluIHRoZSBhY3RpdmUgY2FjaGUgKGNvbXBvc2l0ZSBzaW5nbGUgaW1hZ2UsIG9yIHRoZVxuICAgKiAgbXVsdGljaGFubmVsIHBlci1jaGFubmVsIGdyb3VwKS4gKi9cbiAgcHJpdmF0ZSBzbGljZUNhY2hlSGFzKHo6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhvc3QuaXNNdWx0aUNoYW5uZWwoKSA/IHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMuaGFzKHopIDogdGhpcy5zbGljZUl0ZW1zLmhhcyh6KTtcbiAgfVxuXG4gIC8qKiBUaGUgY2FjaGVkIFRpbGVkSW1hZ2UocykgZm9yIHNsaWNlIHogKDDigJMxIGZvciBjb21wb3NpdGUsIE4gZm9yIG11bHRpY2hhbm5lbCkuICovXG4gIHByaXZhdGUgc2xpY2VHcm91cCh6OiBudW1iZXIpOiBBcnJheTxPc2RUaWxlZEltYWdlTGlrZSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICh0aGlzLmhvc3QuaXNNdWx0aUNoYW5uZWwoKSkgcmV0dXJuIHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMuZ2V0KHopID8/IFtdO1xuICAgIGNvbnN0IGl0ID0gdGhpcy5zbGljZUl0ZW1zLmdldCh6KTtcbiAgICByZXR1cm4gaXQgPyBbaXRdIDogW107XG4gIH1cblxuICAvKiogV2hldGhlciBzbGljZSB6J3MgdGlsZXMgYXJlIHN0aWxsIHN0cmVhbWluZyAoYW55IGNhY2hlZCBpbWFnZSBub3QgZnVsbHkgbG9hZGVkKS4gKi9cbiAgcHJpdmF0ZSBzbGljZVRpbGVzTG9hZGluZyh6OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBnID0gdGhpcy5zbGljZUdyb3VwKHopO1xuICAgIGlmICghZy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZy5zb21lKChpdCkgPT4gaXQgJiYgdHlwZW9mIGl0LmdldEZ1bGx5TG9hZGVkID09PSAnZnVuY3Rpb24nICYmICFpdC5nZXRGdWxseUxvYWRlZCgpKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgc2xpY2UgeidzIGNhY2hlZCBpbWFnZShzKSBmcm9tIHRoZSB3b3JsZCBhbmQgdGhlIGFjdGl2ZSBjYWNoZS4gKi9cbiAgcHJpdmF0ZSByZW1vdmVDYWNoZWRTbGljZSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy5ob3N0LnZpZXdlcigpO1xuICAgIGlmICh0aGlzLmhvc3QuaXNNdWx0aUNoYW5uZWwoKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLmdldCh6KTtcbiAgICAgIHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMuZGVsZXRlKHopO1xuICAgICAgaWYgKGdyb3VwICYmIHYpXG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgZ3JvdXApIHtcbiAgICAgICAgICBpZiAoaXQpIHtcbiAgICAgICAgICAgIHF1aWV0KCgpID0+IHYud29ybGQucmVtb3ZlSXRlbShpdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5zbGljZUl0ZW1zLmdldCh6KTtcbiAgICAgIHRoaXMuc2xpY2VJdGVtcy5kZWxldGUoeik7XG4gICAgICBpZiAoaXRlbSAmJiB2KSB7XG4gICAgICAgIHF1aWV0KCgpID0+IHYud29ybGQucmVtb3ZlSXRlbShpdGVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIElzIHRoZSB0aWxlZCBpbWFnZSBzdGlsbCBpbiB0aGUgd29ybGQgKG5vdCBldmljdGVkKT8gKi9cbiAgcHJpdmF0ZSBzbGljZUluV29ybGQoaXRlbTogT3NkVGlsZWRJbWFnZUxpa2UpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICh0aGlzLmhvc3Qudmlld2VyKCk/LndvcmxkLmdldEluZGV4T2ZJdGVtKGl0ZW0pID8/IC0xKSA+PSAwO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNYXJrIHogYXMgbW9zdC1yZWNlbnRseS11c2VkLiAqL1xuICBwcml2YXRlIHRvdWNoU2xpY2VMcnUoejogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaSA9IHRoaXMuc2xpY2VMcnUuaW5kZXhPZih6KTtcbiAgICBpZiAoaSA+PSAwKSB0aGlzLnNsaWNlTHJ1LnNwbGljZShpLCAxKTtcbiAgICB0aGlzLnNsaWNlTHJ1LnB1c2goeik7XG4gIH1cblxuICAvKiogRHJvcCB0aGUgbGVhc3QtcmVjZW50bHktdXNlZCBjYWNoZWQgc2xpY2VzIGJleW9uZCB0aGUgY2FwIChuZXZlciB0aGVcbiAgICogIGN1cnJlbnQgb25lKSwgcmVtb3ZpbmcgdGhlaXIgdGlsZWQgaW1hZ2VzIHNvIG1lbW9yeSBzdGF5cyBib3VuZGVkLiAqL1xuICBwcml2YXRlIGV2aWN0U2xpY2VMcnUoKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuc2xpY2VMcnUubGVuZ3RoID4gdGhpcy5tYXhDYWNoZWRTbGljZXMpIHtcbiAgICAgIGNvbnN0IGN1ciA9IHRoaXMuaG9zdC5jdXJyZW50WigpO1xuICAgICAgY29uc3QgaWR4ID0gdGhpcy5zbGljZUxydS5maW5kSW5kZXgoKHopID0+IHogIT09IGN1cik7XG4gICAgICBpZiAoaWR4IDwgMCkgYnJlYWs7XG4gICAgICBjb25zdCB6ID0gdGhpcy5zbGljZUxydS5zcGxpY2UoaWR4LCAxKVswXTtcbiAgICAgIHRoaXMucmVtb3ZlQ2FjaGVkU2xpY2Uoeik7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsZWFyIHRoZSBjYWNoZSAob24gdGVhcmRvd24gLyBpbWFnZSBzd2l0Y2gpLiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnNsaWNlSXRlbXMuY2xlYXIoKTtcbiAgICB0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLmNsZWFyKCk7XG4gICAgdGhpcy5zdGFsZVNsaWNlcy5jbGVhcigpO1xuICAgIHRoaXMuc2xpY2VMcnUgPSBbXTtcbiAgICB0aGlzLnNsaWNlc0xvYWRpbmcuY2xlYXIoKTtcbiAgICB0aGlzLmJnTG9hZGluZ1ogPSBudWxsO1xuICAgIHRoaXMuYmdBdHRlbXB0ZWQuY2xlYXIoKTtcbiAgfVxufVxuIl19
|
|
522
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9vc2Qvc2xpY2UtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUEwQ3ZDLE1BQU0sT0FBTyxVQUFVO0lBdUNyQixZQUFvQixJQUFvQjtRQUFwQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQXRDeEMscUVBQXFFO1FBQzdELGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztRQUMxRDs7aURBRXlDO1FBQ2pDLHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO1FBQ3BGOzhFQUNzRTtRQUM5RCxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDeEMsdURBQXVEO1FBQy9DLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDaEMsMEVBQTBFO1FBQ2xFLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMxQztrRkFDMEU7UUFDbEUsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDM0I7OzZEQUVxRDtRQUM3QyxlQUFVLEdBQWtCLElBQUksQ0FBQztRQUN6Qzt1REFDK0M7UUFDdkMsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDM0IsZ0ZBQWdGO1FBQ3hFLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN4Qyx1RUFBdUU7UUFDL0Qsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDNUIsZ0ZBQWdGO1FBQy9ELDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUM1Qzs7O3lCQUdpQjtRQUNBLDJCQUFzQixHQUFHLEdBQUcsQ0FBQztRQUM5Qyw0REFBNEQ7UUFDcEQsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQXlDLElBQUksQ0FBQztJQUV4QixDQUFDO0lBRTVDLHlFQUF5RTtJQUV6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QyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPU0QsIHF1aWV0IH0gZnJvbSAnLi9vc2QtbGliJztcbmltcG9ydCB7IE9zZFF1ZXVlZFRpbGVKb2IsIE9zZFRpbGVkSW1hZ2VMaWtlLCBPc2RWaWV3ZXJMaWtlIH0gZnJvbSAnLi9vc2Qtdmlld2VyLWxpa2UnO1xuXG4vKipcbiAqIFN0YWNrLXNsaWNlIGNhY2hlIGZvciB0aGUgT3BlblNlYWRyYWdvbiBiYWNrZW5kIChyZWZhY3RvcmluZyBwbGFuLCBTdGVwIDMg4oCUXG4gKiBhIHB1cmUgbW92ZSBvZiB0aGUgY2FjaGUgY2x1c3RlciBvdXQgb2YgdGhlIHZpc3VhbGl6ZXIgc2VydmljZSkuXG4gKlxuICogU2NydWJiaW5nIHRoZSB6LXNsaWRlciB1c2VkIHRvIHZpZXdlci5vcGVuKCkgYSBmcmVzaCB0aWxlIHNvdXJjZSBwZXIgc2xpY2UsXG4gKiB3aGljaCBkZXN0cm95cyB0aGUgY3VycmVudCB0aWxlZCBpbWFnZSAoYW5kIGl0cyBkZWNvZGVkK3JlY29sb3JlZCB0aWxlcyksIHNvXG4gKiByZXZpc2l0aW5nIGEgc2xpY2UgcmUtZmV0Y2hlZCBldmVyeXRoaW5nLiBJbnN0ZWFkIHdlIGtlZXAgZWFjaCB2aXNpdGVkIHNsaWNlXG4gKiBhcyBpdHMgb3duIHRpbGVkIGltYWdlIGluIHRoZSB3b3JsZCBhbmQganVzdCB0b2dnbGUgb3BhY2l0eSDigJQgYSByZXZpc2l0ZWRcbiAqIHNsaWNlIGlzIGluc3RhbnQgKG5vIG5ldHdvcmssIG5vIHJlLWRlY29kZSwgbm8gcmUtcmVjb2xvcikuIEJvdW5kZWQgYnkgYW5cbiAqIExSVSBzbyBkZWVwIHN0YWNrcyBkb24ndCBncm93IHdpdGhvdXQgbGltaXQuIE11bHRpY2hhbm5lbCBzbGljZXMgY2FjaGUgb25lXG4gKiBUaWxlZEltYWdlIHBlciBjaGFubmVsIChhZGRpdGl2ZWx5IGNvbXBvc2l0ZWQpOyBjb21wb3NpdGUgc2xpY2VzIGNhY2hlIG9uZS5cbiAqIEEgYmFja2dyb3VuZCBsb2FkZXIgcHJlLWZpbGxzIHRoZSByZXN0IG9mIHRoZSBzdGFjaywgb25lIHNsaWNlIGF0IGEgdGltZSxcbiAqIHlpZWxkaW5nIHRvIHRoZSB2aXNpYmxlIHNsaWNlIHNvIG9uLXNjcmVlbiB0aWxlcyBhbHdheXMgd2luIHRoZSBjb25uZWN0aW9uLlxuICovXG5cbi8qKiBXaGF0IHRoZSBjYWNoZSBuZWVkcyBmcm9tIHRoZSB2aXN1YWxpemVyIHNlcnZpY2UuIEFsbCBhY2Nlc3NvcnMgYXJlIGxpdmVcbiAqICAoY2FsbGVkIGF0IHVzZSB0aW1lLCBuZXZlciBjYXB0dXJlZCkgc28gdGhlIGNhY2hlIGFsd2F5cyBzZWVzIHRoZSBjdXJyZW50XG4gKiAgdmlld2VyL2Rlc2NyaXB0b3IveiDigJQgbWF0Y2hpbmcgdGhlIGZpZWxkIHJlYWRzIGl0IHJlcGxhY2VkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGljZUNhY2hlSG9zdCB7XG4gIC8qKiBUaGUgbW91bnRlZCB2aWV3ZXIsIG9yIG51bGwuICovXG4gIHZpZXdlcigpOiBPc2RWaWV3ZXJMaWtlIHwgbnVsbDtcbiAgLyoqIFRydWUgd2hlbiBhIHZpZXdlciwgZGVzY3JpcHRvciBhbmQgaW5mb0I2NCBhcmUgYWxsIHByZXNlbnQuICovXG4gIGhhc0ltYWdlKCk6IGJvb2xlYW47XG4gIC8qKiBTdGFjayBkZXB0aCAoZGVzY3JpcHRvci56LCAxIGZvciBzaW5nbGUgaW1hZ2VzKS4gKi9cbiAgc2xpY2VDb3VudCgpOiBudW1iZXI7XG4gIC8qKiBUaGUgY3VycmVudGx5IGRpc3BsYXllZCB6LXNsaWNlLiAqL1xuICBjdXJyZW50WigpOiBudW1iZXI7XG4gIC8qKiBQZXItY2hhbm5lbCByZW5kZXJpbmcgKG11bHRpY2hhbm5lbCBmbHVvcmVzY2VuY2UpIHZzIGNvbXBvc2l0ZS4gKi9cbiAgaXNNdWx0aUNoYW5uZWwoKTogYm9vbGVhbjtcbiAgLyoqIENoYW5uZWwgY291bnQgZm9yIGEgbXVsdGljaGFubmVsIGdyb3VwIGFkZC4gKi9cbiAgY2hhbm5lbENvdW50KCk6IG51bWJlcjtcbiAgLyoqIENoYW5uZWwgdmlzaWJpbGl0eSAoZHJpdmVzIGdyb3VwIHJldmVhbCBvcGFjaXR5KS4gKi9cbiAgY2hhbm5lbFZpc2libGUoYzogbnVtYmVyKTogYm9vbGVhbjtcbiAgLyoqIFRpbGUgc291cmNlIGZvciBzbGljZSB6IChvcHRpb25hbGx5IG9uZSBjaGFubmVsKS4gKi9cbiAgYnVpbGRUaWxlU291cmNlKHo6IG51bWJlciwgY2hhbm5lbD86IG51bWJlcik6IHN0cmluZyB8IG9iamVjdDtcbiAgLyoqIEEgY29tcG9zaXRlIHNsaWNlIGxhbmRlZCBpbiB0aGUgd29ybGQg4oCUIHRoZSBzZXJ2aWNlIHNhbXBsZXMgaXRzIHdpbmRvdy4gKi9cbiAgb25Db21wb3NpdGVTbGljZUFkZGVkKHo6IG51bWJlcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTbGljZUNhY2hlIHtcbiAgLyoqIHotc2xpY2Ug4oaSIGl0cyBUaWxlZEltYWdlIGluIHRoZSB2aWV3ZXIgd29ybGQgKGNvbXBvc2l0ZSBwYXRoKS4gKi9cbiAgcHJpdmF0ZSBzbGljZUl0ZW1zID0gbmV3IE1hcDxudW1iZXIsIE9zZFRpbGVkSW1hZ2VMaWtlPigpO1xuICAvKiogTXVsdGljaGFubmVsIHBlci1zbGljZSBjYWNoZTogeiDihpIgdGhlIE4gY2hhbm5lbCBUaWxlZEltYWdlcyBmb3IgdGhhdCBzbGljZVxuICAgKiAgKGFkZGl0aXZlbHkgY29tcG9zaXRlZCBieSBPU0Q7IGluZGV4ID0gY2hhbm5lbCkuIE9ubHkgdGhlIGFjdGl2ZSBzbGljZSdzXG4gICAqICB2aXNpYmxlIGNoYW5uZWxzIGhhdmUgb3BhY2l0eSA+IDAuICovXG4gIHByaXZhdGUgY2hhbm5lbFNsaWNlSXRlbXMgPSBuZXcgTWFwPG51bWJlciwgQXJyYXk8T3NkVGlsZWRJbWFnZUxpa2UgfCB1bmRlZmluZWQ+PigpO1xuICAvKiogQ2FjaGVkIG11bHRpY2hhbm5lbCBzbGljZXMgd2hvc2UgdGlsZXMgd2VyZSB0aW50ZWQgYmVmb3JlIHRoZSBsYXRlc3RcbiAgICogIGRpc3BsYXkgY2hhbmdlOyByZS10aW50ZWQgbGF6aWx5IHdoZW4gbmV4dCByZXZlYWxlZCBieSB6LXNjcnViLiAqL1xuICBwcml2YXRlIHN0YWxlU2xpY2VzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIC8qKiBNb3N0LXJlY2VudGx5LXNob3duIHogbGFzdDsgZHJpdmVzIExSVSBldmljdGlvbi4gKi9cbiAgcHJpdmF0ZSBzbGljZUxydTogbnVtYmVyW10gPSBbXTtcbiAgLyoqIHotc2xpY2VzIHdob3NlIHRpbGVkIGltYWdlIGlzIGJlaW5nIGFkZGVkIChkZWR1cGUgcmFwaWQgc2NydWJiaW5nKS4gKi9cbiAgcHJpdmF0ZSBzbGljZXNMb2FkaW5nID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIC8qKiBCdW1wZWQgd2hlbmV2ZXIgdGhlIGxvYWRlZCBpbWFnZSBjaGFuZ2VzOyBpbi1mbGlnaHQgYmFja2dyb3VuZCBzbGljZSBhZGRzXG4gICAqICBjYXB0dXJlZCB1bmRlciBhbiBvbGRlciB0b2tlbiBhcmUgZHJvcHBlZCAoY2FuY2VsbGVkIGltYWdlIHN3aXRjaCkuICovXG4gIHByaXZhdGUgc2xpY2VMb2FkVG9rZW4gPSAwO1xuICAvKiogVGhlIHNsaWNlIHRoZSBiYWNrZ3JvdW5kIGxvYWRlciBpcyBjdXJyZW50bHkgd2FpdGluZyBvbiAoaXRzIHRpbGVzIGFyZVxuICAgKiAgc3RpbGwgc3RyZWFtaW5nKTogYWRkVGlsZWRJbWFnZSAnc3VjY2VzcycgZmlyZXMgb24gYWRkLCBub3Qgb24gdGlsZSBsb2FkLFxuICAgKiAgc28gd2UgZ2F0ZSB0aGUgbmV4dCBzbGljZSBvbiBnZXRGdWxseUxvYWRlZCgpLiAqL1xuICBwcml2YXRlIGJnTG9hZGluZ1o6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAvKiogV2hlbiBiZ0xvYWRpbmdaIHN0YXJ0ZWQgbG9hZGluZyDigJQgYSBmYWxsYmFjayBzbyBhIHNsb3cvc3R1Y2sgc2xpY2UgY2FuJ3RcbiAgICogIHN0YWxsIHRoZSB3aG9sZSBiYWNrZ3JvdW5kIHBhc3MgZm9yZXZlci4gKi9cbiAgcHJpdmF0ZSBiZ0xvYWRpbmdTaW5jZSA9IDA7XG4gIC8qKiBTbGljZXMgdGhlIGJhY2tncm91bmQgbG9hZGVyIGhhcyBhbHJlYWR5IGF0dGVtcHRlZCAobm8gdGlnaHQgcmV0cnkgbG9vcCkuICovXG4gIHByaXZhdGUgYmdBdHRlbXB0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgLyoqIE1heCBjYWNoZWQgc2xpY2UgdGlsZWQgaW1hZ2VzIGtlcHQgcmVzaWRlbnQgYmVmb3JlIExSVSBldmljdGlvbi4gKi9cbiAgcHJpdmF0ZSBtYXhDYWNoZWRTbGljZXMgPSA4O1xuICAvKiogVXBwZXIgYm91bmQgb24gcmVzaWRlbnQgc2xpY2VzLCByZWdhcmRsZXNzIG9mIHN0YWNrIGRlcHRoIChtZW1vcnkgZ3VhcmQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9DQUNIRURfU0xJQ0VTX0NBUCA9IDY0O1xuICAvKiogRml0LXZpZXcgdGlsZSBidWRnZXQgYWJvdmUgd2hpY2ggYmFja2dyb3VuZCBwcmVsb2FkaW5nIGlzIHNraXBwZWQ6IGEgaHVnZVxuICAgKiAgbm8tcHlyYW1pZCBzdGFjayB3b3VsZCBwcmVsb2FkIGV2ZXJ5IHNsaWNlIGF0IGZ1bGwgcmVzb2x1dGlvbiBhbmRcbiAgICogIGZsb29kL3RpbWVvdXQuIE5vcm1hbCBzdGFja3Mgc3RheSBiZWxvdyBpdCBhbmQgS0VFUCB0aGUgZmxpY2tlci1mcmVlXG4gICAqICBwcmUtY2FjaGUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1BSRUZFVENIX0ZJVF9USUxFUyA9IDI1NjtcbiAgLyoqIFRydWUgb25seSBmb3Igc3RhY2tzIHRvbyBsYXJnZSB0byBiYWNrZ3JvdW5kLXByZWxvYWQuICovXG4gIHByaXZhdGUgc2tpcFNsaWNlUHJlZmV0Y2ggPSBmYWxzZTtcbiAgcHJpdmF0ZSBwcmVmZXRjaFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG9zdDogU2xpY2VDYWNoZUhvc3QpIHt9XG5cbiAgLy8g4pSA4pSAIGNvbmZpZ3VyYXRpb24gKHBlciBpbWFnZSwgZnJvbSBwbG90KCkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBTaXplIHRoZSBjYWNoZSBmb3IgdGhlIGxvYWRlZCBpbWFnZToga2VlcCB0aGUgd2hvbGUgc3RhY2sgcmVzaWRlbnRcbiAgICogIChjYXBwZWQpIHNvIHRoZSBiYWNrZ3JvdW5kIGxvYWRlciBmaWxscyBldmVyeSBzbGljZSB3aXRob3V0IGV2aWN0aW5nXG4gICAqICBpdHNlbGY7IHNraXAgcHJlbG9hZGluZyBlbnRpcmVseSB3aGVuIGV2ZW4gdGhlIGNvYXJzZXN0IGxldmVsJ3MgdGlsZVxuICAgKiAgZ3JpZCBpcyB0b28gbGFyZ2UgKGl0cyBzbGljZXMgb25seSBleGlzdCBhdCBmdWxsIHJlc29sdXRpb24pLiAqL1xuICBjb25maWd1cmUoc3RhY2tEZXB0aDogbnVtYmVyLCBjb2Fyc2VGaXRUaWxlczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5za2lwU2xpY2VQcmVmZXRjaCA9IGNvYXJzZUZpdFRpbGVzID4gdGhpcy5NQVhfUFJFRkVUQ0hfRklUX1RJTEVTO1xuICAgIHRoaXMubWF4Q2FjaGVkU2xpY2VzID0gc3RhY2tEZXB0aCA+IDEgPyBNYXRoLm1pbih0aGlzLk1BWF9DQUNIRURfU0xJQ0VTX0NBUCwgc3RhY2tEZXB0aCkgOiAxO1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgTFJVIGNhcCAodGhlIHZpZXdlciBzaXplcyBpdHMgdGlsZSBjYWNoZSBmcm9tIGl0KS4gKi9cbiAgbWF4U2xpY2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWF4Q2FjaGVkU2xpY2VzO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIHBlci1jaGFubmVsIGdyb3VwcyAob24gYSBmcmVzaCBwbG90KS4gKi9cbiAgY2xlYXJDaGFubmVsR3JvdXBzKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG92ZXIgdGhlIHNsaWNlIHRoZSB2aWV3ZXIganVzdCBvcGVuZWQgKHdvcmxkIGl0ZW0gMCkuIENvbXBvc2l0ZTogc2VlZFxuICAgKiB0aGUgY2FjaGUgd2l0aCBpdCwgc28gc2NydWJiaW5nIGJhY2sgdG8gaXQgbGF0ZXIgaXMgYW4gaW5zdGFudCBvcGFjaXR5XG4gICAqIHRvZ2dsZSwgbm90IGEgcmUtb3Blbi4gTXVsdGljaGFubmVsOiBkcm9wIHRoYXQgc2luZ2xlIChjaGFubmVsLTApIGltYWdlIGFuZFxuICAgKiBhZGQgdGhlIHNsaWNlJ3MgY2hhbm5lbCBncm91cCBpbnN0ZWFkOyB0aGUgYmFja2dyb3VuZCBsb2FkZXIgLyBMUlUgdGhlblxuICAgKiBwcmUtZmlsbHMgdGhlIG90aGVyIHNsaWNlcycgZ3JvdXBzIHNvIHotc2NydWIgaXMgZmxpY2tlci1mcmVlLlxuICAgKi9cbiAgYWRvcHRPcGVuZWRTbGljZSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3ZXIgPSB0aGlzLmhvc3Qudmlld2VyKCk7XG4gICAgaWYgKHRoaXMuaG9zdC5pc011bHRpQ2hhbm5lbCgpKSB7XG4gICAgICBxdWlldCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0MCA9IHZpZXdlcj8ud29ybGQ/LmdldEl0ZW1BdD8uKDApO1xuICAgICAgICBpZiAodmlld2VyICYmIGl0MCkgdmlld2VyLndvcmxkLnJlbW92ZUl0ZW0oaXQwKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRDaGFubmVsU2xpY2Uoeik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0SXRlbSA9IHZpZXdlcj8ud29ybGQ/LmdldEl0ZW1BdD8uKDApO1xuICAgIGlmIChmaXJzdEl0ZW0pIHRoaXMuc2VlZENvbXBvc2l0ZSh6LCBmaXJzdEl0ZW0pO1xuICB9XG5cbiAgLyoqIFNlZWQgdGhlIGNhY2hlIHdpdGggdGhlIGp1c3Qtb3BlbmVkIGNvbXBvc2l0ZSBzbGljZSAod29ybGQgaXRlbSAwKSwgc29cbiAgICogIHNjcnViYmluZyBiYWNrIHRvIGl0IGxhdGVyIGlzIGFuIGluc3RhbnQgb3BhY2l0eSB0b2dnbGUsIG5vdCBhIHJlLW9wZW4uICovXG4gIHNlZWRDb21wb3NpdGUoejogbnVtYmVyLCBpdGVtOiBPc2RUaWxlZEltYWdlTGlrZSk6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VJdGVtcy5zZXQoeiwgaXRlbSk7XG4gICAgdGhpcy50b3VjaFNsaWNlTHJ1KHopO1xuICB9XG5cbiAgLy8g4pSA4pSAIHNsaWNlIGRpc3BsYXkgKHNldFpJbmRleCdzIGNhY2hlIHdvcmspIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBTaG93IHNsaWNlIHo6IHJldmVhbCBpdCBpbnN0YW50bHkgd2hlbiBjYWNoZWQgKHJlLXRpbnRpbmcgYSBzdGFsZVxuICAgKiAgbXVsdGljaGFubmVsIGdyb3VwKSwgb3RoZXJ3aXNlIGFkZCBpdCBvbmNlLiBUaGUgY3VycmVudCBzbGljZSBzdGF5c1xuICAgKiAgdmlzaWJsZSB1bnRpbCB0aGUgbmV3IG9uZSBpcyBpbiDigJQgbm8gd2hpdGUtZmxpY2tlci4gKi9cbiAgc2hvd1NsaWNlKHo6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmhvc3QuaXNNdWx0aUNoYW5uZWwoKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLmdldCh6KTtcbiAgICAgIGlmIChncm91cCAmJiBncm91cC5sZW5ndGggJiYgZ3JvdXAuc29tZSgoaXQpID0+IGl0ICYmIHRoaXMuc2xpY2VJbldvcmxkKGl0KSkpIHtcbiAgICAgICAgdGhpcy5yZXZlYWxDaGFubmVsU2xpY2Uoeik7XG4gICAgICAgIC8vIElmIGEgZGlzcGxheSBjaGFuZ2UgaGFwcGVuZWQgd2hpbGUgdGhpcyBzbGljZSB3YXMgY2FjaGVkLCBpdHMgdGlsZXNcbiAgICAgICAgLy8gaG9sZCBhIHN0YWxlIHRpbnQg4oCUIHJlLWFwcGx5IG5vdyAoaXQncyB0aGUgdmlzaWJsZSBzbGljZSwgc28gdGhlXG4gICAgICAgIC8vIGJyaWVmIHJlc3RvcmUgZmxhc2ggaXMgYWNjZXB0YWJsZSwgbGlrZSBhIGZyZXNoIGxvYWQpLlxuICAgICAgICBpZiAodGhpcy5zdGFsZVNsaWNlcy5kZWxldGUoeikpIHRoaXMuaW52YWxpZGF0ZVNsaWNlKHopO1xuICAgICAgICB0aGlzLnRvdWNoU2xpY2VMcnUoeik7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVQcmVmZXRjaCgpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5zbGljZXNMb2FkaW5nLmhhcyh6KSkge1xuICAgICAgICB0aGlzLmFkZENoYW5uZWxTbGljZSh6KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5zbGljZUl0ZW1zLmdldCh6KTtcbiAgICBpZiAoY2FjaGVkICYmIHRoaXMuc2xpY2VJbldvcmxkKGNhY2hlZCkpIHtcbiAgICAgIC8vIEluc3RhbnQ6IHJldmVhbCB0aGUgY2FjaGVkIHNsaWNlLCBoaWRlIHRoZSBvdGhlcnMg4oCUIG5vIGZldGNoL2RlY29kZS5cbiAgICAgIHRoaXMuc2hvd09ubHlTbGljZSh6KTtcbiAgICAgIHRoaXMudG91Y2hTbGljZUxydSh6KTtcbiAgICAgIHRoaXMuc2NoZWR1bGVQcmVmZXRjaCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zbGljZXNMb2FkaW5nLmhhcyh6KSkgcmV0dXJuOyAvLyBhbHJlYWR5IGJlaW5nIGFkZGVkOyBzdWNjZXNzIHJldmVhbHMgaXRcbiAgICB0aGlzLmFkZFNsaWNlKHopO1xuICB9XG5cbiAgLyoqIEFkZCBhIG5ldmVyLXNlZW4gc2xpY2UgYXMgYSBoaWRkZW4gdGlsZWQgaW1hZ2UsIHRoZW4gcmV2ZWFsIGl0IG9uY2UgbG9hZGVkXG4gICAqICAoY29tcG9zaXRlIHBhdGg7IG11bHRpY2hhbm5lbCByb3V0ZXMgdG8gYWRkQ2hhbm5lbFNsaWNlKS4gKi9cbiAgcHJpdmF0ZSBhZGRTbGljZSh6OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaG9zdC5oYXNJbWFnZSgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaG9zdC5pc011bHRpQ2hhbm5lbCgpKSB7XG4gICAgICB0aGlzLmFkZENoYW5uZWxTbGljZSh6KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld2VyID0gdGhpcy5ob3N0LnZpZXdlcigpO1xuICAgIGlmICghdmlld2VyKSByZXR1cm47XG4gICAgdGhpcy5zbGljZXNMb2FkaW5nLmFkZCh6KTtcbiAgICAvLyBUYWcgdGhpcyBhZGQgdG8gdGhlIGN1cnJlbnQgaW1hZ2U7IGlmIHRoZSB1c2VyIHN3aXRjaGVzIGltYWdlcyBiZWZvcmUgaXRcbiAgICAvLyByZXNvbHZlcywgdGhlIHN0YWxlIGNhbGxiYWNrIGlzIGRyb3BwZWQgKHRoZSBhZGQgYmVsb25ncyB0byB0aGUgb2xkIHN0YWNrKS5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuc2xpY2VMb2FkVG9rZW47XG4gICAgY29uc3QgdHMgPSB0aGlzLmhvc3QuYnVpbGRUaWxlU291cmNlKHopO1xuICAgIHRyeSB7XG4gICAgICAvLyBhZGRUaWxlZEltYWdlIGxpdmVzIG9uIHRoZSBWaWV3ZXIgKGl0IHF1ZXVlcyB0aGUgYWRkIGludG8gdGhlIHdvcmxkKS5cbiAgICAgIHZpZXdlci5hZGRUaWxlZEltYWdlKHtcbiAgICAgICAgdGlsZVNvdXJjZTogdHMsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHdpZHRoOiAxLCAvLyBtYXRjaCB0aGUgcHJpbWFyeSBpbWFnZSdzIG5vcm1hbGl6ZWQgcGxhY2VtZW50XG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIC8vIExvYWQgdGlsZXMgZXZlbiB0aG91Z2ggaXQncyBoaWRkZW4g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIHRoZSBiYWNrZ3JvdW5kXG4gICAgICAgIC8vIGxvYWRlciBmaWxsIGV2ZXJ5IHNsaWNlJ3MgY2FjaGUgc28gc2NydWJiaW5nIGdldHMgcHJvZ3Jlc3NpdmVseSBzbW9vdGhlci5cbiAgICAgICAgcHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgc3VjY2VzczogKGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gZT8uaXRlbTtcbiAgICAgICAgICBpZiAodG9rZW4gIT09IHRoaXMuc2xpY2VMb2FkVG9rZW4pIHtcbiAgICAgICAgICAgIC8vIEltYWdlIHN3aXRjaGVkIHdoaWxlIHRoaXMgd2FzIGFkZGluZyDigJQgZHJvcCB0aGUgb3JwaGFuIHNvIGl0IHN0b3BzXG4gICAgICAgICAgICAvLyBsb2FkaW5nIGluc3RlYWQgb2Ygc3RyZWFtaW5nIHRpbGVzIGZvciB0aGUgYWJhbmRvbmVkIHN0YWNrLlxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgcXVpZXQoKCkgPT4gdGhpcy5ob3N0LnZpZXdlcigpPy53b3JsZD8ucmVtb3ZlSXRlbShpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2xpY2VzTG9hZGluZy5kZWxldGUoeik7XG4gICAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5zbGljZUl0ZW1zLnNldCh6LCBpdGVtKTtcbiAgICAgICAgICB0aGlzLnRvdWNoU2xpY2VMcnUoeik7XG4gICAgICAgICAgdGhpcy5ob3N0Lm9uQ29tcG9zaXRlU2xpY2VBZGRlZCh6KTtcbiAgICAgICAgICAvLyBPbmx5IHJldmVhbCBpZiB0aGUgdXNlciBpcyBzdGlsbCBvbiB0aGlzIHNsaWNlIChmYXN0IHNjcnViYmluZyBtYXlcbiAgICAgICAgICAvLyBoYXZlIG1vdmVkIG9uIOKAlCBsZWF2ZSBpdCBjYWNoZWQvaGlkZGVuIGZvciBhIGxhdGVyIHJldmlzaXQpLlxuICAgICAgICAgIGlmICh6ID09PSB0aGlzLmhvc3QuY3VycmVudFooKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93T25seVNsaWNlKHopO1xuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVByZWZldGNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZXZpY3RTbGljZUxydSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0b2tlbiA9PT0gdGhpcy5zbGljZUxvYWRUb2tlbikgdGhpcy5zbGljZXNMb2FkaW5nLmRlbGV0ZSh6KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zbGljZXNMb2FkaW5nLmRlbGV0ZSh6KTtcbiAgICAgIGNvbnNvbGUud2FybignW09TRF0gZmFpbGVkIHRvIGFkZCB6LXNsaWNlJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIHNsaWNlIHoncyBjaGFubmVsIGdyb3VwOiBvbmUgYWRkaXRpdmVseS1jb21wb3NpdGVkICgnbGlnaHRlcicgPSBGaWppXG4gICAqIFwiQ29tcG9zaXRlXCIpIFRpbGVkSW1hZ2UgcGVyIGNoYW5uZWwsIGhpZGRlbiAob3BhY2l0eSAwKSB1bnRpbCByZXZlYWxlZC5cbiAgICogVGhlIHZpc2libGUgY2hhbm5lbHMnIGFyZSBwcmVsb2FkZWQsIHNvIHRoZSBiYWNrZ3JvdW5kIGxvYWRlciBjYW4gcHJlLWZpbGxcbiAgICogZXZlcnkgc2xpY2U7IGEgaGlkZGVuIGNoYW5uZWwncyBsb2FkcyBub3RoaW5nIHVudGlsIGl0IGlzIHNob3duIChhIDIyLWNoYW5uZWxcbiAgICogcGxhdGUgZmV0Y2hlZCBhbmQgZGVjb2RlZCBldmVyeSBjaGFubmVsJ3MgdGlsZXMsIG92ZXJmbG93aW5nIHRoZSB0aWxlIGNhY2hlOlxuICAgKiB0aWxlcyBldmljdGVkIG1pZC1jb252ZXJzaW9uIGZhaWxlZCB0byBkZWNvZGUpLlxuICAgKiBDYWNoZWQgc28gYSByZXZpc2l0IGlzIGFuIGluc3RhbnQgb3BhY2l0eSB0b2dnbGUg4oCUIG5vIHJlLWZldGNoLCBub1xuICAgKiB3aGl0ZS1mbGlja2VyLiBNaXJyb3JzIGFkZFNsaWNlIGZvciB0aGUgY29tcG9zaXRlIHBhdGguXG4gICAqL1xuICBhZGRDaGFubmVsU2xpY2UoejogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhvc3QuaGFzSW1hZ2UoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLmhhcyh6KSB8fCB0aGlzLnNsaWNlc0xvYWRpbmcuaGFzKHopKSByZXR1cm47XG4gICAgY29uc3Qgdmlld2VyID0gdGhpcy5ob3N0LnZpZXdlcigpO1xuICAgIGlmICghdmlld2VyKSByZXR1cm47XG4gICAgdGhpcy5zbGljZXNMb2FkaW5nLmFkZCh6KTtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuc2xpY2VMb2FkVG9rZW47XG4gICAgY29uc3QgbiA9IHRoaXMuaG9zdC5jaGFubmVsQ291bnQoKTtcbiAgICBjb25zdCBncm91cDogQXJyYXk8T3NkVGlsZWRJbWFnZUxpa2UgfCB1bmRlZmluZWQ+ID0gbmV3IEFycmF5KG4pO1xuICAgIGxldCBzZXR0bGVkID0gMDtcbiAgICBjb25zdCBvblNldHRsZWQgPSAoKSA9PiB7XG4gICAgICBpZiAoKytzZXR0bGVkIDwgbikgcmV0dXJuO1xuICAgICAgaWYgKHRva2VuICE9PSB0aGlzLnNsaWNlTG9hZFRva2VuKSByZXR1cm47IC8vIGltYWdlIHN3aXRjaGVkIG1pZC1hZGRcbiAgICAgIHRoaXMuc2xpY2VzTG9hZGluZy5kZWxldGUoeik7XG4gICAgICB0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLnNldCh6LCBncm91cCk7XG4gICAgICB0aGlzLnN0YWxlU2xpY2VzLmRlbGV0ZSh6KTsgLy8gZnJlc2hseSB0aW50ZWQgYXQgdGhlIGN1cnJlbnQgZGlzcGxheSBzdGF0ZVxuICAgICAgdGhpcy50b3VjaFNsaWNlTHJ1KHopO1xuICAgICAgaWYgKHogPT09IHRoaXMuaG9zdC5jdXJyZW50WigpKSB7XG4gICAgICAgIHRoaXMucmV2ZWFsQ2hhbm5lbFNsaWNlKHopOyAvLyB0aWxlcyBtYXkgc3RpbGwgYmUgZGVjb2Rpbmc7IG9wYWNpdHkgaXMgc2V0IG5vd1xuICAgICAgICB0aGlzLnNjaGVkdWxlUHJlZmV0Y2goKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZpY3RTbGljZUxydSgpO1xuICAgIH07XG4gICAgZm9yIChsZXQgYyA9IDA7IGMgPCBuOyBjKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZpZXdlci5hZGRUaWxlZEltYWdlKHtcbiAgICAgICAgICB0aWxlU291cmNlOiB0aGlzLmhvc3QuYnVpbGRUaWxlU291cmNlKHosIGMpLFxuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMCxcbiAgICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgICBvcGFjaXR5OiAwLCAvLyByZXZlYWxlZCBieSByZXZlYWxDaGFubmVsU2xpY2Ugb25jZSB0aGUgZ3JvdXAgaXMgaW5cbiAgICAgICAgICBjb21wb3NpdGVPcGVyYXRpb246ICdsaWdodGVyJyxcbiAgICAgICAgICBwcmVsb2FkOiB0aGlzLmhvc3QuY2hhbm5lbFZpc2libGUoYyksXG4gICAgICAgICAgc3VjY2VzczogKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlPy5pdGVtO1xuICAgICAgICAgICAgaWYgKHRva2VuICE9PSB0aGlzLnNsaWNlTG9hZFRva2VuKSB7XG4gICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgcXVpZXQoKCkgPT4gdGhpcy5ob3N0LnZpZXdlcigpPy53b3JsZD8ucmVtb3ZlSXRlbShpdGVtKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0pIGdyb3VwW2NdID0gaXRlbTtcbiAgICAgICAgICAgIG9uU2V0dGxlZCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICgpID0+IG9uU2V0dGxlZCgpLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tPU0RdIGZhaWxlZCB0byBhZGQgY2hhbm5lbCBzbGljZSBpbWFnZScsIHosIGMsIGVycik7XG4gICAgICAgIG9uU2V0dGxlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXZlYWwgc2xpY2UgeidzIGNoYW5uZWwgZ3JvdXAgKGVhY2ggdmlzaWJsZSBjaGFubmVsIOKGkiBvcGFjaXR5IDEpIGFuZFxuICAgKiAgaGlkZSBldmVyeSBvdGhlciBjYWNoZWQgc2xpY2UncyBncm91cC4gSW5zdGFudDsgbm8gZmV0Y2gvZGVjb2RlLiBPbmx5IHRoZVxuICAgKiAgdmlzaWJsZSBjaGFubmVscyBrZWVwIGxvYWRpbmcgKHByZWxvYWQpOiBhIGhpZGRlbiBjaGFubmVsJ3MgdGlsZXMgYXJlIG5vdFxuICAgKiAgZmV0Y2hlZCBvciBkZWNvZGVkIHVudGlsIGl0IGlzIHNob3duLiAqL1xuICByZXZlYWxDaGFubmVsU2xpY2UoejogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaGlkZGVuID0gbmV3IFNldDxPc2RUaWxlZEltYWdlTGlrZT4oKTtcbiAgICBmb3IgKGNvbnN0IFt6eiwgZ3JvdXBdIG9mIHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHp6ID09PSB6O1xuICAgICAgZ3JvdXAuZm9yRWFjaCgoaXQsIGMpID0+IHtcbiAgICAgICAgaWYgKCFpdCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB2aXNpYmxlID0gdGhpcy5ob3N0LmNoYW5uZWxWaXNpYmxlKGMpO1xuICAgICAgICBpZiAoIXZpc2libGUpIGhpZGRlbi5hZGQoaXQpO1xuICAgICAgICBxdWlldCgoKSA9PiBpdC5zZXRQcmVsb2FkPy4odmlzaWJsZSkpO1xuICAgICAgICBxdWlldCgoKSA9PiBpdC5zZXRPcGFjaXR5KGFjdGl2ZSAmJiB2aXNpYmxlID8gMSA6IDApKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmRyb3BRdWV1ZWRUaWxlcyhoaWRkZW4pO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIHRpbGUgcmVxdWVzdHMgc3RpbGwgd2FpdGluZyBpbiBPU0QncyBxdWV1ZSBmb3IgYGl0ZW1zYCAoY2hhbm5lbHMganVzdCBoaWRkZW4pLCBzb1xuICAgKiAgdGhlIHZpc2libGUgY2hhbm5lbHMnIHRpbGVzIGFyZSBub3Qgc3R1Y2sgYmVoaW5kIHRoZW0uIEEgcmVxdWVzdCBhbHJlYWR5IHNlbnQgY29tcGxldGVzLiAqL1xuICBwcml2YXRlIGRyb3BRdWV1ZWRUaWxlcyhpdGVtczogU2V0PE9zZFRpbGVkSW1hZ2VMaWtlPik6IHZvaWQge1xuICAgIGNvbnN0IGxvYWRlciA9IHRoaXMuaG9zdC52aWV3ZXIoKT8uaW1hZ2VMb2FkZXI7XG4gICAgaWYgKCFpdGVtcy5zaXplIHx8ICFBcnJheS5pc0FycmF5KGxvYWRlcj8uam9iUXVldWUpKSByZXR1cm47XG4gICAgbG9hZGVyLmpvYlF1ZXVlID0gKGxvYWRlci5qb2JRdWV1ZSBhcyBPc2RRdWV1ZWRUaWxlSm9iW10pLmZpbHRlcigoam9iKSA9PiB7XG4gICAgICBpZiAoIWl0ZW1zLmhhcyhqb2I/LnRpbGU/LnRpbGVkSW1hZ2UgYXMgT3NkVGlsZWRJbWFnZUxpa2UpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHF1aWV0KCgpID0+IGpvYi5hYm9ydD8uKCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNob3cgdGhlIGdpdmVuIGNvbXBvc2l0ZSBzbGljZSAob3BhY2l0eSAxKSBhbmQgaGlkZSBhbGwgb3RoZXIgY2FjaGVkIHNsaWNlcy4gKi9cbiAgcHJpdmF0ZSBzaG93T25seVNsaWNlKHo6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW3p6LCBpdGVtXSBvZiB0aGlzLnNsaWNlSXRlbXMpIHtcbiAgICAgIHF1aWV0KCgpID0+IGl0ZW0uc2V0T3BhY2l0eSh6eiA9PT0geiA/IDEgOiAwKSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIGRpc3BsYXkgaW52YWxpZGF0aW9uIChtdWx0aWNoYW5uZWwpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZS10aW50IGFmdGVyIGEgZGlzcGxheSBjaGFuZ2U6IGludmFsaWRhdGUgT05MWSB0aGUgdmlzaWJsZSBzbGljZSdzXG4gICAqICBjaGFubmVsIGltYWdlcyDigJQgaW52YWxpZGF0aW5nIHRoZSB3aG9sZSB3b3JsZCB3b3VsZCByZS1wcm9jZXNzIGV2ZXJ5XG4gICAqICBoaWRkZW4vcHJlbG9hZGVkIHNsaWNlJ3MgdGlsZXMgKGh1bmRyZWRzKSwgZmxvb2RpbmcgT1NEIGFuZCB3YXN0aW5nIHdvcmtcbiAgICogIG9uIHRpbGVzIHRoYXQgYXJlbid0IG9uIHNjcmVlbi4gVGhlIG90aGVyIGNhY2hlZCBzbGljZXMgYXJlIG1hcmtlZCBzdGFsZVxuICAgKiAgYW5kIHJlLXRpbnRlZCBsYXppbHkgd2hlbiByZXZlYWxlZC4gKi9cbiAgaW52YWxpZGF0ZUNoYW5uZWxEaXNwbGF5KHo6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW52YWxpZGF0ZVNsaWNlKHopO1xuICAgIHRoaXMuc3RhbGVTbGljZXMuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IHp6IG9mIHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMua2V5cygpKSB7XG4gICAgICBpZiAoenogIT09IHopIHRoaXMuc3RhbGVTbGljZXMuYWRkKHp6KTtcbiAgICB9XG4gIH1cblxuICAvKiogSW52YWxpZGF0ZSAocmVzdG9yZSArIHJlLXJlY29sb3IpIGp1c3QgdGhlIGNoYW5uZWwgaW1hZ2VzIG9mIG9uZSBjYWNoZWRcbiAgICogIHNsaWNlLiBBIHNoYXJlZCB0aW1lc3RhbXAgYmF0Y2hlcyB0aGUgcGVyLWltYWdlIGludmFsaWRhdGlvbnMgaW50byBvbmVcbiAgICogIHByb2Nlc3NpbmcgcGFzcyAoT1NEIGRlZHVwZXMgdGlsZXMgYWxyZWFkeSBzdGFtcGVkIGF0ID49IHRTdGFtcCkuICovXG4gIHByaXZhdGUgaW52YWxpZGF0ZVNsaWNlKHo6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jaGFubmVsU2xpY2VJdGVtcy5nZXQoeikgPz8gW107XG4gICAgaWYgKCFncm91cC5sZW5ndGgpIHJldHVybjtcbiAgICAvLyBGZWF0dXJlLXRlc3RlZDogYSBtb2NrZWQgT1NEIG1vZHVsZSAoc3BlY3MpIG1heSBub3QgcHJvdmlkZSBpdC5cbiAgICBjb25zdCB0U3RhbXAgPSB0eXBlb2YgT1NELm5vdyA9PT0gJ2Z1bmN0aW9uJyA/IE9TRC5ub3coKSA6IERhdGUubm93KCk7XG4gICAgZm9yIChjb25zdCBpdCBvZiBncm91cCkge1xuICAgICAgaWYgKGl0ICYmIHR5cGVvZiBpdC5yZXF1ZXN0SW52YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBxdWlldCgoKSA9PiBpdC5yZXF1ZXN0SW52YWxpZGF0ZT8uKHRydWUsIGZhbHNlLCB0U3RhbXApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgYmFja2dyb3VuZCBzdGFjayBwcmVsb2FkaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBEZWJvdW5jZSBzbyBhIGJ1cnN0IG9mIHZpZXdwb3J0L3NsaWNlIGV2ZW50cyBjb2FsZXNjZXMsIHRoZW4gYWR2YW5jZSB0aGVcbiAgICogIGJhY2tncm91bmQgc3RhY2sgbG9hZGVyIGJ5IG9uZSBzbGljZS4gKi9cbiAgc2NoZWR1bGVQcmVmZXRjaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5za2lwU2xpY2VQcmVmZXRjaCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnByZWZldGNoVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnByZWZldGNoVGltZXIpO1xuICAgIHRoaXMucHJlZmV0Y2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkTmV4dEJhY2tncm91bmRTbGljZSgpLCAyMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhY2tncm91bmQtbG9hZCB0aGUgd2hvbGUgc3RhY2s6IGFkZCBlYWNoIG5vdC15ZXQtY2FjaGVkIHNsaWNlIGFzIGFcbiAgICogaGlkZGVuLCBwcmVsb2FkZWQgdGlsZWQgaW1hZ2UsIG9uZSBhdCBhIHRpbWUsIHdvcmtpbmcgb3V0d2FyZCBmcm9tIHRoZVxuICAgKiBjdXJyZW50IHNsaWNlIOKAlCBhbmQgbmV2ZXIgYmxvY2tpbmcgdGhlIHZpc2libGUgc2xpY2UgKGl0IHlpZWxkcyB3aGlsZSB0aGVcbiAgICogY3VycmVudCB2aWV3IGlzIHN0aWxsIHN0cmVhbWluZyB0aWxlczsgb25seSBvbmUgc2xpY2UgaXMgaW4gZmxpZ2h0IGF0IGFcbiAgICogdGltZSBzbyB0aGUgb24tc2NyZWVuIHRpbGVzIGFsd2F5cyB3aW4gdGhlIGNvbm5lY3Rpb24pLlxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkTmV4dEJhY2tncm91bmRTbGljZSgpOiB2b2lkIHtcbiAgICB0aGlzLnByZWZldGNoVGltZXIgPSBudWxsO1xuICAgIGlmICghdGhpcy5ob3N0Lmhhc0ltYWdlKCkpIHJldHVybjtcbiAgICBjb25zdCBzbGljZUNvdW50ID0gdGhpcy5ob3N0LnNsaWNlQ291bnQoKTtcbiAgICBpZiAoc2xpY2VDb3VudCA8PSAxKSByZXR1cm47IC8vIG5vdCBhIHN0YWNrIOKAlCBub3RoaW5nIHRvIHByZWxvYWRcbiAgICAvLyBZaWVsZCB0byB0aGUgdmlzaWJsZSBzbGljZSB3aGlsZSBpdCdzIHN0aWxsIHN0cmVhbWluZyB0aWxlcy5cbiAgICBpZiAodGhpcy5zbGljZVRpbGVzTG9hZGluZyh0aGlzLmhvc3QuY3VycmVudFooKSkpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVQcmVmZXRjaCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBHYXRlIG9uIHRoZSBpbi1mbGlnaHQgc2xpY2UncyBUSUxFUyBmaW5pc2hpbmcg4oCUIGFkZFRpbGVkSW1hZ2UncyBzdWNjZXNzXG4gICAgLy8gZmlyZXMgb24gYWRkLCBub3Qgb24gdGlsZSBsb2FkLCBzbyB3aXRob3V0IHRoaXMgd2UnZCBhZGQgdGhlIHdob2xlIHN0YWNrXG4gICAgLy8gYXQgb25jZSBhbmQgZmxvb2QgdGhlIGNvbm5lY3Rpb24uIEEgdGltZSBmYWxsYmFjayBwcmV2ZW50cyBhIHN0dWNrIHNsaWNlXG4gICAgLy8gZnJvbSBzdGFsbGluZyB0aGUgcGFzcy5cbiAgICBpZiAodGhpcy5iZ0xvYWRpbmdaICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGFkZGluZyA9IHRoaXMuc2xpY2VzTG9hZGluZy5oYXModGhpcy5iZ0xvYWRpbmdaKTtcbiAgICAgIGNvbnN0IHRpbGVzTG9hZGluZyA9IHRoaXMuc2xpY2VUaWxlc0xvYWRpbmcodGhpcy5iZ0xvYWRpbmdaKTtcbiAgICAgIGNvbnN0IHRpbWVkT3V0ID0gRGF0ZS5ub3coKSAtIHRoaXMuYmdMb2FkaW5nU2luY2UgPiA4MDAwO1xuICAgICAgaWYgKChhZGRpbmcgfHwgdGlsZXNMb2FkaW5nKSAmJiAhdGltZWRPdXQpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVByZWZldGNoKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYmdMb2FkaW5nWiA9IG51bGw7IC8vIHRoYXQgc2xpY2UncyB0aWxlcyBhcmUgaW4gKG9yIGdhdmUgdXApIOKAlCBhZHZhbmNlXG4gICAgfVxuICAgIGNvbnN0IG5leHQgPSB0aGlzLm5lYXJlc3RVbmNhY2hlZFNsaWNlKHNsaWNlQ291bnQpO1xuICAgIGlmIChuZXh0ID09IG51bGwpIHJldHVybjsgLy8gd2hvbGUgc3RhY2sgY2FjaGVkIOKAlCBkb25lXG4gICAgdGhpcy5iZ0xvYWRpbmdaID0gbmV4dDtcbiAgICB0aGlzLmJnTG9hZGluZ1NpbmNlID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmJnQXR0ZW1wdGVkLmFkZChuZXh0KTtcbiAgICB0aGlzLmFkZFNsaWNlKG5leHQpOyAvLyBoaWRkZW4gKyBwcmVsb2FkIChhZGRlZCB3aXRoIG9wYWNpdHkgMDsgbm90IHJldmVhbGVkKVxuICAgIHRoaXMuc2NoZWR1bGVQcmVmZXRjaCgpOyAvLyBwb2xsIHVudGlsIGl0cyB0aWxlcyBsb2FkLCB0aGVuIGFkdmFuY2VcbiAgfVxuXG4gIC8qKiBUaGUgbm90LXlldC1jYWNoZWQgc2xpY2UgY2xvc2VzdCB0byB0aGUgY3VycmVudCBvbmUgKGxvYWQgbmVhcmVzdCBmaXJzdCksXG4gICAqICBza2lwcGluZyBhbnkgYWxyZWFkeSBhdHRlbXB0ZWQgc28gYSBmYWlsZWQvc2xvdyBvbmUgaXNuJ3QgcmV0cmllZCBpbiBhIGxvb3AuICovXG4gIHByaXZhdGUgbmVhcmVzdFVuY2FjaGVkU2xpY2Uoc2xpY2VDb3VudDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgY3VyID0gdGhpcy5ob3N0LmN1cnJlbnRaKCk7XG4gICAgZm9yIChsZXQgZCA9IDA7IGQgPCBzbGljZUNvdW50OyBkKyspIHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBkID09PSAwID8gW2N1cl0gOiBbY3VyIC0gZCwgY3VyICsgZF07XG4gICAgICBmb3IgKGNvbnN0IHogb2YgY2FuZGlkYXRlcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA+PSAwICYmXG4gICAgICAgICAgeiA8IHNsaWNlQ291bnQgJiZcbiAgICAgICAgICAhdGhpcy5zbGljZUNhY2hlSGFzKHopICYmXG4gICAgICAgICAgIXRoaXMuc2xpY2VzTG9hZGluZy5oYXMoeikgJiZcbiAgICAgICAgICAhdGhpcy5iZ0F0dGVtcHRlZC5oYXMoeilcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCBiYWNrZ3JvdW5kIHN0YWNrIHByZWxvYWRpbmcgYW5kIGludmFsaWRhdGUgYW55IGluLWZsaWdodCBzbGljZSBhZGQuXG4gICAqIENhbGxlZCB3aGVuIGEgZGlmZmVyZW50IGltYWdlIGlzIHNlbGVjdGVkIHNvIHRoZSBwcmV2aW91cyBzdGFjayBzdG9wc1xuICAgKiBsb2FkaW5nIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZmluaXNoaW5nIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgY2FuY2VsQmFja2dyb3VuZExvYWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJlZmV0Y2hUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucHJlZmV0Y2hUaW1lcik7XG4gICAgICB0aGlzLnByZWZldGNoVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnNsaWNlc0xvYWRpbmcuY2xlYXIoKTtcbiAgICB0aGlzLmJnTG9hZGluZ1ogPSBudWxsO1xuICAgIHRoaXMuYmdBdHRlbXB0ZWQuY2xlYXIoKTtcbiAgICB0aGlzLnNsaWNlTG9hZFRva2VuKys7IC8vIGRyb3AgcGVuZGluZyBhZGRUaWxlZEltYWdlIGNhbGxiYWNrcyBmcm9tIHRoZSBvbGQgaW1hZ2VcbiAgICAvLyBBYm9ydCBpbi1mbGlnaHQgYmFja2dyb3VuZCB0aWxlcyBpbW1lZGlhdGVseSBieSBkcm9wcGluZyB0aGUgaGlkZGVuXG4gICAgLy8gcHJlbG9hZGVkIHNsaWNlcyAocmVtb3ZlSXRlbSBjYW5jZWxzIHRoZWlyIHBlbmRpbmcgdGlsZSBsb2FkcykuIEtlZXAgdGhlXG4gICAgLy8gdmlzaWJsZSBzbGljZSBzbyB0aGUgY3VycmVudCB2aWV3IGRvZXNuJ3QgYmxhbmsgYmVmb3JlIHRoZSBuZXh0IHBsb3QuXG4gICAgdGhpcy5kcm9wSGlkZGVuU2xpY2VzKCk7XG4gIH1cblxuICAvKiogUmVtb3ZlIGV2ZXJ5IGNhY2hlZCBzbGljZSBleGNlcHQgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgb25lLCBhYm9ydGluZ1xuICAgKiAgdGhlaXIgaW4tZmxpZ2h0IHRpbGUgcmVxdWVzdHMuICovXG4gIHByaXZhdGUgZHJvcEhpZGRlblNsaWNlcygpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy5ob3N0LnZpZXdlcigpO1xuICAgIGlmICghdikgcmV0dXJuO1xuICAgIGNvbnN0IGN1ciA9IHRoaXMuaG9zdC5jdXJyZW50WigpO1xuICAgIGZvciAoY29uc3QgW3osIGl0ZW1dIG9mIFsuLi50aGlzLnNsaWNlSXRlbXNdKSB7XG4gICAgICBpZiAoeiA9PT0gY3VyKSBjb250aW51ZTtcbiAgICAgIHRoaXMuc2xpY2VJdGVtcy5kZWxldGUoeik7XG4gICAgICBxdWlldCgoKSA9PiB2LndvcmxkLnJlbW92ZUl0ZW0oaXRlbSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFt6LCBncm91cF0gb2YgWy4uLnRoaXMuY2hhbm5lbFNsaWNlSXRlbXNdKSB7XG4gICAgICBpZiAoeiA9PT0gY3VyKSBjb250aW51ZTtcbiAgICAgIHRoaXMuY2hhbm5lbFNsaWNlSXRlbXMuZGVsZXRlKHopO1xuICAgICAgZm9yIChjb25zdCBpdCBvZiBncm91cCkge1xuICAgICAgICBpZiAoaXQpIHtcbiAgICAgICAgICBxdWlldCgoKSA9PiB2LndvcmxkLnJlbW92ZUl0ZW0oaXQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNsaWNlTHJ1ID0gdGhpcy5zbGljZUNhY2hlSGFzKGN1cikgPyBbY3VyXSA6IFtdO1xuICB9XG5cbiAgLy8g4pSA4pSAIGNhY2hlIGJvb2trZWVwaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBXaGV0aGVyIHNsaWNlIHogaXMgaW4gdGhlIGFjdGl2ZSBjYWNoZSAoY29tcG9zaXRlIHNpbmdsZSBpbWFnZSwgb3IgdGhlXG4gICAqICBtdWx0aWNoYW5uZWwgcGVyLWNoYW5uZWwgZ3JvdXApLiAqL1xuICBwcml2YXRlIHNsaWNlQ2FjaGVIYXMoejogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdC5pc011bHRpQ2hhbm5lbCgpID8gdGhpcy5jaGFubmVsU2xpY2VJdGVtcy5oYXMoeikgOiB0aGlzLnNsaWNlSXRlbXMuaGFzKHopO1xuICB9XG5cbiAgLyoqIFRoZSBjYWNoZWQgVGlsZWRJbWFnZShzKSBmb3Igc2xpY2UgeiAoMOKAkzEgZm9yIGNvbXBvc2l0ZSwgTiBmb3IgbXVsdGljaGFubmVsKS4gKi9cbiAgcHJpdmF0ZSBzbGljZUdyb3VwKHo6IG51bWJlcik6IEFycmF5PE9zZFRpbGVkSW1hZ2VMaWtlIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuaG9zdC5pc011bHRpQ2hhbm5lbCgpKSByZXR1cm4gdGhpcy5jaGFubmVsU2xpY2VJdGVtcy5nZXQoeikgPz8gW107XG4gICAgY29uc3QgaXQgPSB0aGlzLnNsaWNlSXRlbXMuZ2V0KHopO1xuICAgIHJldHVybiBpdCA/IFtpdF0gOiBbXTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHNsaWNlIHoncyB0aWxlcyBhcmUgc3RpbGwgc3RyZWFtaW5nIChhbnkgY2FjaGVkIGltYWdlIG5vdCBmdWxseSBsb2FkZWQpLiBBIGhpZGRlblxuICAgKiAgY2hhbm5lbCBsb2FkcyBub3RoaW5nLCBzbyBpdCBuZXZlciBiZWNvbWVzIGZ1bGx5IGxvYWRlZDogb25seSB0aGUgdmlzaWJsZSBjaGFubmVscyBjb3VudCwgb3JcbiAgICogIHRoZSBiYWNrZ3JvdW5kIGxvYWRlciB3b3VsZCB3YWl0IG9uIGl0IGZvcmV2ZXIuICovXG4gIHByaXZhdGUgc2xpY2VUaWxlc0xvYWRpbmcoejogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZyA9IHRoaXMuc2xpY2VHcm91cCh6KTtcbiAgICBpZiAoIWcubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgbXVsdGkgPSB0aGlzLmhvc3QuaXNNdWx0aUNoYW5uZWwoKTtcbiAgICByZXR1cm4gZy5zb21lKFxuICAgICAgKGl0LCBjKSA9PlxuICAgICAgICBpdCAmJlxuICAgICAgICAoIW11bHRpIHx8IHRoaXMuaG9zdC5jaGFubmVsVmlzaWJsZShjKSkgJiZcbiAgICAgICAgdHlwZW9mIGl0LmdldEZ1bGx5TG9hZGVkID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICFpdC5nZXRGdWxseUxvYWRlZCgpLFxuICAgICk7XG4gIH1cblxuICAvKiogUmVtb3ZlIHNsaWNlIHoncyBjYWNoZWQgaW1hZ2UocykgZnJvbSB0aGUgd29ybGQgYW5kIHRoZSBhY3RpdmUgY2FjaGUuICovXG4gIHByaXZhdGUgcmVtb3ZlQ2FjaGVkU2xpY2UoejogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdiA9IHRoaXMuaG9zdC52aWV3ZXIoKTtcbiAgICBpZiAodGhpcy5ob3N0LmlzTXVsdGlDaGFubmVsKCkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jaGFubmVsU2xpY2VJdGVtcy5nZXQoeik7XG4gICAgICB0aGlzLmNoYW5uZWxTbGljZUl0ZW1zLmRlbGV0ZSh6KTtcbiAgICAgIGlmIChncm91cCAmJiB2KVxuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGdyb3VwKSB7XG4gICAgICAgICAgaWYgKGl0KSB7XG4gICAgICAgICAgICBxdWlldCgoKSA9PiB2LndvcmxkLnJlbW92ZUl0ZW0oaXQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2xpY2VJdGVtcy5nZXQoeik7XG4gICAgICB0aGlzLnNsaWNlSXRlbXMuZGVsZXRlKHopO1xuICAgICAgaWYgKGl0ZW0gJiYgdikge1xuICAgICAgICBxdWlldCgoKSA9PiB2LndvcmxkLnJlbW92ZUl0ZW0oaXRlbSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBJcyB0aGUgdGlsZWQgaW1hZ2Ugc3RpbGwgaW4gdGhlIHdvcmxkIChub3QgZXZpY3RlZCk/ICovXG4gIHByaXZhdGUgc2xpY2VJbldvcmxkKGl0ZW06IE9zZFRpbGVkSW1hZ2VMaWtlKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAodGhpcy5ob3N0LnZpZXdlcigpPy53b3JsZC5nZXRJbmRleE9mSXRlbShpdGVtKSA/PyAtMSkgPj0gMDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogTWFyayB6IGFzIG1vc3QtcmVjZW50bHktdXNlZC4gKi9cbiAgcHJpdmF0ZSB0b3VjaFNsaWNlTHJ1KHo6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGkgPSB0aGlzLnNsaWNlTHJ1LmluZGV4T2Yoeik7XG4gICAgaWYgKGkgPj0gMCkgdGhpcy5zbGljZUxydS5zcGxpY2UoaSwgMSk7XG4gICAgdGhpcy5zbGljZUxydS5wdXNoKHopO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIGxlYXN0LXJlY2VudGx5LXVzZWQgY2FjaGVkIHNsaWNlcyBiZXlvbmQgdGhlIGNhcCAobmV2ZXIgdGhlXG4gICAqICBjdXJyZW50IG9uZSksIHJlbW92aW5nIHRoZWlyIHRpbGVkIGltYWdlcyBzbyBtZW1vcnkgc3RheXMgYm91bmRlZC4gKi9cbiAgcHJpdmF0ZSBldmljdFNsaWNlTHJ1KCk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLnNsaWNlTHJ1Lmxlbmd0aCA+IHRoaXMubWF4Q2FjaGVkU2xpY2VzKSB7XG4gICAgICBjb25zdCBjdXIgPSB0aGlzLmhvc3QuY3VycmVudFooKTtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuc2xpY2VMcnUuZmluZEluZGV4KCh6KSA9PiB6ICE9PSBjdXIpO1xuICAgICAgaWYgKGlkeCA8IDApIGJyZWFrO1xuICAgICAgY29uc3QgeiA9IHRoaXMuc2xpY2VMcnUuc3BsaWNlKGlkeCwgMSlbMF07XG4gICAgICB0aGlzLnJlbW92ZUNhY2hlZFNsaWNlKHopO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhciB0aGUgY2FjaGUgKG9uIHRlYXJkb3duIC8gaW1hZ2Ugc3dpdGNoKS4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5zbGljZUl0ZW1zLmNsZWFyKCk7XG4gICAgdGhpcy5jaGFubmVsU2xpY2VJdGVtcy5jbGVhcigpO1xuICAgIHRoaXMuc3RhbGVTbGljZXMuY2xlYXIoKTtcbiAgICB0aGlzLnNsaWNlTHJ1ID0gW107XG4gICAgdGhpcy5zbGljZXNMb2FkaW5nLmNsZWFyKCk7XG4gICAgdGhpcy5iZ0xvYWRpbmdaID0gbnVsbDtcbiAgICB0aGlzLmJnQXR0ZW1wdGVkLmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -39,4 +39,4 @@ export function exportTiffFilename(fileName) {
|
|
|
39
39
|
const stem = (fileName || 'image').replace(/\.[^.]+$/, '');
|
|
40
40
|
return `${stem}_16bit.ome.tif`;
|
|
41
41
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1wcm90b2NvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL3RpbGUtc2VydmVyL3RpbGUtcHJvdG9jb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFzREgsdURBQXVEO0FBQ3ZELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLE9BQWU7SUFDdkQsT0FBTyxHQUFHLEdBQUcsbUJBQW1CLE9BQU8sRUFBRSxDQUFDO0FBQzVDLENBQUM7QUFFRDttREFDbUQ7QUFDbkQsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFLENBQWE7SUFDdEUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUQsT0FBTyxHQUFHLEdBQUcsYUFBYSxPQUFPLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2xILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQVNqRCx3RkFBd0Y7QUFDeEYsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxHQUFXLEVBQ1gsT0FBZSxFQUNmLENBQXlCLEVBQ3pCLGNBQXNCLHNCQUFzQjtJQUU1QyxPQUFPLEdBQUcsR0FBRyxrQkFBa0IsT0FBTyxZQUFZLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxNQUFNLFdBQVcsRUFBRSxDQUFDO0FBQ3pHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsR0FBVyxFQUNYLE9BQWUsRUFDZixDQUFTLEVBQ1QsT0FBMEIsRUFDMUIsWUFBb0I7SUFFcEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRyxPQUFPLEdBQUcsR0FBRyxvQkFBb0IsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBRUQsc0VBQXNFO0FBQ3RFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxRQUFtQztJQUNwRSxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBqaXQtc2VydmljZSB0aWxlIHByb3RvY29sLCBzaGFyZWQgYnkgdGhlIE9wZW5TZWFkcmFnb24gYW5kIG5hcGFyaS1qcyBiYWNrZW5kczogdGhlXG4gKiBgL3RpbGVzL2luZm9gIGRlc2NyaXB0b3IsIGFuZCB0aGUgVVJMcyBvZiBgL3RpbGVzL2luZm9gLCBgL3RpbGVgLCBgL2hpc3RvZ3JhbWAgYW5kXG4gKiBgL2V4cG9ydC90aWZmYC4gRWFjaCBVUkwgc2hhcGUgbGl2ZXMgaGVyZSBvbmNlIOKAlCB0aGUgYmFja2VuZHMgdXNlZCB0byBzdHJpbmctYnVpbGQgdGhlbVxuICogc2VwYXJhdGVseSBhbmQgaGFkIGFscmVhZHkgZHJpZnRlZCAobmFwYXJpJ3MgYC9oaXN0b2dyYW1gIGxhY2tlZCB0aGUgY2FjaGUtYnVzdGVyKS5cbiAqL1xuXG4vKiogT25lIHB5cmFtaWQgbGV2ZWwgZnJvbSBgR0VUIC90aWxlcy9pbmZvYCAocmVzIDAgPSBmdWxsIHJlc29sdXRpb24pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWxlTGV2ZWwge1xuICByZXM6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8qKiBUaWxlLXNvdXJjZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGBHRVQgL3RpbGVzL2luZm9gLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWxlRGVzY3JpcHRvciB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB0aWxlU2l6ZTogbnVtYmVyO1xuICB6OiBudW1iZXI7XG4gIGNoYW5uZWxzOiBudW1iZXI7XG4gIC8qKiBUcnVlIG9ubHkgZm9yIGdlbnVpbmUgbXVsdGktY2hhbm5lbCBjb21wb3NpdGVzIChpbmRleGVkL0xVVC1iZWFyaW5nXG4gICAqICBmbHVvcmVzY2VuY2Ugc3RhY2tzKSB0aGUgY2xpZW50IHNob3VsZCBzcGxpdCBpbnRvIHBlci1jaGFubmVsIGxheWVycy4gVGhlXG4gICAqICBzZXJ2ZXIgc2V0cyBpdDsgYW4gUkdCIHBob3RvIHJlYWQgYXMgc2VwYXJhdGVkIHBsYW5lcyBoYXMgY2hhbm5lbHM+MSBidXRcbiAgICogIG11bHRpY2hhbm5lbD1mYWxzZSwgc28gaXQgc3RheXMgYSBzaW5nbGUgY29tcG9zaXRlIHRpbGUgc291cmNlLiAqL1xuICBtdWx0aWNoYW5uZWw/OiBib29sZWFuO1xuICAvKiogUmVhbCBCaW8tRm9ybWF0cyByZXNvbHV0aW9uIGxldmVscyBhdCB0aGUgZnJvbnQgb2YgYGxldmVsc2A7IHRoZSByZW1haW5pbmdcbiAgICogIGxldmVscyBhcmUgc3ludGhldGljIGNvbXBvc2l0ZWQgb3ZlcnZpZXdzIChubyBwZXItY2hhbm5lbCB0aWxlcykuICovXG4gIHJlYWxMZXZlbHM/OiBudW1iZXI7XG4gIC8qKiBQZXItY2hhbm5lbCBtZXRhZGF0YSAobmFtZS9jb2xvci9iaXREZXB0aC9taW4tbWF4QWxsb3dlZCkgZm9yIG5hdGl2ZSAxNi1iaXRcbiAgICogIHdpbmRvd2luZyArIGhpc3RvZ3JhbTsgbnVsbCBmb3IgcGxhaW4gOC1iaXQvUkdCIHNvdXJjZXMuICovXG4gIGNoYW5uZWxJbmZvPzogQXJyYXk8e1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgY29sb3I/OiBzdHJpbmc7XG4gICAgYml0RGVwdGg/OiBudW1iZXI7XG4gICAgbWluQWxsb3dlZD86IG51bWJlcjtcbiAgICBtYXhBbGxvd2VkPzogbnVtYmVyO1xuICB9PiB8IG51bGw7XG4gIGxldmVsczogVGlsZUxldmVsW107XG4gIC8qKiBQaHlzaWNhbCBwaXhlbCBzaXplIGluIMK1bSAoMCB3aGVuIHRoZSBmb3JtYXQgZG9lc24ndCByZXBvcnQgaXQpLiAqL1xuICBtcHBYPzogbnVtYmVyO1xuICBtcHBZPzogbnVtYmVyO1xuICAvKiogU3BhY2luZyBiZXR3ZWVuIHogc2xpY2VzIGluIMK1bSAoMCBvciBhYnNlbnQgd2hlbiB0aGUgZm9ybWF0IGRvZXNuJ3QgcmVwb3J0IGl0KTogd2hhdFxuICAgKiAgbGV0cyBhIHotc3RhY2sgYmUgZHJhd24gYXMgYSB2b2x1bWUgdG8gc2NhbGUuICovXG4gIG1wcFo/OiBudW1iZXI7XG59XG5cbi8qKiBUaWxlIGNvb3JkaW5hdGVzIGZvciBvbmUgYC90aWxlYCByZXF1ZXN0LiBgY2hhbm5lbCA9PSBudWxsYCAob3Igb21pdHRlZClcbiAqICByZXF1ZXN0cyB0aGUgc2VydmVyLWNvbXBvc2l0ZWQgdGlsZTsgYW4gaW5kZXggKGluY2x1ZGluZyAwKSByZXF1ZXN0cyB0aGF0XG4gKiAgc2luZ2xlIGNoYW5uZWwgYXMgZ3JheXNjYWxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWxlQ29vcmRzIHtcbiAgcmVzOiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xuICByb3c6IG51bWJlcjtcbiAgejogbnVtYmVyO1xuICB0aWxlU2l6ZTogbnVtYmVyO1xuICBjaGFubmVsPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqIFRoZSBgL3RpbGVzL2luZm9gIGRlc2NyaXB0b3IgVVJMIGZvciBvbmUgc291cmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbGVzSW5mb1VybChhcGk6IHN0cmluZywgaW5mb0I2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2FwaX10aWxlcy9pbmZvP2luZm89JHtpbmZvQjY0fWA7XG59XG5cbi8qKiBCdWlsZCB0aGUgYC90aWxlYCByZXF1ZXN0IFVSTCDigJQgdGhlIG9uZSBwbGFjZSBpdHMgcXVlcnkgc2hhcGUgbGl2ZXMgKHRoZVxuICogIHNlcnZlciBjYWNoZXMgb24gdGhlIGV4YWN0IHBhcmFtZXRlciBvcmRlcikuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUaWxlVXJsKGFwaTogc3RyaW5nLCBpbmZvQjY0OiBzdHJpbmcsIGM6IFRpbGVDb29yZHMpOiBzdHJpbmcge1xuICBjb25zdCBjaCA9IGMuY2hhbm5lbCA9PSBudWxsID8gJycgOiBgJmNoYW5uZWw9JHtjLmNoYW5uZWx9YDtcbiAgcmV0dXJuIGAke2FwaX10aWxlP2luZm89JHtpbmZvQjY0fSZyZXM9JHtjLnJlc30mY29sPSR7Yy5jb2x9JnJvdz0ke2Mucm93fSZ6PSR7Yy56fSZ0aWxlU2l6ZT0ke2MudGlsZVNpemV9JHtjaH1gO1xufVxuXG4vKipcbiAqIFBlci1hcHAtbG9hZCBjYWNoZS1idXN0ZXIgZm9yIGAvaGlzdG9ncmFtYC4gVGhlIHNlcnZlciBtYXJrcyB0aGUgcmVzcG9uc2VcbiAqIGNhY2hlYWJsZSBmb3IgMjQgaCwgYW5kIGEgaGFyZCByZWZyZXNoIGNhbid0IGJ1c3QgYSBwb3N0LWxvYWQgWEhSLiBBIHRva2VuXG4gKiBzdGFibGUgd2l0aGluIGEgc2Vzc2lvbiAoc28gdGhlIGJhY2tlbmRzJyBpbi1zZXNzaW9uIGNhY2hlcyBzdGlsbCBkZWR1cGUpIGJ1dFxuICogbmV3IG9uIGVhY2ggZnVsbCBsb2FkIGFsd2F5cyByZWZsZWN0cyB0aGUgbGl2ZSBiYWNrZW5kIGFmdGVyIGEgcmVsb2FkLlxuICovXG5leHBvcnQgY29uc3QgSElTVE9HUkFNX0NBQ0hFX0JVU1RFUiA9IERhdGUubm93KCk7XG5cbi8qKiBXaGVyZSBvbmUgY2hhbm5lbCdzIG5hdGl2ZS1iaXQtZGVwdGggaGlzdG9ncmFtIGlzIHJlYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdGl2ZUhpc3RvZ3JhbVJlcXVlc3Qge1xuICB6OiBudW1iZXI7XG4gIGNoYW5uZWw6IG51bWJlcjtcbiAgYmluczogbnVtYmVyO1xufVxuXG4vKiogVGhlIGAvaGlzdG9ncmFtYCBVUkwsIHdpdGggdGhlIGNhY2hlLWJ1c3RlciAoc2VlIHtAbGluayBISVNUT0dSQU1fQ0FDSEVfQlVTVEVSfSkuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlSGlzdG9ncmFtVXJsKFxuICBhcGk6IHN0cmluZyxcbiAgaW5mb0I2NDogc3RyaW5nLFxuICByOiBOYXRpdmVIaXN0b2dyYW1SZXF1ZXN0LFxuICBjYWNoZUJ1c3RlcjogbnVtYmVyID0gSElTVE9HUkFNX0NBQ0hFX0JVU1RFUixcbik6IHN0cmluZyB7XG4gIHJldHVybiBgJHthcGl9aGlzdG9ncmFtP2luZm89JHtpbmZvQjY0fSZjaGFubmVsPSR7ci5jaGFubmVsfSZ6PSR7ci56fSZiaW5zPSR7ci5iaW5zfSZfPSR7Y2FjaGVCdXN0ZXJ9YDtcbn1cblxuLyoqXG4gKiBUaGUgYC9leHBvcnQvdGlmZmAgVVJMIGZvciBzbGljZSBgemAuIGB2aXNpYmxlYCBhcmUgdGhlIGNoYW5uZWwgaW5kaWNlcyB0b1xuICogZXhwb3J0OyB0aGUgYGNoYW5uZWxzYCBwYXJhbSBpcyBvbWl0dGVkIHdoZW4gZXZlcnkgb25lIG9mIHRoZSBgY2hhbm5lbENvdW50YFxuICogY2hhbm5lbHMgaXMgdmlzaWJsZSAob3Igbm9uZSBpcyksIHdoaWNoIGlzIHRoZSBzZXJ2ZXIgZGVmYXVsdCAoYWxsKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFRpZmZVcmwoXG4gIGFwaTogc3RyaW5nLFxuICBpbmZvQjY0OiBzdHJpbmcsXG4gIHo6IG51bWJlcixcbiAgdmlzaWJsZTogcmVhZG9ubHkgbnVtYmVyW10sXG4gIGNoYW5uZWxDb3VudDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2ggPSB2aXNpYmxlLmxlbmd0aCAmJiB2aXNpYmxlLmxlbmd0aCA8IGNoYW5uZWxDb3VudCA/IGAmY2hhbm5lbHM9JHt2aXNpYmxlLmpvaW4oJywnKX1gIDogJyc7XG4gIHJldHVybiBgJHthcGl9ZXhwb3J0L3RpZmY/aW5mbz0ke2luZm9CNjR9Jno9JHt6fSR7Y2h9YDtcbn1cblxuLyoqIFRoZSBzYXZlZCBuYW1lIG9mIGEgbmF0aXZlLWJpdC1kZXB0aCBUSUZGIGV4cG9ydCBvZiBgZmlsZU5hbWVgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFRpZmZGaWxlbmFtZShmaWxlTmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0ZW0gPSAoZmlsZU5hbWUgfHwgJ2ltYWdlJykucmVwbGFjZSgvXFwuW14uXSskLywgJycpO1xuICByZXR1cm4gYCR7c3RlbX1fMTZiaXQub21lLnRpZmA7XG59XG4iXX0=
|
|
@@ -81,4 +81,4 @@ export function parsePresetSet(value) {
|
|
|
81
81
|
matchMode: raw.matchMode === 'normalized' ? 'normalized' : 'exact',
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtcHJlc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvY2xhc3MtcHJlc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQXdDSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWE7SUFDaEQsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztDQUNWLENBQUM7QUFFRixtRkFBbUY7QUFDbkYsTUFBTSxlQUFlLEdBQWtCO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNsRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQzdELEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNoRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDaEUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUN4RCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQ3RELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDdkQsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxF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QUFZLENBQUMsQ0FBQyxDQUFDLE9BQU87S0FDbkUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldCBhbm5vdGF0aW9uIGNsYXNzZXMgKGppdC11aSM3MCkuXG4gKlxuICogQSBjbGFzcyBpcyBhIGZsYXQgYHsgbmFtZSwgY29sb3IgfWAgcGFpciAodjE6IG5vIGhpZXJhcmNoeSwgbm8gc3BlY2lhbC1jbGFzcyBzZW1hbnRpY3MpLlxuICogVGhlIGBQcmVzZXRTZXRgIGlzIHRoZSBwZXItdXNlciwgc2VydmVyLXBlcnNpc3RlZCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHJlZ2lvbiBjb2xvdXJzO1xuICogc2VlIGBjbGFzcy1jb2xvci51dGlsLnRzYCBmb3IgdGhlIGRldGVybWluaXN0aWMgY29sb3VyLXJlc29sdXRpb24gZW5naW5lLlxuICovXG5cbi8qKiBXaGVyZSBhIHByZXNldCBjbGFzcyBjYW1lIGZyb206IGFkZGVkIGJ5IHRoZSB1c2VyLCBvbmUgb2YgdGhlIGJ1aWx0LWluXG4gKiAgZGVmYXVsdHMsIG9yIGF1dG8tcHJvbW90ZWQgZnJvbSBhbiB1bmtub3duIHJlZ2lvbiBsYWJlbC4gKi9cbmV4cG9ydCB0eXBlIFByZXNldFNvdXJjZSA9ICd1c2VyJyB8ICdkZWZhdWx0JyB8ICdhdXRvJztcblxuLyoqIE9uZSBhbm5vdGF0aW9uIGNsYXNzIGFuZCBpdHMgY29sb3VyOiByZWdpb25zIHdob3NlIGBsYWJlbGAgbWF0Y2hlc1xuICogIGBuYW1lYCAocGVyIHRoZSBzZXQncyB7QGxpbmsgTWF0Y2hNb2RlfSkgZHJhdyBpbiBgY29sb3JgIHVubGVzcyB0aGVpciBjb2xvdXJcbiAqICB3YXMgb3ZlcnJpZGRlbiBieSBoYW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc1ByZXNldCB7XG4gIC8qKiBUaGUgY2xhc3MgbmFtZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBSZWdpb24ubGFiZWxgLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBIZXggY29sb3VyLCBgI1JSR0dCQmAuICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBSZXNlcnZlZCBmb3IgYSBmdXR1cmUgcGVyLWNsYXNzIG92ZXJsYXktdmlzaWJpbGl0eSB0b2dnbGUuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuICAvKiogUHJvdmVuYW5jZTsgYCdhdXRvJ2AgPSBhZGRlZCBieSBvcHQtaW4gZmFsbGJhY2sgcHJvbW90aW9uLiAqL1xuICBzb3VyY2U/OiBQcmVzZXRTb3VyY2U7XG59XG5cbi8qKiBIb3cgYSByZWdpb24gbGFiZWwgaXMgbWF0Y2hlZCB0byBhIHByZXNldCBuYW1lOiBgJ2V4YWN0J2AgY29tcGFyZXMgdGhlXG4gKiAgc3RyaW5ncyBhcyBpczsgYCdub3JtYWxpemVkJ2AgdHJpbXMgYW5kIGxvd2VyLWNhc2VzIGJvdGggZmlyc3QuICovXG5leHBvcnQgdHlwZSBNYXRjaE1vZGUgPSAnZXhhY3QnIHwgJ25vcm1hbGl6ZWQnO1xuXG4vKipcbiAqIFRoZSBwZXItdXNlciBjbGFzcy1jb2xvdXIgY29uZmlndXJhdGlvbiAoc2VydmVyLXBlcnNpc3RlZCB0aHJvdWdoIHRoZVxuICogcHJlZmVyZW5jZXMgcG9ydCk6IHRoZSBwcmVzZXQgY2xhc3NlcywgdGhlIHBhbGV0dGUgZm9yIGxhYmVscyBvdXRzaWRlIHRoZW0sXG4gKiBhbmQgdGhlIG1hdGNoaW5nIHJ1bGVzLiBSZXNvbHZlZCBpbnRvIHJlZ2lvbiBjb2xvdXJzIGJ5IGBjbGFzcy1jb2xvci51dGlsLnRzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRTZXQge1xuICAvKiogT3JkZXJlZCBsaXN0IG9mIHByZXNldCBjbGFzc2VzLiAqL1xuICBjbGFzc2VzOiBDbGFzc1ByZXNldFtdO1xuICAvKiogQ29sb3VycyB1c2VkIGZvciBjbGFzc2VzIG5vdCBpbiBgY2xhc3Nlc2AgKGFzc2lnbmVkIGRldGVybWluaXN0aWNhbGx5KS4gKi9cbiAgZmFsbGJhY2tQYWxldHRlOiBzdHJpbmdbXTtcbiAgLyoqIE9wdC1pbiAoZGVmYXVsdCBmYWxzZSk6IGFkZCBhbiB1bmtub3duIGNsYXNzIHRvIGBjbGFzc2VzYCB0aGUgZmlyc3QgdGltZSBpdCBpcyBzZWVuLiAqL1xuICBhdXRvUHJvbW90ZTogYm9vbGVhbjtcbiAgLyoqIExhYmVsIG1hdGNoaW5nIGFnYWluc3QgYFJlZ2lvbi5sYWJlbGAgKGRlZmF1bHQgYCdleGFjdCdgKS4gKi9cbiAgbWF0Y2hNb2RlOiBNYXRjaE1vZGU7XG59XG5cbi8qKlxuICogRmFsbGJhY2sgcGFsZXR0ZSBmb3IgY2xhc3NlcyBub3QgcHJlc2VudCBpbiB0aGUgcHJlc2V0IHNldCDigJQgcmVhc29uYWJseSBkaXN0aW5jdCBodWVzLlxuICogQ29sb3VycyBhcmUgYXNzaWduZWQgYnkgYSBzdGFibGUgaGFzaCBvZiB0aGUgY2xhc3MgbmFtZSwgc28gdGhlIHNhbWUgdW5rbm93biBjbGFzcyBhbHdheXNcbiAqIGdldHMgdGhlIHNhbWUgY29sb3VyIHdpdGggbm8gc3RvcmVkIHN0YXRlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GQUxMQkFDS19QQUxFVFRFOiBzdHJpbmdbXSA9IFtcbiAgJyM2QzhFQkYnLFxuICAnIzgyQjM2NicsXG4gICcjQjg1NDUwJyxcbiAgJyM5NjczQTYnLFxuICAnI0Q3OUIwMCcsXG4gICcjM0M5NDhCJyxcbiAgJyNBNjRDQTYnLFxuICAnI0NDNjY3NycsXG4gICcjNDQ3N0FBJyxcbiAgJyMyMjg4MzMnLFxuXTtcblxuLyoqIFNlZWQgY2xhc3NlcyDigJQgbWlycm9ycyB0aGUgaGlzdG9yaWNhbCBoYXJkLWNvZGVkIGBjbGFzc2lmaWNhdGlvbkNvbG9yc2AgbWFwLiAqL1xuY29uc3QgREVGQVVMVF9DTEFTU0VTOiBDbGFzc1ByZXNldFtdID0gW1xuICB7IG5hbWU6ICdGcmFnbWVudGVkLWVtYnJ5bycsIGNvbG9yOiAnI0ZGOEMwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ0R5aW5nLWVtYnJ5bycsIGNvbG9yOiAnI0ZGMzMzMycsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1R3by1jZWxsLWVtYnJ5bycsIGNvbG9yOiAnIzMzQ0M2NicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ09uZS1jZWxsLWVtYnJ5bycsIGNvbG9yOiAnIzMzOTlGRicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1Vua25vd24nLCBjb2xvcjogJyM4ODg4ODgnLCBzb3VyY2U6ICdkZWZhdWx0JyB9LFxuICB7IG5hbWU6ICdUdW1vcicsIGNvbG9yOiAnI0ZGNDQ0NCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1N0cm9tYScsIGNvbG9yOiAnIzQ0QUFGRicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ0ltbXVuZSBjZWxscycsIGNvbG9yOiAnI0ZGREQwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ05lY3Jvc2lzJywgY29sb3I6ICcjQUE2NjMzJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnUmVnaW9uJywgY29sb3I6ICcjMDBGRkZGJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnSWdub3JlJywgY29sb3I6ICcjQUFBQUFBJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnUG9zaXRpdmUnLCBjb2xvcjogJyMwMENDNDQnLCBzb3VyY2U6ICdkZWZhdWx0JyB9LFxuICB7IG5hbWU6ICdOZWdhdGl2ZScsIGNvbG9yOiAnI0NDMDAwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG5dO1xuXG4vKiogQSBmcmVzaCBkZWZhdWx0IHByZXNldCBzZXQgKGRlZXAtY29waWVkIHNvIGNhbGxlcnMgY2FuIG11dGF0ZSBzYWZlbHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcmVzZXRTZXQoKTogUHJlc2V0U2V0IHtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2VzOiBERUZBVUxUX0NMQVNTRVMubWFwKChjKSA9PiAoeyAuLi5jIH0pKSxcbiAgICBmYWxsYmFja1BhbGV0dGU6IFsuLi5ERUZBVUxUX0ZBTExCQUNLX1BBTEVUVEVdLFxuICAgIGF1dG9Qcm9tb3RlOiBmYWxzZSxcbiAgICBtYXRjaE1vZGU6ICdleGFjdCcsXG4gIH07XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhlIHNldCBoYXMgbm8gdXNhYmxlIGNsYXNzZXMgKGUuZy4gdGhlIHNlcnZlciByZXR1cm5lZCBhbiBlbXB0eS9ibGFuayByZWNvcmQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlQcmVzZXRTZXQoc2V0OiBQcmVzZXRTZXQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiAhc2V0IHx8ICFBcnJheS5pc0FycmF5KHNldC5jbGFzc2VzKSB8fCBzZXQuY2xhc3Nlcy5sZW5ndGggPT09IDA7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4gdW50cnVzdGVkIHZhbHVlIChlLmcuIGFuIGltcG9ydGVkIEpTT04gZmlsZSkgYXMgYSBwcmVzZXQgc2V0LlxuICogUmV0dXJucyBhIGNsZWFuIGNvcHkg4oCUIG9ubHkgd2VsbC1mb3JtZWQgYHsgbmFtZSwgY29sb3IgfWAgY2xhc3NlcywgZGVmYXVsdHNcbiAqIGZvciBtaXNzaW5nIG9wdGlvbmFsIGZpZWxkcyDigJQgb3IgbnVsbCB3aGVuIGl0IGhhcyBubyB1c2FibGUgY2xhc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJlc2V0U2V0KHZhbHVlOiB1bmtub3duKTogUHJlc2V0U2V0IHwgbnVsbCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJhdyA9IHZhbHVlIGFzIFBhcnRpYWw8UmVjb3JkPGtleW9mIFByZXNldFNldCwgdW5rbm93bj4+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3LmNsYXNzZXMpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2xhc3NlczogQ2xhc3NQcmVzZXRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGMgb2YgcmF3LmNsYXNzZXMgYXMgdW5rbm93bltdKSB7XG4gICAgY29uc3QgZW50cnkgPSBjIGFzIFBhcnRpYWw8Q2xhc3NQcmVzZXQ+IHwgbnVsbDtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZW50cnkuY29sb3IgIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICBjbGFzc2VzLnB1c2goeyAuLi5lbnRyeSwgbmFtZTogZW50cnkubmFtZSwgY29sb3I6IGVudHJ5LmNvbG9yIH0pO1xuICB9XG4gIGlmIChjbGFzc2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBhbGV0dGUgPSBBcnJheS5pc0FycmF5KHJhdy5mYWxsYmFja1BhbGV0dGUpXG4gICAgPyAocmF3LmZhbGxiYWNrUGFsZXR0ZSBhcyB1bmtub3duW10pLmZpbHRlcigoYyk6IGMgaXMgc3RyaW5nID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJylcbiAgICA6IFtdO1xuICByZXR1cm4ge1xuICAgIGNsYXNzZXMsXG4gICAgZmFsbGJhY2tQYWxldHRlOiBwYWxldHRlLmxlbmd0aCA/IHBhbGV0dGUgOiBbLi4uREVGQVVMVF9GQUxMQkFDS19QQUxFVFRFXSxcbiAgICBhdXRvUHJvbW90ZTogcmF3LmF1dG9Qcm9tb3RlID09PSB0cnVlLFxuICAgIG1hdGNoTW9kZTogcmF3Lm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnID8gJ25vcm1hbGl6ZWQnIDogJ2V4YWN0JyxcbiAgfTtcbn1cbiJdfQ==
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtcHJlc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvY2xhc3MtcHJlc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQStDSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWE7SUFDaEQsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztDQUNWLENBQUM7QUFFRixtRkFBbUY7QUFDbkYsTUFBTSxlQUFlLEdBQWtCO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNsRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQzdELEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNoRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDaEUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUN4RCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQ3RELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDdkQsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxF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QUFZLENBQUMsQ0FBQyxDQUFDLE9BQU87S0FDbkUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldCBhbm5vdGF0aW9uIGNsYXNzZXMgKGppdC11aSM3MCkuXG4gKlxuICogQSBjbGFzcyBpcyBhIGZsYXQgYHsgbmFtZSwgY29sb3IgfWAgcGFpciAodjE6IG5vIGhpZXJhcmNoeSwgbm8gc3BlY2lhbC1jbGFzcyBzZW1hbnRpY3MpLlxuICogVGhlIGBQcmVzZXRTZXRgIGlzIHRoZSBwZXItdXNlciwgc2VydmVyLXBlcnNpc3RlZCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHJlZ2lvbiBjb2xvdXJzO1xuICogc2VlIGBjbGFzcy1jb2xvci51dGlsLnRzYCBmb3IgdGhlIGRldGVybWluaXN0aWMgY29sb3VyLXJlc29sdXRpb24gZW5naW5lLlxuICovXG5cbi8qKiBXaGVyZSBhIHByZXNldCBjbGFzcyBjYW1lIGZyb206IGFkZGVkIGJ5IHRoZSB1c2VyLCBvbmUgb2YgdGhlIGJ1aWx0LWluXG4gKiAgZGVmYXVsdHMsIG9yIGF1dG8tcHJvbW90ZWQgZnJvbSBhbiB1bmtub3duIHJlZ2lvbiBsYWJlbC4gKi9cbmV4cG9ydCB0eXBlIFByZXNldFNvdXJjZSA9ICd1c2VyJyB8ICdkZWZhdWx0JyB8ICdhdXRvJztcblxuLyoqIE9uZSBhbm5vdGF0aW9uIGNsYXNzIGFuZCBpdHMgY29sb3VyOiByZWdpb25zIHdob3NlIGBsYWJlbGAgbWF0Y2hlc1xuICogIGBuYW1lYCAocGVyIHRoZSBzZXQncyB7QGxpbmsgTWF0Y2hNb2RlfSkgZHJhdyBpbiBgY29sb3JgIHVubGVzcyB0aGVpciBjb2xvdXJcbiAqICB3YXMgb3ZlcnJpZGRlbiBieSBoYW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc1ByZXNldCB7XG4gIC8qKiBUaGUgY2xhc3MgbmFtZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBSZWdpb24ubGFiZWxgLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBIZXggY29sb3VyLCBgI1JSR0dCQmAuICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBSZXNlcnZlZCBmb3IgYSBmdXR1cmUgcGVyLWNsYXNzIG92ZXJsYXktdmlzaWJpbGl0eSB0b2dnbGUuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuICAvKiogUHJvdmVuYW5jZTsgYCdhdXRvJ2AgPSBhZGRlZCBieSBvcHQtaW4gZmFsbGJhY2sgcHJvbW90aW9uLiAqL1xuICBzb3VyY2U/OiBQcmVzZXRTb3VyY2U7XG59XG5cbi8qKiBIb3cgYSByZWdpb24gbGFiZWwgaXMgbWF0Y2hlZCB0byBhIHByZXNldCBuYW1lOiBgJ2V4YWN0J2AgY29tcGFyZXMgdGhlXG4gKiAgc3RyaW5ncyBhcyBpczsgYCdub3JtYWxpemVkJ2AgdHJpbXMgYW5kIGxvd2VyLWNhc2VzIGJvdGggZmlyc3QuICovXG5leHBvcnQgdHlwZSBNYXRjaE1vZGUgPSAnZXhhY3QnIHwgJ25vcm1hbGl6ZWQnO1xuXG4vKipcbiAqIFRoZSBwZXItdXNlciBjbGFzcy1jb2xvdXIgY29uZmlndXJhdGlvbiAoc2VydmVyLXBlcnNpc3RlZCB0aHJvdWdoIHRoZVxuICogcHJlZmVyZW5jZXMgcG9ydCk6IHRoZSBwcmVzZXQgY2xhc3NlcywgdGhlIHBhbGV0dGUgZm9yIGxhYmVscyBvdXRzaWRlIHRoZW0sXG4gKiBhbmQgdGhlIG1hdGNoaW5nIHJ1bGVzLiBSZXNvbHZlZCBpbnRvIHJlZ2lvbiBjb2xvdXJzIGJ5IGBjbGFzcy1jb2xvci51dGlsLnRzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRTZXQge1xuICAvKiogT3JkZXJlZCBsaXN0IG9mIHByZXNldCBjbGFzc2VzLiAqL1xuICBjbGFzc2VzOiBDbGFzc1ByZXNldFtdO1xuICAvKiogQ29sb3VycyB1c2VkIGZvciBjbGFzc2VzIG5vdCBpbiBgY2xhc3Nlc2AgKGFzc2lnbmVkIGRldGVybWluaXN0aWNhbGx5KS4gKi9cbiAgZmFsbGJhY2tQYWxldHRlOiBzdHJpbmdbXTtcbiAgLyoqIE9wdC1pbiAoZGVmYXVsdCBmYWxzZSk6IGFkZCBhbiB1bmtub3duIGNsYXNzIHRvIGBjbGFzc2VzYCB0aGUgZmlyc3QgdGltZSBpdCBpcyBzZWVuLiAqL1xuICBhdXRvUHJvbW90ZTogYm9vbGVhbjtcbiAgLyoqIExhYmVsIG1hdGNoaW5nIGFnYWluc3QgYFJlZ2lvbi5sYWJlbGAgKGRlZmF1bHQgYCdleGFjdCdgKS4gKi9cbiAgbWF0Y2hNb2RlOiBNYXRjaE1vZGU7XG4gIC8qKlxuICAgKiBDbGFzcyBjb2xvdXJzIHRoYXQgaW1wb3J0ZWQgR2VvSlNPTiBjYXJyaWVkIGZvciBjbGFzc2VzIHdpdGggbm8gcHJlc2V0LCBrZXllZCBieSB0aGVcbiAgICogbWF0Y2ggbW9kZSdzIGtleSAoc2VlIGBwcmVzZXRLZXlgKS4gVGhleSBjb21lIGJlZm9yZSB0aGUgZmFsbGJhY2sgcGFsZXR0ZSwgc28gYW4gaW1wb3J0ZWRcbiAgICogZmlsZSBrZWVwcyBpdHMgb3duIGNvbG91cnMuIFNlc3Npb24tb25seTogbmV2ZXIgcGVyc2lzdGVkLCBhbmQgYWJzZW50IGZyb20gYSBzZXQgYSBjYWxsZXJcbiAgICogc2F2ZXMgb3IgZXhwb3J0cy5cbiAgICovXG4gIGltcG9ydGVkQ29sb3JzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG59XG5cbi8qKlxuICogRmFsbGJhY2sgcGFsZXR0ZSBmb3IgY2xhc3NlcyBub3QgcHJlc2VudCBpbiB0aGUgcHJlc2V0IHNldCDigJQgcmVhc29uYWJseSBkaXN0aW5jdCBodWVzLlxuICogQ29sb3VycyBhcmUgYXNzaWduZWQgYnkgYSBzdGFibGUgaGFzaCBvZiB0aGUgY2xhc3MgbmFtZSwgc28gdGhlIHNhbWUgdW5rbm93biBjbGFzcyBhbHdheXNcbiAqIGdldHMgdGhlIHNhbWUgY29sb3VyIHdpdGggbm8gc3RvcmVkIHN0YXRlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GQUxMQkFDS19QQUxFVFRFOiBzdHJpbmdbXSA9IFtcbiAgJyM2QzhFQkYnLFxuICAnIzgyQjM2NicsXG4gICcjQjg1NDUwJyxcbiAgJyM5NjczQTYnLFxuICAnI0Q3OUIwMCcsXG4gICcjM0M5NDhCJyxcbiAgJyNBNjRDQTYnLFxuICAnI0NDNjY3NycsXG4gICcjNDQ3N0FBJyxcbiAgJyMyMjg4MzMnLFxuXTtcblxuLyoqIFNlZWQgY2xhc3NlcyDigJQgbWlycm9ycyB0aGUgaGlzdG9yaWNhbCBoYXJkLWNvZGVkIGBjbGFzc2lmaWNhdGlvbkNvbG9yc2AgbWFwLiAqL1xuY29uc3QgREVGQVVMVF9DTEFTU0VTOiBDbGFzc1ByZXNldFtdID0gW1xuICB7IG5hbWU6ICdGcmFnbWVudGVkLWVtYnJ5bycsIGNvbG9yOiAnI0ZGOEMwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ0R5aW5nLWVtYnJ5bycsIGNvbG9yOiAnI0ZGMzMzMycsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1R3by1jZWxsLWVtYnJ5bycsIGNvbG9yOiAnIzMzQ0M2NicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ09uZS1jZWxsLWVtYnJ5bycsIGNvbG9yOiAnIzMzOTlGRicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1Vua25vd24nLCBjb2xvcjogJyM4ODg4ODgnLCBzb3VyY2U6ICdkZWZhdWx0JyB9LFxuICB7IG5hbWU6ICdUdW1vcicsIGNvbG9yOiAnI0ZGNDQ0NCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1N0cm9tYScsIGNvbG9yOiAnIzQ0QUFGRicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ0ltbXVuZSBjZWxscycsIGNvbG9yOiAnI0ZGREQwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ05lY3Jvc2lzJywgY29sb3I6ICcjQUE2NjMzJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnUmVnaW9uJywgY29sb3I6ICcjMDBGRkZGJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnSWdub3JlJywgY29sb3I6ICcjQUFBQUFBJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnUG9zaXRpdmUnLCBjb2xvcjogJyMwMENDNDQnLCBzb3VyY2U6ICdkZWZhdWx0JyB9LFxuICB7IG5hbWU6ICdOZWdhdGl2ZScsIGNvbG9yOiAnI0NDMDAwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG5dO1xuXG4vKiogQSBmcmVzaCBkZWZhdWx0IHByZXNldCBzZXQgKGRlZXAtY29waWVkIHNvIGNhbGxlcnMgY2FuIG11dGF0ZSBzYWZlbHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcmVzZXRTZXQoKTogUHJlc2V0U2V0IHtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2VzOiBERUZBVUxUX0NMQVNTRVMubWFwKChjKSA9PiAoeyAuLi5jIH0pKSxcbiAgICBmYWxsYmFja1BhbGV0dGU6IFsuLi5ERUZBVUxUX0ZBTExCQUNLX1BBTEVUVEVdLFxuICAgIGF1dG9Qcm9tb3RlOiBmYWxzZSxcbiAgICBtYXRjaE1vZGU6ICdleGFjdCcsXG4gIH07XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhlIHNldCBoYXMgbm8gdXNhYmxlIGNsYXNzZXMgKGUuZy4gdGhlIHNlcnZlciByZXR1cm5lZCBhbiBlbXB0eS9ibGFuayByZWNvcmQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlQcmVzZXRTZXQoc2V0OiBQcmVzZXRTZXQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiAhc2V0IHx8ICFBcnJheS5pc0FycmF5KHNldC5jbGFzc2VzKSB8fCBzZXQuY2xhc3Nlcy5sZW5ndGggPT09IDA7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4gdW50cnVzdGVkIHZhbHVlIChlLmcuIGFuIGltcG9ydGVkIEpTT04gZmlsZSkgYXMgYSBwcmVzZXQgc2V0LlxuICogUmV0dXJucyBhIGNsZWFuIGNvcHkg4oCUIG9ubHkgd2VsbC1mb3JtZWQgYHsgbmFtZSwgY29sb3IgfWAgY2xhc3NlcywgZGVmYXVsdHNcbiAqIGZvciBtaXNzaW5nIG9wdGlvbmFsIGZpZWxkcyDigJQgb3IgbnVsbCB3aGVuIGl0IGhhcyBubyB1c2FibGUgY2xhc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJlc2V0U2V0KHZhbHVlOiB1bmtub3duKTogUHJlc2V0U2V0IHwgbnVsbCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJhdyA9IHZhbHVlIGFzIFBhcnRpYWw8UmVjb3JkPGtleW9mIFByZXNldFNldCwgdW5rbm93bj4+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3LmNsYXNzZXMpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2xhc3NlczogQ2xhc3NQcmVzZXRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGMgb2YgcmF3LmNsYXNzZXMgYXMgdW5rbm93bltdKSB7XG4gICAgY29uc3QgZW50cnkgPSBjIGFzIFBhcnRpYWw8Q2xhc3NQcmVzZXQ+IHwgbnVsbDtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZW50cnkuY29sb3IgIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICBjbGFzc2VzLnB1c2goeyAuLi5lbnRyeSwgbmFtZTogZW50cnkubmFtZSwgY29sb3I6IGVudHJ5LmNvbG9yIH0pO1xuICB9XG4gIGlmIChjbGFzc2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBhbGV0dGUgPSBBcnJheS5pc0FycmF5KHJhdy5mYWxsYmFja1BhbGV0dGUpXG4gICAgPyAocmF3LmZhbGxiYWNrUGFsZXR0ZSBhcyB1bmtub3duW10pLmZpbHRlcigoYyk6IGMgaXMgc3RyaW5nID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJylcbiAgICA6IFtdO1xuICByZXR1cm4ge1xuICAgIGNsYXNzZXMsXG4gICAgZmFsbGJhY2tQYWxldHRlOiBwYWxldHRlLmxlbmd0aCA/IHBhbGV0dGUgOiBbLi4uREVGQVVMVF9GQUxMQkFDS19QQUxFVFRFXSxcbiAgICBhdXRvUHJvbW90ZTogcmF3LmF1dG9Qcm9tb3RlID09PSB0cnVlLFxuICAgIG1hdGNoTW9kZTogcmF3Lm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnID8gJ25vcm1hbGl6ZWQnIDogJ2V4YWN0JyxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -115,4 +115,20 @@ export function regionPolygons(region) {
|
|
|
115
115
|
return b.polygons.filter((p) => p.closed !== false).map(flattenPolygon);
|
|
116
116
|
return [];
|
|
117
117
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbi1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvcG9seWdvbi1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWlCbEUsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBWSxFQUFFLEVBQVksRUFBRSxPQUEyQixFQUFFO0lBQ25GLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztJQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNO1FBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUM3RCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFV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Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFjO0lBQzNDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEIsSUFBSSxDQUFDLFlBQVksU0FBUyxFQUFFLENBQUM7UUFDM0IsdUVBQXVFO1FBQ3ZFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUNELElBQUksQ0FBQyxZQUFZLE9BQU87UUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0UsSUFBSSxDQUFDLFlBQVksWUFBWTtRQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZHLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE11bHRpUG9seWdvbiwgUG9seWdvbiwgUmVjdGFuZ2xlLCBSZWdpb24gfSBmcm9tICcuL3JlZ2lvbic7XG5pbXBvcnQgeyBiZXppZXJDdXJ2ZUZyb21IYW5kbGVzLCByZXNvbHZlSGFuZGxlcyB9IGZyb20gJy4vYmV6aWVyJztcblxuLyoqXG4gKiBQb2x5Z29uIC8gUmVnaW9uIGNvbnN0cnVjdGlvbiBhbmQgY2xvbmluZyBpbiBvbmUgcGxhY2UsIHNvIGNhbGxlcnMgc3RvcFxuICogaGFuZC1maWxsaW5nIGBucG9pbnRzYCwgYHhwb2ludHNgLCBgeXBvaW50c2AsIGBjb29yZGluYXRlc2AgYW5kIGBjbG9zZWRgXG4gKiAodGhyZWUgcmVkdW5kYW50IHZpZXdzIG9mIG9uZSByaW5nIHRoYXQgZXZlcnkgbXV0YXRvciBtdXN0IGtlZXAgaW4gc3luYykuXG4gKi9cblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBtYWtlUG9seWdvbn0uICovXG5leHBvcnQgaW50ZXJmYWNlIE1ha2VQb2x5Z29uT3B0aW9ucyB7XG4gIC8qKiBmYWxzZSBmb3IgYW4gb3BlbiBwb2x5bGluZTsgZGVmYXVsdCB0cnVlLiAqL1xuICBjbG9zZWQ/OiBib29sZWFuO1xuICAvKiogSW50ZXJpb3IgcmluZ3M7IG9taXR0ZWQgd2hlbiBhYnNlbnQgb3IgZW1wdHkuICovXG4gIGhvbGVzPzogbnVtYmVyW11bXVtdO1xuICBiZXppZXI/OiBib29sZWFuO1xufVxuXG4vKiogQSBQb2x5Z29uIG92ZXIgdGhlIGdpdmVuIHZlcnRleCBhcnJheXMgKHRha2VuIGJ5IHJlZmVyZW5jZSkuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBvbHlnb24oeHM6IG51bWJlcltdLCB5czogbnVtYmVyW10sIG9wdHM6IE1ha2VQb2x5Z29uT3B0aW9ucyA9IHt9KTogUG9seWdvbiB7XG4gIGNvbnN0IHBvbHkgPSBuZXcgUG9seWdvbigpO1xuICBwb2x5Lm5wb2ludHMgPSB4cy5sZW5ndGg7XG4gIHBvbHkueHBvaW50cyA9IHhzO1xuICBwb2x5Lnlwb2ludHMgPSB5cztcbiAgcG9seS5jb29yZGluYXRlcyA9IHhzLm1hcCgoeCwgaSkgPT4gW3gsIHlzW2ldXSk7XG4gIHBvbHkuY2xvc2VkID0gb3B0cy5jbG9zZWQgPz8gdHJ1ZTtcbiAgaWYgKG9wdHMuYmV6aWVyKSBwb2x5LmJlemllciA9IHRydWU7XG4gIGlmIChvcHRzLmhvbGVzICYmIG9wdHMuaG9sZXMubGVuZ3RoKSBwb2x5LmhvbGVzID0gb3B0cy5ob2xlcztcbiAgcmV0dXJuIHBvbHk7XG59XG5cbi8qKiBUaGUgZm91ciBjb3JuZXJzIG9mIGEgcmVjdGFuZ2xlIGFzIGEgY2xvc2VkIHJpbmcgKGNsb2Nrd2lzZSBmcm9tIHRvcC1sZWZ0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWN0VG9SaW5nKHI6IFBpY2s8UmVjdGFuZ2xlLCAneCcgfCAneScgfCAnd2lkdGgnIHwgJ2hlaWdodCc+KTogeyB4czogbnVtYmVyW107IHlzOiBudW1iZXJbXSB9IHtcbiAgcmV0dXJuIHtcbiAgICB4czogW3IueCwgci54ICsgci53aWR0aCwgci54ICsgci53aWR0aCwgci54XSxcbiAgICB5czogW3IueSwgci55LCByLnkgKyByLmhlaWdodCwgci55ICsgci5oZWlnaHRdLFxuICB9O1xufVxuXG4vKiogQSBkZWVwIGNvcHkgb2YgYSBwb2x5Z29uOiB2ZXJ0aWNlcywgaG9sZXMgYW5kIGV2ZXJ5IGLDqXppZXIgaGFuZGxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lUG9seWdvbihwOiBQb2x5Z29uKTogUG9seWdvbiB7XG4gIGNvbnN0IHBvbHkgPSBuZXcgUG9seWdvbigpO1xuICBwb2x5Lm5wb2ludHMgPSBwLm5wb2ludHM7XG4gIHBvbHkueHBvaW50cyA9IHAueHBvaW50cy5zbGljZSgpO1xuICBwb2x5Lnlwb2ludHMgPSBwLnlwb2ludHMuc2xpY2UoKTtcbiAgcG9seS5jb29yZGluYXRlcyA9IHAuY29vcmRpbmF0ZXMubWFwKChjKSA9PiBjLnNsaWNlKCkpO1xuICBwb2x5LmNsb3NlZCA9IHAuY2xvc2VkO1xuICBwb2x5LmJlemllciA9IHAuYmV6aWVyO1xuICBpZiAocC5oYW5kbGVzSW4pIHBvbHkuaGFuZGxlc0luID0gcC5oYW5kbGVzSW4ubWFwKChvKSA9PiBvLnNsaWNlKCkpO1xuICBpZiAocC5oYW5kbGVzT3V0KSBwb2x5LmhhbmRsZXNPdXQgPSBwLmhhbmRsZXNPdXQubWFwKChvKSA9PiBvLnNsaWNlKCkpO1xuICBpZiAocC5ob2xlcykgcG9seS5ob2xlcyA9IHAuaG9sZXMubWFwKChyaW5nKSA9PiByaW5nLm1hcCgocHQpID0+IHB0LnNsaWNlKCkpKTtcbiAgaWYgKHAuaG9sZUhhbmRsZXNJbikgcG9seS5ob2xlSGFuZGxlc0luID0gcC5ob2xlSGFuZGxlc0luLm1hcCgocikgPT4gci5tYXAoKG8pID0+IG8uc2xpY2UoKSkpO1xuICBpZiAocC5ob2xlSGFuZGxlc091dCkgcG9seS5ob2xlSGFuZGxlc091dCA9IHAuaG9sZUhhbmRsZXNPdXQubWFwKChyKSA9PiByLm1hcCgobykgPT4gby5zbGljZSgpKSk7XG4gIHJldHVybiBwb2x5O1xufVxuXG4vKiogQSBkZWVwIGNvcHkgb2YgYW55IHJlZ2lvbiBnZW9tZXRyeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZUJvdW5kcyhib3VuZHM6IFJlY3RhbmdsZSB8IFBvbHlnb24gfCBNdWx0aVBvbHlnb24pOiBSZWN0YW5nbGUgfCBQb2x5Z29uIHwgTXVsdGlQb2x5Z29uIHtcbiAgaWYgKGJvdW5kcyBpbnN0YW5jZW9mIFJlY3RhbmdsZSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdGFuZ2xlKCk7XG4gICAgcmVjdC54ID0gYm91bmRzLng7XG4gICAgcmVjdC55ID0gYm91bmRzLnk7XG4gICAgcmVjdC53aWR0aCA9IGJvdW5kcy53aWR0aDtcbiAgICByZWN0LmhlaWdodCA9IGJvdW5kcy5oZWlnaHQ7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH1cbiAgaWYgKGJvdW5kcyBpbnN0YW5jZW9mIE11bHRpUG9seWdvbikge1xuICAgIGNvbnN0IG1wID0gbmV3IE11bHRpUG9seWdvbigpO1xuICAgIG1wLnBvbHlnb25zID0gYm91bmRzLnBvbHlnb25zLm1hcCgocCkgPT4gY2xvbmVQb2x5Z29uKHApKTtcbiAgICByZXR1cm4gbXA7XG4gIH1cbiAgcmV0dXJuIGNsb25lUG9seWdvbihib3VuZHMpO1xufVxuXG4vKipcbiAqIEEgY29weSBvZiBgZXhpc3RpbmdgIChpZCwgbmFtZSwgbGFiZWwsIGNvbG91ciwgY29sb3VyIG92ZXJyaWRlLCBzb3VyY2UsXG4gKiBmaWxlIG5hbWUsIGtpbmQsIHosIOKApikgd2l0aCBuZXcgZ2VvbWV0cnkgYW5kIG9wdGlvbmFsIGV4dHJhIGZpZWxkcy4gVXNlIGl0XG4gKiB3aGVuZXZlciBhIHRvb2wgZWRpdHMgYSByZWdpb24ncyBzaGFwZSwgc28gdGhlIGVkaXQgbmV2ZXIgZHJvcHMgbWV0YWRhdGEgYW5kXG4gKiBuZXZlciBtdXRhdGVzIHRoZSBzdG9yZSdzIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUJvdW5kcyhleGlzdGluZzogUmVnaW9uLCBib3VuZHM6IFJlZ2lvblsnYm91bmRzJ10sIHBhdGNoOiBQYXJ0aWFsPFJlZ2lvbj4gPSB7fSk6IFJlZ2lvbiB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBSZWdpb24oKSwgZXhpc3RpbmcsIHBhdGNoLCB7IGJvdW5kcyB9KTtcbn1cblxuLyoqIEEgY2xvc2VkIHJpbmcgcm91bmRlZCB0byB3aG9sZSBwaXhlbHMsIGFzIGltYWdlLXByb2Nlc3NpbmcgY29uc3VtZXJzIGV4cGVjdC4gKi9cbmZ1bmN0aW9uIHJvdW5kZWRQb2x5Z29uKHhzOiBudW1iZXJbXSwgeXM6IG51bWJlcltdLCBob2xlcz86IG51bWJlcltdW11bXSk6IFBvbHlnb24ge1xuICByZXR1cm4gbWFrZVBvbHlnb24oeHMubWFwKE1hdGgucm91bmQpLCB5cy5tYXAoTWF0aC5yb3VuZCksIHtcbiAgICBob2xlczogaG9sZXM/Lm1hcCgocmluZykgPT4gcmluZy5tYXAoKFt4LCB5XSkgPT4gW01hdGgucm91bmQoeCksIE1hdGgucm91bmQoeSldKSksXG4gIH0pO1xufVxuXG4vKiogQSBwb2x5Z29uJ3MgZXh0ZXJpb3IgYW5kIGhvbGVzLCB3aXRoIGEgYsOpemllciByZWdpb24gZmxhdHRlbmVkIHRvIGl0cyBjdXJ2ZS4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5Qb2x5Z29uKHA6IFBvbHlnb24pOiBQb2x5Z29uIHtcbiAgaWYgKCFwLmJlemllcikgcmV0dXJuIHJvdW5kZWRQb2x5Z29uKHAueHBvaW50cywgcC55cG9pbnRzLCBwLmhvbGVzKTtcbiAgY29uc3QgY2xvc2VkID0gcC5jbG9zZWQgIT09IGZhbHNlO1xuICBjb25zdCBjdXJ2ZSA9IGJlemllckN1cnZlRnJvbUhhbmRsZXMoXG4gICAgcC54cG9pbnRzLFxuICAgIHAueXBvaW50cyxcbiAgICByZXNvbHZlSGFuZGxlcyhwLnhwb2ludHMsIHAueXBvaW50cywgY2xvc2VkLCBwLmhhbmRsZXNJbiwgcC5oYW5kbGVzT3V0KSxcbiAgICBjbG9zZWQsXG4gICk7XG4gIGNvbnN0IGhvbGVzID0gcC5ob2xlcz8ubWFwKChyaW5nLCBoKSA9PiB7XG4gICAgY29uc3QgaHggPSByaW5nLm1hcCgocHQpID0+IHB0WzBdKTtcbiAgICBjb25zdCBoeSA9IHJpbmcubWFwKChwdCkgPT4gcHRbMV0pO1xuICAgIGNvbnN0IGMgPSBiZXppZXJDdXJ2ZUZyb21IYW5kbGVzKFxuICAgICAgaHgsXG4gICAgICBoeSxcbiAgICAgIHJlc29sdmVIYW5kbGVzKGh4LCBoeSwgdHJ1ZSwgcC5ob2xlSGFuZGxlc0luPy5baF0sIHAuaG9sZUhhbmRsZXNPdXQ/LltoXSksXG4gICAgICB0cnVlLFxuICAgICk7XG4gICAgcmV0dXJuIGRyb3BDbG9zaW5nUG9pbnQoYy54cywgYy55cykueHMubWFwKCh4LCBpKSA9PiBbeCwgYy55c1tpXV0pO1xuICB9KTtcbiAgY29uc3QgcmluZyA9IGRyb3BDbG9zaW5nUG9pbnQoY3VydmUueHMsIGN1cnZlLnlzKTtcbiAgcmV0dXJuIHJvdW5kZWRQb2x5Z29uKHJpbmcueHMsIHJpbmcueXMsIGhvbGVzKTtcbn1cblxuLyoqIEEgc2FtcGxlZCBjbG9zZWQgY3VydmUgcmVwZWF0cyBpdHMgZmlyc3QgcG9pbnQgYXQgdGhlIGVuZDsgcmluZ3MgZG9uJ3QuICovXG5mdW5jdGlvbiBkcm9wQ2xvc2luZ1BvaW50KHhzOiBudW1iZXJbXSwgeXM6IG51bWJlcltdKTogeyB4czogbnVtYmVyW107IHlzOiBudW1iZXJbXSB9IHtcbiAgY29uc3QgbiA9IHhzLmxlbmd0aDtcbiAgaWYgKG4gPiAxICYmIHhzWzBdID09PSB4c1tuIC0gMV0gJiYgeXNbMF0gPT09IHlzW24gLSAxXSkgcmV0dXJuIHsgeHM6IHhzLnNsaWNlKDAsIC0xKSwgeXM6IHlzLnNsaWNlKDAsIC0xKSB9O1xuICByZXR1cm4geyB4cywgeXMgfTtcbn1cblxuLyoqXG4gKiBUaGUgY2xvc2VkIHBvbHlnb25zIGEgcmVnaW9uIGNvdmVycywgZm9yIGltYWdlLXByb2Nlc3NpbmcgY29uc3VtZXJzIChjcm9wLFxuICogc2VnbWVudGF0aW9uIHJlcXVlc3RzKTogYSByZWN0YW5nbGUncyBmb3VyIGNvcm5lcnMsIGEgY2xvc2VkIHBvbHlnb24gd2l0aCBpdHNcbiAqIGhvbGVzIChhIGLDqXppZXIgcmVnaW9uIGFzIGl0cyBmbGF0dGVuZWQgY3VydmUpLCBvbmUgcG9seWdvbiBwZXIgcGFydCBvZiBhXG4gKiBtdWx0aS1wb2x5Z29uLiBPcGVuIHBvbHlsaW5lcyBjb3ZlciBubyBhcmVhIGFuZCB5aWVsZCBub3RoaW5nLiBDb29yZGluYXRlc1xuICogYXJlIHJvdW5kZWQgdG8gd2hvbGUgcGl4ZWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uUG9seWdvbnMocmVnaW9uOiBSZWdpb24pOiBQb2x5Z29uW10ge1xuICBjb25zdCBiID0gcmVnaW9uLmJvdW5kcztcbiAgaWYgKGIgaW5zdGFuY2VvZiBSZWN0YW5nbGUpIHtcbiAgICAvLyBCb3R0b20tbGVmdCBmaXJzdCwgYXMgdGhlIHByZXZpb3VzIFBsb3RseS1zaGFwZSBwcm9qZWN0aW9uIHByb2R1Y2VkLlxuICAgIHJldHVybiBbcm91bmRlZFBvbHlnb24oW2IueCwgYi54ICsgYi53aWR0aCwgYi54ICsgYi53aWR0aCwgYi54XSwgW2IueSArIGIuaGVpZ2h0LCBiLnkgKyBiLmhlaWdodCwgYi55LCBiLnldKV07XG4gIH1cbiAgaWYgKGIgaW5zdGFuY2VvZiBQb2x5Z29uKSByZXR1cm4gYi5jbG9zZWQgPT09IGZhbHNlID8gW10gOiBbZmxhdHRlblBvbHlnb24oYildO1xuICBpZiAoYiBpbnN0YW5jZW9mIE11bHRpUG9seWdvbikgcmV0dXJuIGIucG9seWdvbnMuZmlsdGVyKChwKSA9PiBwLmNsb3NlZCAhPT0gZmFsc2UpLm1hcChmbGF0dGVuUG9seWdvbik7XG4gIHJldHVybiBbXTtcbn1cbiJdfQ==
|
|
118
|
+
/**
|
|
119
|
+
* The open polylines a region traces (a polyline, or a multi-polygon's open parts), as interleaved
|
|
120
|
+
* `x, y` image px; a bézier polyline as its flattened curve. Closed shapes yield nothing.
|
|
121
|
+
*/
|
|
122
|
+
export function regionPolylines(region) {
|
|
123
|
+
const b = region.bounds;
|
|
124
|
+
const parts = b instanceof Polygon ? [b] : b instanceof MultiPolygon ? b.polygons : [];
|
|
125
|
+
return parts
|
|
126
|
+
.filter((p) => p.closed === false && p.xpoints.length >= 2)
|
|
127
|
+
.map((p) => {
|
|
128
|
+
const { xs, ys } = p.bezier
|
|
129
|
+
? bezierCurveFromHandles(p.xpoints, p.ypoints, resolveHandles(p.xpoints, p.ypoints, false, p.handlesIn, p.handlesOut), false)
|
|
130
|
+
: { xs: p.xpoints, ys: p.ypoints };
|
|
131
|
+
return Float64Array.from(xs.flatMap((x, i) => [x, ys[i]]));
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbi1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvcG9seWdvbi1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWlCbEUsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBWSxFQUFFLEVBQVksRUFBRSxPQUEyQixFQUFFO0lBQ25GLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztJQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNO1FBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtRQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUM3RCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFV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QUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RixPQUFPLEtBQUs7U0FDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztTQUMxRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU07WUFDekIsQ0FBQyxDQUFDLHNCQUFzQixDQUNwQixDQUFDLENBQUMsT0FBTyxFQUNULENBQUMsQ0FBQyxPQUFPLEVBQ1QsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQ3RFLEtBQUssQ0FDTjtZQUNILENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTXVsdGlQb2x5Z29uLCBQb2x5Z29uLCBSZWN0YW5nbGUsIFJlZ2lvbiB9IGZyb20gJy4vcmVnaW9uJztcbmltcG9ydCB7IGJlemllckN1cnZlRnJvbUhhbmRsZXMsIHJlc29sdmVIYW5kbGVzIH0gZnJvbSAnLi9iZXppZXInO1xuXG4vKipcbiAqIFBvbHlnb24gLyBSZWdpb24gY29uc3RydWN0aW9uIGFuZCBjbG9uaW5nIGluIG9uZSBwbGFjZSwgc28gY2FsbGVycyBzdG9wXG4gKiBoYW5kLWZpbGxpbmcgYG5wb2ludHNgLCBgeHBvaW50c2AsIGB5cG9pbnRzYCwgYGNvb3JkaW5hdGVzYCBhbmQgYGNsb3NlZGBcbiAqICh0aHJlZSByZWR1bmRhbnQgdmlld3Mgb2Ygb25lIHJpbmcgdGhhdCBldmVyeSBtdXRhdG9yIG11c3Qga2VlcCBpbiBzeW5jKS5cbiAqL1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIG1ha2VQb2x5Z29ufS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFrZVBvbHlnb25PcHRpb25zIHtcbiAgLyoqIGZhbHNlIGZvciBhbiBvcGVuIHBvbHlsaW5lOyBkZWZhdWx0IHRydWUuICovXG4gIGNsb3NlZD86IGJvb2xlYW47XG4gIC8qKiBJbnRlcmlvciByaW5nczsgb21pdHRlZCB3aGVuIGFic2VudCBvciBlbXB0eS4gKi9cbiAgaG9sZXM/OiBudW1iZXJbXVtdW107XG4gIGJlemllcj86IGJvb2xlYW47XG59XG5cbi8qKiBBIFBvbHlnb24gb3ZlciB0aGUgZ2l2ZW4gdmVydGV4IGFycmF5cyAodGFrZW4gYnkgcmVmZXJlbmNlKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUG9seWdvbih4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXSwgb3B0czogTWFrZVBvbHlnb25PcHRpb25zID0ge30pOiBQb2x5Z29uIHtcbiAgY29uc3QgcG9seSA9IG5ldyBQb2x5Z29uKCk7XG4gIHBvbHkubnBvaW50cyA9IHhzLmxlbmd0aDtcbiAgcG9seS54cG9pbnRzID0geHM7XG4gIHBvbHkueXBvaW50cyA9IHlzO1xuICBwb2x5LmNvb3JkaW5hdGVzID0geHMubWFwKCh4LCBpKSA9PiBbeCwgeXNbaV1dKTtcbiAgcG9seS5jbG9zZWQgPSBvcHRzLmNsb3NlZCA/PyB0cnVlO1xuICBpZiAob3B0cy5iZXppZXIpIHBvbHkuYmV6aWVyID0gdHJ1ZTtcbiAgaWYgKG9wdHMuaG9sZXMgJiYgb3B0cy5ob2xlcy5sZW5ndGgpIHBvbHkuaG9sZXMgPSBvcHRzLmhvbGVzO1xuICByZXR1cm4gcG9seTtcbn1cblxuLyoqIFRoZSBmb3VyIGNvcm5lcnMgb2YgYSByZWN0YW5nbGUgYXMgYSBjbG9zZWQgcmluZyAoY2xvY2t3aXNlIGZyb20gdG9wLWxlZnQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY3RUb1JpbmcocjogUGljazxSZWN0YW5nbGUsICd4JyB8ICd5JyB8ICd3aWR0aCcgfCAnaGVpZ2h0Jz4pOiB7IHhzOiBudW1iZXJbXTsgeXM6IG51bWJlcltdIH0ge1xuICByZXR1cm4ge1xuICAgIHhzOiBbci54LCByLnggKyByLndpZHRoLCByLnggKyByLndpZHRoLCByLnhdLFxuICAgIHlzOiBbci55LCByLnksIHIueSArIHIuaGVpZ2h0LCByLnkgKyByLmhlaWdodF0sXG4gIH07XG59XG5cbi8qKiBBIGRlZXAgY29weSBvZiBhIHBvbHlnb246IHZlcnRpY2VzLCBob2xlcyBhbmQgZXZlcnkgYsOpemllciBoYW5kbGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVQb2x5Z29uKHA6IFBvbHlnb24pOiBQb2x5Z29uIHtcbiAgY29uc3QgcG9seSA9IG5ldyBQb2x5Z29uKCk7XG4gIHBvbHkubnBvaW50cyA9IHAubnBvaW50cztcbiAgcG9seS54cG9pbnRzID0gcC54cG9pbnRzLnNsaWNlKCk7XG4gIHBvbHkueXBvaW50cyA9IHAueXBvaW50cy5zbGljZSgpO1xuICBwb2x5LmNvb3JkaW5hdGVzID0gcC5jb29yZGluYXRlcy5tYXAoKGMpID0+IGMuc2xpY2UoKSk7XG4gIHBvbHkuY2xvc2VkID0gcC5jbG9zZWQ7XG4gIHBvbHkuYmV6aWVyID0gcC5iZXppZXI7XG4gIGlmIChwLmhhbmRsZXNJbikgcG9seS5oYW5kbGVzSW4gPSBwLmhhbmRsZXNJbi5tYXAoKG8pID0+IG8uc2xpY2UoKSk7XG4gIGlmIChwLmhhbmRsZXNPdXQpIHBvbHkuaGFuZGxlc091dCA9IHAuaGFuZGxlc091dC5tYXAoKG8pID0+IG8uc2xpY2UoKSk7XG4gIGlmIChwLmhvbGVzKSBwb2x5LmhvbGVzID0gcC5ob2xlcy5tYXAoKHJpbmcpID0+IHJpbmcubWFwKChwdCkgPT4gcHQuc2xpY2UoKSkpO1xuICBpZiAocC5ob2xlSGFuZGxlc0luKSBwb2x5LmhvbGVIYW5kbGVzSW4gPSBwLmhvbGVIYW5kbGVzSW4ubWFwKChyKSA9PiByLm1hcCgobykgPT4gby5zbGljZSgpKSk7XG4gIGlmIChwLmhvbGVIYW5kbGVzT3V0KSBwb2x5LmhvbGVIYW5kbGVzT3V0ID0gcC5ob2xlSGFuZGxlc091dC5tYXAoKHIpID0+IHIubWFwKChvKSA9PiBvLnNsaWNlKCkpKTtcbiAgcmV0dXJuIHBvbHk7XG59XG5cbi8qKiBBIGRlZXAgY29weSBvZiBhbnkgcmVnaW9uIGdlb21ldHJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lQm91bmRzKGJvdW5kczogUmVjdGFuZ2xlIHwgUG9seWdvbiB8IE11bHRpUG9seWdvbik6IFJlY3RhbmdsZSB8IFBvbHlnb24gfCBNdWx0aVBvbHlnb24ge1xuICBpZiAoYm91bmRzIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ldyBSZWN0YW5nbGUoKTtcbiAgICByZWN0LnggPSBib3VuZHMueDtcbiAgICByZWN0LnkgPSBib3VuZHMueTtcbiAgICByZWN0LndpZHRoID0gYm91bmRzLndpZHRoO1xuICAgIHJlY3QuaGVpZ2h0ID0gYm91bmRzLmhlaWdodDtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBpZiAoYm91bmRzIGluc3RhbmNlb2YgTXVsdGlQb2x5Z29uKSB7XG4gICAgY29uc3QgbXAgPSBuZXcgTXVsdGlQb2x5Z29uKCk7XG4gICAgbXAucG9seWdvbnMgPSBib3VuZHMucG9seWdvbnMubWFwKChwKSA9PiBjbG9uZVBvbHlnb24ocCkpO1xuICAgIHJldHVybiBtcDtcbiAgfVxuICByZXR1cm4gY2xvbmVQb2x5Z29uKGJvdW5kcyk7XG59XG5cbi8qKlxuICogQSBjb3B5IG9mIGBleGlzdGluZ2AgKGlkLCBuYW1lLCBsYWJlbCwgY29sb3VyLCBjb2xvdXIgb3ZlcnJpZGUsIHNvdXJjZSxcbiAqIGZpbGUgbmFtZSwga2luZCwgeiwg4oCmKSB3aXRoIG5ldyBnZW9tZXRyeSBhbmQgb3B0aW9uYWwgZXh0cmEgZmllbGRzLiBVc2UgaXRcbiAqIHdoZW5ldmVyIGEgdG9vbCBlZGl0cyBhIHJlZ2lvbidzIHNoYXBlLCBzbyB0aGUgZWRpdCBuZXZlciBkcm9wcyBtZXRhZGF0YSBhbmRcbiAqIG5ldmVyIG11dGF0ZXMgdGhlIHN0b3JlJ3MgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQm91bmRzKGV4aXN0aW5nOiBSZWdpb24sIGJvdW5kczogUmVnaW9uWydib3VuZHMnXSwgcGF0Y2g6IFBhcnRpYWw8UmVnaW9uPiA9IHt9KTogUmVnaW9uIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ2lvbigpLCBleGlzdGluZywgcGF0Y2gsIHsgYm91bmRzIH0pO1xufVxuXG4vKiogQSBjbG9zZWQgcmluZyByb3VuZGVkIHRvIHdob2xlIHBpeGVscywgYXMgaW1hZ2UtcHJvY2Vzc2luZyBjb25zdW1lcnMgZXhwZWN0LiAqL1xuZnVuY3Rpb24gcm91bmRlZFBvbHlnb24oeHM6IG51bWJlcltdLCB5czogbnVtYmVyW10sIGhvbGVzPzogbnVtYmVyW11bXVtdKTogUG9seWdvbiB7XG4gIHJldHVybiBtYWtlUG9seWdvbih4cy5tYXAoTWF0aC5yb3VuZCksIHlzLm1hcChNYXRoLnJvdW5kKSwge1xuICAgIGhvbGVzOiBob2xlcz8ubWFwKChyaW5nKSA9PiByaW5nLm1hcCgoW3gsIHldKSA9PiBbTWF0aC5yb3VuZCh4KSwgTWF0aC5yb3VuZCh5KV0pKSxcbiAgfSk7XG59XG5cbi8qKiBBIHBvbHlnb24ncyBleHRlcmlvciBhbmQgaG9sZXMsIHdpdGggYSBiw6l6aWVyIHJlZ2lvbiBmbGF0dGVuZWQgdG8gaXRzIGN1cnZlLiAqL1xuZnVuY3Rpb24gZmxhdHRlblBvbHlnb24ocDogUG9seWdvbik6IFBvbHlnb24ge1xuICBpZiAoIXAuYmV6aWVyKSByZXR1cm4gcm91bmRlZFBvbHlnb24ocC54cG9pbnRzLCBwLnlwb2ludHMsIHAuaG9sZXMpO1xuICBjb25zdCBjbG9zZWQgPSBwLmNsb3NlZCAhPT0gZmFsc2U7XG4gIGNvbnN0IGN1cnZlID0gYmV6aWVyQ3VydmVGcm9tSGFuZGxlcyhcbiAgICBwLnhwb2ludHMsXG4gICAgcC55cG9pbnRzLFxuICAgIHJlc29sdmVIYW5kbGVzKHAueHBvaW50cywgcC55cG9pbnRzLCBjbG9zZWQsIHAuaGFuZGxlc0luLCBwLmhhbmRsZXNPdXQpLFxuICAgIGNsb3NlZCxcbiAgKTtcbiAgY29uc3QgaG9sZXMgPSBwLmhvbGVzPy5tYXAoKHJpbmcsIGgpID0+IHtcbiAgICBjb25zdCBoeCA9IHJpbmcubWFwKChwdCkgPT4gcHRbMF0pO1xuICAgIGNvbnN0IGh5ID0gcmluZy5tYXAoKHB0KSA9PiBwdFsxXSk7XG4gICAgY29uc3QgYyA9IGJlemllckN1cnZlRnJvbUhhbmRsZXMoXG4gICAgICBoeCxcbiAgICAgIGh5LFxuICAgICAgcmVzb2x2ZUhhbmRsZXMoaHgsIGh5LCB0cnVlLCBwLmhvbGVIYW5kbGVzSW4/LltoXSwgcC5ob2xlSGFuZGxlc091dD8uW2hdKSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICByZXR1cm4gZHJvcENsb3NpbmdQb2ludChjLnhzLCBjLnlzKS54cy5tYXAoKHgsIGkpID0+IFt4LCBjLnlzW2ldXSk7XG4gIH0pO1xuICBjb25zdCByaW5nID0gZHJvcENsb3NpbmdQb2ludChjdXJ2ZS54cywgY3VydmUueXMpO1xuICByZXR1cm4gcm91bmRlZFBvbHlnb24ocmluZy54cywgcmluZy55cywgaG9sZXMpO1xufVxuXG4vKiogQSBzYW1wbGVkIGNsb3NlZCBjdXJ2ZSByZXBlYXRzIGl0cyBmaXJzdCBwb2ludCBhdCB0aGUgZW5kOyByaW5ncyBkb24ndC4gKi9cbmZ1bmN0aW9uIGRyb3BDbG9zaW5nUG9pbnQoeHM6IG51bWJlcltdLCB5czogbnVtYmVyW10pOiB7IHhzOiBudW1iZXJbXTsgeXM6IG51bWJlcltdIH0ge1xuICBjb25zdCBuID0geHMubGVuZ3RoO1xuICBpZiAobiA+IDEgJiYgeHNbMF0gPT09IHhzW24gLSAxXSAmJiB5c1swXSA9PT0geXNbbiAtIDFdKSByZXR1cm4geyB4czogeHMuc2xpY2UoMCwgLTEpLCB5czogeXMuc2xpY2UoMCwgLTEpIH07XG4gIHJldHVybiB7IHhzLCB5cyB9O1xufVxuXG4vKipcbiAqIFRoZSBjbG9zZWQgcG9seWdvbnMgYSByZWdpb24gY292ZXJzLCBmb3IgaW1hZ2UtcHJvY2Vzc2luZyBjb25zdW1lcnMgKGNyb3AsXG4gKiBzZWdtZW50YXRpb24gcmVxdWVzdHMpOiBhIHJlY3RhbmdsZSdzIGZvdXIgY29ybmVycywgYSBjbG9zZWQgcG9seWdvbiB3aXRoIGl0c1xuICogaG9sZXMgKGEgYsOpemllciByZWdpb24gYXMgaXRzIGZsYXR0ZW5lZCBjdXJ2ZSksIG9uZSBwb2x5Z29uIHBlciBwYXJ0IG9mIGFcbiAqIG11bHRpLXBvbHlnb24uIE9wZW4gcG9seWxpbmVzIGNvdmVyIG5vIGFyZWEgYW5kIHlpZWxkIG5vdGhpbmcuIENvb3JkaW5hdGVzXG4gKiBhcmUgcm91bmRlZCB0byB3aG9sZSBwaXhlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpb25Qb2x5Z29ucyhyZWdpb246IFJlZ2lvbik6IFBvbHlnb25bXSB7XG4gIGNvbnN0IGIgPSByZWdpb24uYm91bmRzO1xuICBpZiAoYiBpbnN0YW5jZW9mIFJlY3RhbmdsZSkge1xuICAgIC8vIEJvdHRvbS1sZWZ0IGZpcnN0LCBhcyB0aGUgcHJldmlvdXMgUGxvdGx5LXNoYXBlIHByb2plY3Rpb24gcHJvZHVjZWQuXG4gICAgcmV0dXJuIFtyb3VuZGVkUG9seWdvbihbYi54LCBiLnggKyBiLndpZHRoLCBiLnggKyBiLndpZHRoLCBiLnhdLCBbYi55ICsgYi5oZWlnaHQsIGIueSArIGIuaGVpZ2h0LCBiLnksIGIueV0pXTtcbiAgfVxuICBpZiAoYiBpbnN0YW5jZW9mIFBvbHlnb24pIHJldHVybiBiLmNsb3NlZCA9PT0gZmFsc2UgPyBbXSA6IFtmbGF0dGVuUG9seWdvbihiKV07XG4gIGlmIChiIGluc3RhbmNlb2YgTXVsdGlQb2x5Z29uKSByZXR1cm4gYi5wb2x5Z29ucy5maWx0ZXIoKHApID0+IHAuY2xvc2VkICE9PSBmYWxzZSkubWFwKGZsYXR0ZW5Qb2x5Z29uKTtcbiAgcmV0dXJuIFtdO1xufVxuXG4vKipcbiAqIFRoZSBvcGVuIHBvbHlsaW5lcyBhIHJlZ2lvbiB0cmFjZXMgKGEgcG9seWxpbmUsIG9yIGEgbXVsdGktcG9seWdvbidzIG9wZW4gcGFydHMpLCBhcyBpbnRlcmxlYXZlZFxuICogYHgsIHlgIGltYWdlIHB4OyBhIGLDqXppZXIgcG9seWxpbmUgYXMgaXRzIGZsYXR0ZW5lZCBjdXJ2ZS4gQ2xvc2VkIHNoYXBlcyB5aWVsZCBub3RoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uUG9seWxpbmVzKHJlZ2lvbjogUmVnaW9uKTogRmxvYXQ2NEFycmF5W10ge1xuICBjb25zdCBiID0gcmVnaW9uLmJvdW5kcztcbiAgY29uc3QgcGFydHMgPSBiIGluc3RhbmNlb2YgUG9seWdvbiA/IFtiXSA6IGIgaW5zdGFuY2VvZiBNdWx0aVBvbHlnb24gPyBiLnBvbHlnb25zIDogW107XG4gIHJldHVybiBwYXJ0c1xuICAgIC5maWx0ZXIoKHApID0+IHAuY2xvc2VkID09PSBmYWxzZSAmJiBwLnhwb2ludHMubGVuZ3RoID49IDIpXG4gICAgLm1hcCgocCkgPT4ge1xuICAgICAgY29uc3QgeyB4cywgeXMgfSA9IHAuYmV6aWVyXG4gICAgICAgID8gYmV6aWVyQ3VydmVGcm9tSGFuZGxlcyhcbiAgICAgICAgICAgIHAueHBvaW50cyxcbiAgICAgICAgICAgIHAueXBvaW50cyxcbiAgICAgICAgICAgIHJlc29sdmVIYW5kbGVzKHAueHBvaW50cywgcC55cG9pbnRzLCBmYWxzZSwgcC5oYW5kbGVzSW4sIHAuaGFuZGxlc091dCksXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICApXG4gICAgICAgIDogeyB4czogcC54cG9pbnRzLCB5czogcC55cG9pbnRzIH07XG4gICAgICByZXR1cm4gRmxvYXQ2NEFycmF5LmZyb20oeHMuZmxhdE1hcCgoeCwgaSkgPT4gW3gsIHlzW2ldXSkpO1xuICAgIH0pO1xufVxuIl19
|