@jax-data-science/sci-image-visualizer 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +7 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +1 -1
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +11 -7
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +20 -3
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +28 -5
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +9 -2
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +5 -2
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +81 -1
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +115 -4
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +15 -3
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +18 -7
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +38 -8
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +1 -1
- package/esm2022/lib/models/class-preset.mjs +1 -1
- package/esm2022/lib/models/polygon-factory.mjs +17 -1
- package/esm2022/lib/models/region-geojson.mjs +44 -6
- package/esm2022/lib/models/region.mjs +1 -1
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
- package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +77 -13
- package/esm2022/lib/region-editor/region-editor.component.mjs +527 -42
- package/esm2022/lib/region-editor/region-metrics.mjs +20 -2
- package/esm2022/lib/region-editor/region-persistence.service.mjs +36 -10
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +24 -8
- package/esm2022/lib/region-overlay/region-geometry.mjs +3 -3
- package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
- package/esm2022/lib/region-overlay/region-style.mjs +97 -0
- package/esm2022/lib/region-source/http-region-source.mjs +104 -0
- package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
- package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
- package/esm2022/lib/region-source/region-source.mjs +67 -0
- package/esm2022/lib/region-source/region-tiles.mjs +708 -0
- package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
- package/esm2022/lib/routing-visualizer.service.mjs +418 -22
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/store/class-color.util.mjs +10 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-scope-cache.mjs +5 -1
- package/esm2022/lib/store/region-source-scope.mjs +171 -0
- package/esm2022/lib/store/region-store.service.mjs +724 -12
- package/esm2022/lib/store/visualizer-store.service.mjs +33 -6
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +8 -2
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +55 -15
- package/esm2022/lib/toolbar/toolbar.component.mjs +19 -5
- package/esm2022/lib/visualizer/region-load.mjs +67 -4
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +128 -6
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs} +7239 -1153
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs} +4 -4
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +3 -3
- package/fesm2022/region-source.worker.js +1067 -0
- package/index.d.ts +6 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/region-editor-api.contract.d.ts +84 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/visualizer.contract.d.ts +10 -0
- package/lib/contracts/viz-config.d.ts +8 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -2
- package/lib/implementations/napari-js/napari-loading-state.d.ts +8 -1
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +6 -1
- package/lib/implementations/napari-js/napari-scene.d.ts +33 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +3 -1
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +48 -0
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +45 -1
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +4 -3
- package/lib/implementations/osd/osd-region-overlay.d.ts +10 -3
- package/lib/implementations/tile-server/tile-protocol.d.ts +3 -0
- package/lib/models/class-preset.d.ts +7 -0
- package/lib/models/polygon-factory.d.ts +5 -0
- package/lib/models/region-geojson.d.ts +40 -0
- package/lib/models/region.d.ts +19 -0
- package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
- package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +36 -6
- package/lib/region-editor/region-editor.component.d.ts +133 -17
- package/lib/region-editor/region-metrics.d.ts +8 -0
- package/lib/region-editor/region-persistence.service.d.ts +12 -4
- package/lib/region-editor/region-table/region-table.component.d.ts +10 -4
- package/lib/region-overlay/region-geometry.d.ts +4 -3
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-source/http-region-source.d.ts +45 -0
- package/lib/region-source/region-source-ops.d.ts +89 -0
- package/lib/region-source/region-source-worker.d.ts +7 -0
- package/lib/region-source/region-source.d.ts +82 -0
- package/lib/region-source/region-tiles.d.ts +289 -0
- package/lib/region-source/worker-region-source.d.ts +65 -0
- package/lib/routing-visualizer.service.d.ts +138 -1
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/store/class-color.util.d.ts +6 -3
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-scope-cache.d.ts +2 -0
- package/lib/store/region-source-scope.d.ts +68 -0
- package/lib/store/region-store.service.d.ts +206 -2
- package/lib/store/visualizer-store.service.d.ts +10 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +3 -1
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +20 -9
- package/lib/toolbar/toolbar.component.d.ts +9 -2
- package/lib/visualizer/region-load.d.ts +23 -4
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +31 -0
- package/package.json +2 -2
- package/src/lib/assets/slice.svg +23 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +0 -1
|
@@ -2,6 +2,7 @@ import { Injectable, Optional, Inject } from '@angular/core';
|
|
|
2
2
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
3
|
import { debounceTime } from 'rxjs/operators';
|
|
4
4
|
import { defaultPresetSet } from '../models/class-preset';
|
|
5
|
+
import { findPreset, presetKey } from './class-color.util';
|
|
5
6
|
import { PREFERENCES_PORT } from '../contracts/ports/preferences.port';
|
|
6
7
|
import { DEFAULT_SPATIAL_VIEW } from '../contracts/display-types';
|
|
7
8
|
import { COLORMAP_OPTIONS } from '../plot.utilities';
|
|
@@ -56,6 +57,8 @@ export class VisualizerStore {
|
|
|
56
57
|
// PreferencesPort (app-side adapter → jit-service). getClassificationColors()
|
|
57
58
|
// below stays as a name→colour view for the backends' region renderers.
|
|
58
59
|
this.presetSet = defaultPresetSet();
|
|
60
|
+
/** Session-only class colours from imported files (see PresetSet.importedColors). */
|
|
61
|
+
this.importedColors = {};
|
|
59
62
|
this.presetSet$ = new BehaviorSubject(this.presetSet);
|
|
60
63
|
this.savePresets$ = new Subject();
|
|
61
64
|
this.presetsLoaded = false;
|
|
@@ -85,7 +88,7 @@ export class VisualizerStore {
|
|
|
85
88
|
next: (set) => {
|
|
86
89
|
if (set && Array.isArray(set.classes) && set.classes.length > 0) {
|
|
87
90
|
this.presetSet = this.normalizePresetSet(set);
|
|
88
|
-
this.
|
|
91
|
+
this.emitPresetSet();
|
|
89
92
|
}
|
|
90
93
|
this.presetsLoaded = true;
|
|
91
94
|
},
|
|
@@ -94,6 +97,10 @@ export class VisualizerStore {
|
|
|
94
97
|
},
|
|
95
98
|
});
|
|
96
99
|
}
|
|
100
|
+
/** Publish the preset set with this session's imported class colours. */
|
|
101
|
+
emitPresetSet() {
|
|
102
|
+
this.presetSet$.next({ ...this.presetSet, importedColors: this.importedColors });
|
|
103
|
+
}
|
|
97
104
|
normalizePresetSet(set) {
|
|
98
105
|
const defaults = defaultPresetSet();
|
|
99
106
|
// Clone the nested arrays/objects so outside callers can't mutate the store's
|
|
@@ -298,14 +305,34 @@ export class VisualizerStore {
|
|
|
298
305
|
fallbackPalette: [...this.presetSet.fallbackPalette],
|
|
299
306
|
autoPromote: this.presetSet.autoPromote,
|
|
300
307
|
matchMode: this.presetSet.matchMode,
|
|
308
|
+
importedColors: { ...this.importedColors },
|
|
301
309
|
};
|
|
302
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Remember the class colours an imported file carried (label → colour), so its regions keep
|
|
313
|
+
* them: a class with a preset keeps the preset's colour, and the latest import wins for the
|
|
314
|
+
* rest. Not persisted.
|
|
315
|
+
*/
|
|
316
|
+
rememberImportedClassColors(colors) {
|
|
317
|
+
let changed = false;
|
|
318
|
+
for (const [label, color] of colors) {
|
|
319
|
+
if (!label || findPreset(label, this.presetSet))
|
|
320
|
+
continue;
|
|
321
|
+
const key = presetKey(this.presetSet, label);
|
|
322
|
+
if (this.importedColors[key] === color)
|
|
323
|
+
continue;
|
|
324
|
+
this.importedColors = { ...this.importedColors, [key]: color };
|
|
325
|
+
changed = true;
|
|
326
|
+
}
|
|
327
|
+
if (changed)
|
|
328
|
+
this.emitPresetSet();
|
|
329
|
+
}
|
|
303
330
|
getPresetSet$() {
|
|
304
331
|
return this.presetSet$.asObservable();
|
|
305
332
|
}
|
|
306
333
|
setPresetSet(set) {
|
|
307
334
|
this.presetSet = this.normalizePresetSet(set);
|
|
308
|
-
this.
|
|
335
|
+
this.emitPresetSet();
|
|
309
336
|
this.savePresetsNow(); // explicit bulk apply/import → persist immediately
|
|
310
337
|
}
|
|
311
338
|
/** Add or update a class (keyed by exact stored `name`). */
|
|
@@ -317,17 +344,17 @@ export class VisualizerStore {
|
|
|
317
344
|
else
|
|
318
345
|
classes.push({ ...preset });
|
|
319
346
|
this.presetSet = { ...this.presetSet, classes };
|
|
320
|
-
this.
|
|
347
|
+
this.emitPresetSet();
|
|
321
348
|
this.queuePresetSave();
|
|
322
349
|
}
|
|
323
350
|
removeClass(name) {
|
|
324
351
|
this.presetSet = { ...this.presetSet, classes: this.presetSet.classes.filter((c) => c.name !== name) };
|
|
325
|
-
this.
|
|
352
|
+
this.emitPresetSet();
|
|
326
353
|
this.queuePresetSave();
|
|
327
354
|
}
|
|
328
355
|
resetPresets() {
|
|
329
356
|
this.presetSet = defaultPresetSet();
|
|
330
|
-
this.
|
|
357
|
+
this.emitPresetSet();
|
|
331
358
|
this.savePresetsNow(); // explicit reset → persist immediately
|
|
332
359
|
}
|
|
333
360
|
// ── spatial-omics view state ──────────────────────────────────────────
|
|
@@ -360,4 +387,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
360
387
|
type: Inject,
|
|
361
388
|
args: [PREFERENCES_PORT]
|
|
362
389
|
}] }] });
|
|
363
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsaXplci1zdG9yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zdG9yZS92aXN1YWxpemVyLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQTBCLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLHFDQUFxQyxDQUFDO0FBSXhGLE9BQU8sRUFBRSxvQkFBb0IsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFckQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsTUFBTSxPQUFPLGVBQWU7SUFtRDFCLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsMkJBQTJCO0lBQzNCLFlBQW1FLFlBQW9DLElBQUk7UUFBeEMsY0FBUyxHQUFULFNBQVMsQ0FBK0I7UUFyRDNHLHdFQUF3RTtRQUN4RSw4RUFBOEU7UUFDOUUscURBQXFEO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FDOUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQzFHLENBQUM7UUFDZSxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLEtB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LENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLHVDQUF1QztJQUNoRSxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLGNBQWMsQ0FBQyxPQUFrQztRQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxhQUFhLENBQUMsSUFBbUI7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0E3VlUsZUFBZSxrQkFzRE0sZ0JBQWdCO2tIQXREckMsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBdURuQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDbGFzc1ByZXNldCwgUHJlc2V0U2V0LCBkZWZhdWx0UHJlc2V0U2V0IH0gZnJvbSAnLi4vbW9kZWxzL2NsYXNzLXByZXNldCc7XG5pbXBvcnQgeyBQUkVGRVJFTkNFU19QT1JULCBQcmVmZXJlbmNlc1BvcnQgfSBmcm9tICcuLi9jb250cmFjdHMvcG9ydHMvcHJlZmVyZW5jZXMucG9ydCc7XG5cbmltcG9ydCB7IElJbWFnZU1ldGFkYXRhIH0gZnJvbSAnLi4vY29udHJhY3RzL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IElDaGFubmVsU3RhdGUgfSBmcm9tICcuLi9jb250cmFjdHMvY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0JztcbmltcG9ydCB7IERFRkFVTFRfU1BBVElBTF9WSUVXLCBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgQ09MT1JNQVBfT1BUSU9OUyB9IGZyb20gJy4uL3Bsb3QudXRpbGl0aWVzJztcblxuLyoqXG4gKiBCYWNrZW5kLW5ldXRyYWwgc3RvcmUgZm9yIHRoZSAqKnZpc3VhbGl6YXRpb24gc2Vzc2lvbioqIOKAlCB0aGUgc3RhdGUgdGhhdFxuICogZGVzY3JpYmVzICpob3cqIHRoZSBjdXJyZW50IGltYWdlIGlzIGJlaW5nIHZpZXdlZCwgaW5kZXBlbmRlbnQgb2Ygd2hpY2hcbiAqIHJlbmRlcmluZyBiYWNrZW5kIChQbG90bHksIE9wZW5TZWFkcmFnb24gb3IgbmFwYXJpLWpzKSBpcyBvbiBzY3JlZW46XG4gKlxuICogIC0gdGhlIGFjdGl2ZSBjb2xvcm1hcCAvIExVVCBhbmQgaXRzIHJldmVyc2Utc2NhbGUgdG9nZ2xlLFxuICogIC0gdGhlIGN1cnJlbnQgaW1hZ2UncyBwaHlzaWNhbCBtZXRhZGF0YSAowrVtL3BpeGVsIGV0Yy4pIGFuZCBpdHMgcGVyLWNoYW5uZWxcbiAqICAgIGRpc3BsYXkgc3RhdGUgKHdpbmRvdywgZ2FtbWEsIHRpbnQsIHZpc2liaWxpdHk7IGdyYXlzY2FsZSAvIGludmVydCksXG4gKiAgLSB0aGUgYW5ub3RhdGlvbi1jbGFzcyBwcmVzZXRzICh0aGUgY2xhc3NpZmljYXRpb24gbGFiZWwg4oaSIGNvbG91ciBtYXApLFxuICogIC0gdGhlIHNwYXRpYWwtb21pY3MgdmlldyBzdGF0ZSxcbiAqICAtIHdoaWNoIG9uLWNhbnZhcyB0b29sIGlzIGN1cnJlbnRseSBhY3RpdmUuXG4gKlxuICogRXZlcnkgYmFja2VuZCByZWFkcyBhbmQgd3JpdGVzIHRoaXMgc2luZ2xlIGluc3RhbmNlIChvbmUgcGVyIHZpc3VhbGl6ZXIgY2hhaW4pLFxuICogc28gdGhleSBzdGF5IGluIGxvY2stc3RlcCByZWdhcmRsZXNzIG9mIHdoaWNoIG9uZSBpcyByZW5kZXJpbmc7IG5vbmUgb2YgdGhlbVxuICogb3ducyB0aGUgc2Vzc2lvbiBzdGF0ZS4gUmVnaW9uIGdlb21ldHJ5IGxpdmVzIGluIHRoZSBzaWJsaW5nIGBSZWdpb25TdG9yZWAuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVmlzdWFsaXplclN0b3JlIHtcbiAgLy8g4pSA4pSAIENvbG9ybWFwIC8gTFVUIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBEZWZhdWx0IHRvIGludmVydGVkIGdyZXlzIChkYXJrIGJhY2tncm91bmQg4oaSIGJyaWdodCBzaWduYWwpLCB3aGljaCByZWFkcyBhc1xuICAvLyB0aGUgbmF0dXJhbCBncmF5c2NhbGUgZm9yIHRoZXNlIG1pY3Jvc2NvcHkgaW1hZ2VzLlxuICBwcml2YXRlIHJlYWRvbmx5IGNvbG9ybWFwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihcbiAgICBDT0xPUk1BUF9PUFRJT05TWzBdLmNoaWxkcmVuLmZpbmQoKGM6IGFueSkgPT4gYy5sYWJlbCA9PT0gJ0dyZXlzIEludicpID8/IENPTE9STUFQX09QVElPTlNbMF0uY2hpbGRyZW5bMF0sXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV2ZXJzZVNjYWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIOKUgOKUgCBJbWFnZSBtZXRhZGF0YSAocGh5c2ljYWwgcGl4ZWwgc2l6ZSwgY2hhbm5lbHMsIOKApikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VNZXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUltYWdlTWV0YWRhdGFbXT4oW10pO1xuXG4gIC8vIOKUgOKUgCBDaGFubmVscyAmIGhpc3RvZ3JhbSBkaXNwbGF5IHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBQZXItY2hhbm5lbCBkaXNwbGF5IHdpbmRvdy9nYW1tYS92aXNpYmlsaXR5L2NvbG91ciwgZGVyaXZlZCBmcm9tIHRoZSBpbWFnZVxuICAvLyBtZXRhZGF0YSBvbiBsb2FkICgxIFwiSW50ZW5zaXR5XCIgY2hhbm5lbCBmb3IgZ3JheXNjYWxlOyBSL0cvQiBmb3IgUkdCKS4gVGhlXG4gIC8vIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUgZWRpdHMgdGhlc2UgYW5kIGJvdGggYmFja2VuZHMgcmVjb2xvciBsaXZlLlxuICBwcml2YXRlIHJlYWRvbmx5IGNoYW5uZWxTdGF0ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ2hhbm5lbFN0YXRlW10+KFtdKTtcbiAgLyoqIEluZGV4IG9mIHRoZSBjaGFubmVsIHNlbGVjdGVkIGluIHRoZSBDaGFubmVscyBwYW5lIOKAlCB0aGUgT05FIGJhbmQgYVxuICAgKiAgc2luZ2xlLXNjYWxhciAzRCB2aWV3ICh0aGUgbmFwYXJpIFN1cmZhY2UpIGZvbGxvd3MgZm9yIGEgbXVsdGljaGFubmVsIGltYWdlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkQ2hhbm5lbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIC8vIFRoZSBkZXJpdmVkIGRlZmF1bHRzIChmdWxsIHdpbmRvdywgZ2FtbWEgMSwgZGVmYXVsdCB0aW50KSBmb3IgdGhlIGN1cnJlbnRcbiAgLy8gaW1hZ2UsIGtlcHQgc28gXCJSZXNldFwiIGNhbiByZXN0b3JlIGEgY2hhbm5lbCdzIHdpbmRvdy9nYW1tYS9jb2xvdXIuXG4gIHByaXZhdGUgZGVmYXVsdENoYW5uZWxTdGF0ZXM6IElDaGFubmVsU3RhdGVbXSA9IFtdO1xuICAvKiogVGhlIGltYWdlIHRoZSBjdXJyZW50IGNoYW5uZWwgc3RhdGVzIHdlcmUgZGVyaXZlZCBmb3IgKHNlZSBzZXRJbWFnZU1ldGEpLiAqL1xuICBwcml2YXRlIGNoYW5uZWxJbWFnZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvLyBHcmF5c2NhbGUgZGlzcGxheSAoaWdub3JlIHRoZSBjaGFubmVsIHRpbnRzKSBhbmQgaW52ZXJ0ZWQgYmFja2dyb3VuZCDigJQgYm90aFxuICAvLyBnbG9iYWwgZGlzcGxheSBmbGFncywgbGlrZSB0aGUgY29sb3JtYXAuXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JheXNjYWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGludmVydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyDilIDilIAgQW5ub3RhdGlvbiBjbGFzcyBwcmVzZXRzIChqaXQtdWkjNzApIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBUaGUgcGVyLXVzZXIsIHNlcnZlci1wZXJzaXN0ZWQgc291cmNlIG9mIHRydXRoIGZvciByZWdpb24gY29sb3Vycywgc2VlZGVkXG4gIC8vIGZyb20gdGhlIGhpc3RvcmljYWwgZGVmYXVsdCBjbGFzc2VzLiBMb2FkZWQvc2F2ZWQgdmlhIHRoZSBvcHRpb25hbFxuICAvLyBQcmVmZXJlbmNlc1BvcnQgKGFwcC1zaWRlIGFkYXB0ZXIg4oaSIGppdC1zZXJ2aWNlKS4gZ2V0Q2xhc3NpZmljYXRpb25Db2xvcnMoKVxuICAvLyBiZWxvdyBzdGF5cyBhcyBhIG5hbWXihpJjb2xvdXIgdmlldyBmb3IgdGhlIGJhY2tlbmRzJyByZWdpb24gcmVuZGVyZXJzLlxuICBwcml2YXRlIHByZXNldFNldDogUHJlc2V0U2V0ID0gZGVmYXVsdFByZXNldFNldCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByZXNldFNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByZXNldFNldD4odGhpcy5wcmVzZXRTZXQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhdmVQcmVzZXRzJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcHJlc2V0c0xvYWRlZCA9IGZhbHNlO1xuXG4gIC8vIOKUgOKUgCBBY3RpdmUgb24tY2FudmFzIHRvb2wg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIFdoaWNoIHRvb2wgdGhlIHVzZXIgaGFzIGFybWVkIChwYW4sIHpvb20sIGRyYXdyZWN0LCB3YW5kLCBlcmFzZXIsIOKApikgb3JcbiAgLy8gbnVsbCB3aGVuIG5vbmUgaXMgYWN0aXZlLiBUaGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdG9vbCBzdGF0ZSBhY3Jvc3NcbiAgLy8gdGhlIHRvb2xiYXIgYW5kIHdoaWNoZXZlciBiYWNrZW5kJ3Mgb3ZlcmxheSBoYW5kbGVzIHRoZSBwb2ludGVyLlxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZVRvb2wkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvKiogU3BhdGlhbC1vbWljcyBkaXNwbGF5IHN0YXRlIChjb2xvdXIgc291cmNlLCBwb2ludCBzaXplLCBhbHBoYSwgc2NhbGluZykuXG4gICAqICBIZWxkIGhlcmUsIG5leHQgdG8gdGhlIGNvbG9ybWFwL2NoYW5uZWwgc3RhdGUsIHNvIHRoZSBhY3RpdmUgYmFja2VuZCByZWFjdHNcbiAgICogIHRvIGFuIGVkaXQgZXhhY3RseSBhcyBpdCBkb2VzIGZvciBhbiBpbWFnZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzcGF0aWFsVmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNwYXRpYWxWaWV3U3RhdGU+KHsgLi4uREVGQVVMVF9TUEFUSUFMX1ZJRVcgfSk7XG5cbiAgLy8gT3B0aW9uYWwgKyBudWxsIGRlZmF1bHQgc28gdGhlIHN0b3JlIGNhbiBiZSBjb25zdHJ1Y3RlZCBib3RoIHZpYSBESSBhbmRcbiAgLy8gZGlyZWN0bHkgKGBuZXcgVmlzdWFsaXplclN0b3JlKClgIGluIHVuaXQgdGVzdHMpOyBwcmVzZXQgbG9hZC9zYXZlIG5vLW9wXG4gIC8vIHdoZW4gdGhlIHBvcnQgaXMgYWJzZW50LlxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KFBSRUZFUkVOQ0VTX1BPUlQpIHByaXZhdGUgcmVhZG9ubHkgcHJlZnNQb3J0OiBQcmVmZXJlbmNlc1BvcnQgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuaW5pdFByZXNldFBlcnNpc3RlbmNlKCk7XG4gIH1cblxuICAvLyDilIDilIAgUHJlc2V0IHBlcnNpc3RlbmNlIChqaXQtdWkjNzApIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBwcml2YXRlIGluaXRQcmVzZXRQZXJzaXN0ZW5jZSgpOiB2b2lkIHtcbiAgICAvLyBEZWJvdW5jZWQgd3JpdGUtYmFjayBzbyBhIGJ1cnN0IG9mIGVkaXRzIGNvbGxhcHNlcyBpbnRvIG9uZSBQVVQuXG4gICAgdGhpcy5zYXZlUHJlc2V0cyQucGlwZShkZWJvdW5jZVRpbWUoODAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucHJlZnNQb3J0Py5zYXZlUHJlc2V0U2V0KHRoaXMucHJlc2V0U2V0KS5zdWJzY3JpYmUoe1xuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIC8qIGtlZXAgbG9jYWwgY29weSAqL1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gTG9hZCB0aGUgdXNlcidzIHNhdmVkIHNldCAoaWYgYW55KTsgb3RoZXJ3aXNlIGtlZXAgdGhlIHNlZWRlZCBkZWZhdWx0cy5cbiAgICB0aGlzLnByZWZzUG9ydD8ubG9hZFByZXNldFNldCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoc2V0KSA9PiB7XG4gICAgICAgIGlmIChzZXQgJiYgQXJyYXkuaXNBcnJheShzZXQuY2xhc3NlcykgJiYgc2V0LmNsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucHJlc2V0U2V0ID0gdGhpcy5ub3JtYWxpemVQcmVzZXRTZXQoc2V0KTtcbiAgICAgICAgICB0aGlzLnByZXNldFNldCQubmV4dCh0aGlzLnByZXNldFNldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVzZXRzTG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnByZXNldHNMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplUHJlc2V0U2V0KHNldDogUHJlc2V0U2V0KTogUHJlc2V0U2V0IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IGRlZmF1bHRQcmVzZXRTZXQoKTtcbiAgICAvLyBDbG9uZSB0aGUgbmVzdGVkIGFycmF5cy9vYmplY3RzIHNvIG91dHNpZGUgY2FsbGVycyBjYW4ndCBtdXRhdGUgdGhlIHN0b3JlJ3NcbiAgICAvLyBpbnRlcm5hbCBzdGF0ZSB3aXRob3V0IGdvaW5nIHRocm91Z2ggc2V0UHJlc2V0U2V0KCkvdXBzZXJ0Q2xhc3MoKS5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NlczogQXJyYXkuaXNBcnJheShzZXQuY2xhc3NlcykgPyBzZXQuY2xhc3Nlcy5tYXAoKGMpID0+ICh7IC4uLmMgfSkpIDogW10sXG4gICAgICBmYWxsYmFja1BhbGV0dGU6XG4gICAgICAgIEFycmF5LmlzQXJyYXkoc2V0LmZhbGxiYWNrUGFsZXR0ZSkgJiYgc2V0LmZhbGxiYWNrUGFsZXR0ZS5sZW5ndGhcbiAgICAgICAgICA/IFsuLi5zZXQuZmFsbGJhY2tQYWxldHRlXVxuICAgICAgICAgIDogZGVmYXVsdHMuZmFsbGJhY2tQYWxldHRlLFxuICAgICAgYXV0b1Byb21vdGU6ICEhc2V0LmF1dG9Qcm9tb3RlLFxuICAgICAgbWF0Y2hNb2RlOiBzZXQubWF0Y2hNb2RlID09PSAnbm9ybWFsaXplZCcgPyAnbm9ybWFsaXplZCcgOiAnZXhhY3QnLFxuICAgIH07XG4gIH1cblxuICAvKiogUXVldWUgYSBkZWJvdW5jZWQgc2F2ZS4gTm8tb3BzIHVudGlsIHRoZSBpbml0aWFsIGxvYWQgcmVzb2x2ZXMgKGFuZCB3aGVuIG5vIHBvcnQgaXMgYm91bmQpLiAqL1xuICBwcml2YXRlIHF1ZXVlUHJlc2V0U2F2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcmVzZXRzTG9hZGVkKSB0aGlzLnNhdmVQcmVzZXRzJC5uZXh0KCk7XG4gIH1cblxuICAvKiogUGVyc2lzdCB0aGUgY3VycmVudCBwcmVzZXQgc2V0IGltbWVkaWF0ZWx5LCBieXBhc3NpbmcgdGhlIGluY3JlbWVudGFsLWVkaXRcbiAgICogIGRlYm91bmNlLiBVc2VkIGZvciBleHBsaWNpdCBidWxrIGFjdGlvbnMgKEFwcGx5IC8gSW1wb3J0IC8gUmVzZXQpLiAqL1xuICBwcml2YXRlIHNhdmVQcmVzZXRzTm93KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByZXNldHNMb2FkZWQpIHtcbiAgICAgIHRoaXMucHJlZnNQb3J0Py5zYXZlUHJlc2V0U2V0KHRoaXMucHJlc2V0U2V0KS5zdWJzY3JpYmUoe1xuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIC8qIGtlZXAgbG9jYWwgY29weSAqL1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBhdmFpbGFibGUgY29sb3JtYXAgb3B0aW9ucyAodHJlZSBmb3IgdGhlIExVVCBkcm9wZG93bikuICovXG4gIGdldENvbG9ybWFwT3B0aW9ucygpOiBhbnkge1xuICAgIHJldHVybiBDT0xPUk1BUF9PUFRJT05TO1xuICB9XG5cbiAgZ2V0Q29sb3JtYXAoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb2xvcm1hcCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgLyoqIFN5bmNocm9ub3VzIGN1cnJlbnQgdmFsdWUg4oCUIGZvciByZW5kZXIgcGF0aHMgdGhhdCByZWFkIGl0IHdoaWxlIGJ1aWxkaW5nXG4gICAqICBhIGZyYW1lIChlLmcuIFBsb3RseSdzIGNvbG9yc2NhbGUpIHJhdGhlciB0aGFuIHN1YnNjcmliaW5nLiAqL1xuICBjdXJyZW50Q29sb3JtYXAoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb2xvcm1hcCQudmFsdWU7XG4gIH1cbiAgc2V0Q29sb3JtYXAoY29sb3JtYXA6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY29sb3JtYXAkLm5leHQoY29sb3JtYXApO1xuICB9XG5cbiAgZ2V0UmV2ZXJzZVNjYWxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnJldmVyc2VTY2FsZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgY3VycmVudFJldmVyc2VTY2FsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXZlcnNlU2NhbGUkLnZhbHVlO1xuICB9XG4gIHNldFJldmVyc2VTY2FsZShyZXZlcnNlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5yZXZlcnNlU2NhbGUkLm5leHQocmV2ZXJzZSk7XG4gIH1cblxuICBnZXRJbWFnZU1ldGEoKTogT2JzZXJ2YWJsZTxJSW1hZ2VNZXRhZGF0YVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VNZXRhJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXRjaCB0aGUgcGh5c2ljYWwgcGl4ZWwgc2l6ZSAowrVtL3BpeGVsKSBvbnRvIHRoZSBjdXJyZW50IGltYWdlIG1ldGEgYW5kXG4gICAqIHJlLWVtaXQsIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGRlcml2ZWQgY2hhbm5lbHMuIFRoZSBPU0QgdGlsZSBkZXNjcmlwdG9yXG4gICAqIChmcm9tIHRoZSBzZXJ2ZXIncyBCaW8tRm9ybWF0cyBgL3RpbGVzL2luZm9gKSBpcyBhdXRob3JpdGF0aXZlIGZvciBzY2FsZWRcbiAgICogaW1hZ2VzIOKAlCBgaW1hZ2VJbmZvLmltYWdlTWV0YWAgb2Z0ZW4gY2FycmllcyBubyBtcHAg4oCUIHNvIHRoZSByZW5kZXJlciBmZWVkc1xuICAgKiBpdCBoZXJlIG9uY2UgdGhlIGRlc2NyaXB0b3IgbG9hZHMsIGxldHRpbmcgYXJlYS9zY2FsZSBjb25zdW1lcnMgKHRoZSBSZWdpb25cbiAgICogRWRpdG9yKSBzaG93IMK1bcKyL21twrIgaW5zdGVhZCBvZiBweMKyLiBOby1vcCB3aGVuIG5laXRoZXIgYXhpcyBpcyBwb3NpdGl2ZS5cbiAgICovXG4gIHNldFBoeXNpY2FsUGl4ZWxTaXplKG1wcFg/OiBudW1iZXIsIG1wcFk/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNYID0gKG1wcFggPz8gMCkgPiAwLFxuICAgICAgaGFzWSA9IChtcHBZID8/IDApID4gMDtcbiAgICBpZiAoIWhhc1ggJiYgIWhhc1kpIHJldHVybjtcbiAgICBjb25zdCBjdXIgPSB0aGlzLmltYWdlTWV0YSQudmFsdWU7XG4gICAgY29uc3QgbWV0YSA9IChjdXIgJiYgY3VyLmxlbmd0aCA/IGN1ciA6IFt7fSBhcyBJSW1hZ2VNZXRhZGF0YV0pLm1hcCgoZSkgPT4gKHsgLi4uZSB9KSk7XG4gICAgaWYgKGhhc1gpIG1ldGFbMF0ubXBwWCA9IG1wcFg7XG4gICAgaWYgKGhhc1kpIG1ldGFbMF0ubXBwWSA9IG1wcFk7XG4gICAgdGhpcy5pbWFnZU1ldGEkLm5leHQobWV0YSk7XG4gIH1cbiAgLyoqXG4gICAqIFB1Ymxpc2ggdGhlIGN1cnJlbnQgaW1hZ2UncyBtZXRhZGF0YSBhbmQgZGVyaXZlIGl0cyBjaGFubmVscy5cbiAgICpcbiAgICogYGltYWdlS2V5YCBpZGVudGlmaWVzIHRoZSBpbWFnZSAoaXRzIGZpbGUgbmFtZSkuIEEgcmUtcGxvdCBvZiB0aGUgU0FNRSBpbWFnZVxuICAgKiBrZWVwcyB0aGUgdXNlcidzIHdpbmRvdy9nYW1tYS90aW50IGVkaXRzOyBhIGRpZmZlcmVudCBpbWFnZSBnZXRzIGl0cyBvd25cbiAgICogZGVyaXZlZCBjaGFubmVscyBldmVuIGF0IHRoZSBzYW1lIGNoYW5uZWwgY291bnQg4oCUIGtleWluZyBvbiB0aGUgY291bnQgYWxvbmVcbiAgICogbGVmdCBhIERBUEkvR0ZQL1JGUCBzdGFjaydzIG5hbWVzLCB0aW50cyBhbmQgd2luZG93cyBvbiBhIGZvbGxvd2luZ1xuICAgKiBDRDMvQ0Q4L1BhbkNLIG9uZS4gV2l0aG91dCBhIGtleSwgb25seSBhIGNoYW5nZSBvZiBjaGFubmVsIGNvdW50IHJlLWRlcml2ZXMuXG4gICAqL1xuICBzZXRJbWFnZU1ldGEoaW1hZ2VNZXRhOiBJSW1hZ2VNZXRhZGF0YVtdLCBpbWFnZUtleT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaW1hZ2VNZXRhJC5uZXh0KGltYWdlTWV0YSk7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuZGVyaXZlQ2hhbm5lbHMoaW1hZ2VNZXRhKTtcbiAgICAvLyBBbHdheXMgcmVmcmVzaCB0aGUgcmVzZXQgYmFzZWxpbmUgdG8gdGhlIGN1cnJlbnQgaW1hZ2UncyBkZXJpdmVkIGRlZmF1bHRzXG4gICAgLy8gKG5hbWVzL2NvbG91cnMgY2FuIGRpZmZlciBldmVuIGF0IHRoZSBzYW1lIGNoYW5uZWwgY291bnQpLlxuICAgIHRoaXMuZGVmYXVsdENoYW5uZWxTdGF0ZXMgPSBuZXh0Lm1hcCgoYykgPT4gKHsgLi4uYyB9KSk7XG4gICAgY29uc3Qgb3RoZXJJbWFnZSA9IGltYWdlS2V5ICE9PSB1bmRlZmluZWQgJiYgaW1hZ2VLZXkgIT09IHRoaXMuY2hhbm5lbEltYWdlS2V5O1xuICAgIGlmIChpbWFnZUtleSAhPT0gdW5kZWZpbmVkKSB0aGlzLmNoYW5uZWxJbWFnZUtleSA9IGltYWdlS2V5O1xuICAgIGlmIChvdGhlckltYWdlIHx8IG5leHQubGVuZ3RoICE9PSB0aGlzLmNoYW5uZWxTdGF0ZXMkLnZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5jaGFubmVsU3RhdGVzJC5uZXh0KG5leHQpO1xuICAgICAgdGhpcy5zZWxlY3RlZENoYW5uZWwkLm5leHQoMCk7IC8vIG5ldyBpbWFnZSAvIGNoYW5uZWwgc3RydWN0dXJlIOKGkiByZXNldCB0aGUgc2VsZWN0ZWQgYmFuZFxuICAgIH1cbiAgfVxuXG4gIC8qKiBDaGFubmVscyBmb3IgYW4gaW1hZ2U6XG4gICAqICAgLSBSR0IgKHJnYkNoYW5uZWxzIOKJpSAzKSDihpIgUmVkL0dyZWVuL0JsdWU7XG4gICAqICAgLSBtdWx0aWNoYW5uZWwgZmx1b3Jlc2NlbmNlIChjaGFubmVsQ291bnQgPiAxKSDihpIgb25lIGNoYW5uZWwgcGVyIGJhbmQsXG4gICAqICAgICBuYW1lZC90aW50ZWQgZnJvbSB0aGUgc2VydmVyIGBjaGFubmVsSW5mb2Agd2hlbiBwcmVzZW50LCBlbHNlIGEgcGFsZXR0ZTtcbiAgICogICAtIG90aGVyd2lzZSBhIHNpbmdsZSBncmF5c2NhbGUgXCJJbnRlbnNpdHlcIiBjaGFubmVsLiAqL1xuICBwcml2YXRlIGRlcml2ZUNoYW5uZWxzKG1ldGE6IElJbWFnZU1ldGFkYXRhW10pOiBJQ2hhbm5lbFN0YXRlW10ge1xuICAgIGNvbnN0IGJhc2UgPSB7IG1pbjogMCwgbWF4OiAyNTUsIGdhbW1hOiAxLCB2aXNpYmxlOiB0cnVlIH07XG4gICAgY29uc3QgbSA9IG1ldGE/LlswXTtcbiAgICBpZiAoKG0/LnJnYkNoYW5uZWxzID8/IDEpID49IDMpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgaW5kZXg6IDAsIG5hbWU6ICdSZWQnLCBjb2xvcjogJyNmZjAwMDAnLCAuLi5iYXNlIH0sXG4gICAgICAgIHsgaW5kZXg6IDEsIG5hbWU6ICdHcmVlbicsIGNvbG9yOiAnIzAwZmYwMCcsIC4uLmJhc2UgfSxcbiAgICAgICAgeyBpbmRleDogMiwgbmFtZTogJ0JsdWUnLCBjb2xvcjogJyMwMDAwZmYnLCAuLi5iYXNlIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjb3VudCA9IG0/LmNoYW5uZWxDb3VudCA/PyAxO1xuICAgIGlmIChjb3VudCA+IDEpIHtcbiAgICAgIGNvbnN0IGluZm8gPSBtPy5jaGFubmVsSW5mbztcbiAgICAgIC8vIEZhbGxiYWNrIHRpbnRzIChGaWppLWlzaCkgd2hlbiB0aGUgc2VydmVyIGRvZXNuJ3Qgc3VwcGx5IGEgY29sb3IuXG4gICAgICBjb25zdCBwYWxldHRlID0gWycjZmYwMDAwJywgJyMwMGZmMDAnLCAnIzAwMDBmZicsICcjZmZmZmZmJywgJyMwMGZmZmYnLCAnI2ZmMDBmZicsICcjZmZmZjAwJ107XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIGkpID0+ICh7XG4gICAgICAgIGluZGV4OiBpLFxuICAgICAgICBuYW1lOiBpbmZvPy5baV0/Lm5hbWUgfHwgYENoYW5uZWwgJHtpICsgMX1gLFxuICAgICAgICBjb2xvcjogaW5mbz8uW2ldPy5jb2xvciB8fCBwYWxldHRlW2kgJSBwYWxldHRlLmxlbmd0aF0sXG4gICAgICAgIC4uLmJhc2UsXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBbeyBpbmRleDogMCwgbmFtZTogJ0ludGVuc2l0eScsIGNvbG9yOiAnI2ZmZmZmZicsIC4uLmJhc2UgfV07XG4gIH1cblxuICAvLyDilIDilIAgQ2hhbm5lbHMgJiBoaXN0b2dyYW0gc3RhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldENoYW5uZWxTdGF0ZXMoKTogT2JzZXJ2YWJsZTxJQ2hhbm5lbFN0YXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jaGFubmVsU3RhdGVzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBjdXJyZW50Q2hhbm5lbFN0YXRlcygpOiBJQ2hhbm5lbFN0YXRlW10ge1xuICAgIHJldHVybiB0aGlzLmNoYW5uZWxTdGF0ZXMkLnZhbHVlO1xuICB9XG4gIC8qKiBUaGUgY2hhbm5lbCBzZWxlY3RlZCBpbiB0aGUgcGFuZSAoZHJpdmVzIGEgc2luZ2xlLXNjYWxhciAzRCBTdXJmYWNlKS4gKi9cbiAgZ2V0U2VsZWN0ZWRDaGFubmVsKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDaGFubmVsJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBjdXJyZW50U2VsZWN0ZWRDaGFubmVsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDaGFubmVsJC52YWx1ZTtcbiAgfVxuICBzZXRTZWxlY3RlZENoYW5uZWwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2hhbm5lbCQudmFsdWUgIT09IGluZGV4KSB0aGlzLnNlbGVjdGVkQ2hhbm5lbCQubmV4dChpbmRleCk7XG4gIH1cbiAgLyoqIFBhdGNoIG9uZSBjaGFubmVsIGJ5IGluZGV4IChpbW11dGFibGUgdXBkYXRlKS4gKi9cbiAgc2V0Q2hhbm5lbFN0YXRlKGluZGV4OiBudW1iZXIsIHBhcnRpYWw6IFBhcnRpYWw8SUNoYW5uZWxTdGF0ZT4pOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5jaGFubmVsU3RhdGVzJC52YWx1ZS5tYXAoKGMpID0+XG4gICAgICBjLmluZGV4ID09PSBpbmRleCA/IHsgLi4uYywgLi4ucGFydGlhbCwgaW5kZXg6IGMuaW5kZXggfSA6IGMsXG4gICAgKTtcbiAgICB0aGlzLmNoYW5uZWxTdGF0ZXMkLm5leHQobmV4dCk7XG4gIH1cbiAgLyoqIFJlcGxhY2UgYWxsIGNoYW5uZWwgc3RhdGVzICh1c2VkIGJ5IGF1dG8vcmVzZXQpLiAqL1xuICBzZXRDaGFubmVsU3RhdGVzKHN0YXRlczogSUNoYW5uZWxTdGF0ZVtdKTogdm9pZCB7XG4gICAgdGhpcy5jaGFubmVsU3RhdGVzJC5uZXh0KHN0YXRlcyk7XG4gIH1cbiAgLyoqIFJlc2V0IG9uZSBjaGFubmVsJ3MgZGlzcGxheSB3aW5kb3csIGdhbW1hIEFORCBjb2xvdXIgdG8gdGhlIHZhbHVlcyBkZXJpdmVkXG4gICAqICBmb3IgdGhlIGN1cnJlbnQgaW1hZ2UgKGZ1bGwgMC4uMjU1IHJhbmdlLCBnYW1tYSAxLCB0aGUgY2hhbm5lbCdzIGRlZmF1bHRcbiAgICogIHRpbnQpLiBGYWxscyBiYWNrIHRvIG5ldXRyYWwgZGVmYXVsdHMgaWYgbm8gYmFzZWxpbmUgd2FzIGNhcHR1cmVkLiAqL1xuICByZXNldENoYW5uZWxTdGF0ZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5kZWZhdWx0Q2hhbm5lbFN0YXRlcy5maW5kKChjKSA9PiBjLmluZGV4ID09PSBpbmRleCk7XG4gICAgdGhpcy5zZXRDaGFubmVsU3RhdGUoaW5kZXgsIHtcbiAgICAgIG1pbjogZGVmPy5taW4gPz8gMCxcbiAgICAgIG1heDogZGVmPy5tYXggPz8gMjU1LFxuICAgICAgZ2FtbWE6IGRlZj8uZ2FtbWEgPz8gMSxcbiAgICAgIGNvbG9yOiBkZWY/LmNvbG9yID8/ICcjZmZmZmZmJyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldEdyYXlzY2FsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5ncmF5c2NhbGUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGN1cnJlbnRHcmF5c2NhbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JheXNjYWxlJC52YWx1ZTtcbiAgfVxuICBzZXRHcmF5c2NhbGUob246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmdyYXlzY2FsZSQubmV4dChvbik7XG4gIH1cblxuICBnZXRJbnZlcnQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZXJ0JC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBjdXJyZW50SW52ZXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmludmVydCQudmFsdWU7XG4gIH1cbiAgc2V0SW52ZXJ0KG9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbnZlcnQkLm5leHQob24pO1xuICB9XG5cbiAgLyoqIE5hbWXihpJjb2xvdXIgdmlldyBvZiB0aGUgY3VycmVudCBwcmVzZXQgc2V0IChjb21wYXQgZm9yIGJhY2tlbmQgcmVuZGVyZXJzXG4gICAqICB0aGF0IHN0aWxsIHJlYWQgYSBNYXApLiAqL1xuICBnZXRDbGFzc2lmaWNhdGlvbkNvbG9ycygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLnByZXNldFNldC5jbGFzc2VzLm1hcCgoYykgPT4gW2MubmFtZSwgYy5jb2xvcl0pKTtcbiAgfVxuICAvKiogVXBzZXJ0IGEgc2luZ2xlIGNsYXNzIGNvbG91ciAodXNlZCBieSB0aGUgZWRpdG9yJ3MgcGVyLWNsYXNzIGNvbG91ciBwaWNrZXIpLiAqL1xuICBzZXRDbGFzc2lmaWNhdGlvbkNvbG9yKGxhYmVsOiBzdHJpbmcsIGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVwc2VydENsYXNzKHsgbmFtZTogbGFiZWwsIGNvbG9yIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIEFubm90YXRpb24tY2xhc3MgcHJlc2V0IHNldCBhY2Nlc3NvcnMgKGppdC11aSM3MCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldFByZXNldFNldCgpOiBQcmVzZXRTZXQge1xuICAgIC8vIERlZmVuc2l2ZSBjb3B5OiBjYWxsZXJzIG11c3Qgbm90IG11dGF0ZSB0aGUgc3RvcmUncyBzdGF0ZSBpbiBwbGFjZSDigJRcbiAgICAvLyBhbGwgY2hhbmdlcyBnbyB0aHJvdWdoIHNldFByZXNldFNldCgpL3Vwc2VydENsYXNzKCkvcmVtb3ZlQ2xhc3MoKSBzb1xuICAgIC8vIHByZXNldFNldCQgYW5kIHBlcnNpc3RlbmNlIHN0YXkgaW4gc3luYy5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NlczogdGhpcy5wcmVzZXRTZXQuY2xhc3Nlcy5tYXAoKGMpID0+ICh7IC4uLmMgfSkpLFxuICAgICAgZmFsbGJhY2tQYWxldHRlOiBbLi4udGhpcy5wcmVzZXRTZXQuZmFsbGJhY2tQYWxldHRlXSxcbiAgICAgIGF1dG9Qcm9tb3RlOiB0aGlzLnByZXNldFNldC5hdXRvUHJvbW90ZSxcbiAgICAgIG1hdGNoTW9kZTogdGhpcy5wcmVzZXRTZXQubWF0Y2hNb2RlLFxuICAgIH07XG4gIH1cbiAgZ2V0UHJlc2V0U2V0JCgpOiBPYnNlcnZhYmxlPFByZXNldFNldD4ge1xuICAgIHJldHVybiB0aGlzLnByZXNldFNldCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgc2V0UHJlc2V0U2V0KHNldDogUHJlc2V0U2V0KTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZXRTZXQgPSB0aGlzLm5vcm1hbGl6ZVByZXNldFNldChzZXQpO1xuICAgIHRoaXMucHJlc2V0U2V0JC5uZXh0KHRoaXMucHJlc2V0U2V0KTtcbiAgICB0aGlzLnNhdmVQcmVzZXRzTm93KCk7IC8vIGV4cGxpY2l0IGJ1bGsgYXBwbHkvaW1wb3J0IOKGkiBwZXJzaXN0IGltbWVkaWF0ZWx5XG4gIH1cbiAgLyoqIEFkZCBvciB1cGRhdGUgYSBjbGFzcyAoa2V5ZWQgYnkgZXhhY3Qgc3RvcmVkIGBuYW1lYCkuICovXG4gIHVwc2VydENsYXNzKHByZXNldDogQ2xhc3NQcmVzZXQpOiB2b2lkIHtcbiAgICBjb25zdCBjbGFzc2VzID0gWy4uLnRoaXMucHJlc2V0U2V0LmNsYXNzZXNdO1xuICAgIGNvbnN0IGkgPSBjbGFzc2VzLmZpbmRJbmRleCgoYykgPT4gYy5uYW1lID09PSBwcmVzZXQubmFtZSk7XG4gICAgaWYgKGkgPj0gMCkgY2xhc3Nlc1tpXSA9IHsgLi4uY2xhc3Nlc1tpXSwgLi4ucHJlc2V0IH07XG4gICAgZWxzZSBjbGFzc2VzLnB1c2goeyAuLi5wcmVzZXQgfSk7XG4gICAgdGhpcy5wcmVzZXRTZXQgPSB7IC4uLnRoaXMucHJlc2V0U2V0LCBjbGFzc2VzIH07XG4gICAgdGhpcy5wcmVzZXRTZXQkLm5leHQodGhpcy5wcmVzZXRTZXQpO1xuICAgIHRoaXMucXVldWVQcmVzZXRTYXZlKCk7XG4gIH1cbiAgcmVtb3ZlQ2xhc3MobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZXRTZXQgPSB7IC4uLnRoaXMucHJlc2V0U2V0LCBjbGFzc2VzOiB0aGlzLnByZXNldFNldC5jbGFzc2VzLmZpbHRlcigoYykgPT4gYy5uYW1lICE9PSBuYW1lKSB9O1xuICAgIHRoaXMucHJlc2V0U2V0JC5uZXh0KHRoaXMucHJlc2V0U2V0KTtcbiAgICB0aGlzLnF1ZXVlUHJlc2V0U2F2ZSgpO1xuICB9XG4gIHJlc2V0UHJlc2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXNldFNldCA9IGRlZmF1bHRQcmVzZXRTZXQoKTtcbiAgICB0aGlzLnByZXNldFNldCQubmV4dCh0aGlzLnByZXNldFNldCk7XG4gICAgdGhpcy5zYXZlUHJlc2V0c05vdygpOyAvLyBleHBsaWNpdCByZXNldCDihpIgcGVyc2lzdCBpbW1lZGlhdGVseVxuICB9XG5cbiAgLy8g4pSA4pSAIHNwYXRpYWwtb21pY3MgdmlldyBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0U3BhdGlhbFZpZXckKCk6IE9ic2VydmFibGU8U3BhdGlhbFZpZXdTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnNwYXRpYWxWaWV3JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKiBTeW5jaHJvbm91cyByZWFkLCBmb3IgYSByZW5kZXJlciBidWlsZGluZyBpdHMgZmlyc3QgZnJhbWUuICovXG4gIGN1cnJlbnRTcGF0aWFsVmlldygpOiBTcGF0aWFsVmlld1N0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5zcGF0aWFsVmlldyQudmFsdWU7XG4gIH1cblxuICAvKiogUGF0Y2ggdGhlIHNwYXRpYWwgdmlldyBzdGF0ZTsgZW1pdHMgb25jZSB3aXRoIHRoZSBtZXJnZWQgdmFsdWUuICovXG4gIHNldFNwYXRpYWxWaWV3KHBhcnRpYWw6IFBhcnRpYWw8U3BhdGlhbFZpZXdTdGF0ZT4pOiB2b2lkIHtcbiAgICB0aGlzLnNwYXRpYWxWaWV3JC5uZXh0KHsgLi4udGhpcy5zcGF0aWFsVmlldyQudmFsdWUsIC4uLnBhcnRpYWwgfSk7XG4gIH1cblxuICBnZXRBY3RpdmVUb29sJCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVUb29sJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBzZXRBY3RpdmVUb29sKHRvb2w6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVRvb2wkLm5leHQodG9vbCk7XG4gIH1cbn1cbiJdfQ==
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsaXplci1zdG9yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zdG9yZS92aXN1YWxpemVyLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQTBCLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0scUNBQXFDLENBQUM7QUFJeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFvQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUVyRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLE9BQU8sZUFBZTtJQXFEMUIsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSwyQkFBMkI7SUFDM0IsWUFBbUUsWUFBb0MsSUFBSTtRQUF4QyxjQUFTLEdBQVQsU0FBUyxDQUErQjtRQXZEM0csd0VBQXdFO1FBQ3hFLDhFQUE4RTtRQUM5RSxxREFBcUQ7UUFDcEMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUM5QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxD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SUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsY0FBYyxDQUFDLE9BQWtDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUNELGFBQWEsQ0FBQyxJQUFtQjtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDOzhHQXJYVSxlQUFlLGtCQXdETSxnQkFBZ0I7a0hBeERyQyxlQUFlLGNBREYsTUFBTTs7MkZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkF5RG5CLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENsYXNzUHJlc2V0LCBQcmVzZXRTZXQsIGRlZmF1bHRQcmVzZXRTZXQgfSBmcm9tICcuLi9tb2RlbHMvY2xhc3MtcHJlc2V0JztcbmltcG9ydCB7IGZpbmRQcmVzZXQsIHByZXNldEtleSB9IGZyb20gJy4vY2xhc3MtY29sb3IudXRpbCc7XG5pbXBvcnQgeyBQUkVGRVJFTkNFU19QT1JULCBQcmVmZXJlbmNlc1BvcnQgfSBmcm9tICcuLi9jb250cmFjdHMvcG9ydHMvcHJlZmVyZW5jZXMucG9ydCc7XG5cbmltcG9ydCB7IElJbWFnZU1ldGFkYXRhIH0gZnJvbSAnLi4vY29udHJhY3RzL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IElDaGFubmVsU3RhdGUgfSBmcm9tICcuLi9jb250cmFjdHMvY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0JztcbmltcG9ydCB7IERFRkFVTFRfU1BBVElBTF9WSUVXLCBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgQ09MT1JNQVBfT1BUSU9OUyB9IGZyb20gJy4uL3Bsb3QudXRpbGl0aWVzJztcblxuLyoqXG4gKiBCYWNrZW5kLW5ldXRyYWwgc3RvcmUgZm9yIHRoZSAqKnZpc3VhbGl6YXRpb24gc2Vzc2lvbioqIOKAlCB0aGUgc3RhdGUgdGhhdFxuICogZGVzY3JpYmVzICpob3cqIHRoZSBjdXJyZW50IGltYWdlIGlzIGJlaW5nIHZpZXdlZCwgaW5kZXBlbmRlbnQgb2Ygd2hpY2hcbiAqIHJlbmRlcmluZyBiYWNrZW5kIChQbG90bHksIE9wZW5TZWFkcmFnb24gb3IgbmFwYXJpLWpzKSBpcyBvbiBzY3JlZW46XG4gKlxuICogIC0gdGhlIGFjdGl2ZSBjb2xvcm1hcCAvIExVVCBhbmQgaXRzIHJldmVyc2Utc2NhbGUgdG9nZ2xlLFxuICogIC0gdGhlIGN1cnJlbnQgaW1hZ2UncyBwaHlzaWNhbCBtZXRhZGF0YSAowrVtL3BpeGVsIGV0Yy4pIGFuZCBpdHMgcGVyLWNoYW5uZWxcbiAqICAgIGRpc3BsYXkgc3RhdGUgKHdpbmRvdywgZ2FtbWEsIHRpbnQsIHZpc2liaWxpdHk7IGdyYXlzY2FsZSAvIGludmVydCksXG4gKiAgLSB0aGUgYW5ub3RhdGlvbi1jbGFzcyBwcmVzZXRzICh0aGUgY2xhc3NpZmljYXRpb24gbGFiZWwg4oaSIGNvbG91ciBtYXApLFxuICogIC0gdGhlIHNwYXRpYWwtb21pY3MgdmlldyBzdGF0ZSxcbiAqICAtIHdoaWNoIG9uLWNhbnZhcyB0b29sIGlzIGN1cnJlbnRseSBhY3RpdmUuXG4gKlxuICogRXZlcnkgYmFja2VuZCByZWFkcyBhbmQgd3JpdGVzIHRoaXMgc2luZ2xlIGluc3RhbmNlIChvbmUgcGVyIHZpc3VhbGl6ZXIgY2hhaW4pLFxuICogc28gdGhleSBzdGF5IGluIGxvY2stc3RlcCByZWdhcmRsZXNzIG9mIHdoaWNoIG9uZSBpcyByZW5kZXJpbmc7IG5vbmUgb2YgdGhlbVxuICogb3ducyB0aGUgc2Vzc2lvbiBzdGF0ZS4gUmVnaW9uIGdlb21ldHJ5IGxpdmVzIGluIHRoZSBzaWJsaW5nIGBSZWdpb25TdG9yZWAuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVmlzdWFsaXplclN0b3JlIHtcbiAgLy8g4pSA4pSAIENvbG9ybWFwIC8gTFVUIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBEZWZhdWx0IHRvIGludmVydGVkIGdyZXlzIChkYXJrIGJhY2tncm91bmQg4oaSIGJyaWdodCBzaWduYWwpLCB3aGljaCByZWFkcyBhc1xuICAvLyB0aGUgbmF0dXJhbCBncmF5c2NhbGUgZm9yIHRoZXNlIG1pY3Jvc2NvcHkgaW1hZ2VzLlxuICBwcml2YXRlIHJlYWRvbmx5IGNvbG9ybWFwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihcbiAgICBDT0xPUk1BUF9PUFRJT05TWzBdLmNoaWxkcmVuLmZpbmQoKGM6IGFueSkgPT4gYy5sYWJlbCA9PT0gJ0dyZXlzIEludicpID8/IENPTE9STUFQX09QVElPTlNbMF0uY2hpbGRyZW5bMF0sXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV2ZXJzZVNjYWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIOKUgOKUgCBJbWFnZSBtZXRhZGF0YSAocGh5c2ljYWwgcGl4ZWwgc2l6ZSwgY2hhbm5lbHMsIOKApikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VNZXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUltYWdlTWV0YWRhdGFbXT4oW10pO1xuXG4gIC8vIOKUgOKUgCBDaGFubmVscyAmIGhpc3RvZ3JhbSBkaXNwbGF5IHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBQZXItY2hhbm5lbCBkaXNwbGF5IHdpbmRvdy9nYW1tYS92aXNpYmlsaXR5L2NvbG91ciwgZGVyaXZlZCBmcm9tIHRoZSBpbWFnZVxuICAvLyBtZXRhZGF0YSBvbiBsb2FkICgxIFwiSW50ZW5zaXR5XCIgY2hhbm5lbCBmb3IgZ3JheXNjYWxlOyBSL0cvQiBmb3IgUkdCKS4gVGhlXG4gIC8vIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUgZWRpdHMgdGhlc2UgYW5kIGJvdGggYmFja2VuZHMgcmVjb2xvciBsaXZlLlxuICBwcml2YXRlIHJlYWRvbmx5IGNoYW5uZWxTdGF0ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ2hhbm5lbFN0YXRlW10+KFtdKTtcbiAgLyoqIEluZGV4IG9mIHRoZSBjaGFubmVsIHNlbGVjdGVkIGluIHRoZSBDaGFubmVscyBwYW5lIOKAlCB0aGUgT05FIGJhbmQgYVxuICAgKiAgc2luZ2xlLXNjYWxhciAzRCB2aWV3ICh0aGUgbmFwYXJpIFN1cmZhY2UpIGZvbGxvd3MgZm9yIGEgbXVsdGljaGFubmVsIGltYWdlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkQ2hhbm5lbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIC8vIFRoZSBkZXJpdmVkIGRlZmF1bHRzIChmdWxsIHdpbmRvdywgZ2FtbWEgMSwgZGVmYXVsdCB0aW50KSBmb3IgdGhlIGN1cnJlbnRcbiAgLy8gaW1hZ2UsIGtlcHQgc28gXCJSZXNldFwiIGNhbiByZXN0b3JlIGEgY2hhbm5lbCdzIHdpbmRvdy9nYW1tYS9jb2xvdXIuXG4gIHByaXZhdGUgZGVmYXVsdENoYW5uZWxTdGF0ZXM6IElDaGFubmVsU3RhdGVbXSA9IFtdO1xuICAvKiogVGhlIGltYWdlIHRoZSBjdXJyZW50IGNoYW5uZWwgc3RhdGVzIHdlcmUgZGVyaXZlZCBmb3IgKHNlZSBzZXRJbWFnZU1ldGEpLiAqL1xuICBwcml2YXRlIGNoYW5uZWxJbWFnZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvLyBHcmF5c2NhbGUgZGlzcGxheSAoaWdub3JlIHRoZSBjaGFubmVsIHRpbnRzKSBhbmQgaW52ZXJ0ZWQgYmFja2dyb3VuZCDigJQgYm90aFxuICAvLyBnbG9iYWwgZGlzcGxheSBmbGFncywgbGlrZSB0aGUgY29sb3JtYXAuXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JheXNjYWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGludmVydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyDilIDilIAgQW5ub3RhdGlvbiBjbGFzcyBwcmVzZXRzIChqaXQtdWkjNzApIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBUaGUgcGVyLXVzZXIsIHNlcnZlci1wZXJzaXN0ZWQgc291cmNlIG9mIHRydXRoIGZvciByZWdpb24gY29sb3Vycywgc2VlZGVkXG4gIC8vIGZyb20gdGhlIGhpc3RvcmljYWwgZGVmYXVsdCBjbGFzc2VzLiBMb2FkZWQvc2F2ZWQgdmlhIHRoZSBvcHRpb25hbFxuICAvLyBQcmVmZXJlbmNlc1BvcnQgKGFwcC1zaWRlIGFkYXB0ZXIg4oaSIGppdC1zZXJ2aWNlKS4gZ2V0Q2xhc3NpZmljYXRpb25Db2xvcnMoKVxuICAvLyBiZWxvdyBzdGF5cyBhcyBhIG5hbWXihpJjb2xvdXIgdmlldyBmb3IgdGhlIGJhY2tlbmRzJyByZWdpb24gcmVuZGVyZXJzLlxuICBwcml2YXRlIHByZXNldFNldDogUHJlc2V0U2V0ID0gZGVmYXVsdFByZXNldFNldCgpO1xuICAvKiogU2Vzc2lvbi1vbmx5IGNsYXNzIGNvbG91cnMgZnJvbSBpbXBvcnRlZCBmaWxlcyAoc2VlIFByZXNldFNldC5pbXBvcnRlZENvbG9ycykuICovXG4gIHByaXZhdGUgaW1wb3J0ZWRDb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVzZXRTZXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcmVzZXRTZXQ+KHRoaXMucHJlc2V0U2V0KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzYXZlUHJlc2V0cyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHByZXNldHNMb2FkZWQgPSBmYWxzZTtcblxuICAvLyDilIDilIAgQWN0aXZlIG9uLWNhbnZhcyB0b29sIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBXaGljaCB0b29sIHRoZSB1c2VyIGhhcyBhcm1lZCAocGFuLCB6b29tLCBkcmF3cmVjdCwgd2FuZCwgZXJhc2VyLCDigKYpIG9yXG4gIC8vIG51bGwgd2hlbiBub25lIGlzIGFjdGl2ZS4gVGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRvb2wgc3RhdGUgYWNyb3NzXG4gIC8vIHRoZSB0b29sYmFyIGFuZCB3aGljaGV2ZXIgYmFja2VuZCdzIG92ZXJsYXkgaGFuZGxlcyB0aGUgcG9pbnRlci5cbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVUb29sJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIFNwYXRpYWwtb21pY3MgZGlzcGxheSBzdGF0ZSAoY29sb3VyIHNvdXJjZSwgcG9pbnQgc2l6ZSwgYWxwaGEsIHNjYWxpbmcpLlxuICAgKiAgSGVsZCBoZXJlLCBuZXh0IHRvIHRoZSBjb2xvcm1hcC9jaGFubmVsIHN0YXRlLCBzbyB0aGUgYWN0aXZlIGJhY2tlbmQgcmVhY3RzXG4gICAqICB0byBhbiBlZGl0IGV4YWN0bHkgYXMgaXQgZG9lcyBmb3IgYW4gaW1hZ2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3BhdGlhbFZpZXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTcGF0aWFsVmlld1N0YXRlPih7IC4uLkRFRkFVTFRfU1BBVElBTF9WSUVXIH0pO1xuXG4gIC8vIE9wdGlvbmFsICsgbnVsbCBkZWZhdWx0IHNvIHRoZSBzdG9yZSBjYW4gYmUgY29uc3RydWN0ZWQgYm90aCB2aWEgREkgYW5kXG4gIC8vIGRpcmVjdGx5IChgbmV3IFZpc3VhbGl6ZXJTdG9yZSgpYCBpbiB1bml0IHRlc3RzKTsgcHJlc2V0IGxvYWQvc2F2ZSBuby1vcFxuICAvLyB3aGVuIHRoZSBwb3J0IGlzIGFic2VudC5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChQUkVGRVJFTkNFU19QT1JUKSBwcml2YXRlIHJlYWRvbmx5IHByZWZzUG9ydDogUHJlZmVyZW5jZXNQb3J0IHwgbnVsbCA9IG51bGwpIHtcbiAgICB0aGlzLmluaXRQcmVzZXRQZXJzaXN0ZW5jZSgpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFByZXNldCBwZXJzaXN0ZW5jZSAoaml0LXVpIzcwKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcHJpdmF0ZSBpbml0UHJlc2V0UGVyc2lzdGVuY2UoKTogdm9pZCB7XG4gICAgLy8gRGVib3VuY2VkIHdyaXRlLWJhY2sgc28gYSBidXJzdCBvZiBlZGl0cyBjb2xsYXBzZXMgaW50byBvbmUgUFVULlxuICAgIHRoaXMuc2F2ZVByZXNldHMkLnBpcGUoZGVib3VuY2VUaW1lKDgwMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnByZWZzUG9ydD8uc2F2ZVByZXNldFNldCh0aGlzLnByZXNldFNldCkuc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvKiBrZWVwIGxvY2FsIGNvcHkgKi9cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIExvYWQgdGhlIHVzZXIncyBzYXZlZCBzZXQgKGlmIGFueSk7IG90aGVyd2lzZSBrZWVwIHRoZSBzZWVkZWQgZGVmYXVsdHMuXG4gICAgdGhpcy5wcmVmc1BvcnQ/LmxvYWRQcmVzZXRTZXQoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHNldCkgPT4ge1xuICAgICAgICBpZiAoc2V0ICYmIEFycmF5LmlzQXJyYXkoc2V0LmNsYXNzZXMpICYmIHNldC5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnByZXNldFNldCA9IHRoaXMubm9ybWFsaXplUHJlc2V0U2V0KHNldCk7XG4gICAgICAgICAgdGhpcy5lbWl0UHJlc2V0U2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVzZXRzTG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnByZXNldHNMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQdWJsaXNoIHRoZSBwcmVzZXQgc2V0IHdpdGggdGhpcyBzZXNzaW9uJ3MgaW1wb3J0ZWQgY2xhc3MgY29sb3Vycy4gKi9cbiAgcHJpdmF0ZSBlbWl0UHJlc2V0U2V0KCk6IHZvaWQge1xuICAgIHRoaXMucHJlc2V0U2V0JC5uZXh0KHsgLi4udGhpcy5wcmVzZXRTZXQsIGltcG9ydGVkQ29sb3JzOiB0aGlzLmltcG9ydGVkQ29sb3JzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVQcmVzZXRTZXQoc2V0OiBQcmVzZXRTZXQpOiBQcmVzZXRTZXQge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gZGVmYXVsdFByZXNldFNldCgpO1xuICAgIC8vIENsb25lIHRoZSBuZXN0ZWQgYXJyYXlzL29iamVjdHMgc28gb3V0c2lkZSBjYWxsZXJzIGNhbid0IG11dGF0ZSB0aGUgc3RvcmUnc1xuICAgIC8vIGludGVybmFsIHN0YXRlIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBzZXRQcmVzZXRTZXQoKS91cHNlcnRDbGFzcygpLlxuICAgIHJldHVybiB7XG4gICAgICBjbGFzc2VzOiBBcnJheS5pc0FycmF5KHNldC5jbGFzc2VzKSA/IHNldC5jbGFzc2VzLm1hcCgoYykgPT4gKHsgLi4uYyB9KSkgOiBbXSxcbiAgICAgIGZhbGxiYWNrUGFsZXR0ZTpcbiAgICAgICAgQXJyYXkuaXNBcnJheShzZXQuZmFsbGJhY2tQYWxldHRlKSAmJiBzZXQuZmFsbGJhY2tQYWxldHRlLmxlbmd0aFxuICAgICAgICAgID8gWy4uLnNldC5mYWxsYmFja1BhbGV0dGVdXG4gICAgICAgICAgOiBkZWZhdWx0cy5mYWxsYmFja1BhbGV0dGUsXG4gICAgICBhdXRvUHJvbW90ZTogISFzZXQuYXV0b1Byb21vdGUsXG4gICAgICBtYXRjaE1vZGU6IHNldC5tYXRjaE1vZGUgPT09ICdub3JtYWxpemVkJyA/ICdub3JtYWxpemVkJyA6ICdleGFjdCcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBRdWV1ZSBhIGRlYm91bmNlZCBzYXZlLiBOby1vcHMgdW50aWwgdGhlIGluaXRpYWwgbG9hZCByZXNvbHZlcyAoYW5kIHdoZW4gbm8gcG9ydCBpcyBib3VuZCkuICovXG4gIHByaXZhdGUgcXVldWVQcmVzZXRTYXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByZXNldHNMb2FkZWQpIHRoaXMuc2F2ZVByZXNldHMkLm5leHQoKTtcbiAgfVxuXG4gIC8qKiBQZXJzaXN0IHRoZSBjdXJyZW50IHByZXNldCBzZXQgaW1tZWRpYXRlbHksIGJ5cGFzc2luZyB0aGUgaW5jcmVtZW50YWwtZWRpdFxuICAgKiAgZGVib3VuY2UuIFVzZWQgZm9yIGV4cGxpY2l0IGJ1bGsgYWN0aW9ucyAoQXBwbHkgLyBJbXBvcnQgLyBSZXNldCkuICovXG4gIHByaXZhdGUgc2F2ZVByZXNldHNOb3coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJlc2V0c0xvYWRlZCkge1xuICAgICAgdGhpcy5wcmVmc1BvcnQ/LnNhdmVQcmVzZXRTZXQodGhpcy5wcmVzZXRTZXQpLnN1YnNjcmliZSh7XG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgLyoga2VlcCBsb2NhbCBjb3B5ICovXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIGF2YWlsYWJsZSBjb2xvcm1hcCBvcHRpb25zICh0cmVlIGZvciB0aGUgTFVUIGRyb3Bkb3duKS4gKi9cbiAgZ2V0Q29sb3JtYXBPcHRpb25zKCk6IGFueSB7XG4gICAgcmV0dXJuIENPTE9STUFQX09QVElPTlM7XG4gIH1cblxuICBnZXRDb2xvcm1hcCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNvbG9ybWFwJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICAvKiogU3luY2hyb25vdXMgY3VycmVudCB2YWx1ZSDigJQgZm9yIHJlbmRlciBwYXRocyB0aGF0IHJlYWQgaXQgd2hpbGUgYnVpbGRpbmdcbiAgICogIGEgZnJhbWUgKGUuZy4gUGxvdGx5J3MgY29sb3JzY2FsZSkgcmF0aGVyIHRoYW4gc3Vic2NyaWJpbmcuICovXG4gIGN1cnJlbnRDb2xvcm1hcCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbG9ybWFwJC52YWx1ZTtcbiAgfVxuICBzZXRDb2xvcm1hcChjb2xvcm1hcDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jb2xvcm1hcCQubmV4dChjb2xvcm1hcCk7XG4gIH1cblxuICBnZXRSZXZlcnNlU2NhbGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucmV2ZXJzZVNjYWxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBjdXJyZW50UmV2ZXJzZVNjYWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJldmVyc2VTY2FsZSQudmFsdWU7XG4gIH1cbiAgc2V0UmV2ZXJzZVNjYWxlKHJldmVyc2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJldmVyc2VTY2FsZSQubmV4dChyZXZlcnNlKTtcbiAgfVxuXG4gIGdldEltYWdlTWV0YSgpOiBPYnNlcnZhYmxlPElJbWFnZU1ldGFkYXRhW10+IHtcbiAgICByZXR1cm4gdGhpcy5pbWFnZU1ldGEkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoIHRoZSBwaHlzaWNhbCBwaXhlbCBzaXplICjCtW0vcGl4ZWwpIG9udG8gdGhlIGN1cnJlbnQgaW1hZ2UgbWV0YSBhbmRcbiAgICogcmUtZW1pdCwgd2l0aG91dCB0b3VjaGluZyB0aGUgZGVyaXZlZCBjaGFubmVscy4gVGhlIE9TRCB0aWxlIGRlc2NyaXB0b3JcbiAgICogKGZyb20gdGhlIHNlcnZlcidzIEJpby1Gb3JtYXRzIGAvdGlsZXMvaW5mb2ApIGlzIGF1dGhvcml0YXRpdmUgZm9yIHNjYWxlZFxuICAgKiBpbWFnZXMg4oCUIGBpbWFnZUluZm8uaW1hZ2VNZXRhYCBvZnRlbiBjYXJyaWVzIG5vIG1wcCDigJQgc28gdGhlIHJlbmRlcmVyIGZlZWRzXG4gICAqIGl0IGhlcmUgb25jZSB0aGUgZGVzY3JpcHRvciBsb2FkcywgbGV0dGluZyBhcmVhL3NjYWxlIGNvbnN1bWVycyAodGhlIFJlZ2lvblxuICAgKiBFZGl0b3IpIHNob3cgwrVtwrIvbW3CsiBpbnN0ZWFkIG9mIHB4wrIuIE5vLW9wIHdoZW4gbmVpdGhlciBheGlzIGlzIHBvc2l0aXZlLlxuICAgKi9cbiAgc2V0UGh5c2ljYWxQaXhlbFNpemUobXBwWD86IG51bWJlciwgbXBwWT86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGhhc1ggPSAobXBwWCA/PyAwKSA+IDAsXG4gICAgICBoYXNZID0gKG1wcFkgPz8gMCkgPiAwO1xuICAgIGlmICghaGFzWCAmJiAhaGFzWSkgcmV0dXJuO1xuICAgIGNvbnN0IGN1ciA9IHRoaXMuaW1hZ2VNZXRhJC52YWx1ZTtcbiAgICBjb25zdCBtZXRhID0gKGN1ciAmJiBjdXIubGVuZ3RoID8gY3VyIDogW3t9IGFzIElJbWFnZU1ldGFkYXRhXSkubWFwKChlKSA9PiAoeyAuLi5lIH0pKTtcbiAgICBpZiAoaGFzWCkgbWV0YVswXS5tcHBYID0gbXBwWDtcbiAgICBpZiAoaGFzWSkgbWV0YVswXS5tcHBZID0gbXBwWTtcbiAgICB0aGlzLmltYWdlTWV0YSQubmV4dChtZXRhKTtcbiAgfVxuICAvKipcbiAgICogUHVibGlzaCB0aGUgY3VycmVudCBpbWFnZSdzIG1ldGFkYXRhIGFuZCBkZXJpdmUgaXRzIGNoYW5uZWxzLlxuICAgKlxuICAgKiBgaW1hZ2VLZXlgIGlkZW50aWZpZXMgdGhlIGltYWdlIChpdHMgZmlsZSBuYW1lKS4gQSByZS1wbG90IG9mIHRoZSBTQU1FIGltYWdlXG4gICAqIGtlZXBzIHRoZSB1c2VyJ3Mgd2luZG93L2dhbW1hL3RpbnQgZWRpdHM7IGEgZGlmZmVyZW50IGltYWdlIGdldHMgaXRzIG93blxuICAgKiBkZXJpdmVkIGNoYW5uZWxzIGV2ZW4gYXQgdGhlIHNhbWUgY2hhbm5lbCBjb3VudCDigJQga2V5aW5nIG9uIHRoZSBjb3VudCBhbG9uZVxuICAgKiBsZWZ0IGEgREFQSS9HRlAvUkZQIHN0YWNrJ3MgbmFtZXMsIHRpbnRzIGFuZCB3aW5kb3dzIG9uIGEgZm9sbG93aW5nXG4gICAqIENEMy9DRDgvUGFuQ0sgb25lLiBXaXRob3V0IGEga2V5LCBvbmx5IGEgY2hhbmdlIG9mIGNoYW5uZWwgY291bnQgcmUtZGVyaXZlcy5cbiAgICovXG4gIHNldEltYWdlTWV0YShpbWFnZU1ldGE6IElJbWFnZU1ldGFkYXRhW10sIGltYWdlS2V5Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbWFnZU1ldGEkLm5leHQoaW1hZ2VNZXRhKTtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5kZXJpdmVDaGFubmVscyhpbWFnZU1ldGEpO1xuICAgIC8vIEFsd2F5cyByZWZyZXNoIHRoZSByZXNldCBiYXNlbGluZSB0byB0aGUgY3VycmVudCBpbWFnZSdzIGRlcml2ZWQgZGVmYXVsdHNcbiAgICAvLyAobmFtZXMvY29sb3VycyBjYW4gZGlmZmVyIGV2ZW4gYXQgdGhlIHNhbWUgY2hhbm5lbCBjb3VudCkuXG4gICAgdGhpcy5kZWZhdWx0Q2hhbm5lbFN0YXRlcyA9IG5leHQubWFwKChjKSA9PiAoeyAuLi5jIH0pKTtcbiAgICBjb25zdCBvdGhlckltYWdlID0gaW1hZ2VLZXkgIT09IHVuZGVmaW5lZCAmJiBpbWFnZUtleSAhPT0gdGhpcy5jaGFubmVsSW1hZ2VLZXk7XG4gICAgaWYgKGltYWdlS2V5ICE9PSB1bmRlZmluZWQpIHRoaXMuY2hhbm5lbEltYWdlS2V5ID0gaW1hZ2VLZXk7XG4gICAgaWYgKG90aGVySW1hZ2UgfHwgbmV4dC5sZW5ndGggIT09IHRoaXMuY2hhbm5lbFN0YXRlcyQudmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNoYW5uZWxTdGF0ZXMkLm5leHQobmV4dCk7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2hhbm5lbCQubmV4dCgwKTsgLy8gbmV3IGltYWdlIC8gY2hhbm5lbCBzdHJ1Y3R1cmUg4oaSIHJlc2V0IHRoZSBzZWxlY3RlZCBiYW5kXG4gICAgfVxuICB9XG5cbiAgLyoqIENoYW5uZWxzIGZvciBhbiBpbWFnZTpcbiAgICogICAtIFJHQiAocmdiQ2hhbm5lbHMg4omlIDMpIOKGkiBSZWQvR3JlZW4vQmx1ZTtcbiAgICogICAtIG11bHRpY2hhbm5lbCBmbHVvcmVzY2VuY2UgKGNoYW5uZWxDb3VudCA+IDEpIOKGkiBvbmUgY2hhbm5lbCBwZXIgYmFuZCxcbiAgICogICAgIG5hbWVkL3RpbnRlZCBmcm9tIHRoZSBzZXJ2ZXIgYGNoYW5uZWxJbmZvYCB3aGVuIHByZXNlbnQsIGVsc2UgYSBwYWxldHRlO1xuICAgKiAgIC0gb3RoZXJ3aXNlIGEgc2luZ2xlIGdyYXlzY2FsZSBcIkludGVuc2l0eVwiIGNoYW5uZWwuICovXG4gIHByaXZhdGUgZGVyaXZlQ2hhbm5lbHMobWV0YTogSUltYWdlTWV0YWRhdGFbXSk6IElDaGFubmVsU3RhdGVbXSB7XG4gICAgY29uc3QgYmFzZSA9IHsgbWluOiAwLCBtYXg6IDI1NSwgZ2FtbWE6IDEsIHZpc2libGU6IHRydWUgfTtcbiAgICBjb25zdCBtID0gbWV0YT8uWzBdO1xuICAgIGlmICgobT8ucmdiQ2hhbm5lbHMgPz8gMSkgPj0gMykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBpbmRleDogMCwgbmFtZTogJ1JlZCcsIGNvbG9yOiAnI2ZmMDAwMCcsIC4uLmJhc2UgfSxcbiAgICAgICAgeyBpbmRleDogMSwgbmFtZTogJ0dyZWVuJywgY29sb3I6ICcjMDBmZjAwJywgLi4uYmFzZSB9LFxuICAgICAgICB7IGluZGV4OiAyLCBuYW1lOiAnQmx1ZScsIGNvbG9yOiAnIzAwMDBmZicsIC4uLmJhc2UgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IGNvdW50ID0gbT8uY2hhbm5lbENvdW50ID8/IDE7XG4gICAgaWYgKGNvdW50ID4gMSkge1xuICAgICAgY29uc3QgaW5mbyA9IG0/LmNoYW5uZWxJbmZvO1xuICAgICAgLy8gRmFsbGJhY2sgdGludHMgKEZpamktaXNoKSB3aGVuIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwbHkgYSBjb2xvci5cbiAgICAgIGNvbnN0IHBhbGV0dGUgPSBbJyNmZjAwMDAnLCAnIzAwZmYwMCcsICcjMDAwMGZmJywgJyNmZmZmZmYnLCAnIzAwZmZmZicsICcjZmYwMGZmJywgJyNmZmZmMDAnXTtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9LCAoXywgaSkgPT4gKHtcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIG5hbWU6IGluZm8/LltpXT8ubmFtZSB8fCBgQ2hhbm5lbCAke2kgKyAxfWAsXG4gICAgICAgIGNvbG9yOiBpbmZvPy5baV0/LmNvbG9yIHx8IHBhbGV0dGVbaSAlIHBhbGV0dGUubGVuZ3RoXSxcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFt7IGluZGV4OiAwLCBuYW1lOiAnSW50ZW5zaXR5JywgY29sb3I6ICcjZmZmZmZmJywgLi4uYmFzZSB9XTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBDaGFubmVscyAmIGhpc3RvZ3JhbSBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0Q2hhbm5lbFN0YXRlcygpOiBPYnNlcnZhYmxlPElDaGFubmVsU3RhdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5uZWxTdGF0ZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGN1cnJlbnRDaGFubmVsU3RhdGVzKCk6IElDaGFubmVsU3RhdGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbm5lbFN0YXRlcyQudmFsdWU7XG4gIH1cbiAgLyoqIFRoZSBjaGFubmVsIHNlbGVjdGVkIGluIHRoZSBwYW5lIChkcml2ZXMgYSBzaW5nbGUtc2NhbGFyIDNEIFN1cmZhY2UpLiAqL1xuICBnZXRTZWxlY3RlZENoYW5uZWwoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENoYW5uZWwkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGN1cnJlbnRTZWxlY3RlZENoYW5uZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENoYW5uZWwkLnZhbHVlO1xuICB9XG4gIHNldFNlbGVjdGVkQ2hhbm5lbChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDaGFubmVsJC52YWx1ZSAhPT0gaW5kZXgpIHRoaXMuc2VsZWN0ZWRDaGFubmVsJC5uZXh0KGluZGV4KTtcbiAgfVxuICAvKiogUGF0Y2ggb25lIGNoYW5uZWwgYnkgaW5kZXggKGltbXV0YWJsZSB1cGRhdGUpLiAqL1xuICBzZXRDaGFubmVsU3RhdGUoaW5kZXg6IG51bWJlciwgcGFydGlhbDogUGFydGlhbDxJQ2hhbm5lbFN0YXRlPik6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLmNoYW5uZWxTdGF0ZXMkLnZhbHVlLm1hcCgoYykgPT5cbiAgICAgIGMuaW5kZXggPT09IGluZGV4ID8geyAuLi5jLCAuLi5wYXJ0aWFsLCBpbmRleDogYy5pbmRleCB9IDogYyxcbiAgICApO1xuICAgIHRoaXMuY2hhbm5lbFN0YXRlcyQubmV4dChuZXh0KTtcbiAgfVxuICAvKiogUmVwbGFjZSBhbGwgY2hhbm5lbCBzdGF0ZXMgKHVzZWQgYnkgYXV0by9yZXNldCkuICovXG4gIHNldENoYW5uZWxTdGF0ZXMoc3RhdGVzOiBJQ2hhbm5lbFN0YXRlW10pOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5uZWxTdGF0ZXMkLm5leHQoc3RhdGVzKTtcbiAgfVxuICAvKiogUmVzZXQgb25lIGNoYW5uZWwncyBkaXNwbGF5IHdpbmRvdywgZ2FtbWEgQU5EIGNvbG91ciB0byB0aGUgdmFsdWVzIGRlcml2ZWRcbiAgICogIGZvciB0aGUgY3VycmVudCBpbWFnZSAoZnVsbCAwLi4yNTUgcmFuZ2UsIGdhbW1hIDEsIHRoZSBjaGFubmVsJ3MgZGVmYXVsdFxuICAgKiAgdGludCkuIEZhbGxzIGJhY2sgdG8gbmV1dHJhbCBkZWZhdWx0cyBpZiBubyBiYXNlbGluZSB3YXMgY2FwdHVyZWQuICovXG4gIHJlc2V0Q2hhbm5lbFN0YXRlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmRlZmF1bHRDaGFubmVsU3RhdGVzLmZpbmQoKGMpID0+IGMuaW5kZXggPT09IGluZGV4KTtcbiAgICB0aGlzLnNldENoYW5uZWxTdGF0ZShpbmRleCwge1xuICAgICAgbWluOiBkZWY/Lm1pbiA/PyAwLFxuICAgICAgbWF4OiBkZWY/Lm1heCA/PyAyNTUsXG4gICAgICBnYW1tYTogZGVmPy5nYW1tYSA/PyAxLFxuICAgICAgY29sb3I6IGRlZj8uY29sb3IgPz8gJyNmZmZmZmYnLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0R3JheXNjYWxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmdyYXlzY2FsZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgY3VycmVudEdyYXlzY2FsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ncmF5c2NhbGUkLnZhbHVlO1xuICB9XG4gIHNldEdyYXlzY2FsZShvbjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZ3JheXNjYWxlJC5uZXh0KG9uKTtcbiAgfVxuXG4gIGdldEludmVydCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pbnZlcnQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGN1cnJlbnRJbnZlcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZXJ0JC52YWx1ZTtcbiAgfVxuICBzZXRJbnZlcnQob246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmludmVydCQubmV4dChvbik7XG4gIH1cblxuICAvKiogTmFtZeKGkmNvbG91ciB2aWV3IG9mIHRoZSBjdXJyZW50IHByZXNldCBzZXQgKGNvbXBhdCBmb3IgYmFja2VuZCByZW5kZXJlcnNcbiAgICogIHRoYXQgc3RpbGwgcmVhZCBhIE1hcCkuICovXG4gIGdldENsYXNzaWZpY2F0aW9uQ29sb3JzKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMucHJlc2V0U2V0LmNsYXNzZXMubWFwKChjKSA9PiBbYy5uYW1lLCBjLmNvbG9yXSkpO1xuICB9XG4gIC8qKiBVcHNlcnQgYSBzaW5nbGUgY2xhc3MgY29sb3VyICh1c2VkIGJ5IHRoZSBlZGl0b3IncyBwZXItY2xhc3MgY29sb3VyIHBpY2tlcikuICovXG4gIHNldENsYXNzaWZpY2F0aW9uQ29sb3IobGFiZWw6IHN0cmluZywgY29sb3I6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBzZXJ0Q2xhc3MoeyBuYW1lOiBsYWJlbCwgY29sb3IgfSk7XG4gIH1cblxuICAvLyDilIDilIAgQW5ub3RhdGlvbi1jbGFzcyBwcmVzZXQgc2V0IGFjY2Vzc29ycyAoaml0LXVpIzcwKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0UHJlc2V0U2V0KCk6IFByZXNldFNldCB7XG4gICAgLy8gRGVmZW5zaXZlIGNvcHk6IGNhbGxlcnMgbXVzdCBub3QgbXV0YXRlIHRoZSBzdG9yZSdzIHN0YXRlIGluIHBsYWNlIOKAlFxuICAgIC8vIGFsbCBjaGFuZ2VzIGdvIHRocm91Z2ggc2V0UHJlc2V0U2V0KCkvdXBzZXJ0Q2xhc3MoKS9yZW1vdmVDbGFzcygpIHNvXG4gICAgLy8gcHJlc2V0U2V0JCBhbmQgcGVyc2lzdGVuY2Ugc3RheSBpbiBzeW5jLlxuICAgIHJldHVybiB7XG4gICAgICBjbGFzc2VzOiB0aGlzLnByZXNldFNldC5jbGFzc2VzLm1hcCgoYykgPT4gKHsgLi4uYyB9KSksXG4gICAgICBmYWxsYmFja1BhbGV0dGU6IFsuLi50aGlzLnByZXNldFNldC5mYWxsYmFja1BhbGV0dGVdLFxuICAgICAgYXV0b1Byb21vdGU6IHRoaXMucHJlc2V0U2V0LmF1dG9Qcm9tb3RlLFxuICAgICAgbWF0Y2hNb2RlOiB0aGlzLnByZXNldFNldC5tYXRjaE1vZGUsXG4gICAgICBpbXBvcnRlZENvbG9yczogeyAuLi50aGlzLmltcG9ydGVkQ29sb3JzIH0sXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmVtZW1iZXIgdGhlIGNsYXNzIGNvbG91cnMgYW4gaW1wb3J0ZWQgZmlsZSBjYXJyaWVkIChsYWJlbCDihpIgY29sb3VyKSwgc28gaXRzIHJlZ2lvbnMga2VlcFxuICAgKiB0aGVtOiBhIGNsYXNzIHdpdGggYSBwcmVzZXQga2VlcHMgdGhlIHByZXNldCdzIGNvbG91ciwgYW5kIHRoZSBsYXRlc3QgaW1wb3J0IHdpbnMgZm9yIHRoZVxuICAgKiByZXN0LiBOb3QgcGVyc2lzdGVkLlxuICAgKi9cbiAgcmVtZW1iZXJJbXBvcnRlZENsYXNzQ29sb3JzKGNvbG9yczogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IFtsYWJlbCwgY29sb3JdIG9mIGNvbG9ycykge1xuICAgICAgaWYgKCFsYWJlbCB8fCBmaW5kUHJlc2V0KGxhYmVsLCB0aGlzLnByZXNldFNldCkpIGNvbnRpbnVlO1xuICAgICAgY29uc3Qga2V5ID0gcHJlc2V0S2V5KHRoaXMucHJlc2V0U2V0LCBsYWJlbCk7XG4gICAgICBpZiAodGhpcy5pbXBvcnRlZENvbG9yc1trZXldID09PSBjb2xvcikgY29udGludWU7XG4gICAgICB0aGlzLmltcG9ydGVkQ29sb3JzID0geyAuLi50aGlzLmltcG9ydGVkQ29sb3JzLCBba2V5XTogY29sb3IgfTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZCkgdGhpcy5lbWl0UHJlc2V0U2V0KCk7XG4gIH1cbiAgZ2V0UHJlc2V0U2V0JCgpOiBPYnNlcnZhYmxlPFByZXNldFNldD4ge1xuICAgIHJldHVybiB0aGlzLnByZXNldFNldCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgc2V0UHJlc2V0U2V0KHNldDogUHJlc2V0U2V0KTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZXRTZXQgPSB0aGlzLm5vcm1hbGl6ZVByZXNldFNldChzZXQpO1xuICAgIHRoaXMuZW1pdFByZXNldFNldCgpO1xuICAgIHRoaXMuc2F2ZVByZXNldHNOb3coKTsgLy8gZXhwbGljaXQgYnVsayBhcHBseS9pbXBvcnQg4oaSIHBlcnNpc3QgaW1tZWRpYXRlbHlcbiAgfVxuICAvKiogQWRkIG9yIHVwZGF0ZSBhIGNsYXNzIChrZXllZCBieSBleGFjdCBzdG9yZWQgYG5hbWVgKS4gKi9cbiAgdXBzZXJ0Q2xhc3MocHJlc2V0OiBDbGFzc1ByZXNldCk6IHZvaWQge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbLi4udGhpcy5wcmVzZXRTZXQuY2xhc3Nlc107XG4gICAgY29uc3QgaSA9IGNsYXNzZXMuZmluZEluZGV4KChjKSA9PiBjLm5hbWUgPT09IHByZXNldC5uYW1lKTtcbiAgICBpZiAoaSA+PSAwKSBjbGFzc2VzW2ldID0geyAuLi5jbGFzc2VzW2ldLCAuLi5wcmVzZXQgfTtcbiAgICBlbHNlIGNsYXNzZXMucHVzaCh7IC4uLnByZXNldCB9KTtcbiAgICB0aGlzLnByZXNldFNldCA9IHsgLi4udGhpcy5wcmVzZXRTZXQsIGNsYXNzZXMgfTtcbiAgICB0aGlzLmVtaXRQcmVzZXRTZXQoKTtcbiAgICB0aGlzLnF1ZXVlUHJlc2V0U2F2ZSgpO1xuICB9XG4gIHJlbW92ZUNsYXNzKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJlc2V0U2V0ID0geyAuLi50aGlzLnByZXNldFNldCwgY2xhc3NlczogdGhpcy5wcmVzZXRTZXQuY2xhc3Nlcy5maWx0ZXIoKGMpID0+IGMubmFtZSAhPT0gbmFtZSkgfTtcbiAgICB0aGlzLmVtaXRQcmVzZXRTZXQoKTtcbiAgICB0aGlzLnF1ZXVlUHJlc2V0U2F2ZSgpO1xuICB9XG4gIHJlc2V0UHJlc2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXNldFNldCA9IGRlZmF1bHRQcmVzZXRTZXQoKTtcbiAgICB0aGlzLmVtaXRQcmVzZXRTZXQoKTtcbiAgICB0aGlzLnNhdmVQcmVzZXRzTm93KCk7IC8vIGV4cGxpY2l0IHJlc2V0IOKGkiBwZXJzaXN0IGltbWVkaWF0ZWx5XG4gIH1cblxuICAvLyDilIDilIAgc3BhdGlhbC1vbWljcyB2aWV3IHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBnZXRTcGF0aWFsVmlldyQoKTogT2JzZXJ2YWJsZTxTcGF0aWFsVmlld1N0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuc3BhdGlhbFZpZXckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqIFN5bmNocm9ub3VzIHJlYWQsIGZvciBhIHJlbmRlcmVyIGJ1aWxkaW5nIGl0cyBmaXJzdCBmcmFtZS4gKi9cbiAgY3VycmVudFNwYXRpYWxWaWV3KCk6IFNwYXRpYWxWaWV3U3RhdGUge1xuICAgIHJldHVybiB0aGlzLnNwYXRpYWxWaWV3JC52YWx1ZTtcbiAgfVxuXG4gIC8qKiBQYXRjaCB0aGUgc3BhdGlhbCB2aWV3IHN0YXRlOyBlbWl0cyBvbmNlIHdpdGggdGhlIG1lcmdlZCB2YWx1ZS4gKi9cbiAgc2V0U3BhdGlhbFZpZXcocGFydGlhbDogUGFydGlhbDxTcGF0aWFsVmlld1N0YXRlPik6IHZvaWQge1xuICAgIHRoaXMuc3BhdGlhbFZpZXckLm5leHQoeyAuLi50aGlzLnNwYXRpYWxWaWV3JC52YWx1ZSwgLi4ucGFydGlhbCB9KTtcbiAgfVxuXG4gIGdldEFjdGl2ZVRvb2wkKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVRvb2wkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIHNldEFjdGl2ZVRvb2wodG9vbDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlVG9vbCQubmV4dCh0b29sKTtcbiAgfVxufVxuIl19
|
|
@@ -20,6 +20,8 @@ export class RegionToolsComponent {
|
|
|
20
20
|
this.activeDragMode = null;
|
|
21
21
|
/** The 3D cloud's screen-space lasso: no brush or polyline. */
|
|
22
22
|
this.is3dRegions = false;
|
|
23
|
+
/** Only the selection tool (a volume view: it picks the regions' surfaces in 3D). */
|
|
24
|
+
this.selectOnly = false;
|
|
23
25
|
/** The backend has a vertex-editing overlay (OSD + napari-js image). */
|
|
24
26
|
this.vertexTools = false;
|
|
25
27
|
/** Magic-wand sensitivity (the wand's slider value). */
|
|
@@ -62,6 +64,8 @@ export class RegionToolsComponent {
|
|
|
62
64
|
this.trackByMode = (_, b) => b.mode;
|
|
63
65
|
}
|
|
64
66
|
shown(b) {
|
|
67
|
+
if (this.selectOnly)
|
|
68
|
+
return b.mode === 'select';
|
|
65
69
|
if (b.gate === 'not3d')
|
|
66
70
|
return !this.is3dRegions;
|
|
67
71
|
if (b.gate === 'vertex')
|
|
@@ -73,7 +77,7 @@ export class RegionToolsComponent {
|
|
|
73
77
|
return Array.isArray(v) ? v[0] : v;
|
|
74
78
|
}
|
|
75
79
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: RegionToolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
76
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: RegionToolsComponent, isStandalone: true, selector: "toolbar-region-tools", inputs: { activeDragMode: "activeDragMode", is3dRegions: "is3dRegions", vertexTools: "vertexTools", wandSensitivity: "wandSensitivity", brushSize: "brushSize", vertexEraserRadius: "vertexEraserRadius", canUndo: "canUndo", canRedo: "canRedo" }, outputs: { openRegionEditor: "openRegionEditor", toggleDragMode: "toggleDragMode", undoRegion: "undoRegion", redoRegion: "redoRegion", deleteRegion: "deleteRegion", wandSensitivityChange: "wandSensitivityChange", brushSizeChange: "brushSizeChange", vertexEraserRadiusChange: "vertexEraserRadiusChange" }, ngImport: i0, template: "<span class=\"toolbar-separator\"></span>\n<!-- Region Editor: opens the editor as a floating dialog (formerly the\n right-panel Regions tab). Sits with the region drawing tools. -->\n<p-button\n size=\"small\"\n [text]=\"true\"\n ariaLabel=\"Open the Region Editor\"\n pTooltip=\"Open the Region Editor\"\n tooltipPosition=\"bottom\"\n (onClick)=\"openRegionEditor.emit()\"\n>\n <img src=\"assets/plotting/region-editor.svg\" class=\"toolbar-icon-dark\" style=\"width: 1rem\" alt=\"\" />\n</p-button>\n\n<!-- Region drawing tools, from REGION_TOOL_BUTTONS. A tool's parameter slider\n follows its button while it is active. -->\n<ng-container *ngFor=\"let b of buttons; trackBy: trackByMode\">\n <p-button\n *ngIf=\"shown(b)\"\n size=\"small\"\n [icon]=\"b.icon\"\n [ariaLabel]=\"b.label\"\n [text]=\"activeDragMode !== b.mode\"\n [pTooltip]=\"b.tooltip\"\n [escape]=\"false\"\n tooltipPosition=\"bottom\"\n (onClick)=\"toggleDragMode.emit(b.mode)\"\n >\n <img\n *ngIf=\"b.img\"\n [src]=\"'assets/plotting/' + b.img\"\n alt=\"\"\n style=\"width: 1rem\"\n [class]=\"activeDragMode === b.mode ? 'toolbar-icon-active' : 'toolbar-icon-dark'\"\n />\n </p-button>\n <ng-container *ngIf=\"shown(b) && b.slider && activeDragMode === b.mode\" [ngSwitch]=\"b.slider\">\n <toolbar-tool-slider\n *ngSwitchCase=\"'brush'\"\n label=\"Size\"\n [value]=\"brushSize\"\n [min]=\"brushSizeMin\"\n [max]=\"brushSizeMax\"\n [step]=\"brushSizeStep\"\n tooltip=\"Brush diameter in image pixels.\"\n [valueText]=\"'' + brushSize\"\n (valueChange)=\"brushSizeChange.emit(asNumber($event))\"\n >\n </toolbar-tool-slider>\n <toolbar-tool-slider\n *ngSwitchCase=\"'wand'\"\n label=\"Sens.\"\n [value]=\"wandSensitivity\"\n [min]=\"wandSensitivityMin\"\n [max]=\"wandSensitivityMax\"\n [step]=\"wandSensitivityStep\"\n tooltip=\"Higher = stricter (smaller selection); lower = looser.\n Takes effect from the next click/drag tick.\"\n [valueText]=\"wandSensitivity.toFixed(1)\"\n (valueChange)=\"wandSensitivityChange.emit(asNumber($event))\"\n >\n </toolbar-tool-slider>\n <toolbar-tool-slider\n *ngSwitchCase=\"'eraser'\"\n label=\"Radius\"\n [value]=\"vertexEraserRadius\"\n [min]=\"vertexEraserRadiusMin\"\n [max]=\"vertexEraserRadiusMax\"\n [step]=\"vertexEraserRadiusStep\"\n tooltip=\"Eraser radius in image pixels.\n Vertices within this distance of the cursor are removed, and the\n outline is rejoined at the eraser's edge.\"\n [valueText]=\"'' + vertexEraserRadius\"\n (valueChange)=\"vertexEraserRadiusChange.emit(asNumber($event))\"\n >\n </toolbar-tool-slider>\n </ng-container>\n</ng-container>\n\n<p-button\n size=\"small\"\n [text]=\"true\"\n [disabled]=\"!canUndo\"\n ariaLabel=\"Undo\"\n pTooltip=\"Undo the last region action (<kbd>Ctrl</kbd>+<kbd>Z</kbd>).\n Up to 10 actions can be undone.\"\n [escape]=\"false\"\n tooltipPosition=\"bottom\"\n (onClick)=\"undoRegion.emit()\"\n>\n <img src=\"assets/plotting/undo.svg\" class=\"toolbar-icon-dark\" style=\"width: 1rem\" alt=\"\" />\n</p-button>\n<p-button\n size=\"small\"\n [text]=\"true\"\n [disabled]=\"!canRedo\"\n ariaLabel=\"Redo\"\n pTooltip=\"Redo the last undone region action\n (<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Z</kbd> / <kbd>Ctrl</kbd>+<kbd>Y</kbd>).\"\n [escape]=\"false\"\n tooltipPosition=\"bottom\"\n (onClick)=\"redoRegion.emit()\"\n>\n <img src=\"assets/plotting/redo.svg\" class=\"toolbar-icon-dark\" style=\"width: 1rem\" alt=\"\" />\n</p-button>\n<p-button\n icon=\"pi pi-trash\"\n size=\"small\"\n [text]=\"true\"\n ariaLabel=\"Delete selected region\"\n pTooltip=\"Delete selected region (<kbd>Del</kbd>)\"\n [escape]=\"false\"\n tooltipPosition=\"bottom\"\n (onClick)=\"deleteRegion.emit()\"\n>\n</p-button>\n", styles: [".toolbar-text{color:var(--primary-color);font-size:.875rem}.toolbar-separator{border-left:1px solid var(--surface-border);height:1.5rem;margin:0 .25rem;align-self:center}.toolbar-icon-dark{filter:brightness(0) invert(47%) sepia(98%) saturate(567%) hue-rotate(181deg) brightness(103%) contrast(98%)}.toolbar-icon-active{filter:brightness(0) invert(1)}.wand-sensitivity-value{min-width:2rem;text-align:right}:host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: ToolSliderComponent, selector: "toolbar-tool-slider", inputs: ["label", "value", "min", "max", "step", "range", "tooltip", "valueText"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
80
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: RegionToolsComponent, isStandalone: true, selector: "toolbar-region-tools", inputs: { activeDragMode: "activeDragMode", is3dRegions: "is3dRegions", selectOnly: "selectOnly", vertexTools: "vertexTools", wandSensitivity: "wandSensitivity", brushSize: "brushSize", vertexEraserRadius: "vertexEraserRadius", canUndo: "canUndo", canRedo: "canRedo" }, outputs: { openRegionEditor: "openRegionEditor", toggleDragMode: "toggleDragMode", undoRegion: "undoRegion", redoRegion: "redoRegion", deleteRegion: "deleteRegion", wandSensitivityChange: "wandSensitivityChange", brushSizeChange: "brushSizeChange", vertexEraserRadiusChange: "vertexEraserRadiusChange" }, ngImport: i0, template: "<span class=\"toolbar-separator\"></span>\n<!-- Region Editor: opens the editor as a floating dialog (formerly the\n right-panel Regions tab). Sits with the region drawing tools. -->\n<p-button\n size=\"small\"\n [text]=\"true\"\n ariaLabel=\"Open the Region Editor\"\n pTooltip=\"Open the Region Editor\"\n tooltipPosition=\"bottom\"\n (onClick)=\"openRegionEditor.emit()\"\n>\n <img src=\"assets/plotting/region-editor.svg\" class=\"toolbar-icon-dark\" style=\"width: 1rem\" alt=\"\" />\n</p-button>\n\n<!-- Region drawing tools, from REGION_TOOL_BUTTONS. A tool's parameter slider\n follows its button while it is active. -->\n<ng-container *ngFor=\"let b of buttons; trackBy: trackByMode\">\n <p-button\n *ngIf=\"shown(b)\"\n size=\"small\"\n [icon]=\"b.icon\"\n [ariaLabel]=\"b.label\"\n [text]=\"activeDragMode !== b.mode\"\n [pTooltip]=\"b.tooltip\"\n [escape]=\"false\"\n tooltipPosition=\"bottom\"\n (onClick)=\"toggleDragMode.emit(b.mode)\"\n >\n <img\n *ngIf=\"b.img\"\n [src]=\"'assets/plotting/' + b.img\"\n alt=\"\"\n style=\"width: 1rem\"\n [class]=\"activeDragMode === b.mode ? 'toolbar-icon-active' : 'toolbar-icon-dark'\"\n />\n </p-button>\n <ng-container *ngIf=\"shown(b) && b.slider && activeDragMode === b.mode\" [ngSwitch]=\"b.slider\">\n <toolbar-tool-slider\n *ngSwitchCase=\"'brush'\"\n label=\"Size\"\n [value]=\"brushSize\"\n [min]=\"brushSizeMin\"\n [max]=\"brushSizeMax\"\n [step]=\"brushSizeStep\"\n tooltip=\"Brush diameter in image pixels.\"\n [valueText]=\"'' + brushSize\"\n (valueChange)=\"brushSizeChange.emit(asNumber($event))\"\n >\n </toolbar-tool-slider>\n <toolbar-tool-slider\n *ngSwitchCase=\"'wand'\"\n label=\"Sens.\"\n [value]=\"wandSensitivity\"\n [min]=\"wandSensitivityMin\"\n [max]=\"wandSensitivityMax\"\n [step]=\"wandSensitivityStep\"\n tooltip=\"Higher = stricter (smaller selection); lower = looser.\n Takes effect from the next click/drag tick.\"\n [valueText]=\"wandSensitivity.toFixed(1)\"\n (valueChange)=\"wandSensitivityChange.emit(asNumber($event))\"\n >\n </toolbar-tool-slider>\n <toolbar-tool-slider\n *ngSwitchCase=\"'eraser'\"\n label=\"Radius\"\n [value]=\"vertexEraserRadius\"\n [min]=\"vertexEraserRadiusMin\"\n [max]=\"vertexEraserRadiusMax\"\n [step]=\"vertexEraserRadiusStep\"\n tooltip=\"Eraser radius in image pixels.\n Vertices within this distance of the cursor are removed, and the\n outline is rejoined at the eraser's edge.\"\n [valueText]=\"'' + vertexEraserRadius\"\n (valueChange)=\"vertexEraserRadiusChange.emit(asNumber($event))\"\n >\n </toolbar-tool-slider>\n </ng-container>\n</ng-container>\n\n<p-button\n size=\"small\"\n [text]=\"true\"\n [disabled]=\"!canUndo\"\n ariaLabel=\"Undo\"\n pTooltip=\"Undo the last region action (<kbd>Ctrl</kbd>+<kbd>Z</kbd>).\n Up to 10 actions can be undone.\"\n [escape]=\"false\"\n tooltipPosition=\"bottom\"\n (onClick)=\"undoRegion.emit()\"\n>\n <img src=\"assets/plotting/undo.svg\" class=\"toolbar-icon-dark\" style=\"width: 1rem\" alt=\"\" />\n</p-button>\n<p-button\n size=\"small\"\n [text]=\"true\"\n [disabled]=\"!canRedo\"\n ariaLabel=\"Redo\"\n pTooltip=\"Redo the last undone region action\n (<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Z</kbd> / <kbd>Ctrl</kbd>+<kbd>Y</kbd>).\"\n [escape]=\"false\"\n tooltipPosition=\"bottom\"\n (onClick)=\"redoRegion.emit()\"\n>\n <img src=\"assets/plotting/redo.svg\" class=\"toolbar-icon-dark\" style=\"width: 1rem\" alt=\"\" />\n</p-button>\n<p-button\n icon=\"pi pi-trash\"\n size=\"small\"\n [text]=\"true\"\n ariaLabel=\"Delete selected region\"\n pTooltip=\"Delete selected region (<kbd>Del</kbd>)\"\n [escape]=\"false\"\n tooltipPosition=\"bottom\"\n (onClick)=\"deleteRegion.emit()\"\n>\n</p-button>\n", styles: [".toolbar-text{color:var(--primary-color);font-size:.875rem}.toolbar-separator{border-left:1px solid var(--surface-border);height:1.5rem;margin:0 .25rem;align-self:center}.toolbar-icon-dark{filter:brightness(0) invert(47%) sepia(98%) saturate(567%) hue-rotate(181deg) brightness(103%) contrast(98%)}.toolbar-icon-active{filter:brightness(0) invert(1)}.wand-sensitivity-value{min-width:2rem;text-align:right}:host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: ToolSliderComponent, selector: "toolbar-tool-slider", inputs: ["label", "value", "min", "max", "step", "range", "tooltip", "valueText"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
77
81
|
}
|
|
78
82
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: RegionToolsComponent, decorators: [{
|
|
79
83
|
type: Component,
|
|
@@ -82,6 +86,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
82
86
|
type: Input
|
|
83
87
|
}], is3dRegions: [{
|
|
84
88
|
type: Input
|
|
89
|
+
}], selectOnly: [{
|
|
90
|
+
type: Input
|
|
85
91
|
}], vertexTools: [{
|
|
86
92
|
type: Input
|
|
87
93
|
}], wandSensitivity: [{
|
|
@@ -111,4 +117,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
111
117
|
}], vertexEraserRadiusChange: [{
|
|
112
118
|
type: Output
|
|
113
119
|
}] } });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXRvb2xzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbGJhci9yZWdpb24tdG9vbHMvcmVnaW9uLXRvb2xzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbGJhci9yZWdpb24tdG9vbHMvcmVnaW9uLXRvb2xzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFvQixNQUFNLHVCQUF1QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7OztBQUUzRTs7Ozs7R0FLRztBQVNILE1BQU0sT0FBTyxvQkFBb0I7SUFSakM7UUFTRSw4Q0FBOEM7UUFDckMsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQzlDLCtEQUErRDtRQUN0RCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUM3Qix3RUFBd0U7UUFDL0QsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDN0Isd0RBQXdEO1FBQy9DLG9CQUFlLEdBQUcsR0FBRyxDQUFDO1FBQy9CLHNDQUFzQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLDRDQUE0QztRQUNuQyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDakMsb0RBQW9EO1FBQzNDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsNERBQTREO1FBQ25ELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFekIscUNBQXFDO1FBQzNCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdEQsc0RBQXNEO1FBQzVDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN0RCxtQ0FBbUM7UUFDekIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDaEQsMENBQTBDO1FBQ2hDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2hELGtDQUFrQztRQUN4QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbEQseUNBQXlDO1FBQy9CLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQ3pFLG1DQUFtQztRQUN6QixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQ25FLDZDQUE2QztRQUNuQyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUV6RCxZQUFPLEdBQUcsbUJBQW1CLENBQUM7UUFFakQsd0VBQXdFO1FBQ3JELHVCQUFrQixHQUFHLEdBQUcsQ0FBQztRQUN6Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsd0JBQW1CLEdBQUcsR0FBRyxDQUFDO1FBQzFCLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLGlCQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQiwwQkFBcUIsR0FBRyxHQUFHLENBQUM7UUFDNUIsMkJBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLGdCQUFXLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBbUIsRUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztLQVlyRjtJQVZXLEtBQUssQ0FBQyxDQUFtQjtRQUNqQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTztZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pELElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtFQUFrRTtJQUN4RCxRQUFRLENBQUMsQ0FBZ0M7UUFDakQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDOzhHQTNEVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixxbkJDdEJqQyxzOEhBb0hBLHdlRG5HWSxZQUFZLDJiQUFFLFlBQVksNlhBQUUsYUFBYSxzWEFBRSxtQkFBbUI7OzJGQUs3RCxvQkFBb0I7a0JBUmhDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixDQUFDLG1CQUd4RCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsd0JBQXdCO3NCQUFqQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5cbmltcG9ydCB7IFJFR0lPTl9UT09MX0JVVFRPTlMsIFJlZ2lvblRvb2xCdXR0b24gfSBmcm9tICcuL3JlZ2lvbi10b29sLWJ1dHRvbnMnO1xuaW1wb3J0IHsgVG9vbFNsaWRlckNvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2wtc2xpZGVyL3Rvb2wtc2xpZGVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogVGhlIHRvb2xiYXIncyByZWdpb24gZ3JvdXA6IG9wZW4gdGhlIFJlZ2lvbiBFZGl0b3IsIHRoZSBkcmF3aW5nIHRvb2xzIChvbmVcbiAqIHRhYmxlLWRyaXZlbiB0b2dnbGUgcGVyIHtAbGluayBSRUdJT05fVE9PTF9CVVRUT05TfSBlbnRyeSwgd2l0aCB0aGUgYWN0aXZlXG4gKiB0b29sJ3MgcGFyYW1ldGVyIHNsaWRlciksIHVuZG8gLyByZWRvIGFuZCBkZWxldGUuIFByZXNlbnRhdGlvbmFsOiB0aGUgaG9zdFxuICogb3ducyB0aGUgYWN0aXZlIG1vZGUgYW5kIGV2ZXJ5IHZhbHVlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b29sYmFyLXJlZ2lvbi10b29scycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJ1dHRvbk1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgVG9vbFNsaWRlckNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWdpb24tdG9vbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWdpb24tdG9vbHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lvblRvb2xzQ29tcG9uZW50IHtcbiAgLyoqIFRoZSBhcm1lZCBkcmF3aW5nIHRvb2wncyBtb2RlLCBvciBudWxsLiAqL1xuICBASW5wdXQoKSBhY3RpdmVEcmFnTW9kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgM0QgY2xvdWQncyBzY3JlZW4tc3BhY2UgbGFzc286IG5vIGJydXNoIG9yIHBvbHlsaW5lLiAqL1xuICBASW5wdXQoKSBpczNkUmVnaW9ucyA9IGZhbHNlO1xuICAvKiogVGhlIGJhY2tlbmQgaGFzIGEgdmVydGV4LWVkaXRpbmcgb3ZlcmxheSAoT1NEICsgbmFwYXJpLWpzIGltYWdlKS4gKi9cbiAgQElucHV0KCkgdmVydGV4VG9vbHMgPSBmYWxzZTtcbiAgLyoqIE1hZ2ljLXdhbmQgc2Vuc2l0aXZpdHkgKHRoZSB3YW5kJ3Mgc2xpZGVyIHZhbHVlKS4gKi9cbiAgQElucHV0KCkgd2FuZFNlbnNpdGl2aXR5ID0gMi4wO1xuICAvKiogQnJ1c2ggZGlhbWV0ZXIgaW4gaW1hZ2UgcGl4ZWxzLiAqL1xuICBASW5wdXQoKSBicnVzaFNpemUgPSA0MDtcbiAgLyoqIFZlcnRleC1lcmFzZXIgcmFkaXVzIGluIGltYWdlIHBpeGVscy4gKi9cbiAgQElucHV0KCkgdmVydGV4RXJhc2VyUmFkaXVzID0gMjA7XG4gIC8qKiBBIHJlZ2lvbiBhY3Rpb24gY2FuIGJlIHVuZG9uZSAoZW5hYmxlcyBVbmRvKS4gKi9cbiAgQElucHV0KCkgY2FuVW5kbyA9IGZhbHNlO1xuICAvKiogQW4gdW5kb25lIHJlZ2lvbiBhY3Rpb24gY2FuIGJlIHJlZG9uZSAoZW5hYmxlcyBSZWRvKS4gKi9cbiAgQElucHV0KCkgY2FuUmVkbyA9IGZhbHNlO1xuXG4gIC8qKiBPcGVuIHRoZSBSZWdpb24gRWRpdG9yIGRpYWxvZy4gKi9cbiAgQE91dHB1dCgpIG9wZW5SZWdpb25FZGl0b3IgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBBIGRyYXdpbmcgdG9vbCdzIGJ1dHRvbiB3YXMgY2xpY2tlZCAoaXRzIG1vZGUpLiAqL1xuICBAT3V0cHV0KCkgdG9nZ2xlRHJhZ01vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIFVuZG8gdGhlIGxhc3QgcmVnaW9uIGFjdGlvbi4gKi9cbiAgQE91dHB1dCgpIHVuZG9SZWdpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBSZWRvIHRoZSBsYXN0IHVuZG9uZSByZWdpb24gYWN0aW9uLiAqL1xuICBAT3V0cHV0KCkgcmVkb1JlZ2lvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIERlbGV0ZSB0aGUgc2VsZWN0ZWQgcmVnaW9uLiAqL1xuICBAT3V0cHV0KCkgZGVsZXRlUmVnaW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogVGhlIHdhbmQgc2Vuc2l0aXZpdHkgc2xpZGVyIG1vdmVkLiAqL1xuICBAT3V0cHV0KCkgd2FuZFNlbnNpdGl2aXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIC8qKiBUaGUgYnJ1c2ggc2l6ZSBzbGlkZXIgbW92ZWQuICovXG4gIEBPdXRwdXQoKSBicnVzaFNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgLyoqIFRoZSB2ZXJ0ZXgtZXJhc2VyIHJhZGl1cyBzbGlkZXIgbW92ZWQuICovXG4gIEBPdXRwdXQoKSB2ZXJ0ZXhFcmFzZXJSYWRpdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnV0dG9ucyA9IFJFR0lPTl9UT09MX0JVVFRPTlM7XG5cbiAgLyoqIFNsaWRlciBib3VuZHMg4oCUIHRvb2xiYXIgVUkgY29uc3RhbnRzICh0aGUgdmFsdWVzIGFyZSBob3N0LW93bmVkKS4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhbmRTZW5zaXRpdml0eU1pbiA9IDAuNTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhbmRTZW5zaXRpdml0eU1heCA9IDEwLjA7XG4gIHByb3RlY3RlZCByZWFkb25seSB3YW5kU2Vuc2l0aXZpdHlTdGVwID0gMC4xO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnJ1c2hTaXplTWluID0gNTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJydXNoU2l6ZU1heCA9IDMwMDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJydXNoU2l6ZVN0ZXAgPSA1O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmVydGV4RXJhc2VyUmFkaXVzTWluID0gNTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZlcnRleEVyYXNlclJhZGl1c01heCA9IDMwMDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZlcnRleEVyYXNlclJhZGl1c1N0ZXAgPSA1O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFja0J5TW9kZSA9IChfOiBudW1iZXIsIGI6IFJlZ2lvblRvb2xCdXR0b24pOiBzdHJpbmcgPT4gYi5tb2RlO1xuXG4gIHByb3RlY3RlZCBzaG93bihiOiBSZWdpb25Ub29sQnV0dG9uKTogYm9vbGVhbiB7XG4gICAgaWYgKGIuZ2F0ZSA9PT0gJ25vdDNkJykgcmV0dXJuICF0aGlzLmlzM2RSZWdpb25zO1xuICAgIGlmIChiLmdhdGUgPT09ICd2ZXJ0ZXgnKSByZXR1cm4gdGhpcy52ZXJ0ZXhUb29scztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBBIHNpbmdsZSBzbGlkZXIncyB2YWx1ZSAoYSByYW5nZSBzbGlkZXIgbmV2ZXIgZmVlZHMgdGhlc2UpLiAqL1xuICBwcm90ZWN0ZWQgYXNOdW1iZXIodjogbnVtYmVyIHwgbnVtYmVyW10gfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHYpID8gdlswXSA6IHY7XG4gIH1cbn1cbiIsIjxzcGFuIGNsYXNzPVwidG9vbGJhci1zZXBhcmF0b3JcIj48L3NwYW4+XG48IS0tIFJlZ2lvbiBFZGl0b3I6IG9wZW5zIHRoZSBlZGl0b3IgYXMgYSBmbG9hdGluZyBkaWFsb2cgKGZvcm1lcmx5IHRoZVxuICAgICByaWdodC1wYW5lbCBSZWdpb25zIHRhYikuIFNpdHMgd2l0aCB0aGUgcmVnaW9uIGRyYXdpbmcgdG9vbHMuIC0tPlxuPHAtYnV0dG9uXG4gIHNpemU9XCJzbWFsbFwiXG4gIFt0ZXh0XT1cInRydWVcIlxuICBhcmlhTGFiZWw9XCJPcGVuIHRoZSBSZWdpb24gRWRpdG9yXCJcbiAgcFRvb2x0aXA9XCJPcGVuIHRoZSBSZWdpb24gRWRpdG9yXCJcbiAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgKG9uQ2xpY2spPVwib3BlblJlZ2lvbkVkaXRvci5lbWl0KClcIlxuPlxuICA8aW1nIHNyYz1cImFzc2V0cy9wbG90dGluZy9yZWdpb24tZWRpdG9yLnN2Z1wiIGNsYXNzPVwidG9vbGJhci1pY29uLWRhcmtcIiBzdHlsZT1cIndpZHRoOiAxcmVtXCIgYWx0PVwiXCIgLz5cbjwvcC1idXR0b24+XG5cbjwhLS0gUmVnaW9uIGRyYXdpbmcgdG9vbHMsIGZyb20gUkVHSU9OX1RPT0xfQlVUVE9OUy4gQSB0b29sJ3MgcGFyYW1ldGVyIHNsaWRlclxuICAgICBmb2xsb3dzIGl0cyBidXR0b24gd2hpbGUgaXQgaXMgYWN0aXZlLiAtLT5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgYnV0dG9uczsgdHJhY2tCeTogdHJhY2tCeU1vZGVcIj5cbiAgPHAtYnV0dG9uXG4gICAgKm5nSWY9XCJzaG93bihiKVwiXG4gICAgc2l6ZT1cInNtYWxsXCJcbiAgICBbaWNvbl09XCJiLmljb25cIlxuICAgIFthcmlhTGFiZWxdPVwiYi5sYWJlbFwiXG4gICAgW3RleHRdPVwiYWN0aXZlRHJhZ01vZGUgIT09IGIubW9kZVwiXG4gICAgW3BUb29sdGlwXT1cImIudG9vbHRpcFwiXG4gICAgW2VzY2FwZV09XCJmYWxzZVwiXG4gICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAob25DbGljayk9XCJ0b2dnbGVEcmFnTW9kZS5lbWl0KGIubW9kZSlcIlxuICA+XG4gICAgPGltZ1xuICAgICAgKm5nSWY9XCJiLmltZ1wiXG4gICAgICBbc3JjXT1cIidhc3NldHMvcGxvdHRpbmcvJyArIGIuaW1nXCJcbiAgICAgIGFsdD1cIlwiXG4gICAgICBzdHlsZT1cIndpZHRoOiAxcmVtXCJcbiAgICAgIFtjbGFzc109XCJhY3RpdmVEcmFnTW9kZSA9PT0gYi5tb2RlID8gJ3Rvb2xiYXItaWNvbi1hY3RpdmUnIDogJ3Rvb2xiYXItaWNvbi1kYXJrJ1wiXG4gICAgLz5cbiAgPC9wLWJ1dHRvbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3duKGIpICYmIGIuc2xpZGVyICYmIGFjdGl2ZURyYWdNb2RlID09PSBiLm1vZGVcIiBbbmdTd2l0Y2hdPVwiYi5zbGlkZXJcIj5cbiAgICA8dG9vbGJhci10b29sLXNsaWRlclxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIidicnVzaCdcIlxuICAgICAgbGFiZWw9XCJTaXplXCJcbiAgICAgIFt2YWx1ZV09XCJicnVzaFNpemVcIlxuICAgICAgW21pbl09XCJicnVzaFNpemVNaW5cIlxuICAgICAgW21heF09XCJicnVzaFNpemVNYXhcIlxuICAgICAgW3N0ZXBdPVwiYnJ1c2hTaXplU3RlcFwiXG4gICAgICB0b29sdGlwPVwiQnJ1c2ggZGlhbWV0ZXIgaW4gaW1hZ2UgcGl4ZWxzLlwiXG4gICAgICBbdmFsdWVUZXh0XT1cIicnICsgYnJ1c2hTaXplXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJicnVzaFNpemVDaGFuZ2UuZW1pdChhc051bWJlcigkZXZlbnQpKVwiXG4gICAgPlxuICAgIDwvdG9vbGJhci10b29sLXNsaWRlcj5cbiAgICA8dG9vbGJhci10b29sLXNsaWRlclxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIid3YW5kJ1wiXG4gICAgICBsYWJlbD1cIlNlbnMuXCJcbiAgICAgIFt2YWx1ZV09XCJ3YW5kU2Vuc2l0aXZpdHlcIlxuICAgICAgW21pbl09XCJ3YW5kU2Vuc2l0aXZpdHlNaW5cIlxuICAgICAgW21heF09XCJ3YW5kU2Vuc2l0aXZpdHlNYXhcIlxuICAgICAgW3N0ZXBdPVwid2FuZFNlbnNpdGl2aXR5U3RlcFwiXG4gICAgICB0b29sdGlwPVwiSGlnaGVyID0gc3RyaWN0ZXIgKHNtYWxsZXIgc2VsZWN0aW9uKTsgbG93ZXIgPSBsb29zZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgVGFrZXMgZWZmZWN0IGZyb20gdGhlIG5leHQgY2xpY2svZHJhZyB0aWNrLlwiXG4gICAgICBbdmFsdWVUZXh0XT1cIndhbmRTZW5zaXRpdml0eS50b0ZpeGVkKDEpXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJ3YW5kU2Vuc2l0aXZpdHlDaGFuZ2UuZW1pdChhc051bWJlcigkZXZlbnQpKVwiXG4gICAgPlxuICAgIDwvdG9vbGJhci10b29sLXNsaWRlcj5cbiAgICA8dG9vbGJhci10b29sLXNsaWRlclxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlcmFzZXInXCJcbiAgICAgIGxhYmVsPVwiUmFkaXVzXCJcbiAgICAgIFt2YWx1ZV09XCJ2ZXJ0ZXhFcmFzZXJSYWRpdXNcIlxuICAgICAgW21pbl09XCJ2ZXJ0ZXhFcmFzZXJSYWRpdXNNaW5cIlxuICAgICAgW21heF09XCJ2ZXJ0ZXhFcmFzZXJSYWRpdXNNYXhcIlxuICAgICAgW3N0ZXBdPVwidmVydGV4RXJhc2VyUmFkaXVzU3RlcFwiXG4gICAgICB0b29sdGlwPVwiRXJhc2VyIHJhZGl1cyBpbiBpbWFnZSBwaXhlbHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljZXMgd2l0aGluIHRoaXMgZGlzdGFuY2Ugb2YgdGhlIGN1cnNvciBhcmUgcmVtb3ZlZCwgYW5kIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUgaXMgcmVqb2luZWQgYXQgdGhlIGVyYXNlcidzIGVkZ2UuXCJcbiAgICAgIFt2YWx1ZVRleHRdPVwiJycgKyB2ZXJ0ZXhFcmFzZXJSYWRpdXNcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cInZlcnRleEVyYXNlclJhZGl1c0NoYW5nZS5lbWl0KGFzTnVtYmVyKCRldmVudCkpXCJcbiAgICA+XG4gICAgPC90b29sYmFyLXRvb2wtc2xpZGVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48cC1idXR0b25cbiAgc2l6ZT1cInNtYWxsXCJcbiAgW3RleHRdPVwidHJ1ZVwiXG4gIFtkaXNhYmxlZF09XCIhY2FuVW5kb1wiXG4gIGFyaWFMYWJlbD1cIlVuZG9cIlxuICBwVG9vbHRpcD1cIlVuZG8gdGhlIGxhc3QgcmVnaW9uIGFjdGlvbiAoPGtiZD5DdHJsPC9rYmQ+KzxrYmQ+Wjwva2JkPikuXG4gICAgICAgICAgVXAgdG8gMTAgYWN0aW9ucyBjYW4gYmUgdW5kb25lLlwiXG4gIFtlc2NhcGVdPVwiZmFsc2VcIlxuICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAob25DbGljayk9XCJ1bmRvUmVnaW9uLmVtaXQoKVwiXG4+XG4gIDxpbWcgc3JjPVwiYXNzZXRzL3Bsb3R0aW5nL3VuZG8uc3ZnXCIgY2xhc3M9XCJ0b29sYmFyLWljb24tZGFya1wiIHN0eWxlPVwid2lkdGg6IDFyZW1cIiBhbHQ9XCJcIiAvPlxuPC9wLWJ1dHRvbj5cbjxwLWJ1dHRvblxuICBzaXplPVwic21hbGxcIlxuICBbdGV4dF09XCJ0cnVlXCJcbiAgW2Rpc2FibGVkXT1cIiFjYW5SZWRvXCJcbiAgYXJpYUxhYmVsPVwiUmVkb1wiXG4gIHBUb29sdGlwPVwiUmVkbyB0aGUgbGFzdCB1bmRvbmUgcmVnaW9uIGFjdGlvblxuICAgICAgICAgICg8a2JkPkN0cmw8L2tiZD4rPGtiZD5TaGlmdDwva2JkPis8a2JkPlo8L2tiZD4gLyA8a2JkPkN0cmw8L2tiZD4rPGtiZD5ZPC9rYmQ+KS5cIlxuICBbZXNjYXBlXT1cImZhbHNlXCJcbiAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgKG9uQ2xpY2spPVwicmVkb1JlZ2lvbi5lbWl0KClcIlxuPlxuICA8aW1nIHNyYz1cImFzc2V0cy9wbG90dGluZy9yZWRvLnN2Z1wiIGNsYXNzPVwidG9vbGJhci1pY29uLWRhcmtcIiBzdHlsZT1cIndpZHRoOiAxcmVtXCIgYWx0PVwiXCIgLz5cbjwvcC1idXR0b24+XG48cC1idXR0b25cbiAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgc2l6ZT1cInNtYWxsXCJcbiAgW3RleHRdPVwidHJ1ZVwiXG4gIGFyaWFMYWJlbD1cIkRlbGV0ZSBzZWxlY3RlZCByZWdpb25cIlxuICBwVG9vbHRpcD1cIkRlbGV0ZSBzZWxlY3RlZCByZWdpb24gKDxrYmQ+RGVsPC9rYmQ+KVwiXG4gIFtlc2NhcGVdPVwiZmFsc2VcIlxuICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAob25DbGljayk9XCJkZWxldGVSZWdpb24uZW1pdCgpXCJcbj5cbjwvcC1idXR0b24+XG4iXX0=
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXRvb2xzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbGJhci9yZWdpb24tdG9vbHMvcmVnaW9uLXRvb2xzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbGJhci9yZWdpb24tdG9vbHMvcmVnaW9uLXRvb2xzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFvQixNQUFNLHVCQUF1QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7OztBQUUzRTs7Ozs7R0FLRztBQVNILE1BQU0sT0FBTyxvQkFBb0I7SUFSakM7UUFTRSw4Q0FBOEM7UUFDckMsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQzlDLCtEQUErRDtRQUN0RCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUM3QixxRkFBcUY7UUFDNUUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUM1Qix3RUFBd0U7UUFDL0QsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDN0Isd0RBQXdEO1FBQy9DLG9CQUFlLEdBQUcsR0FBRyxDQUFDO1FBQy9CLHNDQUFzQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLDRDQUE0QztRQUNuQyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDakMsb0RBQW9EO1FBQzNDLFlBQU8sR0FB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ZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyx3QkFBd0I7c0JBQWpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcblxuaW1wb3J0IHsgUkVHSU9OX1RPT0xfQlVUVE9OUywgUmVnaW9uVG9vbEJ1dHRvbiB9IGZyb20gJy4vcmVnaW9uLXRvb2wtYnV0dG9ucyc7XG5pbXBvcnQgeyBUb29sU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbC1zbGlkZXIvdG9vbC1zbGlkZXIuY29tcG9uZW50JztcblxuLyoqXG4gKiBUaGUgdG9vbGJhcidzIHJlZ2lvbiBncm91cDogb3BlbiB0aGUgUmVnaW9uIEVkaXRvciwgdGhlIGRyYXdpbmcgdG9vbHMgKG9uZVxuICogdGFibGUtZHJpdmVuIHRvZ2dsZSBwZXIge0BsaW5rIFJFR0lPTl9UT09MX0JVVFRPTlN9IGVudHJ5LCB3aXRoIHRoZSBhY3RpdmVcbiAqIHRvb2wncyBwYXJhbWV0ZXIgc2xpZGVyKSwgdW5kbyAvIHJlZG8gYW5kIGRlbGV0ZS4gUHJlc2VudGF0aW9uYWw6IHRoZSBob3N0XG4gKiBvd25zIHRoZSBhY3RpdmUgbW9kZSBhbmQgZXZlcnkgdmFsdWUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Rvb2xiYXItcmVnaW9uLXRvb2xzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBUb29sdGlwTW9kdWxlLCBUb29sU2xpZGVyQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lvbi10b29scy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlZ2lvbi10b29scy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVnaW9uVG9vbHNDb21wb25lbnQge1xuICAvKiogVGhlIGFybWVkIGRyYXdpbmcgdG9vbCdzIG1vZGUsIG9yIG51bGwuICovXG4gIEBJbnB1dCgpIGFjdGl2ZURyYWdNb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIFRoZSAzRCBjbG91ZCdzIHNjcmVlbi1zcGFjZSBsYXNzbzogbm8gYnJ1c2ggb3IgcG9seWxpbmUuICovXG4gIEBJbnB1dCgpIGlzM2RSZWdpb25zID0gZmFsc2U7XG4gIC8qKiBPbmx5IHRoZSBzZWxlY3Rpb24gdG9vbCAoYSB2b2x1bWUgdmlldzogaXQgcGlja3MgdGhlIHJlZ2lvbnMnIHN1cmZhY2VzIGluIDNEKS4gKi9cbiAgQElucHV0KCkgc2VsZWN0T25seSA9IGZhbHNlO1xuICAvKiogVGhlIGJhY2tlbmQgaGFzIGEgdmVydGV4LWVkaXRpbmcgb3ZlcmxheSAoT1NEICsgbmFwYXJpLWpzIGltYWdlKS4gKi9cbiAgQElucHV0KCkgdmVydGV4VG9vbHMgPSBmYWxzZTtcbiAgLyoqIE1hZ2ljLXdhbmQgc2Vuc2l0aXZpdHkgKHRoZSB3YW5kJ3Mgc2xpZGVyIHZhbHVlKS4gKi9cbiAgQElucHV0KCkgd2FuZFNlbnNpdGl2aXR5ID0gMi4wO1xuICAvKiogQnJ1c2ggZGlhbWV0ZXIgaW4gaW1hZ2UgcGl4ZWxzLiAqL1xuICBASW5wdXQoKSBicnVzaFNpemUgPSA0MDtcbiAgLyoqIFZlcnRleC1lcmFzZXIgcmFkaXVzIGluIGltYWdlIHBpeGVscy4gKi9cbiAgQElucHV0KCkgdmVydGV4RXJhc2VyUmFkaXVzID0gMjA7XG4gIC8qKiBBIHJlZ2lvbiBhY3Rpb24gY2FuIGJlIHVuZG9uZSAoZW5hYmxlcyBVbmRvKS4gKi9cbiAgQElucHV0KCkgY2FuVW5kbyA9IGZhbHNlO1xuICAvKiogQW4gdW5kb25lIHJlZ2lvbiBhY3Rpb24gY2FuIGJlIHJlZG9uZSAoZW5hYmxlcyBSZWRvKS4gKi9cbiAgQElucHV0KCkgY2FuUmVkbyA9IGZhbHNlO1xuXG4gIC8qKiBPcGVuIHRoZSBSZWdpb24gRWRpdG9yIGRpYWxvZy4gKi9cbiAgQE91dHB1dCgpIG9wZW5SZWdpb25FZGl0b3IgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBBIGRyYXdpbmcgdG9vbCdzIGJ1dHRvbiB3YXMgY2xpY2tlZCAoaXRzIG1vZGUpLiAqL1xuICBAT3V0cHV0KCkgdG9nZ2xlRHJhZ01vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIFVuZG8gdGhlIGxhc3QgcmVnaW9uIGFjdGlvbi4gKi9cbiAgQE91dHB1dCgpIHVuZG9SZWdpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBSZWRvIHRoZSBsYXN0IHVuZG9uZSByZWdpb24gYWN0aW9uLiAqL1xuICBAT3V0cHV0KCkgcmVkb1JlZ2lvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIERlbGV0ZSB0aGUgc2VsZWN0ZWQgcmVnaW9uLiAqL1xuICBAT3V0cHV0KCkgZGVsZXRlUmVnaW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogVGhlIHdhbmQgc2Vuc2l0aXZpdHkgc2xpZGVyIG1vdmVkLiAqL1xuICBAT3V0cHV0KCkgd2FuZFNlbnNpdGl2aXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIC8qKiBUaGUgYnJ1c2ggc2l6ZSBzbGlkZXIgbW92ZWQuICovXG4gIEBPdXRwdXQoKSBicnVzaFNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgLyoqIFRoZSB2ZXJ0ZXgtZXJhc2VyIHJhZGl1cyBzbGlkZXIgbW92ZWQuICovXG4gIEBPdXRwdXQoKSB2ZXJ0ZXhFcmFzZXJSYWRpdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnV0dG9ucyA9IFJFR0lPTl9UT09MX0JVVFRPTlM7XG5cbiAgLyoqIFNsaWRlciBib3VuZHMg4oCUIHRvb2xiYXIgVUkgY29uc3RhbnRzICh0aGUgdmFsdWVzIGFyZSBob3N0LW93bmVkKS4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhbmRTZW5zaXRpdml0eU1pbiA9IDAuNTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhbmRTZW5zaXRpdml0eU1heCA9IDEwLjA7XG4gIHByb3RlY3RlZCByZWFkb25seSB3YW5kU2Vuc2l0aXZpdHlTdGVwID0gMC4xO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnJ1c2hTaXplTWluID0gNTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJydXNoU2l6ZU1heCA9IDMwMDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJydXNoU2l6ZVN0ZXAgPSA1O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmVydGV4RXJhc2VyUmFkaXVzTWluID0gNTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZlcnRleEVyYXNlclJhZGl1c01heCA9IDMwMDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZlcnRleEVyYXNlclJhZGl1c1N0ZXAgPSA1O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFja0J5TW9kZSA9IChfOiBudW1iZXIsIGI6IFJlZ2lvblRvb2xCdXR0b24pOiBzdHJpbmcgPT4gYi5tb2RlO1xuXG4gIHByb3RlY3RlZCBzaG93bihiOiBSZWdpb25Ub29sQnV0dG9uKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0T25seSkgcmV0dXJuIGIubW9kZSA9PT0gJ3NlbGVjdCc7XG4gICAgaWYgKGIuZ2F0ZSA9PT0gJ25vdDNkJykgcmV0dXJuICF0aGlzLmlzM2RSZWdpb25zO1xuICAgIGlmIChiLmdhdGUgPT09ICd2ZXJ0ZXgnKSByZXR1cm4gdGhpcy52ZXJ0ZXhUb29scztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBBIHNpbmdsZSBzbGlkZXIncyB2YWx1ZSAoYSByYW5nZSBzbGlkZXIgbmV2ZXIgZmVlZHMgdGhlc2UpLiAqL1xuICBwcm90ZWN0ZWQgYXNOdW1iZXIodjogbnVtYmVyIHwgbnVtYmVyW10gfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHYpID8gdlswXSA6IHY7XG4gIH1cbn1cbiIsIjxzcGFuIGNsYXNzPVwidG9vbGJhci1zZXBhcmF0b3JcIj48L3NwYW4+XG48IS0tIFJlZ2lvbiBFZGl0b3I6IG9wZW5zIHRoZSBlZGl0b3IgYXMgYSBmbG9hdGluZyBkaWFsb2cgKGZvcm1lcmx5IHRoZVxuICAgICByaWdodC1wYW5lbCBSZWdpb25zIHRhYikuIFNpdHMgd2l0aCB0aGUgcmVnaW9uIGRyYXdpbmcgdG9vbHMuIC0tPlxuPHAtYnV0dG9uXG4gIHNpemU9XCJzbWFsbFwiXG4gIFt0ZXh0XT1cInRydWVcIlxuICBhcmlhTGFiZWw9XCJPcGVuIHRoZSBSZWdpb24gRWRpdG9yXCJcbiAgcFRvb2x0aXA9XCJPcGVuIHRoZSBSZWdpb24gRWRpdG9yXCJcbiAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgKG9uQ2xpY2spPVwib3BlblJlZ2lvbkVkaXRvci5lbWl0KClcIlxuPlxuICA8aW1nIHNyYz1cImFzc2V0cy9wbG90dGluZy9yZWdpb24tZWRpdG9yLnN2Z1wiIGNsYXNzPVwidG9vbGJhci1pY29uLWRhcmtcIiBzdHlsZT1cIndpZHRoOiAxcmVtXCIgYWx0PVwiXCIgLz5cbjwvcC1idXR0b24+XG5cbjwhLS0gUmVnaW9uIGRyYXdpbmcgdG9vbHMsIGZyb20gUkVHSU9OX1RPT0xfQlVUVE9OUy4gQSB0b29sJ3MgcGFyYW1ldGVyIHNsaWRlclxuICAgICBmb2xsb3dzIGl0cyBidXR0b24gd2hpbGUgaXQgaXMgYWN0aXZlLiAtLT5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgYnV0dG9uczsgdHJhY2tCeTogdHJhY2tCeU1vZGVcIj5cbiAgPHAtYnV0dG9uXG4gICAgKm5nSWY9XCJzaG93bihiKVwiXG4gICAgc2l6ZT1cInNtYWxsXCJcbiAgICBbaWNvbl09XCJiLmljb25cIlxuICAgIFthcmlhTGFiZWxdPVwiYi5sYWJlbFwiXG4gICAgW3RleHRdPVwiYWN0aXZlRHJhZ01vZGUgIT09IGIubW9kZVwiXG4gICAgW3BUb29sdGlwXT1cImIudG9vbHRpcFwiXG4gICAgW2VzY2FwZV09XCJmYWxzZVwiXG4gICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAob25DbGljayk9XCJ0b2dnbGVEcmFnTW9kZS5lbWl0KGIubW9kZSlcIlxuICA+XG4gICAgPGltZ1xuICAgICAgKm5nSWY9XCJiLmltZ1wiXG4gICAgICBbc3JjXT1cIidhc3NldHMvcGxvdHRpbmcvJyArIGIuaW1nXCJcbiAgICAgIGFsdD1cIlwiXG4gICAgICBzdHlsZT1cIndpZHRoOiAxcmVtXCJcbiAgICAgIFtjbGFzc109XCJhY3RpdmVEcmFnTW9kZSA9PT0gYi5tb2RlID8gJ3Rvb2xiYXItaWNvbi1hY3RpdmUnIDogJ3Rvb2xiYXItaWNvbi1kYXJrJ1wiXG4gICAgLz5cbiAgPC9wLWJ1dHRvbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3duKGIpICYmIGIuc2xpZGVyICYmIGFjdGl2ZURyYWdNb2RlID09PSBiLm1vZGVcIiBbbmdTd2l0Y2hdPVwiYi5zbGlkZXJcIj5cbiAgICA8dG9vbGJhci10b29sLXNsaWRlclxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIidicnVzaCdcIlxuICAgICAgbGFiZWw9XCJTaXplXCJcbiAgICAgIFt2YWx1ZV09XCJicnVzaFNpemVcIlxuICAgICAgW21pbl09XCJicnVzaFNpemVNaW5cIlxuICAgICAgW21heF09XCJicnVzaFNpemVNYXhcIlxuICAgICAgW3N0ZXBdPVwiYnJ1c2hTaXplU3RlcFwiXG4gICAgICB0b29sdGlwPVwiQnJ1c2ggZGlhbWV0ZXIgaW4gaW1hZ2UgcGl4ZWxzLlwiXG4gICAgICBbdmFsdWVUZXh0XT1cIicnICsgYnJ1c2hTaXplXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJicnVzaFNpemVDaGFuZ2UuZW1pdChhc051bWJlcigkZXZlbnQpKVwiXG4gICAgPlxuICAgIDwvdG9vbGJhci10b29sLXNsaWRlcj5cbiAgICA8dG9vbGJhci10b29sLXNsaWRlclxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIid3YW5kJ1wiXG4gICAgICBsYWJlbD1cIlNlbnMuXCJcbiAgICAgIFt2YWx1ZV09XCJ3YW5kU2Vuc2l0aXZpdHlcIlxuICAgICAgW21pbl09XCJ3YW5kU2Vuc2l0aXZpdHlNaW5cIlxuICAgICAgW21heF09XCJ3YW5kU2Vuc2l0aXZpdHlNYXhcIlxuICAgICAgW3N0ZXBdPVwid2FuZFNlbnNpdGl2aXR5U3RlcFwiXG4gICAgICB0b29sdGlwPVwiSGlnaGVyID0gc3RyaWN0ZXIgKHNtYWxsZXIgc2VsZWN0aW9uKTsgbG93ZXIgPSBsb29zZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgVGFrZXMgZWZmZWN0IGZyb20gdGhlIG5leHQgY2xpY2svZHJhZyB0aWNrLlwiXG4gICAgICBbdmFsdWVUZXh0XT1cIndhbmRTZW5zaXRpdml0eS50b0ZpeGVkKDEpXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJ3YW5kU2Vuc2l0aXZpdHlDaGFuZ2UuZW1pdChhc051bWJlcigkZXZlbnQpKVwiXG4gICAgPlxuICAgIDwvdG9vbGJhci10b29sLXNsaWRlcj5cbiAgICA8dG9vbGJhci10b29sLXNsaWRlclxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlcmFzZXInXCJcbiAgICAgIGxhYmVsPVwiUmFkaXVzXCJcbiAgICAgIFt2YWx1ZV09XCJ2ZXJ0ZXhFcmFzZXJSYWRpdXNcIlxuICAgICAgW21pbl09XCJ2ZXJ0ZXhFcmFzZXJSYWRpdXNNaW5cIlxuICAgICAgW21heF09XCJ2ZXJ0ZXhFcmFzZXJSYWRpdXNNYXhcIlxuICAgICAgW3N0ZXBdPVwidmVydGV4RXJhc2VyUmFkaXVzU3RlcFwiXG4gICAgICB0b29sdGlwPVwiRXJhc2VyIHJhZGl1cyBpbiBpbWFnZSBwaXhlbHMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgVmVydGljZXMgd2l0aGluIHRoaXMgZGlzdGFuY2Ugb2YgdGhlIGN1cnNvciBhcmUgcmVtb3ZlZCwgYW5kIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUgaXMgcmVqb2luZWQgYXQgdGhlIGVyYXNlcidzIGVkZ2UuXCJcbiAgICAgIFt2YWx1ZVRleHRdPVwiJycgKyB2ZXJ0ZXhFcmFzZXJSYWRpdXNcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cInZlcnRleEVyYXNlclJhZGl1c0NoYW5nZS5lbWl0KGFzTnVtYmVyKCRldmVudCkpXCJcbiAgICA+XG4gICAgPC90b29sYmFyLXRvb2wtc2xpZGVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48cC1idXR0b25cbiAgc2l6ZT1cInNtYWxsXCJcbiAgW3RleHRdPVwidHJ1ZVwiXG4gIFtkaXNhYmxlZF09XCIhY2FuVW5kb1wiXG4gIGFyaWFMYWJlbD1cIlVuZG9cIlxuICBwVG9vbHRpcD1cIlVuZG8gdGhlIGxhc3QgcmVnaW9uIGFjdGlvbiAoPGtiZD5DdHJsPC9rYmQ+KzxrYmQ+Wjwva2JkPikuXG4gICAgICAgICAgVXAgdG8gMTAgYWN0aW9ucyBjYW4gYmUgdW5kb25lLlwiXG4gIFtlc2NhcGVdPVwiZmFsc2VcIlxuICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAob25DbGljayk9XCJ1bmRvUmVnaW9uLmVtaXQoKVwiXG4+XG4gIDxpbWcgc3JjPVwiYXNzZXRzL3Bsb3R0aW5nL3VuZG8uc3ZnXCIgY2xhc3M9XCJ0b29sYmFyLWljb24tZGFya1wiIHN0eWxlPVwid2lkdGg6IDFyZW1cIiBhbHQ9XCJcIiAvPlxuPC9wLWJ1dHRvbj5cbjxwLWJ1dHRvblxuICBzaXplPVwic21hbGxcIlxuICBbdGV4dF09XCJ0cnVlXCJcbiAgW2Rpc2FibGVkXT1cIiFjYW5SZWRvXCJcbiAgYXJpYUxhYmVsPVwiUmVkb1wiXG4gIHBUb29sdGlwPVwiUmVkbyB0aGUgbGFzdCB1bmRvbmUgcmVnaW9uIGFjdGlvblxuICAgICAgICAgICg8a2JkPkN0cmw8L2tiZD4rPGtiZD5TaGlmdDwva2JkPis8a2JkPlo8L2tiZD4gLyA8a2JkPkN0cmw8L2tiZD4rPGtiZD5ZPC9rYmQ+KS5cIlxuICBbZXNjYXBlXT1cImZhbHNlXCJcbiAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgKG9uQ2xpY2spPVwicmVkb1JlZ2lvbi5lbWl0KClcIlxuPlxuICA8aW1nIHNyYz1cImFzc2V0cy9wbG90dGluZy9yZWRvLnN2Z1wiIGNsYXNzPVwidG9vbGJhci1pY29uLWRhcmtcIiBzdHlsZT1cIndpZHRoOiAxcmVtXCIgYWx0PVwiXCIgLz5cbjwvcC1idXR0b24+XG48cC1idXR0b25cbiAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgc2l6ZT1cInNtYWxsXCJcbiAgW3RleHRdPVwidHJ1ZVwiXG4gIGFyaWFMYWJlbD1cIkRlbGV0ZSBzZWxlY3RlZCByZWdpb25cIlxuICBwVG9vbHRpcD1cIkRlbGV0ZSBzZWxlY3RlZCByZWdpb24gKDxrYmQ+RGVsPC9rYmQ+KVwiXG4gIFtlc2NhcGVdPVwiZmFsc2VcIlxuICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAob25DbGljayk9XCJkZWxldGVSZWdpb24uZW1pdCgpXCJcbj5cbjwvcC1idXR0b24+XG4iXX0=
|