@jax-data-science/sci-image-visualizer 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/esm2022/index.mjs +4 -1
  2. package/esm2022/lib/contracts/ports/region-io.port.mjs +1 -1
  3. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  4. package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +18 -2
  5. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +9 -1
  6. package/esm2022/lib/implementations/osd/osd-tile-loading.mjs +71 -0
  7. package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +1 -1
  8. package/esm2022/lib/implementations/osd/slice-cache.mjs +35 -6
  9. package/esm2022/lib/region-editor/region-editor.component.mjs +147 -4
  10. package/esm2022/lib/region-editor/region-persistence.service.mjs +9 -1
  11. package/esm2022/lib/region-import/label-classes.mjs +149 -0
  12. package/esm2022/lib/region-import/label-volume.mjs +194 -0
  13. package/esm2022/lib/region-import/region-import.mjs +71 -0
  14. package/esm2022/lib/routing-visualizer.service.mjs +93 -1
  15. package/esm2022/lib/store/region-source-scope.mjs +19 -4
  16. package/esm2022/lib/store/region-store.service.mjs +64 -14
  17. package/esm2022/lib/visualizer.component.mjs +28 -2
  18. package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs} +1049 -188
  19. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs.map +1 -0
  20. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs} +2 -2
  21. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs.map} +1 -1
  22. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +1 -1
  23. package/index.d.ts +6 -0
  24. package/lib/contracts/ports/region-io.port.d.ts +24 -0
  25. package/lib/contracts/region-editor-api.contract.d.ts +19 -1
  26. package/lib/implementations/osd/openseadragon-viewer-options.d.ts +2 -0
  27. package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +2 -0
  28. package/lib/implementations/osd/osd-tile-loading.d.ts +43 -0
  29. package/lib/implementations/osd/osd-viewer-like.d.ts +14 -0
  30. package/lib/implementations/osd/slice-cache.d.ts +13 -3
  31. package/lib/region-editor/region-editor.component.d.ts +26 -0
  32. package/lib/region-editor/region-persistence.service.d.ts +5 -1
  33. package/lib/region-import/label-classes.d.ts +39 -0
  34. package/lib/region-import/label-volume.d.ts +31 -0
  35. package/lib/region-import/region-import.d.ts +46 -0
  36. package/lib/routing-visualizer.service.d.ts +30 -0
  37. package/lib/store/region-source-scope.d.ts +8 -2
  38. package/lib/store/region-store.service.d.ts +15 -5
  39. package/lib/visualizer.component.d.ts +9 -0
  40. package/package.json +1 -1
  41. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +0 -1
@@ -10,6 +10,7 @@ import { VIZ_CONFIG } from '../../contracts/viz-config';
10
10
  import { PlotType, PLOT_TYPE_DESCRIPTORS } from '../../contracts/plot-type';
11
11
  import { ViewerFeature, capabilitiesOf } from '../../contracts/capabilities.contract';
12
12
  import { OsdRegionOverlay } from './osd-region-overlay';
13
+ import { OsdTileLoading } from './osd-tile-loading';
13
14
  import { OsdScaleBar } from './osd-scale-bar';
14
15
  import { OsdCoordinateTransform } from './osd-coordinate-transform';
15
16
  import { OsdViewportAdapter } from './osd-viewport';
@@ -85,6 +86,8 @@ export class OpenSeadragonVisualizerService extends BaseStoreVisualizer {
85
86
  this.viewer = null;
86
87
  this.overlay = null;
87
88
  this.scaleBar = null;
89
+ /** "Image reloading…" while the view fetches its tiles. */
90
+ this.tileLoading = null;
88
91
  this.descriptor = null;
89
92
  /** Base64 RawFileInfo + current z-slice, kept so setZIndex can rebuild the
90
93
  * tile source and swap slices live (stack navigation). */
@@ -371,6 +374,7 @@ export class OpenSeadragonVisualizerService extends BaseStoreVisualizer {
371
374
  authHeaders: this.authHeaders,
372
375
  sliceCount: d.z ?? 1,
373
376
  maxSlices: this.cache.maxSlices(),
377
+ channelImages: this.isMultiChannel ? (d.channels ?? 1) : 1,
374
378
  });
375
379
  this.viewer = createViewer(options);
376
380
  return openViewer(this.viewer, tileSource, (v) => this.onViewerOpened(v, d, simple, plotDiv));
@@ -386,6 +390,8 @@ export class OpenSeadragonVisualizerService extends BaseStoreVisualizer {
386
390
  this.overlay = new OsdRegionOverlay(viewer, this.regionStore);
387
391
  this.coordTransform = new OsdCoordinateTransform(viewer);
388
392
  this.scaleBar = new OsdScaleBar(viewer, d.mppX ?? 0);
393
+ this.tileLoading?.destroy();
394
+ this.tileLoading = new OsdTileLoading(viewer);
389
395
  if (simple) {
390
396
  // A single, self-contained image — no slice cache to seed. Its z-scrub and
391
397
  // recomposite re-open the viewer; one persistent handler reports a failed
@@ -445,6 +451,8 @@ export class OpenSeadragonVisualizerService extends BaseStoreVisualizer {
445
451
  this.scaleBar.destroy();
446
452
  this.scaleBar = null;
447
453
  }
454
+ this.tileLoading?.destroy();
455
+ this.tileLoading = null;
448
456
  if (this.viewer) {
449
457
  this.viewer.destroy();
450
458
  this.viewer = null;
@@ -754,4 +762,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
754
762
  type: Inject,
755
763
  args: [VIZ_CONFIG]
756
764
  }] }] });
757
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnNlYWRyYWdvbi12aXN1YWxpemVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9vc2Qvb3BlbnNlYWRyYWdvbi12aXN1YWxpemVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9ELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBc0IsTUFBTSwyQkFBMkIsQ0FBQztBQVVoRyxPQUFPLEVBQXNCLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1B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Q3ZFLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7OEdBeHRCVSw4QkFBOEIsNENBNkcvQixnQkFBZ0IsK0lBS0osY0FBYywrSEFJMUIsVUFBVTtrSEF0SFQsOEJBQThCLGNBRGpCLE1BQU07OzJGQUNuQiw4QkFBOEI7a0JBRDFDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkE4RzdCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFLdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzswQkFJakMsTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJ2ltYWdlLWpzJztcbmltcG9ydCAqIGFzIE9wZW5TZWFkcmFnb24gZnJvbSAnb3BlbnNlYWRyYWdvbic7XG5pbXBvcnQgeyBidWlsZFZpZXdlck9wdGlvbnMgfSBmcm9tICcuL29wZW5zZWFkcmFnb24tdmlld2VyLW9wdGlvbnMnO1xuaW1wb3J0IHsgY3JlYXRlVmlld2VyLCBvcGVuVmlld2VyIH0gZnJvbSAnLi9vc2Qtdmlld2VyLW1vdW50JztcbmltcG9ydCB7IFZpc3VhbGl6ZXJTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Zpc3VhbGl6ZXItc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBSZWdpb25TdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3JlZ2lvbi1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IElJbWFnZUluZm8gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgVGlsZUFjY2Vzc1BvcnQsIFRJTEVfQUNDRVNTX1BPUlQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcG9ydHMvdGlsZS1hY2Nlc3MucG9ydCc7XG5pbXBvcnQgeyBWaXpDb25maWcsIFZJWl9DT05GSUcgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvdml6LWNvbmZpZyc7XG5pbXBvcnQgeyBQbG90VHlwZSwgUExPVF9UWVBFX0RFU0NSSVBUT1JTLCBQbG90VHlwZURlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcGxvdC10eXBlJztcbmltcG9ydCB7XG4gIElWaWV3ZXJCYWNrZW5kLFxuICBQaXhlbERhdGEsXG4gIElJc29zdXJmYWNlQ29udHJvbHMsXG4gIElJbnRlbnNpdHlDb250cm9scyxcbiAgSVN1cmZhY2UzZENvbnRyb2xzLFxuICBJT3NkVmlld09wdGlvbnMsXG4gIElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSxcbn0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgVmlld2VyQ2FwYWJpbGl0aWVzLCBWaWV3ZXJGZWF0dXJlLCBjYXBhYmlsaXRpZXNPZiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jYXBhYmlsaXRpZXMuY29udHJhY3QnO1xuaW1wb3J0IHsgT3NkUmVnaW9uT3ZlcmxheSB9IGZyb20gJy4vb3NkLXJlZ2lvbi1vdmVybGF5JztcbmltcG9ydCB7IE9zZFNjYWxlQmFyIH0gZnJvbSAnLi9vc2Qtc2NhbGUtYmFyJztcbmltcG9ydCB7IElSZWdpb25PdmVybGF5LCBSZWdpb25Ub29sTW9kZSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9yZWdpb24tb3ZlcmxheS5jb250cmFjdCc7XG5pbXBvcnQgeyBJQ29vcmRpbmF0ZVRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jb29yZGluYXRlLXRyYW5zZm9ybS5jb250cmFjdCc7XG5pbXBvcnQgeyBPc2RDb29yZGluYXRlVHJhbnNmb3JtIH0gZnJvbSAnLi9vc2QtY29vcmRpbmF0ZS10cmFuc2Zvcm0nO1xuaW1wb3J0IHsgT3NkVmlld3BvcnRBZGFwdGVyIH0gZnJvbSAnLi9vc2Qtdmlld3BvcnQnO1xuaW1wb3J0IHsgT3NkTmF2aWdhdG9yQ2hyb21lIH0gZnJvbSAnLi9vc2QtbmF2aWdhdG9yLWNocm9tZSc7XG5pbXBvcnQgeyBQbG90TW9kZVZpZXdwb3J0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Bsb3QtdHlwZS1jb250cmlidXRpb24uY29udHJhY3QnO1xuaW1wb3J0IHsgZWxlbWVudFRvSW1hZ2UgfSBmcm9tICcuL29zZC1jb29yZHMnO1xuaW1wb3J0IHsgYnVpbGRPc2RUaWxlU291cmNlLCBwbGFuVGlsZWRNb3VudCB9IGZyb20gJy4vb3NkLXRpbGUtc291cmNlJztcbmltcG9ydCB7IFNsaWNlQ2FjaGUgfSBmcm9tICcuL3NsaWNlLWNhY2hlJztcbmltcG9ydCB7IE9zZFRpbGVSZWNvbG9yZXIgfSBmcm9tICcuL3RpbGUtcmVjb2xvcic7XG5pbXBvcnQgeyBPc2RMb2FkZWQsIE9zZFNpbXBsZVNvdXJjZSB9IGZyb20gJy4vc2ltcGxlLXNvdXJjZSc7XG5pbXBvcnQgeyByZWFkRHJhd2VyUGl4ZWxzLCByZWFkYmFja1ZpZXdwb3J0RnJhbWUsIHNhdmVEcmF3ZXJTbmFwc2hvdCB9IGZyb20gJy4vb3NkLXBpeGVsLXJlYWRiYWNrJztcbmltcG9ydCB7IGZldGNoVGlmZkV4cG9ydCwgZmlsZVN0ZW0sIHJlbmRlckNvbXBvc2l0ZVBuZyB9IGZyb20gJy4vb3NkLWV4cG9ydCc7XG5pbXBvcnQgeyBIaXN0b2dyYW1TYW1wbGVyIH0gZnJvbSAnLi9oaXN0b2dyYW0tc2FtcGxlcic7XG5pbXBvcnQge1xuICBUaWxlRGVzY3JpcHRvcixcbiAgZXhwb3J0VGlmZkZpbGVuYW1lLFxuICBleHBvcnRUaWZmVXJsLFxuICBodHRwRmV0Y2hKc29uLFxuICBwb2xsRGVzY3JpcHRvcixcbiAgdGhyb3dJZkFib3J0ZWQsXG4gIHRpbGVzSW5mb1VybCxcbn0gZnJvbSAnLi4vdGlsZS1zZXJ2ZXInO1xuaW1wb3J0IHsgQmFzZVN0b3JlVmlzdWFsaXplciB9IGZyb20gJy4uL2Jhc2Utc3RvcmUtdmlzdWFsaXplcic7XG5pbXBvcnQgeyBDYW52YXNUb29sSWQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgeyBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi9zaW1wbGUtc2xpY2UtYWNjZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FjaGVkSW1hZ2VEYXRhLCBDYW52YXNUb29sSG9zdCB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbC1raXQvY2FudmFzLXRvb2wnO1xuaW1wb3J0IHsgQ2FudmFzVG9vbE1hbmFnZXIgfSBmcm9tICcuLi8uLi90b29sYmFyL3Rvb2wta2l0L2NhbnZhcy10b29sLW1hbmFnZXInO1xuaW1wb3J0IHsgY3JlYXRlQ2FudmFzVG9vbE1hbmFnZXIgfSBmcm9tICcuLi8uLi90b29sYmFyL2NhbnZhcy10b29scyc7XG5pbXBvcnQgeyBXYW5kU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvd2FuZC93YW5kLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FtVG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNhbVBvaW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tcG9pbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxTZWdtZW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9jZWxsLXNlZ21lbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IElDZWxsU2VnbWVudGVyLCBDRUxMX1NFR01FTlRFUiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdCc7XG5pbXBvcnQgeyBJSGlzdG9ncmFtIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NoYW5uZWwtaGlzdG9ncmFtLWFwaS5jb250cmFjdCc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcblxuLyoqIFdhaXQgYmV0d2VlbiB0d28gYC90aWxlcy9pbmZvYCBwb2xscyB3aGlsZSB0aGUgc2VydmVyIGFuc3dlcnMgMjAyLiAqL1xuY29uc3QgT1NEX1RJTEVTX0lORk9fUE9MTF9JTlRFUlZBTF9NUyA9IDE1MDA7XG5cbi8qKiBUaGUgZHJhZyBtb2RlcyB0aGUgU1ZHIHJlZ2lvbiBvdmVybGF5IGhhbmRsZXMgaXRzZWxmIChzZWUgc2V0RHJhZ01vZGUpLiAqL1xuY29uc3QgT1ZFUkxBWV9NT0RFUyA9IG5ldyBTZXQ8UmVnaW9uVG9vbE1vZGU+KFtcbiAgJ2RyYXdyZWN0JyxcbiAgJ2RyYXdjbG9zZWRwYXRoJyxcbiAgJ2RyYXdvcGVucGF0aCcsXG4gICdkcmF3cG9seWdvbicsXG4gICdhZGRwb2ludCcsXG4gICdkZWxldGVwb2ludCcsXG4gICdtb3ZlJyxcbiAgJ3NlbGVjdCcsXG5dKTtcblxuLyoqXG4gKiBPcGVuU2VhZHJhZ29uIHZpc3VhbGl6YXRpb24gYmFja2VuZC5cbiAqXG4gKiBSZW5kZXJzIHRoZSAqaW1hZ2UqIHBsb3QgdHlwZSBhcyBhIG5hdGl2ZWx5LXRpbGVkLCB6b29tYWJsZSByYXN0ZXIsIGJhY2tlZCBieVxuICogdGhlIGppdC1zZXJ2aWNlIHRpbGUgZW5kcG9pbnRzIChgR0VUIC90aWxlcy9pbmZvYCArIGBHRVQgL3RpbGVgLCB3aGljaCByZXVzZVxuICogdGhlIEJpby1Gb3JtYXRzIFJPSSByZW5kZXJlciksIG9yIOKAlCBmb3IgYSBgdGlsZWQ6IGZhbHNlYCBpbWFnZSDigJQgYnlcbiAqIHNlbGYtY29udGFpbmVkIHBlci1zbGljZSBVUkxzLiBQbG90bHkga2VlcHMgdGhlIHNjaWVudGlmaWMvZGF0YSBwbG90IHR5cGVzXG4gKiAoc2NhbGFyIGhlYXRtYXAsIHN1cmZhY2UsIGNvbnRvdXIsIHNjYXR0ZXIsIGxpbmUsIHNjYXR0ZXIzZCwgaXNvc3VyZmFjZSkg4oCUXG4gKiBoZW5jZSB0aGlzIGJhY2tlbmQgYWR2ZXJ0aXNlcyBvbmx5IGBJbWFnZURpc3BsYXlgLlxuICpcbiAqIERpc3BsYXkgc2V0dGluZ3MgKHdpbmRvdy9nYW1tYS9jb2xvcm1hcC9pbnZlcnQsIHBlci1jaGFubmVsIHRpbnRzKSBhcmUgYXBwbGllZFxuICogY2xpZW50LXNpZGUgYnkgcmVjb2xvcmluZyB0aWxlczsgcmVnaW9ucyBhcmUgZHJhd24gYnkge0BsaW5rIE9zZFJlZ2lvbk92ZXJsYXl9XG4gKiBhbmQgdGhlIGNhbnZhcyB0b29scyByZWFkIGJhY2sgdGhlIHJlbmRlcmVkIHZpZXdwb3J0LiBUaGUgY29sbGFib3JhdG9yc1xuICogKHNsaWNlIGNhY2hlLCBkaXNwbGF5IHBpcGVsaW5lLCBoaXN0b2dyYW0gc2FtcGxlciwgdGlsZSBjbGllbnQpIGFuZCB0aGVcbiAqIHJlY29sb3IgaW52YXJpYW50IGFyZSBkZXNjcmliZWQgaW4gdGhpcyBmb2xkZXIncyBSRUFETUUuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgT3BlblNlYWRyYWdvblZpc3VhbGl6ZXJTZXJ2aWNlIGV4dGVuZHMgQmFzZVN0b3JlVmlzdWFsaXplciBpbXBsZW1lbnRzIElWaWV3ZXJCYWNrZW5kIHtcbiAgLyoqIE9TRCdzIHN0cmVuZ3RoIGlzIGRpc3BsYXlpbmcgYSBsYXJnZSB6b29tYWJsZSBpbWFnZSDigJQgbm90aGluZyBlbHNlIGhlcmUuICovXG4gIHJlYWRvbmx5IGNhcGFiaWxpdGllczogVmlld2VyQ2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzT2YoW1ZpZXdlckZlYXR1cmUuSW1hZ2VEaXNwbGF5XSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcGk6IHN0cmluZztcbiAgcHJpdmF0ZSB2aWV3ZXI6IE9wZW5TZWFkcmFnb24uVmlld2VyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgb3ZlcmxheTogSVJlZ2lvbk92ZXJsYXkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzY2FsZUJhcjogT3NkU2NhbGVCYXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBkZXNjcmlwdG9yOiBUaWxlRGVzY3JpcHRvciB8IG51bGwgPSBudWxsO1xuICAvKiogQmFzZTY0IFJhd0ZpbGVJbmZvICsgY3VycmVudCB6LXNsaWNlLCBrZXB0IHNvIHNldFpJbmRleCBjYW4gcmVidWlsZCB0aGVcbiAgICogIHRpbGUgc291cmNlIGFuZCBzd2FwIHNsaWNlcyBsaXZlIChzdGFjayBuYXZpZ2F0aW9uKS4gKi9cbiAgcHJpdmF0ZSBpbmZvQjY0ID0gJyc7XG4gIHByaXZhdGUgY3VycmVudFogPSAwO1xuICBwcml2YXRlIGNvb3JkVHJhbnNmb3JtOiBPc2RDb29yZGluYXRlVHJhbnNmb3JtIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBXaGF0IHRoaXMgYmFja2VuZCdzIGNhbnZhcyB0b29scyByZWFkIGFuZCB3cml0ZSAob25lIGhvc3QgZm9yIGV2ZXJ5IHRvb2wpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRvb2xIb3N0OiBDYW52YXNUb29sSG9zdDtcbiAgLyoqIFRoaXMgYmFja2VuZCdzIG93biB3YW5kLCBicnVzaCwgZXJhc2VyLCB6b29tLXRvLWJveCBhbmQgU0FNIHBvaW50IHRvb2xzLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FudmFzVG9vbHM6IENhbnZhc1Rvb2xNYW5hZ2VyO1xuICAvKiogV2FuZCBzYW1wbGluZyBtYXRyaXggcmVhZCBiYWNrIGZyb20gdGhlIHJlbmRlcmVkIHZpZXdwb3J0OyBjYWNoZWQgdW50aWxcbiAgICogIHRoZSB2aWV3cG9ydCBjaGFuZ2VzIChzZWUgcmVhZGJhY2tWaWV3cG9ydCkuICovXG4gIHByaXZhdGUgdmlld3BvcnRQaXhlbHM6IENhY2hlZEltYWdlRGF0YSB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIERPTSBpZCBvZiB0aGUgZWxlbWVudCBPU0QgaXMgbW91bnRlZCBpbiAoc2hhcmVkIHdpdGggUGxvdGx5KTsgdGhlXG4gICAqICBvbi1jYW52YXMgdG9vbHMgYXR0YWNoIHRoZWlyIG92ZXJsYXlzIGhlcmUuICovXG4gIHByaXZhdGUgcGxvdERpdiA9ICcnO1xuICAvKiogQ3VycmVudCBmaWxlIG5hbWUsIHRhZ2dlZCBvbnRvIHdhbmQtY3JlYXRlZCBzaGFwZXMuICovXG4gIHByaXZhdGUgY3VycmVudEZpbGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKiBPbmx5IGdyYXlzY2FsZSBpbWFnZXMgZ2V0IGEgY29sb3JtYXAgKFJHQiB0aWxlcyBwYXNzIHRocm91Z2ggdW50b3VjaGVkKS4gKi9cbiAgcHJpdmF0ZSBpc0dyYXlzY2FsZUltYWdlID0gZmFsc2U7XG4gIC8qKiBUcnVlIGZvciBtdWx0aWNoYW5uZWwgZmx1b3Jlc2NlbmNlIGRyYXduIHBlciBjaGFubmVsOiBvbmUgc2luZ2xlLWJhbmRcbiAgICogIFRpbGVkSW1hZ2UgcGVyIGNoYW5uZWwsIHRpbnRlZCBieSB0aGUgcmVjb2xvcmVyIChzZWUgcGxhblRpbGVkTW91bnQpLiAqL1xuICBwcml2YXRlIGlzTXVsdGlDaGFubmVsID0gZmFsc2U7XG4gIC8qKiBDb3VudCBvZiByZWFsIEJpby1Gb3JtYXRzIHJlc29sdXRpb24gbGV2ZWxzIChwZXItY2hhbm5lbCB0aWxlcyBleGlzdCBvbmx5XG4gICAqICBoZXJlKS4gRm9yIG11bHRpY2hhbm5lbCBpbWFnZXMgdGhlIHRpbGUgc291cmNlIGlzIGJ1aWx0IGZyb20gdGhlc2UgYWxvbmUgc29cbiAgICogIGV2ZXJ5IGRpc3BsYXllZCB0aWxlIHN1cHBvcnRzIGEgcGVyLWNoYW5uZWwgZmV0Y2guICovXG4gIHByaXZhdGUgcmVhbExldmVscyA9IDA7XG4gIC8qKiBCZWFyZXIgdG9rZW4gZm9yIE9TRCdzIG93biB0aWxlIGZldGNoZXMgKEh0dHBDbGllbnQgY2FsbHMgZ2V0IGl0IHZpYSB0aGVcbiAgICogIGludGVyY2VwdG9yOyBPU0QncyBsb2FkZXIgZG9lcyBub3QsIHNvIHdlIHBhc3MgaXQgYXMgYW4gYWpheCBoZWFkZXIpLiAqL1xuICBwcml2YXRlIGF1dGhIZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIC8qKiBOYXZpZ2F0b3IsIHNtb290aGluZywgaW5pdGlhbCBmaXQgYW5kIHRoZSB0b29sYmFyIHJlcGFpbnQgd29ya2Fyb3VuZFxuICAgKiAgKHNlZSBPc2ROYXZpZ2F0b3JDaHJvbWUpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNocm9tZSA9IG5ldyBPc2ROYXZpZ2F0b3JDaHJvbWUoe1xuICAgIHZpZXdlcjogKCkgPT4gdGhpcy52aWV3ZXIsXG4gICAgcGxvdERpdjogKCkgPT4gdGhpcy5wbG90RGl2LFxuICB9KTtcblxuICAvKiogT3ZlcmFsbCBkZWFkbGluZSBmb3IgdGhlIC90aWxlcy9pbmZvIHBvbGwgbG9vcC4gQW4gdW5jYWNoZWQgd2hvbGUtc2xpZGVcbiAgICogIGltYWdlIChlLmcuIC5uZHBpKSBpcyBjYWNoZWQgc2VydmVyLXNpZGUgZmlyc3QgKEdDUy0+UFZDKSwgd2hpY2ggY2FuIHRha2VcbiAgICogIHNldmVyYWwgbWludXRlcy4gR2VuZXJvdXMgYmVjYXVzZSBlYWNoIHBvbGwgaXMgY2hlYXA7IG9uIGV4cGlyeSB0aGUgcm91dGVyXG4gICAqICBmYWxscyBiYWNrIHRvIFBsb3RseS4gKG5hcGFyaS1qcyB3YWl0cyBsZXNzIOKAlCBpdCBmYWxscyBiYWNrIHRvIGEgc2luZ2xlIHRpbGUuKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbGVzSW5mb1RpbWVvdXRNcyA9IDYwMDAwMDsgLy8gMTAgbWluXG5cbiAgLyoqIFdpbmRvdy9nYW1tYS9jb2xvcm1hcC9pbnZlcnQgYW5kIHBlci1jaGFubmVsIHRpbnRzLCBhcHBsaWVkIHRvIHRoZSB0aWxlc1xuICAgKiAgdGhyb3VnaCBPU0QncyBwaXhlbCBwaXBlbGluZSAoc2VlIE9zZFRpbGVSZWNvbG9yZXIgYW5kIHRoZSBSRUFETUUncyByZWNvbG9yXG4gICAqICBpbnZhcmlhbnQpLiBJdHMgRGlzcGxheVBpcGVsaW5lIGFsc28gZHJpdmVzIHRoZSBjb21wb3NpdG9yIGFuZCB0aGUgZXhwb3J0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlY29sb3I6IE9zZFRpbGVSZWNvbG9yZXIgPSBuZXcgT3NkVGlsZVJlY29sb3JlcihcbiAgICB7XG4gICAgICB2aWV3ZXI6ICgpID0+IHRoaXMudmlld2VyLFxuICAgICAgaXNHcmF5c2NhbGU6ICgpID0+IHRoaXMuaXNHcmF5c2NhbGVJbWFnZSxcbiAgICAgIGlzTXVsdGlDaGFubmVsOiAoKSA9PiB0aGlzLmlzTXVsdGlDaGFubmVsLFxuICAgICAgaXNTaW1wbGVNdWx0aWNoYW5uZWw6ICgpID0+IHRoaXMuc2ltcGxlLm11bHRpY2hhbm5lbCxcbiAgICAgIGN1cnJlbnRaOiAoKSA9PiB0aGlzLmN1cnJlbnRaLFxuICAgICAgcmV2ZWFsQ2hhbm5lbFNsaWNlOiAoeikgPT4gdGhpcy5jYWNoZS5yZXZlYWxDaGFubmVsU2xpY2UoeiksXG4gICAgICBpbnZhbGlkYXRlQ2hhbm5lbERpc3BsYXk6ICh6KSA9PiB0aGlzLmNhY2hlLmludmFsaWRhdGVDaGFubmVsRGlzcGxheSh6KSxcbiAgICAgIHJlY29tcG9zaXRlOiAodG9rZW4pID0+IHZvaWQgdGhpcy5zaW1wbGUucmVjb21wb3NpdGVBbmRPcGVuKHRva2VuKSxcbiAgICB9LFxuICAgIHRoaXMuc3RvcmUsXG4gICk7XG5cbiAgLyoqIFRoZSBzZXJ2ZXJsZXNzIChgdGlsZWQ6IGZhbHNlYCkgaW1hZ2Ugc291cmNlIGFuZCBhbGwgaXRzIHN0YXRlIChzZWVcbiAgICogIE9zZFNpbXBsZVNvdXJjZSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc2ltcGxlOiBPc2RTaW1wbGVTb3VyY2UgPSBuZXcgT3NkU2ltcGxlU291cmNlKFxuICAgIHtcbiAgICAgIHZpZXdlcjogKCkgPT4gdGhpcy52aWV3ZXIsXG4gICAgICBkZXNjcmlwdG9yOiAoKSA9PiB0aGlzLmRlc2NyaXB0b3IsXG4gICAgICBpc0dyYXlzY2FsZTogKCkgPT4gdGhpcy5pc0dyYXlzY2FsZUltYWdlLFxuICAgICAgY3VycmVudFo6ICgpID0+IHRoaXMuY3VycmVudFosXG4gICAgICBzZXRDdXJyZW50WjogKHopID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50WiA9IHo7XG4gICAgICAgIHRoaXMudmlld3BvcnRQaXhlbHMgPSBudWxsOyAvLyB0aGUgcmVhZGJhY2sgaXMgc2xpY2Utc3BlY2lmaWNcbiAgICAgIH0sXG4gICAgICBzYW1wbGVyOiAoKSA9PiB0aGlzLnNhbXBsZXIsXG4gICAgICBkaXNwbGF5OiAoKSA9PiB0aGlzLnJlY29sb3IuZGlzcGxheSxcbiAgICAgIGNoYW5uZWxTdGF0ZXM6ICgpID0+IHRoaXMuc3RvcmUuY3VycmVudENoYW5uZWxTdGF0ZXMoKSxcbiAgICAgIGlzQ3VycmVudERpc3BsYXk6ICh0b2tlbikgPT4gdGhpcy5yZWNvbG9yLmlzQ3VycmVudCh0b2tlbiksXG4gICAgICBzY2hlZHVsZUludmFsaWRhdGU6ICgpID0+IHRoaXMucmVjb2xvci5zY2hlZHVsZUludmFsaWRhdGUoKSxcbiAgICB9LFxuICAgIHRoaXMuc2ltcGxlU3RhY2ssXG4gICk7XG5cbiAgLyoqIEhpc3RvZ3JhbSArIGF1dG8td2luZG93IHNhbXBsaW5nIChzZWUgSGlzdG9ncmFtU2FtcGxlcikuIENvbnN0cnVjdGVkIGluXG4gICAqICB0aGUgY3RvciBib2R5IGJlY2F1c2UgaXQgY2FwdHVyZXMgdGhlIHJlc29sdmVkIEFQSSBiYXNlIFVSTC4gKi9cbiAgcHJpdmF0ZSBzYW1wbGVyITogSGlzdG9ncmFtU2FtcGxlcjtcblxuICAvKiogU3RhY2stc2xpY2UgY2FjaGUgKyBiYWNrZ3JvdW5kIHByZWxvYWRlciAoc2VlIFNsaWNlQ2FjaGUpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiBTbGljZUNhY2hlID0gbmV3IFNsaWNlQ2FjaGUoe1xuICAgIHZpZXdlcjogKCkgPT4gdGhpcy52aWV3ZXIsXG4gICAgaGFzSW1hZ2U6ICgpID0+ICEhKHRoaXMudmlld2VyICYmIHRoaXMuZGVzY3JpcHRvciAmJiB0aGlzLmluZm9CNjQpLFxuICAgIHNsaWNlQ291bnQ6ICgpID0+IHRoaXMuZGVzY3JpcHRvcj8ueiA/PyAxLFxuICAgIGN1cnJlbnRaOiAoKSA9PiB0aGlzLmN1cnJlbnRaLFxuICAgIGlzTXVsdGlDaGFubmVsOiAoKSA9PiB0aGlzLmlzTXVsdGlDaGFubmVsLFxuICAgIGNoYW5uZWxDb3VudDogKCkgPT4gTWF0aC5tYXgoMSwgdGhpcy5yZWNvbG9yLmNoYW5uZWxTdGF0ZXMubGVuZ3RoIHx8ICh0aGlzLmRlc2NyaXB0b3I/LmNoYW5uZWxzID8/IDEpKSxcbiAgICBjaGFubmVsVmlzaWJsZTogKGM6IG51bWJlcikgPT4gdGhpcy5yZWNvbG9yLmNoYW5uZWxTdGF0ZXNbY10/LnZpc2libGUgIT09IGZhbHNlLFxuICAgIGJ1aWxkVGlsZVNvdXJjZTogKHo6IG51bWJlciwgY2hhbm5lbD86IG51bWJlcikgPT5cbiAgICAgIHRoaXMuYnVpbGRUaWxlU291cmNlKHRoaXMuZGVzY3JpcHRvciEsIHRoaXMuaW5mb0I2NCwgeiwgY2hhbm5lbCksXG4gICAgb25Db21wb3NpdGVTbGljZUFkZGVkOiAoejogbnVtYmVyKSA9PiB0aGlzLnNhbXBsZXIuY29tcHV0ZUltYWdlV2luZG93KHRoaXMuZGVzY3JpcHRvciEsIHRoaXMuaW5mb0I2NCwgeiksXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KFRJTEVfQUNDRVNTX1BPUlQpIHByaXZhdGUgdGlsZXM6IFRpbGVBY2Nlc3NQb3J0LFxuICAgIHdhbmRTZXJ2aWNlOiBXYW5kU2VydmljZSxcbiAgICBwcml2YXRlIHNhbVRvb2w6IFNhbVRvb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FtUG9pbnRUb29sOiBTYW1Qb2ludFRvb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2VsbFNlZ21lbnRUb29sOiBDZWxsU2VnbWVudFRvb2xTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQ0VMTF9TRUdNRU5URVIpIHByaXZhdGUgY2VsbFNlZ21lbnRlcjogSUNlbGxTZWdtZW50ZXIgfCBudWxsLFxuICAgIHN0b3JlOiBWaXN1YWxpemVyU3RvcmUsXG4gICAgcmVnaW9uU3RvcmU6IFJlZ2lvblN0b3JlLFxuICAgIHByaXZhdGUgc2ltcGxlU3RhY2s6IFNpbXBsZVNsaWNlQWNjZXNzU2VydmljZSxcbiAgICBASW5qZWN0KFZJWl9DT05GSUcpIGNvbmZpZzogVml6Q29uZmlnLFxuICApIHtcbiAgICBzdXBlcihyZWdpb25TdG9yZSwgc3RvcmUpO1xuICAgIC8vIFRoZSBjYW52YXMgdG9vbHMgcnVuIG92ZXIgT1NEIHRocm91Z2ggdGhlIHNoYXJlZCBjb29yZGluYXRlIHRyYW5zZm9ybSBhbmQgYVxuICAgIC8vIHZpZXdwb3J0IHJlYWRiYWNrLCBhbmQgcmVhZC93cml0ZSB0aGUgc2hhcmVkIFJlZ2lvblN0b3JlLiBUaGlzIGJhY2tlbmQgb3duc1xuICAgIC8vIGl0cyBvd24gdG9vbCBpbnN0YW5jZXMgKFJULTIxKTsgdGhlIGhvc3QgcmVhZHMgbGl2ZSBzdGF0ZSwgc28gaXQgaXMgYnVpbHQgb25jZS5cbiAgICB0aGlzLnRvb2xIb3N0ID0ge1xuICAgICAgZ2V0UmVnaW9uczogKCkgPT4gdGhpcy5yZWdpb25TdG9yZS5nZXRSZWdpb25zKCksXG4gICAgICBzZXRSZWdpb25zOiAocmVnaW9ucykgPT4gdGhpcy5yZWdpb25TdG9yZS5zZXRSZWdpb25zKHJlZ2lvbnMpLFxuICAgICAgZ2V0Q2FjaGVkSW1hZ2VEYXRhOiAoKSA9PiB0aGlzLnJlYWRiYWNrVmlld3BvcnQoKSxcbiAgICAgIGdldEFjdGl2ZUZyYW1lSW5kZXg6ICgpID0+IHRoaXMuY3VycmVudFosXG4gICAgICBnZXRPdmVybGF5Q29udGFpbmVyOiAoKSA9PiB0aGlzLmdldE92ZXJsYXlDb250YWluZXIoKSxcbiAgICAgIGdldENvb3JkaW5hdGVUcmFuc2Zvcm06ICgpID0+IHRoaXMuY29vcmRUcmFuc2Zvcm0gYXMgSUNvb3JkaW5hdGVUcmFuc2Zvcm0sXG4gICAgICBnZXRGaWxlTmFtZTogKCkgPT4gdGhpcy5jdXJyZW50RmlsZU5hbWUsXG4gICAgICBnZXRTaGFwZUNvbG9yOiAoKSA9PiB0aGlzLnJlZ2lvblN0b3JlLmdldFNoYXBlQ29sb3IoKSxcbiAgICAgIC8vIFpvb20tdG8tYm94OiBvdmVybGF5IHBpeGVscyAtPiBpbWFnZSBjb29yZHMsIGFuZCBmaXQgdGhlIHZpZXdwb3J0IHRvIHRoZSBib3guXG4gICAgICBwaXhlbFRvRGF0YTogKHB4LCBweSkgPT4gZWxlbWVudFRvSW1hZ2UodGhpcy52aWV3ZXIhLCBweCwgcHkpLFxuICAgICAgYXBwbHlab29tVG9Cb3g6IChjb29yZHMpID0+IHRoaXMudmlld3BvcnQuYXBwbHlab29tVG9Cb3goY29vcmRzKSxcbiAgICB9O1xuICAgIHRoaXMuY2FudmFzVG9vbHMgPSBjcmVhdGVDYW52YXNUb29sTWFuYWdlcih0aGlzLnRvb2xIb3N0LCB7XG4gICAgICB3YW5kU2VydmljZSxcbiAgICAgIHJlZ2lvblN0b3JlLFxuICAgICAgc2FtUG9pbnQ6IHNhbVBvaW50VG9vbCxcbiAgICB9KTtcbiAgICB0aGlzLmFwaSA9IGNvbmZpZy5zbGlkZUNyb3BTZXJ2ZXI7XG4gICAgdGhpcy5zYW1wbGVyID0gbmV3IEhpc3RvZ3JhbVNhbXBsZXIodGhpcy5odHRwLCB0aGlzLmFwaSwge1xuICAgICAgcmVhbExldmVsczogKCkgPT4gdGhpcy5yZWFsTGV2ZWxzLFxuICAgICAgY2hhbm5lbENvdW50OiAoZCkgPT4gdGhpcy5yZWNvbG9yLmNoYW5uZWxTdGF0ZXMubGVuZ3RoIHx8IChkLmNoYW5uZWxzID8/IDEpLFxuICAgICAgaXNHcmF5c2NhbGU6ICgpID0+IHRoaXMuaXNHcmF5c2NhbGVJbWFnZSxcbiAgICAgIC8vIE51ZGdlIHRoZSBjaGFubmVsLXN0YXRlcyBzdHJlYW0gc28gdGhlIHBhbmUgcmUtcmVhZHMgZ2V0SGlzdG9ncmFtIG5vdyxcbiAgICAgIC8vIGluIGNhc2UgaXRzIGJvdW5kZWQgcmV0cnkgd2luZG93IGFscmVhZHkgbGFwc2VkLlxuICAgICAgb25DaGFubmVsSGlzdG9ncmFtc1NhbXBsZWQ6ICgpID0+IHRoaXMuc3RvcmUuc2V0Q2hhbm5lbFN0YXRlcyh0aGlzLnN0b3JlLmN1cnJlbnRDaGFubmVsU3RhdGVzKCkpLFxuICAgICAgLy8gQmFja2dyb3VuZC1wcmVsb2FkZWQgc2xpY2VzIGFyZSBzYW1wbGVkIHRvbyAoaGlzdG9ncmFtcyBwZXIgc2xpY2UpLCBidXRcbiAgICAgIC8vIG9ubHkgdGhlIGRpc3BsYXllZCBzbGljZSdzIHdpbmRvdyBtYXkgc2VlZCBvciByZS1pbnZhbGlkYXRlIHRoZSBkaXNwbGF5LlxuICAgICAgb25HcmF5V2luZG93U2FtcGxlZDogKG1pbiwgbWF4LCB6KSA9PiB7XG4gICAgICAgIGlmICh6ID09PSB0aGlzLmN1cnJlbnRaKSB0aGlzLnJlY29sb3Iuc2VlZEdyYXlXaW5kb3cobWluLCBtYXgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnJlY29sb3IuZW5zdXJlU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIFRoZSB2aWV3cG9ydCBhcyB0aGUgbGlicmFyeSBzZWVzIGl0OiB2aXNpYmxlIHJlY3RzLCB0aGUgcGxvdC1tb2RlXG4gICAqICB2aWV3cG9ydCwgem9vbS9maXQgKHNlZSBPc2RWaWV3cG9ydEFkYXB0ZXIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdwb3J0ID0gbmV3IE9zZFZpZXdwb3J0QWRhcHRlcih7XG4gICAgdmlld2VyOiAoKSA9PiB0aGlzLnZpZXdlcixcbiAgICBkZXNjcmlwdG9yOiAoKSA9PiB0aGlzLmRlc2NyaXB0b3IsXG4gICAgY29vcmRUcmFuc2Zvcm06ICgpID0+IHRoaXMuY29vcmRUcmFuc2Zvcm0sXG4gICAgb3ZlcmxheUNvbnRhaW5lcjogKCkgPT4gdGhpcy5nZXRPdmVybGF5Q29udGFpbmVyKCksXG4gIH0pO1xuICAvLyBSZWdpb24gc3RhdGUgKHJlZ2lvbnMsIHNlbGVjdGlvbiwgdGhlIHVwZGF0ZSBldmVudCkgbGl2ZXMgaW4gdGhlIHNoYXJlZFxuICAvLyBSZWdpb25TdG9yZTsgaW1hZ2UgbWV0YWRhdGEgYW5kIGNsYXNzaWZpY2F0aW9uIGNvbG91cnMgaW4gdGhlIHNoYXJlZFxuICAvLyBWaXN1YWxpemVyU3RvcmUg4oCUIHRoZSBpbmhlcml0ZWQgSVJlZ2lvblN0b3JlL2Rpc3BsYXkgbWV0aG9kcyBkZWxlZ2F0ZSB0aGVyZS5cblxuICAvLyDilIDilIAgSURhdGFSZW5kZXJlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogRmV0Y2ggdGhlIHRpbGUtc291cmNlIGRlc2NyaXB0b3IgZm9yIHRoZSBzZWxlY3RlZCBmaWxlLiBUaGUgYGluZm9gIHBhcmFtIGlzXG4gICAqIHRoZSBiYXNlNjQgUmF3RmlsZUluZm8gdGhlIHJlc3Qgb2YgdGhlIEFQSSB1c2VzOyB0aGUgR0VUIGdvZXMgdGhyb3VnaCB0aGVcbiAgICogYXV0aCBpbnRlcmNlcHRvciAoQmVhcmVyKS4gV2UgYWxzbyBncmFiIGEgdG9rZW4gaGVyZSBmb3IgT1NEJ3Mgb3duIHRpbGVcbiAgICogZmV0Y2hlcyAoaXRzIGxvYWRlciBieXBhc3NlcyBIdHRwQ2xpZW50KS5cbiAgICpcbiAgICogYHNpZ25hbGAgKHRoZSBob3N0J3MgcmVuZGVyIHN1cGVyc2Vzc2lvbikgY2FuY2VscyB0aGUgYC90aWxlcy9pbmZvYCBwb2xsIGFuZFxuICAgKiB0aGUgc2ltcGxlLWltYWdlIGZldGNoZXM6IHRoZSBsb2FkIHRoZW4gcmVqZWN0cyB3aXRoIGFuIGBBYm9ydEVycm9yYC5cbiAgICovXG4gIGFzeW5jIGxvYWQoaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLCB6SW5kZXg6IG51bWJlciwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPE9zZExvYWRlZD4ge1xuICAgIHRocm93SWZBYm9ydGVkKHNpZ25hbCk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBpbWFnZUluZm8/LmZpbGVOYW1lO1xuICAgIC8vIEEgZGlmZmVyZW50IGltYWdlIHdhcyBzZWxlY3RlZCDigJQgc3RvcCB0aGUgcHJldmlvdXMgc3RhY2sncyBiYWNrZ3JvdW5kXG4gICAgLy8gbG9hZGluZyBpbW1lZGlhdGVseSByYXRoZXIgdGhhbiBsZXR0aW5nIGl0IGZpbmlzaCBiZWhpbmQgdGhlIG5ldyBpbWFnZS5cbiAgICBpZiAoZmlsZW5hbWUgJiYgdGhpcy5jdXJyZW50RmlsZU5hbWUgJiYgZmlsZW5hbWUgIT09IHRoaXMuY3VycmVudEZpbGVOYW1lKSB7XG4gICAgICB0aGlzLmNhY2hlLmNhbmNlbEJhY2tncm91bmRMb2FkKCk7XG4gICAgICB0aGlzLnNpbXBsZS5yZXZva2VVcmxzKCk7XG4gICAgfVxuICAgIHRoaXMuc2ltcGxlU3RhY2subm90ZUFjdGl2ZUZpbGUoZmlsZW5hbWUpO1xuICAgIC8vIFNpbXBsZSAoaW4tbWVtb3J5IC8gbm9uLXRpbGVkKSBpbWFnZTogc2tpcCB0aGUgdGlsZSBzZXJ2ZXIgZW50aXJlbHkg4oCUIG5vXG4gICAgLy8gZ2V0U2VsZWN0ZWRJbmZvQjY0LCBubyAvdGlsZXMvaW5mbyBwb2xsLiBgdXJsc1t6SW5kZXhdYCBpcyBhIGNvbXBsZXRlIGltYWdlXG4gICAgLy8gT1NEIG9wZW5zIHZpYSBpdHMgc2luZ2xlLWltYWdlIHNvdXJjZSAoc2VlIHBsb3QoKSkuXG4gICAgaWYgKHRoaXMuc2ltcGxlU3RhY2suaXNTaW1wbGUoaW1hZ2VJbmZvKSkge1xuICAgICAgdGhpcy5hdXRoSGVhZGVycyA9IHt9O1xuICAgICAgcmV0dXJuIHRoaXMuc2ltcGxlLmxvYWQoaW1hZ2VJbmZvLCB6SW5kZXgsIHNpZ25hbCk7XG4gICAgfVxuICAgIGNvbnN0IGluZm9CNjQgPSB0aGlzLnRpbGVzLmdldFNlbGVjdGVkSW5mb0I2NCgpO1xuICAgIGlmICghaW5mb0I2NCkgcmV0dXJuIHsgZGVzY3JpcHRvcjogbnVsbCwgaW5mb0I2NDogJycsIHo6IHpJbmRleCB8fCAwLCBmaWxlbmFtZSB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYXV0aEhlYWRlcnMgPSBhd2FpdCB0aGlzLnRpbGVzLmdldEF1dGhIZWFkZXJzKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmF1dGhIZWFkZXJzID0ge307IC8vIGZhbGwgYmFjayB0byBjb29raWUgYXV0aCAoYWpheFdpdGhDcmVkZW50aWFscylcbiAgICB9XG4gICAgdGhyb3dJZkFib3J0ZWQoc2lnbmFsKTtcbiAgICAvLyBQb2xsIC90aWxlcy9pbmZvICh0aGUgc2hhcmVkIGppdC1zZXJ2aWNlIGNsaWVudCk6IHRoZSBiYWNrZW5kIHJldHVybnMgMjAyXG4gICAgLy8gd2hpbGUgdGhlIHNvdXJjZSBmaWxlIGlzIHN0aWxsIGJlaW5nIGNhY2hlZCAoR0NTLT5QVkMpIOKAlCBpdCBraWNrcyB0aGVcbiAgICAvLyBkb3dubG9hZCBvZmYgaW4gdGhlIGJhY2tncm91bmQsIHNvIGVhY2ggcmVxdWVzdCBpcyBzaG9ydCAobm8gbG9uZy1oZWxkXG4gICAgLy8gY29ubmVjdGlvbiB0byB0cmlwIGluZ3Jlc3MvcHJveHkgb3IgY2xpZW50IHRpbWVvdXRzKSwgYW5kIDIwMCB3aXRoIHRoZVxuICAgIC8vIGRlc2NyaXB0b3Igb25jZSBpdCdzIHJlYWR5LiBUaGUgY2FjaGUtcHJvZ3Jlc3Mgb3ZlcmxheSBzaG93cyBwcm9ncmVzc1xuICAgIC8vIGR1cmluZyB0aGUgd2FpdC4gVHJhbnNwb3J0IGZhaWx1cmVzIChhIHByb3h5IGhpY2N1cCwgYSBzbG93IG1ldGFkYXRhIHJlYWRcbiAgICAvLyB0aW1pbmcgYSByZXF1ZXN0IG91dCkgYXJlIHJldHJpZWQgdW50aWwgdGhlIGRlYWRsaW5lOyBhIG5vbi0yMDIgc3RhdHVzXG4gICAgLy8gbWVhbnMgdGhpcyBzZXJ2ZXIgd29uJ3QgZGVzY3JpYmUgdGhlIGZpbGUuXG4gICAgLy9cbiAgICAvLyBObyBkZXNjcmlwdG9yIChkZWFkbGluZSwgb3IgYSBzdGF0dXMgb3RoZXIgdGhhbiAyMDIpIGlzIGEgbG9hZCBmYWlsdXJlLCBzb1xuICAgIC8vIHRoZSByb3V0ZXIgZmFsbHMgYmFjayB0byBQbG90bHkgZm9yIHRoaXMgaW1hZ2UsIGFzIGJlZm9yZS4gTm90IGNvbW1pdHRlZCB0b1xuICAgIC8vIGB0aGlzLmRlc2NyaXB0b3JgIGhlcmU6IHRoZSBwcmV2aW91cyBpbWFnZSBzdGF5cyBtb3VudGVkIChhbmQga2VlcHMgdXNpbmdcbiAgICAvLyBpdHMgb3duIGRlc2NyaXB0b3IpIHVudGlsIHBsb3QoKS5cbiAgICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgcG9sbERlc2NyaXB0b3IoaHR0cEZldGNoSnNvbih0aGlzLmh0dHApLCB0aWxlc0luZm9VcmwodGhpcy5hcGksIGluZm9CNjQpLCB7XG4gICAgICBkZWFkbGluZU1zOiB0aGlzLnRpbGVzSW5mb1RpbWVvdXRNcyxcbiAgICAgIGludGVydmFsTXM6IE9TRF9USUxFU19JTkZPX1BPTExfSU5URVJWQUxfTVMsXG4gICAgICBzaWduYWwsXG4gICAgICB0YWc6ICdbT1NEXScsXG4gICAgfSk7XG4gICAgaWYgKCFkZXNjcmlwdG9yKSB0aHJvdyBuZXcgRXJyb3IoJ3RpbGVzL2luZm8gZ2F2ZSBubyBkZXNjcmlwdG9yIOKAlCBmaWxlIHN0aWxsIGNhY2hpbmcgb3Igbm90IHRpbGVhYmxlJyk7XG4gICAgcmV0dXJuIHsgZGVzY3JpcHRvciwgaW5mb0I2NCwgejogekluZGV4IHx8IDAsIGZpbGVuYW1lIH07XG4gIH1cblxuICAvKiogTW91bnQgdGhlIHZpZXdlciB3aXRoIGEgY3VzdG9tIHRpbGUgc291cmNlIHBvaW50aW5nIGF0IGBHRVQgL3RpbGVgLiAqL1xuICBwbG90KFxuICAgIHBsb3REaXY6IHN0cmluZyxcbiAgICBpbWFnZUxvYWRlZDogYW55LFxuICAgIGltYWdlSW5mbzogSUltYWdlSW5mbyxcbiAgICBfc2NyZWVuSGVpZ2h0OiBudW1iZXIsXG4gICAgX3Bsb3RUeXBlOiBQbG90VHlwZSxcbiAgICBpblBsYWNlPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9hZGVkID0gaW1hZ2VMb2FkZWQgYXMgT3NkTG9hZGVkO1xuICAgIGNvbnN0IGQgPSBsb2FkZWQ/LmRlc2NyaXB0b3I7XG4gICAgaWYgKCFkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAvLyBSZS1lc3RhYmxpc2ggdGhlIGNvbG9ybWFwIHN1YnNjcmlwdGlvbiBpZiBhIHByaW9yIGNvbXBvbmVudCB0ZWFyZG93blxuICAgIC8vICh1bnN1YnNjcmliZSgpKSB0b3JlIGl0IGRvd24g4oCUIHRoaXMgc2VydmljZSBpcyBhIHJvb3Qgc2luZ2xldG9uLCBzbyB0aGVcbiAgICAvLyBjb25zdHJ1Y3RvciB3b24ndCBydW4gYWdhaW4gdG8gcmVjcmVhdGUgaXQuXG4gICAgdGhpcy5yZWNvbG9yLmVuc3VyZVN1YnNjcmlwdGlvbigpO1xuICAgIC8vIEEgbmV3IGltYWdlOiBhIHN0cm9rZSBvciBTQU0gcHJvbXB0IGluIHByb2dyZXNzIGJlbG9uZ2VkIHRvIHRoZSBvbGQgb25lLlxuICAgIGlmICghaW5QbGFjZSkgdGhpcy5jYW52YXNUb29scy5yZXNldEFsbCgpO1xuICAgIC8vIE9TRCB0aWxlcyBuYXRpdmVseSwgc28gdGhlIGluLXBsYWNlIChsYXJnZSkgcGFzcyBpcyBub3JtYWxseSBhIG5vLW9wXG4gICAgLy8gb25jZSBtb3VudGVkIOKAlCB0aGUgdGlsZSBweXJhbWlkIElTIHRoZSBmdWxsIHJlc29sdXRpb24gcmVnYXJkbGVzcyBvZlxuICAgIC8vIHdoaWNoIEltYWdlSW5mbyB0aWVyIHJlcXVlc3RlZCBpdC4gU2ltcGxlIG1vZGUgaGFzIG5vIHB5cmFtaWQgdG8gZmFsbFxuICAgIC8vIGJhY2sgb246IGl0IGRpc3BsYXlzIGxpdGVyYWxseSB3aGF0ZXZlciBVUkwgd2FzIGxhc3Qgb3BlbmVkLCBzb1xuICAgIC8vIHdpdGhvdXQgdGhpcyBzd2FwIHRoZSBzbWFsbCB0aWVyJ3MgMTI4cHggcGxhY2Vob2xkZXIgd291bGQgc3RheSBvblxuICAgIC8vIHNjcmVlbiBmb3JldmVyIChwaXhlbGF0ZWQsIG5ldmVyIFwic2hhcnBlbmluZ1wiIGxpa2UgdGhlIHRpbGVkIHBhdGgpLlxuICAgIGlmIChpblBsYWNlICYmIHRoaXMudmlld2VyKSB7XG4gICAgICB0aGlzLnNpbXBsZS5yZWZyZXNoSW5QbGFjZShsb2FkZWQsIGltYWdlSW5mbyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnBsb3REaXYgPSBwbG90RGl2O1xuICAgIHRoaXMuY2hyb21lLm9uTW91bnQoKTsgLy8gdGhlIHRvb2xiYXIgaXMgcmUtbG9jYXRlZCBmb3IgdGhpcyBtb3VudFxuICAgIHRoaXMuY3VycmVudEZpbGVOYW1lID0gaW1hZ2VJbmZvPy5maWxlTmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0b3IgPSBkO1xuICAgIHRoaXMuaW5mb0I2NCA9IGxvYWRlZC5pbmZvQjY0O1xuICAgIHRoaXMuY3VycmVudFogPSBsb2FkZWQuejtcbiAgICB0aGlzLnNpbXBsZS5jb21taXQobG9hZGVkLCBpbWFnZUluZm8pO1xuICAgIC8vIFRoZSBkZXNjcmlwdG9yJ3MgcGh5c2ljYWwgcGl4ZWwgc2l6ZSAoc2VydmVyIEJpby1Gb3JtYXRzIGAvdGlsZXMvaW5mb2ApIGlzXG4gICAgLy8gYXV0aG9yaXRhdGl2ZSDigJQgcHVzaCBpdCBpbnRvIHRoZSBzaGFyZWQgbWV0YSBzbyB0aGUgUmVnaW9uIEVkaXRvciByZXBvcnRzXG4gICAgLy8gYXJlYXMgaW4gwrVtwrIvbW3CsiwgbWF0Y2hpbmcgdGhlIHNjYWxlIGJhciBidWlsdCBmcm9tIGBkLm1wcFhgIGJlbG93LlxuICAgIHRoaXMuc3RvcmUuc2V0UGh5c2ljYWxQaXhlbFNpemUoZC5tcHBYLCBkLm1wcFkpO1xuICAgIC8vIFVzZSB0aGUgU0FNRSBncmF5c2NhbGUgZmxhZyB0aGUgY29sb3JtYXAgZHJvcGRvd24gLyBQbG90bHkgdXNlXG4gICAgLy8gKGltYWdlSW5mby5pc0dyYXlzY2FsZSDihpAgcmdiQ2hhbm5lbHMgPT09IDEpLiBUaGUgZGVzY3JpcHRvcidzIGBjaGFubmVsc2BcbiAgICAvLyAoY2hhbm5lbENvdW50KSBkaXZlcmdlcyBmcm9tIHJnYkNoYW5uZWxzIGZvciBzdGFja3MsIHdoaWNoIGxlZnQgZ3JheXNjYWxlXG4gICAgLy8gc3RhY2tzIHVuLXJlY29sb3JlZCBldmVuIHRob3VnaCB0aGUgY29sb3JtYXAgc2VsZWN0b3Igd2FzIHNob3duLlxuICAgIHRoaXMuaXNHcmF5c2NhbGVJbWFnZSA9ICEhaW1hZ2VJbmZvPy5pc0dyYXlzY2FsZTtcbiAgICAvLyBTaW1wbGUgKG5vbi10aWxlZCwgaW4tbWVtb3J5KSBpbWFnZTogbm8gcHlyYW1pZCwgbm8gcGVyLWNoYW5uZWwgdGlsZXMsIGFuZFxuICAgIC8vIG5vIHNlcnZlci1zaWRlIGludGVuc2l0eSBzYW1wbGluZyDigJQgT1NEJ3Mgc2luZ2xlLWltYWdlIHNvdXJjZSBkZWNvZGVzXG4gICAgLy8gdXJsc1t6XSBkaXJlY3RseS4gU2tpcCB0aGUgd2hvbGUgdGlsZWQtc2V0dXAgcGF0aCBiZWxvdy5cbiAgICBjb25zdCBzaW1wbGUgPSAhIWxvYWRlZC5zaW1wbGU7XG4gICAgaWYgKHNpbXBsZSkge1xuICAgICAgdGhpcy5yZWFsTGV2ZWxzID0gMTtcbiAgICAgIHRoaXMuaXNNdWx0aUNoYW5uZWwgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2FjaGUuY2xlYXJDaGFubmVsR3JvdXBzKCk7XG4gICAgICB0aGlzLmRlc3Ryb3lWaWV3ZXIoKTtcbiAgICAgIC8vIFRha2Ugb3ZlciB0aGUgY29tcG9zaXRlIFVSTCBhbmQgYmluIHRoZSBoaXN0b2dyYW1zIOKAlCBBRlRFUiBkZXN0cm95Vmlld2VyXG4gICAgICAvLyAoaXRzIGxhc3QgYWN0IGlzIHNhbXBsZXIuY2xlYXIoKSkuXG4gICAgICB0aGlzLnNpbXBsZS5tb3VudChsb2FkZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBIHRpbGVkIGltYWdlIGlzIGdvaW5nIG9uIHNjcmVlbjogbm8gc2ltcGxlLW1vZGUgc3RhdGUgbWF5IHN1cnZpdmUgaXRcbiAgICAgIC8vIChsb2FkKCkgbm9ybWFsbHkgY2xlYXJlZCBpdCBhbHJlYWR5OyBwbG90KCkgaXMgd2hhdCBtb3VudHMgdGhlIGltYWdlKS5cbiAgICAgIHRoaXMuc2ltcGxlLnJlc2V0KCk7XG4gICAgICBjb25zdCBwbGFuID0gcGxhblRpbGVkTW91bnQoZCk7XG4gICAgICB0aGlzLnJlYWxMZXZlbHMgPSBwbGFuLnJlYWxMZXZlbHM7XG4gICAgICB0aGlzLmlzTXVsdGlDaGFubmVsID0gcGxhbi5tdWx0aUNoYW5uZWw7XG4gICAgICB0aGlzLmNhY2hlLmNsZWFyQ2hhbm5lbEdyb3VwcygpO1xuICAgICAgdGhpcy5kZXN0cm95Vmlld2VyKCk7XG4gICAgICAvLyBBdXRvLXJhbmdlIGdyYXlzY2FsZSB0aWxlcyB0byB0aGUgaW1hZ2UncyBhY3R1YWwgaW50ZW5zaXR5IHNwYW4gKGxpa2UgdGhlXG4gICAgICAvLyBoZWF0bWFwKSwgc2FtcGxpbmcgdGhlIGNvYXJzZXN0IHRpbGUgbGV2ZWwgc28gdGhlIHdpbmRvdyBtYXRjaGVzIHRoZSByYXdcbiAgICAgIC8vIHRpbGUgdmFsdWVzLiBGaXJlLWFuZC1mb3JnZXQ6IGl0IHJlLWludmFsaWRhdGVzIG9uY2UgdGhlIHdpbmRvdyBpcyBrbm93bjtcbiAgICAgIC8vIHRpbGVzIHBhaW50IHVud2luZG93ZWQgdW50aWwgdGhlbi4gKE11bHRpY2hhbm5lbCB3aW5kb3dzIGFyZSBwZXItY2hhbm5lbCxcbiAgICAgIC8vIGRlZmF1bHRpbmcgdG8gZnVsbCByYW5nZTsgdGhlIHVzZXIgYXV0by9lZGl0cyBlYWNoIGNoYW5uZWwuKSBTdGFydGVkXG4gICAgICAvLyBBRlRFUiBkZXN0cm95Vmlld2VyOiBpdHMgc2FtcGxlci5jbGVhcigpIHN1cGVyc2VkZXMgZXZlcnkgcnVuIGluIGZsaWdodC5cbiAgICAgIGlmICh0aGlzLmlzTXVsdGlDaGFubmVsKSB7XG4gICAgICAgIHZvaWQgdGhpcy5zYW1wbGVyLmNvbXB1dGVNdWx0aUNoYW5uZWxIaXN0b2dyYW1zKGQsIGxvYWRlZC5pbmZvQjY0LCBsb2FkZWQueik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2b2lkIHRoaXMuc2FtcGxlci5jb21wdXRlSW1hZ2VXaW5kb3coZCwgbG9hZGVkLmluZm9CNjQsIGxvYWRlZC56KTtcbiAgICAgIH1cbiAgICAgIC8vIFNpemUgdGhlIHNsaWNlIGNhY2hlIGZvciB0aGlzIGltYWdlOiBMUlUgY2FwIHRvIGhvbGQgdGhlIHdob2xlIHN0YWNrXG4gICAgICAvLyAoY2FwcGVkKSBhbmQgc2tpcCBiYWNrZ3JvdW5kIHByZWxvYWRpbmcgZm9yIHN0YWNrcyB0b28gbGFyZ2UgdG8gcHJlbG9hZFxuICAgICAgLy8gKHdvdWxkIGZsb29kIGZ1bGwtcmVzIHJlYWRzKS4gTm9ybWFsIHN0YWNrcyBrZWVwIHRoZSBmbGlja2VyLWZyZWUgcHJlLWNhY2hlLlxuICAgICAgdGhpcy5jYWNoZS5jb25maWd1cmUoZC56ID8/IDEsIHBsYW4uY29hcnNlVGlsZXMpO1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSBtb2RlOiBPU0QncyBzaW5nbGUtaW1hZ2Ugc291cmNlIGRlY29kZXMgdGhlIFVSTCAoYmxvYjovZGF0YTovaHR0cClcbiAgICAvLyBkaXJlY3RseSDigJQgbm8gcHlyYW1pZCwgbm8gc2VydmVyLiBUaWxlZCBtb2RlOiB0aGUgY3VzdG9tIHNlcnZlci1iYWNrZWQgdGlsZVxuICAgIC8vIHNvdXJjZSAobXVsdGljaGFubmVsIG9wZW5zIG9uIGNoYW5uZWwgMDsgdGhlIG9wZW4gaGFuZGxlciB0aGVuIHN3YXBzIGluIHRoaXNcbiAgICAvLyBzbGljZSdzIHBlci1jaGFubmVsIGdyb3VwIGFuZCB0aGUgYmFja2dyb3VuZCBsb2FkZXIgcHJlLWZpbGxzIHRoZSByZXN0KS5cbiAgICBjb25zdCB0aWxlU291cmNlID0gc2ltcGxlXG4gICAgICA/IHsgdHlwZTogJ2ltYWdlJywgdXJsOiBsb2FkZWQudXJsIH1cbiAgICAgIDogdGhpcy5idWlsZFRpbGVTb3VyY2UoZCwgbG9hZGVkLmluZm9CNjQsIGxvYWRlZC56LCB0aGlzLmlzTXVsdGlDaGFubmVsID8gMCA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGJ1aWxkVmlld2VyT3B0aW9ucyh7XG4gICAgICBpZDogcGxvdERpdixcbiAgICAgIG5hdmlnYXRvclZpc2libGU6IHRoaXMuY2hyb21lLm5hdmlnYXRvclZpc2libGUsXG4gICAgICBzbW9vdGhpbmc6IHRoaXMuY2hyb21lLnNtb290aGluZ0VuYWJsZWQsXG4gICAgICBhdXRoSGVhZGVyczogdGhpcy5hdXRoSGVhZGVycyxcbiAgICAgIHNsaWNlQ291bnQ6IGQueiA/PyAxLFxuICAgICAgbWF4U2xpY2VzOiB0aGlzLmNhY2hlLm1heFNsaWNlcygpLFxuICAgIH0pO1xuICAgIHRoaXMudmlld2VyID0gY3JlYXRlVmlld2VyKG9wdGlvbnMpO1xuICAgIHJldHVybiBvcGVuVmlld2VyKHRoaXMudmlld2VyLCB0aWxlU291cmNlLCAodikgPT4gdGhpcy5vblZpZXdlck9wZW5lZCh2LCBkLCBzaW1wbGUsIHBsb3REaXYpKTtcbiAgfVxuXG4gIC8qKiBXaXJlIGEgZnJlc2hseSBvcGVuZWQgdmlld2VyOiB0aGUgcmVnaW9uIG92ZXJsYXksIGNvb3JkaW5hdGUgdHJhbnNmb3JtIGFuZFxuICAgKiAgc2NhbGUgYmFyLCB0aGUgc2xpY2UgY2FjaGUsIHRoZSByZWNvbG9yIHBpcGVsaW5lLCB0aGUgdmlld3BvcnQgc3RyZWFtcyBhbmRcbiAgICogIHRoZSBjaHJvbWUuICovXG4gIHByaXZhdGUgb25WaWV3ZXJPcGVuZWQodmlld2VyOiBPcGVuU2VhZHJhZ29uLlZpZXdlciwgZDogVGlsZURlc2NyaXB0b3IsIHNpbXBsZTogYm9vbGVhbiwgcGxvdERpdjogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gUmVnaW9uIG92ZXJsYXkgcmVhZHMvd3JpdGVzIHRoZSBzaGFyZWQgUmVnaW9uU3RvcmUsIHNvIHJlZ2lvbnMgc3RheVxuICAgIC8vIGluIHN5bmMgd2l0aCBQbG90bHkgYW5kIHRoZSBSZWdpb24gRWRpdG9yLiBSZWNyZWF0ZSBpdCBwZXIgb3BlbigpIHNvXG4gICAgLy8gaXQgYmluZHMgdG8gdGhlIGZyZXNobHktb3BlbmVkIHZpZXdlcidzIGNhbnZhcy9Nb3VzZVRyYWNrZXIuXG4gICAgdGhpcy5vdmVybGF5Py5kZXN0cm95KCk7XG4gICAgdGhpcy5vdmVybGF5ID0gbmV3IE9zZFJlZ2lvbk92ZXJsYXkodmlld2VyLCB0aGlzLnJlZ2lvblN0b3JlKTtcbiAgICB0aGlzLmNvb3JkVHJhbnNmb3JtID0gbmV3IE9zZENvb3JkaW5hdGVUcmFuc2Zvcm0odmlld2VyKTtcbiAgICB0aGlzLnNjYWxlQmFyID0gbmV3IE9zZFNjYWxlQmFyKHZpZXdlciwgZC5tcHBYID8/IDApO1xuICAgIGlmIChzaW1wbGUpIHtcbiAgICAgIC8vIEEgc2luZ2xlLCBzZWxmLWNvbnRhaW5lZCBpbWFnZSDigJQgbm8gc2xpY2UgY2FjaGUgdG8gc2VlZC4gSXRzIHotc2NydWIgYW5kXG4gICAgICAvLyByZWNvbXBvc2l0ZSByZS1vcGVuIHRoZSB2aWV3ZXI7IG9uZSBwZXJzaXN0ZW50IGhhbmRsZXIgcmVwb3J0cyBhIGZhaWxlZFxuICAgICAgLy8gcmUtb3BlbiAoYSBvbmNlLWhhbmRsZXIgcGVyIHNjcnViIHdvdWxkIHBpbGUgdXApLlxuICAgICAgdmlld2VyLmFkZEhhbmRsZXIoJ29wZW4tZmFpbGVkJywgKGUpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbT1NEXSBzbGljZSByZS1vcGVuIGZhaWxlZCcsIHRoaXMuY3VycmVudFosIChlIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KT8ubWVzc2FnZSA/PyBlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhY2hlLmFkb3B0T3BlbmVkU2xpY2UodGhpcy5jdXJyZW50Wik7XG4gICAgfVxuICAgIC8vIFRoZSB3YW5kIHNhbXBsZXMgdGhlICpyZW5kZXJlZCB2aWV3cG9ydCosIHNvIGl0cyBwaXhlbCBtYXRyaXggaXMgb25seVxuICAgIC8vIHZhbGlkIGZvciB0aGUgY3VycmVudCB2aWV3IOKAlCBkcm9wIGl0IHdoZW5ldmVyIHRoZSB2aWV3cG9ydCBjaGFuZ2VzLlxuICAgIHZpZXdlci5hZGRIYW5kbGVyKCd2aWV3cG9ydC1jaGFuZ2UnLCAoKSA9PiB7XG4gICAgICB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDtcbiAgICB9KTtcbiAgICAvLyBSZWNvbG9yIGV2ZXJ5IHRpbGUgKG1haW4gdmlld2VyIGFuZCBuYXZpZ2F0b3IpIHRocm91Z2ggdGhlIGRpc3BsYXkgcGlwZWxpbmUuXG4gICAgdGhpcy5yZWNvbG9yLmF0dGFjaCh2aWV3ZXIpO1xuICAgIC8vIFByZWZldGNoIGFkamFjZW50IHotc2xpY2VzIG9uY2UgdGhlIHZpZXcgc2V0dGxlcyAoYW5kIG9uIGVhY2ggc2V0dGxlLFxuICAgIC8vIHNvIGl0IHRyYWNrcyB0aGUgY3VycmVudCB2aWV3cG9ydCBhcyB0aGUgdXNlciBwYW5zL3pvb21zKS4gU2ltcGxlIG1vZGVcbiAgICAvLyBoYXMgYSBzaW5nbGUgZnJhbWUsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBwcmVmZXRjaC5cbiAgICBpZiAoIXNpbXBsZSkgdmlld2VyLmFkZEhhbmRsZXIoJ2FuaW1hdGlvbi1maW5pc2gnLCAoKSA9PiB0aGlzLmNhY2hlLnNjaGVkdWxlUHJlZmV0Y2goKSk7XG4gICAgLy8gVGVsbCBsaXN0ZW5lcnMgKHRoZSBpbnRlbnNpdHkgaW5zZXQpIHRoZSB2aXNpYmxlIGltYWdlIHJlZ2lvbiB3aGVuZXZlclxuICAgIC8vIHRoZSB2aWV3IHNldHRsZXMsIHNvIHRoZXkgY2FuIHJlLXNhbXBsZSBhdCB0aGUgY3VycmVudCB6b29tIHJlc29sdXRpb24uXG4gICAgdmlld2VyLmFkZEhhbmRsZXIoJ2FuaW1hdGlvbi1maW5pc2gnLCAoKSA9PiB0aGlzLnZpZXdwb3J0LmVtaXRWaWV3cG9ydENoYW5nZSgpKTtcbiAgICAvLyBFdmVyeSByZWRyYXcgKHBhbi96b29tIGFuaW1hdGlvbiBmcmFtZXMsIHJlc2l6ZSkg4oCUIGZvciBhIGNvbnRyaWJ1dGVkXG4gICAgLy8gcGxvdCBtb2RlJ3Mgb3ZlcmxheSwgd2hpY2ggaGFzIHRvIG1vdmUgd2l0aCB0aGUgaW1hZ2UsIG5vdCBhZnRlciBpdC5cbiAgICB2aWV3ZXIuYWRkSGFuZGxlcigndXBkYXRlLXZpZXdwb3J0JywgKCkgPT4gdGhpcy52aWV3cG9ydC5zY2hlZHVsZUZyYW1lKCkpO1xuICAgIGlmICghc2ltcGxlKSB0aGlzLmNhY2hlLnNjaGVkdWxlUHJlZmV0Y2goKTtcbiAgICAvLyBUb29sYmFyIG51ZGdlcywgZml0LXRvLXZpZXcgYXMgdGhlIGxheW91dCBzZXR0bGVzLCBuYXZpZ2F0b3Igc2l6aW5nLlxuICAgIHRoaXMuY2hyb21lLmF0dGFjaCh2aWV3ZXIsIHBsb3REaXYpO1xuICB9XG5cbiAgLyoqIFRoZSBgR0VUIC90aWxlYCBzb3VyY2UgZm9yIHNsaWNlIGB6YCAob25lIGNoYW5uZWwncywgd2hlbiBnaXZlbikg4oCUIHNlZVxuICAgKiAge0BsaW5rIGJ1aWxkT3NkVGlsZVNvdXJjZX0uIE11bHRpY2hhbm5lbCBkcmF3cyBvZmYgdGhlIHJlYWwgbGV2ZWxzIG9ubHkuICovXG4gIHByaXZhdGUgYnVpbGRUaWxlU291cmNlKFxuICAgIGQ6IFRpbGVEZXNjcmlwdG9yLFxuICAgIGluZm9CNjQ6IHN0cmluZyxcbiAgICB6OiBudW1iZXIsXG4gICAgY2hhbm5lbD86IG51bWJlcixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiBidWlsZE9zZFRpbGVTb3VyY2UoZCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIGluZm9CNjQsXG4gICAgICB6LFxuICAgICAgY2hhbm5lbCxcbiAgICAgIHJlYWxMZXZlbHNPbmx5OiB0aGlzLmlzTXVsdGlDaGFubmVsID8gdGhpcy5yZWFsTGV2ZWxzIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95Vmlld2VyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2FuY2VsQmFja2dyb3VuZExvYWQoKTtcbiAgICB0aGlzLnZpZXdwb3J0LmNhbmNlbEZyYW1lKCk7XG4gICAgLy8gVGVhciBkb3duIGFuIGFybWVkIHBpeGVsIHRvb2wncyBvdmVybGF5ICh6b29tLXRvLWJveCBzdGF5cyBhcm1lZCwgYXMgYmVmb3JlKS5cbiAgICBpZiAodGhpcy5jYW52YXNUb29scy5hY3RpdmVJZCAhPT0gJ3pvb21Ub0JveCcpIHRoaXMuY2FudmFzVG9vbHMuZGVhY3RpdmF0ZSgpO1xuICAgIGlmICh0aGlzLm92ZXJsYXkpIHtcbiAgICAgIHRoaXMub3ZlcmxheS5kZXN0cm95KCk7XG4gICAgICB0aGlzLm92ZXJsYXkgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2FsZUJhcikge1xuICAgICAgdGhpcy5zY2FsZUJhci5kZXN0cm95KCk7XG4gICAgICB0aGlzLnNjYWxlQmFyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMudmlld2VyKSB7XG4gICAgICB0aGlzLnZpZXdlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLnZpZXdlciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuY29vcmRUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuY2FjaGUucmVzZXQoKTtcbiAgICB0aGlzLnNhbXBsZXIuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBUaGlzIGJhY2tlbmQncyByZWdpb24gcmVuZGVyZXIgKHRoZSBTVkcgb3ZlcmxheSksIG9uY2UgYSBwbG90IGlzIG1vdW50ZWQuICovXG4gIGdldFJlZ2lvbk92ZXJsYXkoKTogSVJlZ2lvbk92ZXJsYXkgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5O1xuICB9XG5cbiAgLyoqIE9TRCByZW5kZXJzIG9ubHkgdGhlIGltYWdlIHR5cGUg4oCUIG5vIGlzb3N1cmZhY2UsIHNvIG5vIGNvbnRyb2xzLiAqL1xuICBnZXRJc29zdXJmYWNlQ29udHJvbHMoKTogSUlzb3N1cmZhY2VDb250cm9scyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIE9TRCByZW5kZXJzIG9ubHkgdGhlIGltYWdlIHR5cGUg4oCUIG5vIDNEIHNjZW5lcywgc28gbm8gY29udHJvbHMuICovXG4gIGdldFN1cmZhY2UzZENvbnRyb2xzKCk6IElTdXJmYWNlM2RDb250cm9scyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIE9TRCByZW5kZXJzIG9ubHkgdGhlIGltYWdlIHR5cGUg4oCUIG5vIExJTkUgaW50ZW5zaXR5IFJPSXMsIHNvIG5vIGNvbnRyb2xzLiAqL1xuICBnZXRJbnRlbnNpdHlDb250cm9scygpOiBJSW50ZW5zaXR5Q29udHJvbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgdG9PdmVybGF5TW9kZShtb2RlOiBzdHJpbmcgfCBmYWxzZSk6IFJlZ2lvblRvb2xNb2RlIHtcbiAgICByZXR1cm4gT1ZFUkxBWV9NT0RFUy5oYXMobW9kZSBhcyBSZWdpb25Ub29sTW9kZSkgPyAobW9kZSBhcyBSZWdpb25Ub29sTW9kZSkgOiAnbm9uZSc7XG4gIH1cblxuICByZWxvYWRBbmRQbG90KCk6IHZvaWQge1xuICAgIC8qIGhvc3QgcmUtZHJpdmVzIHBsb3QoKSB2aWEgdGhlIGltYWdlLWluZm8gc3RyZWFtICovXG4gIH1cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95Vmlld2VyKCk7XG4gICAgdGhpcy5zaW1wbGUucmVzZXQoKTtcbiAgfVxuICByZWxheW91dChfdHJ1ZUltYWdlU2l6ZT86IG51bWJlcltdKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydC5rZWVwVmlld0Fjcm9zc1Jlc2l6ZSgpO1xuICB9XG4gIHJlc2V0QXhlcygpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0LmdvSG9tZSgpO1xuICB9XG4gIGF1dG9zY2FsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0LmdvSG9tZSgpO1xuICB9XG4gIHpvb21JbigpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0Lnpvb21CeSgxKTtcbiAgfVxuICB6b29tT3V0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnQuem9vbUJ5KC0xKTtcbiAgfVxuICBzZXREcmFnTW9kZShtb2RlOiBzdHJpbmcgfCBmYWxzZSk6IHZvaWQge1xuICAgIC8vIFJlY3RhbmdsZS9wb2x5Z29uIGRyYXdpbmcgcnVuIG9uIHRoZSBTVkcgb3ZlcmxheTsgd2FuZC9lcmFzZXIvem9vbS1ib3hcbiAgICAvLyAoY3VzdG9tIFBsb3RseSBvdmVybGF5cykgYXJlIHJvdXRlZCB0byBQbG90bHkgYnkgdGhlIHJvdXRlciBhbmQgYXJlbid0XG4gICAgLy8gaGFuZGxlZCBoZXJlIHlldC5cbiAgICB0aGlzLm92ZXJsYXk/LnNldE1vZGUodGhpcy50b092ZXJsYXlNb2RlKG1vZGUpKTtcbiAgfVxuXG4gIHNldFNob3dTdGFjayhfc2hvd3N0YWNrOiBib29sZWFuKTogdm9pZCB7XG4gICAgLyogT1NEIG5hdmlnYXRlcyB0aGUgc3RhY2sgdmlhIHRoZSB6LXNsaWRlciAtPiBzZXRaSW5kZXggKi9cbiAgfVxuXG4gIC8qKiBTaG93L2hpZGUgdGhlIG92ZXJ2aWV3IG5hdmlnYXRvciAobm93LCBhbmQgZm9yIHRoZSBuZXh0IHZpZXdlcikuICovXG4gIHNldE5hdmlnYXRvclZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2hyb21lLnNldE5hdmlnYXRvclZpc2libGUodmlzaWJsZSk7XG4gIH1cblxuICAvKiogVG9nZ2xlIGJpbGluZWFyIHNtb290aGluZyB2cyBuZWFyZXN0LW5laWdoYm91ciAobm93LCBhbmQgZm9yIHRoZSBuZXh0IHZpZXdlcikuICovXG4gIHNldEltYWdlU21vb3RoaW5nRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jaHJvbWUuc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGVuYWJsZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN3YXAgdGhlIGRpc3BsYXllZCB6LXNsaWNlIGxpdmUuIFNsaWNlcyBhcmUga2VwdCBhcyBzZXBhcmF0ZSB0aWxlZCBpbWFnZXMgaW5cbiAgICogdGhlIHdvcmxkLCBzbyBzd2l0Y2hpbmcgaXMganVzdCBhbiBvcGFjaXR5IHRvZ2dsZTogYSBwcmV2aW91c2x5LXZpc2l0ZWQgc2xpY2VcbiAgICogc2hvd3MgaW5zdGFudGx5IChpdHMgZGVjb2RlZCArIHJlY29sb3JlZCB0aWxlcyBhcmUgc3RpbGwgcmVzaWRlbnQpLCBhbmQgYVxuICAgKiBuZXZlci1zZWVuIHNsaWNlIGlzIGFkZGVkIG9uY2UuIFRoZSByZWdpb24gb3ZlcmxheSwgY29vcmRpbmF0ZSB0cmFuc2Zvcm0sXG4gICAqIHNjYWxlIGJhciwgY29sb3JtYXAgcGlwZWxpbmUgYW5kIGN1cnJlbnQgem9vbS9wYW4gYWxsIHBlcnNpc3Qg4oCUIHRoZSB4L3lcbiAgICogZ2VvbWV0cnkgaXMgaWRlbnRpY2FsIGFjcm9zcyBzbGljZXMuXG4gICAqXG4gICAqIFNpbXBsZSBtb2RlICh0aWxlZDpmYWxzZSDigJQgYSBudW1iZXJlZCBpbWFnZSBzZXJpZXMgYXNzZW1ibGVkIGNsaWVudC1zaWRlLFxuICAgKiBlYWNoIHNsaWNlIGl0cyBvd24gY29tcGxldGUgaW1hZ2Ugd2l0aCBubyBzaGFyZWQgdGlsZSBzZXJ2ZXIpIGhhcyBub1xuICAgKiBweXJhbWlkIHRvIHRvZ2dsZSBvcGFjaXR5IG9uLCBzbyBpdCByZS1vcGVucyB0aGUgdmlld2VyIG9uIHRoZSBuZXdcbiAgICogc2xpY2UncyBVUkwgaW5zdGVhZC4gcHJlc2VydmVWaWV3cG9ydCAodmlld2VyIG9wdGlvbiwgc2VlIHBsb3QoKSkga2VlcHNcbiAgICogdGhlIGN1cnJlbnQgem9vbS9wYW4gYWNyb3NzIHRoYXQgcmVvcGVuLlxuICAgKi9cbiAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeiA9IHpJbmRleCB8fCAwO1xuICAgIGlmICh6ID09PSB0aGlzLmN1cnJlbnRaKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnZpZXdlcikgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNpbXBsZS5hY3RpdmUpIHtcbiAgICAgIHRoaXMuc2ltcGxlLnNldFpJbmRleCh6KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRlc2NyaXB0b3IgfHwgIXRoaXMuaW5mb0I2NCkgcmV0dXJuO1xuICAgIHRoaXMuY3VycmVudFogPSB6O1xuICAgIHRoaXMudmlld3BvcnRQaXhlbHMgPSBudWxsOyAvLyB3YW5kIHJlYWRiYWNrIGlzIHNsaWNlLXNwZWNpZmljXG4gICAgdGhpcy5jYWNoZS5zaG93U2xpY2Uoeik7XG4gICAgaWYgKHRoaXMuaXNNdWx0aUNoYW5uZWwpIHtcbiAgICAgIHRoaXMuc2FtcGxlci5jb21wdXRlTXVsdGlDaGFubmVsSGlzdG9ncmFtcyh0aGlzLmRlc2NyaXB0b3IsIHRoaXMuaW5mb0I2NCwgeik7XG4gICAgfVxuICB9XG5cbiAgc2V0U3RhY2tMb2FkaW5nKHN0YWNrTG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc3RhY2tMb2FkaW5nJC5uZXh0KHN0YWNrTG9hZGluZyk7XG4gIH1cbiAgaXNTdGFja0xvYWRpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tMb2FkaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXRTdGFja0xvYWRpbmdQcm9ncmVzcygpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiBvZigwKTsgLy8gT1NEIGxvYWRzIGEgc3RhY2sncyBzbGljZXMgbGF6aWx5IChTbGljZUNhY2hlKTsgbm8gcHJvZ3Jlc3MgdG8gcmVwb3J0XG4gIH1cblxuICBnZXRUcnVlSW1hZ2VTaXplKCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRlc2NyaXB0b3IgPyB7IHdpZHRoOiB0aGlzLmRlc2NyaXB0b3Iud2lkdGgsIGhlaWdodDogdGhpcy5kZXNjcmlwdG9yLmhlaWdodCB9IDogbnVsbDtcbiAgfVxuICBnZXRDdXJyZW50SW1hZ2UoKTogUHJvbWlzZTxJbWFnZSB8IG51bGw+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBpeGVscyDigJQgdGhlIHJlbmRlcmVkIHZpZXdwb3J0ICh3aGF0IHRoZSB1c2VyIHNlZXMsXG4gICAqIGluY2x1ZGluZyB0aGUgY3VycmVudCB6b29tIGFuZCBhbnkgY29sb3JtYXAgcmVjb2xvciksIGFzIFJHQkEuIEZlZWRzIHRoZVxuICAgKiBwcm9jZXNzaW5nLXBpcGVsaW5lIGRpYWxvZydzIFwidXNlIGN1cnJlbnQgdmlld1wiLiBSZXR1cm5zIG51bGwgdW50aWwgdGlsZXNcbiAgICogYXJlIGRyYXduLlxuICAgKi9cbiAgZ2V0RGlzcGxheWVkUGl4ZWxEYXRhKCk6IFBpeGVsRGF0YSB8IG51bGwge1xuICAgIHJldHVybiByZWFkRHJhd2VyUGl4ZWxzKHRoaXMudmlld2VyKTtcbiAgfVxuXG4gIC8qKiBJbWFnZS1waXhlbCByZWN0YW5nbGUgdGhlIGRyYXdlciBjYW52YXMgKHdoYXQge0BsaW5rIGdldERpc3BsYXllZFBpeGVsRGF0YX1cbiAgICogIHJlYWRzKSBjdXJyZW50bHkgY292ZXJzIOKAlCB1bmNsYW1wZWQsIHNlZSBPc2RWaWV3cG9ydEFkYXB0ZXIuZGlzcGxheWVkU291cmNlUmVjdC4gKi9cbiAgZ2V0RGlzcGxheWVkU291cmNlUmVjdCgpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudmlld3BvcnQuZGlzcGxheWVkU291cmNlUmVjdCgpO1xuICB9XG5cbiAgLyoqIFNuYXBzaG90IHRoZSBjdXJyZW50bHkgcmVuZGVyZWQgdmlldyBhcyBhIFBORyAoV1lTSVdZRykg4oCUIHRoZSBwYXJhbGxlbCB0b1xuICAgKiAgUGxvdGx5J3MgZG93bmxvYWRJbWFnZS4gVGhlIGRyYXdlciBjYW52YXMgYWxyZWFkeSBjYXJyaWVzIHRoZSBkaXNwbGF5XG4gICAqICBzZXR0aW5ncyAodGhlIHJlY29sb3IgcGlwZWxpbmUgYmFrZXMgdGhlbSBpbnRvIHRoZSB0aWxlcyk7IHRoZSBmdWxsLXJlc29sdXRpb25cbiAgICogIHN0aXRjaGVkIGV4cG9ydCBpcyBleHBvcnRDb21wb3NpdGUoKS4gKi9cbiAgZG93bmxvYWRJbWFnZSgpOiB2b2lkIHtcbiAgICBzYXZlRHJhd2VyU25hcHNob3QodGhpcy52aWV3ZXIsIChibG9iKSA9PiBzYXZlQXMoYmxvYiwgYCR7ZmlsZVN0ZW0odGhpcy5jdXJyZW50RmlsZU5hbWUpfS5wbmdgKSk7XG4gIH1cblxuICBzZXRQbG90VHlwZShfcGxvdFR5cGU6IFBsb3RUeXBlKTogdm9pZCB7XG4gICAgLyogT1NEIG9ubHkgcmVuZGVycyB0aGUgaW1hZ2UgdHlwZSAqL1xuICB9XG4gIHNldFN1cmZhY2VEcmFnTW9kZShfbW9kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLyogM0Qgbm90IHN1cHBvcnRlZCBieSBPU0QgKi9cbiAgfVxuICByZXNldFN1cmZhY2VDYW1lcmEoKTogdm9pZCB7XG4gICAgLyogM0Qgbm90IHN1cHBvcnRlZCBieSBPU0QgKi9cbiAgfVxuXG4gIC8qKiBUaGUgcm91dGVyIHJlYWRzIHRoZSBhdXRvc2NhbGUgZXZlbnQgZnJvbSBQbG90bHkgb25seS4gKi9cbiAgZ2V0QXV0b3NjYWxlRXZlbnQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICAvKiogVmlzaWJsZSBpbWFnZSByZWdpb24gKGZ1bGwtaW1hZ2UgcGl4ZWwgY29vcmRzKSwgZW1pdHRlZCB3aGVuIHRoZSB2aWV3XG4gICAqICBzZXR0bGVzLiBUaGUgaW50ZW5zaXR5IGluc2V0IHJlLXNhbXBsZXMgdGhpcyByZWdpb24gYXQgdGhlIHpvb20gcmVzb2x1dGlvbi4gKi9cbiAgZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKTogSUludGVuc2l0eVZpZXdwb3J0U291cmNlIHtcbiAgICByZXR1cm4gdGhpcy52aWV3cG9ydFNvdXJjZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdwb3J0U291cmNlOiBJSW50ZW5zaXR5Vmlld3BvcnRTb3VyY2UgPSB7XG4gICAgZ2V0Vmlld3BvcnRDaGFuZ2UkOiAoKSA9PiB0aGlzLnZpZXdwb3J0LnZpZXdwb3J0Q2hhbmdlJC5hc09ic2VydmFibGUoKSxcbiAgfTtcblxuICAvKiogVGhlIG5hdmlnYXRvciBhbmQgaW1hZ2Ugc21vb3RoaW5nIChzZWUge0BsaW5rIHNldE5hdmlnYXRvclZpc2libGV9KS4gKi9cbiAgZ2V0T3NkVmlld09wdGlvbnMoKTogSU9zZFZpZXdPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy52aWV3T3B0aW9ucztcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdPcHRpb25zOiBJT3NkVmlld09wdGlvbnMgPSB7XG4gICAgc2V0TmF2aWdhdG9yVmlzaWJsZTogKHZpc2libGUpID0+IHRoaXMuc2V0TmF2aWdhdG9yVmlzaWJsZSh2aXNpYmxlKSxcbiAgICBzZXRJbWFnZVNtb290aGluZ0VuYWJsZWQ6IChlbmFibGVkKSA9PiB0aGlzLnNldEltYWdlU21vb3RoaW5nRW5hYmxlZChlbmFibGVkKSxcbiAgfTtcblxuICAvKiogT1NEIHJlbmRlcnMgbm8gdm9sdW1lcy4gKi9cbiAgZ2V0Vm9sdW1lUmVzb2x1dGlvbigpOiBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBUaGUgdmlld3BvcnQgYSBjb250cmlidXRlZCBwbG90IG1vZGUgZHJhd3Mgb3Zlcjogb25lIHN0YWJsZSBvYmplY3QgdGhhdFxuICAgKiAgYWx3YXlzIHJlYWRzIHRoZSBjdXJyZW50IHZpZXdlciAoc2VlIE9zZFZpZXdwb3J0QWRhcHRlci5wbG90TW9kZVZpZXdwb3J0Rm9yKS4gKi9cbiAgZ2V0UGxvdE1vZGVWaWV3cG9ydCgpOiBQbG90TW9kZVZpZXdwb3J0IHtcbiAgICByZXR1cm4gdGhpcy52aWV3cG9ydC5wbG90TW9kZVZpZXdwb3J0Rm9yKCk7XG4gIH1cblxuICAvKiogT1NEIHRhcmdldHMgdGhlIGltYWdlIGRpc3BsYXk7IHRoZSBzY2FsYXIvM0QgcGxvdCB0eXBlcyBiZWxvbmcgdG8gUGxvdGx5LiAqL1xuICBnZXRQbG90VHlwZURlc2NyaXB0b3JzKCk6IFBsb3RUeXBlRGVzY3JpcHRvcltdIHtcbiAgICByZXR1cm4gW1BMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5IRUFUTUFQXSFdO1xuICB9XG5cbiAgLy8g4pSA4pSAIElSZWdpb25TdG9yZSArIGNsYXNzaWZpY2F0aW9uIGNvbG91cnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIEluaGVyaXRlZCBmcm9tIEJhc2VTdG9yZVZpc3VhbGl6ZXIg4oCUIHB1cmUgZGVsZWdhdGlvbnMgdG8gdGhlIHNoYXJlZFxuICAvLyBSZWdpb25TdG9yZSAvIFZpc3VhbGl6ZXJTdG9yZSAoaWRlbnRpY2FsIHRvIG5hcGFyaS1qcykuIFRoZSBPU0QgcmVnaW9uXG4gIC8vIG92ZXJsYXkgKGNvbnN0cnVjdGVkIGluIHBsb3QoKSkgcmVhZHMvd3JpdGVzIHRoYXQgc2FtZSBzdG9yZSwgc28gcmVnaW9uc1xuICAvLyBzdGF5IGluIHN5bmMgd2l0aCBQbG90bHkgYW5kIHRoZSBSZWdpb24gRWRpdG9yOyBPU0QgcmVuZGVycyB0aGVtIGFzIGFuIFNWR1xuICAvLyBvdmVybGF5IHJhdGhlciB0aGFuIGNhcnJ5aW5nIFBsb3RseSBzaGFwZSBkaWN0cy5cblxuICAvLyDilIDilIAgSVRvb2xDb250cm9sbGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBzZXRBY3RpdmVUb29sIGFuZCB0aGUgcGVyLXRvb2wgc2V0dGVycyBydW4gaW4gQmFzZVN0b3JlVmlzdWFsaXplciBvdmVyXG4gIC8vIHRoaXMuY2FudmFzVG9vbHM7IE9TRCBnYXRlcyBtb3VzZS1uYXYgYW5kIGl0cyByZWFkYmFjayBoZXJlLlxuXG4gIC8qKlxuICAgKiBNb3VzZS1uYXYgaXMgb2ZmIHdoaWxlIGEgY2FudmFzIHRvb2wgaG9sZHMgdGhlIHBvaW50ZXIgKGl0cyBkcmFnIG11c3QgZHJhdyxcbiAgICogbm90IHBhbikgYW5kIG9uIG90aGVyd2lzZSDigJQgYWxzbyB3aGVuIGEgcmVnaW9uIGRyYXcgbW9kZSBpcyBhcm1lZCBvbiB0aGVcbiAgICogb3ZlcmxheSwgYXMgdGhlIG9sZCBwZXItdG9vbCBmYW4tb3V0IGxlZnQgaXQgKGl0cyBzZXRab29tVG9Cb3hNb2RlKGZhbHNlKVxuICAgKiByZS1lbmFibGVkIG5hdiBhZnRlciB0aGUgb3ZlcmxheSdzIHNldE1vZGUpLiBBIHBpeGVsIHRvb2wgc2FtcGxlcyB0aGVcbiAgICogcmVuZGVyZWQgdmlld3BvcnQsIHJlYWQgYmFjayBsYXppbHkgb24gZmlyc3QgdXNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGJlZm9yZVRvb2xDaGFuZ2UobmV4dDogQ2FudmFzVG9vbElkIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHRoaXMudmlld2VyPy5zZXRNb3VzZU5hdkVuYWJsZWQobmV4dCA9PT0gbnVsbCk7XG4gICAgaWYgKG5leHQgIT09IG51bGwgJiYgbmV4dCAhPT0gJ3pvb21Ub0JveCcpIHRoaXMudmlld3BvcnRQaXhlbHMgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKiBCb3gtcHJvbXB0ZWQgU0FNOiBzZWdtZW50IHRoZSBkcmF3biByZWN0YW5nbGVzIGFnYWluc3Qgb3VyIHRvb2wgaG9zdFxuICAgKiAgKHZpZXdwb3J0IHJlYWRiYWNrICsgY29vcmRpbmF0ZSB0cmFuc2Zvcm0gKyByZWdpb24gc3RvcmUpLiAqL1xuICBzZWdtZW50UmVjdGFuZ2xlcygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHRoaXMudmlld3BvcnRQaXhlbHMgPSBudWxsOyAvLyBzZWdtZW50IGFnYWluc3QgdGhlIGN1cnJlbnQgdmlld3BvcnQgcmVhZGJhY2tcbiAgICByZXR1cm4gdGhpcy5zYW1Ub29sLnNlZ21lbnRCb3hlcyh0aGlzLnRvb2xIb3N0KTtcbiAgfVxuICBzZWdtZW50UmVjdGFuZ2xlc0NlbGxwb3NlKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKCF0aGlzLmNlbGxTZWdtZW50ZXIpIHJldHVybiBQcm9taXNlLnJlc29sdmUoMCk7XG4gICAgdGhpcy52aWV3cG9ydFBpeGVscyA9IG51bGw7IC8vIGNyb3AgYWdhaW5zdCB0aGUgY3VycmVudCB2aWV3cG9ydCByZWFkYmFja1xuICAgIHJldHVybiB0aGlzLmNlbGxTZWdtZW50VG9vbC5zZWdtZW50Qm94ZXModGhpcy50b29sSG9zdCwgdGhpcy5jZWxsU2VnbWVudGVyKTtcbiAgfVxuICBzZXRTYW1Nb2RlbChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zYW1Ub29sLnNldE1vZGVsKGlkKTtcbiAgICB0aGlzLnNhbVBvaW50VG9vbC5zZXRNb2RlbChpZCk7XG4gIH1cblxuICAvKiogVGhlIGVsZW1lbnQgdGhlIG9uLWNhbnZhcyB0b29sIG92ZXJsYXlzIGF0dGFjaCB0byAoT1NEIGlzIG1vdW50ZWQgaGVyZSkuICovXG4gIHByaXZhdGUgZ2V0T3ZlcmxheUNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBsb3REaXYgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnBsb3REaXYpIDogbnVsbDtcbiAgfVxuXG4gIC8qKiBUaGUgcGl4ZWwgdG9vbHMnIGZyYW1lOiB0aGUgcmVuZGVyZWQgdmlld3BvcnQsIHJlYWQgYmFjayBvbmNlIGFuZCBjYWNoZWRcbiAgICogIHVudGlsIHRoZSB2aWV3cG9ydCBjaGFuZ2VzIChzZWUgcmVhZGJhY2tWaWV3cG9ydEZyYW1lKS4gKi9cbiAgcHJpdmF0ZSByZWFkYmFja1ZpZXdwb3J0KCk6IENhY2hlZEltYWdlRGF0YSB8IG51bGwge1xuICAgIHJldHVybiAodGhpcy52aWV3cG9ydFBpeGVscyA/Pz0gcmVhZGJhY2tWaWV3cG9ydEZyYW1lKHRoaXMudmlld2VyKSk7XG4gIH1cblxuICAvKiogUGVyLWNoYW5uZWwgaGlzdG9ncmFtIGZvciB0aGUgQ2hhbm5lbHMgJiBIaXN0b2dyYW0gcGFuZSwgZnJvbSB0aGUgY3VycmVudFxuICAgKiAgc2xpY2UncyBzYW1wbGVkIHRpbGVzIChncmF5c2NhbGUg4oaSIGNoYW5uZWwgMDsgUkdCIOKGkiBSL0cvQikuIE51bGwgdW50aWwgdGhlXG4gICAqICBhc3luYyBzYW1wbGluZyByZXNvbHZlcyBvciBpZiBpdCB3YXMgc2tpcHBlZC4gKi9cbiAgZ2V0SGlzdG9ncmFtKGNoYW5uZWxJbmRleDogbnVtYmVyLCBfYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNhbXBsZXIuZ2V0KHRoaXMuY3VycmVudFosIGNoYW5uZWxJbmRleCk7XG4gIH1cblxuICAvKiogTmF0aXZlIGJpdCBkZXB0aCBvZiBhIGNoYW5uZWwgZnJvbSB0aGUgdGlsZSBkZXNjcmlwdG9yICg4IHdoZW4gdW5rbm93bikuICovXG4gIHByaXZhdGUgY2hhbm5lbEJpdERlcHRoKGNoYW5uZWxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yPy5jaGFubmVsSW5mbz8uW2NoYW5uZWxJbmRleF0/LmJpdERlcHRoID8/IDg7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMgaGlzdG9ncmFtIGZvciB0aGUgQ2hhbm5lbHMgJiBIaXN0b2dyYW0gcGFuZS4gRm9yID44LWJpdCBpbWFnZXMgaXRcbiAgICogZmV0Y2hlcyB0aGUgKipuYXRpdmUqKiBkaXN0cmlidXRpb24gZnJvbSB0aGUgc2VydmVyIGAvaGlzdG9ncmFtYCBlbmRwb2ludFxuICAgKiAodGhlIDgtYml0IGNhbnZhcyB0aWxlcyBjYW4ndCBjYXJyeSAxNi1iaXQgdmFsdWVzKSBhbmQgY2FjaGVzIGl0IHBlclxuICAgKiBzbGljZStjaGFubmVsOyBmb3IgOC1iaXQvUkdCIGl0IHJldHVybnMgdGhlIGV4aXN0aW5nIGNsaWVudC1zYW1wbGVkIDgtYml0XG4gICAqIGhpc3RvZ3JhbS4gUmVhZC1vbmx5IOKAlCBpdCBuZXZlciB0b3VjaGVzIHRoZSB0aWxlL2Rpc3BsYXkgcGlwZWxpbmUuXG4gICAqL1xuICBnZXRIaXN0b2dyYW0kKGNoYW5uZWxJbmRleDogbnVtYmVyLCBiaW5zOiBudW1iZXIpOiBPYnNlcnZhYmxlPElIaXN0b2dyYW0gfCBudWxsPiB7XG4gICAgaWYgKHRoaXMuY2hhbm5lbEJpdERlcHRoKGNoYW5uZWxJbmRleCkgPD0gOCB8fCAhdGhpcy5pbmZvQjY0KSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5nZXRIaXN0b2dyYW0oY2hhbm5lbEluZGV4LCBiaW5zKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhbXBsZXIubmF0aXZlJCh0aGlzLmluZm9CNjQsIHRoaXMuY3VycmVudFosIGNoYW5uZWxJbmRleCwgYmlucyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRoZSB1bmRlcmx5aW5nIGltYWdlIGRhdGEgYXMgYSBkYXRhLXByZXNlcnZpbmcgbXVsdGktYmFuZCBUSUZGIGF0XG4gICAqIG5hdGl2ZSBiaXQgZGVwdGggdmlhIGBHRVQgL2V4cG9ydC90aWZmYCAodGhlIHNlcnZlciByZWFkcyB0aGUgcmF3IDE2LWJpdFxuICAgKiBwbGFuZXMg4oCUIHRoZSBjbGllbnQgbmV2ZXIgc2VlcyB0aGVtKS4gU2VuZHMgb25seSB0aGUgdmlzaWJsZSBjaGFubmVsczsgdGhlXG4gICAqIGV4aXN0aW5nIDgtYml0IGNvbXBvc2l0ZSBQTkcgZXhwb3J0IGlzIHVuYWZmZWN0ZWQuXG4gICAqL1xuICBhc3luYyBleHBvcnREYXRhKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pbmZvQjY0KSByZXR1cm47XG4gICAgY29uc3Qgc3RhdGVzID0gdGhpcy5yZWNvbG9yLmNoYW5uZWxTdGF0ZXM7XG4gICAgY29uc3QgdmlzaWJsZSA9IHN0YXRlcy5maWx0ZXIoKGMpID0+IGMudmlzaWJsZSkubWFwKChjKSA9PiBjLmluZGV4KTtcbiAgICBjb25zdCB1cmwgPSBleHBvcnRUaWZmVXJsKHRoaXMuYXBpLCB0aGlzLmluZm9CNjQsIHRoaXMuY3VycmVudFosIHZpc2libGUsIHN0YXRlcy5sZW5ndGgpO1xuICAgIGNvbnN0IHNhdmVOYW1lID0gZXhwb3J0VGlmZkZpbGVuYW1lKHRoaXMuY3VycmVudEZpbGVOYW1lKTtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgZmV0Y2hUaWZmRXhwb3J0KHRoaXMuaHR0cCwgdXJsKTtcbiAgICBpZiAoYmxvYikgc2F2ZUFzKGJsb2IsIHNhdmVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdGhlIGN1cnJlbnQgc2xpY2UgYXMgYSBwdWJsaWNhdGlvbi1yZWFkeSBQTkcgY29tcG9zaXRlZCB3aXRoIHRoZVxuICAgKiBhY3RpdmUgZGlzcGxheSBzZXR0aW5ncywgdGhlIHdheSBpdCBpcyBkcmF3biAoc2VlIHJlbmRlckNvbXBvc2l0ZVBuZykuXG4gICAqL1xuICBhc3luYyBleHBvcnRDb21wb3NpdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmRlc2NyaXB0b3IpIHJldHVybjtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgcmVuZGVyQ29tcG9zaXRlUG5nKHtcbiAgICAgIGh0dHA6IHRoaXMuaHR0cCxcbiAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICBkZXNjcmlwdG9yOiB0aGlzLmRlc2NyaXB0b3IsXG4gICAgICBpbmZvQjY0OiB0aGlzLmluZm9CNjQsXG4gICAgICB6OiB0aGlzLmN1cnJlbnRaLFxuICAgICAgbXVsdGlDaGFubmVsOiB0aGlzLmlzTXVsdGlDaGFubmVsLFxuICAgICAgcmVhbExldmVsczogdGhpcy5yZWFsTGV2ZWxzLFxuICAgICAgY2hhbm5lbFN0YXRlczogdGhpcy5yZWNvbG9yLmNoYW5uZWxTdGF0ZXMsXG4gICAgICBkaXNwbGF5OiB0aGlzLnJlY29sb3IuZGlzcGxheSxcbiAgICB9KTtcbiAgICBpZiAoYmxvYikgc2F2ZUFzKGJsb2IsIGAke2ZpbGVTdGVtKHRoaXMuY3VycmVudEZpbGVOYW1lKX1fY29tcG9zaXRlLnBuZ2ApO1xuICB9XG5cbiAgLy8g4pSA4pSAIElEaXNwbGF5T3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gSW5oZXJpdGVkIGZyb20gQmFzZVN0b3JlVmlzdWFsaXplciDigJQgcHVyZSBkZWxlZ2F0aW9ucyB0byB0aGUgc2hhcmVkXG4gIC8vIFZpc3VhbGl6ZXJTdG9yZSwgc28gT1NEIGFuZCBQbG90bHkgc3RheSBpbiBsb2NrLXN0ZXAuIE9TRCBhcHBsaWVzIHRoZVxuICAvLyBjb2xvcm1hcCB0byBncmF5c2NhbGUgdGlsZXMgdmlhIHRoZSBMVVQgcmVhY3RpdmVseSAoc2VlIHRoZSBjb25zdHJ1Y3RvcidzXG4gIC8vIGNvbG9ybWFwIHN1YnNjcmlwdGlvbiksIG5vdCBpbiBzZXRDb2xvcm1hcC5cblxuICAvLyDilIDilIAgSVZpc3VhbGl6ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgIC8vIFRoZSBzdG9yZSBzdWJzY3JpcHRpb24sIGFuZCBhIHF1ZXVlZCBpbnZhbGlkYXRpb24gdGhhdCBtdXN0IG5vdCBmaXJlXG4gICAgLy8gYWdhaW5zdCBhIHRvcm4tZG93biB2aWV3ZXIuXG4gICAgdGhpcy5yZWNvbG9yLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5kZXN0cm95Vmlld2VyKCk7XG4gICAgdGhpcy5zaW1wbGUucmVzZXQoKTtcbiAgfVxufVxuIl19
765
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnNlYWRyYWdvbi12aXN1YWxpemVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9vc2Qvb3BlbnNlYWRyYWdvbi12aXN1YWxpemVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9ELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBc0IsTUFBTSwyQkFBMkIsQ0FBQztBQVVoRyxPQUFPLEVBQXNCLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFN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LFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYztZQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYTtZQUN6QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1NBQzlCLENBQUMsQ0FBQztRQUNILElBQUksSUFBSTtZQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsc0VBQXNFO0lBQ3RFLHdFQUF3RTtJQUN4RSw0RUFBNEU7SUFDNUUsOENBQThDO0lBRTlDLHdFQUF3RTtJQUN4RSxXQUFXO1FBQ1QsdUVBQXVFO1FBQ3ZFLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7OEdBL3RCVSw4QkFBOEIsNENBK0cvQixnQkFBZ0IsK0lBS0osY0FBYywrSEFJMUIsVUFBVTtrSEF4SFQsOEJBQThCLGNBRGpCLE1BQU07OzJGQUNuQiw4QkFBOEI7a0JBRDFDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFnSDdCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFLdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzswQkFJakMsTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJ2ltYWdlLWpzJztcbmltcG9ydCAqIGFzIE9wZW5TZWFkcmFnb24gZnJvbSAnb3BlbnNlYWRyYWdvbic7XG5pbXBvcnQgeyBidWlsZFZpZXdlck9wdGlvbnMgfSBmcm9tICcuL29wZW5zZWFkcmFnb24tdmlld2VyLW9wdGlvbnMnO1xuaW1wb3J0IHsgY3JlYXRlVmlld2VyLCBvcGVuVmlld2VyIH0gZnJvbSAnLi9vc2Qtdmlld2VyLW1vdW50JztcbmltcG9ydCB7IFZpc3VhbGl6ZXJTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Zpc3VhbGl6ZXItc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBSZWdpb25TdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3JlZ2lvbi1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IElJbWFnZUluZm8gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgVGlsZUFjY2Vzc1BvcnQsIFRJTEVfQUNDRVNTX1BPUlQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcG9ydHMvdGlsZS1hY2Nlc3MucG9ydCc7XG5pbXBvcnQgeyBWaXpDb25maWcsIFZJWl9DT05GSUcgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvdml6LWNvbmZpZyc7XG5pbXBvcnQgeyBQbG90VHlwZSwgUExPVF9UWVBFX0RFU0NSSVBUT1JTLCBQbG90VHlwZURlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcGxvdC10eXBlJztcbmltcG9ydCB7XG4gIElWaWV3ZXJCYWNrZW5kLFxuICBQaXhlbERhdGEsXG4gIElJc29zdXJmYWNlQ29udHJvbHMsXG4gIElJbnRlbnNpdHlDb250cm9scyxcbiAgSVN1cmZhY2UzZENvbnRyb2xzLFxuICBJT3NkVmlld09wdGlvbnMsXG4gIElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSxcbn0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgVmlld2VyQ2FwYWJpbGl0aWVzLCBWaWV3ZXJGZWF0dXJlLCBjYXBhYmlsaXRpZXNPZiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jYXBhYmlsaXRpZXMuY29udHJhY3QnO1xuaW1wb3J0IHsgT3NkUmVnaW9uT3ZlcmxheSB9IGZyb20gJy4vb3NkLXJlZ2lvbi1vdmVybGF5JztcbmltcG9ydCB7IE9zZFRpbGVMb2FkaW5nIH0gZnJvbSAnLi9vc2QtdGlsZS1sb2FkaW5nJztcbmltcG9ydCB7IE9zZFNjYWxlQmFyIH0gZnJvbSAnLi9vc2Qtc2NhbGUtYmFyJztcbmltcG9ydCB7IElSZWdpb25PdmVybGF5LCBSZWdpb25Ub29sTW9kZSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9yZWdpb24tb3ZlcmxheS5jb250cmFjdCc7XG5pbXBvcnQgeyBJQ29vcmRpbmF0ZVRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jb29yZGluYXRlLXRyYW5zZm9ybS5jb250cmFjdCc7XG5pbXBvcnQgeyBPc2RDb29yZGluYXRlVHJhbnNmb3JtIH0gZnJvbSAnLi9vc2QtY29vcmRpbmF0ZS10cmFuc2Zvcm0nO1xuaW1wb3J0IHsgT3NkVmlld3BvcnRBZGFwdGVyIH0gZnJvbSAnLi9vc2Qtdmlld3BvcnQnO1xuaW1wb3J0IHsgT3NkTmF2aWdhdG9yQ2hyb21lIH0gZnJvbSAnLi9vc2QtbmF2aWdhdG9yLWNocm9tZSc7XG5pbXBvcnQgeyBQbG90TW9kZVZpZXdwb3J0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Bsb3QtdHlwZS1jb250cmlidXRpb24uY29udHJhY3QnO1xuaW1wb3J0IHsgZWxlbWVudFRvSW1hZ2UgfSBmcm9tICcuL29zZC1jb29yZHMnO1xuaW1wb3J0IHsgYnVpbGRPc2RUaWxlU291cmNlLCBwbGFuVGlsZWRNb3VudCB9IGZyb20gJy4vb3NkLXRpbGUtc291cmNlJztcbmltcG9ydCB7IFNsaWNlQ2FjaGUgfSBmcm9tICcuL3NsaWNlLWNhY2hlJztcbmltcG9ydCB7IE9zZFRpbGVSZWNvbG9yZXIgfSBmcm9tICcuL3RpbGUtcmVjb2xvcic7XG5pbXBvcnQgeyBPc2RMb2FkZWQsIE9zZFNpbXBsZVNvdXJjZSB9IGZyb20gJy4vc2ltcGxlLXNvdXJjZSc7XG5pbXBvcnQgeyByZWFkRHJhd2VyUGl4ZWxzLCByZWFkYmFja1ZpZXdwb3J0RnJhbWUsIHNhdmVEcmF3ZXJTbmFwc2hvdCB9IGZyb20gJy4vb3NkLXBpeGVsLXJlYWRiYWNrJztcbmltcG9ydCB7IGZldGNoVGlmZkV4cG9ydCwgZmlsZVN0ZW0sIHJlbmRlckNvbXBvc2l0ZVBuZyB9IGZyb20gJy4vb3NkLWV4cG9ydCc7XG5pbXBvcnQgeyBIaXN0b2dyYW1TYW1wbGVyIH0gZnJvbSAnLi9oaXN0b2dyYW0tc2FtcGxlcic7XG5pbXBvcnQge1xuICBUaWxlRGVzY3JpcHRvcixcbiAgZXhwb3J0VGlmZkZpbGVuYW1lLFxuICBleHBvcnRUaWZmVXJsLFxuICBodHRwRmV0Y2hKc29uLFxuICBwb2xsRGVzY3JpcHRvcixcbiAgdGhyb3dJZkFib3J0ZWQsXG4gIHRpbGVzSW5mb1VybCxcbn0gZnJvbSAnLi4vdGlsZS1zZXJ2ZXInO1xuaW1wb3J0IHsgQmFzZVN0b3JlVmlzdWFsaXplciB9IGZyb20gJy4uL2Jhc2Utc3RvcmUtdmlzdWFsaXplcic7XG5pbXBvcnQgeyBDYW52YXNUb29sSWQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgeyBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi9zaW1wbGUtc2xpY2UtYWNjZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FjaGVkSW1hZ2VEYXRhLCBDYW52YXNUb29sSG9zdCB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbC1raXQvY2FudmFzLXRvb2wnO1xuaW1wb3J0IHsgQ2FudmFzVG9vbE1hbmFnZXIgfSBmcm9tICcuLi8uLi90b29sYmFyL3Rvb2wta2l0L2NhbnZhcy10b29sLW1hbmFnZXInO1xuaW1wb3J0IHsgY3JlYXRlQ2FudmFzVG9vbE1hbmFnZXIgfSBmcm9tICcuLi8uLi90b29sYmFyL2NhbnZhcy10b29scyc7XG5pbXBvcnQgeyBXYW5kU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvd2FuZC93YW5kLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FtVG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNhbVBvaW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tcG9pbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxTZWdtZW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9jZWxsLXNlZ21lbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IElDZWxsU2VnbWVudGVyLCBDRUxMX1NFR01FTlRFUiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdCc7XG5pbXBvcnQgeyBJSGlzdG9ncmFtIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NoYW5uZWwtaGlzdG9ncmFtLWFwaS5jb250cmFjdCc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcblxuLyoqIFdhaXQgYmV0d2VlbiB0d28gYC90aWxlcy9pbmZvYCBwb2xscyB3aGlsZSB0aGUgc2VydmVyIGFuc3dlcnMgMjAyLiAqL1xuY29uc3QgT1NEX1RJTEVTX0lORk9fUE9MTF9JTlRFUlZBTF9NUyA9IDE1MDA7XG5cbi8qKiBUaGUgZHJhZyBtb2RlcyB0aGUgU1ZHIHJlZ2lvbiBvdmVybGF5IGhhbmRsZXMgaXRzZWxmIChzZWUgc2V0RHJhZ01vZGUpLiAqL1xuY29uc3QgT1ZFUkxBWV9NT0RFUyA9IG5ldyBTZXQ8UmVnaW9uVG9vbE1vZGU+KFtcbiAgJ2RyYXdyZWN0JyxcbiAgJ2RyYXdjbG9zZWRwYXRoJyxcbiAgJ2RyYXdvcGVucGF0aCcsXG4gICdkcmF3cG9seWdvbicsXG4gICdhZGRwb2ludCcsXG4gICdkZWxldGVwb2ludCcsXG4gICdtb3ZlJyxcbiAgJ3NlbGVjdCcsXG5dKTtcblxuLyoqXG4gKiBPcGVuU2VhZHJhZ29uIHZpc3VhbGl6YXRpb24gYmFja2VuZC5cbiAqXG4gKiBSZW5kZXJzIHRoZSAqaW1hZ2UqIHBsb3QgdHlwZSBhcyBhIG5hdGl2ZWx5LXRpbGVkLCB6b29tYWJsZSByYXN0ZXIsIGJhY2tlZCBieVxuICogdGhlIGppdC1zZXJ2aWNlIHRpbGUgZW5kcG9pbnRzIChgR0VUIC90aWxlcy9pbmZvYCArIGBHRVQgL3RpbGVgLCB3aGljaCByZXVzZVxuICogdGhlIEJpby1Gb3JtYXRzIFJPSSByZW5kZXJlciksIG9yIOKAlCBmb3IgYSBgdGlsZWQ6IGZhbHNlYCBpbWFnZSDigJQgYnlcbiAqIHNlbGYtY29udGFpbmVkIHBlci1zbGljZSBVUkxzLiBQbG90bHkga2VlcHMgdGhlIHNjaWVudGlmaWMvZGF0YSBwbG90IHR5cGVzXG4gKiAoc2NhbGFyIGhlYXRtYXAsIHN1cmZhY2UsIGNvbnRvdXIsIHNjYXR0ZXIsIGxpbmUsIHNjYXR0ZXIzZCwgaXNvc3VyZmFjZSkg4oCUXG4gKiBoZW5jZSB0aGlzIGJhY2tlbmQgYWR2ZXJ0aXNlcyBvbmx5IGBJbWFnZURpc3BsYXlgLlxuICpcbiAqIERpc3BsYXkgc2V0dGluZ3MgKHdpbmRvdy9nYW1tYS9jb2xvcm1hcC9pbnZlcnQsIHBlci1jaGFubmVsIHRpbnRzKSBhcmUgYXBwbGllZFxuICogY2xpZW50LXNpZGUgYnkgcmVjb2xvcmluZyB0aWxlczsgcmVnaW9ucyBhcmUgZHJhd24gYnkge0BsaW5rIE9zZFJlZ2lvbk92ZXJsYXl9XG4gKiBhbmQgdGhlIGNhbnZhcyB0b29scyByZWFkIGJhY2sgdGhlIHJlbmRlcmVkIHZpZXdwb3J0LiBUaGUgY29sbGFib3JhdG9yc1xuICogKHNsaWNlIGNhY2hlLCBkaXNwbGF5IHBpcGVsaW5lLCBoaXN0b2dyYW0gc2FtcGxlciwgdGlsZSBjbGllbnQpIGFuZCB0aGVcbiAqIHJlY29sb3IgaW52YXJpYW50IGFyZSBkZXNjcmliZWQgaW4gdGhpcyBmb2xkZXIncyBSRUFETUUuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgT3BlblNlYWRyYWdvblZpc3VhbGl6ZXJTZXJ2aWNlIGV4dGVuZHMgQmFzZVN0b3JlVmlzdWFsaXplciBpbXBsZW1lbnRzIElWaWV3ZXJCYWNrZW5kIHtcbiAgLyoqIE9TRCdzIHN0cmVuZ3RoIGlzIGRpc3BsYXlpbmcgYSBsYXJnZSB6b29tYWJsZSBpbWFnZSDigJQgbm90aGluZyBlbHNlIGhlcmUuICovXG4gIHJlYWRvbmx5IGNhcGFiaWxpdGllczogVmlld2VyQ2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzT2YoW1ZpZXdlckZlYXR1cmUuSW1hZ2VEaXNwbGF5XSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcGk6IHN0cmluZztcbiAgcHJpdmF0ZSB2aWV3ZXI6IE9wZW5TZWFkcmFnb24uVmlld2VyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgb3ZlcmxheTogSVJlZ2lvbk92ZXJsYXkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzY2FsZUJhcjogT3NkU2NhbGVCYXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIFwiSW1hZ2UgcmVsb2FkaW5n4oCmXCIgd2hpbGUgdGhlIHZpZXcgZmV0Y2hlcyBpdHMgdGlsZXMuICovXG4gIHByaXZhdGUgdGlsZUxvYWRpbmc6IE9zZFRpbGVMb2FkaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZGVzY3JpcHRvcjogVGlsZURlc2NyaXB0b3IgfCBudWxsID0gbnVsbDtcbiAgLyoqIEJhc2U2NCBSYXdGaWxlSW5mbyArIGN1cnJlbnQgei1zbGljZSwga2VwdCBzbyBzZXRaSW5kZXggY2FuIHJlYnVpbGQgdGhlXG4gICAqICB0aWxlIHNvdXJjZSBhbmQgc3dhcCBzbGljZXMgbGl2ZSAoc3RhY2sgbmF2aWdhdGlvbikuICovXG4gIHByaXZhdGUgaW5mb0I2NCA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRaID0gMDtcbiAgcHJpdmF0ZSBjb29yZFRyYW5zZm9ybTogT3NkQ29vcmRpbmF0ZVRyYW5zZm9ybSB8IG51bGwgPSBudWxsO1xuICAvKiogV2hhdCB0aGlzIGJhY2tlbmQncyBjYW52YXMgdG9vbHMgcmVhZCBhbmQgd3JpdGUgKG9uZSBob3N0IGZvciBldmVyeSB0b29sKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0b29sSG9zdDogQ2FudmFzVG9vbEhvc3Q7XG4gIC8qKiBUaGlzIGJhY2tlbmQncyBvd24gd2FuZCwgYnJ1c2gsIGVyYXNlciwgem9vbS10by1ib3ggYW5kIFNBTSBwb2ludCB0b29scy4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbnZhc1Rvb2xzOiBDYW52YXNUb29sTWFuYWdlcjtcbiAgLyoqIFdhbmQgc2FtcGxpbmcgbWF0cml4IHJlYWQgYmFjayBmcm9tIHRoZSByZW5kZXJlZCB2aWV3cG9ydDsgY2FjaGVkIHVudGlsXG4gICAqICB0aGUgdmlld3BvcnQgY2hhbmdlcyAoc2VlIHJlYWRiYWNrVmlld3BvcnQpLiAqL1xuICBwcml2YXRlIHZpZXdwb3J0UGl4ZWxzOiBDYWNoZWRJbWFnZURhdGEgfCBudWxsID0gbnVsbDtcbiAgLyoqIFRoZSBET00gaWQgb2YgdGhlIGVsZW1lbnQgT1NEIGlzIG1vdW50ZWQgaW4gKHNoYXJlZCB3aXRoIFBsb3RseSk7IHRoZVxuICAgKiAgb24tY2FudmFzIHRvb2xzIGF0dGFjaCB0aGVpciBvdmVybGF5cyBoZXJlLiAqL1xuICBwcml2YXRlIHBsb3REaXYgPSAnJztcbiAgLyoqIEN1cnJlbnQgZmlsZSBuYW1lLCB0YWdnZWQgb250byB3YW5kLWNyZWF0ZWQgc2hhcGVzLiAqL1xuICBwcml2YXRlIGN1cnJlbnRGaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKiogT25seSBncmF5c2NhbGUgaW1hZ2VzIGdldCBhIGNvbG9ybWFwIChSR0IgdGlsZXMgcGFzcyB0aHJvdWdoIHVudG91Y2hlZCkuICovXG4gIHByaXZhdGUgaXNHcmF5c2NhbGVJbWFnZSA9IGZhbHNlO1xuICAvKiogVHJ1ZSBmb3IgbXVsdGljaGFubmVsIGZsdW9yZXNjZW5jZSBkcmF3biBwZXIgY2hhbm5lbDogb25lIHNpbmdsZS1iYW5kXG4gICAqICBUaWxlZEltYWdlIHBlciBjaGFubmVsLCB0aW50ZWQgYnkgdGhlIHJlY29sb3JlciAoc2VlIHBsYW5UaWxlZE1vdW50KS4gKi9cbiAgcHJpdmF0ZSBpc011bHRpQ2hhbm5lbCA9IGZhbHNlO1xuICAvKiogQ291bnQgb2YgcmVhbCBCaW8tRm9ybWF0cyByZXNvbHV0aW9uIGxldmVscyAocGVyLWNoYW5uZWwgdGlsZXMgZXhpc3Qgb25seVxuICAgKiAgaGVyZSkuIEZvciBtdWx0aWNoYW5uZWwgaW1hZ2VzIHRoZSB0aWxlIHNvdXJjZSBpcyBidWlsdCBmcm9tIHRoZXNlIGFsb25lIHNvXG4gICAqICBldmVyeSBkaXNwbGF5ZWQgdGlsZSBzdXBwb3J0cyBhIHBlci1jaGFubmVsIGZldGNoLiAqL1xuICBwcml2YXRlIHJlYWxMZXZlbHMgPSAwO1xuICAvKiogQmVhcmVyIHRva2VuIGZvciBPU0QncyBvd24gdGlsZSBmZXRjaGVzIChIdHRwQ2xpZW50IGNhbGxzIGdldCBpdCB2aWEgdGhlXG4gICAqICBpbnRlcmNlcHRvcjsgT1NEJ3MgbG9hZGVyIGRvZXMgbm90LCBzbyB3ZSBwYXNzIGl0IGFzIGFuIGFqYXggaGVhZGVyKS4gKi9cbiAgcHJpdmF0ZSBhdXRoSGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAvKiogTmF2aWdhdG9yLCBzbW9vdGhpbmcsIGluaXRpYWwgZml0IGFuZCB0aGUgdG9vbGJhciByZXBhaW50IHdvcmthcm91bmRcbiAgICogIChzZWUgT3NkTmF2aWdhdG9yQ2hyb21lKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjaHJvbWUgPSBuZXcgT3NkTmF2aWdhdG9yQ2hyb21lKHtcbiAgICB2aWV3ZXI6ICgpID0+IHRoaXMudmlld2VyLFxuICAgIHBsb3REaXY6ICgpID0+IHRoaXMucGxvdERpdixcbiAgfSk7XG5cbiAgLyoqIE92ZXJhbGwgZGVhZGxpbmUgZm9yIHRoZSAvdGlsZXMvaW5mbyBwb2xsIGxvb3AuIEFuIHVuY2FjaGVkIHdob2xlLXNsaWRlXG4gICAqICBpbWFnZSAoZS5nLiAubmRwaSkgaXMgY2FjaGVkIHNlcnZlci1zaWRlIGZpcnN0IChHQ1MtPlBWQyksIHdoaWNoIGNhbiB0YWtlXG4gICAqICBzZXZlcmFsIG1pbnV0ZXMuIEdlbmVyb3VzIGJlY2F1c2UgZWFjaCBwb2xsIGlzIGNoZWFwOyBvbiBleHBpcnkgdGhlIHJvdXRlclxuICAgKiAgZmFsbHMgYmFjayB0byBQbG90bHkuIChuYXBhcmktanMgd2FpdHMgbGVzcyDigJQgaXQgZmFsbHMgYmFjayB0byBhIHNpbmdsZSB0aWxlLikgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0aWxlc0luZm9UaW1lb3V0TXMgPSA2MDAwMDA7IC8vIDEwIG1pblxuXG4gIC8qKiBXaW5kb3cvZ2FtbWEvY29sb3JtYXAvaW52ZXJ0IGFuZCBwZXItY2hhbm5lbCB0aW50cywgYXBwbGllZCB0byB0aGUgdGlsZXNcbiAgICogIHRocm91Z2ggT1NEJ3MgcGl4ZWwgcGlwZWxpbmUgKHNlZSBPc2RUaWxlUmVjb2xvcmVyIGFuZCB0aGUgUkVBRE1FJ3MgcmVjb2xvclxuICAgKiAgaW52YXJpYW50KS4gSXRzIERpc3BsYXlQaXBlbGluZSBhbHNvIGRyaXZlcyB0aGUgY29tcG9zaXRvciBhbmQgdGhlIGV4cG9ydC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZWNvbG9yOiBPc2RUaWxlUmVjb2xvcmVyID0gbmV3IE9zZFRpbGVSZWNvbG9yZXIoXG4gICAge1xuICAgICAgdmlld2VyOiAoKSA9PiB0aGlzLnZpZXdlcixcbiAgICAgIGlzR3JheXNjYWxlOiAoKSA9PiB0aGlzLmlzR3JheXNjYWxlSW1hZ2UsXG4gICAgICBpc011bHRpQ2hhbm5lbDogKCkgPT4gdGhpcy5pc011bHRpQ2hhbm5lbCxcbiAgICAgIGlzU2ltcGxlTXVsdGljaGFubmVsOiAoKSA9PiB0aGlzLnNpbXBsZS5tdWx0aWNoYW5uZWwsXG4gICAgICBjdXJyZW50WjogKCkgPT4gdGhpcy5jdXJyZW50WixcbiAgICAgIHJldmVhbENoYW5uZWxTbGljZTogKHopID0+IHRoaXMuY2FjaGUucmV2ZWFsQ2hhbm5lbFNsaWNlKHopLFxuICAgICAgaW52YWxpZGF0ZUNoYW5uZWxEaXNwbGF5OiAoeikgPT4gdGhpcy5jYWNoZS5pbnZhbGlkYXRlQ2hhbm5lbERpc3BsYXkoeiksXG4gICAgICByZWNvbXBvc2l0ZTogKHRva2VuKSA9PiB2b2lkIHRoaXMuc2ltcGxlLnJlY29tcG9zaXRlQW5kT3Blbih0b2tlbiksXG4gICAgfSxcbiAgICB0aGlzLnN0b3JlLFxuICApO1xuXG4gIC8qKiBUaGUgc2VydmVybGVzcyAoYHRpbGVkOiBmYWxzZWApIGltYWdlIHNvdXJjZSBhbmQgYWxsIGl0cyBzdGF0ZSAoc2VlXG4gICAqICBPc2RTaW1wbGVTb3VyY2UpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHNpbXBsZTogT3NkU2ltcGxlU291cmNlID0gbmV3IE9zZFNpbXBsZVNvdXJjZShcbiAgICB7XG4gICAgICB2aWV3ZXI6ICgpID0+IHRoaXMudmlld2VyLFxuICAgICAgZGVzY3JpcHRvcjogKCkgPT4gdGhpcy5kZXNjcmlwdG9yLFxuICAgICAgaXNHcmF5c2NhbGU6ICgpID0+IHRoaXMuaXNHcmF5c2NhbGVJbWFnZSxcbiAgICAgIGN1cnJlbnRaOiAoKSA9PiB0aGlzLmN1cnJlbnRaLFxuICAgICAgc2V0Q3VycmVudFo6ICh6KSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFogPSB6O1xuICAgICAgICB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDsgLy8gdGhlIHJlYWRiYWNrIGlzIHNsaWNlLXNwZWNpZmljXG4gICAgICB9LFxuICAgICAgc2FtcGxlcjogKCkgPT4gdGhpcy5zYW1wbGVyLFxuICAgICAgZGlzcGxheTogKCkgPT4gdGhpcy5yZWNvbG9yLmRpc3BsYXksXG4gICAgICBjaGFubmVsU3RhdGVzOiAoKSA9PiB0aGlzLnN0b3JlLmN1cnJlbnRDaGFubmVsU3RhdGVzKCksXG4gICAgICBpc0N1cnJlbnREaXNwbGF5OiAodG9rZW4pID0+IHRoaXMucmVjb2xvci5pc0N1cnJlbnQodG9rZW4pLFxuICAgICAgc2NoZWR1bGVJbnZhbGlkYXRlOiAoKSA9PiB0aGlzLnJlY29sb3Iuc2NoZWR1bGVJbnZhbGlkYXRlKCksXG4gICAgfSxcbiAgICB0aGlzLnNpbXBsZVN0YWNrLFxuICApO1xuXG4gIC8qKiBIaXN0b2dyYW0gKyBhdXRvLXdpbmRvdyBzYW1wbGluZyAoc2VlIEhpc3RvZ3JhbVNhbXBsZXIpLiBDb25zdHJ1Y3RlZCBpblxuICAgKiAgdGhlIGN0b3IgYm9keSBiZWNhdXNlIGl0IGNhcHR1cmVzIHRoZSByZXNvbHZlZCBBUEkgYmFzZSBVUkwuICovXG4gIHByaXZhdGUgc2FtcGxlciE6IEhpc3RvZ3JhbVNhbXBsZXI7XG5cbiAgLyoqIFN0YWNrLXNsaWNlIGNhY2hlICsgYmFja2dyb3VuZCBwcmVsb2FkZXIgKHNlZSBTbGljZUNhY2hlKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogU2xpY2VDYWNoZSA9IG5ldyBTbGljZUNhY2hlKHtcbiAgICB2aWV3ZXI6ICgpID0+IHRoaXMudmlld2VyLFxuICAgIGhhc0ltYWdlOiAoKSA9PiAhISh0aGlzLnZpZXdlciAmJiB0aGlzLmRlc2NyaXB0b3IgJiYgdGhpcy5pbmZvQjY0KSxcbiAgICBzbGljZUNvdW50OiAoKSA9PiB0aGlzLmRlc2NyaXB0b3I/LnogPz8gMSxcbiAgICBjdXJyZW50WjogKCkgPT4gdGhpcy5jdXJyZW50WixcbiAgICBpc011bHRpQ2hhbm5lbDogKCkgPT4gdGhpcy5pc011bHRpQ2hhbm5lbCxcbiAgICBjaGFubmVsQ291bnQ6ICgpID0+IE1hdGgubWF4KDEsIHRoaXMucmVjb2xvci5jaGFubmVsU3RhdGVzLmxlbmd0aCB8fCAodGhpcy5kZXNjcmlwdG9yPy5jaGFubmVscyA/PyAxKSksXG4gICAgY2hhbm5lbFZpc2libGU6IChjOiBudW1iZXIpID0+IHRoaXMucmVjb2xvci5jaGFubmVsU3RhdGVzW2NdPy52aXNpYmxlICE9PSBmYWxzZSxcbiAgICBidWlsZFRpbGVTb3VyY2U6ICh6OiBudW1iZXIsIGNoYW5uZWw/OiBudW1iZXIpID0+XG4gICAgICB0aGlzLmJ1aWxkVGlsZVNvdXJjZSh0aGlzLmRlc2NyaXB0b3IhLCB0aGlzLmluZm9CNjQsIHosIGNoYW5uZWwpLFxuICAgIG9uQ29tcG9zaXRlU2xpY2VBZGRlZDogKHo6IG51bWJlcikgPT4gdGhpcy5zYW1wbGVyLmNvbXB1dGVJbWFnZVdpbmRvdyh0aGlzLmRlc2NyaXB0b3IhLCB0aGlzLmluZm9CNjQsIHopLFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdChUSUxFX0FDQ0VTU19QT1JUKSBwcml2YXRlIHRpbGVzOiBUaWxlQWNjZXNzUG9ydCxcbiAgICB3YW5kU2VydmljZTogV2FuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW1Ub29sOiBTYW1Ub29sU2VydmljZSxcbiAgICBwcml2YXRlIHNhbVBvaW50VG9vbDogU2FtUG9pbnRUb29sU2VydmljZSxcbiAgICBwcml2YXRlIGNlbGxTZWdtZW50VG9vbDogQ2VsbFNlZ21lbnRUb29sU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KENFTExfU0VHTUVOVEVSKSBwcml2YXRlIGNlbGxTZWdtZW50ZXI6IElDZWxsU2VnbWVudGVyIHwgbnVsbCxcbiAgICBzdG9yZTogVmlzdWFsaXplclN0b3JlLFxuICAgIHJlZ2lvblN0b3JlOiBSZWdpb25TdG9yZSxcbiAgICBwcml2YXRlIHNpbXBsZVN0YWNrOiBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UsXG4gICAgQEluamVjdChWSVpfQ09ORklHKSBjb25maWc6IFZpekNvbmZpZyxcbiAgKSB7XG4gICAgc3VwZXIocmVnaW9uU3RvcmUsIHN0b3JlKTtcbiAgICAvLyBUaGUgY2FudmFzIHRvb2xzIHJ1biBvdmVyIE9TRCB0aHJvdWdoIHRoZSBzaGFyZWQgY29vcmRpbmF0ZSB0cmFuc2Zvcm0gYW5kIGFcbiAgICAvLyB2aWV3cG9ydCByZWFkYmFjaywgYW5kIHJlYWQvd3JpdGUgdGhlIHNoYXJlZCBSZWdpb25TdG9yZS4gVGhpcyBiYWNrZW5kIG93bnNcbiAgICAvLyBpdHMgb3duIHRvb2wgaW5zdGFuY2VzIChSVC0yMSk7IHRoZSBob3N0IHJlYWRzIGxpdmUgc3RhdGUsIHNvIGl0IGlzIGJ1aWx0IG9uY2UuXG4gICAgdGhpcy50b29sSG9zdCA9IHtcbiAgICAgIGdldFJlZ2lvbnM6ICgpID0+IHRoaXMucmVnaW9uU3RvcmUuZ2V0UmVnaW9ucygpLFxuICAgICAgc2V0UmVnaW9uczogKHJlZ2lvbnMpID0+IHRoaXMucmVnaW9uU3RvcmUuc2V0UmVnaW9ucyhyZWdpb25zKSxcbiAgICAgIGdldENhY2hlZEltYWdlRGF0YTogKCkgPT4gdGhpcy5yZWFkYmFja1ZpZXdwb3J0KCksXG4gICAgICBnZXRBY3RpdmVGcmFtZUluZGV4OiAoKSA9PiB0aGlzLmN1cnJlbnRaLFxuICAgICAgZ2V0T3ZlcmxheUNvbnRhaW5lcjogKCkgPT4gdGhpcy5nZXRPdmVybGF5Q29udGFpbmVyKCksXG4gICAgICBnZXRDb29yZGluYXRlVHJhbnNmb3JtOiAoKSA9PiB0aGlzLmNvb3JkVHJhbnNmb3JtIGFzIElDb29yZGluYXRlVHJhbnNmb3JtLFxuICAgICAgZ2V0RmlsZU5hbWU6ICgpID0+IHRoaXMuY3VycmVudEZpbGVOYW1lLFxuICAgICAgZ2V0U2hhcGVDb2xvcjogKCkgPT4gdGhpcy5yZWdpb25TdG9yZS5nZXRTaGFwZUNvbG9yKCksXG4gICAgICAvLyBab29tLXRvLWJveDogb3ZlcmxheSBwaXhlbHMgLT4gaW1hZ2UgY29vcmRzLCBhbmQgZml0IHRoZSB2aWV3cG9ydCB0byB0aGUgYm94LlxuICAgICAgcGl4ZWxUb0RhdGE6IChweCwgcHkpID0+IGVsZW1lbnRUb0ltYWdlKHRoaXMudmlld2VyISwgcHgsIHB5KSxcbiAgICAgIGFwcGx5Wm9vbVRvQm94OiAoY29vcmRzKSA9PiB0aGlzLnZpZXdwb3J0LmFwcGx5Wm9vbVRvQm94KGNvb3JkcyksXG4gICAgfTtcbiAgICB0aGlzLmNhbnZhc1Rvb2xzID0gY3JlYXRlQ2FudmFzVG9vbE1hbmFnZXIodGhpcy50b29sSG9zdCwge1xuICAgICAgd2FuZFNlcnZpY2UsXG4gICAgICByZWdpb25TdG9yZSxcbiAgICAgIHNhbVBvaW50OiBzYW1Qb2ludFRvb2wsXG4gICAgfSk7XG4gICAgdGhpcy5hcGkgPSBjb25maWcuc2xpZGVDcm9wU2VydmVyO1xuICAgIHRoaXMuc2FtcGxlciA9IG5ldyBIaXN0b2dyYW1TYW1wbGVyKHRoaXMuaHR0cCwgdGhpcy5hcGksIHtcbiAgICAgIHJlYWxMZXZlbHM6ICgpID0+IHRoaXMucmVhbExldmVscyxcbiAgICAgIGNoYW5uZWxDb3VudDogKGQpID0+IHRoaXMucmVjb2xvci5jaGFubmVsU3RhdGVzLmxlbmd0aCB8fCAoZC5jaGFubmVscyA/PyAxKSxcbiAgICAgIGlzR3JheXNjYWxlOiAoKSA9PiB0aGlzLmlzR3JheXNjYWxlSW1hZ2UsXG4gICAgICAvLyBOdWRnZSB0aGUgY2hhbm5lbC1zdGF0ZXMgc3RyZWFtIHNvIHRoZSBwYW5lIHJlLXJlYWRzIGdldEhpc3RvZ3JhbSBub3csXG4gICAgICAvLyBpbiBjYXNlIGl0cyBib3VuZGVkIHJldHJ5IHdpbmRvdyBhbHJlYWR5IGxhcHNlZC5cbiAgICAgIG9uQ2hhbm5lbEhpc3RvZ3JhbXNTYW1wbGVkOiAoKSA9PiB0aGlzLnN0b3JlLnNldENoYW5uZWxTdGF0ZXModGhpcy5zdG9yZS5jdXJyZW50Q2hhbm5lbFN0YXRlcygpKSxcbiAgICAgIC8vIEJhY2tncm91bmQtcHJlbG9hZGVkIHNsaWNlcyBhcmUgc2FtcGxlZCB0b28gKGhpc3RvZ3JhbXMgcGVyIHNsaWNlKSwgYnV0XG4gICAgICAvLyBvbmx5IHRoZSBkaXNwbGF5ZWQgc2xpY2UncyB3aW5kb3cgbWF5IHNlZWQgb3IgcmUtaW52YWxpZGF0ZSB0aGUgZGlzcGxheS5cbiAgICAgIG9uR3JheVdpbmRvd1NhbXBsZWQ6IChtaW4sIG1heCwgeikgPT4ge1xuICAgICAgICBpZiAoeiA9PT0gdGhpcy5jdXJyZW50WikgdGhpcy5yZWNvbG9yLnNlZWRHcmF5V2luZG93KG1pbiwgbWF4KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yZWNvbG9yLmVuc3VyZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBUaGUgdmlld3BvcnQgYXMgdGhlIGxpYnJhcnkgc2VlcyBpdDogdmlzaWJsZSByZWN0cywgdGhlIHBsb3QtbW9kZVxuICAgKiAgdmlld3BvcnQsIHpvb20vZml0IChzZWUgT3NkVmlld3BvcnRBZGFwdGVyKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3cG9ydCA9IG5ldyBPc2RWaWV3cG9ydEFkYXB0ZXIoe1xuICAgIHZpZXdlcjogKCkgPT4gdGhpcy52aWV3ZXIsXG4gICAgZGVzY3JpcHRvcjogKCkgPT4gdGhpcy5kZXNjcmlwdG9yLFxuICAgIGNvb3JkVHJhbnNmb3JtOiAoKSA9PiB0aGlzLmNvb3JkVHJhbnNmb3JtLFxuICAgIG92ZXJsYXlDb250YWluZXI6ICgpID0+IHRoaXMuZ2V0T3ZlcmxheUNvbnRhaW5lcigpLFxuICB9KTtcbiAgLy8gUmVnaW9uIHN0YXRlIChyZWdpb25zLCBzZWxlY3Rpb24sIHRoZSB1cGRhdGUgZXZlbnQpIGxpdmVzIGluIHRoZSBzaGFyZWRcbiAgLy8gUmVnaW9uU3RvcmU7IGltYWdlIG1ldGFkYXRhIGFuZCBjbGFzc2lmaWNhdGlvbiBjb2xvdXJzIGluIHRoZSBzaGFyZWRcbiAgLy8gVmlzdWFsaXplclN0b3JlIOKAlCB0aGUgaW5oZXJpdGVkIElSZWdpb25TdG9yZS9kaXNwbGF5IG1ldGhvZHMgZGVsZWdhdGUgdGhlcmUuXG5cbiAgLy8g4pSA4pSAIElEYXRhUmVuZGVyZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSB0aWxlLXNvdXJjZSBkZXNjcmlwdG9yIGZvciB0aGUgc2VsZWN0ZWQgZmlsZS4gVGhlIGBpbmZvYCBwYXJhbSBpc1xuICAgKiB0aGUgYmFzZTY0IFJhd0ZpbGVJbmZvIHRoZSByZXN0IG9mIHRoZSBBUEkgdXNlczsgdGhlIEdFVCBnb2VzIHRocm91Z2ggdGhlXG4gICAqIGF1dGggaW50ZXJjZXB0b3IgKEJlYXJlcikuIFdlIGFsc28gZ3JhYiBhIHRva2VuIGhlcmUgZm9yIE9TRCdzIG93biB0aWxlXG4gICAqIGZldGNoZXMgKGl0cyBsb2FkZXIgYnlwYXNzZXMgSHR0cENsaWVudCkuXG4gICAqXG4gICAqIGBzaWduYWxgICh0aGUgaG9zdCdzIHJlbmRlciBzdXBlcnNlc3Npb24pIGNhbmNlbHMgdGhlIGAvdGlsZXMvaW5mb2AgcG9sbCBhbmRcbiAgICogdGhlIHNpbXBsZS1pbWFnZSBmZXRjaGVzOiB0aGUgbG9hZCB0aGVuIHJlamVjdHMgd2l0aCBhbiBgQWJvcnRFcnJvcmAuXG4gICAqL1xuICBhc3luYyBsb2FkKGltYWdlSW5mbzogSUltYWdlSW5mbywgekluZGV4OiBudW1iZXIsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxPc2RMb2FkZWQ+IHtcbiAgICB0aHJvd0lmQWJvcnRlZChzaWduYWwpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gaW1hZ2VJbmZvPy5maWxlTmFtZTtcbiAgICAvLyBBIGRpZmZlcmVudCBpbWFnZSB3YXMgc2VsZWN0ZWQg4oCUIHN0b3AgdGhlIHByZXZpb3VzIHN0YWNrJ3MgYmFja2dyb3VuZFxuICAgIC8vIGxvYWRpbmcgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gbGV0dGluZyBpdCBmaW5pc2ggYmVoaW5kIHRoZSBuZXcgaW1hZ2UuXG4gICAgaWYgKGZpbGVuYW1lICYmIHRoaXMuY3VycmVudEZpbGVOYW1lICYmIGZpbGVuYW1lICE9PSB0aGlzLmN1cnJlbnRGaWxlTmFtZSkge1xuICAgICAgdGhpcy5jYWNoZS5jYW5jZWxCYWNrZ3JvdW5kTG9hZCgpO1xuICAgICAgdGhpcy5zaW1wbGUucmV2b2tlVXJscygpO1xuICAgIH1cbiAgICB0aGlzLnNpbXBsZVN0YWNrLm5vdGVBY3RpdmVGaWxlKGZpbGVuYW1lKTtcbiAgICAvLyBTaW1wbGUgKGluLW1lbW9yeSAvIG5vbi10aWxlZCkgaW1hZ2U6IHNraXAgdGhlIHRpbGUgc2VydmVyIGVudGlyZWx5IOKAlCBub1xuICAgIC8vIGdldFNlbGVjdGVkSW5mb0I2NCwgbm8gL3RpbGVzL2luZm8gcG9sbC4gYHVybHNbekluZGV4XWAgaXMgYSBjb21wbGV0ZSBpbWFnZVxuICAgIC8vIE9TRCBvcGVucyB2aWEgaXRzIHNpbmdsZS1pbWFnZSBzb3VyY2UgKHNlZSBwbG90KCkpLlxuICAgIGlmICh0aGlzLnNpbXBsZVN0YWNrLmlzU2ltcGxlKGltYWdlSW5mbykpIHtcbiAgICAgIHRoaXMuYXV0aEhlYWRlcnMgPSB7fTtcbiAgICAgIHJldHVybiB0aGlzLnNpbXBsZS5sb2FkKGltYWdlSW5mbywgekluZGV4LCBzaWduYWwpO1xuICAgIH1cbiAgICBjb25zdCBpbmZvQjY0ID0gdGhpcy50aWxlcy5nZXRTZWxlY3RlZEluZm9CNjQoKTtcbiAgICBpZiAoIWluZm9CNjQpIHJldHVybiB7IGRlc2NyaXB0b3I6IG51bGwsIGluZm9CNjQ6ICcnLCB6OiB6SW5kZXggfHwgMCwgZmlsZW5hbWUgfTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmF1dGhIZWFkZXJzID0gYXdhaXQgdGhpcy50aWxlcy5nZXRBdXRoSGVhZGVycygpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5hdXRoSGVhZGVycyA9IHt9OyAvLyBmYWxsIGJhY2sgdG8gY29va2llIGF1dGggKGFqYXhXaXRoQ3JlZGVudGlhbHMpXG4gICAgfVxuICAgIHRocm93SWZBYm9ydGVkKHNpZ25hbCk7XG4gICAgLy8gUG9sbCAvdGlsZXMvaW5mbyAodGhlIHNoYXJlZCBqaXQtc2VydmljZSBjbGllbnQpOiB0aGUgYmFja2VuZCByZXR1cm5zIDIwMlxuICAgIC8vIHdoaWxlIHRoZSBzb3VyY2UgZmlsZSBpcyBzdGlsbCBiZWluZyBjYWNoZWQgKEdDUy0+UFZDKSDigJQgaXQga2lja3MgdGhlXG4gICAgLy8gZG93bmxvYWQgb2ZmIGluIHRoZSBiYWNrZ3JvdW5kLCBzbyBlYWNoIHJlcXVlc3QgaXMgc2hvcnQgKG5vIGxvbmctaGVsZFxuICAgIC8vIGNvbm5lY3Rpb24gdG8gdHJpcCBpbmdyZXNzL3Byb3h5IG9yIGNsaWVudCB0aW1lb3V0cyksIGFuZCAyMDAgd2l0aCB0aGVcbiAgICAvLyBkZXNjcmlwdG9yIG9uY2UgaXQncyByZWFkeS4gVGhlIGNhY2hlLXByb2dyZXNzIG92ZXJsYXkgc2hvd3MgcHJvZ3Jlc3NcbiAgICAvLyBkdXJpbmcgdGhlIHdhaXQuIFRyYW5zcG9ydCBmYWlsdXJlcyAoYSBwcm94eSBoaWNjdXAsIGEgc2xvdyBtZXRhZGF0YSByZWFkXG4gICAgLy8gdGltaW5nIGEgcmVxdWVzdCBvdXQpIGFyZSByZXRyaWVkIHVudGlsIHRoZSBkZWFkbGluZTsgYSBub24tMjAyIHN0YXR1c1xuICAgIC8vIG1lYW5zIHRoaXMgc2VydmVyIHdvbid0IGRlc2NyaWJlIHRoZSBmaWxlLlxuICAgIC8vXG4gICAgLy8gTm8gZGVzY3JpcHRvciAoZGVhZGxpbmUsIG9yIGEgc3RhdHVzIG90aGVyIHRoYW4gMjAyKSBpcyBhIGxvYWQgZmFpbHVyZSwgc29cbiAgICAvLyB0aGUgcm91dGVyIGZhbGxzIGJhY2sgdG8gUGxvdGx5IGZvciB0aGlzIGltYWdlLCBhcyBiZWZvcmUuIE5vdCBjb21taXR0ZWQgdG9cbiAgICAvLyBgdGhpcy5kZXNjcmlwdG9yYCBoZXJlOiB0aGUgcHJldmlvdXMgaW1hZ2Ugc3RheXMgbW91bnRlZCAoYW5kIGtlZXBzIHVzaW5nXG4gICAgLy8gaXRzIG93biBkZXNjcmlwdG9yKSB1bnRpbCBwbG90KCkuXG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGF3YWl0IHBvbGxEZXNjcmlwdG9yKGh0dHBGZXRjaEpzb24odGhpcy5odHRwKSwgdGlsZXNJbmZvVXJsKHRoaXMuYXBpLCBpbmZvQjY0KSwge1xuICAgICAgZGVhZGxpbmVNczogdGhpcy50aWxlc0luZm9UaW1lb3V0TXMsXG4gICAgICBpbnRlcnZhbE1zOiBPU0RfVElMRVNfSU5GT19QT0xMX0lOVEVSVkFMX01TLFxuICAgICAgc2lnbmFsLFxuICAgICAgdGFnOiAnW09TRF0nLFxuICAgIH0pO1xuICAgIGlmICghZGVzY3JpcHRvcikgdGhyb3cgbmV3IEVycm9yKCd0aWxlcy9pbmZvIGdhdmUgbm8gZGVzY3JpcHRvciDigJQgZmlsZSBzdGlsbCBjYWNoaW5nIG9yIG5vdCB0aWxlYWJsZScpO1xuICAgIHJldHVybiB7IGRlc2NyaXB0b3IsIGluZm9CNjQsIHo6IHpJbmRleCB8fCAwLCBmaWxlbmFtZSB9O1xuICB9XG5cbiAgLyoqIE1vdW50IHRoZSB2aWV3ZXIgd2l0aCBhIGN1c3RvbSB0aWxlIHNvdXJjZSBwb2ludGluZyBhdCBgR0VUIC90aWxlYC4gKi9cbiAgcGxvdChcbiAgICBwbG90RGl2OiBzdHJpbmcsXG4gICAgaW1hZ2VMb2FkZWQ6IGFueSxcbiAgICBpbWFnZUluZm86IElJbWFnZUluZm8sXG4gICAgX3NjcmVlbkhlaWdodDogbnVtYmVyLFxuICAgIF9wbG90VHlwZTogUGxvdFR5cGUsXG4gICAgaW5QbGFjZT86IGJvb2xlYW4sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGltYWdlTG9hZGVkIGFzIE9zZExvYWRlZDtcbiAgICBjb25zdCBkID0gbG9hZGVkPy5kZXNjcmlwdG9yO1xuICAgIGlmICghZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgLy8gUmUtZXN0YWJsaXNoIHRoZSBjb2xvcm1hcCBzdWJzY3JpcHRpb24gaWYgYSBwcmlvciBjb21wb25lbnQgdGVhcmRvd25cbiAgICAvLyAodW5zdWJzY3JpYmUoKSkgdG9yZSBpdCBkb3duIOKAlCB0aGlzIHNlcnZpY2UgaXMgYSByb290IHNpbmdsZXRvbiwgc28gdGhlXG4gICAgLy8gY29uc3RydWN0b3Igd29uJ3QgcnVuIGFnYWluIHRvIHJlY3JlYXRlIGl0LlxuICAgIHRoaXMucmVjb2xvci5lbnN1cmVTdWJzY3JpcHRpb24oKTtcbiAgICAvLyBBIG5ldyBpbWFnZTogYSBzdHJva2Ugb3IgU0FNIHByb21wdCBpbiBwcm9ncmVzcyBiZWxvbmdlZCB0byB0aGUgb2xkIG9uZS5cbiAgICBpZiAoIWluUGxhY2UpIHRoaXMuY2FudmFzVG9vbHMucmVzZXRBbGwoKTtcbiAgICAvLyBPU0QgdGlsZXMgbmF0aXZlbHksIHNvIHRoZSBpbi1wbGFjZSAobGFyZ2UpIHBhc3MgaXMgbm9ybWFsbHkgYSBuby1vcFxuICAgIC8vIG9uY2UgbW91bnRlZCDigJQgdGhlIHRpbGUgcHlyYW1pZCBJUyB0aGUgZnVsbCByZXNvbHV0aW9uIHJlZ2FyZGxlc3Mgb2ZcbiAgICAvLyB3aGljaCBJbWFnZUluZm8gdGllciByZXF1ZXN0ZWQgaXQuIFNpbXBsZSBtb2RlIGhhcyBubyBweXJhbWlkIHRvIGZhbGxcbiAgICAvLyBiYWNrIG9uOiBpdCBkaXNwbGF5cyBsaXRlcmFsbHkgd2hhdGV2ZXIgVVJMIHdhcyBsYXN0IG9wZW5lZCwgc29cbiAgICAvLyB3aXRob3V0IHRoaXMgc3dhcCB0aGUgc21hbGwgdGllcidzIDEyOHB4IHBsYWNlaG9sZGVyIHdvdWxkIHN0YXkgb25cbiAgICAvLyBzY3JlZW4gZm9yZXZlciAocGl4ZWxhdGVkLCBuZXZlciBcInNoYXJwZW5pbmdcIiBsaWtlIHRoZSB0aWxlZCBwYXRoKS5cbiAgICBpZiAoaW5QbGFjZSAmJiB0aGlzLnZpZXdlcikge1xuICAgICAgdGhpcy5zaW1wbGUucmVmcmVzaEluUGxhY2UobG9hZGVkLCBpbWFnZUluZm8pO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5wbG90RGl2ID0gcGxvdERpdjtcbiAgICB0aGlzLmNocm9tZS5vbk1vdW50KCk7IC8vIHRoZSB0b29sYmFyIGlzIHJlLWxvY2F0ZWQgZm9yIHRoaXMgbW91bnRcbiAgICB0aGlzLmN1cnJlbnRGaWxlTmFtZSA9IGltYWdlSW5mbz8uZmlsZU5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdG9yID0gZDtcbiAgICB0aGlzLmluZm9CNjQgPSBsb2FkZWQuaW5mb0I2NDtcbiAgICB0aGlzLmN1cnJlbnRaID0gbG9hZGVkLno7XG4gICAgdGhpcy5zaW1wbGUuY29tbWl0KGxvYWRlZCwgaW1hZ2VJbmZvKTtcbiAgICAvLyBUaGUgZGVzY3JpcHRvcidzIHBoeXNpY2FsIHBpeGVsIHNpemUgKHNlcnZlciBCaW8tRm9ybWF0cyBgL3RpbGVzL2luZm9gKSBpc1xuICAgIC8vIGF1dGhvcml0YXRpdmUg4oCUIHB1c2ggaXQgaW50byB0aGUgc2hhcmVkIG1ldGEgc28gdGhlIFJlZ2lvbiBFZGl0b3IgcmVwb3J0c1xuICAgIC8vIGFyZWFzIGluIMK1bcKyL21twrIsIG1hdGNoaW5nIHRoZSBzY2FsZSBiYXIgYnVpbHQgZnJvbSBgZC5tcHBYYCBiZWxvdy5cbiAgICB0aGlzLnN0b3JlLnNldFBoeXNpY2FsUGl4ZWxTaXplKGQubXBwWCwgZC5tcHBZKTtcbiAgICAvLyBVc2UgdGhlIFNBTUUgZ3JheXNjYWxlIGZsYWcgdGhlIGNvbG9ybWFwIGRyb3Bkb3duIC8gUGxvdGx5IHVzZVxuICAgIC8vIChpbWFnZUluZm8uaXNHcmF5c2NhbGUg4oaQIHJnYkNoYW5uZWxzID09PSAxKS4gVGhlIGRlc2NyaXB0b3IncyBgY2hhbm5lbHNgXG4gICAgLy8gKGNoYW5uZWxDb3VudCkgZGl2ZXJnZXMgZnJvbSByZ2JDaGFubmVscyBmb3Igc3RhY2tzLCB3aGljaCBsZWZ0IGdyYXlzY2FsZVxuICAgIC8vIHN0YWNrcyB1bi1yZWNvbG9yZWQgZXZlbiB0aG91Z2ggdGhlIGNvbG9ybWFwIHNlbGVjdG9yIHdhcyBzaG93bi5cbiAgICB0aGlzLmlzR3JheXNjYWxlSW1hZ2UgPSAhIWltYWdlSW5mbz8uaXNHcmF5c2NhbGU7XG4gICAgLy8gU2ltcGxlIChub24tdGlsZWQsIGluLW1lbW9yeSkgaW1hZ2U6IG5vIHB5cmFtaWQsIG5vIHBlci1jaGFubmVsIHRpbGVzLCBhbmRcbiAgICAvLyBubyBzZXJ2ZXItc2lkZSBpbnRlbnNpdHkgc2FtcGxpbmcg4oCUIE9TRCdzIHNpbmdsZS1pbWFnZSBzb3VyY2UgZGVjb2Rlc1xuICAgIC8vIHVybHNbel0gZGlyZWN0bHkuIFNraXAgdGhlIHdob2xlIHRpbGVkLXNldHVwIHBhdGggYmVsb3cuXG4gICAgY29uc3Qgc2ltcGxlID0gISFsb2FkZWQuc2ltcGxlO1xuICAgIGlmIChzaW1wbGUpIHtcbiAgICAgIHRoaXMucmVhbExldmVscyA9IDE7XG4gICAgICB0aGlzLmlzTXVsdGlDaGFubmVsID0gZmFsc2U7XG4gICAgICB0aGlzLmNhY2hlLmNsZWFyQ2hhbm5lbEdyb3VwcygpO1xuICAgICAgdGhpcy5kZXN0cm95Vmlld2VyKCk7XG4gICAgICAvLyBUYWtlIG92ZXIgdGhlIGNvbXBvc2l0ZSBVUkwgYW5kIGJpbiB0aGUgaGlzdG9ncmFtcyDigJQgQUZURVIgZGVzdHJveVZpZXdlclxuICAgICAgLy8gKGl0cyBsYXN0IGFjdCBpcyBzYW1wbGVyLmNsZWFyKCkpLlxuICAgICAgdGhpcy5zaW1wbGUubW91bnQobG9hZGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQSB0aWxlZCBpbWFnZSBpcyBnb2luZyBvbiBzY3JlZW46IG5vIHNpbXBsZS1tb2RlIHN0YXRlIG1heSBzdXJ2aXZlIGl0XG4gICAgICAvLyAobG9hZCgpIG5vcm1hbGx5IGNsZWFyZWQgaXQgYWxyZWFkeTsgcGxvdCgpIGlzIHdoYXQgbW91bnRzIHRoZSBpbWFnZSkuXG4gICAgICB0aGlzLnNpbXBsZS5yZXNldCgpO1xuICAgICAgY29uc3QgcGxhbiA9IHBsYW5UaWxlZE1vdW50KGQpO1xuICAgICAgdGhpcy5yZWFsTGV2ZWxzID0gcGxhbi5yZWFsTGV2ZWxzO1xuICAgICAgdGhpcy5pc011bHRpQ2hhbm5lbCA9IHBsYW4ubXVsdGlDaGFubmVsO1xuICAgICAgdGhpcy5jYWNoZS5jbGVhckNoYW5uZWxHcm91cHMoKTtcbiAgICAgIHRoaXMuZGVzdHJveVZpZXdlcigpO1xuICAgICAgLy8gQXV0by1yYW5nZSBncmF5c2NhbGUgdGlsZXMgdG8gdGhlIGltYWdlJ3MgYWN0dWFsIGludGVuc2l0eSBzcGFuIChsaWtlIHRoZVxuICAgICAgLy8gaGVhdG1hcCksIHNhbXBsaW5nIHRoZSBjb2Fyc2VzdCB0aWxlIGxldmVsIHNvIHRoZSB3aW5kb3cgbWF0Y2hlcyB0aGUgcmF3XG4gICAgICAvLyB0aWxlIHZhbHVlcy4gRmlyZS1hbmQtZm9yZ2V0OiBpdCByZS1pbnZhbGlkYXRlcyBvbmNlIHRoZSB3aW5kb3cgaXMga25vd247XG4gICAgICAvLyB0aWxlcyBwYWludCB1bndpbmRvd2VkIHVudGlsIHRoZW4uIChNdWx0aWNoYW5uZWwgd2luZG93cyBhcmUgcGVyLWNoYW5uZWwsXG4gICAgICAvLyBkZWZhdWx0aW5nIHRvIGZ1bGwgcmFuZ2U7IHRoZSB1c2VyIGF1dG8vZWRpdHMgZWFjaCBjaGFubmVsLikgU3RhcnRlZFxuICAgICAgLy8gQUZURVIgZGVzdHJveVZpZXdlcjogaXRzIHNhbXBsZXIuY2xlYXIoKSBzdXBlcnNlZGVzIGV2ZXJ5IHJ1biBpbiBmbGlnaHQuXG4gICAgICBpZiAodGhpcy5pc011bHRpQ2hhbm5lbCkge1xuICAgICAgICB2b2lkIHRoaXMuc2FtcGxlci5jb21wdXRlTXVsdGlDaGFubmVsSGlzdG9ncmFtcyhkLCBsb2FkZWQuaW5mb0I2NCwgbG9hZGVkLnopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm9pZCB0aGlzLnNhbXBsZXIuY29tcHV0ZUltYWdlV2luZG93KGQsIGxvYWRlZC5pbmZvQjY0LCBsb2FkZWQueik7XG4gICAgICB9XG4gICAgICAvLyBTaXplIHRoZSBzbGljZSBjYWNoZSBmb3IgdGhpcyBpbWFnZTogTFJVIGNhcCB0byBob2xkIHRoZSB3aG9sZSBzdGFja1xuICAgICAgLy8gKGNhcHBlZCkgYW5kIHNraXAgYmFja2dyb3VuZCBwcmVsb2FkaW5nIGZvciBzdGFja3MgdG9vIGxhcmdlIHRvIHByZWxvYWRcbiAgICAgIC8vICh3b3VsZCBmbG9vZCBmdWxsLXJlcyByZWFkcykuIE5vcm1hbCBzdGFja3Mga2VlcCB0aGUgZmxpY2tlci1mcmVlIHByZS1jYWNoZS5cbiAgICAgIHRoaXMuY2FjaGUuY29uZmlndXJlKGQueiA/PyAxLCBwbGFuLmNvYXJzZVRpbGVzKTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgbW9kZTogT1NEJ3Mgc2luZ2xlLWltYWdlIHNvdXJjZSBkZWNvZGVzIHRoZSBVUkwgKGJsb2I6L2RhdGE6L2h0dHApXG4gICAgLy8gZGlyZWN0bHkg4oCUIG5vIHB5cmFtaWQsIG5vIHNlcnZlci4gVGlsZWQgbW9kZTogdGhlIGN1c3RvbSBzZXJ2ZXItYmFja2VkIHRpbGVcbiAgICAvLyBzb3VyY2UgKG11bHRpY2hhbm5lbCBvcGVucyBvbiBjaGFubmVsIDA7IHRoZSBvcGVuIGhhbmRsZXIgdGhlbiBzd2FwcyBpbiB0aGlzXG4gICAgLy8gc2xpY2UncyBwZXItY2hhbm5lbCBncm91cCBhbmQgdGhlIGJhY2tncm91bmQgbG9hZGVyIHByZS1maWxscyB0aGUgcmVzdCkuXG4gICAgY29uc3QgdGlsZVNvdXJjZSA9IHNpbXBsZVxuICAgICAgPyB7IHR5cGU6ICdpbWFnZScsIHVybDogbG9hZGVkLnVybCB9XG4gICAgICA6IHRoaXMuYnVpbGRUaWxlU291cmNlKGQsIGxvYWRlZC5pbmZvQjY0LCBsb2FkZWQueiwgdGhpcy5pc011bHRpQ2hhbm5lbCA/IDAgOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBidWlsZFZpZXdlck9wdGlvbnMoe1xuICAgICAgaWQ6IHBsb3REaXYsXG4gICAgICBuYXZpZ2F0b3JWaXNpYmxlOiB0aGlzLmNocm9tZS5uYXZpZ2F0b3JWaXNpYmxlLFxuICAgICAgc21vb3RoaW5nOiB0aGlzLmNocm9tZS5zbW9vdGhpbmdFbmFibGVkLFxuICAgICAgYXV0aEhlYWRlcnM6IHRoaXMuYXV0aEhlYWRlcnMsXG4gICAgICBzbGljZUNvdW50OiBkLnogPz8gMSxcbiAgICAgIG1heFNsaWNlczogdGhpcy5jYWNoZS5tYXhTbGljZXMoKSxcbiAgICAgIGNoYW5uZWxJbWFnZXM6IHRoaXMuaXNNdWx0aUNoYW5uZWwgPyAoZC5jaGFubmVscyA/PyAxKSA6IDEsXG4gICAgfSk7XG4gICAgdGhpcy52aWV3ZXIgPSBjcmVhdGVWaWV3ZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wZW5WaWV3ZXIodGhpcy52aWV3ZXIsIHRpbGVTb3VyY2UsICh2KSA9PiB0aGlzLm9uVmlld2VyT3BlbmVkKHYsIGQsIHNpbXBsZSwgcGxvdERpdikpO1xuICB9XG5cbiAgLyoqIFdpcmUgYSBmcmVzaGx5IG9wZW5lZCB2aWV3ZXI6IHRoZSByZWdpb24gb3ZlcmxheSwgY29vcmRpbmF0ZSB0cmFuc2Zvcm0gYW5kXG4gICAqICBzY2FsZSBiYXIsIHRoZSBzbGljZSBjYWNoZSwgdGhlIHJlY29sb3IgcGlwZWxpbmUsIHRoZSB2aWV3cG9ydCBzdHJlYW1zIGFuZFxuICAgKiAgdGhlIGNocm9tZS4gKi9cbiAgcHJpdmF0ZSBvblZpZXdlck9wZW5lZCh2aWV3ZXI6IE9wZW5TZWFkcmFnb24uVmlld2VyLCBkOiBUaWxlRGVzY3JpcHRvciwgc2ltcGxlOiBib29sZWFuLCBwbG90RGl2OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBSZWdpb24gb3ZlcmxheSByZWFkcy93cml0ZXMgdGhlIHNoYXJlZCBSZWdpb25TdG9yZSwgc28gcmVnaW9ucyBzdGF5XG4gICAgLy8gaW4gc3luYyB3aXRoIFBsb3RseSBhbmQgdGhlIFJlZ2lvbiBFZGl0b3IuIFJlY3JlYXRlIGl0IHBlciBvcGVuKCkgc29cbiAgICAvLyBpdCBiaW5kcyB0byB0aGUgZnJlc2hseS1vcGVuZWQgdmlld2VyJ3MgY2FudmFzL01vdXNlVHJhY2tlci5cbiAgICB0aGlzLm92ZXJsYXk/LmRlc3Ryb3koKTtcbiAgICB0aGlzLm92ZXJsYXkgPSBuZXcgT3NkUmVnaW9uT3ZlcmxheSh2aWV3ZXIsIHRoaXMucmVnaW9uU3RvcmUpO1xuICAgIHRoaXMuY29vcmRUcmFuc2Zvcm0gPSBuZXcgT3NkQ29vcmRpbmF0ZVRyYW5zZm9ybSh2aWV3ZXIpO1xuICAgIHRoaXMuc2NhbGVCYXIgPSBuZXcgT3NkU2NhbGVCYXIodmlld2VyLCBkLm1wcFggPz8gMCk7XG4gICAgdGhpcy50aWxlTG9hZGluZz8uZGVzdHJveSgpO1xuICAgIHRoaXMudGlsZUxvYWRpbmcgPSBuZXcgT3NkVGlsZUxvYWRpbmcodmlld2VyIGFzIHVua25vd24gYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBPc2RUaWxlTG9hZGluZz5bMF0pO1xuICAgIGlmIChzaW1wbGUpIHtcbiAgICAgIC8vIEEgc2luZ2xlLCBzZWxmLWNvbnRhaW5lZCBpbWFnZSDigJQgbm8gc2xpY2UgY2FjaGUgdG8gc2VlZC4gSXRzIHotc2NydWIgYW5kXG4gICAgICAvLyByZWNvbXBvc2l0ZSByZS1vcGVuIHRoZSB2aWV3ZXI7IG9uZSBwZXJzaXN0ZW50IGhhbmRsZXIgcmVwb3J0cyBhIGZhaWxlZFxuICAgICAgLy8gcmUtb3BlbiAoYSBvbmNlLWhhbmRsZXIgcGVyIHNjcnViIHdvdWxkIHBpbGUgdXApLlxuICAgICAgdmlld2VyLmFkZEhhbmRsZXIoJ29wZW4tZmFpbGVkJywgKGUpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbT1NEXSBzbGljZSByZS1vcGVuIGZhaWxlZCcsIHRoaXMuY3VycmVudFosIChlIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KT8ubWVzc2FnZSA/PyBlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhY2hlLmFkb3B0T3BlbmVkU2xpY2UodGhpcy5jdXJyZW50Wik7XG4gICAgfVxuICAgIC8vIFRoZSB3YW5kIHNhbXBsZXMgdGhlICpyZW5kZXJlZCB2aWV3cG9ydCosIHNvIGl0cyBwaXhlbCBtYXRyaXggaXMgb25seVxuICAgIC8vIHZhbGlkIGZvciB0aGUgY3VycmVudCB2aWV3IOKAlCBkcm9wIGl0IHdoZW5ldmVyIHRoZSB2aWV3cG9ydCBjaGFuZ2VzLlxuICAgIHZpZXdlci5hZGRIYW5kbGVyKCd2aWV3cG9ydC1jaGFuZ2UnLCAoKSA9PiB7XG4gICAgICB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDtcbiAgICB9KTtcbiAgICAvLyBSZWNvbG9yIGV2ZXJ5IHRpbGUgKG1haW4gdmlld2VyIGFuZCBuYXZpZ2F0b3IpIHRocm91Z2ggdGhlIGRpc3BsYXkgcGlwZWxpbmUuXG4gICAgdGhpcy5yZWNvbG9yLmF0dGFjaCh2aWV3ZXIpO1xuICAgIC8vIFByZWZldGNoIGFkamFjZW50IHotc2xpY2VzIG9uY2UgdGhlIHZpZXcgc2V0dGxlcyAoYW5kIG9uIGVhY2ggc2V0dGxlLFxuICAgIC8vIHNvIGl0IHRyYWNrcyB0aGUgY3VycmVudCB2aWV3cG9ydCBhcyB0aGUgdXNlciBwYW5zL3pvb21zKS4gU2ltcGxlIG1vZGVcbiAgICAvLyBoYXMgYSBzaW5nbGUgZnJhbWUsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBwcmVmZXRjaC5cbiAgICBpZiAoIXNpbXBsZSkgdmlld2VyLmFkZEhhbmRsZXIoJ2FuaW1hdGlvbi1maW5pc2gnLCAoKSA9PiB0aGlzLmNhY2hlLnNjaGVkdWxlUHJlZmV0Y2goKSk7XG4gICAgLy8gVGVsbCBsaXN0ZW5lcnMgKHRoZSBpbnRlbnNpdHkgaW5zZXQpIHRoZSB2aXNpYmxlIGltYWdlIHJlZ2lvbiB3aGVuZXZlclxuICAgIC8vIHRoZSB2aWV3IHNldHRsZXMsIHNvIHRoZXkgY2FuIHJlLXNhbXBsZSBhdCB0aGUgY3VycmVudCB6b29tIHJlc29sdXRpb24uXG4gICAgdmlld2VyLmFkZEhhbmRsZXIoJ2FuaW1hdGlvbi1maW5pc2gnLCAoKSA9PiB0aGlzLnZpZXdwb3J0LmVtaXRWaWV3cG9ydENoYW5nZSgpKTtcbiAgICAvLyBFdmVyeSByZWRyYXcgKHBhbi96b29tIGFuaW1hdGlvbiBmcmFtZXMsIHJlc2l6ZSkg4oCUIGZvciBhIGNvbnRyaWJ1dGVkXG4gICAgLy8gcGxvdCBtb2RlJ3Mgb3ZlcmxheSwgd2hpY2ggaGFzIHRvIG1vdmUgd2l0aCB0aGUgaW1hZ2UsIG5vdCBhZnRlciBpdC5cbiAgICB2aWV3ZXIuYWRkSGFuZGxlcigndXBkYXRlLXZpZXdwb3J0JywgKCkgPT4gdGhpcy52aWV3cG9ydC5zY2hlZHVsZUZyYW1lKCkpO1xuICAgIGlmICghc2ltcGxlKSB0aGlzLmNhY2hlLnNjaGVkdWxlUHJlZmV0Y2goKTtcbiAgICAvLyBUb29sYmFyIG51ZGdlcywgZml0LXRvLXZpZXcgYXMgdGhlIGxheW91dCBzZXR0bGVzLCBuYXZpZ2F0b3Igc2l6aW5nLlxuICAgIHRoaXMuY2hyb21lLmF0dGFjaCh2aWV3ZXIsIHBsb3REaXYpO1xuICB9XG5cbiAgLyoqIFRoZSBgR0VUIC90aWxlYCBzb3VyY2UgZm9yIHNsaWNlIGB6YCAob25lIGNoYW5uZWwncywgd2hlbiBnaXZlbikg4oCUIHNlZVxuICAgKiAge0BsaW5rIGJ1aWxkT3NkVGlsZVNvdXJjZX0uIE11bHRpY2hhbm5lbCBkcmF3cyBvZmYgdGhlIHJlYWwgbGV2ZWxzIG9ubHkuICovXG4gIHByaXZhdGUgYnVpbGRUaWxlU291cmNlKFxuICAgIGQ6IFRpbGVEZXNjcmlwdG9yLFxuICAgIGluZm9CNjQ6IHN0cmluZyxcbiAgICB6OiBudW1iZXIsXG4gICAgY2hhbm5lbD86IG51bWJlcixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiBidWlsZE9zZFRpbGVTb3VyY2UoZCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIGluZm9CNjQsXG4gICAgICB6LFxuICAgICAgY2hhbm5lbCxcbiAgICAgIHJlYWxMZXZlbHNPbmx5OiB0aGlzLmlzTXVsdGlDaGFubmVsID8gdGhpcy5yZWFsTGV2ZWxzIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95Vmlld2VyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2FuY2VsQmFja2dyb3VuZExvYWQoKTtcbiAgICB0aGlzLnZpZXdwb3J0LmNhbmNlbEZyYW1lKCk7XG4gICAgLy8gVGVhciBkb3duIGFuIGFybWVkIHBpeGVsIHRvb2wncyBvdmVybGF5ICh6b29tLXRvLWJveCBzdGF5cyBhcm1lZCwgYXMgYmVmb3JlKS5cbiAgICBpZiAodGhpcy5jYW52YXNUb29scy5hY3RpdmVJZCAhPT0gJ3pvb21Ub0JveCcpIHRoaXMuY2FudmFzVG9vbHMuZGVhY3RpdmF0ZSgpO1xuICAgIGlmICh0aGlzLm92ZXJsYXkpIHtcbiAgICAgIHRoaXMub3ZlcmxheS5kZXN0cm95KCk7XG4gICAgICB0aGlzLm92ZXJsYXkgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2FsZUJhcikge1xuICAgICAgdGhpcy5zY2FsZUJhci5kZXN0cm95KCk7XG4gICAgICB0aGlzLnNjYWxlQmFyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy50aWxlTG9hZGluZz8uZGVzdHJveSgpO1xuICAgIHRoaXMudGlsZUxvYWRpbmcgPSBudWxsO1xuICAgIGlmICh0aGlzLnZpZXdlcikge1xuICAgICAgdGhpcy52aWV3ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy52aWV3ZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmNvb3JkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmNhY2hlLnJlc2V0KCk7XG4gICAgdGhpcy5zYW1wbGVyLmNsZWFyKCk7XG4gIH1cblxuICAvKiogVGhpcyBiYWNrZW5kJ3MgcmVnaW9uIHJlbmRlcmVyICh0aGUgU1ZHIG92ZXJsYXkpLCBvbmNlIGEgcGxvdCBpcyBtb3VudGVkLiAqL1xuICBnZXRSZWdpb25PdmVybGF5KCk6IElSZWdpb25PdmVybGF5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheTtcbiAgfVxuXG4gIC8qKiBPU0QgcmVuZGVycyBvbmx5IHRoZSBpbWFnZSB0eXBlIOKAlCBubyBpc29zdXJmYWNlLCBzbyBubyBjb250cm9scy4gKi9cbiAgZ2V0SXNvc3VyZmFjZUNvbnRyb2xzKCk6IElJc29zdXJmYWNlQ29udHJvbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBPU0QgcmVuZGVycyBvbmx5IHRoZSBpbWFnZSB0eXBlIOKAlCBubyAzRCBzY2VuZXMsIHNvIG5vIGNvbnRyb2xzLiAqL1xuICBnZXRTdXJmYWNlM2RDb250cm9scygpOiBJU3VyZmFjZTNkQ29udHJvbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBPU0QgcmVuZGVycyBvbmx5IHRoZSBpbWFnZSB0eXBlIOKAlCBubyBMSU5FIGludGVuc2l0eSBST0lzLCBzbyBubyBjb250cm9scy4gKi9cbiAgZ2V0SW50ZW5zaXR5Q29udHJvbHMoKTogSUludGVuc2l0eUNvbnRyb2xzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHRvT3ZlcmxheU1vZGUobW9kZTogc3RyaW5nIHwgZmFsc2UpOiBSZWdpb25Ub29sTW9kZSB7XG4gICAgcmV0dXJuIE9WRVJMQVlfTU9ERVMuaGFzKG1vZGUgYXMgUmVnaW9uVG9vbE1vZGUpID8gKG1vZGUgYXMgUmVnaW9uVG9vbE1vZGUpIDogJ25vbmUnO1xuICB9XG5cbiAgcmVsb2FkQW5kUGxvdCgpOiB2b2lkIHtcbiAgICAvKiBob3N0IHJlLWRyaXZlcyBwbG90KCkgdmlhIHRoZSBpbWFnZS1pbmZvIHN0cmVhbSAqL1xuICB9XG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveVZpZXdlcigpO1xuICAgIHRoaXMuc2ltcGxlLnJlc2V0KCk7XG4gIH1cbiAgcmVsYXlvdXQoX3RydWVJbWFnZVNpemU/OiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnQua2VlcFZpZXdBY3Jvc3NSZXNpemUoKTtcbiAgfVxuICByZXNldEF4ZXMoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydC5nb0hvbWUoKTtcbiAgfVxuICBhdXRvc2NhbGUoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydC5nb0hvbWUoKTtcbiAgfVxuICB6b29tSW4oKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydC56b29tQnkoMSk7XG4gIH1cbiAgem9vbU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0Lnpvb21CeSgtMSk7XG4gIH1cbiAgc2V0RHJhZ01vZGUobW9kZTogc3RyaW5nIHwgZmFsc2UpOiB2b2lkIHtcbiAgICAvLyBSZWN0YW5nbGUvcG9seWdvbiBkcmF3aW5nIHJ1biBvbiB0aGUgU1ZHIG92ZXJsYXk7IHdhbmQvZXJhc2VyL3pvb20tYm94XG4gICAgLy8gKGN1c3RvbSBQbG90bHkgb3ZlcmxheXMpIGFyZSByb3V0ZWQgdG8gUGxvdGx5IGJ5IHRoZSByb3V0ZXIgYW5kIGFyZW4ndFxuICAgIC8vIGhhbmRsZWQgaGVyZSB5ZXQuXG4gICAgdGhpcy5vdmVybGF5Py5zZXRNb2RlKHRoaXMudG9PdmVybGF5TW9kZShtb2RlKSk7XG4gIH1cblxuICBzZXRTaG93U3RhY2soX3Nob3dzdGFjazogYm9vbGVhbik6IHZvaWQge1xuICAgIC8qIE9TRCBuYXZpZ2F0ZXMgdGhlIHN0YWNrIHZpYSB0aGUgei1zbGlkZXIgLT4gc2V0WkluZGV4ICovXG4gIH1cblxuICAvKiogU2hvdy9oaWRlIHRoZSBvdmVydmlldyBuYXZpZ2F0b3IgKG5vdywgYW5kIGZvciB0aGUgbmV4dCB2aWV3ZXIpLiAqL1xuICBzZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNocm9tZS5zZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGUpO1xuICB9XG5cbiAgLyoqIFRvZ2dsZSBiaWxpbmVhciBzbW9vdGhpbmcgdnMgbmVhcmVzdC1uZWlnaGJvdXIgKG5vdywgYW5kIGZvciB0aGUgbmV4dCB2aWV3ZXIpLiAqL1xuICBzZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2hyb21lLnNldEltYWdlU21vb3RoaW5nRW5hYmxlZChlbmFibGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2FwIHRoZSBkaXNwbGF5ZWQgei1zbGljZSBsaXZlLiBTbGljZXMgYXJlIGtlcHQgYXMgc2VwYXJhdGUgdGlsZWQgaW1hZ2VzIGluXG4gICAqIHRoZSB3b3JsZCwgc28gc3dpdGNoaW5nIGlzIGp1c3QgYW4gb3BhY2l0eSB0b2dnbGU6IGEgcHJldmlvdXNseS12aXNpdGVkIHNsaWNlXG4gICAqIHNob3dzIGluc3RhbnRseSAoaXRzIGRlY29kZWQgKyByZWNvbG9yZWQgdGlsZXMgYXJlIHN0aWxsIHJlc2lkZW50KSwgYW5kIGFcbiAgICogbmV2ZXItc2VlbiBzbGljZSBpcyBhZGRlZCBvbmNlLiBUaGUgcmVnaW9uIG92ZXJsYXksIGNvb3JkaW5hdGUgdHJhbnNmb3JtLFxuICAgKiBzY2FsZSBiYXIsIGNvbG9ybWFwIHBpcGVsaW5lIGFuZCBjdXJyZW50IHpvb20vcGFuIGFsbCBwZXJzaXN0IOKAlCB0aGUgeC95XG4gICAqIGdlb21ldHJ5IGlzIGlkZW50aWNhbCBhY3Jvc3Mgc2xpY2VzLlxuICAgKlxuICAgKiBTaW1wbGUgbW9kZSAodGlsZWQ6ZmFsc2Ug4oCUIGEgbnVtYmVyZWQgaW1hZ2Ugc2VyaWVzIGFzc2VtYmxlZCBjbGllbnQtc2lkZSxcbiAgICogZWFjaCBzbGljZSBpdHMgb3duIGNvbXBsZXRlIGltYWdlIHdpdGggbm8gc2hhcmVkIHRpbGUgc2VydmVyKSBoYXMgbm9cbiAgICogcHlyYW1pZCB0byB0b2dnbGUgb3BhY2l0eSBvbiwgc28gaXQgcmUtb3BlbnMgdGhlIHZpZXdlciBvbiB0aGUgbmV3XG4gICAqIHNsaWNlJ3MgVVJMIGluc3RlYWQuIHByZXNlcnZlVmlld3BvcnQgKHZpZXdlciBvcHRpb24sIHNlZSBwbG90KCkpIGtlZXBzXG4gICAqIHRoZSBjdXJyZW50IHpvb20vcGFuIGFjcm9zcyB0aGF0IHJlb3Blbi5cbiAgICovXG4gIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHogPSB6SW5kZXggfHwgMDtcbiAgICBpZiAoeiA9PT0gdGhpcy5jdXJyZW50WikgcmV0dXJuO1xuICAgIGlmICghdGhpcy52aWV3ZXIpIHJldHVybjtcbiAgICBpZiAodGhpcy5zaW1wbGUuYWN0aXZlKSB7XG4gICAgICB0aGlzLnNpbXBsZS5zZXRaSW5kZXgoeik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kZXNjcmlwdG9yIHx8ICF0aGlzLmluZm9CNjQpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRaID0gejtcbiAgICB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDsgLy8gd2FuZCByZWFkYmFjayBpcyBzbGljZS1zcGVjaWZpY1xuICAgIHRoaXMuY2FjaGUuc2hvd1NsaWNlKHopO1xuICAgIGlmICh0aGlzLmlzTXVsdGlDaGFubmVsKSB7XG4gICAgICB0aGlzLnNhbXBsZXIuY29tcHV0ZU11bHRpQ2hhbm5lbEhpc3RvZ3JhbXModGhpcy5kZXNjcmlwdG9yLCB0aGlzLmluZm9CNjQsIHopO1xuICAgIH1cbiAgfVxuXG4gIHNldFN0YWNrTG9hZGluZyhzdGFja0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrTG9hZGluZyQubmV4dChzdGFja0xvYWRpbmcpO1xuICB9XG4gIGlzU3RhY2tMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrTG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0U3RhY2tMb2FkaW5nUHJvZ3Jlc3MoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gb2YoMCk7IC8vIE9TRCBsb2FkcyBhIHN0YWNrJ3Mgc2xpY2VzIGxhemlseSAoU2xpY2VDYWNoZSk7IG5vIHByb2dyZXNzIHRvIHJlcG9ydFxuICB9XG5cbiAgZ2V0VHJ1ZUltYWdlU2l6ZSgpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yID8geyB3aWR0aDogdGhpcy5kZXNjcmlwdG9yLndpZHRoLCBoZWlnaHQ6IHRoaXMuZGVzY3JpcHRvci5oZWlnaHQgfSA6IG51bGw7XG4gIH1cbiAgZ2V0Q3VycmVudEltYWdlKCk6IFByb21pc2U8SW1hZ2UgfCBudWxsPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGRpc3BsYXllZCBwaXhlbHMg4oCUIHRoZSByZW5kZXJlZCB2aWV3cG9ydCAod2hhdCB0aGUgdXNlciBzZWVzLFxuICAgKiBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgem9vbSBhbmQgYW55IGNvbG9ybWFwIHJlY29sb3IpLCBhcyBSR0JBLiBGZWVkcyB0aGVcbiAgICogcHJvY2Vzc2luZy1waXBlbGluZSBkaWFsb2cncyBcInVzZSBjdXJyZW50IHZpZXdcIi4gUmV0dXJucyBudWxsIHVudGlsIHRpbGVzXG4gICAqIGFyZSBkcmF3bi5cbiAgICovXG4gIGdldERpc3BsYXllZFBpeGVsRGF0YSgpOiBQaXhlbERhdGEgfCBudWxsIHtcbiAgICByZXR1cm4gcmVhZERyYXdlclBpeGVscyh0aGlzLnZpZXdlcik7XG4gIH1cblxuICAvKiogSW1hZ2UtcGl4ZWwgcmVjdGFuZ2xlIHRoZSBkcmF3ZXIgY2FudmFzICh3aGF0IHtAbGluayBnZXREaXNwbGF5ZWRQaXhlbERhdGF9XG4gICAqICByZWFkcykgY3VycmVudGx5IGNvdmVycyDigJQgdW5jbGFtcGVkLCBzZWUgT3NkVmlld3BvcnRBZGFwdGVyLmRpc3BsYXllZFNvdXJjZVJlY3QuICovXG4gIGdldERpc3BsYXllZFNvdXJjZVJlY3QoKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnZpZXdwb3J0LmRpc3BsYXllZFNvdXJjZVJlY3QoKTtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCB0aGUgY3VycmVudGx5IHJlbmRlcmVkIHZpZXcgYXMgYSBQTkcgKFdZU0lXWUcpIOKAlCB0aGUgcGFyYWxsZWwgdG9cbiAgICogIFBsb3RseSdzIGRvd25sb2FkSW1hZ2UuIFRoZSBkcmF3ZXIgY2FudmFzIGFscmVhZHkgY2FycmllcyB0aGUgZGlzcGxheVxuICAgKiAgc2V0dGluZ3MgKHRoZSByZWNvbG9yIHBpcGVsaW5lIGJha2VzIHRoZW0gaW50byB0aGUgdGlsZXMpOyB0aGUgZnVsbC1yZXNvbHV0aW9uXG4gICAqICBzdGl0Y2hlZCBleHBvcnQgaXMgZXhwb3J0Q29tcG9zaXRlKCkuICovXG4gIGRvd25sb2FkSW1hZ2UoKTogdm9pZCB7XG4gICAgc2F2ZURyYXdlclNuYXBzaG90KHRoaXMudmlld2VyLCAoYmxvYikgPT4gc2F2ZUFzKGJsb2IsIGAke2ZpbGVTdGVtKHRoaXMuY3VycmVudEZpbGVOYW1lKX0ucG5nYCkpO1xuICB9XG5cbiAgc2V0UGxvdFR5cGUoX3Bsb3RUeXBlOiBQbG90VHlwZSk6IHZvaWQge1xuICAgIC8qIE9TRCBvbmx5IHJlbmRlcnMgdGhlIGltYWdlIHR5cGUgKi9cbiAgfVxuICBzZXRTdXJmYWNlRHJhZ01vZGUoX21vZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8qIDNEIG5vdCBzdXBwb3J0ZWQgYnkgT1NEICovXG4gIH1cbiAgcmVzZXRTdXJmYWNlQ2FtZXJhKCk6IHZvaWQge1xuICAgIC8qIDNEIG5vdCBzdXBwb3J0ZWQgYnkgT1NEICovXG4gIH1cblxuICAvKiogVGhlIHJvdXRlciByZWFkcyB0aGUgYXV0b3NjYWxlIGV2ZW50IGZyb20gUGxvdGx5IG9ubHkuICovXG4gIGdldEF1dG9zY2FsZUV2ZW50KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgLyoqIFZpc2libGUgaW1hZ2UgcmVnaW9uIChmdWxsLWltYWdlIHBpeGVsIGNvb3JkcyksIGVtaXR0ZWQgd2hlbiB0aGUgdmlld1xuICAgKiAgc2V0dGxlcy4gVGhlIGludGVuc2l0eSBpbnNldCByZS1zYW1wbGVzIHRoaXMgcmVnaW9uIGF0IHRoZSB6b29tIHJlc29sdXRpb24uICovXG4gIGdldEludGVuc2l0eVNhbXBsaW5nKCk6IElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMudmlld3BvcnRTb3VyY2U7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3cG9ydFNvdXJjZTogSUludGVuc2l0eVZpZXdwb3J0U291cmNlID0ge1xuICAgIGdldFZpZXdwb3J0Q2hhbmdlJDogKCkgPT4gdGhpcy52aWV3cG9ydC52aWV3cG9ydENoYW5nZSQuYXNPYnNlcnZhYmxlKCksXG4gIH07XG5cbiAgLyoqIFRoZSBuYXZpZ2F0b3IgYW5kIGltYWdlIHNtb290aGluZyAoc2VlIHtAbGluayBzZXROYXZpZ2F0b3JWaXNpYmxlfSkuICovXG4gIGdldE9zZFZpZXdPcHRpb25zKCk6IElPc2RWaWV3T3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnM7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3T3B0aW9uczogSU9zZFZpZXdPcHRpb25zID0ge1xuICAgIHNldE5hdmlnYXRvclZpc2libGU6ICh2aXNpYmxlKSA9PiB0aGlzLnNldE5hdmlnYXRvclZpc2libGUodmlzaWJsZSksXG4gICAgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkOiAoZW5hYmxlZCkgPT4gdGhpcy5zZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZCksXG4gIH07XG5cbiAgLyoqIE9TRCByZW5kZXJzIG5vIHZvbHVtZXMuICovXG4gIGdldFZvbHVtZVJlc29sdXRpb24oKTogbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogVGhlIHZpZXdwb3J0IGEgY29udHJpYnV0ZWQgcGxvdCBtb2RlIGRyYXdzIG92ZXI6IG9uZSBzdGFibGUgb2JqZWN0IHRoYXRcbiAgICogIGFsd2F5cyByZWFkcyB0aGUgY3VycmVudCB2aWV3ZXIgKHNlZSBPc2RWaWV3cG9ydEFkYXB0ZXIucGxvdE1vZGVWaWV3cG9ydEZvcikuICovXG4gIGdldFBsb3RNb2RlVmlld3BvcnQoKTogUGxvdE1vZGVWaWV3cG9ydCB7XG4gICAgcmV0dXJuIHRoaXMudmlld3BvcnQucGxvdE1vZGVWaWV3cG9ydEZvcigpO1xuICB9XG5cbiAgLyoqIE9TRCB0YXJnZXRzIHRoZSBpbWFnZSBkaXNwbGF5OyB0aGUgc2NhbGFyLzNEIHBsb3QgdHlwZXMgYmVsb25nIHRvIFBsb3RseS4gKi9cbiAgZ2V0UGxvdFR5cGVEZXNjcmlwdG9ycygpOiBQbG90VHlwZURlc2NyaXB0b3JbXSB7XG4gICAgcmV0dXJuIFtQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuSEVBVE1BUF0hXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJUmVnaW9uU3RvcmUgKyBjbGFzc2lmaWNhdGlvbiBjb2xvdXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBJbmhlcml0ZWQgZnJvbSBCYXNlU3RvcmVWaXN1YWxpemVyIOKAlCBwdXJlIGRlbGVnYXRpb25zIHRvIHRoZSBzaGFyZWRcbiAgLy8gUmVnaW9uU3RvcmUgLyBWaXN1YWxpemVyU3RvcmUgKGlkZW50aWNhbCB0byBuYXBhcmktanMpLiBUaGUgT1NEIHJlZ2lvblxuICAvLyBvdmVybGF5IChjb25zdHJ1Y3RlZCBpbiBwbG90KCkpIHJlYWRzL3dyaXRlcyB0aGF0IHNhbWUgc3RvcmUsIHNvIHJlZ2lvbnNcbiAgLy8gc3RheSBpbiBzeW5jIHdpdGggUGxvdGx5IGFuZCB0aGUgUmVnaW9uIEVkaXRvcjsgT1NEIHJlbmRlcnMgdGhlbSBhcyBhbiBTVkdcbiAgLy8gb3ZlcmxheSByYXRoZXIgdGhhbiBjYXJyeWluZyBQbG90bHkgc2hhcGUgZGljdHMuXG5cbiAgLy8g4pSA4pSAIElUb29sQ29udHJvbGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gc2V0QWN0aXZlVG9vbCBhbmQgdGhlIHBlci10b29sIHNldHRlcnMgcnVuIGluIEJhc2VTdG9yZVZpc3VhbGl6ZXIgb3ZlclxuICAvLyB0aGlzLmNhbnZhc1Rvb2xzOyBPU0QgZ2F0ZXMgbW91c2UtbmF2IGFuZCBpdHMgcmVhZGJhY2sgaGVyZS5cblxuICAvKipcbiAgICogTW91c2UtbmF2IGlzIG9mZiB3aGlsZSBhIGNhbnZhcyB0b29sIGhvbGRzIHRoZSBwb2ludGVyIChpdHMgZHJhZyBtdXN0IGRyYXcsXG4gICAqIG5vdCBwYW4pIGFuZCBvbiBvdGhlcndpc2Ug4oCUIGFsc28gd2hlbiBhIHJlZ2lvbiBkcmF3IG1vZGUgaXMgYXJtZWQgb24gdGhlXG4gICAqIG92ZXJsYXksIGFzIHRoZSBvbGQgcGVyLXRvb2wgZmFuLW91dCBsZWZ0IGl0IChpdHMgc2V0Wm9vbVRvQm94TW9kZShmYWxzZSlcbiAgICogcmUtZW5hYmxlZCBuYXYgYWZ0ZXIgdGhlIG92ZXJsYXkncyBzZXRNb2RlKS4gQSBwaXhlbCB0b29sIHNhbXBsZXMgdGhlXG4gICAqIHJlbmRlcmVkIHZpZXdwb3J0LCByZWFkIGJhY2sgbGF6aWx5IG9uIGZpcnN0IHVzZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBiZWZvcmVUb29sQ2hhbmdlKG5leHQ6IENhbnZhc1Rvb2xJZCB8IG51bGwpOiBib29sZWFuIHtcbiAgICB0aGlzLnZpZXdlcj8uc2V0TW91c2VOYXZFbmFibGVkKG5leHQgPT09IG51bGwpO1xuICAgIGlmIChuZXh0ICE9PSBudWxsICYmIG5leHQgIT09ICd6b29tVG9Cb3gnKSB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKiogQm94LXByb21wdGVkIFNBTTogc2VnbWVudCB0aGUgZHJhd24gcmVjdGFuZ2xlcyBhZ2FpbnN0IG91ciB0b29sIGhvc3RcbiAgICogICh2aWV3cG9ydCByZWFkYmFjayArIGNvb3JkaW5hdGUgdHJhbnNmb3JtICsgcmVnaW9uIHN0b3JlKS4gKi9cbiAgc2VnbWVudFJlY3RhbmdsZXMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDsgLy8gc2VnbWVudCBhZ2FpbnN0IHRoZSBjdXJyZW50IHZpZXdwb3J0IHJlYWRiYWNrXG4gICAgcmV0dXJuIHRoaXMuc2FtVG9vbC5zZWdtZW50Qm94ZXModGhpcy50b29sSG9zdCk7XG4gIH1cbiAgc2VnbWVudFJlY3RhbmdsZXNDZWxscG9zZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICghdGhpcy5jZWxsU2VnbWVudGVyKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDApO1xuICAgIHRoaXMudmlld3BvcnRQaXhlbHMgPSBudWxsOyAvLyBjcm9wIGFnYWluc3QgdGhlIGN1cnJlbnQgdmlld3BvcnQgcmVhZGJhY2tcbiAgICByZXR1cm4gdGhpcy5jZWxsU2VnbWVudFRvb2wuc2VnbWVudEJveGVzKHRoaXMudG9vbEhvc3QsIHRoaXMuY2VsbFNlZ21lbnRlcik7XG4gIH1cbiAgc2V0U2FtTW9kZWwoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2FtVG9vbC5zZXRNb2RlbChpZCk7XG4gICAgdGhpcy5zYW1Qb2ludFRvb2wuc2V0TW9kZWwoaWQpO1xuICB9XG5cbiAgLyoqIFRoZSBlbGVtZW50IHRoZSBvbi1jYW52YXMgdG9vbCBvdmVybGF5cyBhdHRhY2ggdG8gKE9TRCBpcyBtb3VudGVkIGhlcmUpLiAqL1xuICBwcml2YXRlIGdldE92ZXJsYXlDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wbG90RGl2ID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbG90RGl2KSA6IG51bGw7XG4gIH1cblxuICAvKiogVGhlIHBpeGVsIHRvb2xzJyBmcmFtZTogdGhlIHJlbmRlcmVkIHZpZXdwb3J0LCByZWFkIGJhY2sgb25jZSBhbmQgY2FjaGVkXG4gICAqICB1bnRpbCB0aGUgdmlld3BvcnQgY2hhbmdlcyAoc2VlIHJlYWRiYWNrVmlld3BvcnRGcmFtZSkuICovXG4gIHByaXZhdGUgcmVhZGJhY2tWaWV3cG9ydCgpOiBDYWNoZWRJbWFnZURhdGEgfCBudWxsIHtcbiAgICByZXR1cm4gKHRoaXMudmlld3BvcnRQaXhlbHMgPz89IHJlYWRiYWNrVmlld3BvcnRGcmFtZSh0aGlzLnZpZXdlcikpO1xuICB9XG5cbiAgLyoqIFBlci1jaGFubmVsIGhpc3RvZ3JhbSBmb3IgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUsIGZyb20gdGhlIGN1cnJlbnRcbiAgICogIHNsaWNlJ3Mgc2FtcGxlZCB0aWxlcyAoZ3JheXNjYWxlIOKGkiBjaGFubmVsIDA7IFJHQiDihpIgUi9HL0IpLiBOdWxsIHVudGlsIHRoZVxuICAgKiAgYXN5bmMgc2FtcGxpbmcgcmVzb2x2ZXMgb3IgaWYgaXQgd2FzIHNraXBwZWQuICovXG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgX2JpbnM6IG51bWJlcik6IElIaXN0b2dyYW0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zYW1wbGVyLmdldCh0aGlzLmN1cnJlbnRaLCBjaGFubmVsSW5kZXgpO1xuICB9XG5cbiAgLyoqIE5hdGl2ZSBiaXQgZGVwdGggb2YgYSBjaGFubmVsIGZyb20gdGhlIHRpbGUgZGVzY3JpcHRvciAoOCB3aGVuIHVua25vd24pLiAqL1xuICBwcml2YXRlIGNoYW5uZWxCaXREZXB0aChjaGFubmVsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvcj8uY2hhbm5lbEluZm8/LltjaGFubmVsSW5kZXhdPy5iaXREZXB0aCA/PyA4O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jIGhpc3RvZ3JhbSBmb3IgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUuIEZvciA+OC1iaXQgaW1hZ2VzIGl0XG4gICAqIGZldGNoZXMgdGhlICoqbmF0aXZlKiogZGlzdHJpYnV0aW9uIGZyb20gdGhlIHNlcnZlciBgL2hpc3RvZ3JhbWAgZW5kcG9pbnRcbiAgICogKHRoZSA4LWJpdCBjYW52YXMgdGlsZXMgY2FuJ3QgY2FycnkgMTYtYml0IHZhbHVlcykgYW5kIGNhY2hlcyBpdCBwZXJcbiAgICogc2xpY2UrY2hhbm5lbDsgZm9yIDgtYml0L1JHQiBpdCByZXR1cm5zIHRoZSBleGlzdGluZyBjbGllbnQtc2FtcGxlZCA4LWJpdFxuICAgKiBoaXN0b2dyYW0uIFJlYWQtb25seSDigJQgaXQgbmV2ZXIgdG91Y2hlcyB0aGUgdGlsZS9kaXNwbGF5IHBpcGVsaW5lLlxuICAgKi9cbiAgZ2V0SGlzdG9ncmFtJChjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogT2JzZXJ2YWJsZTxJSGlzdG9ncmFtIHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLmNoYW5uZWxCaXREZXB0aChjaGFubmVsSW5kZXgpIDw9IDggfHwgIXRoaXMuaW5mb0I2NCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZ2V0SGlzdG9ncmFtKGNoYW5uZWxJbmRleCwgYmlucykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYW1wbGVyLm5hdGl2ZSQodGhpcy5pbmZvQjY0LCB0aGlzLmN1cnJlbnRaLCBjaGFubmVsSW5kZXgsIGJpbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0aGUgdW5kZXJseWluZyBpbWFnZSBkYXRhIGFzIGEgZGF0YS1wcmVzZXJ2aW5nIG11bHRpLWJhbmQgVElGRiBhdFxuICAgKiBuYXRpdmUgYml0IGRlcHRoIHZpYSBgR0VUIC9leHBvcnQvdGlmZmAgKHRoZSBzZXJ2ZXIgcmVhZHMgdGhlIHJhdyAxNi1iaXRcbiAgICogcGxhbmVzIOKAlCB0aGUgY2xpZW50IG5ldmVyIHNlZXMgdGhlbSkuIFNlbmRzIG9ubHkgdGhlIHZpc2libGUgY2hhbm5lbHM7IHRoZVxuICAgKiBleGlzdGluZyA4LWJpdCBjb21wb3NpdGUgUE5HIGV4cG9ydCBpcyB1bmFmZmVjdGVkLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0RGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaW5mb0I2NCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0YXRlcyA9IHRoaXMucmVjb2xvci5jaGFubmVsU3RhdGVzO1xuICAgIGNvbnN0IHZpc2libGUgPSBzdGF0ZXMuZmlsdGVyKChjKSA9PiBjLnZpc2libGUpLm1hcCgoYykgPT4gYy5pbmRleCk7XG4gICAgY29uc3QgdXJsID0gZXhwb3J0VGlmZlVybCh0aGlzLmFwaSwgdGhpcy5pbmZvQjY0LCB0aGlzLmN1cnJlbnRaLCB2aXNpYmxlLCBzdGF0ZXMubGVuZ3RoKTtcbiAgICBjb25zdCBzYXZlTmFtZSA9IGV4cG9ydFRpZmZGaWxlbmFtZSh0aGlzLmN1cnJlbnRGaWxlTmFtZSk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IGZldGNoVGlmZkV4cG9ydCh0aGlzLmh0dHAsIHVybCk7XG4gICAgaWYgKGJsb2IpIHNhdmVBcyhibG9iLCBzYXZlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRoZSBjdXJyZW50IHNsaWNlIGFzIGEgcHVibGljYXRpb24tcmVhZHkgUE5HIGNvbXBvc2l0ZWQgd2l0aCB0aGVcbiAgICogYWN0aXZlIGRpc3BsYXkgc2V0dGluZ3MsIHRoZSB3YXkgaXQgaXMgZHJhd24gKHNlZSByZW5kZXJDb21wb3NpdGVQbmcpLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0Q29tcG9zaXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5kZXNjcmlwdG9yKSByZXR1cm47XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlbmRlckNvbXBvc2l0ZVBuZyh7XG4gICAgICBodHRwOiB0aGlzLmh0dHAsXG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgZGVzY3JpcHRvcjogdGhpcy5kZXNjcmlwdG9yLFxuICAgICAgaW5mb0I2NDogdGhpcy5pbmZvQjY0LFxuICAgICAgejogdGhpcy5jdXJyZW50WixcbiAgICAgIG11bHRpQ2hhbm5lbDogdGhpcy5pc011bHRpQ2hhbm5lbCxcbiAgICAgIHJlYWxMZXZlbHM6IHRoaXMucmVhbExldmVscyxcbiAgICAgIGNoYW5uZWxTdGF0ZXM6IHRoaXMucmVjb2xvci5jaGFubmVsU3RhdGVzLFxuICAgICAgZGlzcGxheTogdGhpcy5yZWNvbG9yLmRpc3BsYXksXG4gICAgfSk7XG4gICAgaWYgKGJsb2IpIHNhdmVBcyhibG9iLCBgJHtmaWxlU3RlbSh0aGlzLmN1cnJlbnRGaWxlTmFtZSl9X2NvbXBvc2l0ZS5wbmdgKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJRGlzcGxheU9wdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIEluaGVyaXRlZCBmcm9tIEJhc2VTdG9yZVZpc3VhbGl6ZXIg4oCUIHB1cmUgZGVsZWdhdGlvbnMgdG8gdGhlIHNoYXJlZFxuICAvLyBWaXN1YWxpemVyU3RvcmUsIHNvIE9TRCBhbmQgUGxvdGx5IHN0YXkgaW4gbG9jay1zdGVwLiBPU0QgYXBwbGllcyB0aGVcbiAgLy8gY29sb3JtYXAgdG8gZ3JheXNjYWxlIHRpbGVzIHZpYSB0aGUgTFVUIHJlYWN0aXZlbHkgKHNlZSB0aGUgY29uc3RydWN0b3Inc1xuICAvLyBjb2xvcm1hcCBzdWJzY3JpcHRpb24pLCBub3QgaW4gc2V0Q29sb3JtYXAuXG5cbiAgLy8g4pSA4pSAIElWaXN1YWxpemVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICAvLyBUaGUgc3RvcmUgc3Vic2NyaXB0aW9uLCBhbmQgYSBxdWV1ZWQgaW52YWxpZGF0aW9uIHRoYXQgbXVzdCBub3QgZmlyZVxuICAgIC8vIGFnYWluc3QgYSB0b3JuLWRvd24gdmlld2VyLlxuICAgIHRoaXMucmVjb2xvci51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGVzdHJveVZpZXdlcigpO1xuICAgIHRoaXMuc2ltcGxlLnJlc2V0KCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,71 @@
1
+ import { LoadingBadgeState } from '../napari-js/napari-loading-state';
2
+ /**
3
+ * "Image reloading…" over the OpenSeadragon view while it fetches the tiles of what it shows, as
4
+ * napari's views show it for their image, cells and transcripts (the same badge). Driven by each
5
+ * world item's own `fully-loaded-change` (an image, a stack slice, a channel), so it covers every
6
+ * tile source alike, and shown only after a short delay, so tiles served from cache never flash it.
7
+ *
8
+ * Only items on screen count (opacity above 0): a hidden channel loads nothing by design (it is
9
+ * not preloaded), so it never becomes fully loaded, and a slice cached or loading in the
10
+ * background is not what the view shows. An item is weighed again when its opacity changes.
11
+ */
12
+ export class OsdTileLoading {
13
+ constructor(viewer) {
14
+ this.viewer = viewer;
15
+ this.state = new LoadingBadgeState();
16
+ /** Each item still loading, with the function that un-counts it. */
17
+ this.loading = new Map();
18
+ this.watched = new Map();
19
+ this.onAdd = (e) => this.watch(e.item);
20
+ this.onRemove = (e) => this.unwatch(e.item);
21
+ this.state.attach(viewer.element);
22
+ viewer.world.addHandler('add-item', this.onAdd);
23
+ viewer.world.addHandler('remove-item', this.onRemove);
24
+ for (let i = 0; i < viewer.world.getItemCount(); i++)
25
+ this.watch(viewer.world.getItemAt(i));
26
+ }
27
+ /** The badge's text (shown, or about to be). */
28
+ get text() {
29
+ return this.state.text;
30
+ }
31
+ destroy() {
32
+ this.viewer.world.removeHandler('add-item', this.onAdd);
33
+ this.viewer.world.removeHandler('remove-item', this.onRemove);
34
+ for (const item of [...this.watched.keys()])
35
+ this.unwatch(item);
36
+ this.state.reset();
37
+ }
38
+ watch(item) {
39
+ if (!item || this.watched.has(item))
40
+ return;
41
+ const handler = () => this.set(item, this.isLoading(item));
42
+ this.watched.set(item, handler);
43
+ item.addHandler('fully-loaded-change', handler);
44
+ item.addHandler('opacity-change', handler);
45
+ handler();
46
+ }
47
+ unwatch(item) {
48
+ const handler = this.watched.get(item);
49
+ if (handler) {
50
+ item.removeHandler('fully-loaded-change', handler);
51
+ item.removeHandler('opacity-change', handler);
52
+ }
53
+ this.watched.delete(item);
54
+ this.set(item, false);
55
+ }
56
+ /** Whether the item is on screen and still fetching its tiles. */
57
+ isLoading(item) {
58
+ const opacity = typeof item.getOpacity === 'function' ? item.getOpacity() : 1;
59
+ return opacity > 0 && !item.getFullyLoaded();
60
+ }
61
+ set(item, loading) {
62
+ const end = this.loading.get(item);
63
+ if (loading && !end)
64
+ this.loading.set(item, this.state.begin('Image'));
65
+ else if (!loading && end) {
66
+ end();
67
+ this.loading.delete(item);
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLXRpbGUtbG9hZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL29zZC9vc2QtdGlsZS1sb2FkaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBc0J0RTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sY0FBYztJQVN6QixZQUE2QixNQUFxQjtRQUFyQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBUmpDLFVBQUssR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDakQsb0VBQW9FO1FBQ25ELFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztRQUM3QyxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFFN0MsVUFBSyxHQUFHLENBQUMsQ0FBb0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBbUIsQ0FBQyxDQUFDO1FBQ3BFLGFBQVEsR0FBRyxDQUFDLENBQW9CLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQW1CLENBQUMsQ0FBQztRQUd4RixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxLQUFL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RiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvYWRpbmdCYWRnZVN0YXRlIH0gZnJvbSAnLi4vbmFwYXJpLWpzL25hcGFyaS1sb2FkaW5nLXN0YXRlJztcblxuLyoqIFdoYXQge0BsaW5rIE9zZFRpbGVMb2FkaW5nfSBuZWVkcyBvZiBhIHdvcmxkIGl0ZW06IE9TRCdzIGBUaWxlZEltYWdlYC4gKi9cbmludGVyZmFjZSBMb2FkaW5nSXRlbSB7XG4gIGdldEZ1bGx5TG9hZGVkKCk6IGJvb2xlYW47XG4gIC8qKiAwIGZvciBhbiBpdGVtIHRoYXQgaXMgbm90IHNob3duOiBhIGhpZGRlbiBjaGFubmVsLCBhIGNhY2hlZCBvciBiYWNrZ3JvdW5kLWxvYWRpbmcgc2xpY2UuICovXG4gIGdldE9wYWNpdHkoKTogbnVtYmVyO1xuICBhZGRIYW5kbGVyKGV2ZW50OiAnZnVsbHktbG9hZGVkLWNoYW5nZScgfCAnb3BhY2l0eS1jaGFuZ2UnLCBoYW5kbGVyOiAoKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgcmVtb3ZlSGFuZGxlcihldmVudDogJ2Z1bGx5LWxvYWRlZC1jaGFuZ2UnIHwgJ29wYWNpdHktY2hhbmdlJywgaGFuZGxlcjogKCkgPT4gdm9pZCk6IHVua25vd247XG59XG5cbi8qKiBXaGF0IGl0IG5lZWRzIG9mIHRoZSB2aWV3ZXIuICovXG5pbnRlcmZhY2UgTG9hZGluZ1ZpZXdlciB7XG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICB3b3JsZDoge1xuICAgIGdldEl0ZW1Db3VudCgpOiBudW1iZXI7XG4gICAgZ2V0SXRlbUF0KGk6IG51bWJlcik6IHVua25vd247XG4gICAgYWRkSGFuZGxlcihldmVudDogJ2FkZC1pdGVtJyB8ICdyZW1vdmUtaXRlbScsIGhhbmRsZXI6IChlOiB7IGl0ZW06IHVua25vd24gfSkgPT4gdm9pZCk6IHVua25vd247XG4gICAgcmVtb3ZlSGFuZGxlcihldmVudDogJ2FkZC1pdGVtJyB8ICdyZW1vdmUtaXRlbScsIGhhbmRsZXI6IChlOiB7IGl0ZW06IHVua25vd24gfSkgPT4gdm9pZCk6IHVua25vd247XG4gIH07XG59XG5cbi8qKlxuICogXCJJbWFnZSByZWxvYWRpbmfigKZcIiBvdmVyIHRoZSBPcGVuU2VhZHJhZ29uIHZpZXcgd2hpbGUgaXQgZmV0Y2hlcyB0aGUgdGlsZXMgb2Ygd2hhdCBpdCBzaG93cywgYXNcbiAqIG5hcGFyaSdzIHZpZXdzIHNob3cgaXQgZm9yIHRoZWlyIGltYWdlLCBjZWxscyBhbmQgdHJhbnNjcmlwdHMgKHRoZSBzYW1lIGJhZGdlKS4gRHJpdmVuIGJ5IGVhY2hcbiAqIHdvcmxkIGl0ZW0ncyBvd24gYGZ1bGx5LWxvYWRlZC1jaGFuZ2VgIChhbiBpbWFnZSwgYSBzdGFjayBzbGljZSwgYSBjaGFubmVsKSwgc28gaXQgY292ZXJzIGV2ZXJ5XG4gKiB0aWxlIHNvdXJjZSBhbGlrZSwgYW5kIHNob3duIG9ubHkgYWZ0ZXIgYSBzaG9ydCBkZWxheSwgc28gdGlsZXMgc2VydmVkIGZyb20gY2FjaGUgbmV2ZXIgZmxhc2ggaXQuXG4gKlxuICogT25seSBpdGVtcyBvbiBzY3JlZW4gY291bnQgKG9wYWNpdHkgYWJvdmUgMCk6IGEgaGlkZGVuIGNoYW5uZWwgbG9hZHMgbm90aGluZyBieSBkZXNpZ24gKGl0IGlzXG4gKiBub3QgcHJlbG9hZGVkKSwgc28gaXQgbmV2ZXIgYmVjb21lcyBmdWxseSBsb2FkZWQsIGFuZCBhIHNsaWNlIGNhY2hlZCBvciBsb2FkaW5nIGluIHRoZVxuICogYmFja2dyb3VuZCBpcyBub3Qgd2hhdCB0aGUgdmlldyBzaG93cy4gQW4gaXRlbSBpcyB3ZWlnaGVkIGFnYWluIHdoZW4gaXRzIG9wYWNpdHkgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE9zZFRpbGVMb2FkaW5nIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZSA9IG5ldyBMb2FkaW5nQmFkZ2VTdGF0ZSgpO1xuICAvKiogRWFjaCBpdGVtIHN0aWxsIGxvYWRpbmcsIHdpdGggdGhlIGZ1bmN0aW9uIHRoYXQgdW4tY291bnRzIGl0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmcgPSBuZXcgTWFwPExvYWRpbmdJdGVtLCAoKSA9PiB2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdhdGNoZWQgPSBuZXcgTWFwPExvYWRpbmdJdGVtLCAoKSA9PiB2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25BZGQgPSAoZTogeyBpdGVtOiB1bmtub3duIH0pID0+IHRoaXMud2F0Y2goZS5pdGVtIGFzIExvYWRpbmdJdGVtKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvblJlbW92ZSA9IChlOiB7IGl0ZW06IHVua25vd24gfSkgPT4gdGhpcy51bndhdGNoKGUuaXRlbSBhcyBMb2FkaW5nSXRlbSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2aWV3ZXI6IExvYWRpbmdWaWV3ZXIpIHtcbiAgICB0aGlzLnN0YXRlLmF0dGFjaCh2aWV3ZXIuZWxlbWVudCk7XG4gICAgdmlld2VyLndvcmxkLmFkZEhhbmRsZXIoJ2FkZC1pdGVtJywgdGhpcy5vbkFkZCk7XG4gICAgdmlld2VyLndvcmxkLmFkZEhhbmRsZXIoJ3JlbW92ZS1pdGVtJywgdGhpcy5vblJlbW92ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3ZXIud29ybGQuZ2V0SXRlbUNvdW50KCk7IGkrKykgdGhpcy53YXRjaCh2aWV3ZXIud29ybGQuZ2V0SXRlbUF0KGkpIGFzIExvYWRpbmdJdGVtKTtcbiAgfVxuXG4gIC8qKiBUaGUgYmFkZ2UncyB0ZXh0IChzaG93biwgb3IgYWJvdXQgdG8gYmUpLiAqL1xuICBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnRleHQ7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudmlld2VyLndvcmxkLnJlbW92ZUhhbmRsZXIoJ2FkZC1pdGVtJywgdGhpcy5vbkFkZCk7XG4gICAgdGhpcy52aWV3ZXIud29ybGQucmVtb3ZlSGFuZGxlcigncmVtb3ZlLWl0ZW0nLCB0aGlzLm9uUmVtb3ZlKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgWy4uLnRoaXMud2F0Y2hlZC5rZXlzKCldKSB0aGlzLnVud2F0Y2goaXRlbSk7XG4gICAgdGhpcy5zdGF0ZS5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaChpdGVtOiBMb2FkaW5nSXRlbSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghaXRlbSB8fCB0aGlzLndhdGNoZWQuaGFzKGl0ZW0pKSByZXR1cm47XG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHRoaXMuc2V0KGl0ZW0sIHRoaXMuaXNMb2FkaW5nKGl0ZW0pKTtcbiAgICB0aGlzLndhdGNoZWQuc2V0KGl0ZW0sIGhhbmRsZXIpO1xuICAgIGl0ZW0uYWRkSGFuZGxlcignZnVsbHktbG9hZGVkLWNoYW5nZScsIGhhbmRsZXIpO1xuICAgIGl0ZW0uYWRkSGFuZGxlcignb3BhY2l0eS1jaGFuZ2UnLCBoYW5kbGVyKTtcbiAgICBoYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHVud2F0Y2goaXRlbTogTG9hZGluZ0l0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy53YXRjaGVkLmdldChpdGVtKTtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaXRlbS5yZW1vdmVIYW5kbGVyKCdmdWxseS1sb2FkZWQtY2hhbmdlJywgaGFuZGxlcik7XG4gICAgICBpdGVtLnJlbW92ZUhhbmRsZXIoJ29wYWNpdHktY2hhbmdlJywgaGFuZGxlcik7XG4gICAgfVxuICAgIHRoaXMud2F0Y2hlZC5kZWxldGUoaXRlbSk7XG4gICAgdGhpcy5zZXQoaXRlbSwgZmFsc2UpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGl0ZW0gaXMgb24gc2NyZWVuIGFuZCBzdGlsbCBmZXRjaGluZyBpdHMgdGlsZXMuICovXG4gIHByaXZhdGUgaXNMb2FkaW5nKGl0ZW06IExvYWRpbmdJdGVtKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3BhY2l0eSA9IHR5cGVvZiBpdGVtLmdldE9wYWNpdHkgPT09ICdmdW5jdGlvbicgPyBpdGVtLmdldE9wYWNpdHkoKSA6IDE7XG4gICAgcmV0dXJuIG9wYWNpdHkgPiAwICYmICFpdGVtLmdldEZ1bGx5TG9hZGVkKCk7XG4gIH1cblxuICBwcml2YXRlIHNldChpdGVtOiBMb2FkaW5nSXRlbSwgbG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGVuZCA9IHRoaXMubG9hZGluZy5nZXQoaXRlbSk7XG4gICAgaWYgKGxvYWRpbmcgJiYgIWVuZCkgdGhpcy5sb2FkaW5nLnNldChpdGVtLCB0aGlzLnN0YXRlLmJlZ2luKCdJbWFnZScpKTtcbiAgICBlbHNlIGlmICghbG9hZGluZyAmJiBlbmQpIHtcbiAgICAgIGVuZCgpO1xuICAgICAgdGhpcy5sb2FkaW5nLmRlbGV0ZShpdGVtKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLXZpZXdlci1saWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvb3NkL29zZC12aWV3ZXItbGlrZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBPcGVuU2VhZHJhZ29uIGZyb20gJ29wZW5zZWFkcmFnb24nO1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBhbiBPcGVuU2VhZHJhZ29uIGBWaWV3ZXJgIHRoYXQgdGhlIE9TRCBoZWxwZXJzIChvc2QtY29vcmRzLCB0aGVcbiAqIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGUgc2NhbGUgYmFyLCB0aGUgcmVnaW9uIG92ZXJsYXkgYW5kIHRoZSBzbGljZSBjYWNoZSlcbiAqIGFjdHVhbGx5IHVzZSDigJQgYW5kIG5vdGhpbmcgbW9yZSAoT1NELVBMT1RMWS0yNykuXG4gKlxuICogVGhlIHJlYWwgYE9wZW5TZWFkcmFnb24uVmlld2VyYCBpcyBhc3NpZ25hYmxlIHRvIGl0IGFzIGlzLCBzbyB0aGUgc2VydmljZVxuICogcGFzc2VzIGl0cyB2aWV3ZXIgc3RyYWlnaHQgdGhyb3VnaDsgdGhlIHNwZWNzIGJ1aWxkIGEgc21hbGwgZmFrZSAoc2VlXG4gKiBgdGVzdGluZy9mYWtlLW9zZC12aWV3ZXIudHNgKSBpbnN0ZWFkIG9mIGNhc3RpbmcgYSBwYXJ0aWFsIG9iamVjdC4gUG9pbnRzIGFuZFxuICogcmVjdGFuZ2xlcyBhcmUgc3RydWN0dXJhbCB3aGVyZSB0aGUgaGVscGVycyBvbmx5IHJlYWQgYHhgL2B5YC9gd2lkdGhgL2BoZWlnaHRgO1xuICogYE9wZW5TZWFkcmFnb24uUmVjdGAgaXMga2VwdCBvbmx5IHdoZXJlIHRoZSByZXN1bHQgZ29lcyBiYWNrIGludG8gT1NEXG4gKiAoYGltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZWAg4oaSIGB2aWV3cG9ydC5maXRCb3VuZHNgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPc2RWaWV3ZXJMaWtlIHtcbiAgLyoqIFRoZSBlbGVtZW50IE9TRCBkcmF3cyBpbnRvOyBvdmVybGF5cyAoc2NhbGUgYmFyLCByZWdpb24gU1ZHKSBhcmUgYXBwZW5kZWRcbiAgICogIGhlcmUgYW5kIGl0cyBjbGllbnQgcmVjdCBhbmNob3JzIGNsaWVudOKGlGVsZW1lbnQgY29udmVyc2lvbnMuICovXG4gIGNhbnZhczogSFRNTEVsZW1lbnQ7XG4gIC8qKiBUaGUgdmlld2VyJ3Mgcm9vdCBlbGVtZW50IChhbiBhbmNlc3RvciBvZiB0aGUgY2FudmFzIGFuZCBvZiB0aGUgdG9vbFxuICAgKiAgb3ZlcmxheXMpIOKAlCB0aGUgd2hlZWwtem9vbSBsaXN0ZW5lciBpcyBib3VuZCBoZXJlLiAqL1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgdmlld3BvcnQ6IHtcbiAgICB2aWV3ZXJFbGVtZW50VG9WaWV3cG9ydENvb3JkaW5hdGVzKHA6IE9zZFhZKTogT3NkWFk7XG4gICAgdmlld3BvcnRUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICAgIC8qKiBJbWFnZSBjb252ZXJzaW9ucyBvbiB0aGUgdmlld3BvcnQg4oCUIGFtYmlndW91cyBvbmNlIHRoZSB3b3JsZCBob2xkc1xuICAgICAqICBzZXZlcmFsIGltYWdlczsgdXNlZCBvbmx5IGFzIHRoZSBlbXB0eS13b3JsZCBmYWxsYmFjay4gKi9cbiAgICB2aWV3ZXJFbGVtZW50VG9JbWFnZUNvb3JkaW5hdGVzKHA6IE9zZFhZKTogT3NkWFk7XG4gICAgaW1hZ2VUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICAgIGltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZShyOiBPcGVuU2VhZHJhZ29uLlJlY3QpOiBPcGVuU2VhZHJhZ29uLlJlY3Q7XG4gICAgdmlld3BvcnRUb0ltYWdlUmVjdGFuZ2xlKHI6IE9zZFJlY3RMaWtlKTogT3NkUmVjdExpa2U7XG4gICAgLyoqIFZpZXdlci1lbGVtZW50IHBpeGVsIOKGkiB2aWV3cG9ydCBwb2ludCAodGhlIHdoZWVsLXpvb20gYW5jaG9yKS4gKi9cbiAgICBwb2ludEZyb21QaXhlbChwOiBPc2RYWSk6IE9zZFhZO1xuICAgIHpvb21CeShmYWN0b3I6IG51bWJlciwgcmVmUG9pbnQ/OiBPc2RYWSk6IHVua25vd247XG4gICAgYXBwbHlDb25zdHJhaW50cyhpbW1lZGlhdGVseT86IGJvb2xlYW4pOiB1bmtub3duO1xuICB9O1xuICB3b3JsZDoge1xuICAgIGdldEl0ZW1Db3VudCgpOiBudW1iZXI7XG4gICAgLyoqIGB1bmRlZmluZWRgIHBhc3QgdGhlIGVuZCBvZiB0aGUgd29ybGQgKE9TRCByZXR1cm5zIGl0IGF0IHJ1bnRpbWUpLiAqL1xuICAgIGdldEl0ZW1BdChpbmRleDogbnVtYmVyKTogT3NkVGlsZWRJbWFnZUxpa2UgfCB1bmRlZmluZWQ7XG4gICAgLyoqIC0xIHdoZW4gdGhlIGl0ZW0gaXMgbm8gbG9uZ2VyIGluIHRoZSB3b3JsZCAoZXZpY3RlZCAvIHJlbW92ZWQpLiAqL1xuICAgIGdldEluZGV4T2ZJdGVtKGl0ZW06IE9zZFRpbGVkSW1hZ2VMaWtlKTogbnVtYmVyO1xuICAgIHJlbW92ZUl0ZW0oaXRlbTogT3NkVGlsZWRJbWFnZUxpa2UpOiB2b2lkO1xuICB9O1xuICAvKiogUXVldWUgYSB0aWxlZCBpbWFnZSBpbnRvIHRoZSB3b3JsZDsgYHN1Y2Nlc3NgIGZpcmVzIG9uY2UgaXQgaXMgYWRkZWQgKG5vdFxuICAgKiAgb25jZSBpdHMgdGlsZXMgaGF2ZSBsb2FkZWQpLiAqL1xuICBhZGRUaWxlZEltYWdlKG9wdGlvbnM6IE9zZEFkZFRpbGVkSW1hZ2VPcHRpb25zKTogdm9pZDtcbiAgYWRkSGFuZGxlcihldmVudDogT3NkVmlld2VyRXZlbnROYW1lLCBoYW5kbGVyOiAoKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgcmVtb3ZlSGFuZGxlcihldmVudDogT3NkVmlld2VyRXZlbnROYW1lLCBoYW5kbGVyOiAoKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgLyoqIE9TRCdzIG93biBwYW4vem9vbSAoZHJhZyArIHdoZWVsKTsgcmVnaW9uIHRvb2xzIHN3aXRjaCBpdCBvZmYuICovXG4gIHNldE1vdXNlTmF2RW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdW5rbm93bjtcbiAgaXNNb3VzZU5hdkVuYWJsZWQoKTogYm9vbGVhbjtcbn1cblxuLyoqIEEgcG9pbnQgaW4gYW55IE9TRCBzcGFjZSAodmlld2VyLWVsZW1lbnQgcHgsIHZpZXdwb3J0IHVuaXRzIG9yIGltYWdlIHB4IOKAlFxuICogIHRoZSBtZXRob2QgaXQgY29tZXMgZnJvbSBzYXlzIHdoaWNoKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3NkWFkge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbn1cblxuLyoqIEFuIGF4aXMtYWxpZ25lZCByZWN0YW5nbGUsIGluIHRoZSBzcGFjZSBvZiB0aGUgbWV0aG9kIHRoYXQgcHJvZHVjZWQgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIE9zZFJlY3RMaWtlIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vKiogVGhlIG1lbWJlcnMgb2YgYW4gT1NEIGBUaWxlZEltYWdlYCAob25lIHdvcmxkIGl0ZW06IGFuIGltYWdlLCBhIHN0YWNrIHNsaWNlXG4gKiAgb3Igb25lIGNoYW5uZWwgbGF5ZXIpIHRoZSBoZWxwZXJzIHVzZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3NkVGlsZWRJbWFnZUxpa2Uge1xuICB2aWV3cG9ydFRvSW1hZ2VDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICBpbWFnZVRvVmlld3BvcnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICBpbWFnZVRvVmlld3BvcnRSZWN0YW5nbGUocjogT3BlblNlYWRyYWdvbi5SZWN0KTogT3BlblNlYWRyYWdvbi5SZWN0O1xuICB2aWV3cG9ydFRvSW1hZ2VSZWN0YW5nbGUocjogT3NkUmVjdExpa2UpOiBPc2RSZWN0TGlrZTtcbiAgc2V0T3BhY2l0eShvcGFjaXR5OiBudW1iZXIpOiB2b2lkO1xuICAvKiogRmFsc2Ugd2hpbGUgYW55IG9mIHRoZSBpbWFnZSdzIHRpbGVzIGFyZSBzdGlsbCBsb2FkaW5nLiAqL1xuICBnZXRGdWxseUxvYWRlZCgpOiBib29sZWFuO1xuICAvKiogUmUtcnVuIHRoZSB0aWxlIHBpcGVsaW5lIChyZXN0b3JlICsgcmUtcHJvY2VzcykgZm9yIHRoaXMgaW1hZ2UncyB0aWxlcztcbiAgICogIHRpbGVzIGFscmVhZHkgc3RhbXBlZCBhdCBgPj0gdFN0YW1wYCBhcmUgc2tpcHBlZC4gT3B0aW9uYWw6IHRoZSBzbGljZVxuICAgKiAgY2FjaGUgZmVhdHVyZS10ZXN0cyBpdC4gKi9cbiAgcmVxdWVzdEludmFsaWRhdGU/KHJlc3RvcmVUaWxlcz86IGJvb2xlYW4sIHZpZXdwb3J0T25seT86IGJvb2xlYW4sIHRTdGFtcD86IG51bWJlcik6IHVua25vd247XG59XG5cbi8qKiBUaGUgYGFkZFRpbGVkSW1hZ2VgIG9wdGlvbnMgdGhlIHNsaWNlIGNhY2hlIHBhc3Nlcy4gSW1hZ2UgcGxhY2VtZW50IGlzIGluXG4gKiAgdmlld3BvcnQgdW5pdHMgKGB3aWR0aDogMWAgPSB0aGUgcHJpbWFyeSBpbWFnZSdzIG5vcm1hbGl6ZWQgd2lkdGgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPc2RBZGRUaWxlZEltYWdlT3B0aW9ucyB7XG4gIHRpbGVTb3VyY2U6IHN0cmluZyB8IG9iamVjdDtcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbiAgd2lkdGg/OiBudW1iZXI7XG4gIG9wYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBMb2FkIHRpbGVzIGV2ZW4gd2hpbGUgaGlkZGVuIChvcGFjaXR5IDApLiAqL1xuICBwcmVsb2FkPzogYm9vbGVhbjtcbiAgLyoqIENhbnZhcyBjb21wb3NpdGUgb3BlcmF0aW9uLCBlLmcuIGAnbGlnaHRlcidgIGZvciBhZGRpdGl2ZSBjaGFubmVscy4gKi9cbiAgY29tcG9zaXRlT3BlcmF0aW9uPzogc3RyaW5nO1xuICAvKiogRmlyZXMgb25jZSB0aGUgaW1hZ2UgaXMgaW4gdGhlIHdvcmxkLiBPU0QgdHlwZXMgdGhlIHBheWxvYWQgYXMgYSBET01cbiAgICogIGBFdmVudGA7IGF0IHJ1bnRpbWUgaXQgY2FycmllcyB0aGUgYWRkZWQgYGl0ZW1gLiAqL1xuICBzdWNjZXNzPyhldmVudDogRXZlbnQgJiB7IGl0ZW0/OiBPc2RUaWxlZEltYWdlTGlrZSB9KTogdm9pZDtcbiAgZXJyb3I/KCk6IHZvaWQ7XG59XG5cbi8qKiBUaGUgdmlld2VyIGV2ZW50cyB0aGUgaGVscGVycyBzdWJzY3JpYmUgdG8uICovXG5leHBvcnQgdHlwZSBPc2RWaWV3ZXJFdmVudE5hbWUgPSAndXBkYXRlLXZpZXdwb3J0JyB8ICdhbmltYXRpb24nIHwgJ3Jlc2l6ZScgfCAncm90YXRlJztcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLXZpZXdlci1saWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvb3NkL29zZC12aWV3ZXItbGlrZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBPcGVuU2VhZHJhZ29uIGZyb20gJ29wZW5zZWFkcmFnb24nO1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBhbiBPcGVuU2VhZHJhZ29uIGBWaWV3ZXJgIHRoYXQgdGhlIE9TRCBoZWxwZXJzIChvc2QtY29vcmRzLCB0aGVcbiAqIGNvb3JkaW5hdGUgdHJhbnNmb3JtLCB0aGUgc2NhbGUgYmFyLCB0aGUgcmVnaW9uIG92ZXJsYXkgYW5kIHRoZSBzbGljZSBjYWNoZSlcbiAqIGFjdHVhbGx5IHVzZSDigJQgYW5kIG5vdGhpbmcgbW9yZSAoT1NELVBMT1RMWS0yNykuXG4gKlxuICogVGhlIHJlYWwgYE9wZW5TZWFkcmFnb24uVmlld2VyYCBpcyBhc3NpZ25hYmxlIHRvIGl0IGFzIGlzLCBzbyB0aGUgc2VydmljZVxuICogcGFzc2VzIGl0cyB2aWV3ZXIgc3RyYWlnaHQgdGhyb3VnaDsgdGhlIHNwZWNzIGJ1aWxkIGEgc21hbGwgZmFrZSAoc2VlXG4gKiBgdGVzdGluZy9mYWtlLW9zZC12aWV3ZXIudHNgKSBpbnN0ZWFkIG9mIGNhc3RpbmcgYSBwYXJ0aWFsIG9iamVjdC4gUG9pbnRzIGFuZFxuICogcmVjdGFuZ2xlcyBhcmUgc3RydWN0dXJhbCB3aGVyZSB0aGUgaGVscGVycyBvbmx5IHJlYWQgYHhgL2B5YC9gd2lkdGhgL2BoZWlnaHRgO1xuICogYE9wZW5TZWFkcmFnb24uUmVjdGAgaXMga2VwdCBvbmx5IHdoZXJlIHRoZSByZXN1bHQgZ29lcyBiYWNrIGludG8gT1NEXG4gKiAoYGltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZWAg4oaSIGB2aWV3cG9ydC5maXRCb3VuZHNgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPc2RWaWV3ZXJMaWtlIHtcbiAgLyoqIFRoZSBlbGVtZW50IE9TRCBkcmF3cyBpbnRvOyBvdmVybGF5cyAoc2NhbGUgYmFyLCByZWdpb24gU1ZHKSBhcmUgYXBwZW5kZWRcbiAgICogIGhlcmUgYW5kIGl0cyBjbGllbnQgcmVjdCBhbmNob3JzIGNsaWVudOKGlGVsZW1lbnQgY29udmVyc2lvbnMuICovXG4gIGNhbnZhczogSFRNTEVsZW1lbnQ7XG4gIC8qKiBUaGUgdmlld2VyJ3Mgcm9vdCBlbGVtZW50IChhbiBhbmNlc3RvciBvZiB0aGUgY2FudmFzIGFuZCBvZiB0aGUgdG9vbFxuICAgKiAgb3ZlcmxheXMpIOKAlCB0aGUgd2hlZWwtem9vbSBsaXN0ZW5lciBpcyBib3VuZCBoZXJlLiAqL1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgdmlld3BvcnQ6IHtcbiAgICB2aWV3ZXJFbGVtZW50VG9WaWV3cG9ydENvb3JkaW5hdGVzKHA6IE9zZFhZKTogT3NkWFk7XG4gICAgdmlld3BvcnRUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICAgIC8qKiBJbWFnZSBjb252ZXJzaW9ucyBvbiB0aGUgdmlld3BvcnQg4oCUIGFtYmlndW91cyBvbmNlIHRoZSB3b3JsZCBob2xkc1xuICAgICAqICBzZXZlcmFsIGltYWdlczsgdXNlZCBvbmx5IGFzIHRoZSBlbXB0eS13b3JsZCBmYWxsYmFjay4gKi9cbiAgICB2aWV3ZXJFbGVtZW50VG9JbWFnZUNvb3JkaW5hdGVzKHA6IE9zZFhZKTogT3NkWFk7XG4gICAgaW1hZ2VUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwOiBPc2RYWSk6IE9zZFhZO1xuICAgIGltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZShyOiBPcGVuU2VhZHJhZ29uLlJlY3QpOiBPcGVuU2VhZHJhZ29uLlJlY3Q7XG4gICAgdmlld3BvcnRUb0ltYWdlUmVjdGFuZ2xlKHI6IE9zZFJlY3RMaWtlKTogT3NkUmVjdExpa2U7XG4gICAgLyoqIFZpZXdlci1lbGVtZW50IHBpeGVsIOKGkiB2aWV3cG9ydCBwb2ludCAodGhlIHdoZWVsLXpvb20gYW5jaG9yKS4gKi9cbiAgICBwb2ludEZyb21QaXhlbChwOiBPc2RYWSk6IE9zZFhZO1xuICAgIHpvb21CeShmYWN0b3I6IG51bWJlciwgcmVmUG9pbnQ/OiBPc2RYWSk6IHVua25vd247XG4gICAgYXBwbHlDb25zdHJhaW50cyhpbW1lZGlhdGVseT86IGJvb2xlYW4pOiB1bmtub3duO1xuICB9O1xuICB3b3JsZDoge1xuICAgIGdldEl0ZW1Db3VudCgpOiBudW1iZXI7XG4gICAgLyoqIGB1bmRlZmluZWRgIHBhc3QgdGhlIGVuZCBvZiB0aGUgd29ybGQgKE9TRCByZXR1cm5zIGl0IGF0IHJ1bnRpbWUpLiAqL1xuICAgIGdldEl0ZW1BdChpbmRleDogbnVtYmVyKTogT3NkVGlsZWRJbWFnZUxpa2UgfCB1bmRlZmluZWQ7XG4gICAgLyoqIC0xIHdoZW4gdGhlIGl0ZW0gaXMgbm8gbG9uZ2VyIGluIHRoZSB3b3JsZCAoZXZpY3RlZCAvIHJlbW92ZWQpLiAqL1xuICAgIGdldEluZGV4T2ZJdGVtKGl0ZW06IE9zZFRpbGVkSW1hZ2VMaWtlKTogbnVtYmVyO1xuICAgIHJlbW92ZUl0ZW0oaXRlbTogT3NkVGlsZWRJbWFnZUxpa2UpOiB2b2lkO1xuICB9O1xuICAvKiogUXVldWUgYSB0aWxlZCBpbWFnZSBpbnRvIHRoZSB3b3JsZDsgYHN1Y2Nlc3NgIGZpcmVzIG9uY2UgaXQgaXMgYWRkZWQgKG5vdFxuICAgKiAgb25jZSBpdHMgdGlsZXMgaGF2ZSBsb2FkZWQpLiAqL1xuICBhZGRUaWxlZEltYWdlKG9wdGlvbnM6IE9zZEFkZFRpbGVkSW1hZ2VPcHRpb25zKTogdm9pZDtcbiAgYWRkSGFuZGxlcihldmVudDogT3NkVmlld2VyRXZlbnROYW1lLCBoYW5kbGVyOiAoKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgcmVtb3ZlSGFuZGxlcihldmVudDogT3NkVmlld2VyRXZlbnROYW1lLCBoYW5kbGVyOiAoKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgLyoqIE9TRCdzIG93biBwYW4vem9vbSAoZHJhZyArIHdoZWVsKTsgcmVnaW9uIHRvb2xzIHN3aXRjaCBpdCBvZmYuICovXG4gIHNldE1vdXNlTmF2RW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdW5rbm93bjtcbiAgaXNNb3VzZU5hdkVuYWJsZWQoKTogYm9vbGVhbjtcbiAgLyoqIE9TRCdzIHRpbGUgcmVxdWVzdCBxdWV1ZTogdGhlIGpvYnMgbm90IHN0YXJ0ZWQgeWV0IChzZWUgT3NkUXVldWVkVGlsZUpvYikuICovXG4gIGltYWdlTG9hZGVyPzogeyBqb2JRdWV1ZT86IHVua25vd25bXSB9O1xufVxuXG4vKiogQSB0aWxlIHJlcXVlc3Qgd2FpdGluZyBpbiBPU0QncyBxdWV1ZTogYGFib3J0YCAoYmVmb3JlIGl0IHN0YXJ0cykgb25seSBtYXJrcyB0aGUgdGlsZSBhc1xuICogIG5vdCBsb2FkaW5nLCBzbyBpdCBpcyByZXF1ZXN0ZWQgYWdhaW4gd2hlbiBpdCBpcyBuZWVkZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIE9zZFF1ZXVlZFRpbGVKb2Ige1xuICB0aWxlPzogeyB0aWxlZEltYWdlPzogdW5rbm93biB9O1xuICBhYm9ydD86ICgpID0+IHZvaWQ7XG59XG5cbi8qKiBBIHBvaW50IGluIGFueSBPU0Qgc3BhY2UgKHZpZXdlci1lbGVtZW50IHB4LCB2aWV3cG9ydCB1bml0cyBvciBpbWFnZSBweCDigJRcbiAqICB0aGUgbWV0aG9kIGl0IGNvbWVzIGZyb20gc2F5cyB3aGljaCkuICovXG5leHBvcnQgaW50ZXJmYWNlIE9zZFhZIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG5cbi8qKiBBbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBpbiB0aGUgc3BhY2Ugb2YgdGhlIG1ldGhvZCB0aGF0IHByb2R1Y2VkIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPc2RSZWN0TGlrZSB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBtZW1iZXJzIG9mIGFuIE9TRCBgVGlsZWRJbWFnZWAgKG9uZSB3b3JsZCBpdGVtOiBhbiBpbWFnZSwgYSBzdGFjayBzbGljZVxuICogIG9yIG9uZSBjaGFubmVsIGxheWVyKSB0aGUgaGVscGVycyB1c2UuICovXG5leHBvcnQgaW50ZXJmYWNlIE9zZFRpbGVkSW1hZ2VMaWtlIHtcbiAgdmlld3BvcnRUb0ltYWdlQ29vcmRpbmF0ZXMocDogT3NkWFkpOiBPc2RYWTtcbiAgaW1hZ2VUb1ZpZXdwb3J0Q29vcmRpbmF0ZXMocDogT3NkWFkpOiBPc2RYWTtcbiAgaW1hZ2VUb1ZpZXdwb3J0UmVjdGFuZ2xlKHI6IE9wZW5TZWFkcmFnb24uUmVjdCk6IE9wZW5TZWFkcmFnb24uUmVjdDtcbiAgdmlld3BvcnRUb0ltYWdlUmVjdGFuZ2xlKHI6IE9zZFJlY3RMaWtlKTogT3NkUmVjdExpa2U7XG4gIHNldE9wYWNpdHkob3BhY2l0eTogbnVtYmVyKTogdm9pZDtcbiAgLyoqIExvYWQgdGlsZXMgZXZlbiB3aGlsZSBoaWRkZW4gKG9wYWNpdHkgMCk7IHdpdGhvdXQgaXQgYSBoaWRkZW4gaXRlbSBsb2FkcyBub3RoaW5nLiAqL1xuICBzZXRQcmVsb2FkPyhwcmVsb2FkOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIEZhbHNlIHdoaWxlIGFueSBvZiB0aGUgaW1hZ2UncyB0aWxlcyBhcmUgc3RpbGwgbG9hZGluZy4gKi9cbiAgZ2V0RnVsbHlMb2FkZWQoKTogYm9vbGVhbjtcbiAgLyoqIFJlLXJ1biB0aGUgdGlsZSBwaXBlbGluZSAocmVzdG9yZSArIHJlLXByb2Nlc3MpIGZvciB0aGlzIGltYWdlJ3MgdGlsZXM7XG4gICAqICB0aWxlcyBhbHJlYWR5IHN0YW1wZWQgYXQgYD49IHRTdGFtcGAgYXJlIHNraXBwZWQuIE9wdGlvbmFsOiB0aGUgc2xpY2VcbiAgICogIGNhY2hlIGZlYXR1cmUtdGVzdHMgaXQuICovXG4gIHJlcXVlc3RJbnZhbGlkYXRlPyhyZXN0b3JlVGlsZXM/OiBib29sZWFuLCB2aWV3cG9ydE9ubHk/OiBib29sZWFuLCB0U3RhbXA/OiBudW1iZXIpOiB1bmtub3duO1xufVxuXG4vKiogVGhlIGBhZGRUaWxlZEltYWdlYCBvcHRpb25zIHRoZSBzbGljZSBjYWNoZSBwYXNzZXMuIEltYWdlIHBsYWNlbWVudCBpcyBpblxuICogIHZpZXdwb3J0IHVuaXRzIChgd2lkdGg6IDFgID0gdGhlIHByaW1hcnkgaW1hZ2UncyBub3JtYWxpemVkIHdpZHRoKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3NkQWRkVGlsZWRJbWFnZU9wdGlvbnMge1xuICB0aWxlU291cmNlOiBzdHJpbmcgfCBvYmplY3Q7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBvcGFjaXR5PzogbnVtYmVyO1xuICAvKiogTG9hZCB0aWxlcyBldmVuIHdoaWxlIGhpZGRlbiAob3BhY2l0eSAwKS4gKi9cbiAgcHJlbG9hZD86IGJvb2xlYW47XG4gIC8qKiBDYW52YXMgY29tcG9zaXRlIG9wZXJhdGlvbiwgZS5nLiBgJ2xpZ2h0ZXInYCBmb3IgYWRkaXRpdmUgY2hhbm5lbHMuICovXG4gIGNvbXBvc2l0ZU9wZXJhdGlvbj86IHN0cmluZztcbiAgLyoqIEZpcmVzIG9uY2UgdGhlIGltYWdlIGlzIGluIHRoZSB3b3JsZC4gT1NEIHR5cGVzIHRoZSBwYXlsb2FkIGFzIGEgRE9NXG4gICAqICBgRXZlbnRgOyBhdCBydW50aW1lIGl0IGNhcnJpZXMgdGhlIGFkZGVkIGBpdGVtYC4gKi9cbiAgc3VjY2Vzcz8oZXZlbnQ6IEV2ZW50ICYgeyBpdGVtPzogT3NkVGlsZWRJbWFnZUxpa2UgfSk6IHZvaWQ7XG4gIGVycm9yPygpOiB2b2lkO1xufVxuXG4vKiogVGhlIHZpZXdlciBldmVudHMgdGhlIGhlbHBlcnMgc3Vic2NyaWJlIHRvLiAqL1xuZXhwb3J0IHR5cGUgT3NkVmlld2VyRXZlbnROYW1lID0gJ3VwZGF0ZS12aWV3cG9ydCcgfCAnYW5pbWF0aW9uJyB8ICdyZXNpemUnIHwgJ3JvdGF0ZSc7XG4iXX0=