@jax-data-science/sci-image-visualizer 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +19 -1
- package/esm2022/lib/contracts/display-types.mjs +7 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +1 -1
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +17 -2
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +88 -10
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +62 -13
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +21 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +5 -1
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +4 -1
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +26 -3
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +3 -2
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +20 -4
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +4 -2
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +4 -2
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +42 -15
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +3 -1
- package/esm2022/lib/spatial/lod.mjs +6 -3
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +8 -3
- package/esm2022/lib/spatial/spatial-gene-filter.mjs +138 -0
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +42 -1
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +4 -3
- package/esm2022/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.mjs +66 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +106 -26
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +110 -8
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +41 -9
- package/esm2022/lib/store/visualizer-store.service.mjs +50 -1
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DURPqs5a.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs} +1064 -318
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D0IQ6PjZ.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs} +2 -2
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D0IQ6PjZ.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +1 -1
- package/lib/contracts/channel-histogram-api.contract.d.ts +14 -0
- package/lib/contracts/display-types.d.ts +27 -0
- package/lib/contracts/image.contract.d.ts +2 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +7 -0
- package/lib/contracts/visualizer.contract.d.ts +3 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +7 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +13 -2
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +5 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +4 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +2 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +6 -1
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +4 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +3 -1
- package/lib/spatial/lod.d.ts +3 -1
- package/lib/spatial/spatial-controls.facade.d.ts +3 -0
- package/lib/spatial/spatial-gene-filter.d.ts +44 -0
- package/lib/spatial/spatial-tile-merge.d.ts +17 -0
- package/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.d.ts +30 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +39 -7
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +33 -1
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +13 -1
- package/lib/store/visualizer-store.service.d.ts +13 -0
- package/package.json +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DURPqs5a.mjs.map +0 -1
|
@@ -316,6 +316,8 @@ export class OpenSeadragonVisualizerService extends BaseStoreVisualizer {
|
|
|
316
316
|
// authoritative — push it into the shared meta so the Region Editor reports
|
|
317
317
|
// areas in µm²/mm², matching the scale bar built from `d.mppX` below.
|
|
318
318
|
this.store.setPhysicalPixelSize(d.mppX, d.mppY);
|
|
319
|
+
// Its channel names and tints too, which a host's image meta may not carry.
|
|
320
|
+
this.store.adoptChannelInfo(d.channelInfo);
|
|
319
321
|
// Use the SAME grayscale flag the colormap dropdown / Plotly use
|
|
320
322
|
// (imageInfo.isGrayscale ← rgbChannels === 1). The descriptor's `channels`
|
|
321
323
|
// (channelCount) diverges from rgbChannels for stacks, which left grayscale
|
|
@@ -762,4 +764,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
762
764
|
type: Inject,
|
|
763
765
|
args: [VIZ_CONFIG]
|
|
764
766
|
}] }] });
|
|
765
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnNlYWRyYWdvbi12aXN1YWxpemVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9vc2Qvb3BlbnNlYWRyYWdvbi12aXN1YWxpemVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9ELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBc0IsTUFBTSwyQkFBMkIsQ0FBQztBQVVoRyxPQUFPLEVBQXNCLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFFTCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGFBQWEsRUFDYixjQUFjLEVBQ2QsY0FBYyxFQUNkLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDOUYsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUV6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7O0FBRXBDLHlFQUF5RTtBQUN6RSxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUU3Qyw4RUFBOEU7QUFDOUUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQWlCO0lBQzVDLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLGFBQWE7SUFDYixVQUFVO0lBQ1YsYUFBYTtJQUNiLE1BQU07SUFDTixRQUFRO0NBQ1QsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsTUFBTSxPQUFPLDhCQUErQixTQUFRLG1CQUFtQjtJQTZHckUsWUFDVSxJQUFnQixFQUNVLEtBQXFCLEVBQ3ZELFdBQXdCLEVBQ2hCLE9BQXVCLEVBQ3ZCLFlBQWlDLEVBQ2pDLGVBQXVDLEVBQ0gsYUFBb0MsRUFDaEYsS0FBc0IsRUFDdEIsV0FBd0IsRUFDaEIsV0FBcUMsRUFDekIsTUFBaUI7UUFFckMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQVpsQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ1UsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFFL0MsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUNILGtCQUFhLEdBQWIsYUFBYSxDQUF1QjtRQUd4RSxnQkFBVyxHQUFYLFdBQVcsQ0FBMEI7UUF0SC9DLCtFQUErRTtRQUN0RSxpQkFBWSxHQUF1QixjQUFjLENBQUMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUdqRixXQUFNLEdBQWdDLElBQUksQ0FBQztRQUMzQyxZQUFPLEdBQTBCLElBQUksQ0FBQztRQUN0QyxhQUFRLEdBQXVCLElBQUksQ0FBQztRQUM1QywyREFBMkQ7UUFDbkQsZ0JBQVcsR0FBMEIsSUFBSSxDQUFDO1FBQzFDLGVBQVUsR0FBMEIsSUFBSSxDQUFDO1FBQ2pEO21FQUMyRDtRQUNuRCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLG1CQUFjLEdBQWtDLElBQUksQ0FBQztRQUs3RDsyREFDbUQ7UUFDM0MsbUJBQWMsR0FBMkIsSUFBSSxDQUFDO1FBQ3REOzBEQUNrRDtRQUMxQyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBR3JCLCtFQUErRTtRQUN2RSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDakM7b0ZBQzRFO1FBQ3BFLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQy9COztpRUFFeUQ7UUFDakQsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUN2QjtvRkFDNEU7UUFDcEUsZ0JBQVcsR0FBMkIsRUFBRSxDQUFDO1FBQ2pEO3dDQUNnQztRQUNmLFdBQU0sR0FBRyxJQUFJLGtCQUFrQixDQUFDO1lBQy9DLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUN6QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU87U0FDNUIsQ0FBQyxDQUFDO1FBRUg7Ozs2RkFHcUY7UUFDcEUsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUztRQUV2RDs7eUZBRWlGO1FBQ2hFLFlBQU8sR0FBcUIsSUFBSSxnQkFBZ0IsQ0FDL0Q7WUFDRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDekIsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDeEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQ3pDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUNwRCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDN0Isa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQzNELHdCQUF3QixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztZQUN2RSxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7U0FDbkUsRUFDRCxJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7UUFFRjtnQ0FDd0I7UUFDUCxXQUFNLEdBQW9CLElBQUksZUFBZSxDQUM1RDtZQUNFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUN6QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDakMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDeEMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQzdCLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxpQ0FBaUM7WUFDL0QsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTztZQUMzQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQ25DLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1lBQ3RELGdCQUFnQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDMUQsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtTQUM1RCxFQUNELElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7UUFNRixpRUFBaUU7UUFDaEQsVUFBSyxHQUFlLElBQUksVUFBVSxDQUFDO1lBQ2xELE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUN6QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDekMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQzdCLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYztZQUN6QyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEcsY0FBYyxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSztZQUMvRSxlQUFlLEVBQUUsQ0FBQyxDQUFTLEVBQUUsT0FBZ0IsRUFBRSxFQUFFLENBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUM7WUFDbEUscUJBQXFCLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN6RyxDQUFDLENBQUM7UUFzRGMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyRTsyREFDbUQ7UUFDbEMsYUFBUSxHQUFHLElBQUksa0JBQWtCLENBQUM7WUFDakQsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ3pCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNqQyxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDekMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1NBQ25ELENBQUMsQ0FBQztRQTRaYyxtQkFBYyxHQUE2QjtZQUMxRCxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUU7U0FDdkUsQ0FBQztRQU1lLGdCQUFXLEdBQW9CO1lBQzlDLG1CQUFtQixFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1lBQ25FLHdCQUF3QixFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDO1NBQzlFLENBQUM7UUFyZEEsOEVBQThFO1FBQzlFLDhFQUE4RTtRQUM5RSxrRkFBa0Y7UUFDbEYsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUMvQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUM3RCxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDakQsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDeEMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3JELHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFzQztZQUN6RSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFDdkMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQ3JELGdGQUFnRjtZQUNoRixXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzdELGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1NBQ2pFLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDeEQsV0FBVztZQUNYLFdBQVc7WUFDWCxRQUFRLEVBQUUsWUFBWTtTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN2RCxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDakMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUMzRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUN4Qyx5RUFBeUU7WUFDekUsbURBQW1EO1lBQ25ELDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hHLDBFQUEwRTtZQUMxRSwyRUFBMkU7WUFDM0UsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUTtvQkFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakUsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBV0QsMEVBQTBFO0lBQzFFLHVFQUF1RTtJQUN2RSwrRUFBK0U7SUFFL0Usd0VBQXdFO0lBRXhFOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFxQixFQUFFLE1BQWMsRUFBRSxNQUFvQjtRQUNwRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsU0FBUyxFQUFFLFFBQVEsQ0FBQztRQUNyQyx3RUFBd0U7UUFDeEUsMEVBQTBFO1FBQzFFLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsMkVBQTJFO1FBQzNFLDhFQUE4RTtRQUM5RSxzREFBc0Q7UUFDdEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUVqRixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQyxpREFBaUQ7UUFDMUUsQ0FBQztRQUNELGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2Qiw0RUFBNEU7UUFDNUUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsNkNBQTZDO1FBQzdDLEVBQUU7UUFDRiw2RUFBNkU7UUFDN0UsOEVBQThFO1FBQzlFLDRFQUE0RTtRQUM1RSxvQ0FBb0M7UUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNqRyxVQUFVLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUNuQyxVQUFVLEVBQUUsK0JBQStCO1lBQzNDLE1BQU07WUFDTixHQUFHLEVBQUUsT0FBTztTQUNiLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzNELENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsSUFBSSxDQUNGLE9BQWUsRUFDZixXQUFnQixFQUNoQixTQUFxQixFQUNyQixhQUFxQixFQUNyQixTQUFtQixFQUNuQixPQUFpQjtRQUVqQixNQUFNLE1BQU0sR0FBRyxXQUF3QixDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sRUFBRSxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsdUVBQXVFO1FBQ3ZFLDBFQUEwRTtRQUMxRSw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xDLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsa0VBQWtFO1FBQ2xFLHFFQUFxRTtRQUNyRSxzRUFBc0U7UUFDdEUsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQywyQ0FBMkM7UUFDbEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLEVBQUUsUUFBUSxDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLDZFQUE2RTtRQUM3RSw0RUFBNEU7UUFDNUUsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsaUVBQWlFO1FBQ2pFLDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsbUVBQW1FO1FBQ25FLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztRQUNqRCw2RUFBNkU7UUFDN0Usd0VBQXdFO1FBQ3hFLDJEQUEyRDtRQUMzRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQiwyRUFBMkU7WUFDM0UscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sd0VBQXdFO1lBQ3hFLHlFQUF5RTtZQUN6RSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsNEVBQTRFO1lBQzVFLDJFQUEyRTtZQUMzRSw0RUFBNEU7WUFDNUUsNEVBQTRFO1lBQzVFLHVFQUF1RTtZQUN2RSwyRUFBMkU7WUFDM0UsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0UsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUNELHVFQUF1RTtZQUN2RSwwRUFBMEU7WUFDMUUsK0VBQStFO1lBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLDhFQUE4RTtRQUM5RSwrRUFBK0U7UUFDL0UsMkVBQTJFO1FBQzNFLE1BQU0sVUFBVSxHQUFHLE1BQU07WUFDdkIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0YsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUM7WUFDakMsRUFBRSxFQUFFLE9BQU87WUFDWCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtZQUM5QyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDdkMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ2pDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQ7O3NCQUVrQjtJQUNWLGNBQWMsQ0FBQyxNQUE0QixFQUFFLENBQWlCLEVBQUUsTUFBZSxFQUFFLE9BQWU7UUFDdEcsc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSwrREFBK0Q7UUFDL0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBb0UsQ0FBQyxDQUFDO1FBQzVHLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCwyRUFBMkU7WUFDM0UsMEVBQTBFO1lBQzFFLG9EQUFvRDtZQUNwRCxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUcsQ0FBMEIsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCx3RUFBd0U7UUFDeEUsc0VBQXNFO1FBQ3RFLE1BQU0sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsK0VBQStFO1FBQy9FLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLHdFQUF3RTtRQUN4RSx5RUFBeUU7UUFDekUsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUN4Rix5RUFBeUU7UUFDekUsMEVBQTBFO1FBQzFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDaEYsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSxNQUFNLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDttRkFDK0U7SUFDdkUsZUFBZSxDQUNyQixDQUFpQixFQUNqQixPQUFlLEVBQ2YsQ0FBUyxFQUNULE9BQWdCO1FBRWhCLE9BQU8sa0JBQWtCLENBQUMsQ0FBQyxFQUFFO1lBQzNCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLE9BQU87WUFDUCxDQUFDO1lBQ0QsT0FBTztZQUNQLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2xFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLGdGQUFnRjtRQUNoRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxLQUFLLFdBQVc7WUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBb0I7UUFDeEMsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBdUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxhQUFhO1FBQ1gscURBQXFEO0lBQ3ZELENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELFFBQVEsQ0FBQyxjQUF5QjtRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUNELFNBQVM7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsTUFBTTtRQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQW9CO1FBQzlCLHlFQUF5RTtRQUN6RSx5RUFBeUU7UUFDekUsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQW1CO1FBQzlCLDJEQUEyRDtJQUM3RCxDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLG1CQUFtQixDQUFDLE9BQWdCO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHFGQUFxRjtJQUNyRix3QkFBd0IsQ0FBQyxPQUFnQjtRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsU0FBUyxDQUFDLE1BQWM7UUFDdEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLGtDQUFrQztRQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxZQUFxQjtRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsdUJBQXVCO1FBQ3JCLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsd0VBQXdFO0lBQ3hGLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkcsQ0FBQztJQUNELGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCO1FBQ25CLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDsyRkFDdUY7SUFDdkYsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O2dEQUc0QztJQUM1QyxhQUFhO1FBQ1gsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFtQjtRQUM3QixxQ0FBcUM7SUFDdkMsQ0FBQztJQUNELGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsNkJBQTZCO0lBQy9CLENBQUM7SUFDRCxrQkFBa0I7UUFDaEIsNkJBQTZCO0lBQy9CLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsaUJBQWlCO1FBQ2YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7c0ZBQ2tGO0lBQ2xGLG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUtELDJFQUEyRTtJQUMzRSxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQU1ELDhCQUE4QjtJQUM5QixtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7d0ZBQ29GO0lBQ3BGLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHNCQUFzQjtRQUNwQixPQUFPLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxzRUFBc0U7SUFDdEUseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsbURBQW1EO0lBRW5ELHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUsK0RBQStEO0lBRS9EOzs7Ozs7T0FNRztJQUNnQixnQkFBZ0IsQ0FBQyxJQUF5QjtRQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFdBQVc7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDtxRUFDaUU7SUFDakUsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxnREFBZ0Q7UUFDNUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyw2Q0FBNkM7UUFDekUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsV0FBVyxDQUFDLEVBQVU7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELCtFQUErRTtJQUN2RSxtQkFBbUI7UUFDekIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JFLENBQUM7SUFFRDtrRUFDOEQ7SUFDdEQsZ0JBQWdCO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7d0RBRW9EO0lBQ3BELFlBQVksQ0FBQyxZQUFvQixFQUFFLEtBQWE7UUFDOUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCwrRUFBK0U7SUFDdkUsZUFBZSxDQUFDLFlBQW9CO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQUMsWUFBb0IsRUFBRSxJQUFZO1FBQzlDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEUsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekYsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJO1lBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGVBQWU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLGtCQUFrQixDQUFDO1lBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ2hCLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYztZQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYTtZQUN6QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1NBQzlCLENBQUMsQ0FBQztRQUNILElBQUksSUFBSTtZQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsc0VBQXNFO0lBQ3RFLHdFQUF3RTtJQUN4RSw0RUFBNEU7SUFDNUUsOENBQThDO0lBRTlDLHdFQUF3RTtJQUN4RSxXQUFXO1FBQ1QsdUVBQXVFO1FBQ3ZFLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7OEdBL3RCVSw4QkFBOEIsNENBK0cvQixnQkFBZ0IsK0lBS0osY0FBYywrSEFJMUIsVUFBVTtrSEF4SFQsOEJBQThCLGNBRGpCLE1BQU07OzJGQUNuQiw4QkFBOEI7a0JBRDFDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFnSDdCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFLdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzswQkFJakMsTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJ2ltYWdlLWpzJztcbmltcG9ydCAqIGFzIE9wZW5TZWFkcmFnb24gZnJvbSAnb3BlbnNlYWRyYWdvbic7XG5pbXBvcnQgeyBidWlsZFZpZXdlck9wdGlvbnMgfSBmcm9tICcuL29wZW5zZWFkcmFnb24tdmlld2VyLW9wdGlvbnMnO1xuaW1wb3J0IHsgY3JlYXRlVmlld2VyLCBvcGVuVmlld2VyIH0gZnJvbSAnLi9vc2Qtdmlld2VyLW1vdW50JztcbmltcG9ydCB7IFZpc3VhbGl6ZXJTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Zpc3VhbGl6ZXItc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBSZWdpb25TdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3JlZ2lvbi1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IElJbWFnZUluZm8gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgVGlsZUFjY2Vzc1BvcnQsIFRJTEVfQUNDRVNTX1BPUlQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcG9ydHMvdGlsZS1hY2Nlc3MucG9ydCc7XG5pbXBvcnQgeyBWaXpDb25maWcsIFZJWl9DT05GSUcgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvdml6LWNvbmZpZyc7XG5pbXBvcnQgeyBQbG90VHlwZSwgUExPVF9UWVBFX0RFU0NSSVBUT1JTLCBQbG90VHlwZURlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcGxvdC10eXBlJztcbmltcG9ydCB7XG4gIElWaWV3ZXJCYWNrZW5kLFxuICBQaXhlbERhdGEsXG4gIElJc29zdXJmYWNlQ29udHJvbHMsXG4gIElJbnRlbnNpdHlDb250cm9scyxcbiAgSVN1cmZhY2UzZENvbnRyb2xzLFxuICBJT3NkVmlld09wdGlvbnMsXG4gIElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSxcbn0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgVmlld2VyQ2FwYWJpbGl0aWVzLCBWaWV3ZXJGZWF0dXJlLCBjYXBhYmlsaXRpZXNPZiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jYXBhYmlsaXRpZXMuY29udHJhY3QnO1xuaW1wb3J0IHsgT3NkUmVnaW9uT3ZlcmxheSB9IGZyb20gJy4vb3NkLXJlZ2lvbi1vdmVybGF5JztcbmltcG9ydCB7IE9zZFRpbGVMb2FkaW5nIH0gZnJvbSAnLi9vc2QtdGlsZS1sb2FkaW5nJztcbmltcG9ydCB7IE9zZFNjYWxlQmFyIH0gZnJvbSAnLi9vc2Qtc2NhbGUtYmFyJztcbmltcG9ydCB7IElSZWdpb25PdmVybGF5LCBSZWdpb25Ub29sTW9kZSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9yZWdpb24tb3ZlcmxheS5jb250cmFjdCc7XG5pbXBvcnQgeyBJQ29vcmRpbmF0ZVRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jb29yZGluYXRlLXRyYW5zZm9ybS5jb250cmFjdCc7XG5pbXBvcnQgeyBPc2RDb29yZGluYXRlVHJhbnNmb3JtIH0gZnJvbSAnLi9vc2QtY29vcmRpbmF0ZS10cmFuc2Zvcm0nO1xuaW1wb3J0IHsgT3NkVmlld3BvcnRBZGFwdGVyIH0gZnJvbSAnLi9vc2Qtdmlld3BvcnQnO1xuaW1wb3J0IHsgT3NkTmF2aWdhdG9yQ2hyb21lIH0gZnJvbSAnLi9vc2QtbmF2aWdhdG9yLWNocm9tZSc7XG5pbXBvcnQgeyBQbG90TW9kZVZpZXdwb3J0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Bsb3QtdHlwZS1jb250cmlidXRpb24uY29udHJhY3QnO1xuaW1wb3J0IHsgZWxlbWVudFRvSW1hZ2UgfSBmcm9tICcuL29zZC1jb29yZHMnO1xuaW1wb3J0IHsgYnVpbGRPc2RUaWxlU291cmNlLCBwbGFuVGlsZWRNb3VudCB9IGZyb20gJy4vb3NkLXRpbGUtc291cmNlJztcbmltcG9ydCB7IFNsaWNlQ2FjaGUgfSBmcm9tICcuL3NsaWNlLWNhY2hlJztcbmltcG9ydCB7IE9zZFRpbGVSZWNvbG9yZXIgfSBmcm9tICcuL3RpbGUtcmVjb2xvcic7XG5pbXBvcnQgeyBPc2RMb2FkZWQsIE9zZFNpbXBsZVNvdXJjZSB9IGZyb20gJy4vc2ltcGxlLXNvdXJjZSc7XG5pbXBvcnQgeyByZWFkRHJhd2VyUGl4ZWxzLCByZWFkYmFja1ZpZXdwb3J0RnJhbWUsIHNhdmVEcmF3ZXJTbmFwc2hvdCB9IGZyb20gJy4vb3NkLXBpeGVsLXJlYWRiYWNrJztcbmltcG9ydCB7IGZldGNoVGlmZkV4cG9ydCwgZmlsZVN0ZW0sIHJlbmRlckNvbXBvc2l0ZVBuZyB9IGZyb20gJy4vb3NkLWV4cG9ydCc7XG5pbXBvcnQgeyBIaXN0b2dyYW1TYW1wbGVyIH0gZnJvbSAnLi9oaXN0b2dyYW0tc2FtcGxlcic7XG5pbXBvcnQge1xuICBUaWxlRGVzY3JpcHRvcixcbiAgZXhwb3J0VGlmZkZpbGVuYW1lLFxuICBleHBvcnRUaWZmVXJsLFxuICBodHRwRmV0Y2hKc29uLFxuICBwb2xsRGVzY3JpcHRvcixcbiAgdGhyb3dJZkFib3J0ZWQsXG4gIHRpbGVzSW5mb1VybCxcbn0gZnJvbSAnLi4vdGlsZS1zZXJ2ZXInO1xuaW1wb3J0IHsgQmFzZVN0b3JlVmlzdWFsaXplciB9IGZyb20gJy4uL2Jhc2Utc3RvcmUtdmlzdWFsaXplcic7XG5pbXBvcnQgeyBDYW52YXNUb29sSWQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgeyBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi9zaW1wbGUtc2xpY2UtYWNjZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FjaGVkSW1hZ2VEYXRhLCBDYW52YXNUb29sSG9zdCB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbC1raXQvY2FudmFzLXRvb2wnO1xuaW1wb3J0IHsgQ2FudmFzVG9vbE1hbmFnZXIgfSBmcm9tICcuLi8uLi90b29sYmFyL3Rvb2wta2l0L2NhbnZhcy10b29sLW1hbmFnZXInO1xuaW1wb3J0IHsgY3JlYXRlQ2FudmFzVG9vbE1hbmFnZXIgfSBmcm9tICcuLi8uLi90b29sYmFyL2NhbnZhcy10b29scyc7XG5pbXBvcnQgeyBXYW5kU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvd2FuZC93YW5kLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FtVG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNhbVBvaW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tcG9pbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxTZWdtZW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9jZWxsLXNlZ21lbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IElDZWxsU2VnbWVudGVyLCBDRUxMX1NFR01FTlRFUiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdCc7XG5pbXBvcnQgeyBJSGlzdG9ncmFtIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NoYW5uZWwtaGlzdG9ncmFtLWFwaS5jb250cmFjdCc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcblxuLyoqIFdhaXQgYmV0d2VlbiB0d28gYC90aWxlcy9pbmZvYCBwb2xscyB3aGlsZSB0aGUgc2VydmVyIGFuc3dlcnMgMjAyLiAqL1xuY29uc3QgT1NEX1RJTEVTX0lORk9fUE9MTF9JTlRFUlZBTF9NUyA9IDE1MDA7XG5cbi8qKiBUaGUgZHJhZyBtb2RlcyB0aGUgU1ZHIHJlZ2lvbiBvdmVybGF5IGhhbmRsZXMgaXRzZWxmIChzZWUgc2V0RHJhZ01vZGUpLiAqL1xuY29uc3QgT1ZFUkxBWV9NT0RFUyA9IG5ldyBTZXQ8UmVnaW9uVG9vbE1vZGU+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==
|
|
767
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnNlYWRyYWdvbi12aXN1YWxpemVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9vc2Qvb3BlbnNlYWRyYWdvbi12aXN1YWxpemVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9ELE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBc0IsTUFBTSwyQkFBMkIsQ0FBQztBQVVoRyxPQUFPLEVBQXNCLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFN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QUFDLFVBQVU7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNoQixZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDakMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7WUFDekMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztTQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLElBQUk7WUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLHNFQUFzRTtJQUN0RSx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQzVFLDhDQUE4QztJQUU5Qyx3RUFBd0U7SUFDeEUsV0FBVztRQUNULHVFQUF1RTtRQUN2RSw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDOzhHQWp1QlUsOEJBQThCLDRDQStHL0IsZ0JBQWdCLCtJQUtKLGNBQWMsK0hBSTFCLFVBQVU7a0hBeEhULDhCQUE4QixjQURqQixNQUFNOzsyRkFDbkIsOEJBQThCO2tCQUQxQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBZ0g3QixNQUFNOzJCQUFDLGdCQUFnQjs7MEJBS3ZCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs7MEJBSWpDLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdpbWFnZS1qcyc7XG5pbXBvcnQgKiBhcyBPcGVuU2VhZHJhZ29uIGZyb20gJ29wZW5zZWFkcmFnb24nO1xuaW1wb3J0IHsgYnVpbGRWaWV3ZXJPcHRpb25zIH0gZnJvbSAnLi9vcGVuc2VhZHJhZ29uLXZpZXdlci1vcHRpb25zJztcbmltcG9ydCB7IGNyZWF0ZVZpZXdlciwgb3BlblZpZXdlciB9IGZyb20gJy4vb3NkLXZpZXdlci1tb3VudCc7XG5pbXBvcnQgeyBWaXN1YWxpemVyU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS92aXN1YWxpemVyLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVnaW9uU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9yZWdpb24tc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBJSW1hZ2VJbmZvIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IFRpbGVBY2Nlc3NQb3J0LCBUSUxFX0FDQ0VTU19QT1JUIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3BvcnRzL3RpbGUtYWNjZXNzLnBvcnQnO1xuaW1wb3J0IHsgVml6Q29uZmlnLCBWSVpfQ09ORklHIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpei1jb25maWcnO1xuaW1wb3J0IHsgUGxvdFR5cGUsIFBMT1RfVFlQRV9ERVNDUklQVE9SUywgUGxvdFR5cGVEZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Bsb3QtdHlwZSc7XG5pbXBvcnQge1xuICBJVmlld2VyQmFja2VuZCxcbiAgUGl4ZWxEYXRhLFxuICBJSXNvc3VyZmFjZUNvbnRyb2xzLFxuICBJSW50ZW5zaXR5Q29udHJvbHMsXG4gIElTdXJmYWNlM2RDb250cm9scyxcbiAgSU9zZFZpZXdPcHRpb25zLFxuICBJSW50ZW5zaXR5Vmlld3BvcnRTb3VyY2UsXG59IGZyb20gJy4uLy4uL2NvbnRyYWN0cy92aXN1YWxpemVyLmNvbnRyYWN0JztcbmltcG9ydCB7IFZpZXdlckNhcGFiaWxpdGllcywgVmlld2VyRmVhdHVyZSwgY2FwYWJpbGl0aWVzT2YgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY2FwYWJpbGl0aWVzLmNvbnRyYWN0JztcbmltcG9ydCB7IE9zZFJlZ2lvbk92ZXJsYXkgfSBmcm9tICcuL29zZC1yZWdpb24tb3ZlcmxheSc7XG5pbXBvcnQgeyBPc2RUaWxlTG9hZGluZyB9IGZyb20gJy4vb3NkLXRpbGUtbG9hZGluZyc7XG5pbXBvcnQgeyBPc2RTY2FsZUJhciB9IGZyb20gJy4vb3NkLXNjYWxlLWJhcic7XG5pbXBvcnQgeyBJUmVnaW9uT3ZlcmxheSwgUmVnaW9uVG9vbE1vZGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuaW1wb3J0IHsgSUNvb3JkaW5hdGVUcmFuc2Zvcm0gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY29vcmRpbmF0ZS10cmFuc2Zvcm0uY29udHJhY3QnO1xuaW1wb3J0IHsgT3NkQ29vcmRpbmF0ZVRyYW5zZm9ybSB9IGZyb20gJy4vb3NkLWNvb3JkaW5hdGUtdHJhbnNmb3JtJztcbmltcG9ydCB7IE9zZFZpZXdwb3J0QWRhcHRlciB9IGZyb20gJy4vb3NkLXZpZXdwb3J0JztcbmltcG9ydCB7IE9zZE5hdmlnYXRvckNocm9tZSB9IGZyb20gJy4vb3NkLW5hdmlnYXRvci1jaHJvbWUnO1xuaW1wb3J0IHsgUGxvdE1vZGVWaWV3cG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wbG90LXR5cGUtY29udHJpYnV0aW9uLmNvbnRyYWN0JztcbmltcG9ydCB7IGVsZW1lbnRUb0ltYWdlIH0gZnJvbSAnLi9vc2QtY29vcmRzJztcbmltcG9ydCB7IGJ1aWxkT3NkVGlsZVNvdXJjZSwgcGxhblRpbGVkTW91bnQgfSBmcm9tICcuL29zZC10aWxlLXNvdXJjZSc7XG5pbXBvcnQgeyBTbGljZUNhY2hlIH0gZnJvbSAnLi9zbGljZS1jYWNoZSc7XG5pbXBvcnQgeyBPc2RUaWxlUmVjb2xvcmVyIH0gZnJvbSAnLi90aWxlLXJlY29sb3InO1xuaW1wb3J0IHsgT3NkTG9hZGVkLCBPc2RTaW1wbGVTb3VyY2UgfSBmcm9tICcuL3NpbXBsZS1zb3VyY2UnO1xuaW1wb3J0IHsgcmVhZERyYXdlclBpeGVscywgcmVhZGJhY2tWaWV3cG9ydEZyYW1lLCBzYXZlRHJhd2VyU25hcHNob3QgfSBmcm9tICcuL29zZC1waXhlbC1yZWFkYmFjayc7XG5pbXBvcnQgeyBmZXRjaFRpZmZFeHBvcnQsIGZpbGVTdGVtLCByZW5kZXJDb21wb3NpdGVQbmcgfSBmcm9tICcuL29zZC1leHBvcnQnO1xuaW1wb3J0IHsgSGlzdG9ncmFtU2FtcGxlciB9IGZyb20gJy4vaGlzdG9ncmFtLXNhbXBsZXInO1xuaW1wb3J0IHtcbiAgVGlsZURlc2NyaXB0b3IsXG4gIGV4cG9ydFRpZmZGaWxlbmFtZSxcbiAgZXhwb3J0VGlmZlVybCxcbiAgaHR0cEZldGNoSnNvbixcbiAgcG9sbERlc2NyaXB0b3IsXG4gIHRocm93SWZBYm9ydGVkLFxuICB0aWxlc0luZm9VcmwsXG59IGZyb20gJy4uL3RpbGUtc2VydmVyJztcbmltcG9ydCB7IEJhc2VTdG9yZVZpc3VhbGl6ZXIgfSBmcm9tICcuLi9iYXNlLXN0b3JlLXZpc3VhbGl6ZXInO1xuaW1wb3J0IHsgQ2FudmFzVG9vbElkIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgU2ltcGxlU2xpY2VBY2Nlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2ltcGxlLXNsaWNlLWFjY2Vzcy5zZXJ2aWNlJztcbmltcG9ydCB7IENhY2hlZEltYWdlRGF0YSwgQ2FudmFzVG9vbEhvc3QgfSBmcm9tICcuLi8uLi90b29sYmFyL3Rvb2wta2l0L2NhbnZhcy10b29sJztcbmltcG9ydCB7IENhbnZhc1Rvb2xNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdG9vbGJhci90b29sLWtpdC9jYW52YXMtdG9vbC1tYW5hZ2VyJztcbmltcG9ydCB7IGNyZWF0ZUNhbnZhc1Rvb2xNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdG9vbGJhci9jYW52YXMtdG9vbHMnO1xuaW1wb3J0IHsgV2FuZFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3dhbmQvd2FuZC5zZXJ2aWNlJztcbmltcG9ydCB7IFNhbVRvb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdG9vbGJhci9zZWdtZW50YXRpb24vc2FtLXRvb2wuc2VydmljZSc7XG5pbXBvcnQgeyBTYW1Qb2ludFRvb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdG9vbGJhci9zZWdtZW50YXRpb24vc2FtLXBvaW50LXRvb2wuc2VydmljZSc7XG5pbXBvcnQgeyBDZWxsU2VnbWVudFRvb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdG9vbGJhci9zZWdtZW50YXRpb24vY2VsbC1zZWdtZW50LXRvb2wuc2VydmljZSc7XG5pbXBvcnQgeyBJQ2VsbFNlZ21lbnRlciwgQ0VMTF9TRUdNRU5URVIgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY2VsbC1zZWdtZW50ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgSUhpc3RvZ3JhbSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5cbi8qKiBXYWl0IGJldHdlZW4gdHdvIGAvdGlsZXMvaW5mb2AgcG9sbHMgd2hpbGUgdGhlIHNlcnZlciBhbnN3ZXJzIDIwMi4gKi9cbmNvbnN0IE9TRF9USUxFU19JTkZPX1BPTExfSU5URVJWQUxfTVMgPSAxNTAwO1xuXG4vKiogVGhlIGRyYWcgbW9kZXMgdGhlIFNWRyByZWdpb24gb3ZlcmxheSBoYW5kbGVzIGl0c2VsZiAoc2VlIHNldERyYWdNb2RlKS4gKi9cbmNvbnN0IE9WRVJMQVlfTU9ERVMgPSBuZXcgU2V0PFJlZ2lvblRvb2xNb2RlPihbXG4gICdkcmF3cmVjdCcsXG4gICdkcmF3Y2xvc2VkcGF0aCcsXG4gICdkcmF3b3BlbnBhdGgnLFxuICAnZHJhd3BvbHlnb24nLFxuICAnYWRkcG9pbnQnLFxuICAnZGVsZXRlcG9pbnQnLFxuICAnbW92ZScsXG4gICdzZWxlY3QnLFxuXSk7XG5cbi8qKlxuICogT3BlblNlYWRyYWdvbiB2aXN1YWxpemF0aW9uIGJhY2tlbmQuXG4gKlxuICogUmVuZGVycyB0aGUgKmltYWdlKiBwbG90IHR5cGUgYXMgYSBuYXRpdmVseS10aWxlZCwgem9vbWFibGUgcmFzdGVyLCBiYWNrZWQgYnlcbiAqIHRoZSBqaXQtc2VydmljZSB0aWxlIGVuZHBvaW50cyAoYEdFVCAvdGlsZXMvaW5mb2AgKyBgR0VUIC90aWxlYCwgd2hpY2ggcmV1c2VcbiAqIHRoZSBCaW8tRm9ybWF0cyBST0kgcmVuZGVyZXIpLCBvciDigJQgZm9yIGEgYHRpbGVkOiBmYWxzZWAgaW1hZ2Ug4oCUIGJ5XG4gKiBzZWxmLWNvbnRhaW5lZCBwZXItc2xpY2UgVVJMcy4gUGxvdGx5IGtlZXBzIHRoZSBzY2llbnRpZmljL2RhdGEgcGxvdCB0eXBlc1xuICogKHNjYWxhciBoZWF0bWFwLCBzdXJmYWNlLCBjb250b3VyLCBzY2F0dGVyLCBsaW5lLCBzY2F0dGVyM2QsIGlzb3N1cmZhY2UpIOKAlFxuICogaGVuY2UgdGhpcyBiYWNrZW5kIGFkdmVydGlzZXMgb25seSBgSW1hZ2VEaXNwbGF5YC5cbiAqXG4gKiBEaXNwbGF5IHNldHRpbmdzICh3aW5kb3cvZ2FtbWEvY29sb3JtYXAvaW52ZXJ0LCBwZXItY2hhbm5lbCB0aW50cykgYXJlIGFwcGxpZWRcbiAqIGNsaWVudC1zaWRlIGJ5IHJlY29sb3JpbmcgdGlsZXM7IHJlZ2lvbnMgYXJlIGRyYXduIGJ5IHtAbGluayBPc2RSZWdpb25PdmVybGF5fVxuICogYW5kIHRoZSBjYW52YXMgdG9vbHMgcmVhZCBiYWNrIHRoZSByZW5kZXJlZCB2aWV3cG9ydC4gVGhlIGNvbGxhYm9yYXRvcnNcbiAqIChzbGljZSBjYWNoZSwgZGlzcGxheSBwaXBlbGluZSwgaGlzdG9ncmFtIHNhbXBsZXIsIHRpbGUgY2xpZW50KSBhbmQgdGhlXG4gKiByZWNvbG9yIGludmFyaWFudCBhcmUgZGVzY3JpYmVkIGluIHRoaXMgZm9sZGVyJ3MgUkVBRE1FLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE9wZW5TZWFkcmFnb25WaXN1YWxpemVyU2VydmljZSBleHRlbmRzIEJhc2VTdG9yZVZpc3VhbGl6ZXIgaW1wbGVtZW50cyBJVmlld2VyQmFja2VuZCB7XG4gIC8qKiBPU0QncyBzdHJlbmd0aCBpcyBkaXNwbGF5aW5nIGEgbGFyZ2Ugem9vbWFibGUgaW1hZ2Ug4oCUIG5vdGhpbmcgZWxzZSBoZXJlLiAqL1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM6IFZpZXdlckNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc09mKFtWaWV3ZXJGZWF0dXJlLkltYWdlRGlzcGxheV0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpOiBzdHJpbmc7XG4gIHByaXZhdGUgdmlld2VyOiBPcGVuU2VhZHJhZ29uLlZpZXdlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG92ZXJsYXk6IElSZWdpb25PdmVybGF5IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2NhbGVCYXI6IE9zZFNjYWxlQmFyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBcIkltYWdlIHJlbG9hZGluZ+KAplwiIHdoaWxlIHRoZSB2aWV3IGZldGNoZXMgaXRzIHRpbGVzLiAqL1xuICBwcml2YXRlIHRpbGVMb2FkaW5nOiBPc2RUaWxlTG9hZGluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGRlc2NyaXB0b3I6IFRpbGVEZXNjcmlwdG9yIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBCYXNlNjQgUmF3RmlsZUluZm8gKyBjdXJyZW50IHotc2xpY2UsIGtlcHQgc28gc2V0WkluZGV4IGNhbiByZWJ1aWxkIHRoZVxuICAgKiAgdGlsZSBzb3VyY2UgYW5kIHN3YXAgc2xpY2VzIGxpdmUgKHN0YWNrIG5hdmlnYXRpb24pLiAqL1xuICBwcml2YXRlIGluZm9CNjQgPSAnJztcbiAgcHJpdmF0ZSBjdXJyZW50WiA9IDA7XG4gIHByaXZhdGUgY29vcmRUcmFuc2Zvcm06IE9zZENvb3JkaW5hdGVUcmFuc2Zvcm0gfCBudWxsID0gbnVsbDtcbiAgLyoqIFdoYXQgdGhpcyBiYWNrZW5kJ3MgY2FudmFzIHRvb2xzIHJlYWQgYW5kIHdyaXRlIChvbmUgaG9zdCBmb3IgZXZlcnkgdG9vbCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbEhvc3Q6IENhbnZhc1Rvb2xIb3N0O1xuICAvKiogVGhpcyBiYWNrZW5kJ3Mgb3duIHdhbmQsIGJydXNoLCBlcmFzZXIsIHpvb20tdG8tYm94IGFuZCBTQU0gcG9pbnQgdG9vbHMuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW52YXNUb29sczogQ2FudmFzVG9vbE1hbmFnZXI7XG4gIC8qKiBXYW5kIHNhbXBsaW5nIG1hdHJpeCByZWFkIGJhY2sgZnJvbSB0aGUgcmVuZGVyZWQgdmlld3BvcnQ7IGNhY2hlZCB1bnRpbFxuICAgKiAgdGhlIHZpZXdwb3J0IGNoYW5nZXMgKHNlZSByZWFkYmFja1ZpZXdwb3J0KS4gKi9cbiAgcHJpdmF0ZSB2aWV3cG9ydFBpeGVsczogQ2FjaGVkSW1hZ2VEYXRhIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgRE9NIGlkIG9mIHRoZSBlbGVtZW50IE9TRCBpcyBtb3VudGVkIGluIChzaGFyZWQgd2l0aCBQbG90bHkpOyB0aGVcbiAgICogIG9uLWNhbnZhcyB0b29scyBhdHRhY2ggdGhlaXIgb3ZlcmxheXMgaGVyZS4gKi9cbiAgcHJpdmF0ZSBwbG90RGl2ID0gJyc7XG4gIC8qKiBDdXJyZW50IGZpbGUgbmFtZSwgdGFnZ2VkIG9udG8gd2FuZC1jcmVhdGVkIHNoYXBlcy4gKi9cbiAgcHJpdmF0ZSBjdXJyZW50RmlsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIE9ubHkgZ3JheXNjYWxlIGltYWdlcyBnZXQgYSBjb2xvcm1hcCAoUkdCIHRpbGVzIHBhc3MgdGhyb3VnaCB1bnRvdWNoZWQpLiAqL1xuICBwcml2YXRlIGlzR3JheXNjYWxlSW1hZ2UgPSBmYWxzZTtcbiAgLyoqIFRydWUgZm9yIG11bHRpY2hhbm5lbCBmbHVvcmVzY2VuY2UgZHJhd24gcGVyIGNoYW5uZWw6IG9uZSBzaW5nbGUtYmFuZFxuICAgKiAgVGlsZWRJbWFnZSBwZXIgY2hhbm5lbCwgdGludGVkIGJ5IHRoZSByZWNvbG9yZXIgKHNlZSBwbGFuVGlsZWRNb3VudCkuICovXG4gIHByaXZhdGUgaXNNdWx0aUNoYW5uZWwgPSBmYWxzZTtcbiAgLyoqIENvdW50IG9mIHJlYWwgQmlvLUZvcm1hdHMgcmVzb2x1dGlvbiBsZXZlbHMgKHBlci1jaGFubmVsIHRpbGVzIGV4aXN0IG9ubHlcbiAgICogIGhlcmUpLiBGb3IgbXVsdGljaGFubmVsIGltYWdlcyB0aGUgdGlsZSBzb3VyY2UgaXMgYnVpbHQgZnJvbSB0aGVzZSBhbG9uZSBzb1xuICAgKiAgZXZlcnkgZGlzcGxheWVkIHRpbGUgc3VwcG9ydHMgYSBwZXItY2hhbm5lbCBmZXRjaC4gKi9cbiAgcHJpdmF0ZSByZWFsTGV2ZWxzID0gMDtcbiAgLyoqIEJlYXJlciB0b2tlbiBmb3IgT1NEJ3Mgb3duIHRpbGUgZmV0Y2hlcyAoSHR0cENsaWVudCBjYWxscyBnZXQgaXQgdmlhIHRoZVxuICAgKiAgaW50ZXJjZXB0b3I7IE9TRCdzIGxvYWRlciBkb2VzIG5vdCwgc28gd2UgcGFzcyBpdCBhcyBhbiBhamF4IGhlYWRlcikuICovXG4gIHByaXZhdGUgYXV0aEhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgLyoqIE5hdmlnYXRvciwgc21vb3RoaW5nLCBpbml0aWFsIGZpdCBhbmQgdGhlIHRvb2xiYXIgcmVwYWludCB3b3JrYXJvdW5kXG4gICAqICAoc2VlIE9zZE5hdmlnYXRvckNocm9tZSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hyb21lID0gbmV3IE9zZE5hdmlnYXRvckNocm9tZSh7XG4gICAgdmlld2VyOiAoKSA9PiB0aGlzLnZpZXdlcixcbiAgICBwbG90RGl2OiAoKSA9PiB0aGlzLnBsb3REaXYsXG4gIH0pO1xuXG4gIC8qKiBPdmVyYWxsIGRlYWRsaW5lIGZvciB0aGUgL3RpbGVzL2luZm8gcG9sbCBsb29wLiBBbiB1bmNhY2hlZCB3aG9sZS1zbGlkZVxuICAgKiAgaW1hZ2UgKGUuZy4gLm5kcGkpIGlzIGNhY2hlZCBzZXJ2ZXItc2lkZSBmaXJzdCAoR0NTLT5QVkMpLCB3aGljaCBjYW4gdGFrZVxuICAgKiAgc2V2ZXJhbCBtaW51dGVzLiBHZW5lcm91cyBiZWNhdXNlIGVhY2ggcG9sbCBpcyBjaGVhcDsgb24gZXhwaXJ5IHRoZSByb3V0ZXJcbiAgICogIGZhbGxzIGJhY2sgdG8gUGxvdGx5LiAobmFwYXJpLWpzIHdhaXRzIGxlc3Mg4oCUIGl0IGZhbGxzIGJhY2sgdG8gYSBzaW5nbGUgdGlsZS4pICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdGlsZXNJbmZvVGltZW91dE1zID0gNjAwMDAwOyAvLyAxMCBtaW5cblxuICAvKiogV2luZG93L2dhbW1hL2NvbG9ybWFwL2ludmVydCBhbmQgcGVyLWNoYW5uZWwgdGludHMsIGFwcGxpZWQgdG8gdGhlIHRpbGVzXG4gICAqICB0aHJvdWdoIE9TRCdzIHBpeGVsIHBpcGVsaW5lIChzZWUgT3NkVGlsZVJlY29sb3JlciBhbmQgdGhlIFJFQURNRSdzIHJlY29sb3JcbiAgICogIGludmFyaWFudCkuIEl0cyBEaXNwbGF5UGlwZWxpbmUgYWxzbyBkcml2ZXMgdGhlIGNvbXBvc2l0b3IgYW5kIHRoZSBleHBvcnQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjb2xvcjogT3NkVGlsZVJlY29sb3JlciA9IG5ldyBPc2RUaWxlUmVjb2xvcmVyKFxuICAgIHtcbiAgICAgIHZpZXdlcjogKCkgPT4gdGhpcy52aWV3ZXIsXG4gICAgICBpc0dyYXlzY2FsZTogKCkgPT4gdGhpcy5pc0dyYXlzY2FsZUltYWdlLFxuICAgICAgaXNNdWx0aUNoYW5uZWw6ICgpID0+IHRoaXMuaXNNdWx0aUNoYW5uZWwsXG4gICAgICBpc1NpbXBsZU11bHRpY2hhbm5lbDogKCkgPT4gdGhpcy5zaW1wbGUubXVsdGljaGFubmVsLFxuICAgICAgY3VycmVudFo6ICgpID0+IHRoaXMuY3VycmVudFosXG4gICAgICByZXZlYWxDaGFubmVsU2xpY2U6ICh6KSA9PiB0aGlzLmNhY2hlLnJldmVhbENoYW5uZWxTbGljZSh6KSxcbiAgICAgIGludmFsaWRhdGVDaGFubmVsRGlzcGxheTogKHopID0+IHRoaXMuY2FjaGUuaW52YWxpZGF0ZUNoYW5uZWxEaXNwbGF5KHopLFxuICAgICAgcmVjb21wb3NpdGU6ICh0b2tlbikgPT4gdm9pZCB0aGlzLnNpbXBsZS5yZWNvbXBvc2l0ZUFuZE9wZW4odG9rZW4pLFxuICAgIH0sXG4gICAgdGhpcy5zdG9yZSxcbiAgKTtcblxuICAvKiogVGhlIHNlcnZlcmxlc3MgKGB0aWxlZDogZmFsc2VgKSBpbWFnZSBzb3VyY2UgYW5kIGFsbCBpdHMgc3RhdGUgKHNlZVxuICAgKiAgT3NkU2ltcGxlU291cmNlKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzaW1wbGU6IE9zZFNpbXBsZVNvdXJjZSA9IG5ldyBPc2RTaW1wbGVTb3VyY2UoXG4gICAge1xuICAgICAgdmlld2VyOiAoKSA9PiB0aGlzLnZpZXdlcixcbiAgICAgIGRlc2NyaXB0b3I6ICgpID0+IHRoaXMuZGVzY3JpcHRvcixcbiAgICAgIGlzR3JheXNjYWxlOiAoKSA9PiB0aGlzLmlzR3JheXNjYWxlSW1hZ2UsXG4gICAgICBjdXJyZW50WjogKCkgPT4gdGhpcy5jdXJyZW50WixcbiAgICAgIHNldEN1cnJlbnRaOiAoeikgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRaID0gejtcbiAgICAgICAgdGhpcy52aWV3cG9ydFBpeGVscyA9IG51bGw7IC8vIHRoZSByZWFkYmFjayBpcyBzbGljZS1zcGVjaWZpY1xuICAgICAgfSxcbiAgICAgIHNhbXBsZXI6ICgpID0+IHRoaXMuc2FtcGxlcixcbiAgICAgIGRpc3BsYXk6ICgpID0+IHRoaXMucmVjb2xvci5kaXNwbGF5LFxuICAgICAgY2hhbm5lbFN0YXRlczogKCkgPT4gdGhpcy5zdG9yZS5jdXJyZW50Q2hhbm5lbFN0YXRlcygpLFxuICAgICAgaXNDdXJyZW50RGlzcGxheTogKHRva2VuKSA9PiB0aGlzLnJlY29sb3IuaXNDdXJyZW50KHRva2VuKSxcbiAgICAgIHNjaGVkdWxlSW52YWxpZGF0ZTogKCkgPT4gdGhpcy5yZWNvbG9yLnNjaGVkdWxlSW52YWxpZGF0ZSgpLFxuICAgIH0sXG4gICAgdGhpcy5zaW1wbGVTdGFjayxcbiAgKTtcblxuICAvKiogSGlzdG9ncmFtICsgYXV0by13aW5kb3cgc2FtcGxpbmcgKHNlZSBIaXN0b2dyYW1TYW1wbGVyKS4gQ29uc3RydWN0ZWQgaW5cbiAgICogIHRoZSBjdG9yIGJvZHkgYmVjYXVzZSBpdCBjYXB0dXJlcyB0aGUgcmVzb2x2ZWQgQVBJIGJhc2UgVVJMLiAqL1xuICBwcml2YXRlIHNhbXBsZXIhOiBIaXN0b2dyYW1TYW1wbGVyO1xuXG4gIC8qKiBTdGFjay1zbGljZSBjYWNoZSArIGJhY2tncm91bmQgcHJlbG9hZGVyIChzZWUgU2xpY2VDYWNoZSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGU6IFNsaWNlQ2FjaGUgPSBuZXcgU2xpY2VDYWNoZSh7XG4gICAgdmlld2VyOiAoKSA9PiB0aGlzLnZpZXdlcixcbiAgICBoYXNJbWFnZTogKCkgPT4gISEodGhpcy52aWV3ZXIgJiYgdGhpcy5kZXNjcmlwdG9yICYmIHRoaXMuaW5mb0I2NCksXG4gICAgc2xpY2VDb3VudDogKCkgPT4gdGhpcy5kZXNjcmlwdG9yPy56ID8/IDEsXG4gICAgY3VycmVudFo6ICgpID0+IHRoaXMuY3VycmVudFosXG4gICAgaXNNdWx0aUNoYW5uZWw6ICgpID0+IHRoaXMuaXNNdWx0aUNoYW5uZWwsXG4gICAgY2hhbm5lbENvdW50OiAoKSA9PiBNYXRoLm1heCgxLCB0aGlzLnJlY29sb3IuY2hhbm5lbFN0YXRlcy5sZW5ndGggfHwgKHRoaXMuZGVzY3JpcHRvcj8uY2hhbm5lbHMgPz8gMSkpLFxuICAgIGNoYW5uZWxWaXNpYmxlOiAoYzogbnVtYmVyKSA9PiB0aGlzLnJlY29sb3IuY2hhbm5lbFN0YXRlc1tjXT8udmlzaWJsZSAhPT0gZmFsc2UsXG4gICAgYnVpbGRUaWxlU291cmNlOiAoejogbnVtYmVyLCBjaGFubmVsPzogbnVtYmVyKSA9PlxuICAgICAgdGhpcy5idWlsZFRpbGVTb3VyY2UodGhpcy5kZXNjcmlwdG9yISwgdGhpcy5pbmZvQjY0LCB6LCBjaGFubmVsKSxcbiAgICBvbkNvbXBvc2l0ZVNsaWNlQWRkZWQ6ICh6OiBudW1iZXIpID0+IHRoaXMuc2FtcGxlci5jb21wdXRlSW1hZ2VXaW5kb3codGhpcy5kZXNjcmlwdG9yISwgdGhpcy5pbmZvQjY0LCB6KSxcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoVElMRV9BQ0NFU1NfUE9SVCkgcHJpdmF0ZSB0aWxlczogVGlsZUFjY2Vzc1BvcnQsXG4gICAgd2FuZFNlcnZpY2U6IFdhbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FtVG9vbDogU2FtVG9vbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW1Qb2ludFRvb2w6IFNhbVBvaW50VG9vbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZWxsU2VnbWVudFRvb2w6IENlbGxTZWdtZW50VG9vbFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChDRUxMX1NFR01FTlRFUikgcHJpdmF0ZSBjZWxsU2VnbWVudGVyOiBJQ2VsbFNlZ21lbnRlciB8IG51bGwsXG4gICAgc3RvcmU6IFZpc3VhbGl6ZXJTdG9yZSxcbiAgICByZWdpb25TdG9yZTogUmVnaW9uU3RvcmUsXG4gICAgcHJpdmF0ZSBzaW1wbGVTdGFjazogU2ltcGxlU2xpY2VBY2Nlc3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoVklaX0NPTkZJRykgY29uZmlnOiBWaXpDb25maWcsXG4gICkge1xuICAgIHN1cGVyKHJlZ2lvblN0b3JlLCBzdG9yZSk7XG4gICAgLy8gVGhlIGNhbnZhcyB0b29scyBydW4gb3ZlciBPU0QgdGhyb3VnaCB0aGUgc2hhcmVkIGNvb3JkaW5hdGUgdHJhbnNmb3JtIGFuZCBhXG4gICAgLy8gdmlld3BvcnQgcmVhZGJhY2ssIGFuZCByZWFkL3dyaXRlIHRoZSBzaGFyZWQgUmVnaW9uU3RvcmUuIFRoaXMgYmFja2VuZCBvd25zXG4gICAgLy8gaXRzIG93biB0b29sIGluc3RhbmNlcyAoUlQtMjEpOyB0aGUgaG9zdCByZWFkcyBsaXZlIHN0YXRlLCBzbyBpdCBpcyBidWlsdCBvbmNlLlxuICAgIHRoaXMudG9vbEhvc3QgPSB7XG4gICAgICBnZXRSZWdpb25zOiAoKSA9PiB0aGlzLnJlZ2lvblN0b3JlLmdldFJlZ2lvbnMoKSxcbiAgICAgIHNldFJlZ2lvbnM6IChyZWdpb25zKSA9PiB0aGlzLnJlZ2lvblN0b3JlLnNldFJlZ2lvbnMocmVnaW9ucyksXG4gICAgICBnZXRDYWNoZWRJbWFnZURhdGE6ICgpID0+IHRoaXMucmVhZGJhY2tWaWV3cG9ydCgpLFxuICAgICAgZ2V0QWN0aXZlRnJhbWVJbmRleDogKCkgPT4gdGhpcy5jdXJyZW50WixcbiAgICAgIGdldE92ZXJsYXlDb250YWluZXI6ICgpID0+IHRoaXMuZ2V0T3ZlcmxheUNvbnRhaW5lcigpLFxuICAgICAgZ2V0Q29vcmRpbmF0ZVRyYW5zZm9ybTogKCkgPT4gdGhpcy5jb29yZFRyYW5zZm9ybSBhcyBJQ29vcmRpbmF0ZVRyYW5zZm9ybSxcbiAgICAgIGdldEZpbGVOYW1lOiAoKSA9PiB0aGlzLmN1cnJlbnRGaWxlTmFtZSxcbiAgICAgIGdldFNoYXBlQ29sb3I6ICgpID0+IHRoaXMucmVnaW9uU3RvcmUuZ2V0U2hhcGVDb2xvcigpLFxuICAgICAgLy8gWm9vbS10by1ib3g6IG92ZXJsYXkgcGl4ZWxzIC0+IGltYWdlIGNvb3JkcywgYW5kIGZpdCB0aGUgdmlld3BvcnQgdG8gdGhlIGJveC5cbiAgICAgIHBpeGVsVG9EYXRhOiAocHgsIHB5KSA9PiBlbGVtZW50VG9JbWFnZSh0aGlzLnZpZXdlciEsIHB4LCBweSksXG4gICAgICBhcHBseVpvb21Ub0JveDogKGNvb3JkcykgPT4gdGhpcy52aWV3cG9ydC5hcHBseVpvb21Ub0JveChjb29yZHMpLFxuICAgIH07XG4gICAgdGhpcy5jYW52YXNUb29scyA9IGNyZWF0ZUNhbnZhc1Rvb2xNYW5hZ2VyKHRoaXMudG9vbEhvc3QsIHtcbiAgICAgIHdhbmRTZXJ2aWNlLFxuICAgICAgcmVnaW9uU3RvcmUsXG4gICAgICBzYW1Qb2ludDogc2FtUG9pbnRUb29sLFxuICAgIH0pO1xuICAgIHRoaXMuYXBpID0gY29uZmlnLnNsaWRlQ3JvcFNlcnZlcjtcbiAgICB0aGlzLnNhbXBsZXIgPSBuZXcgSGlzdG9ncmFtU2FtcGxlcih0aGlzLmh0dHAsIHRoaXMuYXBpLCB7XG4gICAgICByZWFsTGV2ZWxzOiAoKSA9PiB0aGlzLnJlYWxMZXZlbHMsXG4gICAgICBjaGFubmVsQ291bnQ6IChkKSA9PiB0aGlzLnJlY29sb3IuY2hhbm5lbFN0YXRlcy5sZW5ndGggfHwgKGQuY2hhbm5lbHMgPz8gMSksXG4gICAgICBpc0dyYXlzY2FsZTogKCkgPT4gdGhpcy5pc0dyYXlzY2FsZUltYWdlLFxuICAgICAgLy8gTnVkZ2UgdGhlIGNoYW5uZWwtc3RhdGVzIHN0cmVhbSBzbyB0aGUgcGFuZSByZS1yZWFkcyBnZXRIaXN0b2dyYW0gbm93LFxuICAgICAgLy8gaW4gY2FzZSBpdHMgYm91bmRlZCByZXRyeSB3aW5kb3cgYWxyZWFkeSBsYXBzZWQuXG4gICAgICBvbkNoYW5uZWxIaXN0b2dyYW1zU2FtcGxlZDogKCkgPT4gdGhpcy5zdG9yZS5zZXRDaGFubmVsU3RhdGVzKHRoaXMuc3RvcmUuY3VycmVudENoYW5uZWxTdGF0ZXMoKSksXG4gICAgICAvLyBCYWNrZ3JvdW5kLXByZWxvYWRlZCBzbGljZXMgYXJlIHNhbXBsZWQgdG9vIChoaXN0b2dyYW1zIHBlciBzbGljZSksIGJ1dFxuICAgICAgLy8gb25seSB0aGUgZGlzcGxheWVkIHNsaWNlJ3Mgd2luZG93IG1heSBzZWVkIG9yIHJlLWludmFsaWRhdGUgdGhlIGRpc3BsYXkuXG4gICAgICBvbkdyYXlXaW5kb3dTYW1wbGVkOiAobWluLCBtYXgsIHopID0+IHtcbiAgICAgICAgaWYgKHogPT09IHRoaXMuY3VycmVudFopIHRoaXMucmVjb2xvci5zZWVkR3JheVdpbmRvdyhtaW4sIG1heCk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucmVjb2xvci5lbnN1cmVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogVGhlIHZpZXdwb3J0IGFzIHRoZSBsaWJyYXJ5IHNlZXMgaXQ6IHZpc2libGUgcmVjdHMsIHRoZSBwbG90LW1vZGVcbiAgICogIHZpZXdwb3J0LCB6b29tL2ZpdCAoc2VlIE9zZFZpZXdwb3J0QWRhcHRlcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld3BvcnQgPSBuZXcgT3NkVmlld3BvcnRBZGFwdGVyKHtcbiAgICB2aWV3ZXI6ICgpID0+IHRoaXMudmlld2VyLFxuICAgIGRlc2NyaXB0b3I6ICgpID0+IHRoaXMuZGVzY3JpcHRvcixcbiAgICBjb29yZFRyYW5zZm9ybTogKCkgPT4gdGhpcy5jb29yZFRyYW5zZm9ybSxcbiAgICBvdmVybGF5Q29udGFpbmVyOiAoKSA9PiB0aGlzLmdldE92ZXJsYXlDb250YWluZXIoKSxcbiAgfSk7XG4gIC8vIFJlZ2lvbiBzdGF0ZSAocmVnaW9ucywgc2VsZWN0aW9uLCB0aGUgdXBkYXRlIGV2ZW50KSBsaXZlcyBpbiB0aGUgc2hhcmVkXG4gIC8vIFJlZ2lvblN0b3JlOyBpbWFnZSBtZXRhZGF0YSBhbmQgY2xhc3NpZmljYXRpb24gY29sb3VycyBpbiB0aGUgc2hhcmVkXG4gIC8vIFZpc3VhbGl6ZXJTdG9yZSDigJQgdGhlIGluaGVyaXRlZCBJUmVnaW9uU3RvcmUvZGlzcGxheSBtZXRob2RzIGRlbGVnYXRlIHRoZXJlLlxuXG4gIC8vIOKUgOKUgCBJRGF0YVJlbmRlcmVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgdGlsZS1zb3VyY2UgZGVzY3JpcHRvciBmb3IgdGhlIHNlbGVjdGVkIGZpbGUuIFRoZSBgaW5mb2AgcGFyYW0gaXNcbiAgICogdGhlIGJhc2U2NCBSYXdGaWxlSW5mbyB0aGUgcmVzdCBvZiB0aGUgQVBJIHVzZXM7IHRoZSBHRVQgZ29lcyB0aHJvdWdoIHRoZVxuICAgKiBhdXRoIGludGVyY2VwdG9yIChCZWFyZXIpLiBXZSBhbHNvIGdyYWIgYSB0b2tlbiBoZXJlIGZvciBPU0QncyBvd24gdGlsZVxuICAgKiBmZXRjaGVzIChpdHMgbG9hZGVyIGJ5cGFzc2VzIEh0dHBDbGllbnQpLlxuICAgKlxuICAgKiBgc2lnbmFsYCAodGhlIGhvc3QncyByZW5kZXIgc3VwZXJzZXNzaW9uKSBjYW5jZWxzIHRoZSBgL3RpbGVzL2luZm9gIHBvbGwgYW5kXG4gICAqIHRoZSBzaW1wbGUtaW1hZ2UgZmV0Y2hlczogdGhlIGxvYWQgdGhlbiByZWplY3RzIHdpdGggYW4gYEFib3J0RXJyb3JgLlxuICAgKi9cbiAgYXN5bmMgbG9hZChpbWFnZUluZm86IElJbWFnZUluZm8sIHpJbmRleDogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8T3NkTG9hZGVkPiB7XG4gICAgdGhyb3dJZkFib3J0ZWQoc2lnbmFsKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGltYWdlSW5mbz8uZmlsZU5hbWU7XG4gICAgLy8gQSBkaWZmZXJlbnQgaW1hZ2Ugd2FzIHNlbGVjdGVkIOKAlCBzdG9wIHRoZSBwcmV2aW91cyBzdGFjaydzIGJhY2tncm91bmRcbiAgICAvLyBsb2FkaW5nIGltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIGxldHRpbmcgaXQgZmluaXNoIGJlaGluZCB0aGUgbmV3IGltYWdlLlxuICAgIGlmIChmaWxlbmFtZSAmJiB0aGlzLmN1cnJlbnRGaWxlTmFtZSAmJiBmaWxlbmFtZSAhPT0gdGhpcy5jdXJyZW50RmlsZU5hbWUpIHtcbiAgICAgIHRoaXMuY2FjaGUuY2FuY2VsQmFja2dyb3VuZExvYWQoKTtcbiAgICAgIHRoaXMuc2ltcGxlLnJldm9rZVVybHMoKTtcbiAgICB9XG4gICAgdGhpcy5zaW1wbGVTdGFjay5ub3RlQWN0aXZlRmlsZShmaWxlbmFtZSk7XG4gICAgLy8gU2ltcGxlIChpbi1tZW1vcnkgLyBub24tdGlsZWQpIGltYWdlOiBza2lwIHRoZSB0aWxlIHNlcnZlciBlbnRpcmVseSDigJQgbm9cbiAgICAvLyBnZXRTZWxlY3RlZEluZm9CNjQsIG5vIC90aWxlcy9pbmZvIHBvbGwuIGB1cmxzW3pJbmRleF1gIGlzIGEgY29tcGxldGUgaW1hZ2VcbiAgICAvLyBPU0Qgb3BlbnMgdmlhIGl0cyBzaW5nbGUtaW1hZ2Ugc291cmNlIChzZWUgcGxvdCgpKS5cbiAgICBpZiAodGhpcy5zaW1wbGVTdGFjay5pc1NpbXBsZShpbWFnZUluZm8pKSB7XG4gICAgICB0aGlzLmF1dGhIZWFkZXJzID0ge307XG4gICAgICByZXR1cm4gdGhpcy5zaW1wbGUubG9hZChpbWFnZUluZm8sIHpJbmRleCwgc2lnbmFsKTtcbiAgICB9XG4gICAgY29uc3QgaW5mb0I2NCA9IHRoaXMudGlsZXMuZ2V0U2VsZWN0ZWRJbmZvQjY0KCk7XG4gICAgaWYgKCFpbmZvQjY0KSByZXR1cm4geyBkZXNjcmlwdG9yOiBudWxsLCBpbmZvQjY0OiAnJywgejogekluZGV4IHx8IDAsIGZpbGVuYW1lIH07XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hdXRoSGVhZGVycyA9IGF3YWl0IHRoaXMudGlsZXMuZ2V0QXV0aEhlYWRlcnMoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuYXV0aEhlYWRlcnMgPSB7fTsgLy8gZmFsbCBiYWNrIHRvIGNvb2tpZSBhdXRoIChhamF4V2l0aENyZWRlbnRpYWxzKVxuICAgIH1cbiAgICB0aHJvd0lmQWJvcnRlZChzaWduYWwpO1xuICAgIC8vIFBvbGwgL3RpbGVzL2luZm8gKHRoZSBzaGFyZWQgaml0LXNlcnZpY2UgY2xpZW50KTogdGhlIGJhY2tlbmQgcmV0dXJucyAyMDJcbiAgICAvLyB3aGlsZSB0aGUgc291cmNlIGZpbGUgaXMgc3RpbGwgYmVpbmcgY2FjaGVkIChHQ1MtPlBWQykg4oCUIGl0IGtpY2tzIHRoZVxuICAgIC8vIGRvd25sb2FkIG9mZiBpbiB0aGUgYmFja2dyb3VuZCwgc28gZWFjaCByZXF1ZXN0IGlzIHNob3J0IChubyBsb25nLWhlbGRcbiAgICAvLyBjb25uZWN0aW9uIHRvIHRyaXAgaW5ncmVzcy9wcm94eSBvciBjbGllbnQgdGltZW91dHMpLCBhbmQgMjAwIHdpdGggdGhlXG4gICAgLy8gZGVzY3JpcHRvciBvbmNlIGl0J3MgcmVhZHkuIFRoZSBjYWNoZS1wcm9ncmVzcyBvdmVybGF5IHNob3dzIHByb2dyZXNzXG4gICAgLy8gZHVyaW5nIHRoZSB3YWl0LiBUcmFuc3BvcnQgZmFpbHVyZXMgKGEgcHJveHkgaGljY3VwLCBhIHNsb3cgbWV0YWRhdGEgcmVhZFxuICAgIC8vIHRpbWluZyBhIHJlcXVlc3Qgb3V0KSBhcmUgcmV0cmllZCB1bnRpbCB0aGUgZGVhZGxpbmU7IGEgbm9uLTIwMiBzdGF0dXNcbiAgICAvLyBtZWFucyB0aGlzIHNlcnZlciB3b24ndCBkZXNjcmliZSB0aGUgZmlsZS5cbiAgICAvL1xuICAgIC8vIE5vIGRlc2NyaXB0b3IgKGRlYWRsaW5lLCBvciBhIHN0YXR1cyBvdGhlciB0aGFuIDIwMikgaXMgYSBsb2FkIGZhaWx1cmUsIHNvXG4gICAgLy8gdGhlIHJvdXRlciBmYWxscyBiYWNrIHRvIFBsb3RseSBmb3IgdGhpcyBpbWFnZSwgYXMgYmVmb3JlLiBOb3QgY29tbWl0dGVkIHRvXG4gICAgLy8gYHRoaXMuZGVzY3JpcHRvcmAgaGVyZTogdGhlIHByZXZpb3VzIGltYWdlIHN0YXlzIG1vdW50ZWQgKGFuZCBrZWVwcyB1c2luZ1xuICAgIC8vIGl0cyBvd24gZGVzY3JpcHRvcikgdW50aWwgcGxvdCgpLlxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBhd2FpdCBwb2xsRGVzY3JpcHRvcihodHRwRmV0Y2hKc29uKHRoaXMuaHR0cCksIHRpbGVzSW5mb1VybCh0aGlzLmFwaSwgaW5mb0I2NCksIHtcbiAgICAgIGRlYWRsaW5lTXM6IHRoaXMudGlsZXNJbmZvVGltZW91dE1zLFxuICAgICAgaW50ZXJ2YWxNczogT1NEX1RJTEVTX0lORk9fUE9MTF9JTlRFUlZBTF9NUyxcbiAgICAgIHNpZ25hbCxcbiAgICAgIHRhZzogJ1tPU0RdJyxcbiAgICB9KTtcbiAgICBpZiAoIWRlc2NyaXB0b3IpIHRocm93IG5ldyBFcnJvcigndGlsZXMvaW5mbyBnYXZlIG5vIGRlc2NyaXB0b3Ig4oCUIGZpbGUgc3RpbGwgY2FjaGluZyBvciBub3QgdGlsZWFibGUnKTtcbiAgICByZXR1cm4geyBkZXNjcmlwdG9yLCBpbmZvQjY0LCB6OiB6SW5kZXggfHwgMCwgZmlsZW5hbWUgfTtcbiAgfVxuXG4gIC8qKiBNb3VudCB0aGUgdmlld2VyIHdpdGggYSBjdXN0b20gdGlsZSBzb3VyY2UgcG9pbnRpbmcgYXQgYEdFVCAvdGlsZWAuICovXG4gIHBsb3QoXG4gICAgcGxvdERpdjogc3RyaW5nLFxuICAgIGltYWdlTG9hZGVkOiBhbnksXG4gICAgaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLFxuICAgIF9zY3JlZW5IZWlnaHQ6IG51bWJlcixcbiAgICBfcGxvdFR5cGU6IFBsb3RUeXBlLFxuICAgIGluUGxhY2U/OiBib29sZWFuLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBpbWFnZUxvYWRlZCBhcyBPc2RMb2FkZWQ7XG4gICAgY29uc3QgZCA9IGxvYWRlZD8uZGVzY3JpcHRvcjtcbiAgICBpZiAoIWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIC8vIFJlLWVzdGFibGlzaCB0aGUgY29sb3JtYXAgc3Vic2NyaXB0aW9uIGlmIGEgcHJpb3IgY29tcG9uZW50IHRlYXJkb3duXG4gICAgLy8gKHVuc3Vic2NyaWJlKCkpIHRvcmUgaXQgZG93biDigJQgdGhpcyBzZXJ2aWNlIGlzIGEgcm9vdCBzaW5nbGV0b24sIHNvIHRoZVxuICAgIC8vIGNvbnN0cnVjdG9yIHdvbid0IHJ1biBhZ2FpbiB0byByZWNyZWF0ZSBpdC5cbiAgICB0aGlzLnJlY29sb3IuZW5zdXJlU3Vic2NyaXB0aW9uKCk7XG4gICAgLy8gQSBuZXcgaW1hZ2U6IGEgc3Ryb2tlIG9yIFNBTSBwcm9tcHQgaW4gcHJvZ3Jlc3MgYmVsb25nZWQgdG8gdGhlIG9sZCBvbmUuXG4gICAgaWYgKCFpblBsYWNlKSB0aGlzLmNhbnZhc1Rvb2xzLnJlc2V0QWxsKCk7XG4gICAgLy8gT1NEIHRpbGVzIG5hdGl2ZWx5LCBzbyB0aGUgaW4tcGxhY2UgKGxhcmdlKSBwYXNzIGlzIG5vcm1hbGx5IGEgbm8tb3BcbiAgICAvLyBvbmNlIG1vdW50ZWQg4oCUIHRoZSB0aWxlIHB5cmFtaWQgSVMgdGhlIGZ1bGwgcmVzb2x1dGlvbiByZWdhcmRsZXNzIG9mXG4gICAgLy8gd2hpY2ggSW1hZ2VJbmZvIHRpZXIgcmVxdWVzdGVkIGl0LiBTaW1wbGUgbW9kZSBoYXMgbm8gcHlyYW1pZCB0byBmYWxsXG4gICAgLy8gYmFjayBvbjogaXQgZGlzcGxheXMgbGl0ZXJhbGx5IHdoYXRldmVyIFVSTCB3YXMgbGFzdCBvcGVuZWQsIHNvXG4gICAgLy8gd2l0aG91dCB0aGlzIHN3YXAgdGhlIHNtYWxsIHRpZXIncyAxMjhweCBwbGFjZWhvbGRlciB3b3VsZCBzdGF5IG9uXG4gICAgLy8gc2NyZWVuIGZvcmV2ZXIgKHBpeGVsYXRlZCwgbmV2ZXIgXCJzaGFycGVuaW5nXCIgbGlrZSB0aGUgdGlsZWQgcGF0aCkuXG4gICAgaWYgKGluUGxhY2UgJiYgdGhpcy52aWV3ZXIpIHtcbiAgICAgIHRoaXMuc2ltcGxlLnJlZnJlc2hJblBsYWNlKGxvYWRlZCwgaW1hZ2VJbmZvKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMucGxvdERpdiA9IHBsb3REaXY7XG4gICAgdGhpcy5jaHJvbWUub25Nb3VudCgpOyAvLyB0aGUgdG9vbGJhciBpcyByZS1sb2NhdGVkIGZvciB0aGlzIG1vdW50XG4gICAgdGhpcy5jdXJyZW50RmlsZU5hbWUgPSBpbWFnZUluZm8/LmZpbGVOYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRvciA9IGQ7XG4gICAgdGhpcy5pbmZvQjY0ID0gbG9hZGVkLmluZm9CNjQ7XG4gICAgdGhpcy5jdXJyZW50WiA9IGxvYWRlZC56O1xuICAgIHRoaXMuc2ltcGxlLmNvbW1pdChsb2FkZWQsIGltYWdlSW5mbyk7XG4gICAgLy8gVGhlIGRlc2NyaXB0b3IncyBwaHlzaWNhbCBwaXhlbCBzaXplIChzZXJ2ZXIgQmlvLUZvcm1hdHMgYC90aWxlcy9pbmZvYCkgaXNcbiAgICAvLyBhdXRob3JpdGF0aXZlIOKAlCBwdXNoIGl0IGludG8gdGhlIHNoYXJlZCBtZXRhIHNvIHRoZSBSZWdpb24gRWRpdG9yIHJlcG9ydHNcbiAgICAvLyBhcmVhcyBpbiDCtW3Csi9tbcKyLCBtYXRjaGluZyB0aGUgc2NhbGUgYmFyIGJ1aWx0IGZyb20gYGQubXBwWGAgYmVsb3cuXG4gICAgdGhpcy5zdG9yZS5zZXRQaHlzaWNhbFBpeGVsU2l6ZShkLm1wcFgsIGQubXBwWSk7XG4gICAgLy8gSXRzIGNoYW5uZWwgbmFtZXMgYW5kIHRpbnRzIHRvbywgd2hpY2ggYSBob3N0J3MgaW1hZ2UgbWV0YSBtYXkgbm90IGNhcnJ5LlxuICAgIHRoaXMuc3RvcmUuYWRvcHRDaGFubmVsSW5mbyhkLmNoYW5uZWxJbmZvKTtcbiAgICAvLyBVc2UgdGhlIFNBTUUgZ3JheXNjYWxlIGZsYWcgdGhlIGNvbG9ybWFwIGRyb3Bkb3duIC8gUGxvdGx5IHVzZVxuICAgIC8vIChpbWFnZUluZm8uaXNHcmF5c2NhbGUg4oaQIHJnYkNoYW5uZWxzID09PSAxKS4gVGhlIGRlc2NyaXB0b3IncyBgY2hhbm5lbHNgXG4gICAgLy8gKGNoYW5uZWxDb3VudCkgZGl2ZXJnZXMgZnJvbSByZ2JDaGFubmVscyBmb3Igc3RhY2tzLCB3aGljaCBsZWZ0IGdyYXlzY2FsZVxuICAgIC8vIHN0YWNrcyB1bi1yZWNvbG9yZWQgZXZlbiB0aG91Z2ggdGhlIGNvbG9ybWFwIHNlbGVjdG9yIHdhcyBzaG93bi5cbiAgICB0aGlzLmlzR3JheXNjYWxlSW1hZ2UgPSAhIWltYWdlSW5mbz8uaXNHcmF5c2NhbGU7XG4gICAgLy8gU2ltcGxlIChub24tdGlsZWQsIGluLW1lbW9yeSkgaW1hZ2U6IG5vIHB5cmFtaWQsIG5vIHBlci1jaGFubmVsIHRpbGVzLCBhbmRcbiAgICAvLyBubyBzZXJ2ZXItc2lkZSBpbnRlbnNpdHkgc2FtcGxpbmcg4oCUIE9TRCdzIHNpbmdsZS1pbWFnZSBzb3VyY2UgZGVjb2Rlc1xuICAgIC8vIHVybHNbel0gZGlyZWN0bHkuIFNraXAgdGhlIHdob2xlIHRpbGVkLXNldHVwIHBhdGggYmVsb3cuXG4gICAgY29uc3Qgc2ltcGxlID0gISFsb2FkZWQuc2ltcGxlO1xuICAgIGlmIChzaW1wbGUpIHtcbiAgICAgIHRoaXMucmVhbExldmVscyA9IDE7XG4gICAgICB0aGlzLmlzTXVsdGlDaGFubmVsID0gZmFsc2U7XG4gICAgICB0aGlzLmNhY2hlLmNsZWFyQ2hhbm5lbEdyb3VwcygpO1xuICAgICAgdGhpcy5kZXN0cm95Vmlld2VyKCk7XG4gICAgICAvLyBUYWtlIG92ZXIgdGhlIGNvbXBvc2l0ZSBVUkwgYW5kIGJpbiB0aGUgaGlzdG9ncmFtcyDigJQgQUZURVIgZGVzdHJveVZpZXdlclxuICAgICAgLy8gKGl0cyBsYXN0IGFjdCBpcyBzYW1wbGVyLmNsZWFyKCkpLlxuICAgICAgdGhpcy5zaW1wbGUubW91bnQobG9hZGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQSB0aWxlZCBpbWFnZSBpcyBnb2luZyBvbiBzY3JlZW46IG5vIHNpbXBsZS1tb2RlIHN0YXRlIG1heSBzdXJ2aXZlIGl0XG4gICAgICAvLyAobG9hZCgpIG5vcm1hbGx5IGNsZWFyZWQgaXQgYWxyZWFkeTsgcGxvdCgpIGlzIHdoYXQgbW91bnRzIHRoZSBpbWFnZSkuXG4gICAgICB0aGlzLnNpbXBsZS5yZXNldCgpO1xuICAgICAgY29uc3QgcGxhbiA9IHBsYW5UaWxlZE1vdW50KGQpO1xuICAgICAgdGhpcy5yZWFsTGV2ZWxzID0gcGxhbi5yZWFsTGV2ZWxzO1xuICAgICAgdGhpcy5pc011bHRpQ2hhbm5lbCA9IHBsYW4ubXVsdGlDaGFubmVsO1xuICAgICAgdGhpcy5jYWNoZS5jbGVhckNoYW5uZWxHcm91cHMoKTtcbiAgICAgIHRoaXMuZGVzdHJveVZpZXdlcigpO1xuICAgICAgLy8gQXV0by1yYW5nZSBncmF5c2NhbGUgdGlsZXMgdG8gdGhlIGltYWdlJ3MgYWN0dWFsIGludGVuc2l0eSBzcGFuIChsaWtlIHRoZVxuICAgICAgLy8gaGVhdG1hcCksIHNhbXBsaW5nIHRoZSBjb2Fyc2VzdCB0aWxlIGxldmVsIHNvIHRoZSB3aW5kb3cgbWF0Y2hlcyB0aGUgcmF3XG4gICAgICAvLyB0aWxlIHZhbHVlcy4gRmlyZS1hbmQtZm9yZ2V0OiBpdCByZS1pbnZhbGlkYXRlcyBvbmNlIHRoZSB3aW5kb3cgaXMga25vd247XG4gICAgICAvLyB0aWxlcyBwYWludCB1bndpbmRvd2VkIHVudGlsIHRoZW4uIChNdWx0aWNoYW5uZWwgd2luZG93cyBhcmUgcGVyLWNoYW5uZWwsXG4gICAgICAvLyBkZWZhdWx0aW5nIHRvIGZ1bGwgcmFuZ2U7IHRoZSB1c2VyIGF1dG8vZWRpdHMgZWFjaCBjaGFubmVsLikgU3RhcnRlZFxuICAgICAgLy8gQUZURVIgZGVzdHJveVZpZXdlcjogaXRzIHNhbXBsZXIuY2xlYXIoKSBzdXBlcnNlZGVzIGV2ZXJ5IHJ1biBpbiBmbGlnaHQuXG4gICAgICBpZiAodGhpcy5pc011bHRpQ2hhbm5lbCkge1xuICAgICAgICB2b2lkIHRoaXMuc2FtcGxlci5jb21wdXRlTXVsdGlDaGFubmVsSGlzdG9ncmFtcyhkLCBsb2FkZWQuaW5mb0I2NCwgbG9hZGVkLnopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm9pZCB0aGlzLnNhbXBsZXIuY29tcHV0ZUltYWdlV2luZG93KGQsIGxvYWRlZC5pbmZvQjY0LCBsb2FkZWQueik7XG4gICAgICB9XG4gICAgICAvLyBTaXplIHRoZSBzbGljZSBjYWNoZSBmb3IgdGhpcyBpbWFnZTogTFJVIGNhcCB0byBob2xkIHRoZSB3aG9sZSBzdGFja1xuICAgICAgLy8gKGNhcHBlZCkgYW5kIHNraXAgYmFja2dyb3VuZCBwcmVsb2FkaW5nIGZvciBzdGFja3MgdG9vIGxhcmdlIHRvIHByZWxvYWRcbiAgICAgIC8vICh3b3VsZCBmbG9vZCBmdWxsLXJlcyByZWFkcykuIE5vcm1hbCBzdGFja3Mga2VlcCB0aGUgZmxpY2tlci1mcmVlIHByZS1jYWNoZS5cbiAgICAgIHRoaXMuY2FjaGUuY29uZmlndXJlKGQueiA/PyAxLCBwbGFuLmNvYXJzZVRpbGVzKTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgbW9kZTogT1NEJ3Mgc2luZ2xlLWltYWdlIHNvdXJjZSBkZWNvZGVzIHRoZSBVUkwgKGJsb2I6L2RhdGE6L2h0dHApXG4gICAgLy8gZGlyZWN0bHkg4oCUIG5vIHB5cmFtaWQsIG5vIHNlcnZlci4gVGlsZWQgbW9kZTogdGhlIGN1c3RvbSBzZXJ2ZXItYmFja2VkIHRpbGVcbiAgICAvLyBzb3VyY2UgKG11bHRpY2hhbm5lbCBvcGVucyBvbiBjaGFubmVsIDA7IHRoZSBvcGVuIGhhbmRsZXIgdGhlbiBzd2FwcyBpbiB0aGlzXG4gICAgLy8gc2xpY2UncyBwZXItY2hhbm5lbCBncm91cCBhbmQgdGhlIGJhY2tncm91bmQgbG9hZGVyIHByZS1maWxscyB0aGUgcmVzdCkuXG4gICAgY29uc3QgdGlsZVNvdXJjZSA9IHNpbXBsZVxuICAgICAgPyB7IHR5cGU6ICdpbWFnZScsIHVybDogbG9hZGVkLnVybCB9XG4gICAgICA6IHRoaXMuYnVpbGRUaWxlU291cmNlKGQsIGxvYWRlZC5pbmZvQjY0LCBsb2FkZWQueiwgdGhpcy5pc011bHRpQ2hhbm5lbCA/IDAgOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBidWlsZFZpZXdlck9wdGlvbnMoe1xuICAgICAgaWQ6IHBsb3REaXYsXG4gICAgICBuYXZpZ2F0b3JWaXNpYmxlOiB0aGlzLmNocm9tZS5uYXZpZ2F0b3JWaXNpYmxlLFxuICAgICAgc21vb3RoaW5nOiB0aGlzLmNocm9tZS5zbW9vdGhpbmdFbmFibGVkLFxuICAgICAgYXV0aEhlYWRlcnM6IHRoaXMuYXV0aEhlYWRlcnMsXG4gICAgICBzbGljZUNvdW50OiBkLnogPz8gMSxcbiAgICAgIG1heFNsaWNlczogdGhpcy5jYWNoZS5tYXhTbGljZXMoKSxcbiAgICAgIGNoYW5uZWxJbWFnZXM6IHRoaXMuaXNNdWx0aUNoYW5uZWwgPyAoZC5jaGFubmVscyA/PyAxKSA6IDEsXG4gICAgfSk7XG4gICAgdGhpcy52aWV3ZXIgPSBjcmVhdGVWaWV3ZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wZW5WaWV3ZXIodGhpcy52aWV3ZXIsIHRpbGVTb3VyY2UsICh2KSA9PiB0aGlzLm9uVmlld2VyT3BlbmVkKHYsIGQsIHNpbXBsZSwgcGxvdERpdikpO1xuICB9XG5cbiAgLyoqIFdpcmUgYSBmcmVzaGx5IG9wZW5lZCB2aWV3ZXI6IHRoZSByZWdpb24gb3ZlcmxheSwgY29vcmRpbmF0ZSB0cmFuc2Zvcm0gYW5kXG4gICAqICBzY2FsZSBiYXIsIHRoZSBzbGljZSBjYWNoZSwgdGhlIHJlY29sb3IgcGlwZWxpbmUsIHRoZSB2aWV3cG9ydCBzdHJlYW1zIGFuZFxuICAgKiAgdGhlIGNocm9tZS4gKi9cbiAgcHJpdmF0ZSBvblZpZXdlck9wZW5lZCh2aWV3ZXI6IE9wZW5TZWFkcmFnb24uVmlld2VyLCBkOiBUaWxlRGVzY3JpcHRvciwgc2ltcGxlOiBib29sZWFuLCBwbG90RGl2OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBSZWdpb24gb3ZlcmxheSByZWFkcy93cml0ZXMgdGhlIHNoYXJlZCBSZWdpb25TdG9yZSwgc28gcmVnaW9ucyBzdGF5XG4gICAgLy8gaW4gc3luYyB3aXRoIFBsb3RseSBhbmQgdGhlIFJlZ2lvbiBFZGl0b3IuIFJlY3JlYXRlIGl0IHBlciBvcGVuKCkgc29cbiAgICAvLyBpdCBiaW5kcyB0byB0aGUgZnJlc2hseS1vcGVuZWQgdmlld2VyJ3MgY2FudmFzL01vdXNlVHJhY2tlci5cbiAgICB0aGlzLm92ZXJsYXk/LmRlc3Ryb3koKTtcbiAgICB0aGlzLm92ZXJsYXkgPSBuZXcgT3NkUmVnaW9uT3ZlcmxheSh2aWV3ZXIsIHRoaXMucmVnaW9uU3RvcmUpO1xuICAgIHRoaXMuY29vcmRUcmFuc2Zvcm0gPSBuZXcgT3NkQ29vcmRpbmF0ZVRyYW5zZm9ybSh2aWV3ZXIpO1xuICAgIHRoaXMuc2NhbGVCYXIgPSBuZXcgT3NkU2NhbGVCYXIodmlld2VyLCBkLm1wcFggPz8gMCk7XG4gICAgdGhpcy50aWxlTG9hZGluZz8uZGVzdHJveSgpO1xuICAgIHRoaXMudGlsZUxvYWRpbmcgPSBuZXcgT3NkVGlsZUxvYWRpbmcodmlld2VyIGFzIHVua25vd24gYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBPc2RUaWxlTG9hZGluZz5bMF0pO1xuICAgIGlmIChzaW1wbGUpIHtcbiAgICAgIC8vIEEgc2luZ2xlLCBzZWxmLWNvbnRhaW5lZCBpbWFnZSDigJQgbm8gc2xpY2UgY2FjaGUgdG8gc2VlZC4gSXRzIHotc2NydWIgYW5kXG4gICAgICAvLyByZWNvbXBvc2l0ZSByZS1vcGVuIHRoZSB2aWV3ZXI7IG9uZSBwZXJzaXN0ZW50IGhhbmRsZXIgcmVwb3J0cyBhIGZhaWxlZFxuICAgICAgLy8gcmUtb3BlbiAoYSBvbmNlLWhhbmRsZXIgcGVyIHNjcnViIHdvdWxkIHBpbGUgdXApLlxuICAgICAgdmlld2VyLmFkZEhhbmRsZXIoJ29wZW4tZmFpbGVkJywgKGUpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbT1NEXSBzbGljZSByZS1vcGVuIGZhaWxlZCcsIHRoaXMuY3VycmVudFosIChlIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KT8ubWVzc2FnZSA/PyBlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhY2hlLmFkb3B0T3BlbmVkU2xpY2UodGhpcy5jdXJyZW50Wik7XG4gICAgfVxuICAgIC8vIFRoZSB3YW5kIHNhbXBsZXMgdGhlICpyZW5kZXJlZCB2aWV3cG9ydCosIHNvIGl0cyBwaXhlbCBtYXRyaXggaXMgb25seVxuICAgIC8vIHZhbGlkIGZvciB0aGUgY3VycmVudCB2aWV3IOKAlCBkcm9wIGl0IHdoZW5ldmVyIHRoZSB2aWV3cG9ydCBjaGFuZ2VzLlxuICAgIHZpZXdlci5hZGRIYW5kbGVyKCd2aWV3cG9ydC1jaGFuZ2UnLCAoKSA9PiB7XG4gICAgICB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDtcbiAgICB9KTtcbiAgICAvLyBSZWNvbG9yIGV2ZXJ5IHRpbGUgKG1haW4gdmlld2VyIGFuZCBuYXZpZ2F0b3IpIHRocm91Z2ggdGhlIGRpc3BsYXkgcGlwZWxpbmUuXG4gICAgdGhpcy5yZWNvbG9yLmF0dGFjaCh2aWV3ZXIpO1xuICAgIC8vIFByZWZldGNoIGFkamFjZW50IHotc2xpY2VzIG9uY2UgdGhlIHZpZXcgc2V0dGxlcyAoYW5kIG9uIGVhY2ggc2V0dGxlLFxuICAgIC8vIHNvIGl0IHRyYWNrcyB0aGUgY3VycmVudCB2aWV3cG9ydCBhcyB0aGUgdXNlciBwYW5zL3pvb21zKS4gU2ltcGxlIG1vZGVcbiAgICAvLyBoYXMgYSBzaW5nbGUgZnJhbWUsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBwcmVmZXRjaC5cbiAgICBpZiAoIXNpbXBsZSkgdmlld2VyLmFkZEhhbmRsZXIoJ2FuaW1hdGlvbi1maW5pc2gnLCAoKSA9PiB0aGlzLmNhY2hlLnNjaGVkdWxlUHJlZmV0Y2goKSk7XG4gICAgLy8gVGVsbCBsaXN0ZW5lcnMgKHRoZSBpbnRlbnNpdHkgaW5zZXQpIHRoZSB2aXNpYmxlIGltYWdlIHJlZ2lvbiB3aGVuZXZlclxuICAgIC8vIHRoZSB2aWV3IHNldHRsZXMsIHNvIHRoZXkgY2FuIHJlLXNhbXBsZSBhdCB0aGUgY3VycmVudCB6b29tIHJlc29sdXRpb24uXG4gICAgdmlld2VyLmFkZEhhbmRsZXIoJ2FuaW1hdGlvbi1maW5pc2gnLCAoKSA9PiB0aGlzLnZpZXdwb3J0LmVtaXRWaWV3cG9ydENoYW5nZSgpKTtcbiAgICAvLyBFdmVyeSByZWRyYXcgKHBhbi96b29tIGFuaW1hdGlvbiBmcmFtZXMsIHJlc2l6ZSkg4oCUIGZvciBhIGNvbnRyaWJ1dGVkXG4gICAgLy8gcGxvdCBtb2RlJ3Mgb3ZlcmxheSwgd2hpY2ggaGFzIHRvIG1vdmUgd2l0aCB0aGUgaW1hZ2UsIG5vdCBhZnRlciBpdC5cbiAgICB2aWV3ZXIuYWRkSGFuZGxlcigndXBkYXRlLXZpZXdwb3J0JywgKCkgPT4gdGhpcy52aWV3cG9ydC5zY2hlZHVsZUZyYW1lKCkpO1xuICAgIGlmICghc2ltcGxlKSB0aGlzLmNhY2hlLnNjaGVkdWxlUHJlZmV0Y2goKTtcbiAgICAvLyBUb29sYmFyIG51ZGdlcywgZml0LXRvLXZpZXcgYXMgdGhlIGxheW91dCBzZXR0bGVzLCBuYXZpZ2F0b3Igc2l6aW5nLlxuICAgIHRoaXMuY2hyb21lLmF0dGFjaCh2aWV3ZXIsIHBsb3REaXYpO1xuICB9XG5cbiAgLyoqIFRoZSBgR0VUIC90aWxlYCBzb3VyY2UgZm9yIHNsaWNlIGB6YCAob25lIGNoYW5uZWwncywgd2hlbiBnaXZlbikg4oCUIHNlZVxuICAgKiAge0BsaW5rIGJ1aWxkT3NkVGlsZVNvdXJjZX0uIE11bHRpY2hhbm5lbCBkcmF3cyBvZmYgdGhlIHJlYWwgbGV2ZWxzIG9ubHkuICovXG4gIHByaXZhdGUgYnVpbGRUaWxlU291cmNlKFxuICAgIGQ6IFRpbGVEZXNjcmlwdG9yLFxuICAgIGluZm9CNjQ6IHN0cmluZyxcbiAgICB6OiBudW1iZXIsXG4gICAgY2hhbm5lbD86IG51bWJlcixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiBidWlsZE9zZFRpbGVTb3VyY2UoZCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIGluZm9CNjQsXG4gICAgICB6LFxuICAgICAgY2hhbm5lbCxcbiAgICAgIHJlYWxMZXZlbHNPbmx5OiB0aGlzLmlzTXVsdGlDaGFubmVsID8gdGhpcy5yZWFsTGV2ZWxzIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95Vmlld2VyKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2FuY2VsQmFja2dyb3VuZExvYWQoKTtcbiAgICB0aGlzLnZpZXdwb3J0LmNhbmNlbEZyYW1lKCk7XG4gICAgLy8gVGVhciBkb3duIGFuIGFybWVkIHBpeGVsIHRvb2wncyBvdmVybGF5ICh6b29tLXRvLWJveCBzdGF5cyBhcm1lZCwgYXMgYmVmb3JlKS5cbiAgICBpZiAodGhpcy5jYW52YXNUb29scy5hY3RpdmVJZCAhPT0gJ3pvb21Ub0JveCcpIHRoaXMuY2FudmFzVG9vbHMuZGVhY3RpdmF0ZSgpO1xuICAgIGlmICh0aGlzLm92ZXJsYXkpIHtcbiAgICAgIHRoaXMub3ZlcmxheS5kZXN0cm95KCk7XG4gICAgICB0aGlzLm92ZXJsYXkgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY2FsZUJhcikge1xuICAgICAgdGhpcy5zY2FsZUJhci5kZXN0cm95KCk7XG4gICAgICB0aGlzLnNjYWxlQmFyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy50aWxlTG9hZGluZz8uZGVzdHJveSgpO1xuICAgIHRoaXMudGlsZUxvYWRpbmcgPSBudWxsO1xuICAgIGlmICh0aGlzLnZpZXdlcikge1xuICAgICAgdGhpcy52aWV3ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy52aWV3ZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmNvb3JkVHJhbnNmb3JtID0gbnVsbDtcbiAgICB0aGlzLmNhY2hlLnJlc2V0KCk7XG4gICAgdGhpcy5zYW1wbGVyLmNsZWFyKCk7XG4gIH1cblxuICAvKiogVGhpcyBiYWNrZW5kJ3MgcmVnaW9uIHJlbmRlcmVyICh0aGUgU1ZHIG92ZXJsYXkpLCBvbmNlIGEgcGxvdCBpcyBtb3VudGVkLiAqL1xuICBnZXRSZWdpb25PdmVybGF5KCk6IElSZWdpb25PdmVybGF5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheTtcbiAgfVxuXG4gIC8qKiBPU0QgcmVuZGVycyBvbmx5IHRoZSBpbWFnZSB0eXBlIOKAlCBubyBpc29zdXJmYWNlLCBzbyBubyBjb250cm9scy4gKi9cbiAgZ2V0SXNvc3VyZmFjZUNvbnRyb2xzKCk6IElJc29zdXJmYWNlQ29udHJvbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBPU0QgcmVuZGVycyBvbmx5IHRoZSBpbWFnZSB0eXBlIOKAlCBubyAzRCBzY2VuZXMsIHNvIG5vIGNvbnRyb2xzLiAqL1xuICBnZXRTdXJmYWNlM2RDb250cm9scygpOiBJU3VyZmFjZTNkQ29udHJvbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBPU0QgcmVuZGVycyBvbmx5IHRoZSBpbWFnZSB0eXBlIOKAlCBubyBMSU5FIGludGVuc2l0eSBST0lzLCBzbyBubyBjb250cm9scy4gKi9cbiAgZ2V0SW50ZW5zaXR5Q29udHJvbHMoKTogSUludGVuc2l0eUNvbnRyb2xzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHRvT3ZlcmxheU1vZGUobW9kZTogc3RyaW5nIHwgZmFsc2UpOiBSZWdpb25Ub29sTW9kZSB7XG4gICAgcmV0dXJuIE9WRVJMQVlfTU9ERVMuaGFzKG1vZGUgYXMgUmVnaW9uVG9vbE1vZGUpID8gKG1vZGUgYXMgUmVnaW9uVG9vbE1vZGUpIDogJ25vbmUnO1xuICB9XG5cbiAgcmVsb2FkQW5kUGxvdCgpOiB2b2lkIHtcbiAgICAvKiBob3N0IHJlLWRyaXZlcyBwbG90KCkgdmlhIHRoZSBpbWFnZS1pbmZvIHN0cmVhbSAqL1xuICB9XG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveVZpZXdlcigpO1xuICAgIHRoaXMuc2ltcGxlLnJlc2V0KCk7XG4gIH1cbiAgcmVsYXlvdXQoX3RydWVJbWFnZVNpemU/OiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnQua2VlcFZpZXdBY3Jvc3NSZXNpemUoKTtcbiAgfVxuICByZXNldEF4ZXMoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydC5nb0hvbWUoKTtcbiAgfVxuICBhdXRvc2NhbGUoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydC5nb0hvbWUoKTtcbiAgfVxuICB6b29tSW4oKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydC56b29tQnkoMSk7XG4gIH1cbiAgem9vbU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0Lnpvb21CeSgtMSk7XG4gIH1cbiAgc2V0RHJhZ01vZGUobW9kZTogc3RyaW5nIHwgZmFsc2UpOiB2b2lkIHtcbiAgICAvLyBSZWN0YW5nbGUvcG9seWdvbiBkcmF3aW5nIHJ1biBvbiB0aGUgU1ZHIG92ZXJsYXk7IHdhbmQvZXJhc2VyL3pvb20tYm94XG4gICAgLy8gKGN1c3RvbSBQbG90bHkgb3ZlcmxheXMpIGFyZSByb3V0ZWQgdG8gUGxvdGx5IGJ5IHRoZSByb3V0ZXIgYW5kIGFyZW4ndFxuICAgIC8vIGhhbmRsZWQgaGVyZSB5ZXQuXG4gICAgdGhpcy5vdmVybGF5Py5zZXRNb2RlKHRoaXMudG9PdmVybGF5TW9kZShtb2RlKSk7XG4gIH1cblxuICBzZXRTaG93U3RhY2soX3Nob3dzdGFjazogYm9vbGVhbik6IHZvaWQge1xuICAgIC8qIE9TRCBuYXZpZ2F0ZXMgdGhlIHN0YWNrIHZpYSB0aGUgei1zbGlkZXIgLT4gc2V0WkluZGV4ICovXG4gIH1cblxuICAvKiogU2hvdy9oaWRlIHRoZSBvdmVydmlldyBuYXZpZ2F0b3IgKG5vdywgYW5kIGZvciB0aGUgbmV4dCB2aWV3ZXIpLiAqL1xuICBzZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNocm9tZS5zZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGUpO1xuICB9XG5cbiAgLyoqIFRvZ2dsZSBiaWxpbmVhciBzbW9vdGhpbmcgdnMgbmVhcmVzdC1uZWlnaGJvdXIgKG5vdywgYW5kIGZvciB0aGUgbmV4dCB2aWV3ZXIpLiAqL1xuICBzZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2hyb21lLnNldEltYWdlU21vb3RoaW5nRW5hYmxlZChlbmFibGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2FwIHRoZSBkaXNwbGF5ZWQgei1zbGljZSBsaXZlLiBTbGljZXMgYXJlIGtlcHQgYXMgc2VwYXJhdGUgdGlsZWQgaW1hZ2VzIGluXG4gICAqIHRoZSB3b3JsZCwgc28gc3dpdGNoaW5nIGlzIGp1c3QgYW4gb3BhY2l0eSB0b2dnbGU6IGEgcHJldmlvdXNseS12aXNpdGVkIHNsaWNlXG4gICAqIHNob3dzIGluc3RhbnRseSAoaXRzIGRlY29kZWQgKyByZWNvbG9yZWQgdGlsZXMgYXJlIHN0aWxsIHJlc2lkZW50KSwgYW5kIGFcbiAgICogbmV2ZXItc2VlbiBzbGljZSBpcyBhZGRlZCBvbmNlLiBUaGUgcmVnaW9uIG92ZXJsYXksIGNvb3JkaW5hdGUgdHJhbnNmb3JtLFxuICAgKiBzY2FsZSBiYXIsIGNvbG9ybWFwIHBpcGVsaW5lIGFuZCBjdXJyZW50IHpvb20vcGFuIGFsbCBwZXJzaXN0IOKAlCB0aGUgeC95XG4gICAqIGdlb21ldHJ5IGlzIGlkZW50aWNhbCBhY3Jvc3Mgc2xpY2VzLlxuICAgKlxuICAgKiBTaW1wbGUgbW9kZSAodGlsZWQ6ZmFsc2Ug4oCUIGEgbnVtYmVyZWQgaW1hZ2Ugc2VyaWVzIGFzc2VtYmxlZCBjbGllbnQtc2lkZSxcbiAgICogZWFjaCBzbGljZSBpdHMgb3duIGNvbXBsZXRlIGltYWdlIHdpdGggbm8gc2hhcmVkIHRpbGUgc2VydmVyKSBoYXMgbm9cbiAgICogcHlyYW1pZCB0byB0b2dnbGUgb3BhY2l0eSBvbiwgc28gaXQgcmUtb3BlbnMgdGhlIHZpZXdlciBvbiB0aGUgbmV3XG4gICAqIHNsaWNlJ3MgVVJMIGluc3RlYWQuIHByZXNlcnZlVmlld3BvcnQgKHZpZXdlciBvcHRpb24sIHNlZSBwbG90KCkpIGtlZXBzXG4gICAqIHRoZSBjdXJyZW50IHpvb20vcGFuIGFjcm9zcyB0aGF0IHJlb3Blbi5cbiAgICovXG4gIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHogPSB6SW5kZXggfHwgMDtcbiAgICBpZiAoeiA9PT0gdGhpcy5jdXJyZW50WikgcmV0dXJuO1xuICAgIGlmICghdGhpcy52aWV3ZXIpIHJldHVybjtcbiAgICBpZiAodGhpcy5zaW1wbGUuYWN0aXZlKSB7XG4gICAgICB0aGlzLnNpbXBsZS5zZXRaSW5kZXgoeik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kZXNjcmlwdG9yIHx8ICF0aGlzLmluZm9CNjQpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRaID0gejtcbiAgICB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDsgLy8gd2FuZCByZWFkYmFjayBpcyBzbGljZS1zcGVjaWZpY1xuICAgIHRoaXMuY2FjaGUuc2hvd1NsaWNlKHopO1xuICAgIGlmICh0aGlzLmlzTXVsdGlDaGFubmVsKSB7XG4gICAgICB0aGlzLnNhbXBsZXIuY29tcHV0ZU11bHRpQ2hhbm5lbEhpc3RvZ3JhbXModGhpcy5kZXNjcmlwdG9yLCB0aGlzLmluZm9CNjQsIHopO1xuICAgIH1cbiAgfVxuXG4gIHNldFN0YWNrTG9hZGluZyhzdGFja0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrTG9hZGluZyQubmV4dChzdGFja0xvYWRpbmcpO1xuICB9XG4gIGlzU3RhY2tMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrTG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0U3RhY2tMb2FkaW5nUHJvZ3Jlc3MoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gb2YoMCk7IC8vIE9TRCBsb2FkcyBhIHN0YWNrJ3Mgc2xpY2VzIGxhemlseSAoU2xpY2VDYWNoZSk7IG5vIHByb2dyZXNzIHRvIHJlcG9ydFxuICB9XG5cbiAgZ2V0VHJ1ZUltYWdlU2l6ZSgpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yID8geyB3aWR0aDogdGhpcy5kZXNjcmlwdG9yLndpZHRoLCBoZWlnaHQ6IHRoaXMuZGVzY3JpcHRvci5oZWlnaHQgfSA6IG51bGw7XG4gIH1cbiAgZ2V0Q3VycmVudEltYWdlKCk6IFByb21pc2U8SW1hZ2UgfCBudWxsPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGRpc3BsYXllZCBwaXhlbHMg4oCUIHRoZSByZW5kZXJlZCB2aWV3cG9ydCAod2hhdCB0aGUgdXNlciBzZWVzLFxuICAgKiBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgem9vbSBhbmQgYW55IGNvbG9ybWFwIHJlY29sb3IpLCBhcyBSR0JBLiBGZWVkcyB0aGVcbiAgICogcHJvY2Vzc2luZy1waXBlbGluZSBkaWFsb2cncyBcInVzZSBjdXJyZW50IHZpZXdcIi4gUmV0dXJucyBudWxsIHVudGlsIHRpbGVzXG4gICAqIGFyZSBkcmF3bi5cbiAgICovXG4gIGdldERpc3BsYXllZFBpeGVsRGF0YSgpOiBQaXhlbERhdGEgfCBudWxsIHtcbiAgICByZXR1cm4gcmVhZERyYXdlclBpeGVscyh0aGlzLnZpZXdlcik7XG4gIH1cblxuICAvKiogSW1hZ2UtcGl4ZWwgcmVjdGFuZ2xlIHRoZSBkcmF3ZXIgY2FudmFzICh3aGF0IHtAbGluayBnZXREaXNwbGF5ZWRQaXhlbERhdGF9XG4gICAqICByZWFkcykgY3VycmVudGx5IGNvdmVycyDigJQgdW5jbGFtcGVkLCBzZWUgT3NkVmlld3BvcnRBZGFwdGVyLmRpc3BsYXllZFNvdXJjZVJlY3QuICovXG4gIGdldERpc3BsYXllZFNvdXJjZVJlY3QoKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnZpZXdwb3J0LmRpc3BsYXllZFNvdXJjZVJlY3QoKTtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCB0aGUgY3VycmVudGx5IHJlbmRlcmVkIHZpZXcgYXMgYSBQTkcgKFdZU0lXWUcpIOKAlCB0aGUgcGFyYWxsZWwgdG9cbiAgICogIFBsb3RseSdzIGRvd25sb2FkSW1hZ2UuIFRoZSBkcmF3ZXIgY2FudmFzIGFscmVhZHkgY2FycmllcyB0aGUgZGlzcGxheVxuICAgKiAgc2V0dGluZ3MgKHRoZSByZWNvbG9yIHBpcGVsaW5lIGJha2VzIHRoZW0gaW50byB0aGUgdGlsZXMpOyB0aGUgZnVsbC1yZXNvbHV0aW9uXG4gICAqICBzdGl0Y2hlZCBleHBvcnQgaXMgZXhwb3J0Q29tcG9zaXRlKCkuICovXG4gIGRvd25sb2FkSW1hZ2UoKTogdm9pZCB7XG4gICAgc2F2ZURyYXdlclNuYXBzaG90KHRoaXMudmlld2VyLCAoYmxvYikgPT4gc2F2ZUFzKGJsb2IsIGAke2ZpbGVTdGVtKHRoaXMuY3VycmVudEZpbGVOYW1lKX0ucG5nYCkpO1xuICB9XG5cbiAgc2V0UGxvdFR5cGUoX3Bsb3RUeXBlOiBQbG90VHlwZSk6IHZvaWQge1xuICAgIC8qIE9TRCBvbmx5IHJlbmRlcnMgdGhlIGltYWdlIHR5cGUgKi9cbiAgfVxuICBzZXRTdXJmYWNlRHJhZ01vZGUoX21vZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8qIDNEIG5vdCBzdXBwb3J0ZWQgYnkgT1NEICovXG4gIH1cbiAgcmVzZXRTdXJmYWNlQ2FtZXJhKCk6IHZvaWQge1xuICAgIC8qIDNEIG5vdCBzdXBwb3J0ZWQgYnkgT1NEICovXG4gIH1cblxuICAvKiogVGhlIHJvdXRlciByZWFkcyB0aGUgYXV0b3NjYWxlIGV2ZW50IGZyb20gUGxvdGx5IG9ubHkuICovXG4gIGdldEF1dG9zY2FsZUV2ZW50KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgLyoqIFZpc2libGUgaW1hZ2UgcmVnaW9uIChmdWxsLWltYWdlIHBpeGVsIGNvb3JkcyksIGVtaXR0ZWQgd2hlbiB0aGUgdmlld1xuICAgKiAgc2V0dGxlcy4gVGhlIGludGVuc2l0eSBpbnNldCByZS1zYW1wbGVzIHRoaXMgcmVnaW9uIGF0IHRoZSB6b29tIHJlc29sdXRpb24uICovXG4gIGdldEludGVuc2l0eVNhbXBsaW5nKCk6IElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMudmlld3BvcnRTb3VyY2U7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3cG9ydFNvdXJjZTogSUludGVuc2l0eVZpZXdwb3J0U291cmNlID0ge1xuICAgIGdldFZpZXdwb3J0Q2hhbmdlJDogKCkgPT4gdGhpcy52aWV3cG9ydC52aWV3cG9ydENoYW5nZSQuYXNPYnNlcnZhYmxlKCksXG4gIH07XG5cbiAgLyoqIFRoZSBuYXZpZ2F0b3IgYW5kIGltYWdlIHNtb290aGluZyAoc2VlIHtAbGluayBzZXROYXZpZ2F0b3JWaXNpYmxlfSkuICovXG4gIGdldE9zZFZpZXdPcHRpb25zKCk6IElPc2RWaWV3T3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMudmlld09wdGlvbnM7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3T3B0aW9uczogSU9zZFZpZXdPcHRpb25zID0ge1xuICAgIHNldE5hdmlnYXRvclZpc2libGU6ICh2aXNpYmxlKSA9PiB0aGlzLnNldE5hdmlnYXRvclZpc2libGUodmlzaWJsZSksXG4gICAgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkOiAoZW5hYmxlZCkgPT4gdGhpcy5zZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZW5hYmxlZCksXG4gIH07XG5cbiAgLyoqIE9TRCByZW5kZXJzIG5vIHZvbHVtZXMuICovXG4gIGdldFZvbHVtZVJlc29sdXRpb24oKTogbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogVGhlIHZpZXdwb3J0IGEgY29udHJpYnV0ZWQgcGxvdCBtb2RlIGRyYXdzIG92ZXI6IG9uZSBzdGFibGUgb2JqZWN0IHRoYXRcbiAgICogIGFsd2F5cyByZWFkcyB0aGUgY3VycmVudCB2aWV3ZXIgKHNlZSBPc2RWaWV3cG9ydEFkYXB0ZXIucGxvdE1vZGVWaWV3cG9ydEZvcikuICovXG4gIGdldFBsb3RNb2RlVmlld3BvcnQoKTogUGxvdE1vZGVWaWV3cG9ydCB7XG4gICAgcmV0dXJuIHRoaXMudmlld3BvcnQucGxvdE1vZGVWaWV3cG9ydEZvcigpO1xuICB9XG5cbiAgLyoqIE9TRCB0YXJnZXRzIHRoZSBpbWFnZSBkaXNwbGF5OyB0aGUgc2NhbGFyLzNEIHBsb3QgdHlwZXMgYmVsb25nIHRvIFBsb3RseS4gKi9cbiAgZ2V0UGxvdFR5cGVEZXNjcmlwdG9ycygpOiBQbG90VHlwZURlc2NyaXB0b3JbXSB7XG4gICAgcmV0dXJuIFtQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuSEVBVE1BUF0hXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJUmVnaW9uU3RvcmUgKyBjbGFzc2lmaWNhdGlvbiBjb2xvdXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBJbmhlcml0ZWQgZnJvbSBCYXNlU3RvcmVWaXN1YWxpemVyIOKAlCBwdXJlIGRlbGVnYXRpb25zIHRvIHRoZSBzaGFyZWRcbiAgLy8gUmVnaW9uU3RvcmUgLyBWaXN1YWxpemVyU3RvcmUgKGlkZW50aWNhbCB0byBuYXBhcmktanMpLiBUaGUgT1NEIHJlZ2lvblxuICAvLyBvdmVybGF5IChjb25zdHJ1Y3RlZCBpbiBwbG90KCkpIHJlYWRzL3dyaXRlcyB0aGF0IHNhbWUgc3RvcmUsIHNvIHJlZ2lvbnNcbiAgLy8gc3RheSBpbiBzeW5jIHdpdGggUGxvdGx5IGFuZCB0aGUgUmVnaW9uIEVkaXRvcjsgT1NEIHJlbmRlcnMgdGhlbSBhcyBhbiBTVkdcbiAgLy8gb3ZlcmxheSByYXRoZXIgdGhhbiBjYXJyeWluZyBQbG90bHkgc2hhcGUgZGljdHMuXG5cbiAgLy8g4pSA4pSAIElUb29sQ29udHJvbGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gc2V0QWN0aXZlVG9vbCBhbmQgdGhlIHBlci10b29sIHNldHRlcnMgcnVuIGluIEJhc2VTdG9yZVZpc3VhbGl6ZXIgb3ZlclxuICAvLyB0aGlzLmNhbnZhc1Rvb2xzOyBPU0QgZ2F0ZXMgbW91c2UtbmF2IGFuZCBpdHMgcmVhZGJhY2sgaGVyZS5cblxuICAvKipcbiAgICogTW91c2UtbmF2IGlzIG9mZiB3aGlsZSBhIGNhbnZhcyB0b29sIGhvbGRzIHRoZSBwb2ludGVyIChpdHMgZHJhZyBtdXN0IGRyYXcsXG4gICAqIG5vdCBwYW4pIGFuZCBvbiBvdGhlcndpc2Ug4oCUIGFsc28gd2hlbiBhIHJlZ2lvbiBkcmF3IG1vZGUgaXMgYXJtZWQgb24gdGhlXG4gICAqIG92ZXJsYXksIGFzIHRoZSBvbGQgcGVyLXRvb2wgZmFuLW91dCBsZWZ0IGl0IChpdHMgc2V0Wm9vbVRvQm94TW9kZShmYWxzZSlcbiAgICogcmUtZW5hYmxlZCBuYXYgYWZ0ZXIgdGhlIG92ZXJsYXkncyBzZXRNb2RlKS4gQSBwaXhlbCB0b29sIHNhbXBsZXMgdGhlXG4gICAqIHJlbmRlcmVkIHZpZXdwb3J0LCByZWFkIGJhY2sgbGF6aWx5IG9uIGZpcnN0IHVzZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBiZWZvcmVUb29sQ2hhbmdlKG5leHQ6IENhbnZhc1Rvb2xJZCB8IG51bGwpOiBib29sZWFuIHtcbiAgICB0aGlzLnZpZXdlcj8uc2V0TW91c2VOYXZFbmFibGVkKG5leHQgPT09IG51bGwpO1xuICAgIGlmIChuZXh0ICE9PSBudWxsICYmIG5leHQgIT09ICd6b29tVG9Cb3gnKSB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKiogQm94LXByb21wdGVkIFNBTTogc2VnbWVudCB0aGUgZHJhd24gcmVjdGFuZ2xlcyBhZ2FpbnN0IG91ciB0b29sIGhvc3RcbiAgICogICh2aWV3cG9ydCByZWFkYmFjayArIGNvb3JkaW5hdGUgdHJhbnNmb3JtICsgcmVnaW9uIHN0b3JlKS4gKi9cbiAgc2VnbWVudFJlY3RhbmdsZXMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICB0aGlzLnZpZXdwb3J0UGl4ZWxzID0gbnVsbDsgLy8gc2VnbWVudCBhZ2FpbnN0IHRoZSBjdXJyZW50IHZpZXdwb3J0IHJlYWRiYWNrXG4gICAgcmV0dXJuIHRoaXMuc2FtVG9vbC5zZWdtZW50Qm94ZXModGhpcy50b29sSG9zdCk7XG4gIH1cbiAgc2VnbWVudFJlY3RhbmdsZXNDZWxscG9zZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICghdGhpcy5jZWxsU2VnbWVudGVyKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDApO1xuICAgIHRoaXMudmlld3BvcnRQaXhlbHMgPSBudWxsOyAvLyBjcm9wIGFnYWluc3QgdGhlIGN1cnJlbnQgdmlld3BvcnQgcmVhZGJhY2tcbiAgICByZXR1cm4gdGhpcy5jZWxsU2VnbWVudFRvb2wuc2VnbWVudEJveGVzKHRoaXMudG9vbEhvc3QsIHRoaXMuY2VsbFNlZ21lbnRlcik7XG4gIH1cbiAgc2V0U2FtTW9kZWwoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2FtVG9vbC5zZXRNb2RlbChpZCk7XG4gICAgdGhpcy5zYW1Qb2ludFRvb2wuc2V0TW9kZWwoaWQpO1xuICB9XG5cbiAgLyoqIFRoZSBlbGVtZW50IHRoZSBvbi1jYW52YXMgdG9vbCBvdmVybGF5cyBhdHRhY2ggdG8gKE9TRCBpcyBtb3VudGVkIGhlcmUpLiAqL1xuICBwcml2YXRlIGdldE92ZXJsYXlDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wbG90RGl2ID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wbG90RGl2KSA6IG51bGw7XG4gIH1cblxuICAvKiogVGhlIHBpeGVsIHRvb2xzJyBmcmFtZTogdGhlIHJlbmRlcmVkIHZpZXdwb3J0LCByZWFkIGJhY2sgb25jZSBhbmQgY2FjaGVkXG4gICAqICB1bnRpbCB0aGUgdmlld3BvcnQgY2hhbmdlcyAoc2VlIHJlYWRiYWNrVmlld3BvcnRGcmFtZSkuICovXG4gIHByaXZhdGUgcmVhZGJhY2tWaWV3cG9ydCgpOiBDYWNoZWRJbWFnZURhdGEgfCBudWxsIHtcbiAgICByZXR1cm4gKHRoaXMudmlld3BvcnRQaXhlbHMgPz89IHJlYWRiYWNrVmlld3BvcnRGcmFtZSh0aGlzLnZpZXdlcikpO1xuICB9XG5cbiAgLyoqIFBlci1jaGFubmVsIGhpc3RvZ3JhbSBmb3IgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUsIGZyb20gdGhlIGN1cnJlbnRcbiAgICogIHNsaWNlJ3Mgc2FtcGxlZCB0aWxlcyAoZ3JheXNjYWxlIOKGkiBjaGFubmVsIDA7IFJHQiDihpIgUi9HL0IpLiBOdWxsIHVudGlsIHRoZVxuICAgKiAgYXN5bmMgc2FtcGxpbmcgcmVzb2x2ZXMgb3IgaWYgaXQgd2FzIHNraXBwZWQuICovXG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgX2JpbnM6IG51bWJlcik6IElIaXN0b2dyYW0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zYW1wbGVyLmdldCh0aGlzLmN1cnJlbnRaLCBjaGFubmVsSW5kZXgpO1xuICB9XG5cbiAgLyoqIE5hdGl2ZSBiaXQgZGVwdGggb2YgYSBjaGFubmVsIGZyb20gdGhlIHRpbGUgZGVzY3JpcHRvciAoOCB3aGVuIHVua25vd24pLiAqL1xuICBwcml2YXRlIGNoYW5uZWxCaXREZXB0aChjaGFubmVsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvcj8uY2hhbm5lbEluZm8/LltjaGFubmVsSW5kZXhdPy5iaXREZXB0aCA/PyA4O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jIGhpc3RvZ3JhbSBmb3IgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUuIEZvciA+OC1iaXQgaW1hZ2VzIGl0XG4gICAqIGZldGNoZXMgdGhlICoqbmF0aXZlKiogZGlzdHJpYnV0aW9uIGZyb20gdGhlIHNlcnZlciBgL2hpc3RvZ3JhbWAgZW5kcG9pbnRcbiAgICogKHRoZSA4LWJpdCBjYW52YXMgdGlsZXMgY2FuJ3QgY2FycnkgMTYtYml0IHZhbHVlcykgYW5kIGNhY2hlcyBpdCBwZXJcbiAgICogc2xpY2UrY2hhbm5lbDsgZm9yIDgtYml0L1JHQiBpdCByZXR1cm5zIHRoZSBleGlzdGluZyBjbGllbnQtc2FtcGxlZCA4LWJpdFxuICAgKiBoaXN0b2dyYW0uIFJlYWQtb25seSDigJQgaXQgbmV2ZXIgdG91Y2hlcyB0aGUgdGlsZS9kaXNwbGF5IHBpcGVsaW5lLlxuICAgKi9cbiAgZ2V0SGlzdG9ncmFtJChjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogT2JzZXJ2YWJsZTxJSGlzdG9ncmFtIHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLmNoYW5uZWxCaXREZXB0aChjaGFubmVsSW5kZXgpIDw9IDggfHwgIXRoaXMuaW5mb0I2NCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZ2V0SGlzdG9ncmFtKGNoYW5uZWxJbmRleCwgYmlucykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYW1wbGVyLm5hdGl2ZSQodGhpcy5pbmZvQjY0LCB0aGlzLmN1cnJlbnRaLCBjaGFubmVsSW5kZXgsIGJpbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0aGUgdW5kZXJseWluZyBpbWFnZSBkYXRhIGFzIGEgZGF0YS1wcmVzZXJ2aW5nIG11bHRpLWJhbmQgVElGRiBhdFxuICAgKiBuYXRpdmUgYml0IGRlcHRoIHZpYSBgR0VUIC9leHBvcnQvdGlmZmAgKHRoZSBzZXJ2ZXIgcmVhZHMgdGhlIHJhdyAxNi1iaXRcbiAgICogcGxhbmVzIOKAlCB0aGUgY2xpZW50IG5ldmVyIHNlZXMgdGhlbSkuIFNlbmRzIG9ubHkgdGhlIHZpc2libGUgY2hhbm5lbHM7IHRoZVxuICAgKiBleGlzdGluZyA4LWJpdCBjb21wb3NpdGUgUE5HIGV4cG9ydCBpcyB1bmFmZmVjdGVkLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0RGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaW5mb0I2NCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0YXRlcyA9IHRoaXMucmVjb2xvci5jaGFubmVsU3RhdGVzO1xuICAgIGNvbnN0IHZpc2libGUgPSBzdGF0ZXMuZmlsdGVyKChjKSA9PiBjLnZpc2libGUpLm1hcCgoYykgPT4gYy5pbmRleCk7XG4gICAgY29uc3QgdXJsID0gZXhwb3J0VGlmZlVybCh0aGlzLmFwaSwgdGhpcy5pbmZvQjY0LCB0aGlzLmN1cnJlbnRaLCB2aXNpYmxlLCBzdGF0ZXMubGVuZ3RoKTtcbiAgICBjb25zdCBzYXZlTmFtZSA9IGV4cG9ydFRpZmZGaWxlbmFtZSh0aGlzLmN1cnJlbnRGaWxlTmFtZSk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IGZldGNoVGlmZkV4cG9ydCh0aGlzLmh0dHAsIHVybCk7XG4gICAgaWYgKGJsb2IpIHNhdmVBcyhibG9iLCBzYXZlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRoZSBjdXJyZW50IHNsaWNlIGFzIGEgcHVibGljYXRpb24tcmVhZHkgUE5HIGNvbXBvc2l0ZWQgd2l0aCB0aGVcbiAgICogYWN0aXZlIGRpc3BsYXkgc2V0dGluZ3MsIHRoZSB3YXkgaXQgaXMgZHJhd24gKHNlZSByZW5kZXJDb21wb3NpdGVQbmcpLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0Q29tcG9zaXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5kZXNjcmlwdG9yKSByZXR1cm47XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlbmRlckNvbXBvc2l0ZVBuZyh7XG4gICAgICBodHRwOiB0aGlzLmh0dHAsXG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgZGVzY3JpcHRvcjogdGhpcy5kZXNjcmlwdG9yLFxuICAgICAgaW5mb0I2NDogdGhpcy5pbmZvQjY0LFxuICAgICAgejogdGhpcy5jdXJyZW50WixcbiAgICAgIG11bHRpQ2hhbm5lbDogdGhpcy5pc011bHRpQ2hhbm5lbCxcbiAgICAgIHJlYWxMZXZlbHM6IHRoaXMucmVhbExldmVscyxcbiAgICAgIGNoYW5uZWxTdGF0ZXM6IHRoaXMucmVjb2xvci5jaGFubmVsU3RhdGVzLFxuICAgICAgZGlzcGxheTogdGhpcy5yZWNvbG9yLmRpc3BsYXksXG4gICAgfSk7XG4gICAgaWYgKGJsb2IpIHNhdmVBcyhibG9iLCBgJHtmaWxlU3RlbSh0aGlzLmN1cnJlbnRGaWxlTmFtZSl9X2NvbXBvc2l0ZS5wbmdgKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJRGlzcGxheU9wdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIEluaGVyaXRlZCBmcm9tIEJhc2VTdG9yZVZpc3VhbGl6ZXIg4oCUIHB1cmUgZGVsZWdhdGlvbnMgdG8gdGhlIHNoYXJlZFxuICAvLyBWaXN1YWxpemVyU3RvcmUsIHNvIE9TRCBhbmQgUGxvdGx5IHN0YXkgaW4gbG9jay1zdGVwLiBPU0QgYXBwbGllcyB0aGVcbiAgLy8gY29sb3JtYXAgdG8gZ3JheXNjYWxlIHRpbGVzIHZpYSB0aGUgTFVUIHJlYWN0aXZlbHkgKHNlZSB0aGUgY29uc3RydWN0b3Inc1xuICAvLyBjb2xvcm1hcCBzdWJzY3JpcHRpb24pLCBub3QgaW4gc2V0Q29sb3JtYXAuXG5cbiAgLy8g4pSA4pSAIElWaXN1YWxpemVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICAvLyBUaGUgc3RvcmUgc3Vic2NyaXB0aW9uLCBhbmQgYSBxdWV1ZWQgaW52YWxpZGF0aW9uIHRoYXQgbXVzdCBub3QgZmlyZVxuICAgIC8vIGFnYWluc3QgYSB0b3JuLWRvd24gdmlld2VyLlxuICAgIHRoaXMucmVjb2xvci51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGVzdHJveVZpZXdlcigpO1xuICAgIHRoaXMuc2ltcGxlLnJlc2V0KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -28,14 +28,17 @@ export function isCuratedColumn(name) {
|
|
|
28
28
|
* The categorical column that names each cell's type: the view's choice when it is a
|
|
29
29
|
* column of this dataset, else the first categorical column that is not a curated
|
|
30
30
|
* annotation (a pipeline's clustering is the default; curation is opted into), else
|
|
31
|
-
* any categorical column.
|
|
31
|
+
* any categorical column. A column of one category, such as the `region` a SpatialData
|
|
32
|
+
* table links its cells to their shapes with, names no type and is only used when chosen;
|
|
33
|
+
* a dataset with nothing else has no cell types (null).
|
|
32
34
|
*/
|
|
33
35
|
export function cellTypeColumnFor(dataset, view) {
|
|
34
36
|
const categorical = dataset.columns.filter((c) => c.kind === 'categorical');
|
|
35
37
|
if (view.cellTypeColumn && categorical.some((c) => c.name === view.cellTypeColumn)) {
|
|
36
38
|
return view.cellTypeColumn;
|
|
37
39
|
}
|
|
38
|
-
|
|
40
|
+
const typed = categorical.filter((c) => c.categories.length > 1);
|
|
41
|
+
return (typed.find((c) => !isCuratedColumn(c.name)) ?? typed[0])?.name ?? null;
|
|
39
42
|
}
|
|
40
43
|
// ── Tiles in view ─────────────────────────────────────────────────────────────────────
|
|
41
44
|
/** A stable string id for a tile key, `level/gx/gy` — usable as a Map key. */
|
|
@@ -184,4 +187,4 @@ export function transcriptLevelFor(pxPerUnit, levels, targetTilePx = 512) {
|
|
|
184
187
|
}
|
|
185
188
|
return best;
|
|
186
189
|
}
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zcGF0aWFsL2xvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUJuQyx5RkFBeUY7QUFFekYsNEZBQTRGO0FBQzVGLE1BQU0sVUFBVSxVQUFVLENBQ3hCLE9BQWlFLEVBQ2pFLElBQXlDO0lBRXpDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWTtJQUMxQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixPQUF1QixFQUN2QixJQUE4QztJQUU5QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQztJQUM1RSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNuRixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUNELE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO0FBQzdGLENBQUM7QUFFRCx5RkFBeUY7QUFFekYsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBVTtJQUMvQixPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQsNkZBQTZGO0FBQzdGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsR0FBNEI7SUFDMUUsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFpQyxFQUNqQyxJQUFZLEVBQ1osT0FBZSxFQUNmLE9BQWUsRUFDZixHQUE0QixFQUM1QixNQUFNLEdBQUcsSUFBSTtJQUViLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDakUsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQywyRkFBMkY7SUFDM0YsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVHLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEcsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLElBQWMsRUFDZCxLQUFhLEVBQ2IsTUFBbUMsRUFDbkMsTUFBNkIsRUFDN0IsS0FBSyxHQUFHLFFBQVE7SUFFaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUNyQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdEIsMEZBQTBGO0lBQzFGLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RixHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBYyxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ25DLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFO1lBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQUksQ0FDTixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDOUcsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDeEQsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFpQyxFQUNqQyxJQUFjLEVBQ2QsS0FBYSxFQUNiLE1BQW1DLEVBQ25DLE1BQTZCLEVBQzdCLEtBQUssR0FBRyxRQUFRO0lBRWhCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDM0YsTUFBTSxDQUFDLEdBQXlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqSCxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWMsRUFBRSxNQUE2QjtJQUN2RSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELHlGQUF5RjtBQUV6Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBeUMsRUFBRSxRQUFRLEdBQUcsRUFBRTtJQUMxRixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMxRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUNyQywrRUFBK0U7SUFDL0UsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUUvRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQWlCLEVBQUUsWUFBb0IsRUFBRSxVQUFrQixFQUFFLE1BQU0sR0FBRyxDQUFDO0lBQ3JHLE1BQU0sTUFBTSxHQUFHLFNBQVMsR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQ2pELE1BQU0sS0FBSyxHQUFHLHlCQUF5QixDQUFDO0lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxzRUFBc0U7UUFDdEUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksTUFBTSxJQUFJLEdBQUc7WUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsU0FBaUIsRUFDakIsTUFBbUMsRUFDbkMsWUFBWSxHQUFHLEdBQUc7SUFFbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxHQUFHLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNkLElBQUksR0FBRyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGV2ZWwtb2YtZGV0YWlsIHBsYW5uaW5nIGZvciB0aWxlZCBzcGF0aWFsIGdlb21ldHJ5IOKAlCBjZWxsIG91dGxpbmVzIGFuZCB0cmFuc2NyaXB0cy5cbiAqXG4gKiBUaGUgcmVuZGVyZXIga25vd3MgaXRzIGNhbWVyYSAoYSB3b3JsZC1zcGFjZSBjZW50cmUsIGEgem9vbSBpbiBjYW52YXMgcGl4ZWxzIHBlciB3b3JsZFxuICogdW5pdCwgYSBjYW52YXMgc2l6ZSk7IGEgdGlsZWQgZGF0YXNldCBrbm93cyBpdHMgZ3JpZHMgKG9uZSBwZXIgbGV2ZWwsIGluIG9ic2VydmF0aW9uXG4gKiB1bml0cykuIFRoaXMgbW9kdWxlIGlzIHRoZSBicmlkZ2U6IHdoaWNoIGxldmVsIHRoZSB6b29tIGNhbGxzIGZvciBhbmQgd2hpY2ggdGlsZXMgYXJlIG9uXG4gKiBzY3JlZW4uIEV2ZXJ5dGhpbmcgaGVyZSBpcyBwdXJlLCBzbyB0aGUgcG9saWN5IOKAlCB0aGUgcGFydCB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgdmlld1xuICogaXMgZmFzdCBhbmQgbGVnaWJsZSDigJQgaXMgdGVzdGFibGUgd2l0aG91dCBhIEdQVS5cbiAqXG4gKiBPYnNlcnZhdGlvbiB1bml0cyBtYXAgb250byB3b3JsZCB1bml0cyB0aHJvdWdoIHRoZSBkYXRhc2V0J3MgYGltYWdlUmVmYCBhZmZpbmVcbiAqIChgd29ybGQgPSBkYXRhIMK3IHNjYWxlICsgdHJhbnNsYXRlYCksIHNvIFwicGl4ZWxzIHBlciBvYnNlcnZhdGlvbiB1bml0XCIgaXNcbiAqIGB6b29tIMK3IHNjYWxlYC4gRm9yIGEgWGVuaXVtIGJ1bmRsZSB0aGUgZGF0YSB1bml0IGlzIHRoZSBtaWNyb24gYW5kIHRoZSB3b3JsZCB1bml0IHRoZVxuICogbW9ycGhvbG9neSBwaXhlbC5cbiAqL1xuXG5pbXBvcnQgeyB3b3JsZFZpZXdwb3J0IH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUge1xuICBTcGF0aWFsQm91bmRzLFxuICBTcGF0aWFsRGF0YXNldCxcbiAgU3BhdGlhbEltYWdlUmVmLFxuICBTcGF0aWFsVGlsZUxldmVsLFxufSBmcm9tICcuLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7IHF1YW50aWxlIH0gZnJvbSAnLi9zdGF0cyc7XG5cbi8qKiBBIHJlY3RhbmdsZSBpbiBvYnNlcnZhdGlvbiBjb29yZGluYXRlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVJlY3Qge1xuICB4MDogbnVtYmVyO1xuICB5MDogbnVtYmVyO1xuICB4MTogbnVtYmVyO1xuICB5MTogbnVtYmVyO1xufVxuXG4vKiogVGlsZSBhZGRyZXNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWxlS2V5IHtcbiAgbGV2ZWw6IG51bWJlcjtcbiAgZ3g6IG51bWJlcjtcbiAgZ3k6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFdoYXQgdGhlIHZpZXcgZHJhd3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBXaGV0aGVyIGNlbGwgb3V0bGluZXMgYXJlIGRyYXduOiB0aGUgdXNlcidzIGNob2ljZSwgZWxzZSBvbiB3aGVuIHRoZSBkYXRhc2V0IGhhcyBhbnkuICovXG5leHBvcnQgZnVuY3Rpb24gY2VsbHNTaG93bihcbiAgZGF0YXNldDogUGljazxTcGF0aWFsRGF0YXNldCwgJ3BvbHlnb25UaWxlcycgfCAncG9seWdvbnMnPiB8IG51bGwsXG4gIHZpZXc6IFBpY2s8U3BhdGlhbFZpZXdTdGF0ZSwgJ3Nob3dDZWxscyc+LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGF2YWlsYWJsZSA9ICEhKGRhdGFzZXQ/LnBvbHlnb25UaWxlcyB8fCBkYXRhc2V0Py5wb2x5Z29ucyk7XG4gIHJldHVybiBhdmFpbGFibGUgJiYgKHZpZXcuc2hvd0NlbGxzID8/IHRydWUpO1xufVxuXG4vKiogQSBjb2x1bW4gaG9sZGluZyBhIGhhbmQtY3VyYXRlZCBjZWxsLXR5cGUgYW5ub3RhdGlvbiwgYnkgbmFtaW5nIGNvbnZlbnRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJhdGVkQ29sdW1uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL2N1cmF0ZWQvaS50ZXN0KG5hbWUpO1xufVxuXG4vKipcbiAqIFRoZSBjYXRlZ29yaWNhbCBjb2x1bW4gdGhhdCBuYW1lcyBlYWNoIGNlbGwncyB0eXBlOiB0aGUgdmlldydzIGNob2ljZSB3aGVuIGl0IGlzIGFcbiAqIGNvbHVtbiBvZiB0aGlzIGRhdGFzZXQsIGVsc2UgdGhlIGZpcnN0IGNhdGVnb3JpY2FsIGNvbHVtbiB0aGF0IGlzIG5vdCBhIGN1cmF0ZWRcbiAqIGFubm90YXRpb24gKGEgcGlwZWxpbmUncyBjbHVzdGVyaW5nIGlzIHRoZSBkZWZhdWx0OyBjdXJhdGlvbiBpcyBvcHRlZCBpbnRvKSwgZWxzZVxuICogYW55IGNhdGVnb3JpY2FsIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNlbGxUeXBlQ29sdW1uRm9yKFxuICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgdmlldzogUGljazxTcGF0aWFsVmlld1N0YXRlLCAnY2VsbFR5cGVDb2x1bW4nPixcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBjYXRlZ29yaWNhbCA9IGRhdGFzZXQuY29sdW1ucy5maWx0ZXIoKGMpID0+IGMua2luZCA9PT0gJ2NhdGVnb3JpY2FsJyk7XG4gIGlmICh2aWV3LmNlbGxUeXBlQ29sdW1uICYmIGNhdGVnb3JpY2FsLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gdmlldy5jZWxsVHlwZUNvbHVtbikpIHtcbiAgICByZXR1cm4gdmlldy5jZWxsVHlwZUNvbHVtbjtcbiAgfVxuICByZXR1cm4gKGNhdGVnb3JpY2FsLmZpbmQoKGMpID0+ICFpc0N1cmF0ZWRDb2x1bW4oYy5uYW1lKSkgPz8gY2F0ZWdvcmljYWxbMF0pPy5uYW1lID8/IG51bGw7XG59XG5cbi8vIOKUgOKUgCBUaWxlcyBpbiB2aWV3IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBzdGFibGUgc3RyaW5nIGlkIGZvciBhIHRpbGUga2V5LCBgbGV2ZWwvZ3gvZ3lgIOKAlCB1c2FibGUgYXMgYSBNYXAga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbGVJZChrOiBUaWxlS2V5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2subGV2ZWx9LyR7ay5neH0vJHtrLmd5fWA7XG59XG5cbi8qKiBDYW52YXMgcGl4ZWxzIHBlciBvYnNlcnZhdGlvbiB1bml0IGFsb25nIHgsIGZvciBhIGNhbWVyYSB6b29tIGFuZCBhIGRhdGHihpJ3b3JsZCBhZmZpbmUuICovXG5leHBvcnQgZnVuY3Rpb24gcGl4ZWxzUGVyRGF0YVVuaXQoem9vbTogbnVtYmVyLCByZWY/OiBTcGF0aWFsSW1hZ2VSZWYgfCBudWxsKTogbnVtYmVyIHtcbiAgcmV0dXJuIHpvb20gKiBNYXRoLmFicyhyZWY/LnNjYWxlPy5bMF0gPz8gMSk7XG59XG5cbi8qKlxuICogVGhlIHBhcnQgb2Ygb2JzZXJ2YXRpb24gc3BhY2UgdGhlIGNhbWVyYSBzaG93cywgcGFkZGVkIGJ5IGBtYXJnaW5gIChhIGZyYWN0aW9uIG9mIHRoZVxuICogdmlld3BvcnQpIHNvIHRpbGVzIGp1c3Qgb2ZmIHNjcmVlbiBhcmUgYWxyZWFkeSB0aGVyZSB3aGVuIGEgcGFuIGJyaW5ncyB0aGVtIGluOiBuYXBhcmktanMnc1xuICogYHdvcmxkVmlld3BvcnRgLCBtYXBwZWQgYmFjayB0aHJvdWdoIHRoZSBpbnZlcnNlIG9mIHRoZSBkYXRh4oaSd29ybGQgYWZmaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaWJsZURhdGFSZWN0KFxuICBjZW50ZXI6IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0sXG4gIHpvb206IG51bWJlcixcbiAgY2FudmFzVzogbnVtYmVyLFxuICBjYW52YXNIOiBudW1iZXIsXG4gIHJlZj86IFNwYXRpYWxJbWFnZVJlZiB8IG51bGwsXG4gIG1hcmdpbiA9IDAuMTUsXG4pOiBEYXRhUmVjdCB8IG51bGwge1xuICBpZiAoISh6b29tID4gMCkgfHwgIShjYW52YXNXID4gMCkgfHwgIShjYW52YXNIID4gMCkpIHJldHVybiBudWxsO1xuICBjb25zdCBzeCA9IHJlZj8uc2NhbGU/LlswXSA/PyAxO1xuICBjb25zdCBzeSA9IHJlZj8uc2NhbGU/LlsxXSA/PyAxO1xuICBjb25zdCB0eCA9IHJlZj8udHJhbnNsYXRlPy5bMF0gPz8gMDtcbiAgY29uc3QgdHkgPSByZWY/LnRyYW5zbGF0ZT8uWzFdID8/IDA7XG4gIC8vIFRoZSB3b3JsZCByZWN0IG9mIGEgY2FudmFzIGdyb3duIGJ5IHRoZSBtYXJnaW4gb24gZWFjaCBzaWRlIChuYXBhcmktanMncyB3b3JsZFZpZXdwb3J0KS5cbiAgY29uc3QgdiA9IHdvcmxkVmlld3BvcnQoY2VudGVyWzBdLCBjZW50ZXJbMV0sIHpvb20sIGNhbnZhc1cgKiAoMSArIDIgKiBtYXJnaW4pLCBjYW52YXNIICogKDEgKyAyICogbWFyZ2luKSk7XG4gIGNvbnN0IHd4MCA9IHYueDtcbiAgY29uc3Qgd3gxID0gdi54ICsgdi53aWR0aDtcbiAgY29uc3Qgd3kwID0gdi55O1xuICBjb25zdCB3eTEgPSB2LnkgKyB2LmhlaWdodDtcbiAgY29uc3QgYXggPSAod3gwIC0gdHgpIC8gc3g7XG4gIGNvbnN0IGJ4ID0gKHd4MSAtIHR4KSAvIHN4O1xuICBjb25zdCBheSA9ICh3eTAgLSB0eSkgLyBzeTtcbiAgY29uc3QgYnkgPSAod3kxIC0gdHkpIC8gc3k7XG4gIHJldHVybiB7IHgwOiBNYXRoLm1pbihheCwgYngpLCB5MDogTWF0aC5taW4oYXksIGJ5KSwgeDE6IE1hdGgubWF4KGF4LCBieCksIHkxOiBNYXRoLm1heChheSwgYnkpIH07XG59XG5cbi8qKlxuICogVGlsZXMgb2Ygb25lIGxldmVsIGludGVyc2VjdGluZyBgcmVjdGAsIGNsaXBwZWQgdG8gdGhlIGRhdGFzZXQncyBgYm91bmRzYCAoc28gem9vbWluZ1xuICogb3V0IG92ZXIgZW1wdHkgY2FudmFzIGRvZXMgbm90IGFzayBmb3IgdGlsZXMgdGhhdCBjYW5ub3QgZXhpc3QpLiBPcmRlcmVkIGZyb20gdGhlXG4gKiByZWN0YW5nbGUncyBjZW50cmUgb3V0d2FyZCwgc28gdGhlIG1pZGRsZSBvZiB0aGUgc2NyZWVuIGZpbGxzIGluIGZpcnN0LlxuICpcbiAqIFRpbGUgYGdgIGNvdmVycyBgW2fCt3MsIChnKzEpwrdzKWAuIFRoZSB2aWV3J3MgZmFyIGVkZ2UgaXMgb3BlbiDigJQgYSB0aWxlIHN0YXJ0aW5nIGV4YWN0bHlcbiAqIGF0IGByZWN0LngxYCBzaG93cyBub3RoaW5nIOKAlCBidXQgdGhlIGJvdW5kcycgZmFyIGVkZ2UgaXMgY2xvc2VkOiB0aGUgYm91bmRzIGFyZSB0aGVcbiAqIGV4dHJlbWUgb2JzZXJ2YXRpb25zJyBjb29yZGluYXRlcywgc28gb25lIHNpdHMgZXhhY3RseSBvbiBgYm91bmRzWzJdYCwgaW4gdGhlIHRpbGVcbiAqIHN0YXJ0aW5nIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGlsZXNJblJlY3QoXG4gIHJlY3Q6IERhdGFSZWN0LFxuICBsZXZlbDogbnVtYmVyLFxuICBsZXZlbHM6IHJlYWRvbmx5IFNwYXRpYWxUaWxlTGV2ZWxbXSxcbiAgYm91bmRzPzogU3BhdGlhbEJvdW5kcyB8IG51bGwsXG4gIGxpbWl0ID0gSW5maW5pdHksXG4pOiBUaWxlS2V5W10ge1xuICBjb25zdCBzaXplID0gbGV2ZWxzW2xldmVsXT8udGlsZVNpemU7XG4gIGlmICghKHNpemUgPiAwKSkgcmV0dXJuIFtdO1xuICBsZXQgeyB4MCwgeTAgfSA9IHJlY3Q7XG4gIC8vIExhc3QgdGlsZSBhbG9uZyBhbiBheGlzOiB0aGUgb25lIGJlZm9yZSB0aGUgb3BlbiB2aWV3IGVkZ2UsIGF0IG1vc3QgdGhlIGNsb3NlZCBib3VuZCdzLlxuICBsZXQgZ3gxID0gTWF0aC5jZWlsKHJlY3QueDEgLyBzaXplKSAtIDE7XG4gIGxldCBneTEgPSBNYXRoLmNlaWwocmVjdC55MSAvIHNpemUpIC0gMTtcbiAgaWYgKGJvdW5kcykge1xuICAgIHgwID0gTWF0aC5tYXgoeDAsIGJvdW5kc1swXSk7XG4gICAgeTAgPSBNYXRoLm1heCh5MCwgYm91bmRzWzFdKTtcbiAgICBpZiAoTWF0aC5taW4ocmVjdC54MSwgYm91bmRzWzJdKSA8IHgwIHx8IE1hdGgubWluKHJlY3QueTEsIGJvdW5kc1szXSkgPCB5MCkgcmV0dXJuIFtdO1xuICAgIGd4MSA9IE1hdGgubWluKGd4MSwgTWF0aC5mbG9vcihib3VuZHNbMl0gLyBzaXplKSk7XG4gICAgZ3kxID0gTWF0aC5taW4oZ3kxLCBNYXRoLmZsb29yKGJvdW5kc1szXSAvIHNpemUpKTtcbiAgfVxuICBjb25zdCBneDAgPSBNYXRoLmZsb29yKHgwIC8gc2l6ZSk7XG4gIGNvbnN0IGd5MCA9IE1hdGguZmxvb3IoeTAgLyBzaXplKTtcbiAgY29uc3QgY3ggPSAocmVjdC54MCArIHJlY3QueDEpIC8gMiAvIHNpemU7XG4gIGNvbnN0IGN5ID0gKHJlY3QueTAgKyByZWN0LnkxKSAvIDIgLyBzaXplO1xuICBjb25zdCBvdXQ6IFRpbGVLZXlbXSA9IFtdO1xuICBmb3IgKGxldCBneSA9IGd5MDsgZ3kgPD0gZ3kxOyBneSsrKSB7XG4gICAgZm9yIChsZXQgZ3ggPSBneDA7IGd4IDw9IGd4MTsgZ3grKykgb3V0LnB1c2goeyBsZXZlbCwgZ3gsIGd5IH0pO1xuICB9XG4gIG91dC5zb3J0KFxuICAgIChhLCBiKSA9PiAoYS5neCArIDAuNSAtIGN4KSAqKiAyICsgKGEuZ3kgKyAwLjUgLSBjeSkgKiogMiAtICgoYi5neCArIDAuNSAtIGN4KSAqKiAyICsgKGIuZ3kgKyAwLjUgLSBjeSkgKiogMiksXG4gICk7XG4gIHJldHVybiBvdXQubGVuZ3RoID4gbGltaXQgPyBvdXQuc2xpY2UoMCwgbGltaXQpIDogb3V0O1xufVxuXG4vKioge0BsaW5rIHRpbGVzSW5SZWN0fSBmb3IgYSBncmlkIHdob3NlIHRpbGUgKDAsIDApIHN0YXJ0cyBhdCBgb3JpZ2luYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWxlc0luUmVjdEZyb20oXG4gIG9yaWdpbjogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSxcbiAgcmVjdDogRGF0YVJlY3QsXG4gIGxldmVsOiBudW1iZXIsXG4gIGxldmVsczogcmVhZG9ubHkgU3BhdGlhbFRpbGVMZXZlbFtdLFxuICBib3VuZHM/OiBTcGF0aWFsQm91bmRzIHwgbnVsbCxcbiAgbGltaXQgPSBJbmZpbml0eSxcbik6IFRpbGVLZXlbXSB7XG4gIGNvbnN0IFtveCwgb3ldID0gb3JpZ2luO1xuICBjb25zdCBzaGlmdGVkID0geyB4MDogcmVjdC54MCAtIG94LCB5MDogcmVjdC55MCAtIG95LCB4MTogcmVjdC54MSAtIG94LCB5MTogcmVjdC55MSAtIG95IH07XG4gIGNvbnN0IGI6IFNwYXRpYWxCb3VuZHMgfCBudWxsID0gYm91bmRzID8gW2JvdW5kc1swXSAtIG94LCBib3VuZHNbMV0gLSBveSwgYm91bmRzWzJdIC0gb3gsIGJvdW5kc1szXSAtIG95XSA6IG51bGw7XG4gIHJldHVybiB0aWxlc0luUmVjdChzaGlmdGVkLCBsZXZlbCwgbGV2ZWxzLCBiLCBsaW1pdCk7XG59XG5cbi8qKiBBcmVhIG9mIGByZWN0YCBpbnNpZGUgYGJvdW5kc2AgKHRoZSB3aG9sZSByZWN0IHdoZW4gdGhlcmUgYXJlIG5vbmUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2libGVBcmVhKHJlY3Q6IERhdGFSZWN0LCBib3VuZHM/OiBTcGF0aWFsQm91bmRzIHwgbnVsbCk6IG51bWJlciB7XG4gIGNvbnN0IHgwID0gYm91bmRzID8gTWF0aC5tYXgocmVjdC54MCwgYm91bmRzWzBdKSA6IHJlY3QueDA7XG4gIGNvbnN0IHkwID0gYm91bmRzID8gTWF0aC5tYXgocmVjdC55MCwgYm91bmRzWzFdKSA6IHJlY3QueTA7XG4gIGNvbnN0IHgxID0gYm91bmRzID8gTWF0aC5taW4ocmVjdC54MSwgYm91bmRzWzJdKSA6IHJlY3QueDE7XG4gIGNvbnN0IHkxID0gYm91bmRzID8gTWF0aC5taW4ocmVjdC55MSwgYm91bmRzWzNdKSA6IHJlY3QueTE7XG4gIHJldHVybiBNYXRoLm1heCgwLCB4MSAtIHgwKSAqIE1hdGgubWF4KDAsIHkxIC0geTApO1xufVxuXG4vLyDilIDilIAgTGV2ZWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFR5cGljYWwgY2VsbCBkaWFtZXRlciwgaW4gb2JzZXJ2YXRpb24gdW5pdHMsIHVzZWQgdG8ganVkZ2UgaG93IGxhcmdlIGNlbGxzIGFwcGVhci5cbiAqIERlcml2ZWQgZnJvbSB0aGUgcGVyLW9ic2VydmF0aW9uIHJhZGl1cyB3aGVuIHRoZXJlIGlzIG9uZTsgMTIgwrVtIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGljYWxDZWxsRGlhbWV0ZXIocmFkaXVzOiBGbG9hdDMyQXJyYXkgfCBudW1iZXIgfCB1bmRlZmluZWQsIGZhbGxiYWNrID0gMTIpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHJhZGl1cyA9PT0gJ251bWJlcicpIHJldHVybiByYWRpdXMgPiAwID8gcmFkaXVzICogMiA6IGZhbGxiYWNrO1xuICBpZiAoIXJhZGl1cz8ubGVuZ3RoKSByZXR1cm4gZmFsbGJhY2s7XG4gIC8vIFRoZSBtZWRpYW4gb2YgYSBzYW1wbGUgaXMgcGxlbnR5IOKAlCB0aGlzIHNldHMgYSB0aHJlc2hvbGQsIG5vdCBhIG1lYXN1cmVtZW50LlxuICBjb25zdCBtZWRpYW4gPSBxdWFudGlsZShyYWRpdXMsIDAuNSwgeyBmaWx0ZXI6ICdwb3NpdGl2ZScsIHNhbXBsZVNpemU6IDIwNDggfSk7XG4gIHJldHVybiBtZWRpYW4gPT09IG51bGwgPyBmYWxsYmFjayA6IG1lZGlhbiAqIDI7XG59XG5cbi8qKlxuICogT24tc2NyZWVuIGNlbGwgZGlhbWV0ZXIgKHB4KSBhdCBvciBhYm92ZSB3aGljaCBlYWNoIHBvbHlnb24gbGV2ZWwgaXMgdXNlZC4gQSBsZXZlbFxuICogaGFsdmVzIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgb25lIGJlbG93LCBzbyBlYWNoIHNob3VsZCB0YWtlIG92ZXIgd2hlbiB0aGUgY2VsbCBpcyBhYm91dFxuICogaGFsZiBhcyBsYXJnZSBvbiBzY3JlZW4uIEJlbG93IHRoZSBsYXN0IGZpbml0ZSB0aHJlc2hvbGQgb3V0bGluZXMgYXJlIG5vdCBkcmF3biBhdFxuICogYWxsIOKAlCBhIGNlbGwgYSBmZXcgcGl4ZWxzIHdpZGUgaXMgYSBkb3QsIGFuZCB0aGUgb2JzZXJ2YXRpb24gbWFya2VycyBhbHJlYWR5IGRyYXcgaXRcbiAqIGFzIG9uZS5cbiAqXG4gKiBYZW5pdW0ncyBmb3VydGggbGV2ZWwgKDMgdmVydGljZXMgcGVyIGNlbGwpIGlzIGRlbGliZXJhdGVseSBuZXZlciB1c2VkOiBzZWVuIG9uXG4gKiBzY3JlZW4gaXQgaXMgYSBmaWVsZCBvZiB0cmlhbmdsZXMsIHdoaWNoIHJlYWRzIGFzIGFuIGFydGVmYWN0IHJhdGhlciB0aGFuIGFzIGNlbGxzLlxuICogVGhlIGRvdHMgYmVsb3cgOCBweCBzYXkgdGhlIHNhbWUgdGhpbmcgbW9yZSBob25lc3RseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFggPSBbMzYsIDE4LCA4LCBJbmZpbml0eV07XG5cbi8qKlxuICogV2hpY2ggcG9seWdvbiBsZXZlbCBzdWl0cyB0aGlzIHpvb20sIG9yIC0xIGZvciBcInRvbyBzbWFsbCB0byBvdXRsaW5lXCIuXG4gKiBgZGV0YWlsYCA+IDEgcHJlZmVycyBmaW5lciBsZXZlbHMgKHNoYXJwZXIsIHNsb3dlcik7IDwgMSBjb2Fyc2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9seWdvbkxldmVsRm9yKHB4UGVyVW5pdDogbnVtYmVyLCBjZWxsRGlhbWV0ZXI6IG51bWJlciwgbGV2ZWxDb3VudDogbnVtYmVyLCBkZXRhaWwgPSAxKTogbnVtYmVyIHtcbiAgY29uc3QgY2VsbFB4ID0gcHhQZXJVbml0ICogY2VsbERpYW1ldGVyICogZGV0YWlsO1xuICBjb25zdCB0YWJsZSA9IFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFg7XG4gIGZvciAobGV0IGwgPSAwOyBsIDwgbGV2ZWxDb3VudDsgbCsrKSB7XG4gICAgLy8gUGFzdCB0aGUgdGFibGUsIGtlZXAgaGFsdmluZzogZWFjaCBsZXZlbCBzdGlsbCBoYWx2ZXMgdGhlIHZlcnRpY2VzLlxuICAgIGNvbnN0IG1pbiA9IHRhYmxlW2xdID8/IHRhYmxlW3RhYmxlLmxlbmd0aCAtIDFdIC8gMiAqKiAobCAtIHRhYmxlLmxlbmd0aCArIDEpO1xuICAgIGlmIChjZWxsUHggPj0gbWluKSByZXR1cm4gbDtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogV2hpY2ggdHJhbnNjcmlwdCBsZXZlbCBzdWl0cyB0aGlzIHpvb206IHRoZSBvbmUgd2hvc2UgdGlsZXMgY29tZSBvdXQgY2xvc2VzdCB0b1xuICogYHRhcmdldFRpbGVQeGAgb24gc2NyZWVuLiBDb2Fyc2VyIGxldmVscyBhZ2dyZWdhdGUgbW9yZSwgc28gdGhpcyBrZWVwcyB0aGUgbnVtYmVyIG9mXG4gKiBtYXJrZXJzIHBlciBzY3JlZW4gcm91Z2hseSBjb25zdGFudCBob3dldmVyIGZhciBvdXQgdGhlIGNhbWVyYSBpcyDigJQgdGhlIHByb3BlcnR5IHRoYXRcbiAqIGtlZXBzIHRoZSB2aWV3IGZhc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2NyaXB0TGV2ZWxGb3IoXG4gIHB4UGVyVW5pdDogbnVtYmVyLFxuICBsZXZlbHM6IHJlYWRvbmx5IFNwYXRpYWxUaWxlTGV2ZWxbXSxcbiAgdGFyZ2V0VGlsZVB4ID0gNTEyLFxuKTogbnVtYmVyIHtcbiAgaWYgKCFsZXZlbHMubGVuZ3RoIHx8ICEocHhQZXJVbml0ID4gMCkpIHJldHVybiAwO1xuICBsZXQgYmVzdCA9IDA7XG4gIGxldCBiZXN0RXJyID0gSW5maW5pdHk7XG4gIGZvciAobGV0IGwgPSAwOyBsIDwgbGV2ZWxzLmxlbmd0aDsgbCsrKSB7XG4gICAgY29uc3QgZXJyID0gTWF0aC5hYnMoTWF0aC5sb2cyKChsZXZlbHNbbF0udGlsZVNpemUgKiBweFBlclVuaXQpIC8gdGFyZ2V0VGlsZVB4KSk7XG4gICAgaWYgKGVyciA8IGJlc3RFcnIpIHtcbiAgICAgIGJlc3RFcnIgPSBlcnI7XG4gICAgICBiZXN0ID0gbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJlc3Q7XG59XG4iXX0=
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zcGF0aWFsL2xvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVUxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUJuQyx5RkFBeUY7QUFFekYsNEZBQTRGO0FBQzVGLE1BQU0sVUFBVSxVQUFVLENBQ3hCLE9BQWlFLEVBQ2pFLElBQXlDO0lBRXpDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWTtJQUMxQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLE9BQXVCLEVBQ3ZCLElBQThDO0lBRTlDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQztJQUN4RyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNuRixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ2pGLENBQUM7QUFFRCx5RkFBeUY7QUFFekYsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBVTtJQUMvQixPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQsNkZBQTZGO0FBQzdGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsR0FBNEI7SUFDMUUsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFpQyxFQUNqQyxJQUFZLEVBQ1osT0FBZSxFQUNmLE9BQWUsRUFDZixHQUE0QixFQUM1QixNQUFNLEdBQUcsSUFBSTtJQUViLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDakUsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQywyRkFBMkY7SUFDM0YsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVHLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDcEcsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLElBQWMsRUFDZCxLQUFhLEVBQ2IsTUFBbUMsRUFDbkMsTUFBNkIsRUFDN0IsS0FBSyxHQUFHLFFBQVE7SUFFaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUNyQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdEIsMEZBQTBGO0lBQzFGLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RixHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBYyxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ25DLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFO1lBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsR0FBRyxDQUFDLElBQUksQ0FDTixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDOUcsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDeEQsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFpQyxFQUNqQyxJQUFjLEVBQ2QsS0FBYSxFQUNiLE1BQW1DLEVBQ25DLE1BQTZCLEVBQzdCLEtBQUssR0FBRyxRQUFRO0lBRWhCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDM0YsTUFBTSxDQUFDLEdBQXlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqSCxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWMsRUFBRSxNQUE2QjtJQUN2RSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELHlGQUF5RjtBQUV6Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBeUMsRUFBRSxRQUFRLEdBQUcsRUFBRTtJQUMxRixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMxRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUNyQywrRUFBK0U7SUFDL0UsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLE9BQU8sTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUUvRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFNBQWlCLEVBQUUsWUFBb0IsRUFBRSxVQUFrQixFQUFFLE1BQU0sR0FBRyxDQUFDO0lBQ3JHLE1BQU0sTUFBTSxHQUFHLFNBQVMsR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQ2pELE1BQU0sS0FBSyxHQUFHLHlCQUF5QixDQUFDO0lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxzRUFBc0U7UUFDdEUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksTUFBTSxJQUFJLEdBQUc7WUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsU0FBaUIsRUFDakIsTUFBbUMsRUFDbkMsWUFBWSxHQUFHLEdBQUc7SUFFbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxHQUFHLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNkLElBQUksR0FBRyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGV2ZWwtb2YtZGV0YWlsIHBsYW5uaW5nIGZvciB0aWxlZCBzcGF0aWFsIGdlb21ldHJ5IOKAlCBjZWxsIG91dGxpbmVzIGFuZCB0cmFuc2NyaXB0cy5cbiAqXG4gKiBUaGUgcmVuZGVyZXIga25vd3MgaXRzIGNhbWVyYSAoYSB3b3JsZC1zcGFjZSBjZW50cmUsIGEgem9vbSBpbiBjYW52YXMgcGl4ZWxzIHBlciB3b3JsZFxuICogdW5pdCwgYSBjYW52YXMgc2l6ZSk7IGEgdGlsZWQgZGF0YXNldCBrbm93cyBpdHMgZ3JpZHMgKG9uZSBwZXIgbGV2ZWwsIGluIG9ic2VydmF0aW9uXG4gKiB1bml0cykuIFRoaXMgbW9kdWxlIGlzIHRoZSBicmlkZ2U6IHdoaWNoIGxldmVsIHRoZSB6b29tIGNhbGxzIGZvciBhbmQgd2hpY2ggdGlsZXMgYXJlIG9uXG4gKiBzY3JlZW4uIEV2ZXJ5dGhpbmcgaGVyZSBpcyBwdXJlLCBzbyB0aGUgcG9saWN5IOKAlCB0aGUgcGFydCB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgdmlld1xuICogaXMgZmFzdCBhbmQgbGVnaWJsZSDigJQgaXMgdGVzdGFibGUgd2l0aG91dCBhIEdQVS5cbiAqXG4gKiBPYnNlcnZhdGlvbiB1bml0cyBtYXAgb250byB3b3JsZCB1bml0cyB0aHJvdWdoIHRoZSBkYXRhc2V0J3MgYGltYWdlUmVmYCBhZmZpbmVcbiAqIChgd29ybGQgPSBkYXRhIMK3IHNjYWxlICsgdHJhbnNsYXRlYCksIHNvIFwicGl4ZWxzIHBlciBvYnNlcnZhdGlvbiB1bml0XCIgaXNcbiAqIGB6b29tIMK3IHNjYWxlYC4gRm9yIGEgWGVuaXVtIGJ1bmRsZSB0aGUgZGF0YSB1bml0IGlzIHRoZSBtaWNyb24gYW5kIHRoZSB3b3JsZCB1bml0IHRoZVxuICogbW9ycGhvbG9neSBwaXhlbC5cbiAqL1xuXG5pbXBvcnQgeyB3b3JsZFZpZXdwb3J0IH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUge1xuICBDYXRlZ29yaWNhbENvbHVtbk1ldGEsXG4gIFNwYXRpYWxCb3VuZHMsXG4gIFNwYXRpYWxEYXRhc2V0LFxuICBTcGF0aWFsSW1hZ2VSZWYsXG4gIFNwYXRpYWxUaWxlTGV2ZWwsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgcXVhbnRpbGUgfSBmcm9tICcuL3N0YXRzJztcblxuLyoqIEEgcmVjdGFuZ2xlIGluIG9ic2VydmF0aW9uIGNvb3JkaW5hdGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhUmVjdCB7XG4gIHgwOiBudW1iZXI7XG4gIHkwOiBudW1iZXI7XG4gIHgxOiBudW1iZXI7XG4gIHkxOiBudW1iZXI7XG59XG5cbi8qKiBUaWxlIGFkZHJlc3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbGVLZXkge1xuICBsZXZlbDogbnVtYmVyO1xuICBneDogbnVtYmVyO1xuICBneTogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgV2hhdCB0aGUgdmlldyBkcmF3cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFdoZXRoZXIgY2VsbCBvdXRsaW5lcyBhcmUgZHJhd246IHRoZSB1c2VyJ3MgY2hvaWNlLCBlbHNlIG9uIHdoZW4gdGhlIGRhdGFzZXQgaGFzIGFueS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZWxsc1Nob3duKFxuICBkYXRhc2V0OiBQaWNrPFNwYXRpYWxEYXRhc2V0LCAncG9seWdvblRpbGVzJyB8ICdwb2x5Z29ucyc+IHwgbnVsbCxcbiAgdmlldzogUGljazxTcGF0aWFsVmlld1N0YXRlLCAnc2hvd0NlbGxzJz4sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgYXZhaWxhYmxlID0gISEoZGF0YXNldD8ucG9seWdvblRpbGVzIHx8IGRhdGFzZXQ/LnBvbHlnb25zKTtcbiAgcmV0dXJuIGF2YWlsYWJsZSAmJiAodmlldy5zaG93Q2VsbHMgPz8gdHJ1ZSk7XG59XG5cbi8qKiBBIGNvbHVtbiBob2xkaW5nIGEgaGFuZC1jdXJhdGVkIGNlbGwtdHlwZSBhbm5vdGF0aW9uLCBieSBuYW1pbmcgY29udmVudGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cmF0ZWRDb2x1bW4obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvY3VyYXRlZC9pLnRlc3QobmFtZSk7XG59XG5cbi8qKlxuICogVGhlIGNhdGVnb3JpY2FsIGNvbHVtbiB0aGF0IG5hbWVzIGVhY2ggY2VsbCdzIHR5cGU6IHRoZSB2aWV3J3MgY2hvaWNlIHdoZW4gaXQgaXMgYVxuICogY29sdW1uIG9mIHRoaXMgZGF0YXNldCwgZWxzZSB0aGUgZmlyc3QgY2F0ZWdvcmljYWwgY29sdW1uIHRoYXQgaXMgbm90IGEgY3VyYXRlZFxuICogYW5ub3RhdGlvbiAoYSBwaXBlbGluZSdzIGNsdXN0ZXJpbmcgaXMgdGhlIGRlZmF1bHQ7IGN1cmF0aW9uIGlzIG9wdGVkIGludG8pLCBlbHNlXG4gKiBhbnkgY2F0ZWdvcmljYWwgY29sdW1uLiBBIGNvbHVtbiBvZiBvbmUgY2F0ZWdvcnksIHN1Y2ggYXMgdGhlIGByZWdpb25gIGEgU3BhdGlhbERhdGFcbiAqIHRhYmxlIGxpbmtzIGl0cyBjZWxscyB0byB0aGVpciBzaGFwZXMgd2l0aCwgbmFtZXMgbm8gdHlwZSBhbmQgaXMgb25seSB1c2VkIHdoZW4gY2hvc2VuO1xuICogYSBkYXRhc2V0IHdpdGggbm90aGluZyBlbHNlIGhhcyBubyBjZWxsIHR5cGVzIChudWxsKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNlbGxUeXBlQ29sdW1uRm9yKFxuICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgdmlldzogUGljazxTcGF0aWFsVmlld1N0YXRlLCAnY2VsbFR5cGVDb2x1bW4nPixcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBjYXRlZ29yaWNhbCA9IGRhdGFzZXQuY29sdW1ucy5maWx0ZXIoKGMpOiBjIGlzIENhdGVnb3JpY2FsQ29sdW1uTWV0YSA9PiBjLmtpbmQgPT09ICdjYXRlZ29yaWNhbCcpO1xuICBpZiAodmlldy5jZWxsVHlwZUNvbHVtbiAmJiBjYXRlZ29yaWNhbC5zb21lKChjKSA9PiBjLm5hbWUgPT09IHZpZXcuY2VsbFR5cGVDb2x1bW4pKSB7XG4gICAgcmV0dXJuIHZpZXcuY2VsbFR5cGVDb2x1bW47XG4gIH1cbiAgY29uc3QgdHlwZWQgPSBjYXRlZ29yaWNhbC5maWx0ZXIoKGMpID0+IGMuY2F0ZWdvcmllcy5sZW5ndGggPiAxKTtcbiAgcmV0dXJuICh0eXBlZC5maW5kKChjKSA9PiAhaXNDdXJhdGVkQ29sdW1uKGMubmFtZSkpID8/IHR5cGVkWzBdKT8ubmFtZSA/PyBudWxsO1xufVxuXG4vLyDilIDilIAgVGlsZXMgaW4gdmlldyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEEgc3RhYmxlIHN0cmluZyBpZCBmb3IgYSB0aWxlIGtleSwgYGxldmVsL2d4L2d5YCDigJQgdXNhYmxlIGFzIGEgTWFwIGtleS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWxlSWQoazogVGlsZUtleSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtrLmxldmVsfS8ke2suZ3h9LyR7ay5neX1gO1xufVxuXG4vKiogQ2FudmFzIHBpeGVscyBwZXIgb2JzZXJ2YXRpb24gdW5pdCBhbG9uZyB4LCBmb3IgYSBjYW1lcmEgem9vbSBhbmQgYSBkYXRh4oaSd29ybGQgYWZmaW5lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpeGVsc1BlckRhdGFVbml0KHpvb206IG51bWJlciwgcmVmPzogU3BhdGlhbEltYWdlUmVmIHwgbnVsbCk6IG51bWJlciB7XG4gIHJldHVybiB6b29tICogTWF0aC5hYnMocmVmPy5zY2FsZT8uWzBdID8/IDEpO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIG9ic2VydmF0aW9uIHNwYWNlIHRoZSBjYW1lcmEgc2hvd3MsIHBhZGRlZCBieSBgbWFyZ2luYCAoYSBmcmFjdGlvbiBvZiB0aGVcbiAqIHZpZXdwb3J0KSBzbyB0aWxlcyBqdXN0IG9mZiBzY3JlZW4gYXJlIGFscmVhZHkgdGhlcmUgd2hlbiBhIHBhbiBicmluZ3MgdGhlbSBpbjogbmFwYXJpLWpzJ3NcbiAqIGB3b3JsZFZpZXdwb3J0YCwgbWFwcGVkIGJhY2sgdGhyb3VnaCB0aGUgaW52ZXJzZSBvZiB0aGUgZGF0YeKGkndvcmxkIGFmZmluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2libGVEYXRhUmVjdChcbiAgY2VudGVyOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdLFxuICB6b29tOiBudW1iZXIsXG4gIGNhbnZhc1c6IG51bWJlcixcbiAgY2FudmFzSDogbnVtYmVyLFxuICByZWY/OiBTcGF0aWFsSW1hZ2VSZWYgfCBudWxsLFxuICBtYXJnaW4gPSAwLjE1LFxuKTogRGF0YVJlY3QgfCBudWxsIHtcbiAgaWYgKCEoem9vbSA+IDApIHx8ICEoY2FudmFzVyA+IDApIHx8ICEoY2FudmFzSCA+IDApKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qgc3ggPSByZWY/LnNjYWxlPy5bMF0gPz8gMTtcbiAgY29uc3Qgc3kgPSByZWY/LnNjYWxlPy5bMV0gPz8gMTtcbiAgY29uc3QgdHggPSByZWY/LnRyYW5zbGF0ZT8uWzBdID8/IDA7XG4gIGNvbnN0IHR5ID0gcmVmPy50cmFuc2xhdGU/LlsxXSA/PyAwO1xuICAvLyBUaGUgd29ybGQgcmVjdCBvZiBhIGNhbnZhcyBncm93biBieSB0aGUgbWFyZ2luIG9uIGVhY2ggc2lkZSAobmFwYXJpLWpzJ3Mgd29ybGRWaWV3cG9ydCkuXG4gIGNvbnN0IHYgPSB3b3JsZFZpZXdwb3J0KGNlbnRlclswXSwgY2VudGVyWzFdLCB6b29tLCBjYW52YXNXICogKDEgKyAyICogbWFyZ2luKSwgY2FudmFzSCAqICgxICsgMiAqIG1hcmdpbikpO1xuICBjb25zdCB3eDAgPSB2Lng7XG4gIGNvbnN0IHd4MSA9IHYueCArIHYud2lkdGg7XG4gIGNvbnN0IHd5MCA9IHYueTtcbiAgY29uc3Qgd3kxID0gdi55ICsgdi5oZWlnaHQ7XG4gIGNvbnN0IGF4ID0gKHd4MCAtIHR4KSAvIHN4O1xuICBjb25zdCBieCA9ICh3eDEgLSB0eCkgLyBzeDtcbiAgY29uc3QgYXkgPSAod3kwIC0gdHkpIC8gc3k7XG4gIGNvbnN0IGJ5ID0gKHd5MSAtIHR5KSAvIHN5O1xuICByZXR1cm4geyB4MDogTWF0aC5taW4oYXgsIGJ4KSwgeTA6IE1hdGgubWluKGF5LCBieSksIHgxOiBNYXRoLm1heChheCwgYngpLCB5MTogTWF0aC5tYXgoYXksIGJ5KSB9O1xufVxuXG4vKipcbiAqIFRpbGVzIG9mIG9uZSBsZXZlbCBpbnRlcnNlY3RpbmcgYHJlY3RgLCBjbGlwcGVkIHRvIHRoZSBkYXRhc2V0J3MgYGJvdW5kc2AgKHNvIHpvb21pbmdcbiAqIG91dCBvdmVyIGVtcHR5IGNhbnZhcyBkb2VzIG5vdCBhc2sgZm9yIHRpbGVzIHRoYXQgY2Fubm90IGV4aXN0KS4gT3JkZXJlZCBmcm9tIHRoZVxuICogcmVjdGFuZ2xlJ3MgY2VudHJlIG91dHdhcmQsIHNvIHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbiBmaWxscyBpbiBmaXJzdC5cbiAqXG4gKiBUaWxlIGBnYCBjb3ZlcnMgYFtnwrdzLCAoZysxKcK3cylgLiBUaGUgdmlldydzIGZhciBlZGdlIGlzIG9wZW4g4oCUIGEgdGlsZSBzdGFydGluZyBleGFjdGx5XG4gKiBhdCBgcmVjdC54MWAgc2hvd3Mgbm90aGluZyDigJQgYnV0IHRoZSBib3VuZHMnIGZhciBlZGdlIGlzIGNsb3NlZDogdGhlIGJvdW5kcyBhcmUgdGhlXG4gKiBleHRyZW1lIG9ic2VydmF0aW9ucycgY29vcmRpbmF0ZXMsIHNvIG9uZSBzaXRzIGV4YWN0bHkgb24gYGJvdW5kc1syXWAsIGluIHRoZSB0aWxlXG4gKiBzdGFydGluZyB0aGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbGVzSW5SZWN0KFxuICByZWN0OiBEYXRhUmVjdCxcbiAgbGV2ZWw6IG51bWJlcixcbiAgbGV2ZWxzOiByZWFkb25seSBTcGF0aWFsVGlsZUxldmVsW10sXG4gIGJvdW5kcz86IFNwYXRpYWxCb3VuZHMgfCBudWxsLFxuICBsaW1pdCA9IEluZmluaXR5LFxuKTogVGlsZUtleVtdIHtcbiAgY29uc3Qgc2l6ZSA9IGxldmVsc1tsZXZlbF0/LnRpbGVTaXplO1xuICBpZiAoIShzaXplID4gMCkpIHJldHVybiBbXTtcbiAgbGV0IHsgeDAsIHkwIH0gPSByZWN0O1xuICAvLyBMYXN0IHRpbGUgYWxvbmcgYW4gYXhpczogdGhlIG9uZSBiZWZvcmUgdGhlIG9wZW4gdmlldyBlZGdlLCBhdCBtb3N0IHRoZSBjbG9zZWQgYm91bmQncy5cbiAgbGV0IGd4MSA9IE1hdGguY2VpbChyZWN0LngxIC8gc2l6ZSkgLSAxO1xuICBsZXQgZ3kxID0gTWF0aC5jZWlsKHJlY3QueTEgLyBzaXplKSAtIDE7XG4gIGlmIChib3VuZHMpIHtcbiAgICB4MCA9IE1hdGgubWF4KHgwLCBib3VuZHNbMF0pO1xuICAgIHkwID0gTWF0aC5tYXgoeTAsIGJvdW5kc1sxXSk7XG4gICAgaWYgKE1hdGgubWluKHJlY3QueDEsIGJvdW5kc1syXSkgPCB4MCB8fCBNYXRoLm1pbihyZWN0LnkxLCBib3VuZHNbM10pIDwgeTApIHJldHVybiBbXTtcbiAgICBneDEgPSBNYXRoLm1pbihneDEsIE1hdGguZmxvb3IoYm91bmRzWzJdIC8gc2l6ZSkpO1xuICAgIGd5MSA9IE1hdGgubWluKGd5MSwgTWF0aC5mbG9vcihib3VuZHNbM10gLyBzaXplKSk7XG4gIH1cbiAgY29uc3QgZ3gwID0gTWF0aC5mbG9vcih4MCAvIHNpemUpO1xuICBjb25zdCBneTAgPSBNYXRoLmZsb29yKHkwIC8gc2l6ZSk7XG4gIGNvbnN0IGN4ID0gKHJlY3QueDAgKyByZWN0LngxKSAvIDIgLyBzaXplO1xuICBjb25zdCBjeSA9IChyZWN0LnkwICsgcmVjdC55MSkgLyAyIC8gc2l6ZTtcbiAgY29uc3Qgb3V0OiBUaWxlS2V5W10gPSBbXTtcbiAgZm9yIChsZXQgZ3kgPSBneTA7IGd5IDw9IGd5MTsgZ3krKykge1xuICAgIGZvciAobGV0IGd4ID0gZ3gwOyBneCA8PSBneDE7IGd4KyspIG91dC5wdXNoKHsgbGV2ZWwsIGd4LCBneSB9KTtcbiAgfVxuICBvdXQuc29ydChcbiAgICAoYSwgYikgPT4gKGEuZ3ggKyAwLjUgLSBjeCkgKiogMiArIChhLmd5ICsgMC41IC0gY3kpICoqIDIgLSAoKGIuZ3ggKyAwLjUgLSBjeCkgKiogMiArIChiLmd5ICsgMC41IC0gY3kpICoqIDIpLFxuICApO1xuICByZXR1cm4gb3V0Lmxlbmd0aCA+IGxpbWl0ID8gb3V0LnNsaWNlKDAsIGxpbWl0KSA6IG91dDtcbn1cblxuLyoqIHtAbGluayB0aWxlc0luUmVjdH0gZm9yIGEgZ3JpZCB3aG9zZSB0aWxlICgwLCAwKSBzdGFydHMgYXQgYG9yaWdpbmAuICovXG5leHBvcnQgZnVuY3Rpb24gdGlsZXNJblJlY3RGcm9tKFxuICBvcmlnaW46IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0sXG4gIHJlY3Q6IERhdGFSZWN0LFxuICBsZXZlbDogbnVtYmVyLFxuICBsZXZlbHM6IHJlYWRvbmx5IFNwYXRpYWxUaWxlTGV2ZWxbXSxcbiAgYm91bmRzPzogU3BhdGlhbEJvdW5kcyB8IG51bGwsXG4gIGxpbWl0ID0gSW5maW5pdHksXG4pOiBUaWxlS2V5W10ge1xuICBjb25zdCBbb3gsIG95XSA9IG9yaWdpbjtcbiAgY29uc3Qgc2hpZnRlZCA9IHsgeDA6IHJlY3QueDAgLSBveCwgeTA6IHJlY3QueTAgLSBveSwgeDE6IHJlY3QueDEgLSBveCwgeTE6IHJlY3QueTEgLSBveSB9O1xuICBjb25zdCBiOiBTcGF0aWFsQm91bmRzIHwgbnVsbCA9IGJvdW5kcyA/IFtib3VuZHNbMF0gLSBveCwgYm91bmRzWzFdIC0gb3ksIGJvdW5kc1syXSAtIG94LCBib3VuZHNbM10gLSBveV0gOiBudWxsO1xuICByZXR1cm4gdGlsZXNJblJlY3Qoc2hpZnRlZCwgbGV2ZWwsIGxldmVscywgYiwgbGltaXQpO1xufVxuXG4vKiogQXJlYSBvZiBgcmVjdGAgaW5zaWRlIGBib3VuZHNgICh0aGUgd2hvbGUgcmVjdCB3aGVuIHRoZXJlIGFyZSBub25lKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXNpYmxlQXJlYShyZWN0OiBEYXRhUmVjdCwgYm91bmRzPzogU3BhdGlhbEJvdW5kcyB8IG51bGwpOiBudW1iZXIge1xuICBjb25zdCB4MCA9IGJvdW5kcyA/IE1hdGgubWF4KHJlY3QueDAsIGJvdW5kc1swXSkgOiByZWN0LngwO1xuICBjb25zdCB5MCA9IGJvdW5kcyA/IE1hdGgubWF4KHJlY3QueTAsIGJvdW5kc1sxXSkgOiByZWN0LnkwO1xuICBjb25zdCB4MSA9IGJvdW5kcyA/IE1hdGgubWluKHJlY3QueDEsIGJvdW5kc1syXSkgOiByZWN0LngxO1xuICBjb25zdCB5MSA9IGJvdW5kcyA/IE1hdGgubWluKHJlY3QueTEsIGJvdW5kc1szXSkgOiByZWN0LnkxO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgeDEgLSB4MCkgKiBNYXRoLm1heCgwLCB5MSAtIHkwKTtcbn1cblxuLy8g4pSA4pSAIExldmVscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUeXBpY2FsIGNlbGwgZGlhbWV0ZXIsIGluIG9ic2VydmF0aW9uIHVuaXRzLCB1c2VkIHRvIGp1ZGdlIGhvdyBsYXJnZSBjZWxscyBhcHBlYXIuXG4gKiBEZXJpdmVkIGZyb20gdGhlIHBlci1vYnNlcnZhdGlvbiByYWRpdXMgd2hlbiB0aGVyZSBpcyBvbmU7IDEyIMK1bSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBpY2FsQ2VsbERpYW1ldGVyKHJhZGl1czogRmxvYXQzMkFycmF5IHwgbnVtYmVyIHwgdW5kZWZpbmVkLCBmYWxsYmFjayA9IDEyKTogbnVtYmVyIHtcbiAgaWYgKHR5cGVvZiByYWRpdXMgPT09ICdudW1iZXInKSByZXR1cm4gcmFkaXVzID4gMCA/IHJhZGl1cyAqIDIgOiBmYWxsYmFjaztcbiAgaWYgKCFyYWRpdXM/Lmxlbmd0aCkgcmV0dXJuIGZhbGxiYWNrO1xuICAvLyBUaGUgbWVkaWFuIG9mIGEgc2FtcGxlIGlzIHBsZW50eSDigJQgdGhpcyBzZXRzIGEgdGhyZXNob2xkLCBub3QgYSBtZWFzdXJlbWVudC5cbiAgY29uc3QgbWVkaWFuID0gcXVhbnRpbGUocmFkaXVzLCAwLjUsIHsgZmlsdGVyOiAncG9zaXRpdmUnLCBzYW1wbGVTaXplOiAyMDQ4IH0pO1xuICByZXR1cm4gbWVkaWFuID09PSBudWxsID8gZmFsbGJhY2sgOiBtZWRpYW4gKiAyO1xufVxuXG4vKipcbiAqIE9uLXNjcmVlbiBjZWxsIGRpYW1ldGVyIChweCkgYXQgb3IgYWJvdmUgd2hpY2ggZWFjaCBwb2x5Z29uIGxldmVsIGlzIHVzZWQuIEEgbGV2ZWxcbiAqIGhhbHZlcyB0aGUgdmVydGljZXMgb2YgdGhlIG9uZSBiZWxvdywgc28gZWFjaCBzaG91bGQgdGFrZSBvdmVyIHdoZW4gdGhlIGNlbGwgaXMgYWJvdXRcbiAqIGhhbGYgYXMgbGFyZ2Ugb24gc2NyZWVuLiBCZWxvdyB0aGUgbGFzdCBmaW5pdGUgdGhyZXNob2xkIG91dGxpbmVzIGFyZSBub3QgZHJhd24gYXRcbiAqIGFsbCDigJQgYSBjZWxsIGEgZmV3IHBpeGVscyB3aWRlIGlzIGEgZG90LCBhbmQgdGhlIG9ic2VydmF0aW9uIG1hcmtlcnMgYWxyZWFkeSBkcmF3IGl0XG4gKiBhcyBvbmUuXG4gKlxuICogWGVuaXVtJ3MgZm91cnRoIGxldmVsICgzIHZlcnRpY2VzIHBlciBjZWxsKSBpcyBkZWxpYmVyYXRlbHkgbmV2ZXIgdXNlZDogc2VlbiBvblxuICogc2NyZWVuIGl0IGlzIGEgZmllbGQgb2YgdHJpYW5nbGVzLCB3aGljaCByZWFkcyBhcyBhbiBhcnRlZmFjdCByYXRoZXIgdGhhbiBhcyBjZWxscy5cbiAqIFRoZSBkb3RzIGJlbG93IDggcHggc2F5IHRoZSBzYW1lIHRoaW5nIG1vcmUgaG9uZXN0bHkuXG4gKi9cbmV4cG9ydCBjb25zdCBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYID0gWzM2LCAxOCwgOCwgSW5maW5pdHldO1xuXG4vKipcbiAqIFdoaWNoIHBvbHlnb24gbGV2ZWwgc3VpdHMgdGhpcyB6b29tLCBvciAtMSBmb3IgXCJ0b28gc21hbGwgdG8gb3V0bGluZVwiLlxuICogYGRldGFpbGAgPiAxIHByZWZlcnMgZmluZXIgbGV2ZWxzIChzaGFycGVyLCBzbG93ZXIpOyA8IDEgY29hcnNlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbHlnb25MZXZlbEZvcihweFBlclVuaXQ6IG51bWJlciwgY2VsbERpYW1ldGVyOiBudW1iZXIsIGxldmVsQ291bnQ6IG51bWJlciwgZGV0YWlsID0gMSk6IG51bWJlciB7XG4gIGNvbnN0IGNlbGxQeCA9IHB4UGVyVW5pdCAqIGNlbGxEaWFtZXRlciAqIGRldGFpbDtcbiAgY29uc3QgdGFibGUgPSBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYO1xuICBmb3IgKGxldCBsID0gMDsgbCA8IGxldmVsQ291bnQ7IGwrKykge1xuICAgIC8vIFBhc3QgdGhlIHRhYmxlLCBrZWVwIGhhbHZpbmc6IGVhY2ggbGV2ZWwgc3RpbGwgaGFsdmVzIHRoZSB2ZXJ0aWNlcy5cbiAgICBjb25zdCBtaW4gPSB0YWJsZVtsXSA/PyB0YWJsZVt0YWJsZS5sZW5ndGggLSAxXSAvIDIgKiogKGwgLSB0YWJsZS5sZW5ndGggKyAxKTtcbiAgICBpZiAoY2VsbFB4ID49IG1pbikgcmV0dXJuIGw7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIFdoaWNoIHRyYW5zY3JpcHQgbGV2ZWwgc3VpdHMgdGhpcyB6b29tOiB0aGUgb25lIHdob3NlIHRpbGVzIGNvbWUgb3V0IGNsb3Nlc3QgdG9cbiAqIGB0YXJnZXRUaWxlUHhgIG9uIHNjcmVlbi4gQ29hcnNlciBsZXZlbHMgYWdncmVnYXRlIG1vcmUsIHNvIHRoaXMga2VlcHMgdGhlIG51bWJlciBvZlxuICogbWFya2VycyBwZXIgc2NyZWVuIHJvdWdobHkgY29uc3RhbnQgaG93ZXZlciBmYXIgb3V0IHRoZSBjYW1lcmEgaXMg4oCUIHRoZSBwcm9wZXJ0eSB0aGF0XG4gKiBrZWVwcyB0aGUgdmlldyBmYXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdExldmVsRm9yKFxuICBweFBlclVuaXQ6IG51bWJlcixcbiAgbGV2ZWxzOiByZWFkb25seSBTcGF0aWFsVGlsZUxldmVsW10sXG4gIHRhcmdldFRpbGVQeCA9IDUxMixcbik6IG51bWJlciB7XG4gIGlmICghbGV2ZWxzLmxlbmd0aCB8fCAhKHB4UGVyVW5pdCA+IDApKSByZXR1cm4gMDtcbiAgbGV0IGJlc3QgPSAwO1xuICBsZXQgYmVzdEVyciA9IEluZmluaXR5O1xuICBmb3IgKGxldCBsID0gMDsgbCA8IGxldmVscy5sZW5ndGg7IGwrKykge1xuICAgIGNvbnN0IGVyciA9IE1hdGguYWJzKE1hdGgubG9nMigobGV2ZWxzW2xdLnRpbGVTaXplICogcHhQZXJVbml0KSAvIHRhcmdldFRpbGVQeCkpO1xuICAgIGlmIChlcnIgPCBiZXN0RXJyKSB7XG4gICAgICBiZXN0RXJyID0gZXJyO1xuICAgICAgYmVzdCA9IGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBiZXN0O1xufVxuIl19
|