@jax-data-science/sci-image-visualizer 0.17.0 → 0.18.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/lib/contracts/display-types.mjs +3 -2
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/ports/spatial-data.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/spatial-dataset.contract.mjs +1 -1
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/geometry/cell-meshes.mjs +37 -0
- package/esm2022/lib/geometry/place.mjs +47 -0
- package/esm2022/lib/implementations/napari-js/napari-camera-depth.mjs +93 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +81 -15
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-cells.mjs +746 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +325 -18
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-transcripts.mjs +182 -24
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +95 -5
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +15 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +30 -2
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +40 -1
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +111 -28
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +14 -2
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +180 -48
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +28 -8
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +2 -2
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +10 -1
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +30 -3
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +15 -3
- package/esm2022/lib/region-editor/region-editor.component.mjs +24 -4
- package/esm2022/lib/region-source/region-source-ops.mjs +7 -1
- package/esm2022/lib/region-source/region-tiles.mjs +1 -1
- package/esm2022/lib/region-source/worker-region-source.mjs +24 -1
- package/esm2022/lib/routing-visualizer.service.mjs +404 -7
- package/esm2022/lib/spatial/observations-in-selection.mjs +83 -0
- package/esm2022/lib/spatial/plane-cells.mjs +119 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +298 -5
- package/esm2022/lib/spatial/spatial-encoding.mjs +35 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +34 -1
- package/esm2022/lib/spatial/spatial-planes.mjs +49 -0
- package/esm2022/lib/spatial/spatial-selection.mjs +2 -2
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +38 -1
- package/esm2022/lib/spatial/transcripts-in-selection.mjs +208 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +42 -65
- package/esm2022/lib/spatial-controls/spatial-color-by/spatial-color-by.component.mjs +187 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +47 -12
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +38 -10
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +79 -57
- package/esm2022/lib/spatial-controls/spatial-selection-observations/spatial-selection-observations.component.mjs +101 -0
- package/esm2022/lib/spatial-controls/spatial-selection-transcripts/spatial-selection-transcripts.component.mjs +94 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +9 -3
- package/esm2022/lib/store/region-source-scope.mjs +10 -1
- package/esm2022/lib/store/region-store.service.mjs +33 -2
- package/esm2022/lib/toolbar/toolbar.component.mjs +10 -3
- package/esm2022/lib/visualizer/spatial-region-set.mjs +95 -0
- package/esm2022/lib/visualizer.component.mjs +40 -4
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DHrHO2ay.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CBiLcnE6.mjs} +4521 -759
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CBiLcnE6.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-CKEUwNta.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-BXHjv4PE.mjs} +2 -2
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-CKEUwNta.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-BXHjv4PE.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +1 -1
- package/fesm2022/region-source.worker.js +84 -2
- package/lib/contracts/display-types.d.ts +90 -4
- package/lib/contracts/image.contract.d.ts +6 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +7 -0
- package/lib/contracts/region-editor-api.contract.d.ts +9 -0
- package/lib/contracts/region-store.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +7 -1
- package/lib/contracts/visualizer.contract.d.ts +43 -1
- package/lib/geometry/cell-meshes.d.ts +27 -0
- package/lib/geometry/place.d.ts +45 -0
- package/lib/implementations/napari-js/napari-camera-depth.d.ts +23 -0
- package/lib/implementations/napari-js/napari-loading-state.d.ts +1 -1
- package/lib/implementations/napari-js/napari-scene.d.ts +12 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +19 -3
- package/lib/implementations/napari-js/napari-spatial-3d-cells.d.ts +141 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +87 -0
- package/lib/implementations/napari-js/napari-spatial-3d-transcripts.d.ts +49 -8
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +22 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +12 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +15 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +27 -1
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +38 -19
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +2 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +53 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +11 -2
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +7 -0
- package/lib/region-editor/class-tree/class-tree.component.d.ts +16 -1
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +10 -1
- package/lib/region-editor/region-editor.component.d.ts +4 -0
- package/lib/region-source/region-source-ops.d.ts +12 -0
- package/lib/region-source/region-tiles.d.ts +8 -0
- package/lib/region-source/worker-region-source.d.ts +18 -0
- package/lib/routing-visualizer.service.d.ts +140 -1
- package/lib/spatial/observations-in-selection.d.ts +43 -0
- package/lib/spatial/plane-cells.d.ts +37 -0
- package/lib/spatial/spatial-controls.facade.d.ts +59 -0
- package/lib/spatial/spatial-encoding.d.ts +14 -1
- package/lib/spatial/spatial-hover.d.ts +23 -0
- package/lib/spatial/spatial-planes.d.ts +22 -0
- package/lib/spatial/spatial-selection.d.ts +2 -1
- package/lib/spatial/spatial-tile-merge.d.ts +9 -0
- package/lib/spatial/transcripts-in-selection.d.ts +95 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +19 -28
- package/lib/spatial-controls/spatial-color-by/spatial-color-by.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +17 -2
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +16 -6
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +26 -23
- package/lib/spatial-controls/spatial-selection-observations/spatial-selection-observations.component.d.ts +48 -0
- package/lib/spatial-controls/spatial-selection-transcripts/spatial-selection-transcripts.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +3 -1
- package/lib/store/region-source-scope.d.ts +4 -0
- package/lib/store/region-store.service.d.ts +21 -0
- package/lib/toolbar/toolbar.component.d.ts +6 -1
- package/lib/visualizer/spatial-region-set.d.ts +55 -0
- package/lib/visualizer.component.d.ts +14 -0
- package/package.json +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DHrHO2ay.mjs.map +0 -1
|
@@ -7,4 +7,4 @@ import { InjectionToken } from '@angular/core';
|
|
|
7
7
|
* the routing/fallback implementation can change without touching constructors.
|
|
8
8
|
*/
|
|
9
9
|
export const VISUALIZER = new InjectionToken('VISUALIZER');
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsaXplci5jb250cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW10Qi9DOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBYyxZQUFZLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFNlY3Rpb25BeGlzLCBTZWN0aW9uVmlld3MgfSBmcm9tICcuL3NlY3Rpb24tdmlldy5jb250cmFjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJ2ltYWdlLWpzJztcblxuaW1wb3J0IHsgSUltYWdlSW5mbywgSUltYWdlTWV0YWRhdGEgfSBmcm9tICcuL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IFBvbHlnb24sIFJlZ2lvbiB9IGZyb20gJy4uL21vZGVscy9yZWdpb24nO1xuaW1wb3J0IHsgUGxvdFR5cGUsIFBsb3RUeXBlRGVzY3JpcHRvciB9IGZyb20gJy4vcGxvdC10eXBlJztcbmltcG9ydCB7IFZpZXdlckNhcGFiaWxpdGllcyB9IGZyb20gJy4vY2FwYWJpbGl0aWVzLmNvbnRyYWN0JztcbmltcG9ydCB7IElSZWdpb25PdmVybGF5IH0gZnJvbSAnLi9yZWdpb24tb3ZlcmxheS5jb250cmFjdCc7XG5pbXBvcnQgeyBJSGlzdG9ncmFtIH0gZnJvbSAnLi9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgQ2FudmFzVG9vbE9wdGlvbnMsXG4gIENvbG9ybWFwTm9kZSxcbiAgSVdhbmRPcHRpb25zLFxuICBJQnJ1c2hPcHRpb25zLFxuICBTcGF0aWFsVmlld1N0YXRlLFxuICBTcGF0aWFsQ29sb3JCeSxcbn0gZnJvbSAnLi9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7XG4gIENhdGVnb3JpY2FsQ29sdW1uTWV0YSxcbiAgU3BhdGlhbERhdGFzZXQsXG4gIFNwYXRpYWxFbWJlZGRpbmcsXG4gIFNwYXRpYWxNYXJrZXJHZW5lcyxcbiAgU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gIFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzLFxufSBmcm9tICcuL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IFBsb3RNb2RlVmlld3BvcnQgfSBmcm9tICcuL3Bsb3QtdHlwZS1jb250cmlidXRpb24uY29udHJhY3QnO1xuXG4vKipcbiAqIEJhY2tlbmQtbmV1dHJhbCB2aXN1YWxpemF0aW9uIGNvbnRyYWN0LiBQbG90bHkgaXMgb25lIGltcGxlbWVudGF0aW9uO1xuICogT3BlblNlYWRyYWdvbiBpcyBhbm90aGVyIChmb3IgdGhlIGltYWdlIHBsb3QgdHlwZSkuIFRoZSBhYnN0cmFjdGlvbiByZW5kZXJzXG4gKiBkYXRhIOKAlCBhIHJhc3RlciBpbWFnZSBPUiBhIHNjaWVudGlmaWMgcGxvdCAoaGVhdG1hcCwgc3VyZmFjZSwgY29udG91cixcbiAqIHNjYXR0ZXIsIGxpbmUsIGlzb3N1cmZhY2UpIOKAlCBkcmF3cyByZWdpb25zIG9uIGl0LCBhbmQgZHJpdmVzIG9uLWNhbnZhcyB0b29scy5cbiAqXG4gKiBTcGxpdCBpbnRvIHJvbGUgaW50ZXJmYWNlcyBzbyBhIGNvbnN1bWVyIGNhbiBkZXBlbmQgb25seSBvbiB0aGUgc2xpY2UgaXRcbiAqIHVzZXMsIHRoZW4gY29tcG9zZWQgaW50byBgSVZpc3VhbGl6ZXJgLlxuICovXG5cbi8qKiBQaXhlbCByZWFkYmFjayBzaGFwZSByZXR1cm5lZCBieSBgZ2V0RGlzcGxheWVkUGl4ZWxEYXRhYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGl4ZWxEYXRhIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGNoYW5uZWxzOiBudW1iZXI7XG4gIGRhdGE6IFVpbnQ4Q2xhbXBlZEFycmF5O1xufVxuXG4vKiogSW50ZW5zaXR5IHNhbXBsZWQgYWxvbmcgYSBsaW5lIFJPSSAoUGxvdFR5cGUuTElORSBvdmVyIGltYWdlIGRhdGEpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlbnNpdHlQcm9maWxlIHtcbiAgLyoqIERpc3RhbmNlIGFsb25nIHRoZSBsaW5lLiBJbiBtaWNyb25zIHdoZW4gdGhlIGltYWdlIGNhcnJpZXMgYSBwaHlzaWNhbFxuICAgKiAgcGl4ZWwgc2l6ZSAobXBwKTsgb3RoZXJ3aXNlIGluIGltYWdlIHBpeGVscy4gU2VlIHtAbGluayB1bml0fS4gKi9cbiAgcG9zaXRpb25zOiBudW1iZXJbXTtcbiAgLyoqIFNhbXBsZWQgaW50ZW5zaXR5IChncmF5c2NhbGUgdmFsdWUgb3IgUkdCIGx1bWluYW5jZSkuICovXG4gIHZhbHVlczogbnVtYmVyW107XG4gIC8qKiBVbml0IG9mIHtAbGluayBwb3NpdGlvbnN9OiAnwrVtJyB3aGVuIHNjYWxlZCBieSB0aGUgaW1hZ2UncyBtcHAsIGVsc2UgJ3B4Jy4gKi9cbiAgdW5pdD86ICfCtW0nIHwgJ3B4JztcbiAgLyoqIFN0YWJsZSBpZCBvZiB0aGUgbGluZSBST0kgdGhpcyBwcm9maWxlIGNhbWUgZnJvbSAobXVsdGktbGluZSBzdXBwb3J0KS4gKi9cbiAgaWQ/OiBudW1iZXI7XG4gIC8qKiBDb2xvdXIgb2YgdGhlIGxpbmUgUk9JIOKAlCB0aGUgaW5zZXQgdHJhY2UgaXMgZHJhd24gaW4gdGhlIHNhbWUgY29sb3VyLiAqL1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGF0IGBJRGF0YVJlbmRlcmVyLmxvYWQoKWAgcmVzb2x2ZXMgdG8uIEJhY2tlbmQtc3BlY2lmaWMgYmV5b25kIGBmaWxlbmFtZWAsXG4gKiB3aGljaCBuYW1lcyB0aGUgaW1hZ2UgdGhlIGhhbmRsZSB3YXMgbG9hZGVkIGZvcjogdGhlIGhvc3QgY29tcGFyZXMgaXQgd2l0aCB0aGVcbiAqIGltYWdlIGl0IGFza2VkIGZvciwgdG8gZHJvcCBhIGhhbmRsZSBhIG5ld2VyIHJlcXVlc3QgaGFzIG92ZXJ0YWtlbi4gUGFzcyB0aGVcbiAqIGhhbmRsZSBvbiB0byBgcGxvdCgpYCB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGVkSW1hZ2Uge1xuICByZWFkb25seSBmaWxlbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSByZW5kZXIvdmlld3BvcnQgcm9sZTogbG9hZCBkYXRhLCByZW5kZXIgaXQgKGltYWdlIG9yIHBsb3QpLCBhbmQgaGFuZGxlXG4gKiB6b29tLCBzdGFjayBuYXZpZ2F0aW9uLCBhbmQgcGl4ZWwgcmVhZGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFSZW5kZXJlciB7XG4gIC8qKiBGZXRjaCB3aGF0IHtAbGluayBwbG90fSBuZWVkcyBmb3IgdGhpcyBpbWFnZS9zbGljZS4gYHNpZ25hbGAgYWJvcnRzIHdoZW4gdGhlXG4gICAqICBob3N0IG5vIGxvbmdlciB3YW50cyB0aGUgcmVzdWx0IChhIG5ld2VyIGltYWdlLCBDYW5jZWwsIHRlYXJkb3duKTsgYSBiYWNrZW5kXG4gICAqICBtYXkgc3RvcCBpdHMgbmV0d29yayB3b3JrIHRoZW4uIE9wdGlvbmFsLCBhbmQgaWdub3JlZCBieSBiYWNrZW5kcyB0aGF0IGRvXG4gICAqICBub3Qgc3VwcG9ydCBpdCB5ZXQuICovXG4gIGxvYWQoaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLCB6SW5kZXg6IG51bWJlciwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPExvYWRlZEltYWdlPjtcbiAgLyoqIGBpbWFnZUxvYWRlZGAgaXMgdGhlIHtAbGluayBMb2FkZWRJbWFnZX0gaGFuZGxlIHJldHVybmVkIGJ5IGBsb2FkKClgIChvciBudWxsXG4gICAqICBmb3IgYSBkcmF3IHdpdGggbm8gaW1hZ2UpIOKAlCBwYXNzIGl0IHN0cmFpZ2h0IHRocm91Z2guIFJlc29sdmVzIGZhbHNlIHdoZW4gdGhlXG4gICAqICBiYWNrZW5kIGNvdWxkIG5vdCBkcmF3IChubyBwbG90IHRhcmdldCwgbm8gV2ViR1BVLCDigKYpLiAqL1xuICBwbG90KFxuICAgIHBsb3REaXY6IHN0cmluZyxcbiAgICBpbWFnZUxvYWRlZDogdW5rbm93bixcbiAgICBpbWFnZUluZm86IElJbWFnZUluZm8sXG4gICAgc2NyZWVuSGVpZ2h0OiBudW1iZXIsXG4gICAgcGxvdFR5cGU6IFBsb3RUeXBlLFxuICAgIGluUGxhY2U/OiBib29sZWFuLFxuICApOiBQcm9taXNlPGJvb2xlYW4+O1xuICAvKiogQGRlcHJlY2F0ZWQgUGxvdGx5LXNwZWNpZmljIHJlLXJlbmRlcjsgdGhlIE9TRCBiYWNrZW5kIG5vLW9wcyBpdC4gVGhlIGhvc3RcbiAgICogIHJlLWRyaXZlcyBgcGxvdCgpYCBmcm9tIGl0cyBpbWFnZSBzdHJlYW0gaW5zdGVhZC4gKi9cbiAgcmVsb2FkQW5kUGxvdCgpOiB2b2lkO1xuICByZXNldCgpOiB2b2lkO1xuICByZWxheW91dCh0cnVlSW1hZ2VTaXplPzogbnVtYmVyW10pOiB2b2lkO1xuICAvKipcbiAgICogRml0IHRoZSB3aG9sZSBpbWFnZSAob3Igc2NlbmUpIGludG8gdGhlIHZpZXcg4oCUIGV2ZXJ5IGJhY2tlbmQgZG9lczogUGxvdGx5XG4gICAqIGF1dG9yYW5nZXMgaXRzIGF4ZXMsIE9wZW5TZWFkcmFnb24gZ29lcyBob21lLCBuYXBhcmktanMgZml0cyBpdHMgY2FtZXJhLiBUaGVcbiAgICogYmFja2VuZCB0aGVuIGVtaXRzIG9uIHtAbGluayBnZXRBdXRvc2NhbGVFdmVudH0uXG4gICAqL1xuICBmaXRUb1ZpZXcoKTogdm9pZDtcbiAgLyoqIFJlc2V0IHRoZSB2aWV3IHRvIHRoZSBpbWFnZSBleHRlbnQuIFNhbWUgaW50ZW50IGFzIHtAbGluayBmaXRUb1ZpZXd9OyBrZXB0IGZvclxuICAgKiAgY2FsbGVycyBvZiB0aGUgb3JpZ2luYWwgbmFtZS4gKi9cbiAgcmVzZXRBeGVzKCk6IHZvaWQ7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGZpdFRvVmlld30g4oCUIHRoZSBzYW1lIG9wZXJhdGlvbiB1bmRlciBpdHMgYmFja2VuZC1uZXV0cmFsIG5hbWUuICovXG4gIGF1dG9zY2FsZSgpOiB2b2lkO1xuICB6b29tSW4oKTogdm9pZDtcbiAgem9vbU91dCgpOiB2b2lkO1xuICBzZXREcmFnTW9kZShtb2RlOiBzdHJpbmcgfCBmYWxzZSk6IHZvaWQ7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYGdldE9zZFZpZXdPcHRpb25zKCkuc2V0TmF2aWdhdG9yVmlzaWJsZSgpYCBvbiBgSVZpc3VhbGl6ZXJgLiAqL1xuICBzZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBnZXRPc2RWaWV3T3B0aW9ucygpLnNldEltYWdlU21vb3RoaW5nRW5hYmxlZCgpYCBvbiBgSVZpc3VhbGl6ZXJgLiAqL1xuICBzZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgc2V0U2hvd1N0YWNrKHNob3dzdGFjazogYm9vbGVhbik6IHZvaWQ7XG4gIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IHZvaWQ7XG4gIHNldFN0YWNrTG9hZGluZyhzdGFja0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkO1xuICBpc1N0YWNrTG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBnZXRTdGFja0xvYWRpbmdQcm9ncmVzcygpOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIC8qKiBDYW5jZWwgYW55IGluLWZsaWdodCBtdWx0aS1mcmFtZSBsb2FkaW5nICh2b2x1bWUtYXNzZW1ibHkgLyBzdXJmYWNlIHByZWxvYWQpIHNvIGl0IHN0b3BzXG4gICAqICBmZXRjaGluZyBtb3JlIGZyYW1lcyBhbmQgY2xlYXJzIHRoZSBsb2FkaW5nIHN0YXRlLiBPcHRpb25hbCDigJQgb25seSBiYWNrZW5kcyB0aGF0IHN0cmVhbSBhXG4gICAqICB6LXN0YWNrIChuYXBhcmktanMgV2ViR1BVKSBkbyByZWFsIHdvcmsgaGVyZTsgb3RoZXJzIG5vLW9wLiAqL1xuICBjYW5jZWxMb2FkaW5nPygpOiB2b2lkO1xuXG4gIGdldFRydWVJbWFnZVNpemUoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbDtcbiAgZ2V0Q3VycmVudEltYWdlKCk6IFByb21pc2U8SW1hZ2UgfCBudWxsPjtcbiAgZ2V0RGlzcGxheWVkUGl4ZWxEYXRhKCk6IFBpeGVsRGF0YSB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIG9mIHRoZSBvcmlnaW5hbCwgZnVsbC1yZXNvbHV0aW9uIGltYWdlIHRoYXQgdGhlIHBpeGVscyByZXR1cm5lZFxuICAgKiBieSB7QGxpbmsgZ2V0RGlzcGxheWVkUGl4ZWxEYXRhfSBjdXJyZW50bHkgY292ZXIg4oCUIGB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfWBcbiAgICogaW4gZnVsbC1pbWFnZSBwaXhlbCBjb29yZGluYXRlcy4gV2hlbiB6b29tZWQvcGFubmVkIGludG8gYSBzdWItYXJlYSB0aGlzIGlzXG4gICAqIHRoZSBjcm9wJ3Mgb3JpZ2luICsgZXh0ZW50OyB3aGVuIHpvb21lZCBvdXQvcGFubmVkIGJleW9uZCB0aGUgZWRnZXMsIHRoZVxuICAgKiByZWN0YW5nbGUgbWF5IGV4dGVuZCBvdXRzaWRlIHRoZSBpbWFnZSBib3VuZHMgKG1hdGNoaW5nIHRoZSBwaXhlbCByZWFkYmFja1xuICAgKiBjYW52YXMpLiBMZXRzIGEgY29uc3VtZXIgbWFwIGRpc3BsYXllZC1waXhlbCBjb29yZGluYXRlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbFxuICAgKiBpbWFnZSB2aWEgYG9yaWdpbiArIGRpc3BsYXllZFB4ICogKGV4dGVudCAvIGRpc3BsYXllZERpbSlgLlxuICAgKlxuICAgKiBSZXR1cm5zIGBudWxsYCB3aGVuIHRoZSB2aWV3cG9ydCBpc24ndCBsYWlkIG91dCB5ZXQgb3IgdGhlIGJhY2tlbmQgY2FuJ3RcbiAgICogcmVwb3J0IGl0IOKAlCBjYWxsZXJzIHNob3VsZCB0aGVuIGZhbGwgYmFjayB0byB0aGUgZnVsbC1pbWFnZSBzY2FsZSAodHJlYXRcbiAgICogdGhlIGRpc3BsYXllZCBwaXhlbHMgYXMgYSBkb3duc2FtcGxlIG9mIHRoZSB3aG9sZSBpbWFnZSkuXG4gICAqL1xuICBnZXREaXNwbGF5ZWRTb3VyY2VSZWN0KCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsO1xuICBkb3dubG9hZEltYWdlKCk6IHZvaWQ7XG5cbiAgc2V0UGxvdFR5cGUocGxvdFR5cGU6IFBsb3RUeXBlKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZ2V0Vm9sdW1lUmVzb2x1dGlvbigpPy5zZXQoKWAgb24gYElWaXN1YWxpemVyYC4gKi9cbiAgc2V0UmVzb2x1dGlvblNjYWxlPyhzY2FsZTogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZ2V0Vm9sdW1lUmVzb2x1dGlvbigpPy5nZXQoKWAgb24gYElWaXN1YWxpemVyYCAodGhpcyByZXR1cm5zIDEgd2l0aG91dCBvbmUpLiAqL1xuICBnZXRSZXNvbHV0aW9uU2NhbGU/KCk6IG51bWJlcjtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZ2V0U3VyZmFjZTNkQ29udHJvbHMoKT8uc2V0U3VyZmFjZURyYWdNb2RlKClgIOKAlCAzRCBzY2VuZSBjb250cm9sc1xuICAgKiAgb25seSBleGlzdCBvbiBhIGJhY2tlbmQgdGhhdCByZW5kZXJzIDNEIHBsb3QgdHlwZXM7IHRoaXMgc2lsZW50bHkgbm8tb3BzIG9uIE9TRC4gKi9cbiAgc2V0U3VyZmFjZURyYWdNb2RlKG1vZGU6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYGdldFN1cmZhY2UzZENvbnRyb2xzKClgIOKAlCBzZWUge0BsaW5rIHNldFN1cmZhY2VEcmFnTW9kZX0uICovXG4gIHJlc2V0U3VyZmFjZUNhbWVyYSgpOiB2b2lkO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgYmFja2VuZCBmaXRzIHRoZSB2aWV3ICh7QGxpbmsgZml0VG9WaWV3fSkuICovXG4gIGdldEF1dG9zY2FsZUV2ZW50KCk6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgLyoqIFBsb3QgdHlwZXMgdGhpcyBiYWNrZW5kIGFkdmVydGlzZXMgKGRyaXZlcyB0aGUgVUkgc2VsZWN0b3IpLiAqL1xuICBnZXRQbG90VHlwZURlc2NyaXB0b3JzKCk6IFBsb3RUeXBlRGVzY3JpcHRvcltdO1xuXG4gIC8qKiBJbnRlbnNpdHkgYWxvbmcgdGhlIGxpbmUgUk9JczsgZW1pdHMgdGhlIGZ1bGwgc2V0IGFzIGFueSBsaW5lIGlzIGFkZGVkLFxuICAgKiAgbW92ZWQsIG9yIHJlbW92ZWQgKFBsb3RUeXBlLkxJTkUpLiBPbmUgZW50cnkgcGVyIGxpbmUgUk9JLiAqL1xuICBnZXRJbnRlbnNpdHlQcm9maWxlJCgpOiBPYnNlcnZhYmxlPEludGVuc2l0eVByb2ZpbGVbXT47XG5cbiAgLyoqIFJlbmRlciB0aGUgZmxvYXRpbmcgaW50ZW5zaXR5LXByb2ZpbGUgaW5zZXQgY2hhcnQgaW50byBgZGl2SWRgIGZyb20gdGhlXG4gICAqICBnaXZlbiBwcm9maWxlcyAob25lIHRyYWNlIHBlciBsaW5lIFJPSSwgY29sb3VyZWQgdG8gbWF0Y2ggaXRzIGxpbmUpLlxuICAgKiAgT3duZWQgYnkgdGhlIGJhY2tlbmQgc28gY29uc3VtZXJzIG5ldmVyIHJlYWNoIGEgY2hhcnRpbmcgbGlicmFyeSBkaXJlY3RseS4gKi9cbiAgcmVuZGVySW50ZW5zaXR5SW5zZXQoZGl2SWQ6IHN0cmluZywgcHJvZmlsZXM6IEludGVuc2l0eVByb2ZpbGVbXSk6IHZvaWQ7XG59XG5cbi8qKiBSZWdpb24vc2hhcGUgc3RhdGU6IENSVUQsIHNlbGVjdGlvbiwgY2xhc3NpZmljYXRpb24gY29sb3VycywgR2VvSlNPTiBJL08uICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpb25TdG9yZSB7XG4gIHNldFJlZ2lvbnMoXG4gICAgcmVnaW9uczogUmVnaW9uW10sXG4gICAgc2hvd1JlZ2lvbkxhYmVsPzogYm9vbGVhbixcbiAgICBpc1JlZ2lvblNhdmVPbj86IGJvb2xlYW4sXG4gICAgZmlsbENvbG9yPzogc3RyaW5nLFxuICAgIGFwcGVuZD86IGJvb2xlYW4sXG4gICk6IHZvaWQ7XG4gIC8qKiBGcmFtZXdvcmstbmV1dHJhbCBhY2Nlc3NvciDigJQgdGhlIGNhbm9uaWNhbCB3YXkgdG8gcmVhZCBjdXJyZW50IHJlZ2lvbnMuICovXG4gIGdldFJlZ2lvbnMoKTogUmVnaW9uW107XG4gIC8qKiBUaGUgY3VycmVudCByZWdpb25zIGFzIHBvbHlnb25zIChyZWN0YW5nbGVzIGV4cGFuZGVkKSwgZm9yIHNlcnZlciByZXF1ZXN0cy4gKi9cbiAgZ2V0UmVnaW9uUG9seWdvbnMoKTogUG9seWdvbltdO1xuICAvKiogRW1pdHMgdGhlIHJlZ2lvbiBzZXQgd2hlbmV2ZXIgaXQgY2hhbmdlcy4gKi9cbiAgZ2V0UmVnaW9uVXBkYXRlRXZlbnQoKTogT2JzZXJ2YWJsZTxSZWdpb25bXT47XG5cbiAgc2V0U2VsZWN0ZWRTaGFwZUluZGljZXMoaW5kaWNlczogbnVtYmVyW10pOiB2b2lkO1xuICBnZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyQoKTogT2JzZXJ2YWJsZTxudW1iZXJbXT47XG4gIC8qKiBTZWxlY3QgYSBzcGVjaWZpYyByZWdpb24gKGJ5IGlkZW50aXR5KSwgaGlnaGxpZ2h0aW5nIGl0IG9uIHdoaWNoZXZlclxuICAgKiAgYmFja2VuZCBpcyByZW5kZXJpbmcg4oCUIFBsb3RseSBzZXRzIGl0cyBhY3RpdmUtc2hhcGUgaGFuZGxlcywgT3BlblNlYWRyYWdvblxuICAgKiAgaGlnaGxpZ2h0cyB0aGUgU1ZHIGVsZW1lbnQuIE5vLW9wIGlmIHRoZSByZWdpb24gaXNuJ3QgaW4gdGhlIHN0b3JlLiAqL1xuICBzZWxlY3RSZWdpb24ocmVnaW9uOiBSZWdpb24pOiB2b2lkO1xuICBkZWxldGVBY3RpdmVTaGFwZSgpOiB2b2lkO1xuXG4gIGdldFNob3dTaGFwZUxhYmVsKCk6IGJvb2xlYW47XG4gIGdldFNoYXBlQ29sb3IoKTogc3RyaW5nO1xuICBnZXRGaWxsQ29sb3IoKTogc3RyaW5nO1xuICBnZXRDbGFzc2lmaWNhdGlvbkNvbG9ycygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICBzZXRDbGFzc2lmaWNhdGlvbkNvbG9yKGxhYmVsOiBzdHJpbmcsIGNvbG9yOiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKiBVbmRvIHRoZSBtb3N0IHJlY2VudCByZWdpb24gYWN0aW9uIChqaXQtdWkjODUpLiBSZXN0b3JlcyB0aGUgcmVnaW9uIHNldCB0b1xuICAgKiAgdGhlIHN0YXRlIGJlZm9yZSB0aGF0IGFjdGlvbjsgdXAgdG8gYSBzbWFsbCBmaXhlZCBkZXB0aCAoMTApIGlzIHJldGFpbmVkLFxuICAgKiAgc28gaXQgY2FuIGJlIGludm9rZWQgdXAgdG8gMTAgdGltZXMgaW4gYSByb3cuIE5vLW9wIHdoZW4gbm90aGluZyBpcyBsZWZ0IHRvXG4gICAqICB1bmRvLiAqL1xuICB1bmRvKCk6IHZvaWQ7XG4gIC8qKiBSZS1hcHBseSB0aGUgbW9zdCByZWNlbnRseSB1bmRvbmUgcmVnaW9uIGFjdGlvbi4gTm8tb3Agd2hlbiB0aGVyZSdzXG4gICAqICBub3RoaW5nIHRvIHJlZG8gKGFueSBmcmVzaCByZWdpb24gYWN0aW9uIGNsZWFycyB0aGUgcmVkbyBmdXR1cmUpLiAqL1xuICByZWRvKCk6IHZvaWQ7XG4gIC8qKiBTeW5jaHJvbm91cyByZWFkIG9mIHtAbGluayBnZXRDYW5VbmRvJH0uICovXG4gIGNhblVuZG8oKTogYm9vbGVhbjtcbiAgLyoqIFN5bmNocm9ub3VzIHJlYWQgb2Yge0BsaW5rIGdldENhblJlZG8kfS4gKi9cbiAgY2FuUmVkbygpOiBib29sZWFuO1xuICAvKiogRW1pdHMgd2hldGhlciBhbiB1bmRvIHN0ZXAgaXMgY3VycmVudGx5IGF2YWlsYWJsZSDigJQgZHJpdmVzIHRoZSB0b29sYmFyXG4gICAqICBVbmRvIGJ1dHRvbidzIGVuYWJsZWQgKGdyZXllZC1vdXQpIHN0YXRlLiAqL1xuICBnZXRDYW5VbmRvJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogRW1pdHMgd2hldGhlciBhIHJlZG8gc3RlcCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIOKAlCBkcml2ZXMgdGhlIHRvb2xiYXJcbiAgICogIFJlZG8gYnV0dG9uJ3MgZW5hYmxlZCAoZ3JleWVkLW91dCkgc3RhdGUuICovXG4gIGdldENhblJlZG8kKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBDbGVhciB0aGUgdW5kby9yZWRvIGhpc3RvcnkgKGUuZy4gb24gaW1hZ2UgbG9hZC9zd2l0Y2gpLiAqL1xuICByZXNldFVuZG9IaXN0b3J5KCk6IHZvaWQ7XG5cbiAgaW1wb3J0UmVnaW9ucyhnZW9Kc29uU3RyOiBzdHJpbmcpOiBSZWdpb25bXTtcbiAgZXhwb3J0UmVnaW9ucyhyZWdpb25zOiBSZWdpb25bXSk6IHZvaWQ7XG4gIGdldEdlb0pzb25TdHJpbmcocmVnaW9uczogUmVnaW9uW10pOiBzdHJpbmc7XG5cbiAgLyoqIEJlZ2luIGEgcGVyLXNsaWNlIHotc3RhY2sgcmVnaW9uIHNlc3Npb24gKGppdC11aSM5MykuIGBzbGljZXNgIG1hcHMgZWFjaFxuICAgKiAgemVyby1iYXNlZCBzbGljZSBpbmRleCB0byB0aGF0IHNsaWNlJ3MgcmVnaW9uczsgdGhlIHN0b3JlIHNob3dzIGBpbml0aWFsWmBcbiAgICogIGxpdmUgd2hpbGUgaG9sZGluZyB0aGUgcmVzdCwgc28gc2NydWJiaW5nIHN3YXBzIHJlZ2lvbiBzZXRzIGFuZCBlZGl0cyBvbiBhXG4gICAqICBzbGljZSBwZXJzaXN0LiBgc2F2ZUxheW91dGAgcmVjb3JkcyBob3cgdGhlIHN0YWNrIHBlcnNpc3RzIOKAlCBgY29tYmluZWRgXG4gICAqICAob25lIHotaW5kZXhlZCBnZW9qc29uLCBzaW5nbGUtZmlsZSB6LXN0YWNrKSBvciBgcGVyLXNsaWNlLWZpbGVgIChmb2xkZXJcbiAgICogIHN0YWNrKS4gU2VlIHtAbGluayBzZXREaXNwbGF5U2xpY2V9LCB7QGxpbmsgZ2V0U2xpY2VSZWdpb25zfS4gKi9cbiAgZW50ZXJTdGFja01vZGUoXG4gICAgc2xpY2VzOiBNYXA8bnVtYmVyLCBSZWdpb25bXT4sXG4gICAgaW5pdGlhbFo/OiBudW1iZXIsXG4gICAgc2F2ZUxheW91dD86ICdjb21iaW5lZCcgfCAncGVyLXNsaWNlLWZpbGUnLFxuICApOiB2b2lkO1xuICAvKiogRW5kIHRoZSBwZXItc2xpY2Ugc2Vzc2lvbiAoc2luZ2xlLXBsYW5lIGltYWdlLCBvciB0aGUgc3RhY2sgd2FzIGNsb3NlZCkuICovXG4gIGV4aXRTdGFja01vZGUoKTogdm9pZDtcbiAgLyoqIFRydWUgd2hpbGUgYSBwZXItc2xpY2Ugei1zdGFjayBzZXNzaW9uIGlzIGFjdGl2ZS4gKi9cbiAgaXNTdGFja01vZGUoKTogYm9vbGVhbjtcbiAgLyoqIEhvdyB0aGUgY3VycmVudCBzdGFjayBwZXJzaXN0cyB0byBkaXNrIChqaXQtdWkjOTMpLiAqL1xuICBnZXRTdGFja1NhdmVMYXlvdXQoKTogJ2NvbWJpbmVkJyB8ICdwZXItc2xpY2UtZmlsZSc7XG4gIC8qKiBTd2FwIHRoZSBsaXZlIHJlZ2lvbiBzZXQgdG8gc2xpY2UgYHpgIChzdGFjayBtb2RlIG9ubHkpLCBjYXB0dXJpbmcgdGhlXG4gICAqICBjdXJyZW50IHNsaWNlJ3MgZWRpdHMgZmlyc3QuIENhbGxlZCBvbiBldmVyeSBjb21taXR0ZWQgc2xpY2Ugc2NydWIuICovXG4gIHNldERpc3BsYXlTbGljZSh6OiBudW1iZXIpOiB2b2lkO1xuICAvKiogRXZlcnkgc2xpY2UncyByZWdpb25zIGZvciBzYXZlL2V4cG9ydCwgZWFjaCB0YWdnZWQgd2l0aCBpdHMgemVyby1iYXNlZFxuICAgKiAge0BsaW5rIFJlZ2lvbi56fTsgdGhlIGZsYXQgc2V0IG91dHNpZGUgc3RhY2sgbW9kZS4gKi9cbiAgZ2V0U2xpY2VSZWdpb25zKCk6IFJlZ2lvbltdO1xuICAvKiogU2xpY2VzIHRvIHdyaXRlIG9uIGEgcGVyLXNsaWNlLWZpbGUgc2F2ZSAoZm9sZGVyIHN0YWNrLCBqaXQtdWkjOTMpOiBlYWNoXG4gICAqICBzbGljZSB3aXRoIHJlZ2lvbnMsIHBsdXMgc2xpY2VzIGNsZWFyZWQgc2luY2UgbG9hZCAoZW1wdHksIHRvIG92ZXJ3cml0ZSkuXG4gICAqICBLZXllZCBieSB6ZXJvLWJhc2VkIHNsaWNlIGluZGV4OyByZWdpb25zIHRhZ2dlZCB3aXRoIHRoZWlyIHouICovXG4gIGdldFN0YWNrU2F2ZVNsaWNlcygpOiBNYXA8bnVtYmVyLCBSZWdpb25bXT47XG59XG5cbi8qKiBPbi1jYW52YXMgdG9vbCBtb2RlcyAod2FuZCwgYnJ1c2gsIHZlcnRleCBlcmFzZXIsIHpvb20tdG8tYm94LCBTQU0gcG9pbnQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVG9vbENvbnRyb2xsZXIge1xuICAvKipcbiAgICogQXJtIG9uZSBvbi1jYW52YXMgdG9vbCAoYENhbnZhc1Rvb2xJZGApIHdpdGggaXRzIG9wdGlvbnMg4oCUIHRoZSB3YW5kJ3NcbiAgICoge0BsaW5rIElXYW5kT3B0aW9uc30sIHRoZSBicnVzaCdzIHtAbGluayBJQnJ1c2hPcHRpb25zfSAoYHNpemVgIGlzIHRoZVxuICAgKiBtYXRyaXgtcGl4ZWwgZGlhbWV0ZXIgb2YgdGhlIHBhaW50ZWQgZGlzYyksIHRoZSBlcmFzZXIncyBgeyByYWRpdXMgfWAg4oCUXG4gICAqIGFuZCBkaXNhcm0gdGhlIG9uZSB0aGF0IHdhcyBhcm1lZC4gYG51bGxgLCBvciBhbnkgaWQgdGhhdCBpcyBub3QgYSBjYW52YXNcbiAgICogdG9vbCAoYSByZWdpb24gZHJhdyBtb2RlIHN1Y2ggYXMgYCdkcmF3cmVjdCdgLCBgJ3BhbidgKSwgZGlzYXJtcyBvbmx5LlxuICAgKiBBcm1pbmcgdGhlIGFybWVkIHRvb2wgYWdhaW4gYXBwbGllcyB0aGUgb3B0aW9ucyBhbmQga2VlcHMgaXRzIHdvcmsgaW5cbiAgICogcHJvZ3Jlc3MuXG4gICAqL1xuICBzZXRBY3RpdmVUb29sKGlkOiBzdHJpbmcgfCBudWxsLCBvcHRpb25zPzogQ2FudmFzVG9vbE9wdGlvbnMpOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBzZXRBY3RpdmVUb29sKCd3YW5kJywgb3B0aW9ucylgIC8gYHNldEFjdGl2ZVRvb2wobnVsbClgLiAqL1xuICBzZXRXYW5kTW9kZShhY3RpdmU6IGJvb2xlYW4sIG9wdGlvbnM/OiBJV2FuZE9wdGlvbnMpOiB2b2lkO1xuICBzZXRXYW5kT3B0aW9ucyhvcHRpb25zOiBJV2FuZE9wdGlvbnMpOiB2b2lkO1xuICBjbGVhckFjdGl2ZVdhbmRSZWdpb24oKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgc2V0QWN0aXZlVG9vbCgnYnJ1c2gnLCBvcHRpb25zKWAgLyBgc2V0QWN0aXZlVG9vbChudWxsKWAuICovXG4gIHNldEJydXNoTW9kZShhY3RpdmU6IGJvb2xlYW4sIG9wdGlvbnM/OiBJQnJ1c2hPcHRpb25zKTogdm9pZDtcbiAgc2V0QnJ1c2hPcHRpb25zKG9wdGlvbnM6IElCcnVzaE9wdGlvbnMpOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBzZXRBY3RpdmVUb29sKCdlcmFzZVZlcnRleCcsIHsgcmFkaXVzIH0pYCAvIGBzZXRBY3RpdmVUb29sKG51bGwpYC4gKi9cbiAgc2V0VmVydGV4RXJhc2VyTW9kZShhY3RpdmU6IGJvb2xlYW4pOiB2b2lkO1xuICBzZXRWZXJ0ZXhFcmFzZXJSYWRpdXMocmFkaXVzOiBudW1iZXIpOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBzZXRBY3RpdmVUb29sKCd6b29tVG9Cb3gnKWAgLyBgc2V0QWN0aXZlVG9vbChudWxsKWAuICovXG4gIHNldFpvb21Ub0JveE1vZGUoYWN0aXZlOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIEJveC1wcm9tcHRlZCBTQU0gc2VnbWVudGF0aW9uOiBzZWdtZW50IGV2ZXJ5IHJlY3RhbmdsZSByZWdpb24gaW50byBtYXNrcy5cbiAgICogIFJldHVybnMgdGhlIG51bWJlciBvZiBtYXNrIHJlZ2lvbnMgYWRkZWQuIChqaXQtdWkjOTApICovXG4gIHNlZ21lbnRSZWN0YW5nbGVzKCk6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqIENlbGxwb3NlLW9uLWNyb3A6IGNsaWVudCBzbGlkZS1jcm9wIGVhY2ggcmVjdGFuZ2xlIGFuZCBzZWdtZW50IGNlbGxzIGluIGl0XG4gICAqICAoY2VsbHBvc2UtU0FNIHZpYSB0aGUgaG9zdCdzIENFTExfU0VHTUVOVEVSKS4gUmV0dXJucyByZWdpb25zIGFkZGVkLiAqL1xuICBzZWdtZW50UmVjdGFuZ2xlc0NlbGxwb3NlKCk6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqIENob29zZSB0aGUgcmVnaXN0ZXJlZCBTQU0gbW9kZWwgdGhlIHNlZ21lbnQgdG9vbHMgdXNlIChqaXQtdWkjOTAgUDEpLiAqL1xuICBzZXRTYW1Nb2RlbChpZDogc3RyaW5nKTogdm9pZDtcbiAgLyoqIFRvZ2dsZSB0aGUgaW50ZXJhY3RpdmUgU0FNIHBvaW50LXByb21wdCB0b29sIChjbGljayA9ICtwb2ludCwgU2hpZnQgPSAtKS5cbiAgICogIEBkZXByZWNhdGVkIFVzZSBgc2V0QWN0aXZlVG9vbCgnc2FtUG9pbnQnKWAgLyBgc2V0QWN0aXZlVG9vbChudWxsKWAuICovXG4gIHNldFNhbVBvaW50TW9kZShhY3RpdmU6IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogRmluYWxpc2UgLyBkaXNjYXJkIHRoZSBpbi1wcm9ncmVzcyBTQU0gcG9pbnQgb2JqZWN0LiAqL1xuICBjb21taXRTYW1Qb2ludHMoKTogdm9pZDtcbiAgY2xlYXJTYW1Qb2ludHMoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBDb250cm9scyBzcGVjaWZpYyB0byB0aGUgSVNPU1VSRkFDRSBwbG90IHR5cGUuIE9wdGlvbmFsIGFuZCBjYXBhYmlsaXR5LWdhdGVkXG4gKiAoYFZpZXdlckZlYXR1cmUuSXNvc3VyZmFjZWApOiBvbmx5IGEgYmFja2VuZCB0aGF0IHJlbmRlcnMgaXNvc3VyZmFjZXMgZXhwb3Nlc1xuICogaXQsIHZpYSBgSVZpc3VhbGl6ZXIuZ2V0SXNvc3VyZmFjZUNvbnRyb2xzKClgLiBLZXB0IG9mZiB0aGUgYWx3YXlzLW9uXG4gKiBjb250cmFjdCBzbyBjb25zdW1lcnMgbmV2ZXIgY2FsbCBhIGNvbnRyb2wgdGhhdCdzIG1lYW5pbmdsZXNzIGZvciB0aGUgY3VycmVudFxuICogcGxvdCB0eXBlIC8gYmFja2VuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSXNvc3VyZmFjZUNvbnRyb2xzIHtcbiAgLyoqIExpdmUtdXBkYXRlIHRoZSBpc29zdXJmYWNlIGludGVuc2l0eSBiYW5kIFtpc29taW4sIGlzb21heF0gb3ZlciAw4oCTMjU1LiAqL1xuICBzZXRJc29SYW5nZShpc29NaW46IG51bWJlciwgaXNvTWF4OiBudW1iZXIpOiB2b2lkO1xufVxuXG4vKipcbiAqIENvbnRyb2xzIHNwZWNpZmljIHRvIHRoZSAzRCBwbG90IHR5cGVzIChTVVJGQUNFIC8gU0NBVFRFUjNEIC8gSVNPU1VSRkFDRVxuICogc2NlbmVzKS4gQ2FwYWJpbGl0eS1nYXRlZCBsaWtlIHtAbGluayBJSXNvc3VyZmFjZUNvbnRyb2xzfTogb25seSBhIGJhY2tlbmRcbiAqIHRoYXQgcmVuZGVycyAzRCBzY2VuZXMgZXhwb3NlcyBpdCwgdmlhIGBJVmlzdWFsaXplci5nZXRTdXJmYWNlM2RDb250cm9scygpYCDigJRcbiAqIHRoZSBkZXByZWNhdGVkIHRvcC1sZXZlbCBgc2V0U3VyZmFjZURyYWdNb2RlYC9gcmVzZXRTdXJmYWNlQ2FtZXJhYCBzaWxlbnRseVxuICogbm8tb3Agb24gMkQtb25seSBiYWNrZW5kcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3VyZmFjZTNkQ29udHJvbHMge1xuICAvKiogU3dpdGNoIHRoZSAzRCBzY2VuZSBpbnRlcmFjdGlvbiBtb2RlIChvcmJpdCAvIHR1cm50YWJsZSAvIHBhbiAvIHpvb20pLiAqL1xuICBzZXRTdXJmYWNlRHJhZ01vZGUobW9kZTogc3RyaW5nKTogdm9pZDtcbiAgLyoqIFJlc2V0IHRoZSAzRCBzY2VuZSBjYW1lcmEgdG8gaXRzIGRlZmF1bHQgZXllIHBvc2l0aW9uLiAqL1xuICByZXNldFN1cmZhY2VDYW1lcmEoKTogdm9pZDtcbiAgLyoqIFRvZ2dsZSB0aGUgM0QgY29vcmRpbmF0ZS1heGVzIC8gc2NhbGUgZ2l6bW8gb24vb2ZmLiBPcHRpb25hbCDigJQgb25seSB0aGUgbmFwYXJpLWpzIFdlYkdQVVxuICAgKiAgdm9sdW1lL2lzb3N1cmZhY2UgYmFja2VuZCByZW5kZXJzIG9uZSAoaml0LXVpIzEwMikuICovXG4gIHNldEF4ZXNWaXNpYmxlPyh2aXNpYmxlOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIGF4ZXMgZ2l6bW8gaXMgY3VycmVudGx5IHNob3duIChmb3IgaW5pdGlhbGl6aW5nIHRoZSB0b2dnbGUgVUkpLiBPcHRpb25hbC4gKi9cbiAgYXhlc1Zpc2libGU/KCk6IGJvb2xlYW47XG4gIC8qKiBSZW5kZXIgdGhlIHN1cmZhY2UgYXMgYSB3aXJlZnJhbWUgKGVkZ2VzKSBpbnN0ZWFkIG9mIGEgZmlsbGVkIHN1cmZhY2UuIE9wdGlvbmFsIOKAlCBvbmx5IHRoZVxuICAgKiAgbmFwYXJpLWpzIFdlYkdQVSBzdXJmYWNlIGJhY2tlbmQgc3VwcG9ydHMgaXQgKGppdC11aSMxMDIpLiAqL1xuICBzZXRXaXJlZnJhbWU/KG9uOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIHN1cmZhY2UgaXMgY3VycmVudGx5IGRyYXduIGFzIGEgd2lyZWZyYW1lIChmb3IgaW5pdGlhbGl6aW5nIHRoZSB0b2dnbGUgVUkpLiAqL1xuICB3aXJlZnJhbWU/KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udHJvbHMgc3BlY2lmaWMgdG8gdGhlIExJTkUgKGludGVuc2l0eS1wcm9maWxlKSBwbG90IHR5cGUuIENhcGFiaWxpdHktZ2F0ZWRcbiAqIGxpa2Uge0BsaW5rIElJc29zdXJmYWNlQ29udHJvbHN9OiBvbmx5IGEgYmFja2VuZCB0aGF0IHJlbmRlcnMgdGhlIGxpbmUtUk9JIC9cbiAqIGluc2V0IGV4cG9zZXMgaXQsIHZpYSBgSVZpc3VhbGl6ZXIuZ2V0SW50ZW5zaXR5Q29udHJvbHMoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUludGVuc2l0eUNvbnRyb2xzIHtcbiAgLyoqIEFkZCBhbm90aGVyIGxpbmUgUk9JIChuZXh0IGJyaWdodCBwYWxldHRlIGNvbG91cikgYW5kIGl0cyBpbnNldCB0cmFjZS5cbiAgICogIFJldHVybnMgdGhlIGNyZWF0ZWQgcmVnaW9uIHNvIHRoZSBjYWxsZXIgY2FuIHNlbGVjdCBpdCBvbiB0aGUgYWN0aXZlXG4gICAqICBiYWNrZW5kLCBvciBudWxsIGlmIG5vIGltYWdlIGV4dGVudCBpcyBrbm93biB5ZXQuICovXG4gIGFkZFByb2ZpbGVMaW5lKCk6IFJlZ2lvbiB8IG51bGw7XG59XG5cbi8qKiBBIGNhdGVnb3JpY2FsIGNvbHVtbiByZXNvbHZlZCBmb3IgY2hhcnRpbmc6IGxhYmVscywgY29kZXMgYW5kIG1hcCBjb2xvdXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsQ2F0ZWdvcmljYWxWaWV3IHtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yaWVzOiBzdHJpbmdbXTtcbiAgLyoqIGAjcnJnZ2JiYCBwZXIgY2F0ZWdvcnksIGluZGV4LWFsaWduZWQgd2l0aCB7QGxpbmsgY2F0ZWdvcmllc30uICovXG4gIGNvbG9yczogc3RyaW5nW107XG4gIC8qKiBQZXItb2JzZXJ2YXRpb24gY2F0ZWdvcnkgaW5kZXgsIG9yIGBOT19DQVRFR09SWWAuICovXG4gIGNvZGVzOiBVaW50MTZBcnJheTtcbn1cblxuLyoqXG4gKiBIb3cgXCJTZWxlY3QgZnJvbSBST0lzXCIgc2VsZWN0czogaW5zaWRlIHRoZSB2b2x1bWVzIG9mIHRoZSByZWdpb24gY2xhc3NlcyBwaWNrZWRcbiAqIGluIHRoZSBSZWdpb24gRWRpdG9yIChTcGF0aWFsIG9taWNzIDNELCB0aGUgcmVnaW9ucyBvbiB0aGUgZGF0YXNldCdzIHJlZmVyZW5jZVxuICogdm9sdW1lIHNob3duKSwgb3IgYnkgdGhlIGRyYXduIHJlZ2lvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIFJvaVNlbGVjdGlvbk1vZGUgPSAnY2xhc3Mtdm9sdW1lcycgfCAncmVnaW9ucyc7XG5cbi8qKlxuICogQ29udHJvbHMgZm9yIHRoZSBTUEFUSUFMX09NSUNTIHBsb3QgdHlwZTogd2hhdCB0aGUgb2JzZXJ2YXRpb24gbWFya2VycyBhcmVcbiAqIGNvbG91cmVkIGJ5LCBhbmQgaG93IHRoZXkgYXJlIGRyYXduLiBDYXBhYmlsaXR5LWdhdGVkIGxpa2VcbiAqIHtAbGluayBJSXNvc3VyZmFjZUNvbnRyb2xzfSDigJQgYGdldFNwYXRpYWxDb250cm9scygpYCByZXR1cm5zIG51bGwgdW5sZXNzIGFcbiAqIGhvc3QgaGFzIGJvdW5kIGBTUEFUSUFMX0RBVEFfUE9SVGAuXG4gKlxuICogVGhlIHZpZXcgc3RhdGUgaXMgYmFja2VuZC1uZXV0cmFsIChpdCBsaXZlcyBpbiB0aGUgc2hhcmVkIHN0b3JlLCBsaWtlIHRoZVxuICogY29sb3JtYXApLCBzbyB0aGVzZSBjb250cm9scyB3b3JrIHdoaWNoZXZlciBiYWNrZW5kIGlzIG9uIHNjcmVlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3BhdGlhbENvbnRyb2xzIHtcbiAgLyoqIFRoZSBkYXRhc2V0IGJlaW5nIHZpc3VhbGl6ZWQsIG9yIG51bGwuIERyaXZlcyB0aGUgY29sdW1uL2dlbmUgcGlja2VycyBhbmRcbiAgICogIHRoZSBsZWdlbmQuICovXG4gIGdldERhdGFzZXQkKCk6IE9ic2VydmFibGU8U3BhdGlhbERhdGFzZXQgfCBudWxsPjtcbiAgLyoqIEN1cnJlbnQgZGlzcGxheSBzdGF0ZSAoY29sb3VyIHNvdXJjZSwgcG9pbnQgc2NhbGUsIG9wYWNpdHksIHNjYWxpbmcpLiAqL1xuICBnZXRWaWV3U3RhdGUkKCk6IE9ic2VydmFibGU8U3BhdGlhbFZpZXdTdGF0ZT47XG4gIC8qKiBTeW5jaHJvbm91cyByZWFkLCBmb3Igc2VlZGluZyBhIGNvbnRyb2wncyBpbml0aWFsIHZhbHVlLiAqL1xuICB2aWV3U3RhdGUoKTogU3BhdGlhbFZpZXdTdGF0ZTtcbiAgLyoqIFBhdGNoIHRoZSBkaXNwbGF5IHN0YXRlOyB0aGUgbWFya2VycyByZWJ1aWxkIHdpdGhvdXQgcmVtb3VudGluZyB0aGUgc2NlbmUuICovXG4gIHNldFZpZXdTdGF0ZShwYXJ0aWFsOiBQYXJ0aWFsPFNwYXRpYWxWaWV3U3RhdGU+KTogdm9pZDtcbiAgLyoqIENvbG91ciBieSBhbiBhbm5vdGF0aW9uIGNvbHVtbi4gUmVqZWN0cyBmb3IgYW4gdW5rbm93biBjb2x1bW4uICovXG4gIGNvbG9yQnlDb2x1bW4obmFtZTogc3RyaW5nKTogdm9pZDtcbiAgLyoqIENvbG91ciBieSBhIGdlbmU7IGl0cyB2ZWN0b3IgaXMgZmV0Y2hlZCBvbiBkZW1hbmQuICovXG4gIGNvbG9yQnlGZWF0dXJlKG5hbWU6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBDbGVhciB0aGUgY29sb3VyIHNvdXJjZSDigJQgZXZlcnkgb2JzZXJ2YXRpb24gcmVuZGVycyBpbiBvbmUgbmV1dHJhbCBjb2xvdXIuICovXG4gIGNsZWFyQ29sb3JCeSgpOiB2b2lkO1xuICAvKiogVHlwZWFoZWFkIG92ZXIgZmVhdHVyZSBuYW1lcywgZm9yIGRhdGFzZXRzIHRvbyB3aWRlIHRvIGlubGluZSB0aGUgbGlzdC4gKi9cbiAgc2VhcmNoRmVhdHVyZXMocXVlcnk6IHN0cmluZywgbGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZ1tdPjtcbiAgLyoqIFBlci1jYXRlZ29yeSBkaXNwbGF5IGNvbG91cnMgZm9yIGEgY2F0ZWdvcmljYWwgY29sdW1uLCBpbmRleC1hbGlnbmVkIHdpdGhcbiAgICogIGl0cyBgY2F0ZWdvcmllc2Ag4oCUIHRoZSBsZWdlbmQncyBzd2F0Y2hlcywgcmVzb2x2ZWQgdGhlIHNhbWUgd2F5IHRoZVxuICAgKiAgcmVuZGVyZXIgcmVzb2x2ZXMgdGhlbSBzbyB0aGUgdHdvIGNhbm5vdCBkaXNhZ3JlZS4gKi9cbiAgY2F0ZWdvcnlDb2xvcnMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT47XG5cbiAgLy8g4pSA4pSAIHZhbHVlcywgZm9yIHRoZSAxLUQgY2hhcnRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKipcbiAgICogVGhlIHZhbHVlcyBiZWhpbmQgYSBjb2xvdXIgc291cmNlLCBpbmRleC1hbGlnbmVkIHdpdGggdGhlIG9ic2VydmF0aW9ucy5cbiAgICogUmVqZWN0cyBmb3IgYSBjYXRlZ29yaWNhbCBjb2x1bW4g4oCUIHRoZXJlIGlzIG5vdGhpbmcgY29udGludW91cyB0byBjaGFydC5cbiAgICovXG4gIGNvbnRpbnVvdXNWYWx1ZXMoc291cmNlOiBTcGF0aWFsQ29sb3JCeSk6IFByb21pc2U8RmxvYXQzMkFycmF5PjtcbiAgLyoqXG4gICAqIEEgY2F0ZWdvcmljYWwgY29sdW1uJ3MgY2F0ZWdvcmllcywgcGVyLW9ic2VydmF0aW9uIGNvZGVzIGFuZCBkaXNwbGF5XG4gICAqIGNvbG91cnMg4oCUIGV2ZXJ5dGhpbmcgYSBncm91cGVkIHZpb2xpbi9ib3ggbmVlZHMsIHdpdGggdGhlIGNvbG91cnMgcmVzb2x2ZWRcbiAgICogdGhlIHNhbWUgd2F5IHRoZSBtYXAgcmVzb2x2ZXMgdGhlbS5cbiAgICovXG4gIGNhdGVnb3JpY2FsVmlldyhjb2x1bW46IHN0cmluZyk6IFByb21pc2U8U3BhdGlhbENhdGVnb3JpY2FsVmlldz47XG5cbiAgLyoqXG4gICAqIE9uZSBlbWJlZGRpbmcncyBjb29yZGluYXRlcyDigJQgYSBVTUFQLCB0LVNORSBvciBQQ0EgcGxhbmUgb3ZlciB0aGUgc2FtZSBvYnNlcnZhdGlvbnMuXG4gICAqXG4gICAqIE9wdGlvbmFsLCBhbmQgYWJzZW50IHdoZW4gdGhlIGRhdGEgc291cmNlIHNlcnZlcyBub25lOiBgU3BhdGlhbERhdGFQb3J0LmdldEVtYmVkZGluZ2BcbiAgICogaXMgaXRzZWxmIG9wdGlvbmFsLCBzbyBhIHBhbmVsIG11c3QgYmUgYWJsZSB0byBhc2sgd2hldGhlciB0aGlzIGV4aXN0cyByYXRoZXIgdGhhblxuICAgKiBjYWxsaW5nIGl0IGFuZCBjYXRjaGluZy5cbiAgICovXG4gIGdldEVtYmVkZGluZz8obmFtZTogc3RyaW5nKTogUHJvbWlzZTxTcGF0aWFsRW1iZWRkaW5nPjtcbiAgLyoqIE5hbWVzIG9mIHRoZSBjYXRlZ29yaWNhbCBjb2x1bW5zIGF2YWlsYWJsZSB0byBncm91cCBieS4gKi9cbiAgY2F0ZWdvcmljYWxDb2x1bW5zKCk6IHN0cmluZ1tdO1xuICAvKipcbiAgICogSW1wb3J0IGEgY2VsbCBncm91cGluZyAoQ1NWL1RTViBvZiBgY2VsbF9pZGAsIGBncm91cGApIGFzIGEgbmV3IGNhdGVnb3JpY2FsIGNvbHVtbi5cbiAgICogT3B0aW9uYWw6IG9ubHkgZGF0YSBzb3VyY2VzIHRoYXQgY2FuIGpvaW4gY2VsbCBpZHMgaW1wbGVtZW50IGl0LlxuICAgKi9cbiAgaW1wb3J0R3JvdXBzPyhsYWJlbDogc3RyaW5nLCB0YWJsZTogc3RyaW5nKTogUHJvbWlzZTx7IGNvbHVtbjogQ2F0ZWdvcmljYWxDb2x1bW5NZXRhOyBtYXRjaGVkOiBudW1iZXIgfT47XG4gIC8qKiBUcmFuc2NyaXB0IHRvdGFscyBwZXIgZ2VuZSDigJQgZm9yIHRoZSBwb2ludHMgZXN0aW1hdGUuIE9wdGlvbmFsLiAqL1xuICB0cmFuc2NyaXB0Q291bnRzPyhnZW5lczogc3RyaW5nW10pOiBQcm9taXNlPFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzPjtcbiAgLyoqIE1hcmtlciBnZW5lcyBvZiBlYWNoIGdyb3VwIG9mIGEgY2F0ZWdvcmljYWwgY29sdW1uLiBPcHRpb25hbCAoc2VlIHRoZSBwb3J0KS4gKi9cbiAgbWFya2VyR2VuZXM/KGNvbHVtbjogc3RyaW5nLCBwZXJHcm91cD86IG51bWJlcik6IFByb21pc2U8U3BhdGlhbE1hcmtlckdlbmVzPjtcbiAgLyoqIFRyYW5zY3JpcHRzIG9mIGVhY2ggc2VsZWN0ZWQgZ2VuZSBpbiB0aGUgY3VycmVudCB2aWV3LCBvciBudWxsIHdoZW4gbm90IGtub3duXG4gICAqICAoYWxsIGdlbmVzIGF0IG9uY2UsIHRyYW5zY3JpcHRzIG9mZiwgb3IgYSBzZWxlY3Rpb24gem9vbWVkIG91dCBvbiBhIGRhdGFzZXQgd2l0aG91dCB0aGVcbiAgICogIHB5cmFtaWQncyBwZXItZ2VuZSBsZXZlbHMsIHdoZXJlIGNsdXN0ZXJzIGFyZSBkcmF3biBmcm9tIHN1bW1lZCBkZW5zaXR5IGdyaWRzKS4gKi9cbiAgZ2V0R2VuZUNvdW50c0luVmlldyQ/KCk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgbnVtYmVyPiB8IG51bGw+O1xuICAvKiogRXN0aW1hdGVkIHRyYW5zY3JpcHRzIGluIHZpZXcgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgYWdhaW5zdCB0aGUgbWFya2VyIGJ1ZGdldC4gKi9cbiAgZ2V0VHJhbnNjcmlwdEVzdGltYXRlJD8oKTogT2JzZXJ2YWJsZTx7IHBvaW50czogbnVtYmVyOyBtYXg6IG51bWJlciB9IHwgbnVsbD47XG4gIC8qKiBUaGUgZGVuc2l0eSBtYXAncyBjb2xvdXIgd2luZG93IGluIHVzZSAoYXV0by1kZXJpdmVkIG9yIHNldCkgYW5kIGl0cyBkZW5zZXN0IGJpbi4gKi9cbiAgZ2V0RGVuc2l0eVN0YXRzJD8oKTogT2JzZXJ2YWJsZTx7IGxvOiBudW1iZXI7IGhpOiBudW1iZXI7IG1heDogbnVtYmVyIH0gfCBudWxsPjtcbiAgLyoqIFRydWUgd2hpbGUgdGhlIG9ic2VydmF0aW9uIGdlbmUgZmlsdGVyIGNvdWxkIG5vdCBiZSBhcHBsaWVkIChhbiBleHByZXNzaW9uIHJlYWQgZmFpbGVkKTpcbiAgICogIHRoZSBvYnNlcnZhdGlvbnMgdGhlbiBzdGlsbCBzaG93IHRoZSBsYXN0IGZpbHRlciB0aGF0IGNvdWxkIGJlLiAqL1xuICBnZXRHZW5lRmlsdGVyRmFpbGVkJD8oKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFRoZSB6IHBvc2l0aW9ucyBvZiB0aGUgc2VjdGlvbnMgdGhlIGRhdGFzZXQgd2FzIGltYWdlZCBhdCwgYXNjZW5kaW5nIOKAlCBvclxuICAgKiBudWxsIHdoZW4gaXRzIHogaXMgY29udGludW91cyByYXRoZXIgdGhhbiBzZWN0aW9uZWQgKHNvIHRoZXJlIGFyZSBubyBzZWN0aW9uc1xuICAgKiB0byBvZmZlcikgb3Igd2hlbiB0aGVyZSBpcyBubyBkYXRhc2V0LlxuICAgKlxuICAgKiBMZXRzIGEgcGFuZWwgb2ZmZXIgXCJvbmUgc2VjdGlvbiBhdCBhIHRpbWVcIiBmb3IgdGhlIDNEIGNsb3VkIG9ubHkgd2hlcmUgdGhhdFxuICAgKiBtZWFucyBzb21ldGhpbmcsIGFuZCBsYWJlbCB0aGUgY2hvc2VuIG9uZS4gU2Nhbm5lZCBvbmNlIHBlciBkYXRhc2V0LlxuICAgKi9cbiAgc2FtcGxlZFNlY3Rpb25zKCk6IEZsb2F0MzJBcnJheSB8IG51bGw7XG5cbiAgLy8g4pSA4pSAIHNlbGVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIFRoZSBjdXJyZW50IHNlbGVjdGlvbi4gRW1wdHkgbWVhbnMgXCJub3RoaW5nIHNlbGVjdGVkXCIsIGluIHdoaWNoIGNhc2UgdGhlXG4gICAqICB3aG9sZSB0aXNzdWUgcmVuZGVycyBub3JtYWxseSByYXRoZXIgdGhhbiBldmVyeXRoaW5nIGJlaW5nIG11dGVkLiAqL1xuICBnZXRTZWxlY3Rpb24kKCk6IE9ic2VydmFibGU8U3BhdGlhbFNlbGVjdGlvbk1hc2s+O1xuICAvKipcbiAgICogU2VsZWN0IGV2ZXJ5IG9ic2VydmF0aW9uIGluc2lkZSB0aGUgY3VycmVudGx5LWRyYXduIHJlZ2lvbnMgKHRoZWlyIHVuaW9uKS5cbiAgICogUmV1c2VzIHRoZSBleGlzdGluZyBST0kgdG9vbHMg4oCUIHJlY3RhbmdsZSwgcG9seWdvbiwgZnJlZWhhbmQsIHdhbmQsIGJydXNoIOKAlFxuICAgKiBzbyB0aGVyZSBpcyBubyBzZXBhcmF0ZSBtYXJxdWVlIHRvIGxlYXJuLiBJbiB0aGUgM0QgY2xvdWQsIHRoZSByZWdpb24gY2xhc3Nlc1xuICAgKiBwaWNrZWQgaW4gdGhlIFJlZ2lvbiBFZGl0b3IgKHNlZSB7QGxpbmsgZ2V0UGlja2VkUmVnaW9uQ2xhc3NlcyR9KSBzZWxlY3QgdGhlXG4gICAqIG9ic2VydmF0aW9ucyBpbnNpZGUgdGhlaXIgdm9sdW1lcyBpbnN0ZWFkLCB3aGVuIHRoZSByZWdpb25zIHNpdCBvbiB0aGVcbiAgICogZGF0YXNldCdzIHJlZmVyZW5jZSB2b2x1bWU7IHdpdGhvdXQgYSBwaWNrLCB0aGUgbGFzc29zIGRyYXduIG92ZXIgdGhlIGNsb3VkLlxuICAgKiBSZXNvbHZlcyBob3cgbWFueSB3ZXJlIHNlbGVjdGVkIOKAlCBvciBudWxsIHdoZW4gaXQgd2FzIHN1cGVyc2VkZWQgd2hpbGUgdGhlXG4gICAqIGNsYXNzZXMnIG91dGxpbmVzIHdlcmUgcmVhZCAoYSBuZXdlciBzZWxlY3Rpb24sIGEgQ2xlYXIsIGFub3RoZXIgZGF0YXNldCwgdmlld1xuICAgKiBvciBwaWNrKSwgaW4gd2hpY2ggY2FzZSBub3RoaW5nIHdhcyBwdWJsaXNoZWQuXG4gICAqL1xuICBzZWxlY3RGcm9tUmVnaW9ucygpOiBQcm9taXNlPG51bWJlciB8IG51bGw+O1xuICAvKipcbiAgICogSG93IHtAbGluayBzZWxlY3RGcm9tUmVnaW9uc30gd291bGQgc2VsZWN0IG5vdzogaW5zaWRlIHRoZSBwaWNrZWQgY2xhc3NlcydcbiAgICogdm9sdW1lcywgb3IgYnkgdGhlIGRyYXduIHJlZ2lvbnMuIFRoZSBydWxlIGl0IHJ1bnMgYnksIHNvIGEgcGFuZWwgZGVzY3JpYmluZ1xuICAgKiB0aGUgYnV0dG9uIGNhbiBuZXZlciBkaXNhZ3JlZSB3aXRoIHdoYXQgaXQgZG9lcy5cbiAgICovXG4gIHJvaVNlbGVjdGlvbk1vZGU/KCk6IFJvaVNlbGVjdGlvbk1vZGU7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIGNsYXNzZXMgdGhlIHJlZ2lvbiBzZWxlY3Rpb24gd2FzIHBpY2tlZCBhcyAoYSBjbGFzcyB0cmVlIG5vZGUgd2l0aFxuICAgKiBpdHMgc3ViY2xhc3NlcywgYSBzdXJmYWNlIGNsaWNrZWQgaW4gM0QpOyBbXSBmb3IgYW55IG90aGVyIHNlbGVjdGlvbi5cbiAgICovXG4gIGdldFBpY2tlZFJlZ2lvbkNsYXNzZXMkPygpOiBPYnNlcnZhYmxlPHJlYWRvbmx5IHN0cmluZ1tdPjtcbiAgLyoqIFNlbGVjdCBldmVyeSBvYnNlcnZhdGlvbiBpbiBvbmUgY2F0ZWdvcnkgb2YgYSBjYXRlZ29yaWNhbCBjb2x1bW4g4oCUIHRoZVxuICAgKiAgbGVnZW5kIGNsaWNrLiBSZWplY3RzIGZvciBhbiB1bmtub3duIG9yIGNvbnRpbnVvdXMgY29sdW1uLiAqL1xuICBzZWxlY3RDYXRlZ29yeShjb2x1bW46IHN0cmluZywgY2F0ZWdvcnlJbmRleDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW4gZXhwbGljaXQgc2V0IG9mIG9ic2VydmF0aW9ucywgcmVwbGFjaW5nIGFueSBjdXJyZW50IHNlbGVjdGlvbi5cbiAgICpcbiAgICogRm9yIGEgbGlua2VkIHBsb3Q6IGxhc3NvaW5nIHBvaW50cyBpbiBhbiBlbWJlZGRpbmcgaXMgYSBzZWxlY3Rpb24gT0Ygb2JzZXJ2YXRpb25zLFxuICAgKiBhbmQgZXZlcnkgb3RoZXIgdmlldyDigJQgdGhlIG1hcCwgdGhlIGRpc3RyaWJ1dGlvbnMg4oCUIHJlYWRzIHRoZSBzYW1lIG1hc2ssIHNvIGJydXNoaW5nXG4gICAqIG9uZSBsaWdodHMgdXAgdGhlIHJlc3QuIFJldHVybnMgaG93IG1hbnkgd2VyZSBzZWxlY3RlZC5cbiAgICovXG4gIHNlbGVjdEluZGljZXMoaW5kaWNlczogSXRlcmFibGU8bnVtYmVyPik6IG51bWJlcjtcbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZDtcbn1cblxuLyoqIERpc3BsYXkgb3B0aW9ucyAoY29sb3JtYXAvTFVULCByZXZlcnNlIHNjYWxlLCBpbWFnZSBtZXRhZGF0YSkuICovXG5leHBvcnQgaW50ZXJmYWNlIElEaXNwbGF5T3B0aW9ucyB7XG4gIGdldENvbG9ybWFwKCk6IE9ic2VydmFibGU8Q29sb3JtYXBOb2RlIHwgbnVsbD47XG4gIHNldENvbG9ybWFwKGNvbG9ybWFwOiBDb2xvcm1hcE5vZGUpOiB2b2lkO1xuICBnZXRDb2xvcm1hcE9wdGlvbnMoKTogQ29sb3JtYXBOb2RlW107XG4gIGdldFJldmVyc2VTY2FsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRSZXZlcnNlU2NhbGUocmV2ZXJzZTogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBQdWJsaXNoIHRoZSBjdXJyZW50IGltYWdlJ3MgbWV0YWRhdGEuIGBpbWFnZUtleWAgKGl0cyBmaWxlIG5hbWUpIGxldHMgdGhlXG4gICAqICBjaGFubmVsIHN0YXRlIHN1cnZpdmUgYSByZS1wbG90IG9mIHRoZSBzYW1lIGltYWdlIGJ1dCBub3QgYSBzd2l0Y2ggdG8gYW5vdGhlci4gKi9cbiAgc2V0SW1hZ2VNZXRhKGltYWdlTWV0YTogSUltYWdlTWV0YWRhdGFbXSwgaW1hZ2VLZXk/OiBzdHJpbmcpOiB2b2lkO1xuICBnZXRJbWFnZU1ldGEoKTogT2JzZXJ2YWJsZTxJSW1hZ2VNZXRhZGF0YVtdPjtcbn1cblxuLyoqXG4gKiBUaGUgcGFydCBvZiBpbnRlbnNpdHkgc2FtcGxpbmcgYSByZW5kZXJpbmcgYmFja2VuZCBvd25zOiB3aGVyZSBpdHMgdmlldyBzZXR0bGVkLlxuICogV2hhdCBgSVZpZXdlckJhY2tlbmQuZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKWAgcmV0dXJucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSW50ZW5zaXR5Vmlld3BvcnRTb3VyY2Uge1xuICAvKiogVmlzaWJsZS1yZWdpb24gY2hhbmdlcyAoaW1hZ2UtcGl4ZWwgY29vcmRzKSwgZW1pdHRlZCB3aGVuIHRoZSB2aWV3IHNldHRsZXMsXG4gICAqICBzbyB0aGUgaW5zZXQgY2FuIHJlLXNhbXBsZSBhdCB0aGUgY3VycmVudCB6b29tLiAqL1xuICBnZXRWaWV3cG9ydENoYW5nZSQoKTogT2JzZXJ2YWJsZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9Pjtcbn1cblxuLyoqXG4gKiBJbnRlbnNpdHktcHJvZmlsZSBzYW1wbGluZyAodGhlIGxpbmUgUk9JcycgaW5zZXQpLCBmcm9tIGBJVmlzdWFsaXplci5nZXRJbnRlbnNpdHlTYW1wbGluZygpYC5cbiAqIFRoZSBzYW1wbGluZyBpdHNlbGYgaXMgYmFja2VuZC1uZXV0cmFsICh0aGUgbGlicmFyeSdzIEludGVuc2l0eVByb2ZpbGVTZXJ2aWNlXG4gKiBzYW1wbGVzIHdoYXRldmVyIGltYWdlIGlzIG9uIHNjcmVlbik7IHRoZSB2aWV3cG9ydC1jaGFuZ2Ugc2lnbmFsIGNvbWVzIGZyb20gdGhlXG4gKiBiYWNrZW5kIHRoYXQgZHJhd3MgdGhlIGltYWdlIChPcGVuU2VhZHJhZ29uIGFuZCBuYXBhcmktanMgcmVwb3J0IGl0OyBQbG90bHlcbiAqIHJlLXNhbXBsZXMgaXRzIGhpZ2gtZGVmIHpvb20gY3JvcHMgaW5saW5lIGluc3RlYWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlbnNpdHlTYW1wbGluZyBleHRlbmRzIElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSB7XG4gIC8qKiBMb2FkIHRoZSBjdXJyZW50IGltYWdlL3NsaWNlJ3MgcGl4ZWxzIHNvIHRoZSBsaW5lLVJPSSBwcm9maWxlcyBoYXZlIGRhdGFcbiAgICogIChhIGJhY2tlbmQgd2l0aCBubyBmcmFtZXMgb2YgaXRzIG93bjogT3BlblNlYWRyYWdvbiwgbmFwYXJpLWpzKS4gKi9cbiAgZW5zdXJlSW50ZW5zaXR5U2FtcGxpbmcoaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLCB6SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZS1zYW1wbGUgdGhlIHByb2ZpbGVzIGZyb20gYSBmcmVzaCBjcm9wIG9mIHRoZSBnaXZlbiBpbWFnZS1waXhlbCBST0kgYXRcbiAgICogIGRpc3BsYXkgcmVzb2x1dGlvbi4gKi9cbiAgcmVmcmVzaEludGVuc2l0eVNhbXBsaW5nRm9yUm9pKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgekluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSAyRCB2aWV3IG9wdGlvbnMgb2YgYSB0aWxlZCBpbWFnZSB2aWV3ZXI6IHRoZSBvdmVydmlldyBuYXZpZ2F0b3IgYW5kIGltYWdlXG4gKiBzbW9vdGhpbmcuIE9wZW5TZWFkcmFnb24ncywgbWlycm9yZWQgYnkgbmFwYXJpLWpzJ3MgMkQgdmlld3M7IFBsb3RseSBoYXMgbmVpdGhlci5cbiAqIENhcGFiaWxpdHktZ2F0ZWQ6IGBJVmlld2VyQmFja2VuZC5nZXRPc2RWaWV3T3B0aW9ucygpYCBpcyBudWxsIG9uIGEgYmFja2VuZFxuICogd2l0aG91dCB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElPc2RWaWV3T3B0aW9ucyB7XG4gIC8qKiBTaG93L2hpZGUgdGhlIG92ZXJ2aWV3IG5hdmlnYXRvciAodGhlIG1pbmltYXApLiBBcHBsaWVkIHdoZW4gdGhlIHZpZXdlciBpc1xuICAgKiAgKHJlKWNyZWF0ZWQsIGFuZCB0b2dnbGVkIGxpdmUgd2hlbiBvbmUgaXMgYWxyZWFkeSBtb3VudGVkLiAqL1xuICBzZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogSW1hZ2Ugc21vb3RoaW5nIChiaWxpbmVhciBpbnRlcnBvbGF0aW9uKS4gYGZhbHNlYCA9IG5lYXJlc3QtbmVpZ2hib3VyLCBzb1xuICAgKiAgem9vbWluZyBwYXN0IDE6MSBzaG93cyBjcmlzcCBwaXhlbCBibG9ja3MgKHBpeGVsLWxldmVsIGluc3BlY3Rpb24pLiBBcHBsaWVkXG4gICAqICBhdCB2aWV3ZXIgY3JlYXRpb24gYW5kIGxpdmUgKHdpdGggYSByZWRyYXcpIHdoZW4gb25lIGlzIG1vdW50ZWQuICovXG4gIHNldEltYWdlU21vb3RoaW5nRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgM0QgZGVjaW1hdGUgZmFjdG9yIG9mIGEgdm9sdW1lIHJlbmRlcmVyIChuYXBhcmktanMgV2ViR1BVKTogMSA9IGZ1bGxcbiAqIHJlc29sdXRpb24g4oCmIDggPSDihZsgcGVyIGF4aXMuIENhcGFiaWxpdHktZ2F0ZWQ6IG51bGwgb24gYSBiYWNrZW5kIHdpdGhvdXQgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElWb2x1bWVSZXNvbHV0aW9uIHtcbiAgLyoqIFRoZSBjdXJyZW50IGZhY3RvciAodG8gaW5pdGlhbGl6ZSB0aGUgUmVzb2x1dGlvbiBjb250cm9sKS4gKi9cbiAgZ2V0KCk6IG51bWJlcjtcbiAgLyoqIFNldCB0aGUgZmFjdG9yIChyb3VuZGVkLCBhdCBsZWFzdCAxKS4gVGFrZXMgZWZmZWN0IG9uIHRoZSBuZXh0IChyZSlsb2FkIOKAlFxuICAgKiAgdGhlIGhvc3QgcmUtcGxvdHMgYWZ0ZXIgY2FsbGluZyBpdCwgc2luY2UgaXQgY2hhbmdlcyB0aGUgZmV0Y2hlZCBkYXRhLiAqL1xuICBzZXQoc2NhbGU6IG51bWJlcik6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGhvc3QtZmFjaW5nIGNvbXBvc2l0ZSBjb250cmFjdCwgaW1wbGVtZW50ZWQgYnkgdGhlIHJvdXRlciAoYFZJU1VBTElaRVJgKS4gQVxuICogcmVuZGVyaW5nIGJhY2tlbmQgaW1wbGVtZW50cyB7QGxpbmsgSVZpZXdlckJhY2tlbmR9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZpc3VhbGl6ZXJcbiAgZXh0ZW5kcyBJRGF0YVJlbmRlcmVyLCBJUmVnaW9uU3RvcmUsIElUb29sQ29udHJvbGxlciwgSURpc3BsYXlPcHRpb25zLCBJSW50ZW5zaXR5U2FtcGxpbmcge1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM6IFZpZXdlckNhcGFiaWxpdGllcztcbiAgLyoqIFRoaXMgYmFja2VuZCdzIHJlZ2lvbiByZW5kZXJlci4gTWF5IGJlIG51bGwgdW50aWwgYSBwbG90IGlzIG1vdW50ZWRcbiAgICogIChPcGVuU2VhZHJhZ29uKS4gRHJpdmVzIHJlZ2lvbiBkcmF3L3NlbGVjdCBtb2RlcyB1bmlmb3JtbHkuICovXG4gIGdldFJlZ2lvbk92ZXJsYXkoKTogSVJlZ2lvbk92ZXJsYXkgfCBudWxsO1xuICAvKiogU3BsaXQgYSB2b2x1bWUgdmlldzogdGhlIGRpc3BsYXllZCBzbGljZSwgd2l0aCBldmVyeSByZWdpb24gdG9vbCwgaW4gdGhlIGRpdiBgZGl2YCBiZXNpZGVcbiAgICogIHRoZSAzRCB2aWV3OyBudWxsIGNsb3NlcyBpdC4gUmVzb2x2ZXMgd2hldGhlciB0aGUgc2xpY2Ugc2hvd3MuIE9wdGlvbmFsOiB0aGUgcm91dGVyJ3MuICovXG4gIHNldFNsaWNlRWRpdG9yPyhkaXY6IHN0cmluZyB8IG51bGwpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAvKiogVGhlIHNsaWNlIGVkaXRvcidzIHNlY3Rpb25zIHRocm91Z2ggeCBhbmQgeSAobnVsbHMgd2hpbGUgaXQgaXMgY2xvc2VkKS4gT3B0aW9uYWw6IHRoZSByb3V0ZXIncy4gKi9cbiAgZ2V0U2VjdGlvblZpZXdzJD8oKTogT2JzZXJ2YWJsZTxTZWN0aW9uVmlld3M+O1xuICAvKiogTW92ZSB0aGUgc2xpY2UgZWRpdG9yJ3Mgc2VjdGlvbiBwbGFuZSB0aHJvdWdoIGBheGlzYCB0byBgYXRgIChpbWFnZSBweCkuICovXG4gIHNldFNlY3Rpb25QbGFuZT8oYXhpczogU2VjdGlvbkF4aXMsIGF0OiBudW1iZXIpOiB2b2lkO1xuICAvKiogVGhlIHNsaWNlIHBpY2tlZCBieSBkcmFnZ2luZyB0aGUgeiBwbGFuZSBpbiB0aGUgdm9sdW1lICh0aGUgaG9zdCBzaG93cyBpdCkuICovXG4gIGdldFNsaWNlRHJhZyQ/KCk6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqIElzb3N1cmZhY2UgY29udHJvbHMgd2hlbiB0aGlzIGJhY2tlbmQgYWR2ZXJ0aXNlcyBgVmlld2VyRmVhdHVyZS5Jc29zdXJmYWNlYCxcbiAgICogIGVsc2UgbnVsbCDigJQgc28gY29uc3VtZXJzIGdhdGUgb24gdGhlIHJldHVybmVkIG9iamVjdCwgbm90IGEgbm8tb3AgbWV0aG9kLiAqL1xuICBnZXRJc29zdXJmYWNlQ29udHJvbHMoKTogSUlzb3N1cmZhY2VDb250cm9scyB8IG51bGw7XG4gIC8qKiBJbnRlbnNpdHkgKGxpbmUtUk9JKSBjb250cm9scyB3aGVuIHRoZSBiYWNrZW5kIHJlbmRlcnMgdGhlIExJTkUgcGxvdCB0eXBlLFxuICAgKiAgZWxzZSBudWxsLiAqL1xuICBnZXRJbnRlbnNpdHlDb250cm9scygpOiBJSW50ZW5zaXR5Q29udHJvbHMgfCBudWxsO1xuICAvKiogM0Qgc2NlbmUgY29udHJvbHMgd2hlbiB0aGlzIGJhY2tlbmQgcmVuZGVycyAzRCBwbG90IHR5cGVzLCBlbHNlIG51bGwg4oCUXG4gICAqICB0aGUgY2FwYWJpbGl0eS1nYXRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlcHJlY2F0ZWQgdG9wLWxldmVsXG4gICAqICBgc2V0U3VyZmFjZURyYWdNb2RlYC9gcmVzZXRTdXJmYWNlQ2FtZXJhYC4gKi9cbiAgZ2V0U3VyZmFjZTNkQ29udHJvbHMoKTogSVN1cmZhY2UzZENvbnRyb2xzIHwgbnVsbDtcbiAgLyoqIFRoZSBuYXZpZ2F0b3IgLyBpbWFnZS1zbW9vdGhpbmcgb3B0aW9ucy4gTmV2ZXIgbnVsbCBvbiB0aGUgcm91dGVyOiBhIHNldHRpbmdcbiAgICogIGFwcGxpZXMgdG8gZXZlcnkgYmFja2VuZCB0aGF0IGhhcyB0aGVtIChPcGVuU2VhZHJhZ29uLCBuYXBhcmktanMpLCBzbyBpdCBjYW5cbiAgICogIGJlIHNldCBiZWZvcmUgdGhlIGZpcnN0IHJlbmRlciBhbmQgc3Vydml2ZXMgYSBiYWNrZW5kIHN3aXRjaC4gKi9cbiAgZ2V0T3NkVmlld09wdGlvbnMoKTogSU9zZFZpZXdPcHRpb25zO1xuICAvKiogVGhlIDNEIGRlY2ltYXRlIGZhY3RvciBvZiB0aGUgYmFja2VuZCBvbiBzY3JlZW4sIG9yIG51bGwgd2hlbiBpdCBoYXMgbm9uZVxuICAgKiAgKG9ubHkgbmFwYXJpLWpzIHJlbmRlcnMgdm9sdW1lcykuICovXG4gIGdldFZvbHVtZVJlc29sdXRpb24oKTogSVZvbHVtZVJlc29sdXRpb24gfCBudWxsO1xuICAvKiogSW50ZW5zaXR5LXByb2ZpbGUgc2FtcGxpbmcsIHdoaWNoZXZlciBiYWNrZW5kIGlzIG9uIHNjcmVlbi4gKi9cbiAgZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKTogSUludGVuc2l0eVNhbXBsaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBnZXRJbnRlbnNpdHlTYW1wbGluZygpLmVuc3VyZUludGVuc2l0eVNhbXBsaW5nKClgLiAqL1xuICBlbnN1cmVJbnRlbnNpdHlTYW1wbGluZyhpbWFnZUluZm86IElJbWFnZUluZm8sIHpJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKS5yZWZyZXNoSW50ZW5zaXR5U2FtcGxpbmdGb3JSb2koKWAuICovXG4gIHJlZnJlc2hJbnRlbnNpdHlTYW1wbGluZ0ZvclJvaSh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHpJbmRleDogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKS5nZXRWaWV3cG9ydENoYW5nZSQoKWAuICovXG4gIGdldFZpZXdwb3J0Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0+O1xuICAvKiogU3BhdGlhbC1vbWljcyBjb250cm9scyB3aGVuIGEgYFNQQVRJQUxfREFUQV9QT1JUYCBpcyBib3VuZCwgZWxzZSBudWxsLlxuICAgKiAgT3B0aW9uYWw6IG9ubHkgdGhlIHJvdXRpbmcgc2VydmljZSBpbXBsZW1lbnRzIGl0LCBzaW5jZSB0aGUgc3RhdGUgaXMgc2hhcmVkXG4gICAqICByYXRoZXIgdGhhbiBvd25lZCBieSBhbnkgb25lIGJhY2tlbmQuICovXG4gIGdldFNwYXRpYWxDb250cm9scz8oKTogSVNwYXRpYWxDb250cm9scyB8IG51bGw7XG4gIC8qKiBUaGUgdmlld3BvcnQgYSBjb250cmlidXRlZCBwbG90IG1vZGUgZHJhd3Mgb3Zlciwgd2hlbiB0aGUgYmFja2VuZCBvblxuICAgKiAgc2NyZWVuIGNhbiBwcm92aWRlIG9uZSAoT3BlblNlYWRyYWdvbiksIGVsc2UgbnVsbC4gT3B0aW9uYWw6IGJhY2tlbmRzIHRoYXRcbiAgICogIG5vIGNvbnRyaWJ1dGVkIG1vZGUgcmlkZXMgb24gbmVlZCBub3QgaW1wbGVtZW50IGl0LiAqL1xuICBnZXRQbG90TW9kZVZpZXdwb3J0PygpOiBQbG90TW9kZVZpZXdwb3J0IHwgbnVsbDtcbiAgLyoqIEJpbm5lZCBpbnRlbnNpdHkgaGlzdG9ncmFtIGZvciBhIGNoYW5uZWwgZnJvbSB0aGUgY3VycmVudGx5LWRpc3BsYXllZFxuICAgKiAgcGl4ZWxzLCBvciBudWxsIHdoZW4gbm9uZSBhcmUgYXZhaWxhYmxlLiBGZWVkcyB0aGUgQ2hhbm5lbHMgJiBIaXN0b2dyYW1cbiAgICogIHBhbmUuICovXG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIC8qKiBBc3luYyBoaXN0b2dyYW0gc3RyZWFtIOKAlCBuYXRpdmUgYml0IGRlcHRoIGZvciA+OC1iaXQgaW1hZ2VzIChzZXJ2ZXIpLCBlbHNlXG4gICAqICB0aGUgOC1iaXQgY2xpZW50IGhpc3RvZ3JhbS4gKi9cbiAgZ2V0SGlzdG9ncmFtJChjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogT2JzZXJ2YWJsZTxJSGlzdG9ncmFtIHwgbnVsbD47XG4gIC8qKiBFeHBvcnQgdGhlIGRpc3BsYXllZCBpbWFnZSwgY29tcG9zaXRlZCB3aXRoIHRoZSBjdXJyZW50IGRpc3BsYXkgc2V0dGluZ3MsXG4gICAqICBhcyBhIHB1YmxpY2F0aW9uLXJlYWR5IFBORyBkb3dubG9hZC4gKi9cbiAgZXhwb3J0Q29tcG9zaXRlKCk6IHZvaWQ7XG4gIC8qKiBFeHBvcnQgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZGF0YSBhcyBhIGRhdGEtcHJlc2VydmluZyBtdWx0aS1iYW5kIFRJRkZcbiAgICogIChuYXRpdmUgYml0IGRlcHRoKS4gTm8tb3Agb24gYmFja2VuZHMgdGhhdCBjYW4ndCBwcm92aWRlIGl0LiAqL1xuICBleHBvcnREYXRhKCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBUaGUgdmlldyBpcyBnb2luZyBhd2F5ICh0aGUgYDx2aXN1YWxpemVyPmAgaXMgZGVzdHJveWVkKTogZHJvcCB3aGF0IGlzIGJvdW5kIHRvXG4gICAqIGl0IOKAlCB0aGUgb24tc2NyZWVuIHZpZXdlciwgaXRzIHJlbmRlciBsb29wIGFuZCB2aWV3IHN1YnNjcmlwdGlvbnMg4oCUIHNvIG5vdGhpbmdcbiAgICogb3V0bGl2ZXMgdGhlIHZpZXcuIFNlcnZpY2UtbGlmZXRpbWUgc3RhdGUgKHN0b3JlcywgdGhlIGJhY2tlbmRzJyBvd24gc3RvcmVcbiAgICogc3Vic2NyaXB0aW9ucykgaXMgdW50b3VjaGVkLCBzbyBhIGxhdGVyIHZpZXcgb24gdGhlIHNhbWUgY2hhaW4gcmVuZGVycyBub3JtYWxseS5cbiAgICovXG4gIGRldGFjaCgpOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBkZXRhY2h9LCB3aGljaCB0aGlzIGRlbGVnYXRlcyB0by4gKi9cbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBXaGF0IGEgcmVuZGVyaW5nIGJhY2tlbmQgaW1wbGVtZW50cyAoUGxvdGx5LCBPcGVuU2VhZHJhZ29uLCBuYXBhcmktanMpOiByZW5kZXJpbmcsXG4gKiB0aGUgdmlld3BvcnQsIHBpeGVsIHJlYWRiYWNrLCBleHBvcnQsIGxvYWRpbmcgc3RhdGUgYW5kIGl0cyBvbi1jYW52YXMgdG9vbHMsIHBsdXNcbiAqIGNhcGFiaWxpdHktZ2F0ZWQgZ2V0dGVycyBmb3Igd2hhdCBvbmx5IHNvbWUgYmFja2VuZHMgaGF2ZS5cbiAqXG4gKiBJdCBpcyB0aGUgYmFja2VuZC1mYWNpbmcgaGFsZiBvZiB7QGxpbmsgSVZpc3VhbGl6ZXJ9LiBSZWdpb24gYW5kIGRpc3BsYXkgc3RhdGUgYXJlXG4gKiBub3QgaGVyZTogdGhleSBsaXZlIGluIHRoZSBzaGFyZWQgYFJlZ2lvblN0b3JlYCAvIGBWaXN1YWxpemVyU3RvcmVgLCB3aGljaCB0aGUgcm91dGVyXG4gKiBzZXJ2ZXMgdG8gaG9zdHMgZGlyZWN0bHk7IGEgYmFja2VuZCBkcmF3cyB0aGVtIGJ5IHN1YnNjcmliaW5nIHRvIHRoZSBzdG9yZXMnIGV2ZW50cy5cbiAqIEhvc3RzIGtlZXAgZGVwZW5kaW5nIG9uIGBJVmlzdWFsaXplcmAgKHRoZSByb3V0ZXIncyBjb21wb3NpdGUpLCBuZXZlciBvbiBhIGJhY2tlbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZpZXdlckJhY2tlbmQgZXh0ZW5kcyBJVG9vbENvbnRyb2xsZXIge1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM6IFZpZXdlckNhcGFiaWxpdGllcztcblxuICAvLyDilIDilIAgcmVuZGVyIGxpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgbG9hZChpbWFnZUluZm86IElJbWFnZUluZm8sIHpJbmRleDogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TG9hZGVkSW1hZ2U+O1xuICBwbG90KFxuICAgIHBsb3REaXY6IHN0cmluZyxcbiAgICBpbWFnZUxvYWRlZDogdW5rbm93bixcbiAgICBpbWFnZUluZm86IElJbWFnZUluZm8sXG4gICAgc2NyZWVuSGVpZ2h0OiBudW1iZXIsXG4gICAgcGxvdFR5cGU6IFBsb3RUeXBlLFxuICAgIGluUGxhY2U/OiBib29sZWFuLFxuICApOiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXNldCgpOiB2b2lkO1xuICByZWxheW91dCh0cnVlSW1hZ2VTaXplPzogbnVtYmVyW10pOiB2b2lkO1xuICAvKiogVGhlIHZpZXcgaXMgZ29pbmcgYXdheTogcmVsZWFzZSB3aGF0IGlzIGJvdW5kIHRvIGl0LiAqL1xuICBkZXRhY2goKTogdm9pZDtcbiAgLyoqIFN0b3Agc3RyZWFtaW5nIGZyYW1lcyAodm9sdW1lIGFzc2VtYmx5IC8gc3VyZmFjZSBwcmVsb2FkKS4gT3B0aW9uYWw6IG9ubHlcbiAgICogIGJhY2tlbmRzIHRoYXQgc3RyZWFtIGEgei1zdGFjayBkbyB3b3JrIGhlcmUuICovXG4gIGNhbmNlbExvYWRpbmc/KCk6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIHZpZXdwb3J0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB6b29tSW4oKTogdm9pZDtcbiAgem9vbU91dCgpOiB2b2lkO1xuICBzZXREcmFnTW9kZShtb2RlOiBzdHJpbmcgfCBmYWxzZSk6IHZvaWQ7XG4gIGZpdFRvVmlldygpOiB2b2lkO1xuICAvKiogQHNlZSBJRGF0YVJlbmRlcmVyLnJlc2V0QXhlcyAqL1xuICByZXNldEF4ZXMoKTogdm9pZDtcbiAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogdm9pZDtcbiAgc2V0U2hvd1N0YWNrKHNob3dzdGFjazogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgYmFja2VuZCBmaXRzIHRoZSB2aWV3LiAqL1xuICBnZXRBdXRvc2NhbGVFdmVudCgpOiBPYnNlcnZhYmxlPHVua25vd24+O1xuICBpc1N0YWNrTG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBnZXRTdGFja0xvYWRpbmdQcm9ncmVzcygpOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgLy8g4pSA4pSAIHBpeGVscywgaGlzdG9ncmFtLCBleHBvcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldFRydWVJbWFnZVNpemUoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbDtcbiAgZ2V0Q3VycmVudEltYWdlKCk6IFByb21pc2U8SW1hZ2UgfCBudWxsPjtcbiAgZ2V0RGlzcGxheWVkUGl4ZWxEYXRhKCk6IFBpeGVsRGF0YSB8IG51bGw7XG4gIGdldERpc3BsYXllZFNvdXJjZVJlY3QoKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGw7XG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIGdldEhpc3RvZ3JhbSQoY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IE9ic2VydmFibGU8SUhpc3RvZ3JhbSB8IG51bGw+O1xuICBkb3dubG9hZEltYWdlKCk6IHZvaWQ7XG4gIGV4cG9ydENvbXBvc2l0ZSgpOiB2b2lkO1xuICBleHBvcnREYXRhKCk6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIGNhcGFiaWxpdHktZ2F0ZWQgc3VyZmFjZXMgKG51bGwgLyBhYnNlbnQgd2hlcmUgdGhlIGJhY2tlbmQgbGFja3MgdGhlIGZlYXR1cmUpIOKUgOKUgFxuICBnZXRSZWdpb25PdmVybGF5KCk6IElSZWdpb25PdmVybGF5IHwgbnVsbDtcbiAgZ2V0SXNvc3VyZmFjZUNvbnRyb2xzKCk6IElJc29zdXJmYWNlQ29udHJvbHMgfCBudWxsO1xuICBnZXRTdXJmYWNlM2RDb250cm9scygpOiBJU3VyZmFjZTNkQ29udHJvbHMgfCBudWxsO1xuICBnZXRJbnRlbnNpdHlDb250cm9scygpOiBJSW50ZW5zaXR5Q29udHJvbHMgfCBudWxsO1xuICBnZXRQbG90TW9kZVZpZXdwb3J0PygpOiBQbG90TW9kZVZpZXdwb3J0IHwgbnVsbDtcbiAgLyoqIE5hdmlnYXRvciAvIGltYWdlIHNtb290aGluZywgb3IgbnVsbCB3aGVuIHRoZSBiYWNrZW5kIGhhcyBuZWl0aGVyIChQbG90bHkpLiAqL1xuICBnZXRPc2RWaWV3T3B0aW9ucygpOiBJT3NkVmlld09wdGlvbnMgfCBudWxsO1xuICAvKiogVGhlIDNEIGRlY2ltYXRlIGZhY3Rvciwgb3IgbnVsbCB3aGVuIHRoZSBiYWNrZW5kIHJlbmRlcnMgbm8gdm9sdW1lcy4gKi9cbiAgZ2V0Vm9sdW1lUmVzb2x1dGlvbigpOiBJVm9sdW1lUmVzb2x1dGlvbiB8IG51bGw7XG4gIC8qKiBXaGVyZSB0aGUgdmlldyBzZXR0bGVkLCBmb3IgdGhlIGludGVuc2l0eSBpbnNldCdzIHJlLXNhbXBsaW5nOyBudWxsIHdoZW4gdGhlXG4gICAqICBiYWNrZW5kIHJlLXNhbXBsZXMgb24gaXRzIG93biAoUGxvdGx5J3MgaGlnaC1kZWYgem9vbSkuIFRoZSBzYW1wbGluZyBpdHNlbGYgaXNcbiAgICogIHRoZSByb3V0ZXIncyAoSW50ZW5zaXR5UHJvZmlsZVNlcnZpY2UpLiAqL1xuICBnZXRJbnRlbnNpdHlTYW1wbGluZygpOiBJSW50ZW5zaXR5Vmlld3BvcnRTb3VyY2UgfCBudWxsO1xufVxuXG4vKipcbiAqIFdoYXQgYSBtb3VudGVkIGA8dmlzdWFsaXplcj5gIGhhbmRzIGl0cyBob3N0IHRocm91Z2hcbiAqIGBJbWFnZVN0YXRlUG9ydC5zZXREaWFncmFtKClgIOKAlCBhIHNtYWxsLCB0eXBlZCBzdXJmYWNlIHJhdGhlciB0aGFuIHRoZSBjb21wb25lbnRcbiAqIGl0c2VsZiwgd2hvc2UgZXZlcnkgcHVibGljIG1lbWJlciB3b3VsZCBvdGhlcndpc2UgYmUgZGUtZmFjdG8gQVBJLiBDbGVhcmVkXG4gKiAoYHNldERpYWdyYW0obnVsbClgKSB3aGVuIHRoZSB2aXN1YWxpemVyIGlzIGRlc3Ryb3llZC4gSG9zdHMgdGhhdCBjYW4gaW5qZWN0XG4gKiB7QGxpbmsgVklTVUFMSVpFUn0gLyBgUkVHSU9OX0VESVRPUl9BUElgIGRpcmVjdGx5IG5lZWQgbm90IHVzZSBpdCBhdCBhbGwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlzdWFsaXplckhhbmRsZSB7XG4gIC8qKiBUaGUgdmlzdWFsaXplciBjaGFpbiB0aGlzIGA8dmlzdWFsaXplcj5gIHJlbmRlcnMgdGhyb3VnaC4gKi9cbiAgcmVhZG9ubHkgdmlzdWFsaXplcjogSVZpc3VhbGl6ZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIHZpc3VhbGl6ZXJ9LiBLZXB0IGZvciBob3N0cyB0aGF0IHJlYWQgdGhlIGNvbXBvbmVudCdzXG4gICAqICBmb3JtZXIgYHBsb3RTZXJ2aWNlYCBmaWVsZCBvZmYgdGhlIHJlZ2lzdGVyZWQgb2JqZWN0LiAqL1xuICByZWFkb25seSBwbG90U2VydmljZTogSVZpc3VhbGl6ZXI7XG4gIC8qKiBXaGV0aGVyIGFueSByZWdpb24gKGFubm90YXRpb24gb3IgaW50ZW5zaXR5IGxpbmUpIGV4aXN0cyBvbiB0aGUgY3VycmVudCBpbWFnZS4gKi9cbiAgaGFzUmVnaW9ucygpOiBib29sZWFuO1xuICAvKiogVGhlIGN1cnJlbnQgcmVnaW9ucyBhcyBwb2x5Z29ucywgZm9yIGEgc2VydmVyIHJlcXVlc3QgKGNyb3AgLyBwcm9jZXNzaW5nKS4gKi9cbiAgZ2V0UmVnaW9uUG9seWdvbnMoKTogUG9seWdvbltdO1xufVxuXG4vKipcbiAqIERJIHRva2VuIGZvciB0aGUgYWN0aXZlIHZpc3VhbGl6YXRpb24gYmFja2VuZC4gQmluZCBpdCAoYHVzZUV4aXN0aW5nYCkgdG8gdGhlXG4gKiBgUm91dGluZ1Zpc3VhbGl6ZXJTZXJ2aWNlYCwgd2hpY2ggc2VsZWN0cyBQbG90bHkgdnMgT3BlblNlYWRyYWdvbiBwZXIgcGxvdFxuICogdHlwZS4gQ29uc3VtZXJzIOKAlCBpbmNsdWRpbmcgdGhpcyBsaWJyYXJ5J3Mgb3duIGBWaXN1YWxpemVyQ29tcG9uZW50YCDigJRcbiAqIGluamVjdCBgSVZpc3VhbGl6ZXJgIHRocm91Z2ggdGhpcyB0b2tlbiByYXRoZXIgdGhhbiB0aGUgY29uY3JldGUgcm91dGVyLCBzb1xuICogdGhlIHJvdXRpbmcvZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gY2FuIGNoYW5nZSB3aXRob3V0IHRvdWNoaW5nIGNvbnN0cnVjdG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFZJU1VBTElaRVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48SVZpc3VhbGl6ZXI+KCdWSVNVQUxJWkVSJyk7XG4iXX0=
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsaXplci5jb250cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWd3Qi9DOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBYyxZQUFZLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFNlY3Rpb25BeGlzLCBTZWN0aW9uVmlld3MgfSBmcm9tICcuL3NlY3Rpb24tdmlldy5jb250cmFjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJ2ltYWdlLWpzJztcblxuaW1wb3J0IHsgSUltYWdlSW5mbywgSUltYWdlTWV0YWRhdGEgfSBmcm9tICcuL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IFBvbHlnb24sIFJlZ2lvbiB9IGZyb20gJy4uL21vZGVscy9yZWdpb24nO1xuaW1wb3J0IHsgUGxvdFR5cGUsIFBsb3RUeXBlRGVzY3JpcHRvciB9IGZyb20gJy4vcGxvdC10eXBlJztcbmltcG9ydCB7IFZpZXdlckNhcGFiaWxpdGllcyB9IGZyb20gJy4vY2FwYWJpbGl0aWVzLmNvbnRyYWN0JztcbmltcG9ydCB7IElSZWdpb25PdmVybGF5IH0gZnJvbSAnLi9yZWdpb24tb3ZlcmxheS5jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IFJlZ2lvblNvdXJjZSB9IGZyb20gJy4uL3JlZ2lvbi1zb3VyY2UvcmVnaW9uLXNvdXJjZSc7XG5pbXBvcnQgeyBJSGlzdG9ncmFtIH0gZnJvbSAnLi9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgQ2FudmFzVG9vbE9wdGlvbnMsXG4gIENvbG9ybWFwTm9kZSxcbiAgSVdhbmRPcHRpb25zLFxuICBJQnJ1c2hPcHRpb25zLFxuICBTcGF0aWFsVmlld1N0YXRlLFxuICBTcGF0aWFsQ29sb3JCeSxcbiAgQ2VsbHMzZFN0YXR1cyxcbiAgT2JzZXJ2YXRpb25zSW5TZWxlY3Rpb24sXG4gIFRyYW5zY3JpcHRzSW5TZWxlY3Rpb24sXG59IGZyb20gJy4vZGlzcGxheS10eXBlcyc7XG5pbXBvcnQge1xuICBDYXRlZ29yaWNhbENvbHVtbk1ldGEsXG4gIFNwYXRpYWxEYXRhc2V0LFxuICBTcGF0aWFsRW1iZWRkaW5nLFxuICBTcGF0aWFsTWFya2VyR2VuZXMsXG4gIFNwYXRpYWxTZWxlY3Rpb25NYXNrLFxuICBTcGF0aWFsVHJhbnNjcmlwdENvdW50cyxcbn0gZnJvbSAnLi9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBQbG90TW9kZVZpZXdwb3J0IH0gZnJvbSAnLi9wbG90LXR5cGUtY29udHJpYnV0aW9uLmNvbnRyYWN0JztcblxuLyoqXG4gKiBCYWNrZW5kLW5ldXRyYWwgdmlzdWFsaXphdGlvbiBjb250cmFjdC4gUGxvdGx5IGlzIG9uZSBpbXBsZW1lbnRhdGlvbjtcbiAqIE9wZW5TZWFkcmFnb24gaXMgYW5vdGhlciAoZm9yIHRoZSBpbWFnZSBwbG90IHR5cGUpLiBUaGUgYWJzdHJhY3Rpb24gcmVuZGVyc1xuICogZGF0YSDigJQgYSByYXN0ZXIgaW1hZ2UgT1IgYSBzY2llbnRpZmljIHBsb3QgKGhlYXRtYXAsIHN1cmZhY2UsIGNvbnRvdXIsXG4gKiBzY2F0dGVyLCBsaW5lLCBpc29zdXJmYWNlKSDigJQgZHJhd3MgcmVnaW9ucyBvbiBpdCwgYW5kIGRyaXZlcyBvbi1jYW52YXMgdG9vbHMuXG4gKlxuICogU3BsaXQgaW50byByb2xlIGludGVyZmFjZXMgc28gYSBjb25zdW1lciBjYW4gZGVwZW5kIG9ubHkgb24gdGhlIHNsaWNlIGl0XG4gKiB1c2VzLCB0aGVuIGNvbXBvc2VkIGludG8gYElWaXN1YWxpemVyYC5cbiAqL1xuXG4vKiogUGl4ZWwgcmVhZGJhY2sgc2hhcGUgcmV0dXJuZWQgYnkgYGdldERpc3BsYXllZFBpeGVsRGF0YWAuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpeGVsRGF0YSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBjaGFubmVsczogbnVtYmVyO1xuICBkYXRhOiBVaW50OENsYW1wZWRBcnJheTtcbn1cblxuLyoqIEludGVuc2l0eSBzYW1wbGVkIGFsb25nIGEgbGluZSBST0kgKFBsb3RUeXBlLkxJTkUgb3ZlciBpbWFnZSBkYXRhKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZW5zaXR5UHJvZmlsZSB7XG4gIC8qKiBEaXN0YW5jZSBhbG9uZyB0aGUgbGluZS4gSW4gbWljcm9ucyB3aGVuIHRoZSBpbWFnZSBjYXJyaWVzIGEgcGh5c2ljYWxcbiAgICogIHBpeGVsIHNpemUgKG1wcCk7IG90aGVyd2lzZSBpbiBpbWFnZSBwaXhlbHMuIFNlZSB7QGxpbmsgdW5pdH0uICovXG4gIHBvc2l0aW9uczogbnVtYmVyW107XG4gIC8qKiBTYW1wbGVkIGludGVuc2l0eSAoZ3JheXNjYWxlIHZhbHVlIG9yIFJHQiBsdW1pbmFuY2UpLiAqL1xuICB2YWx1ZXM6IG51bWJlcltdO1xuICAvKiogVW5pdCBvZiB7QGxpbmsgcG9zaXRpb25zfTogJ8K1bScgd2hlbiBzY2FsZWQgYnkgdGhlIGltYWdlJ3MgbXBwLCBlbHNlICdweCcuICovXG4gIHVuaXQ/OiAnwrVtJyB8ICdweCc7XG4gIC8qKiBTdGFibGUgaWQgb2YgdGhlIGxpbmUgUk9JIHRoaXMgcHJvZmlsZSBjYW1lIGZyb20gKG11bHRpLWxpbmUgc3VwcG9ydCkuICovXG4gIGlkPzogbnVtYmVyO1xuICAvKiogQ29sb3VyIG9mIHRoZSBsaW5lIFJPSSDigJQgdGhlIGluc2V0IHRyYWNlIGlzIGRyYXduIGluIHRoZSBzYW1lIGNvbG91ci4gKi9cbiAgY29sb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBgSURhdGFSZW5kZXJlci5sb2FkKClgIHJlc29sdmVzIHRvLiBCYWNrZW5kLXNwZWNpZmljIGJleW9uZCBgZmlsZW5hbWVgLFxuICogd2hpY2ggbmFtZXMgdGhlIGltYWdlIHRoZSBoYW5kbGUgd2FzIGxvYWRlZCBmb3I6IHRoZSBob3N0IGNvbXBhcmVzIGl0IHdpdGggdGhlXG4gKiBpbWFnZSBpdCBhc2tlZCBmb3IsIHRvIGRyb3AgYSBoYW5kbGUgYSBuZXdlciByZXF1ZXN0IGhhcyBvdmVydGFrZW4uIFBhc3MgdGhlXG4gKiBoYW5kbGUgb24gdG8gYHBsb3QoKWAgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRlZEltYWdlIHtcbiAgcmVhZG9ubHkgZmlsZW5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyL3ZpZXdwb3J0IHJvbGU6IGxvYWQgZGF0YSwgcmVuZGVyIGl0IChpbWFnZSBvciBwbG90KSwgYW5kIGhhbmRsZVxuICogem9vbSwgc3RhY2sgbmF2aWdhdGlvbiwgYW5kIHBpeGVsIHJlYWRiYWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhUmVuZGVyZXIge1xuICAvKiogRmV0Y2ggd2hhdCB7QGxpbmsgcGxvdH0gbmVlZHMgZm9yIHRoaXMgaW1hZ2Uvc2xpY2UuIGBzaWduYWxgIGFib3J0cyB3aGVuIHRoZVxuICAgKiAgaG9zdCBubyBsb25nZXIgd2FudHMgdGhlIHJlc3VsdCAoYSBuZXdlciBpbWFnZSwgQ2FuY2VsLCB0ZWFyZG93bik7IGEgYmFja2VuZFxuICAgKiAgbWF5IHN0b3AgaXRzIG5ldHdvcmsgd29yayB0aGVuLiBPcHRpb25hbCwgYW5kIGlnbm9yZWQgYnkgYmFja2VuZHMgdGhhdCBkb1xuICAgKiAgbm90IHN1cHBvcnQgaXQgeWV0LiAqL1xuICBsb2FkKGltYWdlSW5mbzogSUltYWdlSW5mbywgekluZGV4OiBudW1iZXIsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxMb2FkZWRJbWFnZT47XG4gIC8qKiBgaW1hZ2VMb2FkZWRgIGlzIHRoZSB7QGxpbmsgTG9hZGVkSW1hZ2V9IGhhbmRsZSByZXR1cm5lZCBieSBgbG9hZCgpYCAob3IgbnVsbFxuICAgKiAgZm9yIGEgZHJhdyB3aXRoIG5vIGltYWdlKSDigJQgcGFzcyBpdCBzdHJhaWdodCB0aHJvdWdoLiBSZXNvbHZlcyBmYWxzZSB3aGVuIHRoZVxuICAgKiAgYmFja2VuZCBjb3VsZCBub3QgZHJhdyAobm8gcGxvdCB0YXJnZXQsIG5vIFdlYkdQVSwg4oCmKS4gKi9cbiAgcGxvdChcbiAgICBwbG90RGl2OiBzdHJpbmcsXG4gICAgaW1hZ2VMb2FkZWQ6IHVua25vd24sXG4gICAgaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLFxuICAgIHNjcmVlbkhlaWdodDogbnVtYmVyLFxuICAgIHBsb3RUeXBlOiBQbG90VHlwZSxcbiAgICBpblBsYWNlPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxib29sZWFuPjtcbiAgLyoqIEBkZXByZWNhdGVkIFBsb3RseS1zcGVjaWZpYyByZS1yZW5kZXI7IHRoZSBPU0QgYmFja2VuZCBuby1vcHMgaXQuIFRoZSBob3N0XG4gICAqICByZS1kcml2ZXMgYHBsb3QoKWAgZnJvbSBpdHMgaW1hZ2Ugc3RyZWFtIGluc3RlYWQuICovXG4gIHJlbG9hZEFuZFBsb3QoKTogdm9pZDtcbiAgcmVzZXQoKTogdm9pZDtcbiAgcmVsYXlvdXQodHJ1ZUltYWdlU2l6ZT86IG51bWJlcltdKTogdm9pZDtcbiAgLyoqXG4gICAqIEZpdCB0aGUgd2hvbGUgaW1hZ2UgKG9yIHNjZW5lKSBpbnRvIHRoZSB2aWV3IOKAlCBldmVyeSBiYWNrZW5kIGRvZXM6IFBsb3RseVxuICAgKiBhdXRvcmFuZ2VzIGl0cyBheGVzLCBPcGVuU2VhZHJhZ29uIGdvZXMgaG9tZSwgbmFwYXJpLWpzIGZpdHMgaXRzIGNhbWVyYS4gVGhlXG4gICAqIGJhY2tlbmQgdGhlbiBlbWl0cyBvbiB7QGxpbmsgZ2V0QXV0b3NjYWxlRXZlbnR9LlxuICAgKi9cbiAgZml0VG9WaWV3KCk6IHZvaWQ7XG4gIC8qKiBSZXNldCB0aGUgdmlldyB0byB0aGUgaW1hZ2UgZXh0ZW50LiBTYW1lIGludGVudCBhcyB7QGxpbmsgZml0VG9WaWV3fTsga2VwdCBmb3JcbiAgICogIGNhbGxlcnMgb2YgdGhlIG9yaWdpbmFsIG5hbWUuICovXG4gIHJlc2V0QXhlcygpOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBmaXRUb1ZpZXd9IOKAlCB0aGUgc2FtZSBvcGVyYXRpb24gdW5kZXIgaXRzIGJhY2tlbmQtbmV1dHJhbCBuYW1lLiAqL1xuICBhdXRvc2NhbGUoKTogdm9pZDtcbiAgem9vbUluKCk6IHZvaWQ7XG4gIHpvb21PdXQoKTogdm9pZDtcbiAgc2V0RHJhZ01vZGUobW9kZTogc3RyaW5nIHwgZmFsc2UpOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBnZXRPc2RWaWV3T3B0aW9ucygpLnNldE5hdmlnYXRvclZpc2libGUoKWAgb24gYElWaXN1YWxpemVyYC4gKi9cbiAgc2V0TmF2aWdhdG9yVmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZ2V0T3NkVmlld09wdGlvbnMoKS5zZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoKWAgb24gYElWaXN1YWxpemVyYC4gKi9cbiAgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gIHNldFNob3dTdGFjayhzaG93c3RhY2s6IGJvb2xlYW4pOiB2b2lkO1xuICBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIpOiB2b2lkO1xuICBzZXRTdGFja0xvYWRpbmcoc3RhY2tMb2FkaW5nOiBib29sZWFuKTogdm9pZDtcbiAgaXNTdGFja0xvYWRpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZ2V0U3RhY2tMb2FkaW5nUHJvZ3Jlc3MoKTogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAvKiogQ2FuY2VsIGFueSBpbi1mbGlnaHQgbXVsdGktZnJhbWUgbG9hZGluZyAodm9sdW1lLWFzc2VtYmx5IC8gc3VyZmFjZSBwcmVsb2FkKSBzbyBpdCBzdG9wc1xuICAgKiAgZmV0Y2hpbmcgbW9yZSBmcmFtZXMgYW5kIGNsZWFycyB0aGUgbG9hZGluZyBzdGF0ZS4gT3B0aW9uYWwg4oCUIG9ubHkgYmFja2VuZHMgdGhhdCBzdHJlYW0gYVxuICAgKiAgei1zdGFjayAobmFwYXJpLWpzIFdlYkdQVSkgZG8gcmVhbCB3b3JrIGhlcmU7IG90aGVycyBuby1vcC4gKi9cbiAgY2FuY2VsTG9hZGluZz8oKTogdm9pZDtcblxuICBnZXRUcnVlSW1hZ2VTaXplKCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGw7XG4gIGdldEN1cnJlbnRJbWFnZSgpOiBQcm9taXNlPEltYWdlIHwgbnVsbD47XG4gIGdldERpc3BsYXllZFBpeGVsRGF0YSgpOiBQaXhlbERhdGEgfCBudWxsO1xuICAvKipcbiAgICogVGhlIHJlZ2lvbiBvZiB0aGUgb3JpZ2luYWwsIGZ1bGwtcmVzb2x1dGlvbiBpbWFnZSB0aGF0IHRoZSBwaXhlbHMgcmV0dXJuZWRcbiAgICogYnkge0BsaW5rIGdldERpc3BsYXllZFBpeGVsRGF0YX0gY3VycmVudGx5IGNvdmVyIOKAlCBgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH1gXG4gICAqIGluIGZ1bGwtaW1hZ2UgcGl4ZWwgY29vcmRpbmF0ZXMuIFdoZW4gem9vbWVkL3Bhbm5lZCBpbnRvIGEgc3ViLWFyZWEgdGhpcyBpc1xuICAgKiB0aGUgY3JvcCdzIG9yaWdpbiArIGV4dGVudDsgd2hlbiB6b29tZWQgb3V0L3Bhbm5lZCBiZXlvbmQgdGhlIGVkZ2VzLCB0aGVcbiAgICogcmVjdGFuZ2xlIG1heSBleHRlbmQgb3V0c2lkZSB0aGUgaW1hZ2UgYm91bmRzIChtYXRjaGluZyB0aGUgcGl4ZWwgcmVhZGJhY2tcbiAgICogY2FudmFzKS4gTGV0cyBhIGNvbnN1bWVyIG1hcCBkaXNwbGF5ZWQtcGl4ZWwgY29vcmRpbmF0ZXMgYmFjayB0byB0aGUgb3JpZ2luYWxcbiAgICogaW1hZ2UgdmlhIGBvcmlnaW4gKyBkaXNwbGF5ZWRQeCAqIChleHRlbnQgLyBkaXNwbGF5ZWREaW0pYC5cbiAgICpcbiAgICogUmV0dXJucyBgbnVsbGAgd2hlbiB0aGUgdmlld3BvcnQgaXNuJ3QgbGFpZCBvdXQgeWV0IG9yIHRoZSBiYWNrZW5kIGNhbid0XG4gICAqIHJlcG9ydCBpdCDigJQgY2FsbGVycyBzaG91bGQgdGhlbiBmYWxsIGJhY2sgdG8gdGhlIGZ1bGwtaW1hZ2Ugc2NhbGUgKHRyZWF0XG4gICAqIHRoZSBkaXNwbGF5ZWQgcGl4ZWxzIGFzIGEgZG93bnNhbXBsZSBvZiB0aGUgd2hvbGUgaW1hZ2UpLlxuICAgKi9cbiAgZ2V0RGlzcGxheWVkU291cmNlUmVjdCgpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbDtcbiAgZG93bmxvYWRJbWFnZSgpOiB2b2lkO1xuXG4gIHNldFBsb3RUeXBlKHBsb3RUeXBlOiBQbG90VHlwZSk6IHZvaWQ7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYGdldFZvbHVtZVJlc29sdXRpb24oKT8uc2V0KClgIG9uIGBJVmlzdWFsaXplcmAuICovXG4gIHNldFJlc29sdXRpb25TY2FsZT8oc2NhbGU6IG51bWJlcik6IHZvaWQ7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYGdldFZvbHVtZVJlc29sdXRpb24oKT8uZ2V0KClgIG9uIGBJVmlzdWFsaXplcmAgKHRoaXMgcmV0dXJucyAxIHdpdGhvdXQgb25lKS4gKi9cbiAgZ2V0UmVzb2x1dGlvblNjYWxlPygpOiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYGdldFN1cmZhY2UzZENvbnRyb2xzKCk/LnNldFN1cmZhY2VEcmFnTW9kZSgpYCDigJQgM0Qgc2NlbmUgY29udHJvbHNcbiAgICogIG9ubHkgZXhpc3Qgb24gYSBiYWNrZW5kIHRoYXQgcmVuZGVycyAzRCBwbG90IHR5cGVzOyB0aGlzIHNpbGVudGx5IG5vLW9wcyBvbiBPU0QuICovXG4gIHNldFN1cmZhY2VEcmFnTW9kZShtb2RlOiBzdHJpbmcpOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBnZXRTdXJmYWNlM2RDb250cm9scygpYCDigJQgc2VlIHtAbGluayBzZXRTdXJmYWNlRHJhZ01vZGV9LiAqL1xuICByZXNldFN1cmZhY2VDYW1lcmEoKTogdm9pZDtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGJhY2tlbmQgZml0cyB0aGUgdmlldyAoe0BsaW5rIGZpdFRvVmlld30pLiAqL1xuICBnZXRBdXRvc2NhbGVFdmVudCgpOiBPYnNlcnZhYmxlPHVua25vd24+O1xuXG4gIC8qKiBQbG90IHR5cGVzIHRoaXMgYmFja2VuZCBhZHZlcnRpc2VzIChkcml2ZXMgdGhlIFVJIHNlbGVjdG9yKS4gKi9cbiAgZ2V0UGxvdFR5cGVEZXNjcmlwdG9ycygpOiBQbG90VHlwZURlc2NyaXB0b3JbXTtcblxuICAvKiogSW50ZW5zaXR5IGFsb25nIHRoZSBsaW5lIFJPSXM7IGVtaXRzIHRoZSBmdWxsIHNldCBhcyBhbnkgbGluZSBpcyBhZGRlZCxcbiAgICogIG1vdmVkLCBvciByZW1vdmVkIChQbG90VHlwZS5MSU5FKS4gT25lIGVudHJ5IHBlciBsaW5lIFJPSS4gKi9cbiAgZ2V0SW50ZW5zaXR5UHJvZmlsZSQoKTogT2JzZXJ2YWJsZTxJbnRlbnNpdHlQcm9maWxlW10+O1xuXG4gIC8qKiBSZW5kZXIgdGhlIGZsb2F0aW5nIGludGVuc2l0eS1wcm9maWxlIGluc2V0IGNoYXJ0IGludG8gYGRpdklkYCBmcm9tIHRoZVxuICAgKiAgZ2l2ZW4gcHJvZmlsZXMgKG9uZSB0cmFjZSBwZXIgbGluZSBST0ksIGNvbG91cmVkIHRvIG1hdGNoIGl0cyBsaW5lKS5cbiAgICogIE93bmVkIGJ5IHRoZSBiYWNrZW5kIHNvIGNvbnN1bWVycyBuZXZlciByZWFjaCBhIGNoYXJ0aW5nIGxpYnJhcnkgZGlyZWN0bHkuICovXG4gIHJlbmRlckludGVuc2l0eUluc2V0KGRpdklkOiBzdHJpbmcsIHByb2ZpbGVzOiBJbnRlbnNpdHlQcm9maWxlW10pOiB2b2lkO1xufVxuXG4vKiogUmVnaW9uL3NoYXBlIHN0YXRlOiBDUlVELCBzZWxlY3Rpb24sIGNsYXNzaWZpY2F0aW9uIGNvbG91cnMsIEdlb0pTT04gSS9PLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVnaW9uU3RvcmUge1xuICBzZXRSZWdpb25zKFxuICAgIHJlZ2lvbnM6IFJlZ2lvbltdLFxuICAgIHNob3dSZWdpb25MYWJlbD86IGJvb2xlYW4sXG4gICAgaXNSZWdpb25TYXZlT24/OiBib29sZWFuLFxuICAgIGZpbGxDb2xvcj86IHN0cmluZyxcbiAgICBhcHBlbmQ/OiBib29sZWFuLFxuICApOiB2b2lkO1xuICAvKiogRnJhbWV3b3JrLW5ldXRyYWwgYWNjZXNzb3Ig4oCUIHRoZSBjYW5vbmljYWwgd2F5IHRvIHJlYWQgY3VycmVudCByZWdpb25zLiAqL1xuICBnZXRSZWdpb25zKCk6IFJlZ2lvbltdO1xuICAvKiogVGhlIGN1cnJlbnQgcmVnaW9ucyBhcyBwb2x5Z29ucyAocmVjdGFuZ2xlcyBleHBhbmRlZCksIGZvciBzZXJ2ZXIgcmVxdWVzdHMuICovXG4gIGdldFJlZ2lvblBvbHlnb25zKCk6IFBvbHlnb25bXTtcbiAgLyoqIEVtaXRzIHRoZSByZWdpb24gc2V0IHdoZW5ldmVyIGl0IGNoYW5nZXMuICovXG4gIGdldFJlZ2lvblVwZGF0ZUV2ZW50KCk6IE9ic2VydmFibGU8UmVnaW9uW10+O1xuXG4gIHNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKGluZGljZXM6IG51bWJlcltdKTogdm9pZDtcbiAgZ2V0U2VsZWN0ZWRTaGFwZUluZGljZXMkKCk6IE9ic2VydmFibGU8bnVtYmVyW10+O1xuICAvKiogU2VsZWN0IGEgc3BlY2lmaWMgcmVnaW9uIChieSBpZGVudGl0eSksIGhpZ2hsaWdodGluZyBpdCBvbiB3aGljaGV2ZXJcbiAgICogIGJhY2tlbmQgaXMgcmVuZGVyaW5nIOKAlCBQbG90bHkgc2V0cyBpdHMgYWN0aXZlLXNoYXBlIGhhbmRsZXMsIE9wZW5TZWFkcmFnb25cbiAgICogIGhpZ2hsaWdodHMgdGhlIFNWRyBlbGVtZW50LiBOby1vcCBpZiB0aGUgcmVnaW9uIGlzbid0IGluIHRoZSBzdG9yZS4gKi9cbiAgc2VsZWN0UmVnaW9uKHJlZ2lvbjogUmVnaW9uKTogdm9pZDtcbiAgZGVsZXRlQWN0aXZlU2hhcGUoKTogdm9pZDtcblxuICBnZXRTaG93U2hhcGVMYWJlbCgpOiBib29sZWFuO1xuICBnZXRTaGFwZUNvbG9yKCk6IHN0cmluZztcbiAgZ2V0RmlsbENvbG9yKCk6IHN0cmluZztcbiAgZ2V0Q2xhc3NpZmljYXRpb25Db2xvcnMoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgc2V0Q2xhc3NpZmljYXRpb25Db2xvcihsYWJlbDogc3RyaW5nLCBjb2xvcjogc3RyaW5nKTogdm9pZDtcblxuICAvKiogVW5kbyB0aGUgbW9zdCByZWNlbnQgcmVnaW9uIGFjdGlvbiAoaml0LXVpIzg1KS4gUmVzdG9yZXMgdGhlIHJlZ2lvbiBzZXQgdG9cbiAgICogIHRoZSBzdGF0ZSBiZWZvcmUgdGhhdCBhY3Rpb247IHVwIHRvIGEgc21hbGwgZml4ZWQgZGVwdGggKDEwKSBpcyByZXRhaW5lZCxcbiAgICogIHNvIGl0IGNhbiBiZSBpbnZva2VkIHVwIHRvIDEwIHRpbWVzIGluIGEgcm93LiBOby1vcCB3aGVuIG5vdGhpbmcgaXMgbGVmdCB0b1xuICAgKiAgdW5kby4gKi9cbiAgdW5kbygpOiB2b2lkO1xuICAvKiogUmUtYXBwbHkgdGhlIG1vc3QgcmVjZW50bHkgdW5kb25lIHJlZ2lvbiBhY3Rpb24uIE5vLW9wIHdoZW4gdGhlcmUnc1xuICAgKiAgbm90aGluZyB0byByZWRvIChhbnkgZnJlc2ggcmVnaW9uIGFjdGlvbiBjbGVhcnMgdGhlIHJlZG8gZnV0dXJlKS4gKi9cbiAgcmVkbygpOiB2b2lkO1xuICAvKiogU3luY2hyb25vdXMgcmVhZCBvZiB7QGxpbmsgZ2V0Q2FuVW5kbyR9LiAqL1xuICBjYW5VbmRvKCk6IGJvb2xlYW47XG4gIC8qKiBTeW5jaHJvbm91cyByZWFkIG9mIHtAbGluayBnZXRDYW5SZWRvJH0uICovXG4gIGNhblJlZG8oKTogYm9vbGVhbjtcbiAgLyoqIEVtaXRzIHdoZXRoZXIgYW4gdW5kbyBzdGVwIGlzIGN1cnJlbnRseSBhdmFpbGFibGUg4oCUIGRyaXZlcyB0aGUgdG9vbGJhclxuICAgKiAgVW5kbyBidXR0b24ncyBlbmFibGVkIChncmV5ZWQtb3V0KSBzdGF0ZS4gKi9cbiAgZ2V0Q2FuVW5kbyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIEVtaXRzIHdoZXRoZXIgYSByZWRvIHN0ZXAgaXMgY3VycmVudGx5IGF2YWlsYWJsZSDigJQgZHJpdmVzIHRoZSB0b29sYmFyXG4gICAqICBSZWRvIGJ1dHRvbidzIGVuYWJsZWQgKGdyZXllZC1vdXQpIHN0YXRlLiAqL1xuICBnZXRDYW5SZWRvJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogQ2xlYXIgdGhlIHVuZG8vcmVkbyBoaXN0b3J5IChlLmcuIG9uIGltYWdlIGxvYWQvc3dpdGNoKS4gKi9cbiAgcmVzZXRVbmRvSGlzdG9yeSgpOiB2b2lkO1xuXG4gIGltcG9ydFJlZ2lvbnMoZ2VvSnNvblN0cjogc3RyaW5nKTogUmVnaW9uW107XG4gIGV4cG9ydFJlZ2lvbnMocmVnaW9uczogUmVnaW9uW10pOiB2b2lkO1xuICBnZXRHZW9Kc29uU3RyaW5nKHJlZ2lvbnM6IFJlZ2lvbltdKTogc3RyaW5nO1xuXG4gIC8qKiBCZWdpbiBhIHBlci1zbGljZSB6LXN0YWNrIHJlZ2lvbiBzZXNzaW9uIChqaXQtdWkjOTMpLiBgc2xpY2VzYCBtYXBzIGVhY2hcbiAgICogIHplcm8tYmFzZWQgc2xpY2UgaW5kZXggdG8gdGhhdCBzbGljZSdzIHJlZ2lvbnM7IHRoZSBzdG9yZSBzaG93cyBgaW5pdGlhbFpgXG4gICAqICBsaXZlIHdoaWxlIGhvbGRpbmcgdGhlIHJlc3QsIHNvIHNjcnViYmluZyBzd2FwcyByZWdpb24gc2V0cyBhbmQgZWRpdHMgb24gYVxuICAgKiAgc2xpY2UgcGVyc2lzdC4gYHNhdmVMYXlvdXRgIHJlY29yZHMgaG93IHRoZSBzdGFjayBwZXJzaXN0cyDigJQgYGNvbWJpbmVkYFxuICAgKiAgKG9uZSB6LWluZGV4ZWQgZ2VvanNvbiwgc2luZ2xlLWZpbGUgei1zdGFjaykgb3IgYHBlci1zbGljZS1maWxlYCAoZm9sZGVyXG4gICAqICBzdGFjaykuIFNlZSB7QGxpbmsgc2V0RGlzcGxheVNsaWNlfSwge0BsaW5rIGdldFNsaWNlUmVnaW9uc30uICovXG4gIGVudGVyU3RhY2tNb2RlKFxuICAgIHNsaWNlczogTWFwPG51bWJlciwgUmVnaW9uW10+LFxuICAgIGluaXRpYWxaPzogbnVtYmVyLFxuICAgIHNhdmVMYXlvdXQ/OiAnY29tYmluZWQnIHwgJ3Blci1zbGljZS1maWxlJyxcbiAgKTogdm9pZDtcbiAgLyoqIEVuZCB0aGUgcGVyLXNsaWNlIHNlc3Npb24gKHNpbmdsZS1wbGFuZSBpbWFnZSwgb3IgdGhlIHN0YWNrIHdhcyBjbG9zZWQpLiAqL1xuICBleGl0U3RhY2tNb2RlKCk6IHZvaWQ7XG4gIC8qKiBUcnVlIHdoaWxlIGEgcGVyLXNsaWNlIHotc3RhY2sgc2Vzc2lvbiBpcyBhY3RpdmUuICovXG4gIGlzU3RhY2tNb2RlKCk6IGJvb2xlYW47XG4gIC8qKiBIb3cgdGhlIGN1cnJlbnQgc3RhY2sgcGVyc2lzdHMgdG8gZGlzayAoaml0LXVpIzkzKS4gKi9cbiAgZ2V0U3RhY2tTYXZlTGF5b3V0KCk6ICdjb21iaW5lZCcgfCAncGVyLXNsaWNlLWZpbGUnO1xuICAvKiogU3dhcCB0aGUgbGl2ZSByZWdpb24gc2V0IHRvIHNsaWNlIGB6YCAoc3RhY2sgbW9kZSBvbmx5KSwgY2FwdHVyaW5nIHRoZVxuICAgKiAgY3VycmVudCBzbGljZSdzIGVkaXRzIGZpcnN0LiBDYWxsZWQgb24gZXZlcnkgY29tbWl0dGVkIHNsaWNlIHNjcnViLiAqL1xuICBzZXREaXNwbGF5U2xpY2UoejogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEV2ZXJ5IHNsaWNlJ3MgcmVnaW9ucyBmb3Igc2F2ZS9leHBvcnQsIGVhY2ggdGFnZ2VkIHdpdGggaXRzIHplcm8tYmFzZWRcbiAgICogIHtAbGluayBSZWdpb24uen07IHRoZSBmbGF0IHNldCBvdXRzaWRlIHN0YWNrIG1vZGUuICovXG4gIGdldFNsaWNlUmVnaW9ucygpOiBSZWdpb25bXTtcbiAgLyoqIFNsaWNlcyB0byB3cml0ZSBvbiBhIHBlci1zbGljZS1maWxlIHNhdmUgKGZvbGRlciBzdGFjaywgaml0LXVpIzkzKTogZWFjaFxuICAgKiAgc2xpY2Ugd2l0aCByZWdpb25zLCBwbHVzIHNsaWNlcyBjbGVhcmVkIHNpbmNlIGxvYWQgKGVtcHR5LCB0byBvdmVyd3JpdGUpLlxuICAgKiAgS2V5ZWQgYnkgemVyby1iYXNlZCBzbGljZSBpbmRleDsgcmVnaW9ucyB0YWdnZWQgd2l0aCB0aGVpciB6LiAqL1xuICBnZXRTdGFja1NhdmVTbGljZXMoKTogTWFwPG51bWJlciwgUmVnaW9uW10+O1xufVxuXG4vKiogT24tY2FudmFzIHRvb2wgbW9kZXMgKHdhbmQsIGJydXNoLCB2ZXJ0ZXggZXJhc2VyLCB6b29tLXRvLWJveCwgU0FNIHBvaW50KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRvb2xDb250cm9sbGVyIHtcbiAgLyoqXG4gICAqIEFybSBvbmUgb24tY2FudmFzIHRvb2wgKGBDYW52YXNUb29sSWRgKSB3aXRoIGl0cyBvcHRpb25zIOKAlCB0aGUgd2FuZCdzXG4gICAqIHtAbGluayBJV2FuZE9wdGlvbnN9LCB0aGUgYnJ1c2gncyB7QGxpbmsgSUJydXNoT3B0aW9uc30gKGBzaXplYCBpcyB0aGVcbiAgICogbWF0cml4LXBpeGVsIGRpYW1ldGVyIG9mIHRoZSBwYWludGVkIGRpc2MpLCB0aGUgZXJhc2VyJ3MgYHsgcmFkaXVzIH1gIOKAlFxuICAgKiBhbmQgZGlzYXJtIHRoZSBvbmUgdGhhdCB3YXMgYXJtZWQuIGBudWxsYCwgb3IgYW55IGlkIHRoYXQgaXMgbm90IGEgY2FudmFzXG4gICAqIHRvb2wgKGEgcmVnaW9uIGRyYXcgbW9kZSBzdWNoIGFzIGAnZHJhd3JlY3QnYCwgYCdwYW4nYCksIGRpc2FybXMgb25seS5cbiAgICogQXJtaW5nIHRoZSBhcm1lZCB0b29sIGFnYWluIGFwcGxpZXMgdGhlIG9wdGlvbnMgYW5kIGtlZXBzIGl0cyB3b3JrIGluXG4gICAqIHByb2dyZXNzLlxuICAgKi9cbiAgc2V0QWN0aXZlVG9vbChpZDogc3RyaW5nIHwgbnVsbCwgb3B0aW9ucz86IENhbnZhc1Rvb2xPcHRpb25zKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgc2V0QWN0aXZlVG9vbCgnd2FuZCcsIG9wdGlvbnMpYCAvIGBzZXRBY3RpdmVUb29sKG51bGwpYC4gKi9cbiAgc2V0V2FuZE1vZGUoYWN0aXZlOiBib29sZWFuLCBvcHRpb25zPzogSVdhbmRPcHRpb25zKTogdm9pZDtcbiAgc2V0V2FuZE9wdGlvbnMob3B0aW9uczogSVdhbmRPcHRpb25zKTogdm9pZDtcbiAgY2xlYXJBY3RpdmVXYW5kUmVnaW9uKCk6IHZvaWQ7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYHNldEFjdGl2ZVRvb2woJ2JydXNoJywgb3B0aW9ucylgIC8gYHNldEFjdGl2ZVRvb2wobnVsbClgLiAqL1xuICBzZXRCcnVzaE1vZGUoYWN0aXZlOiBib29sZWFuLCBvcHRpb25zPzogSUJydXNoT3B0aW9ucyk6IHZvaWQ7XG4gIHNldEJydXNoT3B0aW9ucyhvcHRpb25zOiBJQnJ1c2hPcHRpb25zKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgc2V0QWN0aXZlVG9vbCgnZXJhc2VWZXJ0ZXgnLCB7IHJhZGl1cyB9KWAgLyBgc2V0QWN0aXZlVG9vbChudWxsKWAuICovXG4gIHNldFZlcnRleEVyYXNlck1vZGUoYWN0aXZlOiBib29sZWFuKTogdm9pZDtcbiAgc2V0VmVydGV4RXJhc2VyUmFkaXVzKHJhZGl1czogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgc2V0QWN0aXZlVG9vbCgnem9vbVRvQm94JylgIC8gYHNldEFjdGl2ZVRvb2wobnVsbClgLiAqL1xuICBzZXRab29tVG9Cb3hNb2RlKGFjdGl2ZTogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBCb3gtcHJvbXB0ZWQgU0FNIHNlZ21lbnRhdGlvbjogc2VnbWVudCBldmVyeSByZWN0YW5nbGUgcmVnaW9uIGludG8gbWFza3MuXG4gICAqICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWFzayByZWdpb25zIGFkZGVkLiAoaml0LXVpIzkwKSAqL1xuICBzZWdtZW50UmVjdGFuZ2xlcygpOiBQcm9taXNlPG51bWJlcj47XG4gIC8qKiBDZWxscG9zZS1vbi1jcm9wOiBjbGllbnQgc2xpZGUtY3JvcCBlYWNoIHJlY3RhbmdsZSBhbmQgc2VnbWVudCBjZWxscyBpbiBpdFxuICAgKiAgKGNlbGxwb3NlLVNBTSB2aWEgdGhlIGhvc3QncyBDRUxMX1NFR01FTlRFUikuIFJldHVybnMgcmVnaW9ucyBhZGRlZC4gKi9cbiAgc2VnbWVudFJlY3RhbmdsZXNDZWxscG9zZSgpOiBQcm9taXNlPG51bWJlcj47XG4gIC8qKiBDaG9vc2UgdGhlIHJlZ2lzdGVyZWQgU0FNIG1vZGVsIHRoZSBzZWdtZW50IHRvb2xzIHVzZSAoaml0LXVpIzkwIFAxKS4gKi9cbiAgc2V0U2FtTW9kZWwoaWQ6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBUb2dnbGUgdGhlIGludGVyYWN0aXZlIFNBTSBwb2ludC1wcm9tcHQgdG9vbCAoY2xpY2sgPSArcG9pbnQsIFNoaWZ0ID0gLSkuXG4gICAqICBAZGVwcmVjYXRlZCBVc2UgYHNldEFjdGl2ZVRvb2woJ3NhbVBvaW50JylgIC8gYHNldEFjdGl2ZVRvb2wobnVsbClgLiAqL1xuICBzZXRTYW1Qb2ludE1vZGUoYWN0aXZlOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIEZpbmFsaXNlIC8gZGlzY2FyZCB0aGUgaW4tcHJvZ3Jlc3MgU0FNIHBvaW50IG9iamVjdC4gKi9cbiAgY29tbWl0U2FtUG9pbnRzKCk6IHZvaWQ7XG4gIGNsZWFyU2FtUG9pbnRzKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQ29udHJvbHMgc3BlY2lmaWMgdG8gdGhlIElTT1NVUkZBQ0UgcGxvdCB0eXBlLiBPcHRpb25hbCBhbmQgY2FwYWJpbGl0eS1nYXRlZFxuICogKGBWaWV3ZXJGZWF0dXJlLklzb3N1cmZhY2VgKTogb25seSBhIGJhY2tlbmQgdGhhdCByZW5kZXJzIGlzb3N1cmZhY2VzIGV4cG9zZXNcbiAqIGl0LCB2aWEgYElWaXN1YWxpemVyLmdldElzb3N1cmZhY2VDb250cm9scygpYC4gS2VwdCBvZmYgdGhlIGFsd2F5cy1vblxuICogY29udHJhY3Qgc28gY29uc3VtZXJzIG5ldmVyIGNhbGwgYSBjb250cm9sIHRoYXQncyBtZWFuaW5nbGVzcyBmb3IgdGhlIGN1cnJlbnRcbiAqIHBsb3QgdHlwZSAvIGJhY2tlbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlzb3N1cmZhY2VDb250cm9scyB7XG4gIC8qKiBMaXZlLXVwZGF0ZSB0aGUgaXNvc3VyZmFjZSBpbnRlbnNpdHkgYmFuZCBbaXNvbWluLCBpc29tYXhdIG92ZXIgMOKAkzI1NS4gKi9cbiAgc2V0SXNvUmFuZ2UoaXNvTWluOiBudW1iZXIsIGlzb01heDogbnVtYmVyKTogdm9pZDtcbn1cblxuLyoqXG4gKiBDb250cm9scyBzcGVjaWZpYyB0byB0aGUgM0QgcGxvdCB0eXBlcyAoU1VSRkFDRSAvIFNDQVRURVIzRCAvIElTT1NVUkZBQ0VcbiAqIHNjZW5lcykuIENhcGFiaWxpdHktZ2F0ZWQgbGlrZSB7QGxpbmsgSUlzb3N1cmZhY2VDb250cm9sc306IG9ubHkgYSBiYWNrZW5kXG4gKiB0aGF0IHJlbmRlcnMgM0Qgc2NlbmVzIGV4cG9zZXMgaXQsIHZpYSBgSVZpc3VhbGl6ZXIuZ2V0U3VyZmFjZTNkQ29udHJvbHMoKWAg4oCUXG4gKiB0aGUgZGVwcmVjYXRlZCB0b3AtbGV2ZWwgYHNldFN1cmZhY2VEcmFnTW9kZWAvYHJlc2V0U3VyZmFjZUNhbWVyYWAgc2lsZW50bHlcbiAqIG5vLW9wIG9uIDJELW9ubHkgYmFja2VuZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cmZhY2UzZENvbnRyb2xzIHtcbiAgLyoqIFN3aXRjaCB0aGUgM0Qgc2NlbmUgaW50ZXJhY3Rpb24gbW9kZSAob3JiaXQgLyB0dXJudGFibGUgLyBwYW4gLyB6b29tKS4gKi9cbiAgc2V0U3VyZmFjZURyYWdNb2RlKG1vZGU6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBSZXNldCB0aGUgM0Qgc2NlbmUgY2FtZXJhIHRvIGl0cyBkZWZhdWx0IGV5ZSBwb3NpdGlvbi4gKi9cbiAgcmVzZXRTdXJmYWNlQ2FtZXJhKCk6IHZvaWQ7XG4gIC8qKiBUb2dnbGUgdGhlIDNEIGNvb3JkaW5hdGUtYXhlcyAvIHNjYWxlIGdpem1vIG9uL29mZi4gT3B0aW9uYWwg4oCUIG9ubHkgdGhlIG5hcGFyaS1qcyBXZWJHUFVcbiAgICogIHZvbHVtZS9pc29zdXJmYWNlIGJhY2tlbmQgcmVuZGVycyBvbmUgKGppdC11aSMxMDIpLiAqL1xuICBzZXRBeGVzVmlzaWJsZT8odmlzaWJsZTogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBheGVzIGdpem1vIGlzIGN1cnJlbnRseSBzaG93biAoZm9yIGluaXRpYWxpemluZyB0aGUgdG9nZ2xlIFVJKS4gT3B0aW9uYWwuICovXG4gIGF4ZXNWaXNpYmxlPygpOiBib29sZWFuO1xuICAvKiogUmVuZGVyIHRoZSBzdXJmYWNlIGFzIGEgd2lyZWZyYW1lIChlZGdlcykgaW5zdGVhZCBvZiBhIGZpbGxlZCBzdXJmYWNlLiBPcHRpb25hbCDigJQgb25seSB0aGVcbiAgICogIG5hcGFyaS1qcyBXZWJHUFUgc3VyZmFjZSBiYWNrZW5kIHN1cHBvcnRzIGl0IChqaXQtdWkjMTAyKS4gKi9cbiAgc2V0V2lyZWZyYW1lPyhvbjogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBzdXJmYWNlIGlzIGN1cnJlbnRseSBkcmF3biBhcyBhIHdpcmVmcmFtZSAoZm9yIGluaXRpYWxpemluZyB0aGUgdG9nZ2xlIFVJKS4gKi9cbiAgd2lyZWZyYW1lPygpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnRyb2xzIHNwZWNpZmljIHRvIHRoZSBMSU5FIChpbnRlbnNpdHktcHJvZmlsZSkgcGxvdCB0eXBlLiBDYXBhYmlsaXR5LWdhdGVkXG4gKiBsaWtlIHtAbGluayBJSXNvc3VyZmFjZUNvbnRyb2xzfTogb25seSBhIGJhY2tlbmQgdGhhdCByZW5kZXJzIHRoZSBsaW5lLVJPSSAvXG4gKiBpbnNldCBleHBvc2VzIGl0LCB2aWEgYElWaXN1YWxpemVyLmdldEludGVuc2l0eUNvbnRyb2xzKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlbnNpdHlDb250cm9scyB7XG4gIC8qKiBBZGQgYW5vdGhlciBsaW5lIFJPSSAobmV4dCBicmlnaHQgcGFsZXR0ZSBjb2xvdXIpIGFuZCBpdHMgaW5zZXQgdHJhY2UuXG4gICAqICBSZXR1cm5zIHRoZSBjcmVhdGVkIHJlZ2lvbiBzbyB0aGUgY2FsbGVyIGNhbiBzZWxlY3QgaXQgb24gdGhlIGFjdGl2ZVxuICAgKiAgYmFja2VuZCwgb3IgbnVsbCBpZiBubyBpbWFnZSBleHRlbnQgaXMga25vd24geWV0LiAqL1xuICBhZGRQcm9maWxlTGluZSgpOiBSZWdpb24gfCBudWxsO1xufVxuXG4vKiogQSBjYXRlZ29yaWNhbCBjb2x1bW4gcmVzb2x2ZWQgZm9yIGNoYXJ0aW5nOiBsYWJlbHMsIGNvZGVzIGFuZCBtYXAgY29sb3Vycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbENhdGVnb3JpY2FsVmlldyB7XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcmllczogc3RyaW5nW107XG4gIC8qKiBgI3JyZ2diYmAgcGVyIGNhdGVnb3J5LCBpbmRleC1hbGlnbmVkIHdpdGgge0BsaW5rIGNhdGVnb3JpZXN9LiAqL1xuICBjb2xvcnM6IHN0cmluZ1tdO1xuICAvKiogUGVyLW9ic2VydmF0aW9uIGNhdGVnb3J5IGluZGV4LCBvciBgTk9fQ0FURUdPUllgLiAqL1xuICBjb2RlczogVWludDE2QXJyYXk7XG59XG5cbi8qKlxuICogSG93IFwiU2VsZWN0IGZyb20gUk9Jc1wiIHNlbGVjdHM6IGluc2lkZSB0aGUgdm9sdW1lcyBvZiB0aGUgcmVnaW9uIGNsYXNzZXMgcGlja2VkXG4gKiBpbiB0aGUgUmVnaW9uIEVkaXRvciAoU3BhdGlhbCBvbWljcyAzRCwgdGhlIHJlZ2lvbnMgb24gdGhlIGRhdGFzZXQncyByZWZlcmVuY2VcbiAqIHZvbHVtZSBzaG93biksIG9yIGJ5IHRoZSBkcmF3biByZWdpb25zLlxuICovXG5leHBvcnQgdHlwZSBSb2lTZWxlY3Rpb25Nb2RlID0gJ2NsYXNzLXZvbHVtZXMnIHwgJ3JlZ2lvbnMnO1xuXG4vKipcbiAqIENvbnRyb2xzIGZvciB0aGUgU1BBVElBTF9PTUlDUyBwbG90IHR5cGU6IHdoYXQgdGhlIG9ic2VydmF0aW9uIG1hcmtlcnMgYXJlXG4gKiBjb2xvdXJlZCBieSwgYW5kIGhvdyB0aGV5IGFyZSBkcmF3bi4gQ2FwYWJpbGl0eS1nYXRlZCBsaWtlXG4gKiB7QGxpbmsgSUlzb3N1cmZhY2VDb250cm9sc30g4oCUIGBnZXRTcGF0aWFsQ29udHJvbHMoKWAgcmV0dXJucyBudWxsIHVubGVzcyBhXG4gKiBob3N0IGhhcyBib3VuZCBgU1BBVElBTF9EQVRBX1BPUlRgLlxuICpcbiAqIFRoZSB2aWV3IHN0YXRlIGlzIGJhY2tlbmQtbmV1dHJhbCAoaXQgbGl2ZXMgaW4gdGhlIHNoYXJlZCBzdG9yZSwgbGlrZSB0aGVcbiAqIGNvbG9ybWFwKSwgc28gdGhlc2UgY29udHJvbHMgd29yayB3aGljaGV2ZXIgYmFja2VuZCBpcyBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNwYXRpYWxDb250cm9scyB7XG4gIC8qKiBUaGUgZGF0YXNldCBiZWluZyB2aXN1YWxpemVkLCBvciBudWxsLiBEcml2ZXMgdGhlIGNvbHVtbi9nZW5lIHBpY2tlcnMgYW5kXG4gICAqICB0aGUgbGVnZW5kLiAqL1xuICBnZXREYXRhc2V0JCgpOiBPYnNlcnZhYmxlPFNwYXRpYWxEYXRhc2V0IHwgbnVsbD47XG4gIC8qKiBDdXJyZW50IGRpc3BsYXkgc3RhdGUgKGNvbG91ciBzb3VyY2UsIHBvaW50IHNjYWxlLCBvcGFjaXR5LCBzY2FsaW5nKS4gKi9cbiAgZ2V0Vmlld1N0YXRlJCgpOiBPYnNlcnZhYmxlPFNwYXRpYWxWaWV3U3RhdGU+O1xuICAvKiogU3luY2hyb25vdXMgcmVhZCwgZm9yIHNlZWRpbmcgYSBjb250cm9sJ3MgaW5pdGlhbCB2YWx1ZS4gKi9cbiAgdmlld1N0YXRlKCk6IFNwYXRpYWxWaWV3U3RhdGU7XG4gIC8qKiBQYXRjaCB0aGUgZGlzcGxheSBzdGF0ZTsgdGhlIG1hcmtlcnMgcmVidWlsZCB3aXRob3V0IHJlbW91bnRpbmcgdGhlIHNjZW5lLiAqL1xuICBzZXRWaWV3U3RhdGUocGFydGlhbDogUGFydGlhbDxTcGF0aWFsVmlld1N0YXRlPik6IHZvaWQ7XG4gIC8qKiBDb2xvdXIgYnkgYW4gYW5ub3RhdGlvbiBjb2x1bW4uIFJlamVjdHMgZm9yIGFuIHVua25vd24gY29sdW1uLiAqL1xuICBjb2xvckJ5Q29sdW1uKG5hbWU6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBDb2xvdXIgYnkgYSBnZW5lOyBpdHMgdmVjdG9yIGlzIGZldGNoZWQgb24gZGVtYW5kLiAqL1xuICBjb2xvckJ5RmVhdHVyZShuYW1lOiBzdHJpbmcpOiB2b2lkO1xuICAvKiogQ2xlYXIgdGhlIGNvbG91ciBzb3VyY2Ug4oCUIGV2ZXJ5IG9ic2VydmF0aW9uIHJlbmRlcnMgaW4gb25lIG5ldXRyYWwgY29sb3VyLiAqL1xuICBjbGVhckNvbG9yQnkoKTogdm9pZDtcbiAgLyoqIFR5cGVhaGVhZCBvdmVyIGZlYXR1cmUgbmFtZXMsIGZvciBkYXRhc2V0cyB0b28gd2lkZSB0byBpbmxpbmUgdGhlIGxpc3QuICovXG4gIHNlYXJjaEZlYXR1cmVzKHF1ZXJ5OiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmdbXT47XG4gIC8qKiBQZXItY2F0ZWdvcnkgZGlzcGxheSBjb2xvdXJzIGZvciBhIGNhdGVnb3JpY2FsIGNvbHVtbiwgaW5kZXgtYWxpZ25lZCB3aXRoXG4gICAqICBpdHMgYGNhdGVnb3JpZXNgIOKAlCB0aGUgbGVnZW5kJ3Mgc3dhdGNoZXMsIHJlc29sdmVkIHRoZSBzYW1lIHdheSB0aGVcbiAgICogIHJlbmRlcmVyIHJlc29sdmVzIHRoZW0gc28gdGhlIHR3byBjYW5ub3QgZGlzYWdyZWUuICovXG4gIGNhdGVnb3J5Q29sb3JzKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+O1xuXG4gIC8vIOKUgOKUgCB2YWx1ZXMsIGZvciB0aGUgMS1EIGNoYXJ0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgYmVoaW5kIGEgY29sb3VyIHNvdXJjZSwgaW5kZXgtYWxpZ25lZCB3aXRoIHRoZSBvYnNlcnZhdGlvbnMuXG4gICAqIFJlamVjdHMgZm9yIGEgY2F0ZWdvcmljYWwgY29sdW1uIOKAlCB0aGVyZSBpcyBub3RoaW5nIGNvbnRpbnVvdXMgdG8gY2hhcnQuXG4gICAqL1xuICBjb250aW51b3VzVmFsdWVzKHNvdXJjZTogU3BhdGlhbENvbG9yQnkpOiBQcm9taXNlPEZsb2F0MzJBcnJheT47XG4gIC8qKlxuICAgKiBBIGNhdGVnb3JpY2FsIGNvbHVtbidzIGNhdGVnb3JpZXMsIHBlci1vYnNlcnZhdGlvbiBjb2RlcyBhbmQgZGlzcGxheVxuICAgKiBjb2xvdXJzIOKAlCBldmVyeXRoaW5nIGEgZ3JvdXBlZCB2aW9saW4vYm94IG5lZWRzLCB3aXRoIHRoZSBjb2xvdXJzIHJlc29sdmVkXG4gICAqIHRoZSBzYW1lIHdheSB0aGUgbWFwIHJlc29sdmVzIHRoZW0uXG4gICAqL1xuICBjYXRlZ29yaWNhbFZpZXcoY29sdW1uOiBzdHJpbmcpOiBQcm9taXNlPFNwYXRpYWxDYXRlZ29yaWNhbFZpZXc+O1xuXG4gIC8qKlxuICAgKiBPbmUgZW1iZWRkaW5nJ3MgY29vcmRpbmF0ZXMg4oCUIGEgVU1BUCwgdC1TTkUgb3IgUENBIHBsYW5lIG92ZXIgdGhlIHNhbWUgb2JzZXJ2YXRpb25zLlxuICAgKlxuICAgKiBPcHRpb25hbCwgYW5kIGFic2VudCB3aGVuIHRoZSBkYXRhIHNvdXJjZSBzZXJ2ZXMgbm9uZTogYFNwYXRpYWxEYXRhUG9ydC5nZXRFbWJlZGRpbmdgXG4gICAqIGlzIGl0c2VsZiBvcHRpb25hbCwgc28gYSBwYW5lbCBtdXN0IGJlIGFibGUgdG8gYXNrIHdoZXRoZXIgdGhpcyBleGlzdHMgcmF0aGVyIHRoYW5cbiAgICogY2FsbGluZyBpdCBhbmQgY2F0Y2hpbmcuXG4gICAqL1xuICBnZXRFbWJlZGRpbmc/KG5hbWU6IHN0cmluZyk6IFByb21pc2U8U3BhdGlhbEVtYmVkZGluZz47XG4gIC8qKiBOYW1lcyBvZiB0aGUgY2F0ZWdvcmljYWwgY29sdW1ucyBhdmFpbGFibGUgdG8gZ3JvdXAgYnkuICovXG4gIGNhdGVnb3JpY2FsQ29sdW1ucygpOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEltcG9ydCBhIGNlbGwgZ3JvdXBpbmcgKENTVi9UU1Ygb2YgYGNlbGxfaWRgLCBgZ3JvdXBgKSBhcyBhIG5ldyBjYXRlZ29yaWNhbCBjb2x1bW4uXG4gICAqIE9wdGlvbmFsOiBvbmx5IGRhdGEgc291cmNlcyB0aGF0IGNhbiBqb2luIGNlbGwgaWRzIGltcGxlbWVudCBpdC5cbiAgICovXG4gIGltcG9ydEdyb3Vwcz8obGFiZWw6IHN0cmluZywgdGFibGU6IHN0cmluZyk6IFByb21pc2U8eyBjb2x1bW46IENhdGVnb3JpY2FsQ29sdW1uTWV0YTsgbWF0Y2hlZDogbnVtYmVyIH0+O1xuICAvKiogVHJhbnNjcmlwdCB0b3RhbHMgcGVyIGdlbmUg4oCUIGZvciB0aGUgcG9pbnRzIGVzdGltYXRlLiBPcHRpb25hbC4gKi9cbiAgdHJhbnNjcmlwdENvdW50cz8oZ2VuZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdENvdW50cz47XG4gIC8qKiBNYXJrZXIgZ2VuZXMgb2YgZWFjaCBncm91cCBvZiBhIGNhdGVnb3JpY2FsIGNvbHVtbi4gT3B0aW9uYWwgKHNlZSB0aGUgcG9ydCkuICovXG4gIG1hcmtlckdlbmVzPyhjb2x1bW46IHN0cmluZywgcGVyR3JvdXA/OiBudW1iZXIpOiBQcm9taXNlPFNwYXRpYWxNYXJrZXJHZW5lcz47XG4gIC8qKiBUcmFuc2NyaXB0cyBvZiBlYWNoIHNlbGVjdGVkIGdlbmUgaW4gdGhlIGN1cnJlbnQgdmlldywgb3IgbnVsbCB3aGVuIG5vdCBrbm93blxuICAgKiAgKGFsbCBnZW5lcyBhdCBvbmNlLCB0cmFuc2NyaXB0cyBvZmYsIG9yIGEgc2VsZWN0aW9uIHpvb21lZCBvdXQgb24gYSBkYXRhc2V0IHdpdGhvdXQgdGhlXG4gICAqICBweXJhbWlkJ3MgcGVyLWdlbmUgbGV2ZWxzLCB3aGVyZSBjbHVzdGVycyBhcmUgZHJhd24gZnJvbSBzdW1tZWQgZGVuc2l0eSBncmlkcykuICovXG4gIGdldEdlbmVDb3VudHNJblZpZXckPygpOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfCBudWxsPjtcbiAgLyoqIEVzdGltYXRlZCB0cmFuc2NyaXB0cyBpbiB2aWV3IGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGFnYWluc3QgdGhlIG1hcmtlciBidWRnZXQuICovXG4gIGdldFRyYW5zY3JpcHRFc3RpbWF0ZSQ/KCk6IE9ic2VydmFibGU8eyBwb2ludHM6IG51bWJlcjsgbWF4OiBudW1iZXIgfSB8IG51bGw+O1xuICAvKiogVGhlIGRlbnNpdHkgbWFwJ3MgY29sb3VyIHdpbmRvdyBpbiB1c2UgKGF1dG8tZGVyaXZlZCBvciBzZXQpIGFuZCBpdHMgZGVuc2VzdCBiaW4uICovXG4gIGdldERlbnNpdHlTdGF0cyQ/KCk6IE9ic2VydmFibGU8eyBsbzogbnVtYmVyOyBoaTogbnVtYmVyOyBtYXg6IG51bWJlciB9IHwgbnVsbD47XG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBvYnNlcnZhdGlvbiBnZW5lIGZpbHRlciBjb3VsZCBub3QgYmUgYXBwbGllZCAoYW4gZXhwcmVzc2lvbiByZWFkIGZhaWxlZCk6XG4gICAqICB0aGUgb2JzZXJ2YXRpb25zIHRoZW4gc3RpbGwgc2hvdyB0aGUgbGFzdCBmaWx0ZXIgdGhhdCBjb3VsZCBiZS4gKi9cbiAgZ2V0R2VuZUZpbHRlckZhaWxlZCQ/KCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBUaGUgM0QgdmlldydzIGluZGl2aWR1YWwgY2VsbHMgYXMgdGhleSBzdGFuZCAobnVsbDogbm9uZSBhcmUgZHJhd24pLiBPcHRpb25hbC4gKi9cbiAgZ2V0Q2VsbHMzZFN0YXR1cyQ/KCk6IE9ic2VydmFibGU8Q2VsbHMzZFN0YXR1cyB8IG51bGw+O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0YXNldCdzIHJlZ2lvbiBzZXQgKGEgM0Qgc2VnbWVudGF0aW9uJ3MpIGlzIGF0dGFjaGVkIGFuZCBwbGFjZWQgYW1vbmcgdGhlXG4gICAqIG9ic2VydmF0aW9ucywgc28gdGhlIDNEIHZpZXcgY2FuIHNob3cgdGhlIGNlbGxzOiBub3QgdW50aWwgaXRzIHNvdXJjZSBvcGVuZWQgd2l0aCBpdHMgcGxhbmVzLFxuICAgKiBhbmQgbmV2ZXIgd2hlbiBpdCBjb3VsZCBub3QgYmUgb3Igd2FzIG5vdCBhdHRhY2hlZC4gT3B0aW9uYWw6IHdpdGhvdXQgaXQsIHRoZSBkYXRhc2V0IG5hbWluZyBhXG4gICAqIHNldCBpcyB0YWtlbiBmb3IgaXQuXG4gICAqL1xuICBnZXRDZWxsczNkQXZhaWxhYmxlJD8oKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2NyaXB0cyBvZiB0aGUgc2VsZWN0aW9uLCBieSBnZW5lLCBrZXB0IHVwIHRvIGRhdGUgYXMgdGhlIHNlbGVjdGlvbiwgdGhlIHBpY2tlZFxuICAgKiBjbGFzc2VzLCB0aGUgcmVnaW9ucyBvciB0aGUgcGxhbmUgc2hvd24gY2hhbmdlIChzZWUge0BsaW5rIFRyYW5zY3JpcHRzSW5TZWxlY3Rpb259KS4gT3B0aW9uYWw6XG4gICAqIG9ubHkgYSBkYXRhc2V0IHdpdGggdGlsZWQgdHJhbnNjcmlwdHMgaGFzIGl0LlxuICAgKi9cbiAgZ2V0VHJhbnNjcmlwdHNJblNlbGVjdGlvbiQ/KCk6IE9ic2VydmFibGU8VHJhbnNjcmlwdHNJblNlbGVjdGlvbj47XG4gIC8qKlxuICAgKiBUaGUgb2JzZXJ2YXRpb25zIG9mIHRoZSBzYW1lIHNlbGVjdGlvbiwgYnkgZ3JvdXAsIGtlcHQgdXAgdG8gZGF0ZSBhcyBpdCBjaGFuZ2VzIChzZWVcbiAgICoge0BsaW5rIE9ic2VydmF0aW9uc0luU2VsZWN0aW9ufSkuIE9wdGlvbmFsLlxuICAgKi9cbiAgZ2V0T2JzZXJ2YXRpb25zSW5TZWxlY3Rpb24kPygpOiBPYnNlcnZhYmxlPE9ic2VydmF0aW9uc0luU2VsZWN0aW9uPjtcbiAgLyoqXG4gICAqIFRoZSB6IHBvc2l0aW9ucyBvZiB0aGUgc2VjdGlvbnMgdGhlIGRhdGFzZXQgd2FzIGltYWdlZCBhdCwgYXNjZW5kaW5nIOKAlCBvclxuICAgKiBudWxsIHdoZW4gaXRzIHogaXMgY29udGludW91cyByYXRoZXIgdGhhbiBzZWN0aW9uZWQgKHNvIHRoZXJlIGFyZSBubyBzZWN0aW9uc1xuICAgKiB0byBvZmZlcikgb3Igd2hlbiB0aGVyZSBpcyBubyBkYXRhc2V0LlxuICAgKlxuICAgKiBMZXRzIGEgcGFuZWwgb2ZmZXIgXCJvbmUgc2VjdGlvbiBhdCBhIHRpbWVcIiBmb3IgdGhlIDNEIGNsb3VkIG9ubHkgd2hlcmUgdGhhdFxuICAgKiBtZWFucyBzb21ldGhpbmcsIGFuZCBsYWJlbCB0aGUgY2hvc2VuIG9uZS4gU2Nhbm5lZCBvbmNlIHBlciBkYXRhc2V0LlxuICAgKi9cbiAgc2FtcGxlZFNlY3Rpb25zKCk6IEZsb2F0MzJBcnJheSB8IG51bGw7XG5cbiAgLy8g4pSA4pSAIHNlbGVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIFRoZSBjdXJyZW50IHNlbGVjdGlvbi4gRW1wdHkgbWVhbnMgXCJub3RoaW5nIHNlbGVjdGVkXCIsIGluIHdoaWNoIGNhc2UgdGhlXG4gICAqICB3aG9sZSB0aXNzdWUgcmVuZGVycyBub3JtYWxseSByYXRoZXIgdGhhbiBldmVyeXRoaW5nIGJlaW5nIG11dGVkLiAqL1xuICBnZXRTZWxlY3Rpb24kKCk6IE9ic2VydmFibGU8U3BhdGlhbFNlbGVjdGlvbk1hc2s+O1xuICAvKipcbiAgICogU2VsZWN0IGV2ZXJ5IG9ic2VydmF0aW9uIGluc2lkZSB0aGUgY3VycmVudGx5LWRyYXduIHJlZ2lvbnMgKHRoZWlyIHVuaW9uKS5cbiAgICogUmV1c2VzIHRoZSBleGlzdGluZyBST0kgdG9vbHMg4oCUIHJlY3RhbmdsZSwgcG9seWdvbiwgZnJlZWhhbmQsIHdhbmQsIGJydXNoIOKAlFxuICAgKiBzbyB0aGVyZSBpcyBubyBzZXBhcmF0ZSBtYXJxdWVlIHRvIGxlYXJuLiBJbiB0aGUgM0QgY2xvdWQsIHRoZSByZWdpb24gY2xhc3Nlc1xuICAgKiBwaWNrZWQgaW4gdGhlIFJlZ2lvbiBFZGl0b3IgKHNlZSB7QGxpbmsgZ2V0UGlja2VkUmVnaW9uQ2xhc3NlcyR9KSBzZWxlY3QgdGhlXG4gICAqIG9ic2VydmF0aW9ucyBpbnNpZGUgdGhlaXIgdm9sdW1lcyBpbnN0ZWFkLCB3aGVuIHRoZSByZWdpb25zIHNpdCBvbiB0aGVcbiAgICogZGF0YXNldCdzIHJlZmVyZW5jZSB2b2x1bWU7IHdpdGhvdXQgYSBwaWNrLCB0aGUgbGFzc29zIGRyYXduIG92ZXIgdGhlIGNsb3VkLlxuICAgKiBSZXNvbHZlcyBob3cgbWFueSB3ZXJlIHNlbGVjdGVkIOKAlCBvciBudWxsIHdoZW4gaXQgd2FzIHN1cGVyc2VkZWQgd2hpbGUgdGhlXG4gICAqIGNsYXNzZXMnIG91dGxpbmVzIHdlcmUgcmVhZCAoYSBuZXdlciBzZWxlY3Rpb24sIGEgQ2xlYXIsIGFub3RoZXIgZGF0YXNldCwgdmlld1xuICAgKiBvciBwaWNrKSwgaW4gd2hpY2ggY2FzZSBub3RoaW5nIHdhcyBwdWJsaXNoZWQuXG4gICAqL1xuICBzZWxlY3RGcm9tUmVnaW9ucygpOiBQcm9taXNlPG51bWJlciB8IG51bGw+O1xuICAvKipcbiAgICogSG93IHtAbGluayBzZWxlY3RGcm9tUmVnaW9uc30gd291bGQgc2VsZWN0IG5vdzogaW5zaWRlIHRoZSBwaWNrZWQgY2xhc3NlcydcbiAgICogdm9sdW1lcywgb3IgYnkgdGhlIGRyYXduIHJlZ2lvbnMuIFRoZSBydWxlIGl0IHJ1bnMgYnksIHNvIGEgcGFuZWwgZGVzY3JpYmluZ1xuICAgKiB0aGUgYnV0dG9uIGNhbiBuZXZlciBkaXNhZ3JlZSB3aXRoIHdoYXQgaXQgZG9lcy5cbiAgICovXG4gIHJvaVNlbGVjdGlvbk1vZGU/KCk6IFJvaVNlbGVjdGlvbk1vZGU7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIGNsYXNzZXMgdGhlIHJlZ2lvbiBzZWxlY3Rpb24gd2FzIHBpY2tlZCBhcyAoYSBjbGFzcyB0cmVlIG5vZGUgd2l0aFxuICAgKiBpdHMgc3ViY2xhc3NlcywgYSBzdXJmYWNlIGNsaWNrZWQgaW4gM0QpOyBbXSBmb3IgYW55IG90aGVyIHNlbGVjdGlvbi5cbiAgICovXG4gIGdldFBpY2tlZFJlZ2lvbkNsYXNzZXMkPygpOiBPYnNlcnZhYmxlPHJlYWRvbmx5IHN0cmluZ1tdPjtcbiAgLyoqIFNlbGVjdCBldmVyeSBvYnNlcnZhdGlvbiBpbiBvbmUgY2F0ZWdvcnkgb2YgYSBjYXRlZ29yaWNhbCBjb2x1bW4g4oCUIHRoZVxuICAgKiAgbGVnZW5kIGNsaWNrLiBSZWplY3RzIGZvciBhbiB1bmtub3duIG9yIGNvbnRpbnVvdXMgY29sdW1uLiAqL1xuICBzZWxlY3RDYXRlZ29yeShjb2x1bW46IHN0cmluZywgY2F0ZWdvcnlJbmRleDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW4gZXhwbGljaXQgc2V0IG9mIG9ic2VydmF0aW9ucywgcmVwbGFjaW5nIGFueSBjdXJyZW50IHNlbGVjdGlvbi5cbiAgICpcbiAgICogRm9yIGEgbGlua2VkIHBsb3Q6IGxhc3NvaW5nIHBvaW50cyBpbiBhbiBlbWJlZGRpbmcgaXMgYSBzZWxlY3Rpb24gT0Ygb2JzZXJ2YXRpb25zLFxuICAgKiBhbmQgZXZlcnkgb3RoZXIgdmlldyDigJQgdGhlIG1hcCwgdGhlIGRpc3RyaWJ1dGlvbnMg4oCUIHJlYWRzIHRoZSBzYW1lIG1hc2ssIHNvIGJydXNoaW5nXG4gICAqIG9uZSBsaWdodHMgdXAgdGhlIHJlc3QuIFJldHVybnMgaG93IG1hbnkgd2VyZSBzZWxlY3RlZC5cbiAgICovXG4gIHNlbGVjdEluZGljZXMoaW5kaWNlczogSXRlcmFibGU8bnVtYmVyPik6IG51bWJlcjtcbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZDtcbn1cblxuLyoqIERpc3BsYXkgb3B0aW9ucyAoY29sb3JtYXAvTFVULCByZXZlcnNlIHNjYWxlLCBpbWFnZSBtZXRhZGF0YSkuICovXG5leHBvcnQgaW50ZXJmYWNlIElEaXNwbGF5T3B0aW9ucyB7XG4gIGdldENvbG9ybWFwKCk6IE9ic2VydmFibGU8Q29sb3JtYXBOb2RlIHwgbnVsbD47XG4gIHNldENvbG9ybWFwKGNvbG9ybWFwOiBDb2xvcm1hcE5vZGUpOiB2b2lkO1xuICBnZXRDb2xvcm1hcE9wdGlvbnMoKTogQ29sb3JtYXBOb2RlW107XG4gIGdldFJldmVyc2VTY2FsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRSZXZlcnNlU2NhbGUocmV2ZXJzZTogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBQdWJsaXNoIHRoZSBjdXJyZW50IGltYWdlJ3MgbWV0YWRhdGEuIGBpbWFnZUtleWAgKGl0cyBmaWxlIG5hbWUpIGxldHMgdGhlXG4gICAqICBjaGFubmVsIHN0YXRlIHN1cnZpdmUgYSByZS1wbG90IG9mIHRoZSBzYW1lIGltYWdlIGJ1dCBub3QgYSBzd2l0Y2ggdG8gYW5vdGhlci4gKi9cbiAgc2V0SW1hZ2VNZXRhKGltYWdlTWV0YTogSUltYWdlTWV0YWRhdGFbXSwgaW1hZ2VLZXk/OiBzdHJpbmcpOiB2b2lkO1xuICBnZXRJbWFnZU1ldGEoKTogT2JzZXJ2YWJsZTxJSW1hZ2VNZXRhZGF0YVtdPjtcbn1cblxuLyoqXG4gKiBUaGUgcGFydCBvZiBpbnRlbnNpdHkgc2FtcGxpbmcgYSByZW5kZXJpbmcgYmFja2VuZCBvd25zOiB3aGVyZSBpdHMgdmlldyBzZXR0bGVkLlxuICogV2hhdCBgSVZpZXdlckJhY2tlbmQuZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKWAgcmV0dXJucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSW50ZW5zaXR5Vmlld3BvcnRTb3VyY2Uge1xuICAvKiogVmlzaWJsZS1yZWdpb24gY2hhbmdlcyAoaW1hZ2UtcGl4ZWwgY29vcmRzKSwgZW1pdHRlZCB3aGVuIHRoZSB2aWV3IHNldHRsZXMsXG4gICAqICBzbyB0aGUgaW5zZXQgY2FuIHJlLXNhbXBsZSBhdCB0aGUgY3VycmVudCB6b29tLiAqL1xuICBnZXRWaWV3cG9ydENoYW5nZSQoKTogT2JzZXJ2YWJsZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9Pjtcbn1cblxuLyoqXG4gKiBJbnRlbnNpdHktcHJvZmlsZSBzYW1wbGluZyAodGhlIGxpbmUgUk9JcycgaW5zZXQpLCBmcm9tIGBJVmlzdWFsaXplci5nZXRJbnRlbnNpdHlTYW1wbGluZygpYC5cbiAqIFRoZSBzYW1wbGluZyBpdHNlbGYgaXMgYmFja2VuZC1uZXV0cmFsICh0aGUgbGlicmFyeSdzIEludGVuc2l0eVByb2ZpbGVTZXJ2aWNlXG4gKiBzYW1wbGVzIHdoYXRldmVyIGltYWdlIGlzIG9uIHNjcmVlbik7IHRoZSB2aWV3cG9ydC1jaGFuZ2Ugc2lnbmFsIGNvbWVzIGZyb20gdGhlXG4gKiBiYWNrZW5kIHRoYXQgZHJhd3MgdGhlIGltYWdlIChPcGVuU2VhZHJhZ29uIGFuZCBuYXBhcmktanMgcmVwb3J0IGl0OyBQbG90bHlcbiAqIHJlLXNhbXBsZXMgaXRzIGhpZ2gtZGVmIHpvb20gY3JvcHMgaW5saW5lIGluc3RlYWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlbnNpdHlTYW1wbGluZyBleHRlbmRzIElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSB7XG4gIC8qKiBMb2FkIHRoZSBjdXJyZW50IGltYWdlL3NsaWNlJ3MgcGl4ZWxzIHNvIHRoZSBsaW5lLVJPSSBwcm9maWxlcyBoYXZlIGRhdGFcbiAgICogIChhIGJhY2tlbmQgd2l0aCBubyBmcmFtZXMgb2YgaXRzIG93bjogT3BlblNlYWRyYWdvbiwgbmFwYXJpLWpzKS4gKi9cbiAgZW5zdXJlSW50ZW5zaXR5U2FtcGxpbmcoaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLCB6SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSZS1zYW1wbGUgdGhlIHByb2ZpbGVzIGZyb20gYSBmcmVzaCBjcm9wIG9mIHRoZSBnaXZlbiBpbWFnZS1waXhlbCBST0kgYXRcbiAgICogIGRpc3BsYXkgcmVzb2x1dGlvbi4gKi9cbiAgcmVmcmVzaEludGVuc2l0eVNhbXBsaW5nRm9yUm9pKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgekluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSAyRCB2aWV3IG9wdGlvbnMgb2YgYSB0aWxlZCBpbWFnZSB2aWV3ZXI6IHRoZSBvdmVydmlldyBuYXZpZ2F0b3IgYW5kIGltYWdlXG4gKiBzbW9vdGhpbmcuIE9wZW5TZWFkcmFnb24ncywgbWlycm9yZWQgYnkgbmFwYXJpLWpzJ3MgMkQgdmlld3M7IFBsb3RseSBoYXMgbmVpdGhlci5cbiAqIENhcGFiaWxpdHktZ2F0ZWQ6IGBJVmlld2VyQmFja2VuZC5nZXRPc2RWaWV3T3B0aW9ucygpYCBpcyBudWxsIG9uIGEgYmFja2VuZFxuICogd2l0aG91dCB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElPc2RWaWV3T3B0aW9ucyB7XG4gIC8qKiBTaG93L2hpZGUgdGhlIG92ZXJ2aWV3IG5hdmlnYXRvciAodGhlIG1pbmltYXApLiBBcHBsaWVkIHdoZW4gdGhlIHZpZXdlciBpc1xuICAgKiAgKHJlKWNyZWF0ZWQsIGFuZCB0b2dnbGVkIGxpdmUgd2hlbiBvbmUgaXMgYWxyZWFkeSBtb3VudGVkLiAqL1xuICBzZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogSW1hZ2Ugc21vb3RoaW5nIChiaWxpbmVhciBpbnRlcnBvbGF0aW9uKS4gYGZhbHNlYCA9IG5lYXJlc3QtbmVpZ2hib3VyLCBzb1xuICAgKiAgem9vbWluZyBwYXN0IDE6MSBzaG93cyBjcmlzcCBwaXhlbCBibG9ja3MgKHBpeGVsLWxldmVsIGluc3BlY3Rpb24pLiBBcHBsaWVkXG4gICAqICBhdCB2aWV3ZXIgY3JlYXRpb24gYW5kIGxpdmUgKHdpdGggYSByZWRyYXcpIHdoZW4gb25lIGlzIG1vdW50ZWQuICovXG4gIHNldEltYWdlU21vb3RoaW5nRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgM0QgZGVjaW1hdGUgZmFjdG9yIG9mIGEgdm9sdW1lIHJlbmRlcmVyIChuYXBhcmktanMgV2ViR1BVKTogMSA9IGZ1bGxcbiAqIHJlc29sdXRpb24g4oCmIDggPSDihZsgcGVyIGF4aXMuIENhcGFiaWxpdHktZ2F0ZWQ6IG51bGwgb24gYSBiYWNrZW5kIHdpdGhvdXQgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElWb2x1bWVSZXNvbHV0aW9uIHtcbiAgLyoqIFRoZSBjdXJyZW50IGZhY3RvciAodG8gaW5pdGlhbGl6ZSB0aGUgUmVzb2x1dGlvbiBjb250cm9sKS4gKi9cbiAgZ2V0KCk6IG51bWJlcjtcbiAgLyoqIFNldCB0aGUgZmFjdG9yIChyb3VuZGVkLCBhdCBsZWFzdCAxKS4gVGFrZXMgZWZmZWN0IG9uIHRoZSBuZXh0IChyZSlsb2FkIOKAlFxuICAgKiAgdGhlIGhvc3QgcmUtcGxvdHMgYWZ0ZXIgY2FsbGluZyBpdCwgc2luY2UgaXQgY2hhbmdlcyB0aGUgZmV0Y2hlZCBkYXRhLiAqL1xuICBzZXQoc2NhbGU6IG51bWJlcik6IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIGhvc3QtZmFjaW5nIGNvbXBvc2l0ZSBjb250cmFjdCwgaW1wbGVtZW50ZWQgYnkgdGhlIHJvdXRlciAoYFZJU1VBTElaRVJgKS4gQVxuICogcmVuZGVyaW5nIGJhY2tlbmQgaW1wbGVtZW50cyB7QGxpbmsgSVZpZXdlckJhY2tlbmR9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZpc3VhbGl6ZXJcbiAgZXh0ZW5kcyBJRGF0YVJlbmRlcmVyLCBJUmVnaW9uU3RvcmUsIElUb29sQ29udHJvbGxlciwgSURpc3BsYXlPcHRpb25zLCBJSW50ZW5zaXR5U2FtcGxpbmcge1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM6IFZpZXdlckNhcGFiaWxpdGllcztcbiAgLyoqIFRoaXMgYmFja2VuZCdzIHJlZ2lvbiByZW5kZXJlci4gTWF5IGJlIG51bGwgdW50aWwgYSBwbG90IGlzIG1vdW50ZWRcbiAgICogIChPcGVuU2VhZHJhZ29uKS4gRHJpdmVzIHJlZ2lvbiBkcmF3L3NlbGVjdCBtb2RlcyB1bmlmb3JtbHkuICovXG4gIGdldFJlZ2lvbk92ZXJsYXkoKTogSVJlZ2lvbk92ZXJsYXkgfCBudWxsO1xuICAvKipcbiAgICogQXR0YWNoIGEgc3BhdGlhbCBkYXRhc2V0J3MgcmVnaW9uIHNldCAoYSAzRCBzZWdtZW50YXRpb24ncyBjZWxscywgc2VlXG4gICAqIGBTcGF0aWFsRGF0YVBvcnQub3BlblJlZ2lvblNldGApIHRvIGl0cyBpbWFnZSwgdGhlIG9uZSBwbG90dGVkLCBiZXNpZGUgdGhlIGltYWdlJ3Mgb3duIHJlZ2lvbnM7XG4gICAqIG9uY2UgcGVyIGltYWdlIGFuZCBga2V5YC4gUmVzb2x2ZXMgd2hldGhlciBpdCBpcyBhdHRhY2hlZC4gT3B0aW9uYWw6IHRoZSByb3V0ZXIncy5cbiAgICovXG4gIGF0dGFjaERhdGFzZXRSZWdpb25TZXQ/KG9wZW46ICgpID0+IFByb21pc2U8UmVnaW9uU291cmNlPiwga2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAvKipcbiAgICogVGhlIHNwYXRpYWwgZGF0YXNldCBubyBsb25nZXIgbmFtZXMgdGhlIGF0dGFjaGVkIHJlZ2lvbiBzZXQgKGl0IHdhcyBjbGVhcmVkLCBvciBhbm90aGVyIHdhc1xuICAgKiBzZWxlY3RlZCkgd2hpbGUgaXRzIGltYWdlIGlzIHN0aWxsIHBsb3R0ZWQ6IHRha2UgZG93biB3aGF0IHRoZSBzZXQgYnJvdWdodCB0byB0aGUgdmlld3MgKGl0c1xuICAgKiBwbGFuZXMsIGl0cyBjZWxscyBhbmQgc3VyZmFjZXMgaW4gM0QpIHVubGVzcyBga2VlcGAgaXMgaXRzIGtleS4gSXRzIHJlZ2lvbnMgc3RheSB0aGUgaW1hZ2UncyxcbiAgICogd2l0aCB3aGF0IHdhcyB0YWtlbiBmcm9tIG9yIGRlbGV0ZWQgaW4gdGhlbSwgYXMgb24gYW5vdGhlciBpbWFnZTogdGhlIHNhbWUgc2V0IGF0dGFjaGVkIGFnYWluXG4gICAqIGlzIHJlc3RvcmVkIGFzIGl0IHdhcy4gT3B0aW9uYWw6IHRoZSByb3V0ZXIncy5cbiAgICovXG4gIHJlbGVhc2VEYXRhc2V0UmVnaW9uU2V0PyhrZWVwOiBzdHJpbmcgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIFRoZSBwbGFuZXMgb2YgdGhhdCByZWdpb24gc2V0IChpdHMgYHNsaWNlWmApIHdoaWxlIHRoZXkgc2xpY2UgdGhlIHBsb3R0ZWQgaW1hZ2UsIGFuIGltYWdlIG9mXG4gICAqIG9uZSBwbGFuZTsgbnVsbCBvdGhlcndpc2UuIFRoZSBob3N0J3Mgc2xpY2Ugc2xpZGVyIHJ1bnMgb3ZlciB0aGVtOiBlYWNoIHBvc2l0aW9uIHNob3dzIHRoYXRcbiAgICogcGxhbmUncyByZWdpb25zIGFuZCwgaW4gdGhlIDJEIHNwYXRpYWwgdmlldywgaXRzIG9ic2VydmF0aW9ucyBhbmQgdHJhbnNjcmlwdHMuIE9wdGlvbmFsOiB0aGVcbiAgICogcm91dGVyJ3MuXG4gICAqL1xuICBnZXREYXRhc2V0UGxhbmVzJD8oKTogT2JzZXJ2YWJsZTxyZWFkb25seSBudW1iZXJbXSB8IG51bGw+O1xuICAvKiogU3BsaXQgYSB2b2x1bWUgdmlldzogdGhlIGRpc3BsYXllZCBzbGljZSwgd2l0aCBldmVyeSByZWdpb24gdG9vbCwgaW4gdGhlIGRpdiBgZGl2YCBiZXNpZGVcbiAgICogIHRoZSAzRCB2aWV3OyBudWxsIGNsb3NlcyBpdC4gUmVzb2x2ZXMgd2hldGhlciB0aGUgc2xpY2Ugc2hvd3MuIE9wdGlvbmFsOiB0aGUgcm91dGVyJ3MuICovXG4gIHNldFNsaWNlRWRpdG9yPyhkaXY6IHN0cmluZyB8IG51bGwpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAvKiogVGhlIHNsaWNlIGVkaXRvcidzIHNlY3Rpb25zIHRocm91Z2ggeCBhbmQgeSAobnVsbHMgd2hpbGUgaXQgaXMgY2xvc2VkKS4gT3B0aW9uYWw6IHRoZSByb3V0ZXIncy4gKi9cbiAgZ2V0U2VjdGlvblZpZXdzJD8oKTogT2JzZXJ2YWJsZTxTZWN0aW9uVmlld3M+O1xuICAvKiogTW92ZSB0aGUgc2xpY2UgZWRpdG9yJ3Mgc2VjdGlvbiBwbGFuZSB0aHJvdWdoIGBheGlzYCB0byBgYXRgIChpbWFnZSBweCkuICovXG4gIHNldFNlY3Rpb25QbGFuZT8oYXhpczogU2VjdGlvbkF4aXMsIGF0OiBudW1iZXIpOiB2b2lkO1xuICAvKiogVGhlIHNsaWNlIHBpY2tlZCBieSBkcmFnZ2luZyB0aGUgeiBwbGFuZSBpbiB0aGUgdm9sdW1lICh0aGUgaG9zdCBzaG93cyBpdCkuICovXG4gIGdldFNsaWNlRHJhZyQ/KCk6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqIElzb3N1cmZhY2UgY29udHJvbHMgd2hlbiB0aGlzIGJhY2tlbmQgYWR2ZXJ0aXNlcyBgVmlld2VyRmVhdHVyZS5Jc29zdXJmYWNlYCxcbiAgICogIGVsc2UgbnVsbCDigJQgc28gY29uc3VtZXJzIGdhdGUgb24gdGhlIHJldHVybmVkIG9iamVjdCwgbm90IGEgbm8tb3AgbWV0aG9kLiAqL1xuICBnZXRJc29zdXJmYWNlQ29udHJvbHMoKTogSUlzb3N1cmZhY2VDb250cm9scyB8IG51bGw7XG4gIC8qKiBJbnRlbnNpdHkgKGxpbmUtUk9JKSBjb250cm9scyB3aGVuIHRoZSBiYWNrZW5kIHJlbmRlcnMgdGhlIExJTkUgcGxvdCB0eXBlLFxuICAgKiAgZWxzZSBudWxsLiAqL1xuICBnZXRJbnRlbnNpdHlDb250cm9scygpOiBJSW50ZW5zaXR5Q29udHJvbHMgfCBudWxsO1xuICAvKiogM0Qgc2NlbmUgY29udHJvbHMgd2hlbiB0aGlzIGJhY2tlbmQgcmVuZGVycyAzRCBwbG90IHR5cGVzLCBlbHNlIG51bGwg4oCUXG4gICAqICB0aGUgY2FwYWJpbGl0eS1nYXRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlcHJlY2F0ZWQgdG9wLWxldmVsXG4gICAqICBgc2V0U3VyZmFjZURyYWdNb2RlYC9gcmVzZXRTdXJmYWNlQ2FtZXJhYC4gKi9cbiAgZ2V0U3VyZmFjZTNkQ29udHJvbHMoKTogSVN1cmZhY2UzZENvbnRyb2xzIHwgbnVsbDtcbiAgLyoqIFRoZSBuYXZpZ2F0b3IgLyBpbWFnZS1zbW9vdGhpbmcgb3B0aW9ucy4gTmV2ZXIgbnVsbCBvbiB0aGUgcm91dGVyOiBhIHNldHRpbmdcbiAgICogIGFwcGxpZXMgdG8gZXZlcnkgYmFja2VuZCB0aGF0IGhhcyB0aGVtIChPcGVuU2VhZHJhZ29uLCBuYXBhcmktanMpLCBzbyBpdCBjYW5cbiAgICogIGJlIHNldCBiZWZvcmUgdGhlIGZpcnN0IHJlbmRlciBhbmQgc3Vydml2ZXMgYSBiYWNrZW5kIHN3aXRjaC4gKi9cbiAgZ2V0T3NkVmlld09wdGlvbnMoKTogSU9zZFZpZXdPcHRpb25zO1xuICAvKiogVGhlIDNEIGRlY2ltYXRlIGZhY3RvciBvZiB0aGUgYmFja2VuZCBvbiBzY3JlZW4sIG9yIG51bGwgd2hlbiBpdCBoYXMgbm9uZVxuICAgKiAgKG9ubHkgbmFwYXJpLWpzIHJlbmRlcnMgdm9sdW1lcykuICovXG4gIGdldFZvbHVtZVJlc29sdXRpb24oKTogSVZvbHVtZVJlc29sdXRpb24gfCBudWxsO1xuICAvKiogSW50ZW5zaXR5LXByb2ZpbGUgc2FtcGxpbmcsIHdoaWNoZXZlciBiYWNrZW5kIGlzIG9uIHNjcmVlbi4gKi9cbiAgZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKTogSUludGVuc2l0eVNhbXBsaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBnZXRJbnRlbnNpdHlTYW1wbGluZygpLmVuc3VyZUludGVuc2l0eVNhbXBsaW5nKClgLiAqL1xuICBlbnN1cmVJbnRlbnNpdHlTYW1wbGluZyhpbWFnZUluZm86IElJbWFnZUluZm8sIHpJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKS5yZWZyZXNoSW50ZW5zaXR5U2FtcGxpbmdGb3JSb2koKWAuICovXG4gIHJlZnJlc2hJbnRlbnNpdHlTYW1wbGluZ0ZvclJvaSh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHpJbmRleDogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBgZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKS5nZXRWaWV3cG9ydENoYW5nZSQoKWAuICovXG4gIGdldFZpZXdwb3J0Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0+O1xuICAvKiogU3BhdGlhbC1vbWljcyBjb250cm9scyB3aGVuIGEgYFNQQVRJQUxfREFUQV9QT1JUYCBpcyBib3VuZCwgZWxzZSBudWxsLlxuICAgKiAgT3B0aW9uYWw6IG9ubHkgdGhlIHJvdXRpbmcgc2VydmljZSBpbXBsZW1lbnRzIGl0LCBzaW5jZSB0aGUgc3RhdGUgaXMgc2hhcmVkXG4gICAqICByYXRoZXIgdGhhbiBvd25lZCBieSBhbnkgb25lIGJhY2tlbmQuICovXG4gIGdldFNwYXRpYWxDb250cm9scz8oKTogSVNwYXRpYWxDb250cm9scyB8IG51bGw7XG4gIC8qKiBUaGUgdmlld3BvcnQgYSBjb250cmlidXRlZCBwbG90IG1vZGUgZHJhd3Mgb3Zlciwgd2hlbiB0aGUgYmFja2VuZCBvblxuICAgKiAgc2NyZWVuIGNhbiBwcm92aWRlIG9uZSAoT3BlblNlYWRyYWdvbiksIGVsc2UgbnVsbC4gT3B0aW9uYWw6IGJhY2tlbmRzIHRoYXRcbiAgICogIG5vIGNvbnRyaWJ1dGVkIG1vZGUgcmlkZXMgb24gbmVlZCBub3QgaW1wbGVtZW50IGl0LiAqL1xuICBnZXRQbG90TW9kZVZpZXdwb3J0PygpOiBQbG90TW9kZVZpZXdwb3J0IHwgbnVsbDtcbiAgLyoqIEJpbm5lZCBpbnRlbnNpdHkgaGlzdG9ncmFtIGZvciBhIGNoYW5uZWwgZnJvbSB0aGUgY3VycmVudGx5LWRpc3BsYXllZFxuICAgKiAgcGl4ZWxzLCBvciBudWxsIHdoZW4gbm9uZSBhcmUgYXZhaWxhYmxlLiBGZWVkcyB0aGUgQ2hhbm5lbHMgJiBIaXN0b2dyYW1cbiAgICogIHBhbmUuICovXG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIC8qKiBBc3luYyBoaXN0b2dyYW0gc3RyZWFtIOKAlCBuYXRpdmUgYml0IGRlcHRoIGZvciA+OC1iaXQgaW1hZ2VzIChzZXJ2ZXIpLCBlbHNlXG4gICAqICB0aGUgOC1iaXQgY2xpZW50IGhpc3RvZ3JhbS4gKi9cbiAgZ2V0SGlzdG9ncmFtJChjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogT2JzZXJ2YWJsZTxJSGlzdG9ncmFtIHwgbnVsbD47XG4gIC8qKiBFeHBvcnQgdGhlIGRpc3BsYXllZCBpbWFnZSwgY29tcG9zaXRlZCB3aXRoIHRoZSBjdXJyZW50IGRpc3BsYXkgc2V0dGluZ3MsXG4gICAqICBhcyBhIHB1YmxpY2F0aW9uLXJlYWR5IFBORyBkb3dubG9hZC4gKi9cbiAgZXhwb3J0Q29tcG9zaXRlKCk6IHZvaWQ7XG4gIC8qKiBFeHBvcnQgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZGF0YSBhcyBhIGRhdGEtcHJlc2VydmluZyBtdWx0aS1iYW5kIFRJRkZcbiAgICogIChuYXRpdmUgYml0IGRlcHRoKS4gTm8tb3Agb24gYmFja2VuZHMgdGhhdCBjYW4ndCBwcm92aWRlIGl0LiAqL1xuICBleHBvcnREYXRhKCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBUaGUgdmlldyBpcyBnb2luZyBhd2F5ICh0aGUgYDx2aXN1YWxpemVyPmAgaXMgZGVzdHJveWVkKTogZHJvcCB3aGF0IGlzIGJvdW5kIHRvXG4gICAqIGl0IOKAlCB0aGUgb24tc2NyZWVuIHZpZXdlciwgaXRzIHJlbmRlciBsb29wIGFuZCB2aWV3IHN1YnNjcmlwdGlvbnMg4oCUIHNvIG5vdGhpbmdcbiAgICogb3V0bGl2ZXMgdGhlIHZpZXcuIFNlcnZpY2UtbGlmZXRpbWUgc3RhdGUgKHN0b3JlcywgdGhlIGJhY2tlbmRzJyBvd24gc3RvcmVcbiAgICogc3Vic2NyaXB0aW9ucykgaXMgdW50b3VjaGVkLCBzbyBhIGxhdGVyIHZpZXcgb24gdGhlIHNhbWUgY2hhaW4gcmVuZGVycyBub3JtYWxseS5cbiAgICovXG4gIGRldGFjaCgpOiB2b2lkO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBkZXRhY2h9LCB3aGljaCB0aGlzIGRlbGVnYXRlcyB0by4gKi9cbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBXaGF0IGEgcmVuZGVyaW5nIGJhY2tlbmQgaW1wbGVtZW50cyAoUGxvdGx5LCBPcGVuU2VhZHJhZ29uLCBuYXBhcmktanMpOiByZW5kZXJpbmcsXG4gKiB0aGUgdmlld3BvcnQsIHBpeGVsIHJlYWRiYWNrLCBleHBvcnQsIGxvYWRpbmcgc3RhdGUgYW5kIGl0cyBvbi1jYW52YXMgdG9vbHMsIHBsdXNcbiAqIGNhcGFiaWxpdHktZ2F0ZWQgZ2V0dGVycyBmb3Igd2hhdCBvbmx5IHNvbWUgYmFja2VuZHMgaGF2ZS5cbiAqXG4gKiBJdCBpcyB0aGUgYmFja2VuZC1mYWNpbmcgaGFsZiBvZiB7QGxpbmsgSVZpc3VhbGl6ZXJ9LiBSZWdpb24gYW5kIGRpc3BsYXkgc3RhdGUgYXJlXG4gKiBub3QgaGVyZTogdGhleSBsaXZlIGluIHRoZSBzaGFyZWQgYFJlZ2lvblN0b3JlYCAvIGBWaXN1YWxpemVyU3RvcmVgLCB3aGljaCB0aGUgcm91dGVyXG4gKiBzZXJ2ZXMgdG8gaG9zdHMgZGlyZWN0bHk7IGEgYmFja2VuZCBkcmF3cyB0aGVtIGJ5IHN1YnNjcmliaW5nIHRvIHRoZSBzdG9yZXMnIGV2ZW50cy5cbiAqIEhvc3RzIGtlZXAgZGVwZW5kaW5nIG9uIGBJVmlzdWFsaXplcmAgKHRoZSByb3V0ZXIncyBjb21wb3NpdGUpLCBuZXZlciBvbiBhIGJhY2tlbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZpZXdlckJhY2tlbmQgZXh0ZW5kcyBJVG9vbENvbnRyb2xsZXIge1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM6IFZpZXdlckNhcGFiaWxpdGllcztcblxuICAvLyDilIDilIAgcmVuZGVyIGxpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgbG9hZChpbWFnZUluZm86IElJbWFnZUluZm8sIHpJbmRleDogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TG9hZGVkSW1hZ2U+O1xuICBwbG90KFxuICAgIHBsb3REaXY6IHN0cmluZyxcbiAgICBpbWFnZUxvYWRlZDogdW5rbm93bixcbiAgICBpbWFnZUluZm86IElJbWFnZUluZm8sXG4gICAgc2NyZWVuSGVpZ2h0OiBudW1iZXIsXG4gICAgcGxvdFR5cGU6IFBsb3RUeXBlLFxuICAgIGluUGxhY2U/OiBib29sZWFuLFxuICApOiBQcm9taXNlPGJvb2xlYW4+O1xuICByZXNldCgpOiB2b2lkO1xuICByZWxheW91dCh0cnVlSW1hZ2VTaXplPzogbnVtYmVyW10pOiB2b2lkO1xuICAvKiogVGhlIHZpZXcgaXMgZ29pbmcgYXdheTogcmVsZWFzZSB3aGF0IGlzIGJvdW5kIHRvIGl0LiAqL1xuICBkZXRhY2goKTogdm9pZDtcbiAgLyoqIFN0b3Agc3RyZWFtaW5nIGZyYW1lcyAodm9sdW1lIGFzc2VtYmx5IC8gc3VyZmFjZSBwcmVsb2FkKS4gT3B0aW9uYWw6IG9ubHlcbiAgICogIGJhY2tlbmRzIHRoYXQgc3RyZWFtIGEgei1zdGFjayBkbyB3b3JrIGhlcmUuICovXG4gIGNhbmNlbExvYWRpbmc/KCk6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIHZpZXdwb3J0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB6b29tSW4oKTogdm9pZDtcbiAgem9vbU91dCgpOiB2b2lkO1xuICBzZXREcmFnTW9kZShtb2RlOiBzdHJpbmcgfCBmYWxzZSk6IHZvaWQ7XG4gIGZpdFRvVmlldygpOiB2b2lkO1xuICAvKiogQHNlZSBJRGF0YVJlbmRlcmVyLnJlc2V0QXhlcyAqL1xuICByZXNldEF4ZXMoKTogdm9pZDtcbiAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogdm9pZDtcbiAgc2V0U2hvd1N0YWNrKHNob3dzdGFjazogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgYmFja2VuZCBmaXRzIHRoZSB2aWV3LiAqL1xuICBnZXRBdXRvc2NhbGVFdmVudCgpOiBPYnNlcnZhYmxlPHVua25vd24+O1xuICBpc1N0YWNrTG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBnZXRTdGFja0xvYWRpbmdQcm9ncmVzcygpOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgLy8g4pSA4pSAIHBpeGVscywgaGlzdG9ncmFtLCBleHBvcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldFRydWVJbWFnZVNpemUoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbDtcbiAgZ2V0Q3VycmVudEltYWdlKCk6IFByb21pc2U8SW1hZ2UgfCBudWxsPjtcbiAgZ2V0RGlzcGxheWVkUGl4ZWxEYXRhKCk6IFBpeGVsRGF0YSB8IG51bGw7XG4gIGdldERpc3BsYXllZFNvdXJjZVJlY3QoKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGw7XG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIGdldEhpc3RvZ3JhbSQoY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IE9ic2VydmFibGU8SUhpc3RvZ3JhbSB8IG51bGw+O1xuICBkb3dubG9hZEltYWdlKCk6IHZvaWQ7XG4gIGV4cG9ydENvbXBvc2l0ZSgpOiB2b2lkO1xuICBleHBvcnREYXRhKCk6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIGNhcGFiaWxpdHktZ2F0ZWQgc3VyZmFjZXMgKG51bGwgLyBhYnNlbnQgd2hlcmUgdGhlIGJhY2tlbmQgbGFja3MgdGhlIGZlYXR1cmUpIOKUgOKUgFxuICBnZXRSZWdpb25PdmVybGF5KCk6IElSZWdpb25PdmVybGF5IHwgbnVsbDtcbiAgZ2V0SXNvc3VyZmFjZUNvbnRyb2xzKCk6IElJc29zdXJmYWNlQ29udHJvbHMgfCBudWxsO1xuICBnZXRTdXJmYWNlM2RDb250cm9scygpOiBJU3VyZmFjZTNkQ29udHJvbHMgfCBudWxsO1xuICBnZXRJbnRlbnNpdHlDb250cm9scygpOiBJSW50ZW5zaXR5Q29udHJvbHMgfCBudWxsO1xuICBnZXRQbG90TW9kZVZpZXdwb3J0PygpOiBQbG90TW9kZVZpZXdwb3J0IHwgbnVsbDtcbiAgLyoqIE5hdmlnYXRvciAvIGltYWdlIHNtb290aGluZywgb3IgbnVsbCB3aGVuIHRoZSBiYWNrZW5kIGhhcyBuZWl0aGVyIChQbG90bHkpLiAqL1xuICBnZXRPc2RWaWV3T3B0aW9ucygpOiBJT3NkVmlld09wdGlvbnMgfCBudWxsO1xuICAvKiogVGhlIDNEIGRlY2ltYXRlIGZhY3Rvciwgb3IgbnVsbCB3aGVuIHRoZSBiYWNrZW5kIHJlbmRlcnMgbm8gdm9sdW1lcy4gKi9cbiAgZ2V0Vm9sdW1lUmVzb2x1dGlvbigpOiBJVm9sdW1lUmVzb2x1dGlvbiB8IG51bGw7XG4gIC8qKiBXaGVyZSB0aGUgdmlldyBzZXR0bGVkLCBmb3IgdGhlIGludGVuc2l0eSBpbnNldCdzIHJlLXNhbXBsaW5nOyBudWxsIHdoZW4gdGhlXG4gICAqICBiYWNrZW5kIHJlLXNhbXBsZXMgb24gaXRzIG93biAoUGxvdGx5J3MgaGlnaC1kZWYgem9vbSkuIFRoZSBzYW1wbGluZyBpdHNlbGYgaXNcbiAgICogIHRoZSByb3V0ZXIncyAoSW50ZW5zaXR5UHJvZmlsZVNlcnZpY2UpLiAqL1xuICBnZXRJbnRlbnNpdHlTYW1wbGluZygpOiBJSW50ZW5zaXR5Vmlld3BvcnRTb3VyY2UgfCBudWxsO1xufVxuXG4vKipcbiAqIFdoYXQgYSBtb3VudGVkIGA8dmlzdWFsaXplcj5gIGhhbmRzIGl0cyBob3N0IHRocm91Z2hcbiAqIGBJbWFnZVN0YXRlUG9ydC5zZXREaWFncmFtKClgIOKAlCBhIHNtYWxsLCB0eXBlZCBzdXJmYWNlIHJhdGhlciB0aGFuIHRoZSBjb21wb25lbnRcbiAqIGl0c2VsZiwgd2hvc2UgZXZlcnkgcHVibGljIG1lbWJlciB3b3VsZCBvdGhlcndpc2UgYmUgZGUtZmFjdG8gQVBJLiBDbGVhcmVkXG4gKiAoYHNldERpYWdyYW0obnVsbClgKSB3aGVuIHRoZSB2aXN1YWxpemVyIGlzIGRlc3Ryb3llZC4gSG9zdHMgdGhhdCBjYW4gaW5qZWN0XG4gKiB7QGxpbmsgVklTVUFMSVpFUn0gLyBgUkVHSU9OX0VESVRPUl9BUElgIGRpcmVjdGx5IG5lZWQgbm90IHVzZSBpdCBhdCBhbGwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlzdWFsaXplckhhbmRsZSB7XG4gIC8qKiBUaGUgdmlzdWFsaXplciBjaGFpbiB0aGlzIGA8dmlzdWFsaXplcj5gIHJlbmRlcnMgdGhyb3VnaC4gKi9cbiAgcmVhZG9ubHkgdmlzdWFsaXplcjogSVZpc3VhbGl6ZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIHZpc3VhbGl6ZXJ9LiBLZXB0IGZvciBob3N0cyB0aGF0IHJlYWQgdGhlIGNvbXBvbmVudCdzXG4gICAqICBmb3JtZXIgYHBsb3RTZXJ2aWNlYCBmaWVsZCBvZmYgdGhlIHJlZ2lzdGVyZWQgb2JqZWN0LiAqL1xuICByZWFkb25seSBwbG90U2VydmljZTogSVZpc3VhbGl6ZXI7XG4gIC8qKiBXaGV0aGVyIGFueSByZWdpb24gKGFubm90YXRpb24gb3IgaW50ZW5zaXR5IGxpbmUpIGV4aXN0cyBvbiB0aGUgY3VycmVudCBpbWFnZS4gKi9cbiAgaGFzUmVnaW9ucygpOiBib29sZWFuO1xuICAvKiogVGhlIGN1cnJlbnQgcmVnaW9ucyBhcyBwb2x5Z29ucywgZm9yIGEgc2VydmVyIHJlcXVlc3QgKGNyb3AgLyBwcm9jZXNzaW5nKS4gKi9cbiAgZ2V0UmVnaW9uUG9seWdvbnMoKTogUG9seWdvbltdO1xufVxuXG4vKipcbiAqIERJIHRva2VuIGZvciB0aGUgYWN0aXZlIHZpc3VhbGl6YXRpb24gYmFja2VuZC4gQmluZCBpdCAoYHVzZUV4aXN0aW5nYCkgdG8gdGhlXG4gKiBgUm91dGluZ1Zpc3VhbGl6ZXJTZXJ2aWNlYCwgd2hpY2ggc2VsZWN0cyBQbG90bHkgdnMgT3BlblNlYWRyYWdvbiBwZXIgcGxvdFxuICogdHlwZS4gQ29uc3VtZXJzIOKAlCBpbmNsdWRpbmcgdGhpcyBsaWJyYXJ5J3Mgb3duIGBWaXN1YWxpemVyQ29tcG9uZW50YCDigJRcbiAqIGluamVjdCBgSVZpc3VhbGl6ZXJgIHRocm91Z2ggdGhpcyB0b2tlbiByYXRoZXIgdGhhbiB0aGUgY29uY3JldGUgcm91dGVyLCBzb1xuICogdGhlIHJvdXRpbmcvZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gY2FuIGNoYW5nZSB3aXRob3V0IHRvdWNoaW5nIGNvbnN0cnVjdG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFZJU1VBTElaRVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48SVZpc3VhbGl6ZXI+KCdWSVNVQUxJWkVSJyk7XG4iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { reconstruct } from './reconstruct';
|
|
2
|
+
/** Each cell's surface by itself (one smoothing pass: a cell is a few voxels across). */
|
|
3
|
+
export function reconstructCells(cells, opts = {}) {
|
|
4
|
+
const parts = [];
|
|
5
|
+
let nv = 0;
|
|
6
|
+
let nf = 0;
|
|
7
|
+
for (const c of cells) {
|
|
8
|
+
if (!c.slices.length)
|
|
9
|
+
continue;
|
|
10
|
+
const mesh = reconstruct(c.slices, { smooth: 1, ...opts });
|
|
11
|
+
if (!mesh.faces.length)
|
|
12
|
+
continue;
|
|
13
|
+
parts.push({ cell: c.cell, vertices: mesh.vertices, faces: mesh.faces });
|
|
14
|
+
nv += mesh.vertices.length / 3;
|
|
15
|
+
nf += mesh.faces.length;
|
|
16
|
+
}
|
|
17
|
+
const vertices = new Float32Array(nv * 3);
|
|
18
|
+
const faces = new Uint32Array(nf);
|
|
19
|
+
const vertexCell = new Uint32Array(nv);
|
|
20
|
+
let v = 0;
|
|
21
|
+
let f = 0;
|
|
22
|
+
for (const p of parts) {
|
|
23
|
+
vertices.set(p.vertices, v * 3);
|
|
24
|
+
for (let i = 0; i < p.faces.length; i++)
|
|
25
|
+
faces[f + i] = p.faces[i] + v;
|
|
26
|
+
const n = p.vertices.length / 3;
|
|
27
|
+
vertexCell.fill(p.cell, v, v + n);
|
|
28
|
+
v += n;
|
|
29
|
+
f += p.faces.length;
|
|
30
|
+
}
|
|
31
|
+
return { vertices, faces, vertexCell, cells: Uint32Array.from(parts.map((p) => p.cell)) };
|
|
32
|
+
}
|
|
33
|
+
/** The buffers of a {@link CellsMesh}, to hand them across a worker boundary without a copy. */
|
|
34
|
+
export function cellsMeshBuffers(mesh) {
|
|
35
|
+
return [mesh.vertices.buffer, mesh.faces.buffer, mesh.vertexCell.buffer, mesh.cells.buffer];
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1tZXNoZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2dlb21ldHJ5L2NlbGwtbWVzaGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUMsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMkIvRSx5RkFBeUY7QUFDekYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQThCLEVBQUUsT0FBMkIsRUFBRTtJQUM1RixNQUFNLEtBQUssR0FBbUUsRUFBRSxDQUFDO0lBQ2pGLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUFFLFNBQVM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsU0FBUztRQUNqQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDL0IsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM1RixDQUFDO0FBRUQsZ0dBQWdHO0FBQ2hHLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFlO0lBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBa0IsQ0FBQztBQUMvRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVjb25zdHJ1Y3RPcHRpb25zLCBTbGljZU91dGxpbmVzLCByZWNvbnN0cnVjdCB9IGZyb20gJy4vcmVjb25zdHJ1Y3QnO1xuXG4vKipcbiAqIEEgM0Qgc2VnbWVudGF0aW9uJ3MgY2VsbHMgcmVjb25zdHJ1Y3RlZCBvbmUgYnkgb25lOiBlYWNoIGNlbGwncyBvdXRsaW5lcyBvbiB0aGUgcGxhbmVzIGl0IHNwYW5zXG4gKiAoc2VlIGBTbGljZU91dGxpbmVzYCwgc2xpY2UgayBhdCB6ID0gaykgbWVzaGVkIGJ5IHRoZW1zZWx2ZXMgKHtAbGluayByZWNvbnN0cnVjdH0pLCBzbyB0d28gY2VsbHNcbiAqIG9mIG9uZSB0eXBlIHRoYXQgdG91Y2ggc3RheSB0d28gc3VyZmFjZXMsIHdoZXJlIGEgY2xhc3MncyB1bmlvbiBtZXJnZXMgdGhlbS5cbiAqXG4gKiBUaGUgbWVzaGVzIGFyZSBjb25jYXRlbmF0ZWQgaW50byBvbmUsIHdoaWNoIGEgc2luZ2xlIHN1cmZhY2UgbGF5ZXIgZHJhd3MsIHdpdGggZWFjaCB2ZXJ0ZXgnc1xuICogY2VsbCAoe0BsaW5rIENlbGxzTWVzaC52ZXJ0ZXhDZWxsfSk6IHdoYXQgY29sb3VycyBhIGNlbGwsIGhpZGVzIGl0LCBvciBuYW1lcyBpdCB1bmRlciB0aGUgcG9pbnRlci5cbiAqL1xuXG4vKiogT25lIGNlbGwncyBvdXRsaW5lczogdGhlIGNlbGwgKGFuIG9ic2VydmF0aW9uIGluZGV4KSBhbmQgaXRzIHJpbmdzIG9uIGVhY2ggcGxhbmUgaXQgc3BhbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxPdXRsaW5lcyB7XG4gIGNlbGw6IG51bWJlcjtcbiAgc2xpY2VzOiBTbGljZU91dGxpbmVzW107XG59XG5cbi8qKiBDZWxscycgc3VyZmFjZXMgaW4gb25lIG1lc2gsIGluIGltYWdlIHB4ICh4LCB5KSBhbmQgc2xpY2UgaW5kaWNlcyAoeiksIGVhY2ggdmVydGV4J3MgY2VsbCBrbm93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbHNNZXNoIHtcbiAgdmVydGljZXM6IEZsb2F0MzJBcnJheTtcbiAgZmFjZXM6IFVpbnQzMkFycmF5O1xuICAvKiogVGhlIGNlbGwgKG9ic2VydmF0aW9uIGluZGV4KSBvZiBlYWNoIHZlcnRleC4gKi9cbiAgdmVydGV4Q2VsbDogVWludDMyQXJyYXk7XG4gIC8qKiBUaGUgY2VsbHMgbWVzaGVkICh0aG9zZSB3aXRoIGFuIGFyZWEgb24gc29tZSBwbGFuZSksIGluIG9yZGVyLiAqL1xuICBjZWxsczogVWludDMyQXJyYXk7XG59XG5cbi8qKiBFYWNoIGNlbGwncyBzdXJmYWNlIGJ5IGl0c2VsZiAob25lIHNtb290aGluZyBwYXNzOiBhIGNlbGwgaXMgYSBmZXcgdm94ZWxzIGFjcm9zcykuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb25zdHJ1Y3RDZWxscyhjZWxsczogcmVhZG9ubHkgQ2VsbE91dGxpbmVzW10sIG9wdHM6IFJlY29uc3RydWN0T3B0aW9ucyA9IHt9KTogQ2VsbHNNZXNoIHtcbiAgY29uc3QgcGFydHM6IHsgY2VsbDogbnVtYmVyOyB2ZXJ0aWNlczogRmxvYXQzMkFycmF5OyBmYWNlczogVWludDMyQXJyYXkgfVtdID0gW107XG4gIGxldCBudiA9IDA7XG4gIGxldCBuZiA9IDA7XG4gIGZvciAoY29uc3QgYyBvZiBjZWxscykge1xuICAgIGlmICghYy5zbGljZXMubGVuZ3RoKSBjb250aW51ZTtcbiAgICBjb25zdCBtZXNoID0gcmVjb25zdHJ1Y3QoYy5zbGljZXMsIHsgc21vb3RoOiAxLCAuLi5vcHRzIH0pO1xuICAgIGlmICghbWVzaC5mYWNlcy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgIHBhcnRzLnB1c2goeyBjZWxsOiBjLmNlbGwsIHZlcnRpY2VzOiBtZXNoLnZlcnRpY2VzLCBmYWNlczogbWVzaC5mYWNlcyB9KTtcbiAgICBudiArPSBtZXNoLnZlcnRpY2VzLmxlbmd0aCAvIDM7XG4gICAgbmYgKz0gbWVzaC5mYWNlcy5sZW5ndGg7XG4gIH1cbiAgY29uc3QgdmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KG52ICogMyk7XG4gIGNvbnN0IGZhY2VzID0gbmV3IFVpbnQzMkFycmF5KG5mKTtcbiAgY29uc3QgdmVydGV4Q2VsbCA9IG5ldyBVaW50MzJBcnJheShudik7XG4gIGxldCB2ID0gMDtcbiAgbGV0IGYgPSAwO1xuICBmb3IgKGNvbnN0IHAgb2YgcGFydHMpIHtcbiAgICB2ZXJ0aWNlcy5zZXQocC52ZXJ0aWNlcywgdiAqIDMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcC5mYWNlcy5sZW5ndGg7IGkrKykgZmFjZXNbZiArIGldID0gcC5mYWNlc1tpXSArIHY7XG4gICAgY29uc3QgbiA9IHAudmVydGljZXMubGVuZ3RoIC8gMztcbiAgICB2ZXJ0ZXhDZWxsLmZpbGwocC5jZWxsLCB2LCB2ICsgbik7XG4gICAgdiArPSBuO1xuICAgIGYgKz0gcC5mYWNlcy5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHsgdmVydGljZXMsIGZhY2VzLCB2ZXJ0ZXhDZWxsLCBjZWxsczogVWludDMyQXJyYXkuZnJvbShwYXJ0cy5tYXAoKHApID0+IHAuY2VsbCkpIH07XG59XG5cbi8qKiBUaGUgYnVmZmVycyBvZiBhIHtAbGluayBDZWxsc01lc2h9LCB0byBoYW5kIHRoZW0gYWNyb3NzIGEgd29ya2VyIGJvdW5kYXJ5IHdpdGhvdXQgYSBjb3B5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNlbGxzTWVzaEJ1ZmZlcnMobWVzaDogQ2VsbHNNZXNoKTogQXJyYXlCdWZmZXJbXSB7XG4gIHJldHVybiBbbWVzaC52ZXJ0aWNlcy5idWZmZXIsIG1lc2guZmFjZXMuYnVmZmVyLCBtZXNoLnZlcnRleENlbGwuYnVmZmVyLCBtZXNoLmNlbGxzLmJ1ZmZlcl0gYXMgQXJyYXlCdWZmZXJbXTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a stack's reconstructions sit in a 3D view's world (pure: the volume and spatial 3D views
|
|
3
|
+
* place region surfaces with it, on the main thread or in a worker).
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Image px / slice coordinates → the volume's centred world box: pixel x of a `w`-wide image
|
|
7
|
+
* spans the box's width, slice k sits at the middle of its share of the box's depth. With
|
|
8
|
+
* {@link VolumeFrame.planes}, as they place them instead.
|
|
9
|
+
*/
|
|
10
|
+
export function toWorld(vertices, frame) {
|
|
11
|
+
if (frame.planes)
|
|
12
|
+
return planesToWorld(vertices, frame.planes);
|
|
13
|
+
const [w, h, d] = frame.size;
|
|
14
|
+
const [ww, wh, wd] = frame.world;
|
|
15
|
+
const out = new Float32Array(vertices.length);
|
|
16
|
+
for (let i = 0; i < vertices.length; i += 3) {
|
|
17
|
+
out[i] = (vertices[i] / w - 0.5) * ww;
|
|
18
|
+
out[i + 1] = (vertices[i + 1] / h - 0.5) * wh;
|
|
19
|
+
out[i + 2] = ((vertices[i + 2] + 0.5) / d - 0.5) * wd;
|
|
20
|
+
}
|
|
21
|
+
return out;
|
|
22
|
+
}
|
|
23
|
+
/** Image px / slice coordinates → world, as {@link PlanePlacement} places them. */
|
|
24
|
+
function planesToWorld(vertices, planes) {
|
|
25
|
+
const { z, scale, offset } = planes;
|
|
26
|
+
const out = new Float32Array(vertices.length);
|
|
27
|
+
for (let i = 0; i < vertices.length; i += 3) {
|
|
28
|
+
out[i] = vertices[i] * scale[0] + offset[0];
|
|
29
|
+
out[i + 1] = vertices[i + 1] * scale[1] + offset[1];
|
|
30
|
+
out[i + 2] = sliceZ(z, vertices[i + 2]) + offset[2];
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The z of slice `k` (fractional): between two slices in proportion, past the ends by the nearest
|
|
36
|
+
* spacing (one slice alone: a unit apart).
|
|
37
|
+
*/
|
|
38
|
+
export function sliceZ(z, k) {
|
|
39
|
+
const n = z.length;
|
|
40
|
+
if (!n)
|
|
41
|
+
return k;
|
|
42
|
+
if (n === 1)
|
|
43
|
+
return z[0] + k;
|
|
44
|
+
const i = Math.min(n - 2, Math.max(0, Math.floor(k)));
|
|
45
|
+
return z[i] + (k - i) * (z[i + 1] - z[i]);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2dlb21ldHJ5L3BsYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQWtDSDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFzQixFQUFFLEtBQWtCO0lBQ2hFLElBQUksS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDN0IsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxtRkFBbUY7QUFDbkYsU0FBUyxhQUFhLENBQUMsUUFBc0IsRUFBRSxNQUFzQjtJQUNuRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBb0IsRUFBRSxDQUFTO0lBQ3BELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkIsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2hlcmUgYSBzdGFjaydzIHJlY29uc3RydWN0aW9ucyBzaXQgaW4gYSAzRCB2aWV3J3Mgd29ybGQgKHB1cmU6IHRoZSB2b2x1bWUgYW5kIHNwYXRpYWwgM0Qgdmlld3NcbiAqIHBsYWNlIHJlZ2lvbiBzdXJmYWNlcyB3aXRoIGl0LCBvbiB0aGUgbWFpbiB0aHJlYWQgb3IgaW4gYSB3b3JrZXIpLlxuICovXG5cbi8qKiBXaGVyZSB0aGUgc3RhY2sgc2l0cyBpbiB0aGUgdm9sdW1lJ3Mgd29ybGQ6IGl0cyBmdWxsIHNpemUsIGFuZCB0aGUgY2VudHJlZCB3b3JsZCBib3ggaXQgZmlsbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZUZyYW1lIHtcbiAgLyoqIEltYWdlIHdpZHRoLCBoZWlnaHQgKHB4KSBhbmQgc2xpY2UgY291bnQuICovXG4gIHNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgLyoqIFRoZSB3b3JsZCBib3ggKGNlbnRyZWQgb24gdGhlIG9yaWdpbiksIFogYXMgY3VycmVudGx5IHN0cmV0Y2hlZC4gKi9cbiAgd29ybGQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIEhvdyBtdWNoIG9mIHtAbGluayB3b3JsZH0ncyBkZXB0aCBpcyB0aGUgdmlldydzIFogc3RyZXRjaCAoZGVmYXVsdCAxKS4gVGhlIHJlZ2lvbiBzdXJmYWNlcyBrZWVwXG4gICAqIHRoZWlyIGdlb21ldHJ5IGluIHRoZSB1bnN0cmV0Y2hlZCBib3ggYW5kIHRha2UgdGhlIHN0cmV0Y2ggYXMgYSBHUFUgc2NhbGUgKGBzY2FsZTNkYCksIHNvXG4gICAqIGRyYWdnaW5nIHRoZSBaIGhhbmRsZSByZS11cGxvYWRzIG5vIG1lc2guXG4gICAqL1xuICB6U2NhbGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc2xpY2VzIGF0IHogb2YgdGhlaXIgb3duIHJhdGhlciB0aGFuIHNwcmVhZCBvdmVyIHRoZSBib3g6IGEgcmVnaW9uIHNldCdzIHBsYW5lcyAoYSAzRFxuICAgKiBzZWdtZW50YXRpb24ncywgb3V0bGluZWQgb24gYW4gaW1hZ2Ugb2Ygb25lIHBsYW5lKSBwbGFjZWQgd2hlcmUgdGhlIG9ic2VydmF0aW9ucyBhcmUuIEdpdmVuLFxuICAgKiBpdCBwbGFjZXMgdGhlIHN1cmZhY2VzIGFuZCB7QGxpbmsgc2l6ZX0gYW5kIHtAbGluayB3b3JsZH0gZG8gbm90LlxuICAgKi9cbiAgcGxhbmVzPzogUGxhbmVQbGFjZW1lbnQ7XG59XG5cbi8qKlxuICogSW1hZ2UgcHggYW5kIHNsaWNlcyDihpIgd29ybGQsIHNsaWNlIGJ5IHNsaWNlOiBgeCAqIHNjYWxlWzBdICsgb2Zmc2V0WzBdYCwgYHkgKiBzY2FsZVsxXSArXG4gKiBvZmZzZXRbMV1gLCBhbmQgc2xpY2UgayBhdCBgeltrXSArIG9mZnNldFsyXWAgKHVuc3RyZXRjaGVkKTogYmV0d2VlbiB0d28gc2xpY2VzIGluIHByb3BvcnRpb24sXG4gKiBwYXN0IHRoZSBlbmRzIGJ5IHRoZSBuZWFyZXN0IHNwYWNpbmcgKGEgc3VyZmFjZSdzIGNhcHMsIGhhbGYgYSBzbGljZSBvdXQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYW5lUGxhY2VtZW50IHtcbiAgLyoqIEVhY2ggc2xpY2UncyB6LCBieSBzbGljZSBpbmRleCwgYXNjZW5kaW5nLiAqL1xuICB6OiByZWFkb25seSBudW1iZXJbXTtcbiAgc2NhbGU6IFtudW1iZXIsIG51bWJlcl07XG4gIG9mZnNldDogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKipcbiAqIEltYWdlIHB4IC8gc2xpY2UgY29vcmRpbmF0ZXMg4oaSIHRoZSB2b2x1bWUncyBjZW50cmVkIHdvcmxkIGJveDogcGl4ZWwgeCBvZiBhIGB3YC13aWRlIGltYWdlXG4gKiBzcGFucyB0aGUgYm94J3Mgd2lkdGgsIHNsaWNlIGsgc2l0cyBhdCB0aGUgbWlkZGxlIG9mIGl0cyBzaGFyZSBvZiB0aGUgYm94J3MgZGVwdGguIFdpdGhcbiAqIHtAbGluayBWb2x1bWVGcmFtZS5wbGFuZXN9LCBhcyB0aGV5IHBsYWNlIHRoZW0gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvV29ybGQodmVydGljZXM6IEZsb2F0MzJBcnJheSwgZnJhbWU6IFZvbHVtZUZyYW1lKTogRmxvYXQzMkFycmF5IHtcbiAgaWYgKGZyYW1lLnBsYW5lcykgcmV0dXJuIHBsYW5lc1RvV29ybGQodmVydGljZXMsIGZyYW1lLnBsYW5lcyk7XG4gIGNvbnN0IFt3LCBoLCBkXSA9IGZyYW1lLnNpemU7XG4gIGNvbnN0IFt3dywgd2gsIHdkXSA9IGZyYW1lLndvcmxkO1xuICBjb25zdCBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRpY2VzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICBvdXRbaV0gPSAodmVydGljZXNbaV0gLyB3IC0gMC41KSAqIHd3O1xuICAgIG91dFtpICsgMV0gPSAodmVydGljZXNbaSArIDFdIC8gaCAtIDAuNSkgKiB3aDtcbiAgICBvdXRbaSArIDJdID0gKCh2ZXJ0aWNlc1tpICsgMl0gKyAwLjUpIC8gZCAtIDAuNSkgKiB3ZDtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogSW1hZ2UgcHggLyBzbGljZSBjb29yZGluYXRlcyDihpIgd29ybGQsIGFzIHtAbGluayBQbGFuZVBsYWNlbWVudH0gcGxhY2VzIHRoZW0uICovXG5mdW5jdGlvbiBwbGFuZXNUb1dvcmxkKHZlcnRpY2VzOiBGbG9hdDMyQXJyYXksIHBsYW5lczogUGxhbmVQbGFjZW1lbnQpOiBGbG9hdDMyQXJyYXkge1xuICBjb25zdCB7IHosIHNjYWxlLCBvZmZzZXQgfSA9IHBsYW5lcztcbiAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0aWNlcy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgb3V0W2ldID0gdmVydGljZXNbaV0gKiBzY2FsZVswXSArIG9mZnNldFswXTtcbiAgICBvdXRbaSArIDFdID0gdmVydGljZXNbaSArIDFdICogc2NhbGVbMV0gKyBvZmZzZXRbMV07XG4gICAgb3V0W2kgKyAyXSA9IHNsaWNlWih6LCB2ZXJ0aWNlc1tpICsgMl0pICsgb2Zmc2V0WzJdO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogVGhlIHogb2Ygc2xpY2UgYGtgIChmcmFjdGlvbmFsKTogYmV0d2VlbiB0d28gc2xpY2VzIGluIHByb3BvcnRpb24sIHBhc3QgdGhlIGVuZHMgYnkgdGhlIG5lYXJlc3RcbiAqIHNwYWNpbmcgKG9uZSBzbGljZSBhbG9uZTogYSB1bml0IGFwYXJ0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlWih6OiByZWFkb25seSBudW1iZXJbXSwgazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IHoubGVuZ3RoO1xuICBpZiAoIW4pIHJldHVybiBrO1xuICBpZiAobiA9PT0gMSkgcmV0dXJuIHpbMF0gKyBrO1xuICBjb25zdCBpID0gTWF0aC5taW4obiAtIDIsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IoaykpKTtcbiAgcmV0dXJuIHpbaV0gKyAoayAtIGkpICogKHpbaSArIDFdIC0geltpXSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep the whole scene within the 3D camera's depth range, however close the camera comes.
|
|
3
|
+
*
|
|
4
|
+
* napari-js (0.20) puts the far plane at `4 · distance + 1` from the eye, so the closer the camera
|
|
5
|
+
* (the more one zooms in), the nearer the far plane: zoomed in on a long, flat specimen seen at an
|
|
6
|
+
* angle (a MERFISH section, 9,000 px long), everything farther than four distances is cut away and
|
|
7
|
+
* the canvas goes black past a straight edge — one cannot zoom close to a small part of it. Here the
|
|
8
|
+
* far plane is pushed out to the far side of the scene (`distance + |target| + radius`, the scene
|
|
9
|
+
* centred on the origin as the 3D views centre it), never nearer than napari-js's own; the near
|
|
10
|
+
* plane, the field of view and the view are napari-js's, as are the matrices (copied: napari-js does
|
|
11
|
+
* not export them). Its picking and projections read the same matrix, so they agree.
|
|
12
|
+
*
|
|
13
|
+
* TODO: napari-js should take the scene's extent itself (a far plane from the layers' bounds); this
|
|
14
|
+
* override is removed once it does.
|
|
15
|
+
*
|
|
16
|
+
* Returns the function that restores napari-js's own projection.
|
|
17
|
+
*/
|
|
18
|
+
export function keepSceneInDepth(camera, radius) {
|
|
19
|
+
const original = camera.viewProjection;
|
|
20
|
+
camera.viewProjection = function (vw, vh) {
|
|
21
|
+
const d = this.distance;
|
|
22
|
+
const r = radius();
|
|
23
|
+
const aspect = vh > 0 ? vw / vh : 1;
|
|
24
|
+
const near = Math.max(1e-3, d * 0.05);
|
|
25
|
+
const t = this.target;
|
|
26
|
+
const far = Math.max(d * 4 + 1, r && r > 0 ? d + Math.hypot(t[0], t[1], t[2]) + r * 1.05 : 0);
|
|
27
|
+
return multiply(perspective(this.fov, aspect, near, far), lookAt(this.eye(), t, [0, 1, 0]));
|
|
28
|
+
};
|
|
29
|
+
return () => {
|
|
30
|
+
camera.viewProjection = original;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** The radius of a centred box `[w, h, d]` (half its diagonal). */
|
|
34
|
+
export function boxRadius(w, h, d) {
|
|
35
|
+
return Math.hypot(w, h, d) / 2;
|
|
36
|
+
}
|
|
37
|
+
// ── napari-js's own (src/math/mat4.ts), column-major ─────────────────────────────────
|
|
38
|
+
/** WebGPU-style perspective (clip z in [0,1]). */
|
|
39
|
+
export function perspective(fovy, aspect, near, far) {
|
|
40
|
+
const f = 1 / Math.tan(fovy / 2);
|
|
41
|
+
const m = new Float32Array(16);
|
|
42
|
+
m[0] = f / aspect;
|
|
43
|
+
m[5] = f;
|
|
44
|
+
m[10] = far / (near - far);
|
|
45
|
+
m[11] = -1;
|
|
46
|
+
m[14] = (far * near) / (near - far);
|
|
47
|
+
return m;
|
|
48
|
+
}
|
|
49
|
+
function lookAt(eye, center, up) {
|
|
50
|
+
const fx = center[0] - eye[0];
|
|
51
|
+
const fy = center[1] - eye[1];
|
|
52
|
+
const fz = center[2] - eye[2];
|
|
53
|
+
let rl = 1 / Math.hypot(fx, fy, fz);
|
|
54
|
+
const f = [fx * rl, fy * rl, fz * rl];
|
|
55
|
+
let sx = f[1] * up[2] - f[2] * up[1];
|
|
56
|
+
let sy = f[2] * up[0] - f[0] * up[2];
|
|
57
|
+
let sz = f[0] * up[1] - f[1] * up[0];
|
|
58
|
+
rl = 1 / Math.hypot(sx, sy, sz);
|
|
59
|
+
sx *= rl;
|
|
60
|
+
sy *= rl;
|
|
61
|
+
sz *= rl;
|
|
62
|
+
const ux = sy * f[2] - sz * f[1];
|
|
63
|
+
const uy = sz * f[0] - sx * f[2];
|
|
64
|
+
const uz = sx * f[1] - sy * f[0];
|
|
65
|
+
const m = new Float32Array(16);
|
|
66
|
+
m[0] = sx;
|
|
67
|
+
m[1] = ux;
|
|
68
|
+
m[2] = -f[0];
|
|
69
|
+
m[4] = sy;
|
|
70
|
+
m[5] = uy;
|
|
71
|
+
m[6] = -f[1];
|
|
72
|
+
m[8] = sz;
|
|
73
|
+
m[9] = uz;
|
|
74
|
+
m[10] = -f[2];
|
|
75
|
+
m[12] = -(sx * eye[0] + sy * eye[1] + sz * eye[2]);
|
|
76
|
+
m[13] = -(ux * eye[0] + uy * eye[1] + uz * eye[2]);
|
|
77
|
+
m[14] = f[0] * eye[0] + f[1] * eye[1] + f[2] * eye[2];
|
|
78
|
+
m[15] = 1;
|
|
79
|
+
return m;
|
|
80
|
+
}
|
|
81
|
+
function multiply(a, b) {
|
|
82
|
+
const out = new Float32Array(16);
|
|
83
|
+
for (let c = 0; c < 4; c++) {
|
|
84
|
+
for (let r = 0; r < 4; r++) {
|
|
85
|
+
let sum = 0;
|
|
86
|
+
for (let k = 0; k < 4; k++)
|
|
87
|
+
sum += a[k * 4 + r] * b[c * 4 + k];
|
|
88
|
+
out[c * 4 + r] = sum;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLWNhbWVyYS1kZXB0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9uYXBhcmktY2FtZXJhLWRlcHRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQWdCLEVBQUUsTUFBMkI7SUFDNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN2QyxNQUFNLENBQUMsY0FBYyxHQUFHLFVBQTBCLEVBQVUsRUFBRSxFQUFVO1FBQ3RFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUYsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQWlDLENBQUM7SUFDbEMsT0FBTyxHQUFHLEVBQUU7UUFDVixNQUFNLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztJQUNuQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsd0ZBQXdGO0FBRXhGLGtEQUFrRDtBQUNsRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVksRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLEdBQVc7SUFDakYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNwQyxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxHQUFzQixFQUFFLE1BQXlCLEVBQUUsRUFBcUI7SUFDdEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNULEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDVCxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ1QsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNWLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNWLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLENBQWUsRUFBRSxDQUFlO0lBQ2hELE1BQU0sR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9ELEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FtZXJhM0QgfSBmcm9tICduYXBhcmktanMnO1xuXG4vKipcbiAqIEtlZXAgdGhlIHdob2xlIHNjZW5lIHdpdGhpbiB0aGUgM0QgY2FtZXJhJ3MgZGVwdGggcmFuZ2UsIGhvd2V2ZXIgY2xvc2UgdGhlIGNhbWVyYSBjb21lcy5cbiAqXG4gKiBuYXBhcmktanMgKDAuMjApIHB1dHMgdGhlIGZhciBwbGFuZSBhdCBgNCDCtyBkaXN0YW5jZSArIDFgIGZyb20gdGhlIGV5ZSwgc28gdGhlIGNsb3NlciB0aGUgY2FtZXJhXG4gKiAodGhlIG1vcmUgb25lIHpvb21zIGluKSwgdGhlIG5lYXJlciB0aGUgZmFyIHBsYW5lOiB6b29tZWQgaW4gb24gYSBsb25nLCBmbGF0IHNwZWNpbWVuIHNlZW4gYXQgYW5cbiAqIGFuZ2xlIChhIE1FUkZJU0ggc2VjdGlvbiwgOSwwMDAgcHggbG9uZyksIGV2ZXJ5dGhpbmcgZmFydGhlciB0aGFuIGZvdXIgZGlzdGFuY2VzIGlzIGN1dCBhd2F5IGFuZFxuICogdGhlIGNhbnZhcyBnb2VzIGJsYWNrIHBhc3QgYSBzdHJhaWdodCBlZGdlIOKAlCBvbmUgY2Fubm90IHpvb20gY2xvc2UgdG8gYSBzbWFsbCBwYXJ0IG9mIGl0LiBIZXJlIHRoZVxuICogZmFyIHBsYW5lIGlzIHB1c2hlZCBvdXQgdG8gdGhlIGZhciBzaWRlIG9mIHRoZSBzY2VuZSAoYGRpc3RhbmNlICsgfHRhcmdldHwgKyByYWRpdXNgLCB0aGUgc2NlbmVcbiAqIGNlbnRyZWQgb24gdGhlIG9yaWdpbiBhcyB0aGUgM0Qgdmlld3MgY2VudHJlIGl0KSwgbmV2ZXIgbmVhcmVyIHRoYW4gbmFwYXJpLWpzJ3Mgb3duOyB0aGUgbmVhclxuICogcGxhbmUsIHRoZSBmaWVsZCBvZiB2aWV3IGFuZCB0aGUgdmlldyBhcmUgbmFwYXJpLWpzJ3MsIGFzIGFyZSB0aGUgbWF0cmljZXMgKGNvcGllZDogbmFwYXJpLWpzIGRvZXNcbiAqIG5vdCBleHBvcnQgdGhlbSkuIEl0cyBwaWNraW5nIGFuZCBwcm9qZWN0aW9ucyByZWFkIHRoZSBzYW1lIG1hdHJpeCwgc28gdGhleSBhZ3JlZS5cbiAqXG4gKiBUT0RPOiBuYXBhcmktanMgc2hvdWxkIHRha2UgdGhlIHNjZW5lJ3MgZXh0ZW50IGl0c2VsZiAoYSBmYXIgcGxhbmUgZnJvbSB0aGUgbGF5ZXJzJyBib3VuZHMpOyB0aGlzXG4gKiBvdmVycmlkZSBpcyByZW1vdmVkIG9uY2UgaXQgZG9lcy5cbiAqXG4gKiBSZXR1cm5zIHRoZSBmdW5jdGlvbiB0aGF0IHJlc3RvcmVzIG5hcGFyaS1qcydzIG93biBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcFNjZW5lSW5EZXB0aChjYW1lcmE6IENhbWVyYTNELCByYWRpdXM6ICgpID0+IG51bWJlciB8IG51bGwpOiAoKSA9PiB2b2lkIHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBjYW1lcmEudmlld1Byb2plY3Rpb247XG4gIGNhbWVyYS52aWV3UHJvamVjdGlvbiA9IGZ1bmN0aW9uICh0aGlzOiBDYW1lcmEzRCwgdnc6IG51bWJlciwgdmg6IG51bWJlcik6IEZsb2F0MzJBcnJheSB7XG4gICAgY29uc3QgZCA9IHRoaXMuZGlzdGFuY2U7XG4gICAgY29uc3QgciA9IHJhZGl1cygpO1xuICAgIGNvbnN0IGFzcGVjdCA9IHZoID4gMCA/IHZ3IC8gdmggOiAxO1xuICAgIGNvbnN0IG5lYXIgPSBNYXRoLm1heCgxZS0zLCBkICogMC4wNSk7XG4gICAgY29uc3QgdCA9IHRoaXMudGFyZ2V0O1xuICAgIGNvbnN0IGZhciA9IE1hdGgubWF4KGQgKiA0ICsgMSwgciAmJiByID4gMCA/IGQgKyBNYXRoLmh5cG90KHRbMF0sIHRbMV0sIHRbMl0pICsgciAqIDEuMDUgOiAwKTtcbiAgICByZXR1cm4gbXVsdGlwbHkocGVyc3BlY3RpdmUodGhpcy5mb3YsIGFzcGVjdCwgbmVhciwgZmFyKSwgbG9va0F0KHRoaXMuZXllKCksIHQsIFswLCAxLCAwXSkpO1xuICB9IGFzIHR5cGVvZiBjYW1lcmEudmlld1Byb2plY3Rpb247XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2FtZXJhLnZpZXdQcm9qZWN0aW9uID0gb3JpZ2luYWw7XG4gIH07XG59XG5cbi8qKiBUaGUgcmFkaXVzIG9mIGEgY2VudHJlZCBib3ggYFt3LCBoLCBkXWAgKGhhbGYgaXRzIGRpYWdvbmFsKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib3hSYWRpdXModzogbnVtYmVyLCBoOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmh5cG90KHcsIGgsIGQpIC8gMjtcbn1cblxuLy8g4pSA4pSAIG5hcGFyaS1qcydzIG93biAoc3JjL21hdGgvbWF0NC50cyksIGNvbHVtbi1tYWpvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFdlYkdQVS1zdHlsZSBwZXJzcGVjdGl2ZSAoY2xpcCB6IGluIFswLDFdKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZXJzcGVjdGl2ZShmb3Z5OiBudW1iZXIsIGFzcGVjdDogbnVtYmVyLCBuZWFyOiBudW1iZXIsIGZhcjogbnVtYmVyKTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3QgZiA9IDEgLyBNYXRoLnRhbihmb3Z5IC8gMik7XG4gIGNvbnN0IG0gPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbiAgbVswXSA9IGYgLyBhc3BlY3Q7XG4gIG1bNV0gPSBmO1xuICBtWzEwXSA9IGZhciAvIChuZWFyIC0gZmFyKTtcbiAgbVsxMV0gPSAtMTtcbiAgbVsxNF0gPSAoZmFyICogbmVhcikgLyAobmVhciAtIGZhcik7XG4gIHJldHVybiBtO1xufVxuXG5mdW5jdGlvbiBsb29rQXQoZXllOiByZWFkb25seSBudW1iZXJbXSwgY2VudGVyOiByZWFkb25seSBudW1iZXJbXSwgdXA6IHJlYWRvbmx5IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3QgZnggPSBjZW50ZXJbMF0gLSBleWVbMF07XG4gIGNvbnN0IGZ5ID0gY2VudGVyWzFdIC0gZXllWzFdO1xuICBjb25zdCBmeiA9IGNlbnRlclsyXSAtIGV5ZVsyXTtcbiAgbGV0IHJsID0gMSAvIE1hdGguaHlwb3QoZngsIGZ5LCBmeik7XG4gIGNvbnN0IGYgPSBbZnggKiBybCwgZnkgKiBybCwgZnogKiBybF07XG4gIGxldCBzeCA9IGZbMV0gKiB1cFsyXSAtIGZbMl0gKiB1cFsxXTtcbiAgbGV0IHN5ID0gZlsyXSAqIHVwWzBdIC0gZlswXSAqIHVwWzJdO1xuICBsZXQgc3ogPSBmWzBdICogdXBbMV0gLSBmWzFdICogdXBbMF07XG4gIHJsID0gMSAvIE1hdGguaHlwb3Qoc3gsIHN5LCBzeik7XG4gIHN4ICo9IHJsO1xuICBzeSAqPSBybDtcbiAgc3ogKj0gcmw7XG4gIGNvbnN0IHV4ID0gc3kgKiBmWzJdIC0gc3ogKiBmWzFdO1xuICBjb25zdCB1eSA9IHN6ICogZlswXSAtIHN4ICogZlsyXTtcbiAgY29uc3QgdXogPSBzeCAqIGZbMV0gLSBzeSAqIGZbMF07XG4gIGNvbnN0IG0gPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbiAgbVswXSA9IHN4O1xuICBtWzFdID0gdXg7XG4gIG1bMl0gPSAtZlswXTtcbiAgbVs0XSA9IHN5O1xuICBtWzVdID0gdXk7XG4gIG1bNl0gPSAtZlsxXTtcbiAgbVs4XSA9IHN6O1xuICBtWzldID0gdXo7XG4gIG1bMTBdID0gLWZbMl07XG4gIG1bMTJdID0gLShzeCAqIGV5ZVswXSArIHN5ICogZXllWzFdICsgc3ogKiBleWVbMl0pO1xuICBtWzEzXSA9IC0odXggKiBleWVbMF0gKyB1eSAqIGV5ZVsxXSArIHV6ICogZXllWzJdKTtcbiAgbVsxNF0gPSBmWzBdICogZXllWzBdICsgZlsxXSAqIGV5ZVsxXSArIGZbMl0gKiBleWVbMl07XG4gIG1bMTVdID0gMTtcbiAgcmV0dXJuIG07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGx5KGE6IEZsb2F0MzJBcnJheSwgYjogRmxvYXQzMkFycmF5KTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3Qgb3V0ID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG4gIGZvciAobGV0IGMgPSAwOyBjIDwgNDsgYysrKSB7XG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCA0OyByKyspIHtcbiAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCA0OyBrKyspIHN1bSArPSBhW2sgKiA0ICsgcl0gKiBiW2MgKiA0ICsga107XG4gICAgICBvdXRbYyAqIDQgKyByXSA9IHN1bTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
|
|
@@ -80,4 +80,4 @@ export class LoadingBadgeState {
|
|
|
80
80
|
], [...this.tasks.values()]);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLWxvYWRpbmctc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLWxvYWRpbmctc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFLNUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUE5QjtRQUNVLFNBQUksR0FBdUIsSUFBSSxDQUFDO1FBQ2hDLFVBQUssR0FBOEIsSUFBSSxDQUFDO1FBQy9CLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUNuRCxlQUFVLEdBQXNCLEVBQUUsQ0FBQztRQUNuQyxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ04sVUFBSyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBaUVyRCxDQUFDO0lBL0RDLHlFQUF5RTtJQUN6RSxNQUFNLENBQUMsSUFBaUI7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixLQUFLLENBQUMsTUFBcUI7UUFDekIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLEtBQUssSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTztZQUNwRCxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzJCQUN1QjtJQUN2QixTQUFTLENBQUMsT0FBZTtRQUN2QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsYUFBYSxDQUFDLE1BQXlCO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxxRkFBcUY7SUFDckYsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGtHQUFrRztJQUNsRyxLQUFLO1FBQ0gsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDdkIsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDWjtZQUNFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLEdBQUcsSUFBSSxDQUFDLFVBQVU7U0FDbkIsRUFDRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUN6QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmFwYXJpTG9hZGluZ0JhZGdlIH0gZnJvbSAnLi9uYXBhcmktbG9hZGluZy1iYWRnZSc7XG5cbi8qKiBXaGF0IHRoZSBzZXJ2aWNlIGl0c2VsZiBjb3VudHMgb24gdGhlIGJhZGdlOyB0aGUgc3BhdGlhbCB0aWxlIGxheWVycyByZXBvcnQgdGhlaXIgb3duIG5hbWVzLiAqL1xuZXhwb3J0IHR5cGUgTG9hZGluZ1NvdXJjZSA9ICdJbWFnZScgfCAnT2JzZXJ2YXRpb25zJyB8ICdUcmFuc2NyaXB0cycgfCAnQ2VsbHMnO1xuXG4vKipcbiAqIFwieCByZWxvYWRpbmfigKZcIiBhdCB0aGUgYm90dG9tIG9mIHRoZSBjYW52YXMsIGFnZ3JlZ2F0ZWQgb3ZlciBldmVyeXRoaW5nIHRoYXQgbG9hZHMgaW50byBvbmVcbiAqIHNjZW5lOiBpbWFnZSB0aWxlcyAodGhlIHRpbGUgY2xpZW50KSwgb2JzZXJ2YXRpb24gY29sb3VyaW5ncyAodGhlIHNwYXRpYWwgc2NlbmVzKSBhbmQgdGhlXG4gKiBzcGF0aWFsIHRpbGUgbGF5ZXJzJyBvd24gbG9hZHMgKHdoaWNoIHJlcG9ydCBhIGxpc3Qgb2YgbGF5ZXIgbmFtZXMpLlxuICpcbiAqIEVhY2ggbG9hZCBpcyBhIHtAbGluayBiZWdpbn0gdGhhdCBoYW5kcyBiYWNrIGl0cyBvd24gYGVuZGAuIHtAbGluayByZXNldH0gc3RhcnRzIGEgbmV3IHNjZW5lOlxuICogdGhlIGNvdW50cyBhcmUgZHJvcHBlZCwgYW5kIGFuIGBlbmRgIGZyb20gYSBsb2FkIHRoYXQgYmVnYW4gYmVmb3JlIGl0IGlzIGEgbm8tb3AsIHNvIGEgbG9hZFxuICogdGhhdCBzZXR0bGVzIGFmdGVyIGEgcmUtcGxvdCBjYW4gbmVpdGhlciB1bi1jb3VudCB0aGUgbmV3IHNjZW5lJ3Mgd29yayBub3IgZHJpdmUgYSBjb3VudCBiZWxvd1xuICogemVybyAod2hpY2ggaGlkIHRoZSBuZXh0IHNjZW5lJ3MgXCJPYnNlcnZhdGlvbnMgcmVsb2FkaW5n4oCmXCIgdW50aWwgYSBzZWNvbmQgbG9hZCBvdmVybGFwcGVkIGl0KS5cbiAqXG4gKiBBIHtAbGluayBiZWdpblRhc2t9IGlzIHdvcmsgdGhhdCBvdXRsaXZlcyBhIHNjZW5lIChhIHJlZ2lvbidzIDNEIHJlY29uc3RydWN0aW9uLCBidWlsdCBmb3JcbiAqIHdoaWNoZXZlciB2b2x1bWUgaXMgb24gc2NyZWVuIHdoZW4gaXQgaXMgZG9uZSk6IGl0cyBtZXNzYWdlIHN0YXlzIGFjcm9zcyBhIHJlc2V0LlxuICovXG5leHBvcnQgY2xhc3MgTG9hZGluZ0JhZGdlU3RhdGUge1xuICBwcml2YXRlIGhvc3Q6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFkZ2U6IE5hcGFyaUxvYWRpbmdCYWRnZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvdW50cyA9IG5ldyBNYXA8TG9hZGluZ1NvdXJjZSwgbnVtYmVyPigpO1xuICBwcml2YXRlIHRpbGVMYXllcnM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZ2VuZXJhdGlvbiA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFza3MgPSBuZXcgTWFwPHN5bWJvbCwgc3RyaW5nPigpO1xuXG4gIC8qKiBUaGUgZWxlbWVudCB0aGUgYmFkZ2UgaXMgZHJhd24gaW50byAodGhlIHBsb3QgaG9zdCk7IHNldCBwZXIgcGxvdC4gKi9cbiAgYXR0YWNoKGhvc3Q6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICBpZiAodGhpcy50YXNrcy5zaXplKSB0aGlzLnNob3coKTtcbiAgfVxuXG4gIC8qKiBPbmUgbG9hZCBvZiBgc291cmNlYCBzdGFydGVkOyBjYWxsIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBvbmNlIGl0IHNldHRsZXMuICovXG4gIGJlZ2luKHNvdXJjZTogTG9hZGluZ1NvdXJjZSk6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IGdlbmVyYXRpb24gPSB0aGlzLmdlbmVyYXRpb247XG4gICAgdGhpcy5jb3VudHMuc2V0KHNvdXJjZSwgKHRoaXMuY291bnRzLmdldChzb3VyY2UpID8/IDApICsgMSk7XG4gICAgdGhpcy5zaG93KCk7XG4gICAgbGV0IGVuZGVkID0gZmFsc2U7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChlbmRlZCB8fCBnZW5lcmF0aW9uICE9PSB0aGlzLmdlbmVyYXRpb24pIHJldHVybjtcbiAgICAgIGVuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY291bnRzLnNldChzb3VyY2UsICh0aGlzLmNvdW50cy5nZXQoc291cmNlKSA/PyAwKSAtIDEpO1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBBIHRhc2sgc3RhcnRlZCwgc2hvd24gYnkgaXRzIGBtZXNzYWdlYCAoXCJCdWlsZGluZyBIUEYgaW4gM0TigKZcIik7IGNhbGwgdGhlIHJldHVybmVkIGZ1bmN0aW9uXG4gICAqICBvbmNlIGl0IHNldHRsZXMuICovXG4gIGJlZ2luVGFzayhtZXNzYWdlOiBzdHJpbmcpOiAoKSA9PiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IFN5bWJvbChtZXNzYWdlKTtcbiAgICB0aGlzLnRhc2tzLnNldChpZCwgbWVzc2FnZSk7XG4gICAgdGhpcy5zaG93KCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhc2tzLmRlbGV0ZShpZCkpIHRoaXMuc2hvdygpO1xuICAgIH07XG4gIH1cblxuICAvKiogVGhlIHNwYXRpYWwgdGlsZSBsYXllcnMgc3RpbGwgbG9hZGluZyAodGhlaXIgb3duIG5hbWVzLCBpbiB0aGVpciBvcmRlcikuICovXG4gIHNldFRpbGVMYXllcnMobGF5ZXJzOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMudGlsZUxheWVycyA9IGxheWVycztcbiAgICB0aGlzLnNob3coKTtcbiAgfVxuXG4gIC8qKiBUaGUgdGV4dCB0aGUgYmFkZ2UgaGFzIHNldCAoc2hvd24sIG9yIGFib3V0IHRvIGJlIG9uY2UgdGhlIHNob3cgZGVsYXkgcGFzc2VzKS4gKi9cbiAgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYWRnZT8udGV4dCA/PyAnJztcbiAgfVxuXG4gIC8qKiBBIG5ldyBzY2VuZTogZm9yZ2V0IGV2ZXJ5IGNvdW50IGFuZCByZW1vdmUgdGhlIGJhZGdlICh0YXNrcyBzaG93IGFnYWluIG9uIHRoZSBuZXh0IGF0dGFjaCkuICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2VuZXJhdGlvbisrO1xuICAgIHRoaXMuY291bnRzLmNsZWFyKCk7XG4gICAgdGhpcy50aWxlTGF5ZXJzID0gW107XG4gICAgdGhpcy5iYWRnZT8uZGVzdHJveSgpO1xuICAgIHRoaXMuYmFkZ2UgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5ob3N0KSByZXR1cm47XG4gICAgdGhpcy5iYWRnZSA/Pz0gbmV3IE5hcGFyaUxvYWRpbmdCYWRnZSh0aGlzLmhvc3QpO1xuICAgIHRoaXMuYmFkZ2Uuc2V0KFxuICAgICAgW1xuICAgICAgICAuLi4oKHRoaXMuY291bnRzLmdldCgnSW1hZ2UnKSA/PyAwKSA+IDAgPyBbJ0ltYWdlJ10gOiBbXSksXG4gICAgICAgIC4uLigodGhpcy5jb3VudHMuZ2V0KCdPYnNlcnZhdGlvbnMnKSA/PyAwKSA+IDAgPyBbJ09ic2VydmF0aW9ucyddIDogW10pLFxuICAgICAgICAuLi50aGlzLnRpbGVMYXllcnMsXG4gICAgICBdLFxuICAgICAgWy4uLnRoaXMudGFza3MudmFsdWVzKCldLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|