@jax-data-science/sci-image-visualizer 0.14.0 → 0.16.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/channel-histogram/channel-histogram.component.mjs +39 -3
- package/esm2022/lib/channel-histogram/channel-tree.mjs +65 -0
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +202 -33
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +2 -1
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +5 -8
- package/esm2022/lib/spatial/lod.mjs +19 -1
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +47 -10
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +49 -16
- package/esm2022/lib/store/visualizer-store.service.mjs +20 -3
- package/esm2022/lib/toolbar/toolbar.component.mjs +13 -4
- package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +7 -7
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CYsPzX3J.mjs} +462 -83
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CYsPzX3J.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-DaZVXq1s.mjs} +3 -2
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-DaZVXq1s.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +2 -1
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/lib/channel-histogram/channel-histogram.component.d.ts +14 -0
- package/lib/channel-histogram/channel-tree.d.ts +30 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +2 -0
- package/lib/contracts/image.contract.d.ts +6 -0
- package/lib/implementations/napari-js/napari-scene.d.ts +2 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +80 -9
- package/lib/spatial/lod.d.ts +11 -1
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +18 -1
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +18 -0
- package/lib/store/visualizer-store.service.d.ts +7 -1
- package/lib/toolbar/toolbar.component.d.ts +6 -0
- package/lib/toolbar/view-controls/view-controls.component.d.ts +3 -3
- package/package.json +2 -2
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs.map +0 -1
|
@@ -122,6 +122,7 @@ export class NapariVisualizerService extends BaseStoreVisualizer {
|
|
|
122
122
|
axesVisible: true,
|
|
123
123
|
surfaceWireframe: false,
|
|
124
124
|
volumeZScale: 1,
|
|
125
|
+
spatialZScale: 1,
|
|
125
126
|
};
|
|
126
127
|
/**
|
|
127
128
|
* Frame loading (volume assembly, surface preload): aborted by {@link reset} AND by
|
|
@@ -674,4 +675,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
674
675
|
type: Inject,
|
|
675
676
|
args: [SPATIAL_DATA_PORT]
|
|
676
677
|
}] }, { type: i8.SpatialSelectionStore }] });
|
|
677
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXZpc3VhbGl6ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9uYXBhcmktdmlzdWFsaXplci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBYyxlQUFlLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFPbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHlDQUF5QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RixPQUFPLEVBQXNCLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRyxPQUFPLEVBQ0wsUUFBUSxFQUVSLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFXbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUcvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1B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VSx1QkFBdUIsa0JBeUZ4QixnQkFBZ0IseU1BT0osY0FBYyxxRUFFMUIsVUFBVSxhQUdFLGlCQUFpQjtrSEFyRzVCLHVCQUF1QixjQURWLE1BQU07OzJGQUNuQix1QkFBdUI7a0JBRG5DLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkEwRjdCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFPdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzswQkFFakMsTUFBTTsyQkFBQyxVQUFVOzswQkFHakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgT3B0aW9uYWwsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdpbWFnZS1qcyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFZpZXdlciB9IGZyb20gJ25hcGFyaS1qcyc7XG5cbmltcG9ydCB7IElJbWFnZUluZm8gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuaW1wb3J0IHsgSUhpc3RvZ3JhbSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuaW1wb3J0IHsgQ2FudmFzVG9vbElkIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgSVJlZ2lvbk92ZXJsYXkgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuaW1wb3J0IHsgU3BhdGlhbE9ic2VydmF0aW9ucyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgU1BBVElBTF9EQVRBX1BPUlQsIFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgeyBUSUxFX0FDQ0VTU19QT1JULCBUaWxlQWNjZXNzUG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy90aWxlLWFjY2Vzcy5wb3J0JztcbmltcG9ydCB7IFZJWl9DT05GSUcsIFZpekNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy92aXotY29uZmlnJztcbmltcG9ydCB7IElDZWxsU2VnbWVudGVyLCBDRUxMX1NFR01FTlRFUiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdCc7XG5pbXBvcnQgeyBWaWV3ZXJDYXBhYmlsaXRpZXMsIFZpZXdlckZlYXR1cmUsIGNhcGFiaWxpdGllc09mIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NhcGFiaWxpdGllcy5jb250cmFjdCc7XG5pbXBvcnQge1xuICBQbG90VHlwZSxcbiAgUGxvdFR5cGVEZXNjcmlwdG9yLFxuICBQTE9UX1RZUEVfREVTQ1JJUFRPUlMsXG4gIE5BUEFSSV9ERUZBVUxUX0RFQ0lNQVRFLFxuICBpc05hcGFyaTNkLFxuICBpc05hcGFyaUlzb3N1cmZhY2UsXG4gIGlzTmFwYXJpU2NhdHRlcixcbiAgaXNOYXBhcmlTY2F0dGVyM2QsXG4gIGlzTmFwYXJpU3VyZmFjZSxcbiAgaXNTcGF0aWFsT21pY3MsXG4gIGlzU3BhdGlhbE9taWNzM2QsXG59IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wbG90LXR5cGUnO1xuaW1wb3J0IHtcbiAgSVZpZXdlckJhY2tlbmQsXG4gIFBpeGVsRGF0YSxcbiAgSUlzb3N1cmZhY2VDb250cm9scyxcbiAgSUludGVuc2l0eUNvbnRyb2xzLFxuICBJU3VyZmFjZTNkQ29udHJvbHMsXG4gIElPc2RWaWV3T3B0aW9ucyxcbiAgSVZvbHVtZVJlc29sdXRpb24sXG4gIElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSxcbn0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgVmlzdWFsaXplclN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdmlzdWFsaXplci1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3BhdGlhbFNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc3BhdGlhbC1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYW52YXNUb29sTWFuYWdlciB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvdG9vbC1raXQvY2FudmFzLXRvb2wtbWFuYWdlcic7XG5pbXBvcnQgeyBXYW5kU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvd2FuZC93YW5kLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FtVG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IFNhbVBvaW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tcG9pbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxTZWdtZW50VG9vbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b29sYmFyL3NlZ21lbnRhdGlvbi9jZWxsLXNlZ21lbnQtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VTdG9yZVZpc3VhbGl6ZXIgfSBmcm9tICcuLi9iYXNlLXN0b3JlLXZpc3VhbGl6ZXInO1xuaW1wb3J0IHsgdGhyb3dJZkFib3J0ZWQgfSBmcm9tICcuLi90aWxlLXNlcnZlcic7XG5pbXBvcnQgeyBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi9zaW1wbGUtc2xpY2UtYWNjZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgWk9PTV9CVVRUT05fU1RFUCB9IGZyb20gJy4uL29zZC9vc2Qtem9vbSc7XG5pbXBvcnQgeyBOQVBBUklfV0hFRUxfWk9PTV9TUEVFRCB9IGZyb20gJy4vbmFwYXJpLXpvb20nO1xuaW1wb3J0IHsgVHJhbnNjcmlwdEVzdGltYXRlIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC10aWxlcyc7XG5pbXBvcnQgeyBOYXBhcmlUaWxlQ2xpZW50IH0gZnJvbSAnLi9uYXBhcmktdGlsZS1jbGllbnQnO1xuaW1wb3J0IHsgTmFwYXJpRGlzcGxheVN0YXRlIH0gZnJvbSAnLi9uYXBhcmktZGlzcGxheS1zdGF0ZSc7XG5pbXBvcnQgeyBMb2FkaW5nQmFkZ2VTdGF0ZSB9IGZyb20gJy4vbmFwYXJpLWxvYWRpbmctc3RhdGUnO1xuaW1wb3J0IHsgTmFwYXJpVG9vbEJyaWRnZSB9IGZyb20gJy4vbmFwYXJpLXRvb2wtYnJpZGdlJztcbmltcG9ydCB7IGNhbWVyYURyYWdNb2RlIH0gZnJvbSAnLi9uYXBhcmktYXhlcy1naXptbyc7XG5pbXBvcnQgeyBOYXBhcmlTY2VuZSwgTmFwYXJpU2V0dGluZ3MsIFNjZW5lQ29udGV4dCwgVm9sdW1lVm94ZWxzT25TY3JlZW4gfSBmcm9tICcuL25hcGFyaS1zY2VuZSc7XG5pbXBvcnQgdHlwZSB7IFBsYW5lQXhpcywgU2xpY2VQbGFuZXMgfSBmcm9tICcuL25hcGFyaS12b2x1bWUtc2xpY2UtcGxhbmVzJztcbmltcG9ydCB0eXBlIHsgUmVnaW9uTWVzaDNEIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXJlZ2lvbi1tZXNoZXMnO1xuaW1wb3J0IHsgSW1hZ2UyZFNjZW5lLCBTY2F0dGVyUmVnaW9uc1NjZW5lIH0gZnJvbSAnLi9uYXBhcmktaW1hZ2UtMmQtc2NlbmUnO1xuaW1wb3J0IHsgU2NhdHRlcjNkU2NlbmUsIFZvbHVtZVNjZW5lIH0gZnJvbSAnLi9uYXBhcmktdm9sdW1lLXNjZW5lJztcbmltcG9ydCB7IFN1cmZhY2VTY2VuZSB9IGZyb20gJy4vbmFwYXJpLXN1cmZhY2Utc2NlbmUnO1xuaW1wb3J0IHsgU3BhdGlhbFNlc3Npb24gfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLXNjZW5lJztcbmltcG9ydCB7IFNwYXRpYWwyZFNjZW5lIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC0yZC1zY2VuZSc7XG5pbXBvcnQgeyBTcGF0aWFsM2RTY2VuZSB9IGZyb20gJy4vbmFwYXJpLXNwYXRpYWwtM2Qtc2NlbmUnO1xuXG4vKiogT3BhcXVlIGhhbmRsZSBmcm9tIHtAbGluayBOYXBhcmlWaXN1YWxpemVyU2VydmljZS5sb2FkfSwgcGFzc2VkIGJhY2sgdG8gcGxvdCgpLiAqL1xuaW50ZXJmYWNlIE5hcGFyaUxvYWRlZCB7XG4gIGltYWdlSW5mbzogSUltYWdlSW5mbztcbiAgejogbnVtYmVyO1xuICAvKiogTXVzdCBtYXRjaCBgSUltYWdlSW5mby5maWxlTmFtZWAg4oCUIHRoZSByZW5kZXIgb3JjaGVzdHJhdG9yIGRyb3BzIHRoZSByZXN1bHQgaWYgdGhlXG4gICAqICBoYW5kbGUncyBgZmlsZW5hbWVgIGRvZXNuJ3QgbWF0Y2ggdGhlIHJlcXVlc3RlZCBpbWFnZSAoZ3VhcmRzIGFnYWluc3Qgc3RhbGUgY2xpY2tzKS4gKi9cbiAgZmlsZW5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgV2ViR1BVIGltYWdlIGJhY2tlbmQsIGJ1aWx0IG9uIHRoZSBwdWJsaXNoZWQgYG5hcGFyaS1qc2AgbGlicmFyeSAoaml0LXVpIzEwMjogYVxuICogYnJvd3Nlci1iYXNlZCBuYXBhcmkgc2hpcHBlZCBhcyBhIEpTIGxpYnJhcnksIGFsb25nc2lkZSBPcGVuU2VhZHJhZ29uIGZvciBpbWFnZXMgYW5kIFBsb3RseVxuICogZm9yIDNEKS5cbiAqXG4gKiBPbmUgc2NlbmUgaXMgbW91bnRlZCBwZXIge0BsaW5rIHBsb3R9LCBjaG9zZW4gYnkgcGxvdCB0eXBlOlxuICogIC0gKioyRCBpbWFnZSoqIChhbmQgdGhlIHJlZ2lvbi1jZW50cm9pZCBzY2F0dGVyIGFuZCBzcGF0aWFsLW9taWNzIHZpZXdzIG92ZXIgaXQpOiBweXJhbWlkYWxcbiAqICAgIGBUaWxlZFNvdXJjZWBzIGFnYWluc3QgdGhlIGppdC1zZXJ2aWNlIGAvdGlsZWAgZW5kcG9pbnQgd2hlbiBgL3RpbGVzL2luZm9gIGRlc2NyaWJlcyB0aGVcbiAqICAgIGltYWdlLCBlbHNlIGEgc2luZ2xlIHN0aXRjaGVkIGxldmVsIChgdGlsZWQ6ZmFsc2VgIHN0YWNrcyBmZXRjaCBlYWNoIHNsaWNlJ3Mgb3duIFVSTCk7XG4gKiAgICBtdWx0aWNoYW5uZWwgYWRkaXRpdmUgdGludHMsIGdyYXlzY2FsZSBjb2xvcm1hcCBvciBSR0I7IHNjYWxlIGJhciwgbmF2aWdhdG9yLCByZWdpb25cbiAqICAgIG92ZXJsYXkgYW5kIHRoZSBzaGFyZWQgcGl4ZWwgdG9vbHMgKHdhbmQsIGJydXNoLCBlcmFzZXIsIHpvb20tdG8tYm94LCBTQU0vY2VsbHBvc2UpLlxuICogIC0gKipWb2x1bWUgLyBpc29zdXJmYWNlIC8gM0Qgc2NhdHRlciAvIHN1cmZhY2UqKjogc2xpY2VzIGFzc2VtYmxlZCBpbnRvIGEgZGVjaW1hdGVkIHZvbHVtZVxuICogICAgKG9yIG9uZSBoZWlnaHQgZmllbGQgcGVyIHNsaWNlKSwgd2l0aCB0aGUgYXhlcyBnaXptbyBhbmQgdGhlIFotaGVpZ2h0IGhhbmRsZS5cbiAqICAtICoqU3BhdGlhbCBvbWljcyAyRCAvIDNEKio6IG9ic2VydmF0aW9uIG1hcmtlcnMgb3IgYSAzRCBjbG91ZCwgZ2VuZSBtYXBzLCBkZW5zaXR5IHZvbHVtZXMsXG4gKiAgICBsZXZlbC1vZi1kZXRhaWwgdGlsZXMsIGhvdmVyIHRvb2x0aXAgYW5kIGNsaWNrLXRvLXNlbGVjdC5cbiAqXG4gKiBQZXItY2hhbm5lbCBoaXN0b2dyYW1zIGNvbWUgZnJvbSB0aGUgY2xpZW50IGRhdGEsIG9yIGZyb20gdGhlIHNlcnZlcidzIGAvaGlzdG9ncmFtYCBmb3JcbiAqID44LWJpdCBpbWFnZXM7IFRJRkYgZXhwb3J0IGZyb20gYC9leHBvcnQvdGlmZmAuIFJlZ2lvbiBzdGF0ZSBhbmQgZGlzcGxheSBvcHRpb25zIGRlbGVnYXRlIHRvXG4gKiB0aGUgc2hhcmVkIHtAbGluayBSZWdpb25TdG9yZX0gLyB7QGxpbmsgVmlzdWFsaXplclN0b3JlfSB0aHJvdWdoIHtAbGluayBCYXNlU3RvcmVWaXN1YWxpemVyfSxcbiAqIGV4YWN0bHkgYXMgT1NEIGRvZXMuIG5hcGFyaS1qcydzIHJlbmRlciBsb29wIGFuZCB0aGUgaG90IHBvaW50ZXIgcGF0aHMgcnVuIG91dHNpZGUgdGhlXG4gKiBBbmd1bGFyIHpvbmUuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmFwYXJpVmlzdWFsaXplclNlcnZpY2UgZXh0ZW5kcyBCYXNlU3RvcmVWaXN1YWxpemVyIGltcGxlbWVudHMgSVZpZXdlckJhY2tlbmQge1xuICByZWFkb25seSBjYXBhYmlsaXRpZXM6IFZpZXdlckNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc09mKFtcbiAgICBWaWV3ZXJGZWF0dXJlLkltYWdlRGlzcGxheSxcbiAgICBWaWV3ZXJGZWF0dXJlLlN0YWNrU2xpZGVyLFxuICAgIFZpZXdlckZlYXR1cmUuUGl4ZWxSZWFkYmFjayxcbiAgICBWaWV3ZXJGZWF0dXJlLlN1cmZhY2UzRCxcbiAgICBWaWV3ZXJGZWF0dXJlLklzb3N1cmZhY2UsXG4gIF0pO1xuXG4gIC8qKiBUaGUgaml0LXNlcnZpY2UgdGlsZSBzZXJ2ZXI6IGRlc2NyaXB0b3IsIHNsaWNlcywgdGlsZWQgc291cmNlcywgaGlzdG9ncmFtcywgZXhwb3J0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbGVDbGllbnQ6IE5hcGFyaVRpbGVDbGllbnQ7XG4gIC8qKiBuYXBhcmktanMncyByZW5kZXIgbG9vcCBhbmQgdGhlIGhvdCBwb2ludGVyL3RpbWVyIHBhdGhzIHJ1biBvdXRzaWRlIHRoZSBBbmd1bGFyIHpvbmVcbiAgICogIChOQVBBUkktU1ZDLTI1KTsgd2hhdCB0aGV5IHByb2R1Y2UgZm9yIHRoZSBVSSByZS1lbnRlcnMgaXQgdGhyb3VnaCB7QGxpbmsgaW5ab25lfS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJpdmF0ZSB2aWV3ZXI6IFZpZXdlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBob3N0OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxvYWRlZDogTmFwYXJpTG9hZGVkIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBGb3IgdGhlIHBhbmVsOiB0aGUgdHJhbnNjcmlwdHMtaW4tdmlldyBlc3RpbWF0ZSBhbmQgdGhlIGRlbnNpdHkgd2luZG93IGluIHVzZS4gKi9cbiAgcmVhZG9ubHkgdHJhbnNjcmlwdEVzdGltYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJhbnNjcmlwdEVzdGltYXRlIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUcmFuc2NyaXB0cyBvZiBlYWNoIHNlbGVjdGVkIGdlbmUgaW4gdmlldyAoc2VlIE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzLmdlbmVDb3VudHNJbikuICovXG4gIHJlYWRvbmx5IGdlbmVDb3VudHNJblZpZXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGRlbnNpdHlTdGF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgbG86IG51bWJlcjsgaGk6IG51bWJlcjsgbWF4OiBudW1iZXIgfSB8IG51bGw+KG51bGwpO1xuICAvKiogVGhlIG9ic2VydmF0aW9uIGdlbmUgZmlsdGVyIGNvdWxkIG5vdCBiZSBhcHBsaWVkIChhbiBleHByZXNzaW9uIHJlYWQgZmFpbGVkKS4gKi9cbiAgcmVhZG9ubHkgZ2VuZUZpbHRlckZhaWxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIFwieCByZWxvYWRpbmfigKZcIiBhdCB0aGUgYm90dG9tIG9mIHRoZSBjYW52YXM6IHRoZSB0aWxlIGxheWVycycgbG9hZHMgYW5kIHRoZSBvYnNlcnZhdGlvbnMnLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGJhZGdlID0gbmV3IExvYWRpbmdCYWRnZVN0YXRlKCk7XG4gIC8qKiBUaGUgc3RvcmUncyBkaXNwbGF5IHN0YXRlIChjb2xvcm1hcCwgcmV2ZXJzZSwgaW52ZXJ0KSBhbmQgdGhlIGNvbG9ybWFwcyBkZXJpdmVkIGZyb20gaXQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheTogTmFwYXJpRGlzcGxheVN0YXRlO1xuICAvKipcbiAgICogVGhlIG1vdW50ZWQgc2NlbmUncyBsaWZldGltZTogYWJvcnRlZCBieSB7QGxpbmsgcmVzZXR9LCBzbyBldmVyeXRoaW5nIGEgcGxvdCBzdGFydHMg4oCUIGl0c1xuICAgKiBkZXNjcmlwdG9yIHBvbGwsIGl0cyB0aWxlIGZldGNoZXMsIGl0cyBiYWRnZSBjb3VudHMsIGl0cyBhd2FpdHMg4oCUIGNhbiB0ZWxsIHRoYXQgYSBuZXdlciBwbG90XG4gICAqIGhhcyByZXBsYWNlZCBpdC4gQSB0aWxlIHRoYXQgc2V0dGxlcyBhZnRlciBhIHJlc2V0IGJlbG9uZ3MgdG8gdGhlIGFib3J0ZWQgc2NlbmUgYW5kIGxlYXZlcyB0aGVcbiAgICogbmV3IHNjZW5lJ3MgY291bnQgYWxvbmUuXG4gICAqL1xuICBwcml2YXRlIGxpZmV0aW1lID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAvKiogV2hhdCB7QGxpbmsgcGxvdH0gbW91bnRlZCwgd2hpbGUgaXQgaXMgbW91bnRlZC4gKi9cbiAgcHJpdmF0ZSBzY2VuZTogTmFwYXJpU2NlbmUgfCBudWxsID0gbnVsbDtcbiAgLyoqIFJlZ2lvbiByZWNvbnN0cnVjdGlvbnMgdG8gc2hvdyBpbiBhIHZvbHVtZSB2aWV3LCBrZXB0IGFjcm9zcyByZS1wbG90cyBvZiB0aGVpciBpbWFnZS4gKi9cbiAgcHJpdmF0ZSByZWdpb25NZXNoZXM6IHJlYWRvbmx5IFJlZ2lvbk1lc2gzRFtdID0gW107XG4gIC8qKiBUaGUgaW1hZ2UgKGZpbGUgbmFtZSkge0BsaW5rIHJlZ2lvbk1lc2hlc30gd2VyZSBidWlsdCBmcm9tLiAqL1xuICBwcml2YXRlIHJlZ2lvbk1lc2hlc0ltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKiBUaGUga2V5cyBvZiB0aGUgcmVjb25zdHJ1Y3Rpb25zIGhpZ2hsaWdodGVkLiAqL1xuICBwcml2YXRlIHJlZ2lvbkhpZ2hsaWdodDogcmVhZG9ubHkgc3RyaW5nW10gPSBbXTtcbiAgLyoqIFRoZSBrZXlzIG9mIHRoZSByZWNvbnN0cnVjdGlvbnMgaGlkZGVuLiAqL1xuICBwcml2YXRlIHJlZ2lvbkhpZGRlbjogcmVhZG9ubHkgc3RyaW5nW10gPSBbXTtcbiAgLyoqIFRoZSBwbGFuZXMgb2YgdGhlIHNlY3Rpb25zIGJlc2lkZSBhIHZvbHVtZSB2aWV3LCBvciBub25lLiAqL1xuICBwcml2YXRlIHNsaWNlUGxhbmVzOiBTbGljZVBsYW5lcyA9IHsgeDogbnVsbCwgeTogbnVsbCwgejogbnVsbCB9O1xuICAvKiogQSBzZWN0aW9uJ3MgcGxhbmUgZHJhZ2dlZCBpbiB0aGUgdm9sdW1lIChzZWUge0BsaW5rIGdldFNsaWNlUGxhbmVNb3ZlJH0pLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHNsaWNlUGxhbmVNb3ZlJCA9IG5ldyBTdWJqZWN0PHsgYXhpczogUGxhbmVBeGlzOyB2YWx1ZTogbnVtYmVyIH0+KCk7XG4gIC8qKiBDbGlja3Mgb24gdGhlIHJlY29uc3RydWN0aW9ucyAoc2VlIHtAbGluayBnZXRSZWdpb25NZXNoUGljayR9KS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZWdpb25NZXNoUGljayQgPSBuZXcgU3ViamVjdDx7IGtleTogc3RyaW5nIHwgbnVsbDsgYWRkaXRpdmU6IGJvb2xlYW4gfT4oKTtcbiAgLyoqIFNwYXRpYWwgc3RhdGUgdGhhdCBvdXRsaXZlcyBhIHNjZW5lIChsYXRlc3QgZGF0YSwgd2luZG93cywgZXN0aW1hdGVkIGdlbmUtbWFwIGZpZWxkcykuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3BhdGlhbDogU3BhdGlhbFNlc3Npb247XG4gIC8qKiBWaWV3ZXIgc2V0dGluZ3MgdGhhdCBvdXRsaXZlIGEgc2NlbmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0dGluZ3M6IE5hcGFyaVNldHRpbmdzID0ge1xuICAgIHJlc29sdXRpb25TY2FsZTogTkFQQVJJX0RFRkFVTFRfREVDSU1BVEUsXG4gICAgbmF2aWdhdG9yVmlzaWJsZTogdHJ1ZSxcbiAgICBpbWFnZVNtb290aGluZzogZmFsc2UsXG4gICAgYXhlc1Zpc2libGU6IHRydWUsXG4gICAgc3VyZmFjZVdpcmVmcmFtZTogZmFsc2UsXG4gICAgdm9sdW1lWlNjYWxlOiAxLFxuICB9O1xuICAvKipcbiAgICogRnJhbWUgbG9hZGluZyAodm9sdW1lIGFzc2VtYmx5LCBzdXJmYWNlIHByZWxvYWQpOiBhYm9ydGVkIGJ5IHtAbGluayByZXNldH0gQU5EIGJ5XG4gICAqIHtAbGluayBjYW5jZWxMb2FkaW5nfSwgc28gYSBDYW5jZWwgYWN0dWFsbHkgc3RvcHMgZmV0Y2hpbmcgZnJhbWVzIGluc3RlYWQgb2YgcnVubmluZyB0b1xuICAgKiBjb21wbGV0aW9uIGluIHRoZSBiYWNrZ3JvdW5kLCB3aGlsZSB0aGUgc2NlbmUgaXRzZWxmIHN0YXlzIG1vdW50ZWQuIChMYXRlc3Qtd2lucyBXSVRISU4gYVxuICAgKiBzY2VuZSDigJQgYSBzY3J1YiwgYSBjb2xvdXIgcmVidWlsZCwgYSBob3Zlci1zb3VyY2UgZmV0Y2gg4oCUIGlzIGVhY2ggc2NlbmUncyBvd24gYnVzaW5lc3MuKVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkaW5nID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAvKiogVGhlIGltYWdlJ3MgZnVsbC1yZXNvbHV0aW9uIHNpemUgYXMgdGhlIGxhc3Qgc2NlbmUgZHJldyBpdCAoaXQgb3V0bGl2ZXMgdGhlIHNjZW5lKS4gKi9cbiAgcHJpdmF0ZSBpbWFnZVcgPSAwO1xuICBwcml2YXRlIGltYWdlSCA9IDA7XG4gIC8qKiBUaGUgcmVnaW9uIG92ZXJsYXksIHRoZSBwaXhlbCB0b29scyBhbmQgdGhlIGRpc3BsYXllZC1waXhlbCByZWFkYmFjayB0aGV5IHJlYWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbHM6IE5hcGFyaVRvb2xCcmlkZ2U7XG4gIC8qKiBUaGlzIGJhY2tlbmQncyBvd24gd2FuZCwgYnJ1c2gsIGVyYXNlciwgem9vbS10by1ib3ggYW5kIFNBTSBwb2ludCB0b29scy4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbnZhc1Rvb2xzOiBDYW52YXNUb29sTWFuYWdlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tMb2FkaW5nUHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dG9zY2FsZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHVua25vd24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gbmV3IFN1YmplY3Q8e1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFRJTEVfQUNDRVNTX1BPUlQpIHRpbGVzOiBUaWxlQWNjZXNzUG9ydCxcbiAgICBzdG9yZTogVmlzdWFsaXplclN0b3JlLFxuICAgIHJlZ2lvblN0b3JlOiBSZWdpb25TdG9yZSxcbiAgICB3YW5kU2VydmljZTogV2FuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzYW1Ub29sOiBTYW1Ub29sU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbVBvaW50VG9vbDogU2FtUG9pbnRUb29sU2VydmljZSxcbiAgICBjZWxsU2VnbWVudFRvb2w6IENlbGxTZWdtZW50VG9vbFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChDRUxMX1NFR01FTlRFUikgY2VsbFNlZ21lbnRlcjogSUNlbGxTZWdtZW50ZXIgfCBudWxsLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2ltcGxlU3RhY2s6IFNpbXBsZVNsaWNlQWNjZXNzU2VydmljZSxcbiAgICBASW5qZWN0KFZJWl9DT05GSUcpIGNvbmZpZzogVml6Q29uZmlnLFxuICAgIC8vIE9wdGlvbmFsOiBvbmx5IGEgaG9zdCB0aGF0IHNlcnZlcyBzcGF0aWFsLW9taWNzIGRhdGEgcHJvdmlkZXMgaXQsIGFuZFxuICAgIC8vIHdpdGhvdXQgaXQgdGhlIFNQQVRJQUxfT01JQ1MgcGxvdCB0eXBlIGlzIG5ldmVyIG9mZmVyZWQgYW55d2F5LlxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoU1BBVElBTF9EQVRBX1BPUlQpIHNwYXRpYWxEYXRhOiBTcGF0aWFsRGF0YVBvcnQgfCBudWxsID0gbnVsbCxcbiAgICBzZWxlY3Rpb25TdG9yZTogU3BhdGlhbFNlbGVjdGlvblN0b3JlIHwgbnVsbCA9IG51bGwsXG4gICkge1xuICAgIHN1cGVyKHJlZ2lvblN0b3JlLCBzdG9yZSk7XG4gICAgdGhpcy50aWxlQ2xpZW50ID0gbmV3IE5hcGFyaVRpbGVDbGllbnQodGlsZXMsIHNpbXBsZVN0YWNrLCBjb25maWcuc2xpZGVDcm9wU2VydmVyKTtcbiAgICB0aGlzLnRpbGVDbGllbnQuc3RhcnRTY2VuZSh0aGlzLmxpZmV0aW1lLnNpZ25hbCk7XG4gICAgdGhpcy5kaXNwbGF5ID0gbmV3IE5hcGFyaURpc3BsYXlTdGF0ZShzdG9yZSk7XG4gICAgdGhpcy5zcGF0aWFsID0gbmV3IFNwYXRpYWxTZXNzaW9uKHNwYXRpYWxEYXRhLCBzZWxlY3Rpb25TdG9yZSwge1xuICAgICAgY29udGludW91c0x1dDogKHZpZXcpID0+IHRoaXMuZGlzcGxheS5zcGF0aWFsTHV0KHZpZXcpLFxuICAgICAgLy8gVGhlc2UgZm9sbG93IHRoZSBjYW1lcmEsIHdoaWNoIG1vdmVzIG91dHNpZGUgdGhlIHpvbmU7IHRoZSBwYW5lbCByZWFkcyB0aGVtLlxuICAgICAgZXN0aW1hdGVDaGFuZ2VkOiAoZSkgPT4gdGhpcy5pblpvbmUoKCkgPT4gdGhpcy50cmFuc2NyaXB0RXN0aW1hdGUkLm5leHQoZSkpLFxuICAgICAgZ2VuZUNvdW50c0NoYW5nZWQ6IChjKSA9PiB0aGlzLmluWm9uZSgoKSA9PiB0aGlzLmdlbmVDb3VudHNJblZpZXckLm5leHQoYykpLFxuICAgICAgZGVuc2l0eUNoYW5nZWQ6IChkKSA9PiB0aGlzLmluWm9uZSgoKSA9PiB0aGlzLmRlbnNpdHlTdGF0cyQubmV4dChkKSksXG4gICAgICBnZW5lRmlsdGVyRmFpbGVkOiAoZmFpbGVkKSA9PiB0aGlzLmluWm9uZSgoKSA9PiB0aGlzLmdlbmVGaWx0ZXJGYWlsZWQkLm5leHQoZmFpbGVkKSksXG4gICAgICBsb2FkaW5nQ2hhbmdlZDogKGxheWVycykgPT4gdGhpcy5iYWRnZS5zZXRUaWxlTGF5ZXJzKGxheWVycyksXG4gICAgfSk7XG4gICAgdGhpcy50b29scyA9IG5ldyBOYXBhcmlUb29sQnJpZGdlKFxuICAgICAge1xuICAgICAgICB2aWV3ZXI6ICgpID0+IHRoaXMudmlld2VyLFxuICAgICAgICBob3N0OiAoKSA9PiB0aGlzLmhvc3QsXG4gICAgICAgIGNhbnZhczogKCkgPT4gdGhpcy5jYW52YXMsXG4gICAgICAgIGltYWdlU2l6ZTogKCkgPT4gdGhpcy5nZXRUcnVlSW1hZ2VTaXplKCksXG4gICAgICAgIGZyYW1lSW5kZXg6ICgpID0+IHRoaXMubG9hZGVkPy56ID8/IDAsXG4gICAgICAgIGZpbGVOYW1lOiAoKSA9PiB0aGlzLmxvYWRlZD8uZmlsZW5hbWUsXG4gICAgICAgIC8vIFJlYWNoZWQgZnJvbSB0aW1lcnMgYXJtZWQgb3V0c2lkZSB0aGUgem9uZTsgc3Vic2NyaWJlcnMgYXJlIFVJLlxuICAgICAgICB2aWV3cG9ydENoYW5nZWQ6IChyZWN0KSA9PiB0aGlzLmluWm9uZSgoKSA9PiB0aGlzLnZpZXdwb3J0Q2hhbmdlJC5uZXh0KHJlY3QpKSxcbiAgICAgICAgb3V0c2lkZVpvbmU6IChmbikgPT4gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZuKSxcbiAgICAgICAgaW5ab25lOiAoZm4pID0+IHRoaXMuaW5ab25lKGZuKSxcbiAgICAgIH0sXG4gICAgICB7IHJlZ2lvblN0b3JlLCB3YW5kU2VydmljZSwgc2FtVG9vbCwgc2FtUG9pbnRUb29sLCBjZWxsU2VnbWVudFRvb2wsIGNlbGxTZWdtZW50ZXIgfSxcbiAgICApO1xuICAgIHRoaXMuY2FudmFzVG9vbHMgPSB0aGlzLnRvb2xzLmNhbnZhc1Rvb2xzO1xuICB9XG5cbiAgLyoqIFJ1biBgZm5gIGluc2lkZSB0aGUgQW5ndWxhciB6b25lOiBmb3Igb3V0cHV0IChzdWJqZWN0cyB0aGUgVUkgcmVuZGVycywgc3RvcmUgd3JpdGVzKVxuICAgKiAgcHJvZHVjZWQgYnkgd29yayB0aGF0IHJ1bnMgb3V0c2lkZSBpdC4gKi9cbiAgcHJpdmF0ZSBpblpvbmU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICByZXR1cm4gTmdab25lLmlzSW5Bbmd1bGFyWm9uZSgpID8gZm4oKSA6IHRoaXMuem9uZS5ydW4oZm4pO1xuICB9XG5cbiAgLyoqIFdoYXQgYSBzY2VuZSBpcyBidWlsdCBmcm9tIChzZWUge0BsaW5rIFNjZW5lQ29udGV4dH0pLiAqL1xuICBwcml2YXRlIHNjZW5lQ29udGV4dCh2aWV3ZXI6IFZpZXdlciwgaG9zdDogSFRNTEVsZW1lbnQsIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpOiBTY2VuZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICB2aWV3ZXIsXG4gICAgICBob3N0LFxuICAgICAgY2FudmFzLFxuICAgICAgc2lnbmFsOiB0aGlzLmxpZmV0aW1lLnNpZ25hbCxcbiAgICAgIGxvYWRpbmc6ICgpID0+IHRoaXMubG9hZGluZy5zaWduYWwsXG4gICAgICBpbmZvOiAoKSA9PiB0aGlzLmxvYWRlZD8uaW1hZ2VJbmZvLFxuICAgICAgejogKCkgPT4gdGhpcy5sb2FkZWQ/LnogPz8gMCxcbiAgICAgIHRpbGVzOiB0aGlzLnRpbGVDbGllbnQsXG4gICAgICBkaXNwbGF5OiB0aGlzLmRpc3BsYXksXG4gICAgICBiYWRnZTogdGhpcy5iYWRnZSxcbiAgICAgIHRvb2xzOiB0aGlzLnRvb2xzLFxuICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICByZWdpb25TdG9yZTogdGhpcy5yZWdpb25TdG9yZSxcbiAgICAgIHNldHRpbmdzOiB0aGlzLnNldHRpbmdzLFxuICAgICAgc3RhY2s6IHtcbiAgICAgICAgbG9hZGluZzogKG9uKSA9PiB0aGlzLnN0YWNrTG9hZGluZyQubmV4dChvbiksXG4gICAgICAgIHByb2dyZXNzOiAocGVyY2VudCkgPT4gdGhpcy5zdGFja0xvYWRpbmdQcm9ncmVzcyQubmV4dChwZXJjZW50KSxcbiAgICAgIH0sXG4gICAgICBpbWFnZVNpemU6ICgpID0+ICh7IHdpZHRoOiB0aGlzLmltYWdlVywgaGVpZ2h0OiB0aGlzLmltYWdlSCB9KSxcbiAgICAgIHNldEltYWdlU2l6ZTogKHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgICAgdGhpcy5pbWFnZVcgPSB3aWR0aDtcbiAgICAgICAgdGhpcy5pbWFnZUggPSBoZWlnaHQ7XG4gICAgICB9LFxuICAgICAgZml0Q2FtZXJhU29vbjogKCkgPT4gdGhpcy5maXRDYW1lcmFTb29uKCksXG4gICAgICBvdXRzaWRlWm9uZTogKGZuKSA9PiB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZm4pLFxuICAgICAgaW5ab25lOiAoZm4pID0+IHRoaXMuaW5ab25lKGZuKSxcbiAgICAgIHJlZ2lvbk1lc2hQaWNrZWQ6IChrZXksIGFkZGl0aXZlKSA9PiB0aGlzLnJlZ2lvbk1lc2hQaWNrJC5uZXh0KHsga2V5LCBhZGRpdGl2ZSB9KSxcbiAgICAgIHNsaWNlUGxhbmVNb3ZlZDogKGF4aXMsIHZhbHVlKSA9PiB0aGlzLnNsaWNlUGxhbmVNb3ZlJC5uZXh0KHsgYXhpcywgdmFsdWUgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJRGF0YVJlbmRlcmVyOiBsb2FkIC8gcmVuZGVyIC8gdmlld3BvcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKlxuICAgKiBSZWNvcmQgdGhlIGltYWdlIHRvIGRyYXcuIE5vIG5ldHdvcmsgd29yayBoYXBwZW5zIGhlcmUg4oCUIHRoZSBkZXNjcmlwdG9yIHBvbGwgYW5kIHRoZSB0aWxlLFxuICAgKiB2b2x1bWUgYW5kIHNwYXRpYWwgZmV0Y2hlcyBhbGwgcnVuIGluIHtAbGluayBwbG90fSB1bmRlciBpdHMgc2NlbmUgc2lnbmFsLCB3aGljaCBhIG5ld2VyIHBsb3QsXG4gICAqIHtAbGluayByZXNldH0gb3IgYGNhbmNlbExvYWRpbmcoKWAgYWJvcnRzIOKAlCBzbyBgc2lnbmFsYCBpcyBvbmx5IGNoZWNrZWQ6IGFuIGFscmVhZHktYWJvcnRlZFxuICAgKiBsb2FkIHJlamVjdHMgd2l0aCBhbiBgQWJvcnRFcnJvcmAgYW5kIGxlYXZlcyB0aGUgcmVjb3JkZWQgaW1hZ2UgYWxvbmUuXG4gICAqL1xuICBhc3luYyBsb2FkKGltYWdlSW5mbzogSUltYWdlSW5mbywgekluZGV4OiBudW1iZXIsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxOYXBhcmlMb2FkZWQ+IHtcbiAgICB0aHJvd0lmQWJvcnRlZChzaWduYWwpO1xuICAgIC8vIEtlZXBzIFNpbXBsZVNsaWNlQWNjZXNzU2VydmljZSdzIGJsb2IgY2FjaGUgaW4gc3luYyBldmVuIHdoZW4gdGhlIHVzZXJcbiAgICAvLyBzd2l0Y2hlcyBiYWNrZW5kcyAoZS5nLiBPU0QgSW1hZ2Ug4oaSIG5hcGFyaSBWb2x1bWUpIG9uIHRoZSBzYW1lIGZpbGUg4oCUXG4gICAgLy8gd2hpY2hldmVyIGJhY2tlbmQgbG9hZHMgYSBnZW51aW5lbHkgZGlmZmVyZW50IGZpbGUgZmlyc3QgZXZpY3RzIGl0LlxuICAgIHRoaXMuc2ltcGxlU3RhY2subm90ZUFjdGl2ZUZpbGUoaW1hZ2VJbmZvLmZpbGVOYW1lKTtcbiAgICB0aGlzLmxvYWRlZCA9IHsgaW1hZ2VJbmZvLCB6OiB6SW5kZXgsIGZpbGVuYW1lOiBpbWFnZUluZm8uZmlsZU5hbWUgfTtcbiAgICByZXR1cm4gdGhpcy5sb2FkZWQ7XG4gIH1cblxuICBhc3luYyBwbG90KFxuICAgIHBsb3REaXY6IHN0cmluZyxcbiAgICBpbWFnZUxvYWRlZDogdW5rbm93bixcbiAgICBpbWFnZUluZm86IElJbWFnZUluZm8sXG4gICAgc2NyZWVuSGVpZ2h0OiBudW1iZXIsXG4gICAgcGxvdFR5cGU6IFBsb3RUeXBlLFxuICAgIGluUGxhY2U/OiBib29sZWFuLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGxvdERpdik7XG4gICAgaWYgKCFob3N0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbbmFwYXJpLWpzXSBwbG90IHRhcmdldCAjJHtwbG90RGl2fSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIC8vIEEgbmV3IGltYWdlOiBhIHN0cm9rZSBvciBTQU0gcHJvbXB0IGluIHByb2dyZXNzIGJlbG9uZ2VkIHRvIHRoZSBvbGQgb25lLlxuICAgIGlmICghaW5QbGFjZSkgdGhpcy5jYW52YXNUb29scy5yZXNldEFsbCgpO1xuICAgIC8vIFRoaXMgcGxvdCdzIHNjZW5lLiBBIG5ld2VyIHBsb3QgcmVzZXRzIGludG8gdGhlIG5leHQgb25lIHdoaWxlIHRoaXMgb25lIHN0aWxsIGF3YWl0cywgYW5kXG4gICAgLy8gYSBzdXBlcnNlZGVkIHBsb3QgbXVzdCBub3QgZ28gb24gdG8gZHJhdyAob3IgY291bnQgaW1hZ2UgdGlsZXMpIGludG8gdGhlIG5ld2VyIHNjZW5lLlxuICAgIGNvbnN0IHNjZW5lID0gdGhpcy5saWZldGltZS5zaWduYWw7XG4gICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICB0aGlzLmJhZGdlLmF0dGFjaChob3N0KTtcblxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICBjYW52YXMuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IHNjcmVlbkhlaWdodCA/IGAke3NjcmVlbkhlaWdodH1weGAgOiAnMTAwJSc7XG4gICAgaG9zdC5hcHBlbmRDaGlsZChjYW52YXMpO1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgY29uc3QgaW5mbyA9IChpbWFnZUxvYWRlZCBhcyBOYXBhcmlMb2FkZWQpPy5pbWFnZUluZm8gPz8gaW1hZ2VJbmZvO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEJ1aWx0IE9VVFNJREUgdGhlIEFuZ3VsYXIgem9uZSwgc28gaXRzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBsb29wLCBpdHMgY2FudmFzIHBvaW50ZXIgL1xuICAgICAgLy8gd2hlZWwgbGlzdGVuZXJzIGFuZCBpdHMgUmVzaXplT2JzZXJ2ZXIgZG8gbm90IGVhY2ggdHJpZ2dlciBhcHAtd2lkZSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAgLy8gV2hhdGV2ZXIgdGhleSBjYXVzZSB0aGF0IHRoZSBVSSBzaG93cyByZS1lbnRlcnMgdGhlIHpvbmUgKHNlZSBpblpvbmUpLlxuICAgICAgY29uc3Qgdmlld2VyID0gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBWaWV3ZXIoe1xuICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogeyByOiAwLjA3LCBnOiAwLjA3LCBiOiAwLjA5LCBhOiAxIH0sXG4gICAgICAgICAgICAvLyBTZXQgaGVyZSByYXRoZXIgdGhhbiBsZWZ0IHRvIG5hcGFyaS1qcydzIG93biBkZWZhdWx0IHNvIHRoZSBnZW50bGVyXG4gICAgICAgICAgICAvLyBzdGVwIGFwcGxpZXMgd2l0aCB0aGUgdmVyc2lvbiBjdXJyZW50bHkgaW5zdGFsbGVkLiBDaG9zZW4gdG8gbWF0Y2ggdGhlXG4gICAgICAgICAgICAvLyBPU0QgYmFja2VuZCdzIHN0ZXAgKHNlZSBPU0RfWk9PTV9QRVJfU0NST0xMKTogdGhlIHdoZWVsIHNob3VsZCBmZWVsIHRoZVxuICAgICAgICAgICAgLy8gc2FtZSBvbiBhbiBpbWFnZSB3aGljaGV2ZXIgcmVuZGVyZXIgaXMgZHJhd2luZyBpdC4gVGhlIHN0ZXAgYXBwbGllcyBwZXJcbiAgICAgICAgICAgIC8vIHNjcm9sbCBFVkVOVCwgYW5kIGEgdHJhY2twYWQgc2VuZHMgYSBidXJzdCBvZiB0aGVtIHBlciBzd2lwZSwgc28gYSBzdGVwXG4gICAgICAgICAgICAvLyB0dW5lZCB0byBhIG1vdXNlIG5vdGNoIHJ1bnMgYXdheSB1bmRlciBhIHRyYWNrcGFkLlxuICAgICAgICAgICAgd2hlZWxab29tU3BlZWQ6IE5BUEFSSV9XSEVFTF9aT09NX1NQRUVELFxuICAgICAgICAgICAgLy8gVGhlIEZJUlNUIDNEIGxheWVyIG9mIGEgc2NlbmUgZnJhbWVzIHRoZSBvcmJpdCBjYW1lcmE7IGV2ZXJ5IGxhdGVyIG9uZSBsZWF2ZXMgdGhlXG4gICAgICAgICAgICAvLyBwb3NlIGFsb25lLiBBIHNwYXRpYWwgc2NlbmUgaXMgYnVpbHQgZnJvbSBzZXZlcmFsIGxheWVycyBhbmQgcmVidWlsdCBjb25zdGFudGx5IOKAlFxuICAgICAgICAgICAgLy8gcmVjb2xvdXJpbmcgYnkgYSBjbGFzcywgcGlja2luZyBhIGdlbmUsIHN0ZXBwaW5nIGEgc2VjdGlvbiDigJQgYW5kIHdpdGggbmFwYXJpLWpzJ3NcbiAgICAgICAgICAgIC8vIHByZXZpb3VzIHVuY29uZGl0aW9uYWwgZnJhbWluZyBlYWNoIG9mIHRob3NlIHRocmV3IGF3YXkgYW4gb3JiaXQgdGhlIHVzZXIgaGFkIHNldC5cbiAgICAgICAgICAgIC8vIFRoZSBwb3NlIGl0IHNuYXBwZWQgYmFjayB0byBkZXBlbmRlZCBvbiBXSElDSCBsYXllciB3YXMgcmVidWlsdCwgc28gaXNvbGF0aW5nIG9uZVxuICAgICAgICAgICAgLy8gc2VjdGlvbiB6b29tZWQgdG8gdGhhdCBzZWN0aW9uJ3MgYm91bmRzLiBgcmVzZXRGaXQzRCgpYCBvbiBhIGRhdGFzZXQgY2hhbmdlIGlzIHdoYXRcbiAgICAgICAgICAgIC8vIGxldHMgdGhlIG5leHQgc2NlbmUgZnJhbWUgaXRzZWxmLlxuICAgICAgICAgICAgZml0M2Q6ICdvbmNlJyxcbiAgICAgICAgICAgIC8vIEluIHRoZSBzcGF0aWFsIG1vZGVzIGEgcGxhaW4gY2xpY2sgU0VMRUNUUyB0aGUgY2xhc3MgdW5kZXIgdGhlIGN1cnNvcixcbiAgICAgICAgICAgIC8vIHNvIG5hcGFyaSdzIE9TRC1zdHlsZSBjbGljay10by16b29tIGlzIHR1cm5lZCBvZmYgdGhlcmU6IG90aGVyd2lzZSBvbmVcbiAgICAgICAgICAgIC8vIGNsaWNrIHdvdWxkIGJvdGggc2VsZWN0IGEgY2xhc3MgYW5kIHpvb20gMnggYWJvdXQgdGhlIGN1cnNvciwgYW5kIHRoZVxuICAgICAgICAgICAgLy8gem9vbSB3b3VsZCB0aGVuIGhhbHZlIHRoZSBwaXhlbCByYWRpdXMgdGhlIG5leHQgY2xpY2sgaGl0LXRlc3RzIHdpdGguXG4gICAgICAgICAgICAvLyBab29taW5nIGlzIHN0aWxsIG9uIHRoZSB3aGVlbCwgdGhlIHpvb20gYnV0dG9ucyBhbmQgdGhlIHpvb20tYm94IHRvb2wuXG4gICAgICAgICAgICAuLi4oaXNTcGF0aWFsT21pY3MocGxvdFR5cGUpIHx8IGlzU3BhdGlhbE9taWNzM2QocGxvdFR5cGUpID8geyBjbGlja1pvb21GYWN0b3I6IDAgfSA6IHt9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICB0aGlzLnZpZXdlciA9IHZpZXdlcjtcbiAgICAgIGF3YWl0IHZpZXdlci5yZWFkeTtcbiAgICAgIGlmIChzY2VuZS5hYm9ydGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE5vIGxvYWRlZCBpbWFnZTogYW4gaW1hZ2UtbGVzcyBzcGF0aWFsIGRhdGFzZXQgb3BlbmVkIGJlZm9yZSBhbnkgaW1hZ2UgKHRoZSB2aXN1YWxpemVyJ3NcbiAgICAgIC8vIHBsb3RTcGF0aWFsV2l0aG91dEltYWdlKSDigJQgdGhlIG9ic2VydmF0aW9ucyBhbG9uZS5cbiAgICAgIHRoaXMuc2NlbmUgPSB0aGlzLmNyZWF0ZVNjZW5lKHBsb3RUeXBlLCB0aGlzLnNjZW5lQ29udGV4dCh2aWV3ZXIsIGhvc3QsIGNhbnZhcyksIGluZm8sIGltYWdlTG9hZGVkID09IG51bGwpO1xuICAgICAgLy8gQW5vdGhlciBpbWFnZSdzIHN1cmZhY2VzIHdvdWxkIGxhbmQgaW4gdGhpcyB2b2x1bWUncyBmcmFtZSBhdCB0aGUgd3Jvbmcgc2l6ZTogZHJvcCB0aGVtLlxuICAgICAgaWYgKGluZm8/LmZpbGVOYW1lICE9PSB0aGlzLnJlZ2lvbk1lc2hlc0ltYWdlKSB0aGlzLnJlZ2lvbk1lc2hlcyA9IFtdO1xuICAgICAgdGhpcy5zY2VuZS5zZXRSZWdpb25NZXNoZXM/Lih0aGlzLnJlZ2lvbk1lc2hlcyk7XG4gICAgICB0aGlzLnNjZW5lLnNldFJlZ2lvbkhpZ2hsaWdodD8uKHRoaXMucmVnaW9uSGlnaGxpZ2h0KTtcbiAgICAgIHRoaXMuc2NlbmUuc2V0UmVnaW9uSGlkZGVuPy4odGhpcy5yZWdpb25IaWRkZW4pO1xuICAgICAgdGhpcy5zY2VuZS5zZXRSZWdpb25zVGhyb3VnaFZvbHVtZT8uKHRoaXMucmVnaW9uc1Rocm91Z2hWb2x1bWUpO1xuICAgICAgdGhpcy5zY2VuZS5zZXRTbGljZVBsYW5lcz8uKHRoaXMuc2xpY2VQbGFuZXMpO1xuICAgICAgYXdhaXQgdGhpcy5zY2VuZS5tb3VudCgpO1xuICAgICAgdGhpcy50b29scy5zY2hlZHVsZVJlYWRiYWNrKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tuYXBhcmktanNdIHBsb3QgZmFpbGVkOicsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBzY2VuZSBhIHBsb3QgdHlwZSBtb3VudHMuICovXG4gIHByaXZhdGUgY3JlYXRlU2NlbmUoXG4gICAgcGxvdFR5cGU6IFBsb3RUeXBlLFxuICAgIGN0eDogU2NlbmVDb250ZXh0LFxuICAgIGluZm86IElJbWFnZUluZm8gfCB1bmRlZmluZWQsXG4gICAgbm9JbWFnZTogYm9vbGVhbixcbiAgKTogTmFwYXJpU2NlbmUge1xuICAgIGlmIChpc1NwYXRpYWxPbWljczNkKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBTcGF0aWFsM2RTY2VuZShjdHgsIHRoaXMuc3BhdGlhbCwgaW5mbyk7XG4gICAgaWYgKGlzU3BhdGlhbE9taWNzKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBTcGF0aWFsMmRTY2VuZShjdHgsIHRoaXMuc3BhdGlhbCwgbm9JbWFnZSk7XG4gICAgaWYgKGlzTmFwYXJpU2NhdHRlcihwbG90VHlwZSkpIHJldHVybiBuZXcgU2NhdHRlclJlZ2lvbnNTY2VuZShjdHgpO1xuICAgIGlmIChpc05hcGFyaVNjYXR0ZXIzZChwbG90VHlwZSkpIHJldHVybiBuZXcgU2NhdHRlcjNkU2NlbmUoY3R4LCBpbmZvKTtcbiAgICBpZiAoaXNOYXBhcmlTdXJmYWNlKHBsb3RUeXBlKSkgcmV0dXJuIG5ldyBTdXJmYWNlU2NlbmUoY3R4KTtcbiAgICBpZiAoaXNOYXBhcmkzZChwbG90VHlwZSkpIHJldHVybiBuZXcgVm9sdW1lU2NlbmUoY3R4LCBpbmZvLCBpc05hcGFyaUlzb3N1cmZhY2UocGxvdFR5cGUpID8gJ2lzbycgOiAnbWlwJyk7XG4gICAgcmV0dXJuIG5ldyBJbWFnZTJkU2NlbmUoY3R4KTtcbiAgfVxuXG4gIC8qKiBTaG93L2hpZGUgdGhlIG92ZXJ2aWV3IG5hdmlnYXRvciAoc2FtZSBzZXR0aW5nIGFzIE9TRCdzKS4gKi9cbiAgc2V0TmF2aWdhdG9yVmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5ncy5uYXZpZ2F0b3JWaXNpYmxlID0gdmlzaWJsZTtcbiAgICB0aGlzLnNjZW5lPy5zZXROYXZpZ2F0b3JWaXNpYmxlPy4odmlzaWJsZSk7XG4gIH1cblxuICAvKiogT2JzZXJ2YXRpb25zIHByb2plY3RlZCB0byBjYW52YXMgcGl4ZWxzIHVuZGVyIHRoZSAzRCBjYW1lcmEgKHRoZSBzcGF0aWFsIDNEIGNsb3VkKSwgaW5kZXhlZFxuICAgKiAgYnkgb2JzZXJ2YXRpb24gd2l0aCBOYU4gZm9yIGFueSBub3QgZHJhd247IG51bGwgd2hlbiBubyBjbG91ZCBpcyBtb3VudGVkLiAqL1xuICBnZXRTcGF0aWFsU2NyZWVuUHJvamVjdGlvbihvYnM6IFNwYXRpYWxPYnNlcnZhdGlvbnMpOiBGbG9hdDMyQXJyYXkgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zY2VuZT8uc2NyZWVuUHJvamVjdGlvbj8uKG9icykgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKiBUaGUgaWRzIG9mIHRoZSByZWdpb25zIGRyYXduIG92ZXIgdGhlIDNEIGNsb3VkIGluIHNjcmVlbiBzcGFjZSAoaXRzIGxhc3Nvcyk7IFtdIGluIDJELiBFdmVyeVxuICAgKiAgb3RoZXIgcmVnaW9uIGluIHRoZSBzdG9yZSBpcyBpbiBpbWFnZSBzcGFjZSwgYW5kIG1lYW5zIG5vdGhpbmcgYXQgY2FudmFzIHBpeGVscy4gKi9cbiAgZ2V0U3BhdGlhbExhc3NvSWRzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy50b29scy5yZWdpb25PdmVybGF5Py5vd25SZWdpb25JZHMoKSA/PyBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZml0Q2FtZXJhU29vbigpOiB2b2lkIHtcbiAgICBjb25zdCBydW4gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy52aWV3ZXIgJiYgdGhpcy5jYW52YXMgJiYgdGhpcy5pbWFnZVcgPiAwICYmIHRoaXMuaW1hZ2VIID4gMCkge1xuICAgICAgICB0aGlzLnZpZXdlci5jYW1lcmEuZml0KFxuICAgICAgICAgIHRoaXMuaW1hZ2VXLFxuICAgICAgICAgIHRoaXMuaW1hZ2VILFxuICAgICAgICAgIHRoaXMuY2FudmFzLmNsaWVudFdpZHRoIHx8IHRoaXMuaW1hZ2VXLFxuICAgICAgICAgIHRoaXMuY2FudmFzLmNsaWVudEhlaWdodCB8fCB0aGlzLmltYWdlSCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJ1bikpO1xuICAgIGVsc2UgcnVuKCk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgUGxvdGx5LXNwZWNpZmljOyBob3N0IHJlLWRyaXZlcyBwbG90KCkgZnJvbSBpdHMgaW1hZ2Ugc3RyZWFtLiAqL1xuICByZWxvYWRBbmRQbG90KCk6IHZvaWQge1xuICAgIC8qIG5vLW9wICovXG4gIH1cblxuICAvKiogU2hvdyBgbWVzc2FnZWAgb24gdGhlIGNhbnZhcydzIGxvYWRpbmcgYmFkZ2UgdW50aWwgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGlzIGNhbGxlZC4gKi9cbiAgYmVnaW5UYXNrKG1lc3NhZ2U6IHN0cmluZyk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmJhZGdlLmJlZ2luVGFzayhtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKiBTaG93IHRoZXNlIHJlZ2lvbiByZWNvbnN0cnVjdGlvbnMgb2YgYGltYWdlYCBpbiB0aGUgdm9sdW1lIHZpZXcgKGtlcHQgZm9yIGl0cyBuZXh0IHZvbHVtZSBwbG90KS4gKi9cbiAgc2V0UmVnaW9uTWVzaGVzKG1lc2hlczogcmVhZG9ubHkgUmVnaW9uTWVzaDNEW10sIGltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lvbk1lc2hlcyA9IG1lc2hlcztcbiAgICB0aGlzLnJlZ2lvbk1lc2hlc0ltYWdlID0gaW1hZ2U7XG4gICAgdGhpcy5zY2VuZT8uc2V0UmVnaW9uTWVzaGVzPy4obWVzaGVzKTtcbiAgfVxuXG4gIC8qKiBIaWdobGlnaHQgdGhlIHJlY29uc3RydWN0aW9ucyBvZiB0aGVzZSBrZXlzIChub25lOiBhbGwgYXMgdXN1YWwpLiAqL1xuICBzZXRSZWdpb25IaWdobGlnaHQoa2V5czogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lvbkhpZ2hsaWdodCA9IGtleXM7XG4gICAgdGhpcy5zY2VuZT8uc2V0UmVnaW9uSGlnaGxpZ2h0Py4oa2V5cyk7XG4gIH1cblxuICAvKiogSGlkZSB0aGUgcmVjb25zdHJ1Y3Rpb25zIG9mIHRoZXNlIGtleXMgKGtlcHQgZm9yIHRoZSBuZXh0IHZvbHVtZSBwbG90KS4gKi9cbiAgc2V0UmVnaW9uSGlkZGVuKGtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpb25IaWRkZW4gPSBrZXlzO1xuICAgIHRoaXMuc2NlbmU/LnNldFJlZ2lvbkhpZGRlbj8uKGtleXMpO1xuICB9XG5cbiAgLyoqIERyYXcgdGhlIHJlY29uc3RydWN0aW9ucyB0aHJvdWdoIHRoZSB2b2x1bWUgcmF0aGVyIHRoYW4gaGlkZGVuIGJlaGluZCBpdCAoa2VwdCBhY3Jvc3MgcGxvdHMpLiAqL1xuICBzZXRSZWdpb25zVGhyb3VnaFZvbHVtZSh0aHJvdWdoOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpb25zVGhyb3VnaFZvbHVtZSA9IHRocm91Z2g7XG4gICAgdGhpcy5zY2VuZT8uc2V0UmVnaW9uc1Rocm91Z2hWb2x1bWU/Lih0aHJvdWdoKTtcbiAgfVxuICBwcml2YXRlIHJlZ2lvbnNUaHJvdWdoVm9sdW1lID0gZmFsc2U7XG5cbiAgLyoqIFNob3cgdGhlIHBsYW5lcyBvZiB0aGUgc2VjdGlvbnMgYmVzaWRlIGEgdm9sdW1lIHZpZXcgKG51bGw6IGhpZGUgb25lKTsga2VwdCBhY3Jvc3MgcGxvdHMuICovXG4gIHNldFNsaWNlUGxhbmVzKHBsYW5lczogU2xpY2VQbGFuZXMpOiB2b2lkIHtcbiAgICB0aGlzLnNsaWNlUGxhbmVzID0gcGxhbmVzO1xuICAgIHRoaXMuc2NlbmU/LnNldFNsaWNlUGxhbmVzPy4ocGxhbmVzKTtcbiAgfVxuXG4gIC8qKiBBIHNlY3Rpb24ncyBwbGFuZSBkcmFnZ2VkIGluIHRoZSB2b2x1bWUgdmlldywgdG8gYHZhbHVlYCBhbG9uZyBpdHMgYXhpcyAoaW1hZ2UgcHgsIG9yIGEgc2xpY2UpLiAqL1xuICBnZXRTbGljZVBsYW5lTW92ZSQoKTogT2JzZXJ2YWJsZTx7IGF4aXM6IFBsYW5lQXhpczsgdmFsdWU6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2VQbGFuZU1vdmUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqIFRoZSB2b2x1bWUgb24gc2NyZWVuLCBhcyBhc3NlbWJsZWQgKHNlZSBWb2x1bWVTY2VuZS52b2x1bWVWb3hlbHMpOyBudWxsIG91dHNpZGUgYSB2b2x1bWUgdmlldy4gKi9cbiAgdm9sdW1lVm94ZWxzKCk6IFZvbHVtZVZveGVsc09uU2NyZWVuIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2NlbmU/LnZvbHVtZVZveGVscz8uKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKiBBIHJlY29uc3RydWN0aW9uIGNsaWNrZWQgd2l0aCB0aGUgc2VsZWN0aW9uIHRvb2wgKGl0cyBrZXkpLCBvciB0aGUgdm9sdW1lIGJlc2lkZSB0aGVtIChudWxsKS4gKi9cbiAgZ2V0UmVnaW9uTWVzaFBpY2skKCk6IE9ic2VydmFibGU8eyBrZXk6IHN0cmluZyB8IG51bGw7IGFkZGl0aXZlOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm4gdGhpcy5yZWdpb25NZXNoUGljayQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKiogSW1hZ2UgcHggcGVyIHZveGVsIG9mIHRoZSB2b2x1bWUgb24gc2NyZWVuLCBpbi1wbGFuZTsgbnVsbCBvdXRzaWRlIGEgdm9sdW1lIHZpZXcuICovXG4gIHJlZ2lvblZveGVsU3RlcCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zY2VuZT8udm94ZWxTdGVwPy4oKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZCB0aGUgbW91bnRlZCBzY2VuZTogYWJvcnQgaXRzIGxpZmV0aW1lIChpdHMgZGVzY3JpcHRvciBwb2xsLCB0aWxlIGNvdW50cywgZnJhbWUgbG9hZGluZyBhbmRcbiAgICogYXdhaXRzKSBhbmQgZGlzcG9zZSBpdCDigJQgaXRzIGxheWVycywga2V5cywgc3Vic2NyaXB0aW9ucyBhbmQgbGlzdGVuZXJzIGdvIHdpdGggaXQsIHNvIHRoZSBuZXh0XG4gICAqIHBsb3QgY2FuIG5ldmVyIGluaGVyaXQgYW4gXCJhbHJlYWR5IGJ1aWx0XCIga2V5IChOQVBBUkktU1ZDLTEpIOKAlCB0aGVuIHRlYXIgdGhlIHZpZXdlciBkb3duLlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nLmFib3J0KCk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMubGlmZXRpbWUuYWJvcnQoKTtcbiAgICB0aGlzLmxpZmV0aW1lID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuc2NlbmU/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLnNjZW5lID0gbnVsbDtcbiAgICB0aGlzLmJhZGdlLnJlc2V0KCk7XG4gICAgdGhpcy50b29scy50ZWFyZG93bigpO1xuICAgIHRoaXMudGlsZUNsaWVudC5zdGFydFNjZW5lKHRoaXMubGlmZXRpbWUuc2lnbmFsKTtcbiAgICB0aGlzLnZpZXdlcj8uZGlzcG9zZSgpO1xuICAgIHRoaXMudmlld2VyID0gbnVsbDtcbiAgICBpZiAodGhpcy5jYW52YXMgJiYgdGhpcy5ob3N0Py5jb250YWlucyh0aGlzLmNhbnZhcykpIHRoaXMuaG9zdC5yZW1vdmVDaGlsZCh0aGlzLmNhbnZhcyk7XG4gICAgdGhpcy5jYW52YXMgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwbG90IGFyZWEgY2hhbmdlZCBzaXplICh0aGUgc2xpY2UgZWRpdG9yIHNwbGl0IGl0LCBhIGRpdmlkZXIgbW92ZWQpOiBmaXQgdGhlIGNhbnZhcywgd2hvc2VcbiAgICogaGVpZ2h0IHdhcyBmaXhlZCBhdCBwbG90IHRpbWUsIHRvIGl0IGFnYWluLlxuICAgKi9cbiAgcmVsYXlvdXQoX3RydWVJbWFnZVNpemU/OiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHsgY2FudmFzLCBob3N0IH0gPSB0aGlzO1xuICAgIGlmIChjYW52YXMgJiYgaG9zdCkge1xuICAgICAgLy8gTGV0IHRoZSBob3N0IHRha2UgaXRzIGhlaWdodCBmcm9tIHRoZSBsYXlvdXQsIG5vdCBmcm9tIHRoZSBjYW52YXMgaW5zaWRlIGl0LlxuICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9ICcwcHgnO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gaG9zdC5jbGllbnRIZWlnaHQ7XG4gICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ID4gMCA/IGAke2hlaWdodH1weGAgOiAnMTAwJSc7XG4gICAgfVxuICAgIHRoaXMudmlld2VyPy5yZXF1ZXN0UmVuZGVyKCk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgUGxvdGx5LXNwZWNpZmljIGF4aXMgcmVzZXQuICovXG4gIHJlc2V0QXhlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZpdENhbWVyYVNvb24oKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbG90bHktc3BlY2lmaWMgYXV0b3NjYWxlLiAqL1xuICBhdXRvc2NhbGUoKTogdm9pZCB7XG4gICAgdGhpcy5maXRDYW1lcmFTb29uKCk7XG4gICAgdGhpcy5hdXRvc2NhbGVFdmVudCQubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgem9vbUluKCk6IHZvaWQge1xuICAgIHRoaXMuem9vbUJ5KFpPT01fQlVUVE9OX1NURVApO1xuICB9XG5cbiAgem9vbU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLnpvb21CeSgxIC8gWk9PTV9CVVRUT05fU1RFUCk7XG4gIH1cblxuICAvKiogWm9vbSBieSBgZmFjdG9yYCAoPiAxID0gaW4pIG9uIHdoaWNoZXZlciBjYW1lcmEgaXMgbGl2ZTogdGhlIDJEIGNhbWVyYSdzIHpvb20sIG9yIOKAlCBpbiBhIDNEXG4gICAqICBzY2VuZSwgd2hlcmUgdGhhdCB3b3VsZCBjaGFuZ2Ugbm90aGluZyB2aXNpYmxlIOKAlCB0aGUgb3JiaXQgY2FtZXJhJ3MgZGlzdGFuY2UuICovXG4gIHByaXZhdGUgem9vbUJ5KGZhY3RvcjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdiA9IHRoaXMudmlld2VyO1xuICAgIGlmICghdikgcmV0dXJuO1xuICAgIGlmICh2LmRpbXMubmRpc3BsYXkgPT09IDMpXG4gICAgICB2LmNhbWVyYTNkLnpvb21CeSgxIC8gZmFjdG9yKTsgLy8gem9vbUJ5IHNjYWxlcyB0aGUgZGlzdGFuY2VcbiAgICBlbHNlIHYuY2FtZXJhLnpvb20gPSB2LmNhbWVyYS56b29tICogZmFjdG9yO1xuICB9XG5cbiAgc2V0RHJhZ01vZGUoX21vZGU6IHN0cmluZyB8IGZhbHNlKTogdm9pZCB7XG4gICAgLy8gTm8tb3A6IHBhbiBhbmQgem9vbSBhcmUgYWx3YXlzIHRoZSBuYXBhcmkgY2FtZXJhJ3MgZGVmYXVsdCBnZXN0dXJlcywgYW5kIHBhbi96b29tIGdhdGluZyBmb3JcbiAgICAvLyBkcmF3aW5nIGlzIG93bmVkIGJ5IHRoZSByZWdpb24gb3ZlcmxheSdzIHNldE1vZGUgKHNldENvbnRyb2xzRW5hYmxlZCkuIFRvZ2dsaW5nIGNvbnRyb2xzIGhlcmVcbiAgICAvLyB3b3VsZCBmaWdodCB0aGF0IOKAlCB0aGUgaG9zdCBjYWxscyBzZXREcmFnTW9kZShmYWxzZSkgYWxvbmdzaWRlIG92ZXJsYXkuc2V0TW9kZSg8dG9vbD4pLlxuICB9XG5cbiAgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldHRpbmdzLmltYWdlU21vb3RoaW5nID0gZW5hYmxlZDtcbiAgICAvLyBBcHBseSBsaXZlIHRvIHRoZSByZW5kZXJlZCBpbWFnZSBsYXllcnM7IGJha2VkIGludG8gdGhlIG5leHQgcmVuZGVyIHRvby5cbiAgICB0aGlzLnNjZW5lPy5zZXRJbWFnZVNtb290aGluZz8uKGVuYWJsZWQpO1xuICB9XG5cbiAgc2V0U2hvd1N0YWNrKF9zaG93c3RhY2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvKiBzdGFjayBuYXZpZ2F0ZWQgdmlhIHNldFpJbmRleCAqL1xuICB9XG5cbiAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9hZGVkKSB0aGlzLmxvYWRlZC56ID0gekluZGV4O1xuICAgIGlmICghdGhpcy52aWV3ZXIpIHJldHVybjtcbiAgICAvLyBEaXNwYXRjaCBvbiBXSEFUIElTIE1PVU5URUQsIG5vdCBvbiB3aGljaCBsYXllciBoYW5kbGUgaGFwcGVucyB0byBiZSBub24tbnVsbDogYSBzdXJmYWNlXG4gICAgLy8gc3RpbGwgcHJlbG9hZGluZyAob3Igd2hvc2UgZmlyc3QgYnVpbGQgZmFpbGVkKSBoYXMgbm8gbGF5ZXIgeWV0LCBhbmQgYSAzRCBzY2F0dGVyIG9yIGNsb3VkXG4gICAgLy8gaGFzIG5vbmUgb2YgdGhlbSDigJQgYW5kIGJvdGggdXNlZCB0byBmYWxsIHRocm91Z2ggdG8gdGhlIDJEIHJlbmRlciAoTkFQQVJJLVNWQy05KS5cbiAgICB0aGlzLnNjZW5lPy5zZXRaKHpJbmRleCk7XG4gIH1cblxuICBzZXRTdGFja0xvYWRpbmcoc3RhY2tMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdGFja0xvYWRpbmckLm5leHQoc3RhY2tMb2FkaW5nKTtcbiAgfVxuXG4gIC8qKiBDYW5jZWwgaW4tZmxpZ2h0IGZyYW1lIGxvYWRpbmc6IGFib3J0IHtAbGluayBsb2FkaW5nfSBzbyB0aGUgdm9sdW1lLWFzc2VtYmx5IC8gc3VyZmFjZVxuICAgKiAgcHJlbG9hZCB3b3JrZXJzIHN0b3AgZmV0Y2hpbmcgbW9yZSBmcmFtZXMsIGFuZCBjbGVhciB0aGUgbG9hZGluZyBmbGFnICsgcHJvZ3Jlc3MuICovXG4gIGNhbmNlbExvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nLmFib3J0KCk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuc3RhY2tMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLnN0YWNrTG9hZGluZ1Byb2dyZXNzJC5uZXh0KDApO1xuICB9XG5cbiAgaXNTdGFja0xvYWRpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tMb2FkaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldFN0YWNrTG9hZGluZ1Byb2dyZXNzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tMb2FkaW5nUHJvZ3Jlc3MkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0VHJ1ZUltYWdlU2l6ZSgpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5pbWFnZVcgPiAwICYmIHRoaXMuaW1hZ2VIID4gMCA/IHsgd2lkdGg6IHRoaXMuaW1hZ2VXLCBoZWlnaHQ6IHRoaXMuaW1hZ2VIIH0gOiBudWxsO1xuICB9XG5cbiAgZ2V0Q3VycmVudEltYWdlKCk6IFByb21pc2U8SW1hZ2UgfCBudWxsPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIGdldERpc3BsYXllZFBpeGVsRGF0YSgpOiBQaXhlbERhdGEgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50b29scy5sYXN0UGl4ZWxzO1xuICB9XG5cbiAgZ2V0RGlzcGxheWVkU291cmNlUmVjdCgpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgY29uc3QgdiA9IHRoaXMudmlld2VyO1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLmdldFRydWVJbWFnZVNpemUoKTtcbiAgICBpZiAoIXYgfHwgIXNpemUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHIgPSB2LnZpc2libGVXb3JsZFJlY3QoKTtcbiAgICBjb25zdCB4ID0gTWF0aC5tYXgoMCwgci54KTtcbiAgICBjb25zdCB5ID0gTWF0aC5tYXgoMCwgci55KTtcbiAgICByZXR1cm4ge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB3aWR0aDogTWF0aC5taW4oc2l6ZS53aWR0aCwgci54ICsgci53aWR0aCkgLSB4LFxuICAgICAgaGVpZ2h0OiBNYXRoLm1pbihzaXplLmhlaWdodCwgci55ICsgci5oZWlnaHQpIC0geSxcbiAgICB9O1xuICB9XG5cbiAgZG93bmxvYWRJbWFnZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuZXhwb3J0Q29tcG9zaXRlKCk7XG4gIH1cblxuICAvKiogTm8tb3A6IHRoZSBtb3VudGVkIHNjZW5lIGlzIGZpeGVkIHBlciB7QGxpbmsgcGxvdH07IGEgbmV3IHBsb3QgdHlwZSB0YWtlcyBhIHJlLXBsb3QuICovXG4gIHNldFBsb3RUeXBlKF9wbG90VHlwZTogUGxvdFR5cGUpOiB2b2lkIHtcbiAgICAvKiB0aGUgc2NlbmUgaXMgY2hvc2VuIGJ5IHBsb3QoKSAqL1xuICB9XG5cbiAgLyoqIE1hcCBhIFBsb3RseS1zdHlsZSAzRCBkcmFnIG1vZGUgb250byBuYXBhcmktanMncyBjYW1lcmEgZHJhZyBtb2RlLiAqL1xuICBzZXRTdXJmYWNlRHJhZ01vZGUobW9kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpZXdlcikgcmV0dXJuO1xuICAgIHRoaXMudmlld2VyLnNldENhbWVyYURyYWdNb2RlKGNhbWVyYURyYWdNb2RlKG1vZGUpKTtcbiAgfVxuXG4gIC8qKiBSZS1mcmFtZSB0aGUgM0QgY2FtZXJhIG9uIHRoZSBzY2VuZTogbmFwYXJpLWpzIGZyYW1lcyB0aGUgdW5pb24gb2YgZXZlcnkgM0QgbGF5ZXIncyBib3VuZHNcbiAgICogIChzdXJmYWNlLCB2b2x1bWUsIHBvaW50IGNsb3VkKSwgd2l0aCB0aGUgdmlld3BvcnQtYXdhcmUgZnJhbWluZyBpdHMgYWRkZXJzIHVzZS4gKi9cbiAgcmVzZXRTdXJmYWNlQ2FtZXJhKCk6IHZvaWQge1xuICAgIHRoaXMudmlld2VyPy5maXRUb0xheWVycygpO1xuICAgIHRoaXMudmlld2VyPy5yZXF1ZXN0UmVuZGVyKCk7XG4gIH1cblxuICBnZXRBdXRvc2NhbGVFdmVudCgpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRvc2NhbGVFdmVudCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBsb3QgdHlwZXMgdGhpcyBiYWNrZW5kIGNhbiBtb3VudCDigJQgZXZlcnkgdHlwZSB7QGxpbmsgcGxvdH0gZGlzcGF0Y2hlcyBvbi5cbiAgICpcbiAgICogQ29udHJhY3Qtb25seSBpbiBwcm9kdWN0aW9uOiB0aGUgcm91dGVyIGFuc3dlcnMgYGdldFBsb3RUeXBlRGVzY3JpcHRvcnNgIGZyb20gdGhlIFBsb3RseVxuICAgKiBzZXJ2aWNlLCBzbyBub3RoaW5nIHJlYWNoZXMgdGhpcyBvbmUgdGhyb3VnaCBpdDsgaXQgaXMga2VwdCBhY2N1cmF0ZSBmb3IgZGlyZWN0IGNhbGxlcnMuXG4gICAqL1xuICBnZXRQbG90VHlwZURlc2NyaXB0b3JzKCk6IFBsb3RUeXBlRGVzY3JpcHRvcltdIHtcbiAgICAvLyBUaGUgV2ViR1BVIG5hcGFyaS1qcyBvcHRpb25zLCBvZmZlcmVkIGFsb25nc2lkZSAobm90IHJlcGxhY2luZykgdGhlIE9TRC9QbG90bHkgdHlwZXMuXG4gICAgcmV0dXJuIFtcbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5OQVBBUklfSU1BR0VdISxcbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5OQVBBUklfU0NBVFRFUl0hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9TVVJGQUNFXSEsXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuTkFQQVJJX1NDQVRURVIzRF0hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9WT0xVTUVdISxcbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5OQVBBUklfSVNPU1VSRkFDRV0hLFxuICAgICAgLy8gR2F0ZWQgYnkgYHJlcXVpcmVzU3BhdGlhbERhdGFgLCBzbyB0aGUgc2VsZWN0b3IgaGlkZXMgdGhlbSB1bnRpbCBhIGRhdGFzZXQgaXMgcHVibGlzaGVkXG4gICAgICAvLyAodGhlIDNEIG9uZSBhbHNvIGJ5IGByZXF1aXJlc1NwYXRpYWwzZGApLlxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLlNQQVRJQUxfT01JQ1NdISxcbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5TUEFUSUFMX09NSUNTXzNEXSEsXG4gICAgXTtcbiAgfVxuXG4gIC8qKiBUaGUgbmFwYXJpIDNEIGRlY2ltYXRlIGZhY3RvciAoMSA9IGZ1bGwg4oCmIDggPSDihZspLiBSZWFkIGJ5IHRoZSB0b29sYmFyIHRvIGluaXQgdGhlIGNvbnRyb2wuICovXG4gIGdldFJlc29sdXRpb25TY2FsZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlc29sdXRpb25TY2FsZTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGRlY2ltYXRlIGZhY3RvciBmb3IgdGhlIG5hcGFyaSAzRCB0eXBlcy4gVGFrZXMgZWZmZWN0IG9uIHRoZSBuZXh0IChyZSlsb2FkIOKAlCB0aGUgaG9zdFxuICAgKiAgcmUtcGxvdHMgYWZ0ZXIgY2FsbGluZyB0aGlzLCBzaW5jZSBkZWNpbWF0aW9uIGNoYW5nZXMgdGhlIGZldGNoZWQvYXNzZW1ibGVkIGRhdGEuICovXG4gIHNldFJlc29sdXRpb25TY2FsZShzY2FsZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5ncy5yZXNvbHV0aW9uU2NhbGUgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHNjYWxlKSk7XG4gIH1cblxuICAvKiogbmFwYXJpLWpzIGhhcyB0aGUgbmF2aWdhdG9yIGFuZCBpbWFnZSBzbW9vdGhpbmcgdG9vIChpdHMgMkQgdmlld3MpLiAqL1xuICBnZXRPc2RWaWV3T3B0aW9ucygpOiBJT3NkVmlld09wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLnZpZXdPcHRpb25zO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld09wdGlvbnM6IElPc2RWaWV3T3B0aW9ucyA9IHtcbiAgICBzZXROYXZpZ2F0b3JWaXNpYmxlOiAodmlzaWJsZSkgPT4gdGhpcy5zZXROYXZpZ2F0b3JWaXNpYmxlKHZpc2libGUpLFxuICAgIHNldEltYWdlU21vb3RoaW5nRW5hYmxlZDogKGVuYWJsZWQpID0+IHRoaXMuc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGVuYWJsZWQpLFxuICB9O1xuXG4gIC8qKiBUaGUgM0QgZGVjaW1hdGUgZmFjdG9yICh0aGUgM0QgdHlwZXMnIFJlc29sdXRpb24gY29udHJvbCkuICovXG4gIGdldFZvbHVtZVJlc29sdXRpb24oKTogSVZvbHVtZVJlc29sdXRpb24ge1xuICAgIHJldHVybiB0aGlzLnZvbHVtZVJlc29sdXRpb247XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSB2b2x1bWVSZXNvbHV0aW9uOiBJVm9sdW1lUmVzb2x1dGlvbiA9IHtcbiAgICBnZXQ6ICgpID0+IHRoaXMuZ2V0UmVzb2x1dGlvblNjYWxlKCksXG4gICAgc2V0OiAoc2NhbGUpID0+IHRoaXMuc2V0UmVzb2x1dGlvblNjYWxlKHNjYWxlKSxcbiAgfTtcblxuICAvKiogV2hlcmUgdGhlIGNhbWVyYSBzZXR0bGVkLCBmb3IgdGhlIGludGVuc2l0eSBpbnNldCdzIHJlLXNhbXBsaW5nLiAqL1xuICBnZXRJbnRlbnNpdHlTYW1wbGluZygpOiBJSW50ZW5zaXR5Vmlld3BvcnRTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnZpZXdwb3J0U291cmNlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld3BvcnRTb3VyY2U6IElJbnRlbnNpdHlWaWV3cG9ydFNvdXJjZSA9IHtcbiAgICBnZXRWaWV3cG9ydENoYW5nZSQ6ICgpID0+IHRoaXMudmlld3BvcnRDaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpLFxuICB9O1xuXG4gIC8vIOKUgOKUgCBJUmVnaW9uU3RvcmUgKyBjbGFzc2lmaWNhdGlvbiBjb2xvdXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBJbmhlcml0ZWQgZnJvbSBCYXNlU3RvcmVWaXN1YWxpemVyIOKAlCBwdXJlIGRlbGVnYXRpb25zIHRvIHRoZSBzaGFyZWRcbiAgLy8gUmVnaW9uU3RvcmUgLyBWaXN1YWxpemVyU3RvcmUgKGlkZW50aWNhbCB0byB0aGUgT1NEIGJhY2tlbmQpLlxuXG4gIC8vIOKUgOKUgCBJVG9vbENvbnRyb2xsZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIHNldEFjdGl2ZVRvb2wgYW5kIHRoZSBwZXItdG9vbCBzZXR0ZXJzIHJ1biBpbiBCYXNlU3RvcmVWaXN1YWxpemVyIG92ZXIgdGhpcy5jYW52YXNUb29sczsgdGhlXG4gIC8vIHBvaW50ZXIgYW5kIHJlYWRiYWNrIGdhdGluZywgYW5kIHRoZSBTQU0gLyBjZWxscG9zZSBydW5zLCBhcmUgdGhlIHRvb2wgYnJpZGdlJ3MuXG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGJlZm9yZVRvb2xDaGFuZ2UobmV4dDogQ2FudmFzVG9vbElkIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLmJlZm9yZVRvb2xDaGFuZ2UobmV4dCk7XG4gIH1cbiAgc2VnbWVudFJlY3RhbmdsZXMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy50b29scy5zZWdtZW50UmVjdGFuZ2xlcygpO1xuICB9XG4gIHNlZ21lbnRSZWN0YW5nbGVzQ2VsbHBvc2UoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy50b29scy5zZWdtZW50UmVjdGFuZ2xlc0NlbGxwb3NlKCk7XG4gIH1cbiAgc2V0U2FtTW9kZWwoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2FtVG9vbC5zZXRNb2RlbChpZCk7XG4gICAgdGhpcy5zYW1Qb2ludFRvb2wuc2V0TW9kZWwoaWQpO1xuICB9XG5cbiAgLy8g4pSA4pSAIElEaXNwbGF5T3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gSW5oZXJpdGVkIGZyb20gQmFzZVN0b3JlVmlzdWFsaXplciDigJQgcHVyZSBkZWxlZ2F0aW9ucyB0byB0aGUgc2hhcmVkXG4gIC8vIFZpc3VhbGl6ZXJTdG9yZSAoaWRlbnRpY2FsIHRvIHRoZSBPU0QgYmFja2VuZCkuXG5cbiAgLy8g4pSA4pSAIElWaXN1YWxpemVyIGNvbXBvc2l0ZSBtZW1iZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBnZXRSZWdpb25PdmVybGF5KCk6IElSZWdpb25PdmVybGF5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHMucmVnaW9uT3ZlcmxheTtcbiAgfVxuICBnZXRJc29zdXJmYWNlQ29udHJvbHMoKTogSUlzb3N1cmZhY2VDb250cm9scyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy5pc29Db250cm9scz8uKCkgPz8gbnVsbDtcbiAgfVxuICBnZXRJbnRlbnNpdHlDb250cm9scygpOiBJSW50ZW5zaXR5Q29udHJvbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRTdXJmYWNlM2RDb250cm9scygpOiBJU3VyZmFjZTNkQ29udHJvbHMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zY2VuZT8uc3VyZmFjZTNkQ29udHJvbHM/LigpID8/IG51bGw7XG4gIH1cbiAgZ2V0SGlzdG9ncmFtKGNoYW5uZWxJbmRleDogbnVtYmVyLCBiaW5zOiBudW1iZXIpOiBJSGlzdG9ncmFtIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnZpZXdlcikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2NlbmU/Lmhpc3RvZ3JhbShjaGFubmVsSW5kZXgsIGJpbnMpID8/IG51bGw7XG4gIH1cbiAgZ2V0SGlzdG9ncmFtJChjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogT2JzZXJ2YWJsZTxJSGlzdG9ncmFtIHwgbnVsbD4ge1xuICAgIC8vID44LWJpdCBjaGFubmVsczogdGhlIHRydWUgbmF0aXZlIGRpc3RyaWJ1dGlvbiBmcm9tIHRoZSBzZXJ2ZXIgKHRoZSBkaXNwbGF5ZWQgcGl4ZWxzIGFyZVxuICAgIC8vIDgtYml0LCBzbyB0aGUgY2xpZW50IGhpc3RvZ3JhbSB3b3VsZCBiZSBjbGlwcGVkKS4gOC1iaXQgY2hhbm5lbHMgdXNlIHRoZSBjbGllbnQgcGF0aC5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy50aWxlQ2xpZW50Lm5hdGl2ZUhpc3RvZ3JhbSQodGhpcy5sb2FkZWQ/LmltYWdlSW5mbywgdGhpcy5sb2FkZWQ/LnogPz8gMCwgY2hhbm5lbEluZGV4LCBiaW5zKSA/P1xuICAgICAgb2YodGhpcy5nZXRIaXN0b2dyYW0oY2hhbm5lbEluZGV4LCBiaW5zKSlcbiAgICApO1xuICB9XG5cbiAgLyoqIFNhdmUgdGhlIGRpc3BsYXllZCBjb21wb3NpdGUgYXMgYSBQTkcuIFRocm91Z2ggZmlsZS1zYXZlciwgd2hpY2ggKHVubGlrZSByZXZva2luZyBhbiBvYmplY3RcbiAgICogIFVSTCBzdHJhaWdodCBhZnRlciBgYS5jbGljaygpYCkgZG9lcyBub3QgcmFjZSB0aGUgYnJvd3NlcidzIGRvd25sb2FkLiAqL1xuICBleHBvcnRDb21wb3NpdGUoKTogdm9pZCB7XG4gICAgY29uc3QgdiA9IHRoaXMudmlld2VyO1xuICAgIGlmICghdikgcmV0dXJuO1xuICAgIHZvaWQgdlxuICAgICAgLnNjcmVlbnNob3QoKVxuICAgICAgLnRoZW4oKGJsb2IpID0+IHNhdmVBcyhibG9iLCAnbmFwYXJpLWpzLnBuZycpKVxuICAgICAgLmNhdGNoKChlcnIpID0+IGNvbnNvbGUud2FybignW25hcGFyaS1qc10gUE5HIGV4cG9ydCBmYWlsZWQnLCBlcnIpKTtcbiAgfVxuICAvKiogTmF0aXZlLWJpdC1kZXB0aCAoMTYvMzItYml0KSBtdWx0aS1iYW5kIFRJRkYgZXhwb3J0IHZpYSB0aGUgc2VydmVyIGAvZXhwb3J0L3RpZmZgIGVuZHBvaW50IOKAlFxuICAgKiAgdGhlIGRpc3BsYXllZCBQTkcgaXMgYW4gOC1iaXQgZmlndXJlLCB0aGlzIHByZXNlcnZlcyB0aGUgdHJ1ZSBwaXhlbCB2YWx1ZXMuIFZpc2libGUgY2hhbm5lbHNcbiAgICogIG9ubHkgKG9taXR0ZWQgd2hlbiBhbGwgYXJlIHZpc2libGUg4oaSIHNlcnZlciBkZWZhdWx0KS4gTWlycm9ycyB0aGUgT1NEIGJhY2tlbmQuICovXG4gIGFzeW5jIGV4cG9ydERhdGEoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50aWxlQ2xpZW50LmV4cG9ydFRpZmYoXG4gICAgICB0aGlzLmxvYWRlZD8ueiA/PyAwLFxuICAgICAgdGhpcy5zdG9yZS5jdXJyZW50Q2hhbm5lbFN0YXRlcygpLFxuICAgICAgdGhpcy5sb2FkZWQ/LmZpbGVuYW1lLFxuICAgICk7XG4gIH1cbiAgdW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG59XG4iXX0=
|
|
678
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXZpc3VhbGl6ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9uYXBhcmktdmlzdWFsaXplci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBYyxlQUFlLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFPbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHlDQUF5QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RixPQUFPLEVBQXNCLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRyxPQUFPLEVBQ0wsUUFBUSxFQUVSLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFXbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUcvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1B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QUFDO0lBQ2YsQ0FBQzs4R0EvcUJVLHVCQUF1QixrQkEwRnhCLGdCQUFnQix5TUFPSixjQUFjLHFFQUUxQixVQUFVLGFBR0UsaUJBQWlCO2tIQXRHNUIsdUJBQXVCLGNBRFYsTUFBTTs7MkZBQ25CLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQTJGN0IsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQU92QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7OzBCQUVqQyxNQUFNOzJCQUFDLFVBQVU7OzBCQUdqQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lLCBPcHRpb25hbCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJ2ltYWdlLWpzJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgVmlld2VyIH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHsgSUltYWdlSW5mbyB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9pbWFnZS5jb250cmFjdCc7XG5pbXBvcnQgeyBJSGlzdG9ncmFtIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NoYW5uZWwtaGlzdG9ncmFtLWFwaS5jb250cmFjdCc7XG5pbXBvcnQgeyBDYW52YXNUb29sSWQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgeyBJUmVnaW9uT3ZlcmxheSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9yZWdpb24tb3ZlcmxheS5jb250cmFjdCc7XG5pbXBvcnQgeyBTcGF0aWFsT2JzZXJ2YXRpb25zIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgeyBTUEFUSUFMX0RBVEFfUE9SVCwgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB7IFRJTEVfQUNDRVNTX1BPUlQsIFRpbGVBY2Nlc3NQb3J0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3BvcnRzL3RpbGUtYWNjZXNzLnBvcnQnO1xuaW1wb3J0IHsgVklaX0NPTkZJRywgVml6Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpei1jb25maWcnO1xuaW1wb3J0IHsgSUNlbGxTZWdtZW50ZXIsIENFTExfU0VHTUVOVEVSIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NlbGwtc2VnbWVudGVyLmNvbnRyYWN0JztcbmltcG9ydCB7IFZpZXdlckNhcGFiaWxpdGllcywgVmlld2VyRmVhdHVyZSwgY2FwYWJpbGl0aWVzT2YgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY2FwYWJpbGl0aWVzLmNvbnRyYWN0JztcbmltcG9ydCB7XG4gIFBsb3RUeXBlLFxuICBQbG90VHlwZURlc2NyaXB0b3IsXG4gIFBMT1RfVFlQRV9ERVNDUklQVE9SUyxcbiAgTkFQQVJJX0RFRkFVTFRfREVDSU1BVEUsXG4gIGlzTmFwYXJpM2QsXG4gIGlzTmFwYXJpSXNvc3VyZmFjZSxcbiAgaXNOYXBhcmlTY2F0dGVyLFxuICBpc05hcGFyaVNjYXR0ZXIzZCxcbiAgaXNOYXBhcmlTdXJmYWNlLFxuICBpc1NwYXRpYWxPbWljcyxcbiAgaXNTcGF0aWFsT21pY3MzZCxcbn0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Bsb3QtdHlwZSc7XG5pbXBvcnQge1xuICBJVmlld2VyQmFja2VuZCxcbiAgUGl4ZWxEYXRhLFxuICBJSXNvc3VyZmFjZUNvbnRyb2xzLFxuICBJSW50ZW5zaXR5Q29udHJvbHMsXG4gIElTdXJmYWNlM2RDb250cm9scyxcbiAgSU9zZFZpZXdPcHRpb25zLFxuICBJVm9sdW1lUmVzb2x1dGlvbixcbiAgSUludGVuc2l0eVZpZXdwb3J0U291cmNlLFxufSBmcm9tICcuLi8uLi9jb250cmFjdHMvdmlzdWFsaXplci5jb250cmFjdCc7XG5pbXBvcnQgeyBWaXN1YWxpemVyU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS92aXN1YWxpemVyLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVnaW9uU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9yZWdpb24tc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9zcGF0aWFsLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENhbnZhc1Rvb2xNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdG9vbGJhci90b29sLWtpdC9jYW52YXMtdG9vbC1tYW5hZ2VyJztcbmltcG9ydCB7IFdhbmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdG9vbGJhci93YW5kL3dhbmQuc2VydmljZSc7XG5pbXBvcnQgeyBTYW1Ub29sU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvc2VnbWVudGF0aW9uL3NhbS10b29sLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FtUG9pbnRUb29sU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvc2VnbWVudGF0aW9uL3NhbS1wb2ludC10b29sLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2VsbFNlZ21lbnRUb29sU2VydmljZSB9IGZyb20gJy4uLy4uL3Rvb2xiYXIvc2VnbWVudGF0aW9uL2NlbGwtc2VnbWVudC10b29sLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZVN0b3JlVmlzdWFsaXplciB9IGZyb20gJy4uL2Jhc2Utc3RvcmUtdmlzdWFsaXplcic7XG5pbXBvcnQgeyB0aHJvd0lmQWJvcnRlZCB9IGZyb20gJy4uL3RpbGUtc2VydmVyJztcbmltcG9ydCB7IFNpbXBsZVNsaWNlQWNjZXNzU2VydmljZSB9IGZyb20gJy4uL3NpbXBsZS1zbGljZS1hY2Nlc3Muc2VydmljZSc7XG5pbXBvcnQgeyBaT09NX0JVVFRPTl9TVEVQIH0gZnJvbSAnLi4vb3NkL29zZC16b29tJztcbmltcG9ydCB7IE5BUEFSSV9XSEVFTF9aT09NX1NQRUVEIH0gZnJvbSAnLi9uYXBhcmktem9vbSc7XG5pbXBvcnQgeyBUcmFuc2NyaXB0RXN0aW1hdGUgfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLXRpbGVzJztcbmltcG9ydCB7IE5hcGFyaVRpbGVDbGllbnQgfSBmcm9tICcuL25hcGFyaS10aWxlLWNsaWVudCc7XG5pbXBvcnQgeyBOYXBhcmlEaXNwbGF5U3RhdGUgfSBmcm9tICcuL25hcGFyaS1kaXNwbGF5LXN0YXRlJztcbmltcG9ydCB7IExvYWRpbmdCYWRnZVN0YXRlIH0gZnJvbSAnLi9uYXBhcmktbG9hZGluZy1zdGF0ZSc7XG5pbXBvcnQgeyBOYXBhcmlUb29sQnJpZGdlIH0gZnJvbSAnLi9uYXBhcmktdG9vbC1icmlkZ2UnO1xuaW1wb3J0IHsgY2FtZXJhRHJhZ01vZGUgfSBmcm9tICcuL25hcGFyaS1heGVzLWdpem1vJztcbmltcG9ydCB7IE5hcGFyaVNjZW5lLCBOYXBhcmlTZXR0aW5ncywgU2NlbmVDb250ZXh0LCBWb2x1bWVWb3hlbHNPblNjcmVlbiB9IGZyb20gJy4vbmFwYXJpLXNjZW5lJztcbmltcG9ydCB0eXBlIHsgUGxhbmVBeGlzLCBTbGljZVBsYW5lcyB9IGZyb20gJy4vbmFwYXJpLXZvbHVtZS1zbGljZS1wbGFuZXMnO1xuaW1wb3J0IHR5cGUgeyBSZWdpb25NZXNoM0QgfSBmcm9tICcuL25hcGFyaS12b2x1bWUtcmVnaW9uLW1lc2hlcyc7XG5pbXBvcnQgeyBJbWFnZTJkU2NlbmUsIFNjYXR0ZXJSZWdpb25zU2NlbmUgfSBmcm9tICcuL25hcGFyaS1pbWFnZS0yZC1zY2VuZSc7XG5pbXBvcnQgeyBTY2F0dGVyM2RTY2VuZSwgVm9sdW1lU2NlbmUgfSBmcm9tICcuL25hcGFyaS12b2x1bWUtc2NlbmUnO1xuaW1wb3J0IHsgU3VyZmFjZVNjZW5lIH0gZnJvbSAnLi9uYXBhcmktc3VyZmFjZS1zY2VuZSc7XG5pbXBvcnQgeyBTcGF0aWFsU2Vzc2lvbiB9IGZyb20gJy4vbmFwYXJpLXNwYXRpYWwtc2NlbmUnO1xuaW1wb3J0IHsgU3BhdGlhbDJkU2NlbmUgfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLTJkLXNjZW5lJztcbmltcG9ydCB7IFNwYXRpYWwzZFNjZW5lIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC0zZC1zY2VuZSc7XG5cbi8qKiBPcGFxdWUgaGFuZGxlIGZyb20ge0BsaW5rIE5hcGFyaVZpc3VhbGl6ZXJTZXJ2aWNlLmxvYWR9LCBwYXNzZWQgYmFjayB0byBwbG90KCkuICovXG5pbnRlcmZhY2UgTmFwYXJpTG9hZGVkIHtcbiAgaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvO1xuICB6OiBudW1iZXI7XG4gIC8qKiBNdXN0IG1hdGNoIGBJSW1hZ2VJbmZvLmZpbGVOYW1lYCDigJQgdGhlIHJlbmRlciBvcmNoZXN0cmF0b3IgZHJvcHMgdGhlIHJlc3VsdCBpZiB0aGVcbiAgICogIGhhbmRsZSdzIGBmaWxlbmFtZWAgZG9lc24ndCBtYXRjaCB0aGUgcmVxdWVzdGVkIGltYWdlIChndWFyZHMgYWdhaW5zdCBzdGFsZSBjbGlja3MpLiAqL1xuICBmaWxlbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBXZWJHUFUgaW1hZ2UgYmFja2VuZCwgYnVpbHQgb24gdGhlIHB1Ymxpc2hlZCBgbmFwYXJpLWpzYCBsaWJyYXJ5IChqaXQtdWkjMTAyOiBhXG4gKiBicm93c2VyLWJhc2VkIG5hcGFyaSBzaGlwcGVkIGFzIGEgSlMgbGlicmFyeSwgYWxvbmdzaWRlIE9wZW5TZWFkcmFnb24gZm9yIGltYWdlcyBhbmQgUGxvdGx5XG4gKiBmb3IgM0QpLlxuICpcbiAqIE9uZSBzY2VuZSBpcyBtb3VudGVkIHBlciB7QGxpbmsgcGxvdH0sIGNob3NlbiBieSBwbG90IHR5cGU6XG4gKiAgLSAqKjJEIGltYWdlKiogKGFuZCB0aGUgcmVnaW9uLWNlbnRyb2lkIHNjYXR0ZXIgYW5kIHNwYXRpYWwtb21pY3Mgdmlld3Mgb3ZlciBpdCk6IHB5cmFtaWRhbFxuICogICAgYFRpbGVkU291cmNlYHMgYWdhaW5zdCB0aGUgaml0LXNlcnZpY2UgYC90aWxlYCBlbmRwb2ludCB3aGVuIGAvdGlsZXMvaW5mb2AgZGVzY3JpYmVzIHRoZVxuICogICAgaW1hZ2UsIGVsc2UgYSBzaW5nbGUgc3RpdGNoZWQgbGV2ZWwgKGB0aWxlZDpmYWxzZWAgc3RhY2tzIGZldGNoIGVhY2ggc2xpY2UncyBvd24gVVJMKTtcbiAqICAgIG11bHRpY2hhbm5lbCBhZGRpdGl2ZSB0aW50cywgZ3JheXNjYWxlIGNvbG9ybWFwIG9yIFJHQjsgc2NhbGUgYmFyLCBuYXZpZ2F0b3IsIHJlZ2lvblxuICogICAgb3ZlcmxheSBhbmQgdGhlIHNoYXJlZCBwaXhlbCB0b29scyAod2FuZCwgYnJ1c2gsIGVyYXNlciwgem9vbS10by1ib3gsIFNBTS9jZWxscG9zZSkuXG4gKiAgLSAqKlZvbHVtZSAvIGlzb3N1cmZhY2UgLyAzRCBzY2F0dGVyIC8gc3VyZmFjZSoqOiBzbGljZXMgYXNzZW1ibGVkIGludG8gYSBkZWNpbWF0ZWQgdm9sdW1lXG4gKiAgICAob3Igb25lIGhlaWdodCBmaWVsZCBwZXIgc2xpY2UpLCB3aXRoIHRoZSBheGVzIGdpem1vIGFuZCB0aGUgWi1oZWlnaHQgaGFuZGxlLlxuICogIC0gKipTcGF0aWFsIG9taWNzIDJEIC8gM0QqKjogb2JzZXJ2YXRpb24gbWFya2VycyBvciBhIDNEIGNsb3VkLCBnZW5lIG1hcHMsIGRlbnNpdHkgdm9sdW1lcyxcbiAqICAgIGxldmVsLW9mLWRldGFpbCB0aWxlcywgaG92ZXIgdG9vbHRpcCBhbmQgY2xpY2stdG8tc2VsZWN0LlxuICpcbiAqIFBlci1jaGFubmVsIGhpc3RvZ3JhbXMgY29tZSBmcm9tIHRoZSBjbGllbnQgZGF0YSwgb3IgZnJvbSB0aGUgc2VydmVyJ3MgYC9oaXN0b2dyYW1gIGZvclxuICogPjgtYml0IGltYWdlczsgVElGRiBleHBvcnQgZnJvbSBgL2V4cG9ydC90aWZmYC4gUmVnaW9uIHN0YXRlIGFuZCBkaXNwbGF5IG9wdGlvbnMgZGVsZWdhdGUgdG9cbiAqIHRoZSBzaGFyZWQge0BsaW5rIFJlZ2lvblN0b3JlfSAvIHtAbGluayBWaXN1YWxpemVyU3RvcmV9IHRocm91Z2gge0BsaW5rIEJhc2VTdG9yZVZpc3VhbGl6ZXJ9LFxuICogZXhhY3RseSBhcyBPU0QgZG9lcy4gbmFwYXJpLWpzJ3MgcmVuZGVyIGxvb3AgYW5kIHRoZSBob3QgcG9pbnRlciBwYXRocyBydW4gb3V0c2lkZSB0aGVcbiAqIEFuZ3VsYXIgem9uZS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBOYXBhcmlWaXN1YWxpemVyU2VydmljZSBleHRlbmRzIEJhc2VTdG9yZVZpc3VhbGl6ZXIgaW1wbGVtZW50cyBJVmlld2VyQmFja2VuZCB7XG4gIHJlYWRvbmx5IGNhcGFiaWxpdGllczogVmlld2VyQ2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzT2YoW1xuICAgIFZpZXdlckZlYXR1cmUuSW1hZ2VEaXNwbGF5LFxuICAgIFZpZXdlckZlYXR1cmUuU3RhY2tTbGlkZXIsXG4gICAgVmlld2VyRmVhdHVyZS5QaXhlbFJlYWRiYWNrLFxuICAgIFZpZXdlckZlYXR1cmUuU3VyZmFjZTNELFxuICAgIFZpZXdlckZlYXR1cmUuSXNvc3VyZmFjZSxcbiAgXSk7XG5cbiAgLyoqIFRoZSBqaXQtc2VydmljZSB0aWxlIHNlcnZlcjogZGVzY3JpcHRvciwgc2xpY2VzLCB0aWxlZCBzb3VyY2VzLCBoaXN0b2dyYW1zLCBleHBvcnQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdGlsZUNsaWVudDogTmFwYXJpVGlsZUNsaWVudDtcbiAgLyoqIG5hcGFyaS1qcydzIHJlbmRlciBsb29wIGFuZCB0aGUgaG90IHBvaW50ZXIvdGltZXIgcGF0aHMgcnVuIG91dHNpZGUgdGhlIEFuZ3VsYXIgem9uZVxuICAgKiAgKE5BUEFSSS1TVkMtMjUpOyB3aGF0IHRoZXkgcHJvZHVjZSBmb3IgdGhlIFVJIHJlLWVudGVycyBpdCB0aHJvdWdoIHtAbGluayBpblpvbmV9LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBwcml2YXRlIHZpZXdlcjogVmlld2VyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGhvc3Q6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbG9hZGVkOiBOYXBhcmlMb2FkZWQgfCBudWxsID0gbnVsbDtcbiAgLyoqIEZvciB0aGUgcGFuZWw6IHRoZSB0cmFuc2NyaXB0cy1pbi12aWV3IGVzdGltYXRlIGFuZCB0aGUgZGVuc2l0eSB3aW5kb3cgaW4gdXNlLiAqL1xuICByZWFkb25seSB0cmFuc2NyaXB0RXN0aW1hdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUcmFuc2NyaXB0RXN0aW1hdGUgfCBudWxsPihudWxsKTtcbiAgLyoqIFRyYW5zY3JpcHRzIG9mIGVhY2ggc2VsZWN0ZWQgZ2VuZSBpbiB2aWV3IChzZWUgTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMuZ2VuZUNvdW50c0luKS4gKi9cbiAgcmVhZG9ubHkgZ2VuZUNvdW50c0luVmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgZGVuc2l0eVN0YXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBsbzogbnVtYmVyOyBoaTogbnVtYmVyOyBtYXg6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG4gIC8qKiBUaGUgb2JzZXJ2YXRpb24gZ2VuZSBmaWx0ZXIgY291bGQgbm90IGJlIGFwcGxpZWQgKGFuIGV4cHJlc3Npb24gcmVhZCBmYWlsZWQpLiAqL1xuICByZWFkb25seSBnZW5lRmlsdGVyRmFpbGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogXCJ4IHJlbG9hZGluZ+KAplwiIGF0IHRoZSBib3R0b20gb2YgdGhlIGNhbnZhczogdGhlIHRpbGUgbGF5ZXJzJyBsb2FkcyBhbmQgdGhlIG9ic2VydmF0aW9ucycuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYmFkZ2UgPSBuZXcgTG9hZGluZ0JhZGdlU3RhdGUoKTtcbiAgLyoqIFRoZSBzdG9yZSdzIGRpc3BsYXkgc3RhdGUgKGNvbG9ybWFwLCByZXZlcnNlLCBpbnZlcnQpIGFuZCB0aGUgY29sb3JtYXBzIGRlcml2ZWQgZnJvbSBpdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5OiBOYXBhcmlEaXNwbGF5U3RhdGU7XG4gIC8qKlxuICAgKiBUaGUgbW91bnRlZCBzY2VuZSdzIGxpZmV0aW1lOiBhYm9ydGVkIGJ5IHtAbGluayByZXNldH0sIHNvIGV2ZXJ5dGhpbmcgYSBwbG90IHN0YXJ0cyDigJQgaXRzXG4gICAqIGRlc2NyaXB0b3IgcG9sbCwgaXRzIHRpbGUgZmV0Y2hlcywgaXRzIGJhZGdlIGNvdW50cywgaXRzIGF3YWl0cyDigJQgY2FuIHRlbGwgdGhhdCBhIG5ld2VyIHBsb3RcbiAgICogaGFzIHJlcGxhY2VkIGl0LiBBIHRpbGUgdGhhdCBzZXR0bGVzIGFmdGVyIGEgcmVzZXQgYmVsb25ncyB0byB0aGUgYWJvcnRlZCBzY2VuZSBhbmQgbGVhdmVzIHRoZVxuICAgKiBuZXcgc2NlbmUncyBjb3VudCBhbG9uZS5cbiAgICovXG4gIHByaXZhdGUgbGlmZXRpbWUgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIC8qKiBXaGF0IHtAbGluayBwbG90fSBtb3VudGVkLCB3aGlsZSBpdCBpcyBtb3VudGVkLiAqL1xuICBwcml2YXRlIHNjZW5lOiBOYXBhcmlTY2VuZSB8IG51bGwgPSBudWxsO1xuICAvKiogUmVnaW9uIHJlY29uc3RydWN0aW9ucyB0byBzaG93IGluIGEgdm9sdW1lIHZpZXcsIGtlcHQgYWNyb3NzIHJlLXBsb3RzIG9mIHRoZWlyIGltYWdlLiAqL1xuICBwcml2YXRlIHJlZ2lvbk1lc2hlczogcmVhZG9ubHkgUmVnaW9uTWVzaDNEW10gPSBbXTtcbiAgLyoqIFRoZSBpbWFnZSAoZmlsZSBuYW1lKSB7QGxpbmsgcmVnaW9uTWVzaGVzfSB3ZXJlIGJ1aWx0IGZyb20uICovXG4gIHByaXZhdGUgcmVnaW9uTWVzaGVzSW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFRoZSBrZXlzIG9mIHRoZSByZWNvbnN0cnVjdGlvbnMgaGlnaGxpZ2h0ZWQuICovXG4gIHByaXZhdGUgcmVnaW9uSGlnaGxpZ2h0OiByZWFkb25seSBzdHJpbmdbXSA9IFtdO1xuICAvKiogVGhlIGtleXMgb2YgdGhlIHJlY29uc3RydWN0aW9ucyBoaWRkZW4uICovXG4gIHByaXZhdGUgcmVnaW9uSGlkZGVuOiByZWFkb25seSBzdHJpbmdbXSA9IFtdO1xuICAvKiogVGhlIHBsYW5lcyBvZiB0aGUgc2VjdGlvbnMgYmVzaWRlIGEgdm9sdW1lIHZpZXcsIG9yIG5vbmUuICovXG4gIHByaXZhdGUgc2xpY2VQbGFuZXM6IFNsaWNlUGxhbmVzID0geyB4OiBudWxsLCB5OiBudWxsLCB6OiBudWxsIH07XG4gIC8qKiBBIHNlY3Rpb24ncyBwbGFuZSBkcmFnZ2VkIGluIHRoZSB2b2x1bWUgKHNlZSB7QGxpbmsgZ2V0U2xpY2VQbGFuZU1vdmUkfSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc2xpY2VQbGFuZU1vdmUkID0gbmV3IFN1YmplY3Q8eyBheGlzOiBQbGFuZUF4aXM7IHZhbHVlOiBudW1iZXIgfT4oKTtcbiAgLyoqIENsaWNrcyBvbiB0aGUgcmVjb25zdHJ1Y3Rpb25zIChzZWUge0BsaW5rIGdldFJlZ2lvbk1lc2hQaWNrJH0pLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbk1lc2hQaWNrJCA9IG5ldyBTdWJqZWN0PHsga2V5OiBzdHJpbmcgfCBudWxsOyBhZGRpdGl2ZTogYm9vbGVhbiB9PigpO1xuICAvKiogU3BhdGlhbCBzdGF0ZSB0aGF0IG91dGxpdmVzIGEgc2NlbmUgKGxhdGVzdCBkYXRhLCB3aW5kb3dzLCBlc3RpbWF0ZWQgZ2VuZS1tYXAgZmllbGRzKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzcGF0aWFsOiBTcGF0aWFsU2Vzc2lvbjtcbiAgLyoqIFZpZXdlciBzZXR0aW5ncyB0aGF0IG91dGxpdmUgYSBzY2VuZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nczogTmFwYXJpU2V0dGluZ3MgPSB7XG4gICAgcmVzb2x1dGlvblNjYWxlOiBOQVBBUklfREVGQVVMVF9ERUNJTUFURSxcbiAgICBuYXZpZ2F0b3JWaXNpYmxlOiB0cnVlLFxuICAgIGltYWdlU21vb3RoaW5nOiBmYWxzZSxcbiAgICBheGVzVmlzaWJsZTogdHJ1ZSxcbiAgICBzdXJmYWNlV2lyZWZyYW1lOiBmYWxzZSxcbiAgICB2b2x1bWVaU2NhbGU6IDEsXG4gICAgc3BhdGlhbFpTY2FsZTogMSxcbiAgfTtcbiAgLyoqXG4gICAqIEZyYW1lIGxvYWRpbmcgKHZvbHVtZSBhc3NlbWJseSwgc3VyZmFjZSBwcmVsb2FkKTogYWJvcnRlZCBieSB7QGxpbmsgcmVzZXR9IEFORCBieVxuICAgKiB7QGxpbmsgY2FuY2VsTG9hZGluZ30sIHNvIGEgQ2FuY2VsIGFjdHVhbGx5IHN0b3BzIGZldGNoaW5nIGZyYW1lcyBpbnN0ZWFkIG9mIHJ1bm5pbmcgdG9cbiAgICogY29tcGxldGlvbiBpbiB0aGUgYmFja2dyb3VuZCwgd2hpbGUgdGhlIHNjZW5lIGl0c2VsZiBzdGF5cyBtb3VudGVkLiAoTGF0ZXN0LXdpbnMgV0lUSElOIGFcbiAgICogc2NlbmUg4oCUIGEgc2NydWIsIGEgY29sb3VyIHJlYnVpbGQsIGEgaG92ZXItc291cmNlIGZldGNoIOKAlCBpcyBlYWNoIHNjZW5lJ3Mgb3duIGJ1c2luZXNzLilcbiAgICovXG4gIHByaXZhdGUgbG9hZGluZyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgLyoqIFRoZSBpbWFnZSdzIGZ1bGwtcmVzb2x1dGlvbiBzaXplIGFzIHRoZSBsYXN0IHNjZW5lIGRyZXcgaXQgKGl0IG91dGxpdmVzIHRoZSBzY2VuZSkuICovXG4gIHByaXZhdGUgaW1hZ2VXID0gMDtcbiAgcHJpdmF0ZSBpbWFnZUggPSAwO1xuICAvKiogVGhlIHJlZ2lvbiBvdmVybGF5LCB0aGUgcGl4ZWwgdG9vbHMgYW5kIHRoZSBkaXNwbGF5ZWQtcGl4ZWwgcmVhZGJhY2sgdGhleSByZWFkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRvb2xzOiBOYXBhcmlUb29sQnJpZGdlO1xuICAvKiogVGhpcyBiYWNrZW5kJ3Mgb3duIHdhbmQsIGJydXNoLCBlcmFzZXIsIHpvb20tdG8tYm94IGFuZCBTQU0gcG9pbnQgdG9vbHMuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW52YXNUb29sczogQ2FudmFzVG9vbE1hbmFnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTG9hZGluZ1Byb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRvc2NhbGVFdmVudCQgPSBuZXcgU3ViamVjdDx1bmtub3duPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdwb3J0Q2hhbmdlJCA9IG5ldyBTdWJqZWN0PHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gIH0+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChUSUxFX0FDQ0VTU19QT1JUKSB0aWxlczogVGlsZUFjY2Vzc1BvcnQsXG4gICAgc3RvcmU6IFZpc3VhbGl6ZXJTdG9yZSxcbiAgICByZWdpb25TdG9yZTogUmVnaW9uU3RvcmUsXG4gICAgd2FuZFNlcnZpY2U6IFdhbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FtVG9vbDogU2FtVG9vbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzYW1Qb2ludFRvb2w6IFNhbVBvaW50VG9vbFNlcnZpY2UsXG4gICAgY2VsbFNlZ21lbnRUb29sOiBDZWxsU2VnbWVudFRvb2xTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQ0VMTF9TRUdNRU5URVIpIGNlbGxTZWdtZW50ZXI6IElDZWxsU2VnbWVudGVyIHwgbnVsbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNpbXBsZVN0YWNrOiBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UsXG4gICAgQEluamVjdChWSVpfQ09ORklHKSBjb25maWc6IFZpekNvbmZpZyxcbiAgICAvLyBPcHRpb25hbDogb25seSBhIGhvc3QgdGhhdCBzZXJ2ZXMgc3BhdGlhbC1vbWljcyBkYXRhIHByb3ZpZGVzIGl0LCBhbmRcbiAgICAvLyB3aXRob3V0IGl0IHRoZSBTUEFUSUFMX09NSUNTIHBsb3QgdHlwZSBpcyBuZXZlciBvZmZlcmVkIGFueXdheS5cbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNQQVRJQUxfREFUQV9QT1JUKSBzcGF0aWFsRGF0YTogU3BhdGlhbERhdGFQb3J0IHwgbnVsbCA9IG51bGwsXG4gICAgc2VsZWN0aW9uU3RvcmU6IFNwYXRpYWxTZWxlY3Rpb25TdG9yZSB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgICBzdXBlcihyZWdpb25TdG9yZSwgc3RvcmUpO1xuICAgIHRoaXMudGlsZUNsaWVudCA9IG5ldyBOYXBhcmlUaWxlQ2xpZW50KHRpbGVzLCBzaW1wbGVTdGFjaywgY29uZmlnLnNsaWRlQ3JvcFNlcnZlcik7XG4gICAgdGhpcy50aWxlQ2xpZW50LnN0YXJ0U2NlbmUodGhpcy5saWZldGltZS5zaWduYWwpO1xuICAgIHRoaXMuZGlzcGxheSA9IG5ldyBOYXBhcmlEaXNwbGF5U3RhdGUoc3RvcmUpO1xuICAgIHRoaXMuc3BhdGlhbCA9IG5ldyBTcGF0aWFsU2Vzc2lvbihzcGF0aWFsRGF0YSwgc2VsZWN0aW9uU3RvcmUsIHtcbiAgICAgIGNvbnRpbnVvdXNMdXQ6ICh2aWV3KSA9PiB0aGlzLmRpc3BsYXkuc3BhdGlhbEx1dCh2aWV3KSxcbiAgICAgIC8vIFRoZXNlIGZvbGxvdyB0aGUgY2FtZXJhLCB3aGljaCBtb3ZlcyBvdXRzaWRlIHRoZSB6b25lOyB0aGUgcGFuZWwgcmVhZHMgdGhlbS5cbiAgICAgIGVzdGltYXRlQ2hhbmdlZDogKGUpID0+IHRoaXMuaW5ab25lKCgpID0+IHRoaXMudHJhbnNjcmlwdEVzdGltYXRlJC5uZXh0KGUpKSxcbiAgICAgIGdlbmVDb3VudHNDaGFuZ2VkOiAoYykgPT4gdGhpcy5pblpvbmUoKCkgPT4gdGhpcy5nZW5lQ291bnRzSW5WaWV3JC5uZXh0KGMpKSxcbiAgICAgIGRlbnNpdHlDaGFuZ2VkOiAoZCkgPT4gdGhpcy5pblpvbmUoKCkgPT4gdGhpcy5kZW5zaXR5U3RhdHMkLm5leHQoZCkpLFxuICAgICAgZ2VuZUZpbHRlckZhaWxlZDogKGZhaWxlZCkgPT4gdGhpcy5pblpvbmUoKCkgPT4gdGhpcy5nZW5lRmlsdGVyRmFpbGVkJC5uZXh0KGZhaWxlZCkpLFxuICAgICAgbG9hZGluZ0NoYW5nZWQ6IChsYXllcnMpID0+IHRoaXMuYmFkZ2Uuc2V0VGlsZUxheWVycyhsYXllcnMpLFxuICAgIH0pO1xuICAgIHRoaXMudG9vbHMgPSBuZXcgTmFwYXJpVG9vbEJyaWRnZShcbiAgICAgIHtcbiAgICAgICAgdmlld2VyOiAoKSA9PiB0aGlzLnZpZXdlcixcbiAgICAgICAgaG9zdDogKCkgPT4gdGhpcy5ob3N0LFxuICAgICAgICBjYW52YXM6ICgpID0+IHRoaXMuY2FudmFzLFxuICAgICAgICBpbWFnZVNpemU6ICgpID0+IHRoaXMuZ2V0VHJ1ZUltYWdlU2l6ZSgpLFxuICAgICAgICBmcmFtZUluZGV4OiAoKSA9PiB0aGlzLmxvYWRlZD8ueiA/PyAwLFxuICAgICAgICBmaWxlTmFtZTogKCkgPT4gdGhpcy5sb2FkZWQ/LmZpbGVuYW1lLFxuICAgICAgICAvLyBSZWFjaGVkIGZyb20gdGltZXJzIGFybWVkIG91dHNpZGUgdGhlIHpvbmU7IHN1YnNjcmliZXJzIGFyZSBVSS5cbiAgICAgICAgdmlld3BvcnRDaGFuZ2VkOiAocmVjdCkgPT4gdGhpcy5pblpvbmUoKCkgPT4gdGhpcy52aWV3cG9ydENoYW5nZSQubmV4dChyZWN0KSksXG4gICAgICAgIG91dHNpZGVab25lOiAoZm4pID0+IHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmbiksXG4gICAgICAgIGluWm9uZTogKGZuKSA9PiB0aGlzLmluWm9uZShmbiksXG4gICAgICB9LFxuICAgICAgeyByZWdpb25TdG9yZSwgd2FuZFNlcnZpY2UsIHNhbVRvb2wsIHNhbVBvaW50VG9vbCwgY2VsbFNlZ21lbnRUb29sLCBjZWxsU2VnbWVudGVyIH0sXG4gICAgKTtcbiAgICB0aGlzLmNhbnZhc1Rvb2xzID0gdGhpcy50b29scy5jYW52YXNUb29scztcbiAgfVxuXG4gIC8qKiBSdW4gYGZuYCBpbnNpZGUgdGhlIEFuZ3VsYXIgem9uZTogZm9yIG91dHB1dCAoc3ViamVjdHMgdGhlIFVJIHJlbmRlcnMsIHN0b3JlIHdyaXRlcylcbiAgICogIHByb2R1Y2VkIGJ5IHdvcmsgdGhhdCBydW5zIG91dHNpZGUgaXQuICovXG4gIHByaXZhdGUgaW5ab25lPFQ+KGZuOiAoKSA9PiBUKTogVCB7XG4gICAgcmV0dXJuIE5nWm9uZS5pc0luQW5ndWxhclpvbmUoKSA/IGZuKCkgOiB0aGlzLnpvbmUucnVuKGZuKTtcbiAgfVxuXG4gIC8qKiBXaGF0IGEgc2NlbmUgaXMgYnVpbHQgZnJvbSAoc2VlIHtAbGluayBTY2VuZUNvbnRleHR9KS4gKi9cbiAgcHJpdmF0ZSBzY2VuZUNvbnRleHQodmlld2VyOiBWaWV3ZXIsIGhvc3Q6IEhUTUxFbGVtZW50LCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KTogU2NlbmVDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlld2VyLFxuICAgICAgaG9zdCxcbiAgICAgIGNhbnZhcyxcbiAgICAgIHNpZ25hbDogdGhpcy5saWZldGltZS5zaWduYWwsXG4gICAgICBsb2FkaW5nOiAoKSA9PiB0aGlzLmxvYWRpbmcuc2lnbmFsLFxuICAgICAgaW5mbzogKCkgPT4gdGhpcy5sb2FkZWQ/LmltYWdlSW5mbyxcbiAgICAgIHo6ICgpID0+IHRoaXMubG9hZGVkPy56ID8/IDAsXG4gICAgICB0aWxlczogdGhpcy50aWxlQ2xpZW50LFxuICAgICAgZGlzcGxheTogdGhpcy5kaXNwbGF5LFxuICAgICAgYmFkZ2U6IHRoaXMuYmFkZ2UsXG4gICAgICB0b29sczogdGhpcy50b29scyxcbiAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgcmVnaW9uU3RvcmU6IHRoaXMucmVnaW9uU3RvcmUsXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgIHN0YWNrOiB7XG4gICAgICAgIGxvYWRpbmc6IChvbikgPT4gdGhpcy5zdGFja0xvYWRpbmckLm5leHQob24pLFxuICAgICAgICBwcm9ncmVzczogKHBlcmNlbnQpID0+IHRoaXMuc3RhY2tMb2FkaW5nUHJvZ3Jlc3MkLm5leHQocGVyY2VudCksXG4gICAgICB9LFxuICAgICAgaW1hZ2VTaXplOiAoKSA9PiAoeyB3aWR0aDogdGhpcy5pbWFnZVcsIGhlaWdodDogdGhpcy5pbWFnZUggfSksXG4gICAgICBzZXRJbWFnZVNpemU6ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG4gICAgICAgIHRoaXMuaW1hZ2VXID0gd2lkdGg7XG4gICAgICAgIHRoaXMuaW1hZ2VIID0gaGVpZ2h0O1xuICAgICAgfSxcbiAgICAgIGZpdENhbWVyYVNvb246ICgpID0+IHRoaXMuZml0Q2FtZXJhU29vbigpLFxuICAgICAgb3V0c2lkZVpvbmU6IChmbikgPT4gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZuKSxcbiAgICAgIGluWm9uZTogKGZuKSA9PiB0aGlzLmluWm9uZShmbiksXG4gICAgICByZWdpb25NZXNoUGlja2VkOiAoa2V5LCBhZGRpdGl2ZSkgPT4gdGhpcy5yZWdpb25NZXNoUGljayQubmV4dCh7IGtleSwgYWRkaXRpdmUgfSksXG4gICAgICBzbGljZVBsYW5lTW92ZWQ6IChheGlzLCB2YWx1ZSkgPT4gdGhpcy5zbGljZVBsYW5lTW92ZSQubmV4dCh7IGF4aXMsIHZhbHVlIH0pLFxuICAgIH07XG4gIH1cblxuICAvLyDilIDilIAgSURhdGFSZW5kZXJlcjogbG9hZCAvIHJlbmRlciAvIHZpZXdwb3J0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKipcbiAgICogUmVjb3JkIHRoZSBpbWFnZSB0byBkcmF3LiBObyBuZXR3b3JrIHdvcmsgaGFwcGVucyBoZXJlIOKAlCB0aGUgZGVzY3JpcHRvciBwb2xsIGFuZCB0aGUgdGlsZSxcbiAgICogdm9sdW1lIGFuZCBzcGF0aWFsIGZldGNoZXMgYWxsIHJ1biBpbiB7QGxpbmsgcGxvdH0gdW5kZXIgaXRzIHNjZW5lIHNpZ25hbCwgd2hpY2ggYSBuZXdlciBwbG90LFxuICAgKiB7QGxpbmsgcmVzZXR9IG9yIGBjYW5jZWxMb2FkaW5nKClgIGFib3J0cyDigJQgc28gYHNpZ25hbGAgaXMgb25seSBjaGVja2VkOiBhbiBhbHJlYWR5LWFib3J0ZWRcbiAgICogbG9hZCByZWplY3RzIHdpdGggYW4gYEFib3J0RXJyb3JgIGFuZCBsZWF2ZXMgdGhlIHJlY29yZGVkIGltYWdlIGFsb25lLlxuICAgKi9cbiAgYXN5bmMgbG9hZChpbWFnZUluZm86IElJbWFnZUluZm8sIHpJbmRleDogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8TmFwYXJpTG9hZGVkPiB7XG4gICAgdGhyb3dJZkFib3J0ZWQoc2lnbmFsKTtcbiAgICAvLyBLZWVwcyBTaW1wbGVTbGljZUFjY2Vzc1NlcnZpY2UncyBibG9iIGNhY2hlIGluIHN5bmMgZXZlbiB3aGVuIHRoZSB1c2VyXG4gICAgLy8gc3dpdGNoZXMgYmFja2VuZHMgKGUuZy4gT1NEIEltYWdlIOKGkiBuYXBhcmkgVm9sdW1lKSBvbiB0aGUgc2FtZSBmaWxlIOKAlFxuICAgIC8vIHdoaWNoZXZlciBiYWNrZW5kIGxvYWRzIGEgZ2VudWluZWx5IGRpZmZlcmVudCBmaWxlIGZpcnN0IGV2aWN0cyBpdC5cbiAgICB0aGlzLnNpbXBsZVN0YWNrLm5vdGVBY3RpdmVGaWxlKGltYWdlSW5mby5maWxlTmFtZSk7XG4gICAgdGhpcy5sb2FkZWQgPSB7IGltYWdlSW5mbywgejogekluZGV4LCBmaWxlbmFtZTogaW1hZ2VJbmZvLmZpbGVOYW1lIH07XG4gICAgcmV0dXJuIHRoaXMubG9hZGVkO1xuICB9XG5cbiAgYXN5bmMgcGxvdChcbiAgICBwbG90RGl2OiBzdHJpbmcsXG4gICAgaW1hZ2VMb2FkZWQ6IHVua25vd24sXG4gICAgaW1hZ2VJbmZvOiBJSW1hZ2VJbmZvLFxuICAgIHNjcmVlbkhlaWdodDogbnVtYmVyLFxuICAgIHBsb3RUeXBlOiBQbG90VHlwZSxcbiAgICBpblBsYWNlPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBsb3REaXYpO1xuICAgIGlmICghaG9zdCkge1xuICAgICAgY29uc29sZS5lcnJvcihgW25hcGFyaS1qc10gcGxvdCB0YXJnZXQgIyR7cGxvdERpdn0gbm90IGZvdW5kYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucmVzZXQoKTtcbiAgICAvLyBBIG5ldyBpbWFnZTogYSBzdHJva2Ugb3IgU0FNIHByb21wdCBpbiBwcm9ncmVzcyBiZWxvbmdlZCB0byB0aGUgb2xkIG9uZS5cbiAgICBpZiAoIWluUGxhY2UpIHRoaXMuY2FudmFzVG9vbHMucmVzZXRBbGwoKTtcbiAgICAvLyBUaGlzIHBsb3QncyBzY2VuZS4gQSBuZXdlciBwbG90IHJlc2V0cyBpbnRvIHRoZSBuZXh0IG9uZSB3aGlsZSB0aGlzIG9uZSBzdGlsbCBhd2FpdHMsIGFuZFxuICAgIC8vIGEgc3VwZXJzZWRlZCBwbG90IG11c3Qgbm90IGdvIG9uIHRvIGRyYXcgKG9yIGNvdW50IGltYWdlIHRpbGVzKSBpbnRvIHRoZSBuZXdlciBzY2VuZS5cbiAgICBjb25zdCBzY2VuZSA9IHRoaXMubGlmZXRpbWUuc2lnbmFsO1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5iYWRnZS5hdHRhY2goaG9zdCk7XG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgY2FudmFzLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBzY3JlZW5IZWlnaHQgPyBgJHtzY3JlZW5IZWlnaHR9cHhgIDogJzEwMCUnO1xuICAgIGhvc3QuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIGNvbnN0IGluZm8gPSAoaW1hZ2VMb2FkZWQgYXMgTmFwYXJpTG9hZGVkKT8uaW1hZ2VJbmZvID8/IGltYWdlSW5mbztcblxuICAgIHRyeSB7XG4gICAgICAvLyBCdWlsdCBPVVRTSURFIHRoZSBBbmd1bGFyIHpvbmUsIHNvIGl0cyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgbG9vcCwgaXRzIGNhbnZhcyBwb2ludGVyIC9cbiAgICAgIC8vIHdoZWVsIGxpc3RlbmVycyBhbmQgaXRzIFJlc2l6ZU9ic2VydmVyIGRvIG5vdCBlYWNoIHRyaWdnZXIgYXBwLXdpZGUgY2hhbmdlIGRldGVjdGlvbi5cbiAgICAgIC8vIFdoYXRldmVyIHRoZXkgY2F1c2UgdGhhdCB0aGUgVUkgc2hvd3MgcmUtZW50ZXJzIHRoZSB6b25lIChzZWUgaW5ab25lKS5cbiAgICAgIGNvbnN0IHZpZXdlciA9IHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgVmlld2VyKHtcbiAgICAgICAgICAgIGNhbnZhcyxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHsgcjogMC4wNywgZzogMC4wNywgYjogMC4wOSwgYTogMSB9LFxuICAgICAgICAgICAgLy8gU2V0IGhlcmUgcmF0aGVyIHRoYW4gbGVmdCB0byBuYXBhcmktanMncyBvd24gZGVmYXVsdCBzbyB0aGUgZ2VudGxlclxuICAgICAgICAgICAgLy8gc3RlcCBhcHBsaWVzIHdpdGggdGhlIHZlcnNpb24gY3VycmVudGx5IGluc3RhbGxlZC4gQ2hvc2VuIHRvIG1hdGNoIHRoZVxuICAgICAgICAgICAgLy8gT1NEIGJhY2tlbmQncyBzdGVwIChzZWUgT1NEX1pPT01fUEVSX1NDUk9MTCk6IHRoZSB3aGVlbCBzaG91bGQgZmVlbCB0aGVcbiAgICAgICAgICAgIC8vIHNhbWUgb24gYW4gaW1hZ2Ugd2hpY2hldmVyIHJlbmRlcmVyIGlzIGRyYXdpbmcgaXQuIFRoZSBzdGVwIGFwcGxpZXMgcGVyXG4gICAgICAgICAgICAvLyBzY3JvbGwgRVZFTlQsIGFuZCBhIHRyYWNrcGFkIHNlbmRzIGEgYnVyc3Qgb2YgdGhlbSBwZXIgc3dpcGUsIHNvIGEgc3RlcFxuICAgICAgICAgICAgLy8gdHVuZWQgdG8gYSBtb3VzZSBub3RjaCBydW5zIGF3YXkgdW5kZXIgYSB0cmFja3BhZC5cbiAgICAgICAgICAgIHdoZWVsWm9vbVNwZWVkOiBOQVBBUklfV0hFRUxfWk9PTV9TUEVFRCxcbiAgICAgICAgICAgIC8vIFRoZSBGSVJTVCAzRCBsYXllciBvZiBhIHNjZW5lIGZyYW1lcyB0aGUgb3JiaXQgY2FtZXJhOyBldmVyeSBsYXRlciBvbmUgbGVhdmVzIHRoZVxuICAgICAgICAgICAgLy8gcG9zZSBhbG9uZS4gQSBzcGF0aWFsIHNjZW5lIGlzIGJ1aWx0IGZyb20gc2V2ZXJhbCBsYXllcnMgYW5kIHJlYnVpbHQgY29uc3RhbnRseSDigJRcbiAgICAgICAgICAgIC8vIHJlY29sb3VyaW5nIGJ5IGEgY2xhc3MsIHBpY2tpbmcgYSBnZW5lLCBzdGVwcGluZyBhIHNlY3Rpb24g4oCUIGFuZCB3aXRoIG5hcGFyaS1qcydzXG4gICAgICAgICAgICAvLyBwcmV2aW91cyB1bmNvbmRpdGlvbmFsIGZyYW1pbmcgZWFjaCBvZiB0aG9zZSB0aHJldyBhd2F5IGFuIG9yYml0IHRoZSB1c2VyIGhhZCBzZXQuXG4gICAgICAgICAgICAvLyBUaGUgcG9zZSBpdCBzbmFwcGVkIGJhY2sgdG8gZGVwZW5kZWQgb24gV0hJQ0ggbGF5ZXIgd2FzIHJlYnVpbHQsIHNvIGlzb2xhdGluZyBvbmVcbiAgICAgICAgICAgIC8vIHNlY3Rpb24gem9vbWVkIHRvIHRoYXQgc2VjdGlvbidzIGJvdW5kcy4gYHJlc2V0Rml0M0QoKWAgb24gYSBkYXRhc2V0IGNoYW5nZSBpcyB3aGF0XG4gICAgICAgICAgICAvLyBsZXRzIHRoZSBuZXh0IHNjZW5lIGZyYW1lIGl0c2VsZi5cbiAgICAgICAgICAgIGZpdDNkOiAnb25jZScsXG4gICAgICAgICAgICAvLyBJbiB0aGUgc3BhdGlhbCBtb2RlcyBhIHBsYWluIGNsaWNrIFNFTEVDVFMgdGhlIGNsYXNzIHVuZGVyIHRoZSBjdXJzb3IsXG4gICAgICAgICAgICAvLyBzbyBuYXBhcmkncyBPU0Qtc3R5bGUgY2xpY2stdG8tem9vbSBpcyB0dXJuZWQgb2ZmIHRoZXJlOiBvdGhlcndpc2Ugb25lXG4gICAgICAgICAgICAvLyBjbGljayB3b3VsZCBib3RoIHNlbGVjdCBhIGNsYXNzIGFuZCB6b29tIDJ4IGFib3V0IHRoZSBjdXJzb3IsIGFuZCB0aGVcbiAgICAgICAgICAgIC8vIHpvb20gd291bGQgdGhlbiBoYWx2ZSB0aGUgcGl4ZWwgcmFkaXVzIHRoZSBuZXh0IGNsaWNrIGhpdC10ZXN0cyB3aXRoLlxuICAgICAgICAgICAgLy8gWm9vbWluZyBpcyBzdGlsbCBvbiB0aGUgd2hlZWwsIHRoZSB6b29tIGJ1dHRvbnMgYW5kIHRoZSB6b29tLWJveCB0b29sLlxuICAgICAgICAgICAgLi4uKGlzU3BhdGlhbE9taWNzKHBsb3RUeXBlKSB8fCBpc1NwYXRpYWxPbWljczNkKHBsb3RUeXBlKSA/IHsgY2xpY2tab29tRmFjdG9yOiAwIH0gOiB7fSksXG4gICAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgdGhpcy52aWV3ZXIgPSB2aWV3ZXI7XG4gICAgICBhd2FpdCB2aWV3ZXIucmVhZHk7XG4gICAgICBpZiAoc2NlbmUuYWJvcnRlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBObyBsb2FkZWQgaW1hZ2U6IGFuIGltYWdlLWxlc3Mgc3BhdGlhbCBkYXRhc2V0IG9wZW5lZCBiZWZvcmUgYW55IGltYWdlICh0aGUgdmlzdWFsaXplcidzXG4gICAgICAvLyBwbG90U3BhdGlhbFdpdGhvdXRJbWFnZSkg4oCUIHRoZSBvYnNlcnZhdGlvbnMgYWxvbmUuXG4gICAgICB0aGlzLnNjZW5lID0gdGhpcy5jcmVhdGVTY2VuZShwbG90VHlwZSwgdGhpcy5zY2VuZUNvbnRleHQodmlld2VyLCBob3N0LCBjYW52YXMpLCBpbmZvLCBpbWFnZUxvYWRlZCA9PSBudWxsKTtcbiAgICAgIC8vIEFub3RoZXIgaW1hZ2UncyBzdXJmYWNlcyB3b3VsZCBsYW5kIGluIHRoaXMgdm9sdW1lJ3MgZnJhbWUgYXQgdGhlIHdyb25nIHNpemU6IGRyb3AgdGhlbS5cbiAgICAgIGlmIChpbmZvPy5maWxlTmFtZSAhPT0gdGhpcy5yZWdpb25NZXNoZXNJbWFnZSkgdGhpcy5yZWdpb25NZXNoZXMgPSBbXTtcbiAgICAgIHRoaXMuc2NlbmUuc2V0UmVnaW9uTWVzaGVzPy4odGhpcy5yZWdpb25NZXNoZXMpO1xuICAgICAgdGhpcy5zY2VuZS5zZXRSZWdpb25IaWdobGlnaHQ/Lih0aGlzLnJlZ2lvbkhpZ2hsaWdodCk7XG4gICAgICB0aGlzLnNjZW5lLnNldFJlZ2lvbkhpZGRlbj8uKHRoaXMucmVnaW9uSGlkZGVuKTtcbiAgICAgIHRoaXMuc2NlbmUuc2V0UmVnaW9uc1Rocm91Z2hWb2x1bWU/Lih0aGlzLnJlZ2lvbnNUaHJvdWdoVm9sdW1lKTtcbiAgICAgIHRoaXMuc2NlbmUuc2V0U2xpY2VQbGFuZXM/Lih0aGlzLnNsaWNlUGxhbmVzKTtcbiAgICAgIGF3YWl0IHRoaXMuc2NlbmUubW91bnQoKTtcbiAgICAgIHRoaXMudG9vbHMuc2NoZWR1bGVSZWFkYmFjaygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbbmFwYXJpLWpzXSBwbG90IGZhaWxlZDonLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgc2NlbmUgYSBwbG90IHR5cGUgbW91bnRzLiAqL1xuICBwcml2YXRlIGNyZWF0ZVNjZW5lKFxuICAgIHBsb3RUeXBlOiBQbG90VHlwZSxcbiAgICBjdHg6IFNjZW5lQ29udGV4dCxcbiAgICBpbmZvOiBJSW1hZ2VJbmZvIHwgdW5kZWZpbmVkLFxuICAgIG5vSW1hZ2U6IGJvb2xlYW4sXG4gICk6IE5hcGFyaVNjZW5lIHtcbiAgICBpZiAoaXNTcGF0aWFsT21pY3MzZChwbG90VHlwZSkpIHJldHVybiBuZXcgU3BhdGlhbDNkU2NlbmUoY3R4LCB0aGlzLnNwYXRpYWwsIGluZm8pO1xuICAgIGlmIChpc1NwYXRpYWxPbWljcyhwbG90VHlwZSkpIHJldHVybiBuZXcgU3BhdGlhbDJkU2NlbmUoY3R4LCB0aGlzLnNwYXRpYWwsIG5vSW1hZ2UpO1xuICAgIGlmIChpc05hcGFyaVNjYXR0ZXIocGxvdFR5cGUpKSByZXR1cm4gbmV3IFNjYXR0ZXJSZWdpb25zU2NlbmUoY3R4KTtcbiAgICBpZiAoaXNOYXBhcmlTY2F0dGVyM2QocGxvdFR5cGUpKSByZXR1cm4gbmV3IFNjYXR0ZXIzZFNjZW5lKGN0eCwgaW5mbyk7XG4gICAgaWYgKGlzTmFwYXJpU3VyZmFjZShwbG90VHlwZSkpIHJldHVybiBuZXcgU3VyZmFjZVNjZW5lKGN0eCk7XG4gICAgaWYgKGlzTmFwYXJpM2QocGxvdFR5cGUpKSByZXR1cm4gbmV3IFZvbHVtZVNjZW5lKGN0eCwgaW5mbywgaXNOYXBhcmlJc29zdXJmYWNlKHBsb3RUeXBlKSA/ICdpc28nIDogJ21pcCcpO1xuICAgIHJldHVybiBuZXcgSW1hZ2UyZFNjZW5lKGN0eCk7XG4gIH1cblxuICAvKiogU2hvdy9oaWRlIHRoZSBvdmVydmlldyBuYXZpZ2F0b3IgKHNhbWUgc2V0dGluZyBhcyBPU0QncykuICovXG4gIHNldE5hdmlnYXRvclZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3MubmF2aWdhdG9yVmlzaWJsZSA9IHZpc2libGU7XG4gICAgdGhpcy5zY2VuZT8uc2V0TmF2aWdhdG9yVmlzaWJsZT8uKHZpc2libGUpO1xuICB9XG5cbiAgLyoqIE9ic2VydmF0aW9ucyBwcm9qZWN0ZWQgdG8gY2FudmFzIHBpeGVscyB1bmRlciB0aGUgM0QgY2FtZXJhICh0aGUgc3BhdGlhbCAzRCBjbG91ZCksIGluZGV4ZWRcbiAgICogIGJ5IG9ic2VydmF0aW9uIHdpdGggTmFOIGZvciBhbnkgbm90IGRyYXduOyBudWxsIHdoZW4gbm8gY2xvdWQgaXMgbW91bnRlZC4gKi9cbiAgZ2V0U3BhdGlhbFNjcmVlblByb2plY3Rpb24ob2JzOiBTcGF0aWFsT2JzZXJ2YXRpb25zKTogRmxvYXQzMkFycmF5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2NlbmU/LnNjcmVlblByb2plY3Rpb24/LihvYnMpID8/IG51bGw7XG4gIH1cblxuICAvKiogVGhlIGlkcyBvZiB0aGUgcmVnaW9ucyBkcmF3biBvdmVyIHRoZSAzRCBjbG91ZCBpbiBzY3JlZW4gc3BhY2UgKGl0cyBsYXNzb3MpOyBbXSBpbiAyRC4gRXZlcnlcbiAgICogIG90aGVyIHJlZ2lvbiBpbiB0aGUgc3RvcmUgaXMgaW4gaW1hZ2Ugc3BhY2UsIGFuZCBtZWFucyBub3RoaW5nIGF0IGNhbnZhcyBwaXhlbHMuICovXG4gIGdldFNwYXRpYWxMYXNzb0lkcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHMucmVnaW9uT3ZlcmxheT8ub3duUmVnaW9uSWRzKCkgPz8gW107XG4gIH1cblxuICBwcml2YXRlIGZpdENhbWVyYVNvb24oKTogdm9pZCB7XG4gICAgY29uc3QgcnVuID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMudmlld2VyICYmIHRoaXMuY2FudmFzICYmIHRoaXMuaW1hZ2VXID4gMCAmJiB0aGlzLmltYWdlSCA+IDApIHtcbiAgICAgICAgdGhpcy52aWV3ZXIuY2FtZXJhLmZpdChcbiAgICAgICAgICB0aGlzLmltYWdlVyxcbiAgICAgICAgICB0aGlzLmltYWdlSCxcbiAgICAgICAgICB0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCB8fCB0aGlzLmltYWdlVyxcbiAgICAgICAgICB0aGlzLmNhbnZhcy5jbGllbnRIZWlnaHQgfHwgdGhpcy5pbWFnZUgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShydW4pKTtcbiAgICBlbHNlIHJ1bigpO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIFBsb3RseS1zcGVjaWZpYzsgaG9zdCByZS1kcml2ZXMgcGxvdCgpIGZyb20gaXRzIGltYWdlIHN0cmVhbS4gKi9cbiAgcmVsb2FkQW5kUGxvdCgpOiB2b2lkIHtcbiAgICAvKiBuby1vcCAqL1xuICB9XG5cbiAgLyoqIFNob3cgYG1lc3NhZ2VgIG9uIHRoZSBjYW52YXMncyBsb2FkaW5nIGJhZGdlIHVudGlsIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBpcyBjYWxsZWQuICovXG4gIGJlZ2luVGFzayhtZXNzYWdlOiBzdHJpbmcpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5iYWRnZS5iZWdpblRhc2sobWVzc2FnZSk7XG4gIH1cblxuICAvKiogU2hvdyB0aGVzZSByZWdpb24gcmVjb25zdHJ1Y3Rpb25zIG9mIGBpbWFnZWAgaW4gdGhlIHZvbHVtZSB2aWV3IChrZXB0IGZvciBpdHMgbmV4dCB2b2x1bWUgcGxvdCkuICovXG4gIHNldFJlZ2lvbk1lc2hlcyhtZXNoZXM6IHJlYWRvbmx5IFJlZ2lvbk1lc2gzRFtdLCBpbWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpb25NZXNoZXMgPSBtZXNoZXM7XG4gICAgdGhpcy5yZWdpb25NZXNoZXNJbWFnZSA9IGltYWdlO1xuICAgIHRoaXMuc2NlbmU/LnNldFJlZ2lvbk1lc2hlcz8uKG1lc2hlcyk7XG4gIH1cblxuICAvKiogSGlnaGxpZ2h0IHRoZSByZWNvbnN0cnVjdGlvbnMgb2YgdGhlc2Uga2V5cyAobm9uZTogYWxsIGFzIHVzdWFsKS4gKi9cbiAgc2V0UmVnaW9uSGlnaGxpZ2h0KGtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpb25IaWdobGlnaHQgPSBrZXlzO1xuICAgIHRoaXMuc2NlbmU/LnNldFJlZ2lvbkhpZ2hsaWdodD8uKGtleXMpO1xuICB9XG5cbiAgLyoqIEhpZGUgdGhlIHJlY29uc3RydWN0aW9ucyBvZiB0aGVzZSBrZXlzIChrZXB0IGZvciB0aGUgbmV4dCB2b2x1bWUgcGxvdCkuICovXG4gIHNldFJlZ2lvbkhpZGRlbihrZXlzOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMucmVnaW9uSGlkZGVuID0ga2V5cztcbiAgICB0aGlzLnNjZW5lPy5zZXRSZWdpb25IaWRkZW4/LihrZXlzKTtcbiAgfVxuXG4gIC8qKiBEcmF3IHRoZSByZWNvbnN0cnVjdGlvbnMgdGhyb3VnaCB0aGUgdm9sdW1lIHJhdGhlciB0aGFuIGhpZGRlbiBiZWhpbmQgaXQgKGtlcHQgYWNyb3NzIHBsb3RzKS4gKi9cbiAgc2V0UmVnaW9uc1Rocm91Z2hWb2x1bWUodGhyb3VnaDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucmVnaW9uc1Rocm91Z2hWb2x1bWUgPSB0aHJvdWdoO1xuICAgIHRoaXMuc2NlbmU/LnNldFJlZ2lvbnNUaHJvdWdoVm9sdW1lPy4odGhyb3VnaCk7XG4gIH1cbiAgcHJpdmF0ZSByZWdpb25zVGhyb3VnaFZvbHVtZSA9IGZhbHNlO1xuXG4gIC8qKiBTaG93IHRoZSBwbGFuZXMgb2YgdGhlIHNlY3Rpb25zIGJlc2lkZSBhIHZvbHVtZSB2aWV3IChudWxsOiBoaWRlIG9uZSk7IGtlcHQgYWNyb3NzIHBsb3RzLiAqL1xuICBzZXRTbGljZVBsYW5lcyhwbGFuZXM6IFNsaWNlUGxhbmVzKTogdm9pZCB7XG4gICAgdGhpcy5zbGljZVBsYW5lcyA9IHBsYW5lcztcbiAgICB0aGlzLnNjZW5lPy5zZXRTbGljZVBsYW5lcz8uKHBsYW5lcyk7XG4gIH1cblxuICAvKiogQSBzZWN0aW9uJ3MgcGxhbmUgZHJhZ2dlZCBpbiB0aGUgdm9sdW1lIHZpZXcsIHRvIGB2YWx1ZWAgYWxvbmcgaXRzIGF4aXMgKGltYWdlIHB4LCBvciBhIHNsaWNlKS4gKi9cbiAgZ2V0U2xpY2VQbGFuZU1vdmUkKCk6IE9ic2VydmFibGU8eyBheGlzOiBQbGFuZUF4aXM7IHZhbHVlOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLnNsaWNlUGxhbmVNb3ZlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKiBUaGUgdm9sdW1lIG9uIHNjcmVlbiwgYXMgYXNzZW1ibGVkIChzZWUgVm9sdW1lU2NlbmUudm9sdW1lVm94ZWxzKTsgbnVsbCBvdXRzaWRlIGEgdm9sdW1lIHZpZXcuICovXG4gIHZvbHVtZVZveGVscygpOiBWb2x1bWVWb3hlbHNPblNjcmVlbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy52b2x1bWVWb3hlbHM/LigpID8/IG51bGw7XG4gIH1cblxuICAvKiogQSByZWNvbnN0cnVjdGlvbiBjbGlja2VkIHdpdGggdGhlIHNlbGVjdGlvbiB0b29sIChpdHMga2V5KSwgb3IgdGhlIHZvbHVtZSBiZXNpZGUgdGhlbSAobnVsbCkuICovXG4gIGdldFJlZ2lvbk1lc2hQaWNrJCgpOiBPYnNlcnZhYmxlPHsga2V5OiBzdHJpbmcgfCBudWxsOyBhZGRpdGl2ZTogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMucmVnaW9uTWVzaFBpY2skLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqIEltYWdlIHB4IHBlciB2b3hlbCBvZiB0aGUgdm9sdW1lIG9uIHNjcmVlbiwgaW4tcGxhbmU7IG51bGwgb3V0c2lkZSBhIHZvbHVtZSB2aWV3LiAqL1xuICByZWdpb25Wb3hlbFN0ZXAoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2NlbmU/LnZveGVsU3RlcD8uKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmQgdGhlIG1vdW50ZWQgc2NlbmU6IGFib3J0IGl0cyBsaWZldGltZSAoaXRzIGRlc2NyaXB0b3IgcG9sbCwgdGlsZSBjb3VudHMsIGZyYW1lIGxvYWRpbmcgYW5kXG4gICAqIGF3YWl0cykgYW5kIGRpc3Bvc2UgaXQg4oCUIGl0cyBsYXllcnMsIGtleXMsIHN1YnNjcmlwdGlvbnMgYW5kIGxpc3RlbmVycyBnbyB3aXRoIGl0LCBzbyB0aGUgbmV4dFxuICAgKiBwbG90IGNhbiBuZXZlciBpbmhlcml0IGFuIFwiYWxyZWFkeSBidWlsdFwiIGtleSAoTkFQQVJJLVNWQy0xKSDigJQgdGhlbiB0ZWFyIHRoZSB2aWV3ZXIgZG93bi5cbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZy5hYm9ydCgpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLmxpZmV0aW1lLmFib3J0KCk7XG4gICAgdGhpcy5saWZldGltZSA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLnNjZW5lPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5zY2VuZSA9IG51bGw7XG4gICAgdGhpcy5iYWRnZS5yZXNldCgpO1xuICAgIHRoaXMudG9vbHMudGVhcmRvd24oKTtcbiAgICB0aGlzLnRpbGVDbGllbnQuc3RhcnRTY2VuZSh0aGlzLmxpZmV0aW1lLnNpZ25hbCk7XG4gICAgdGhpcy52aWV3ZXI/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLnZpZXdlciA9IG51bGw7XG4gICAgaWYgKHRoaXMuY2FudmFzICYmIHRoaXMuaG9zdD8uY29udGFpbnModGhpcy5jYW52YXMpKSB0aGlzLmhvc3QucmVtb3ZlQ2hpbGQodGhpcy5jYW52YXMpO1xuICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGxvdCBhcmVhIGNoYW5nZWQgc2l6ZSAodGhlIHNsaWNlIGVkaXRvciBzcGxpdCBpdCwgYSBkaXZpZGVyIG1vdmVkKTogZml0IHRoZSBjYW52YXMsIHdob3NlXG4gICAqIGhlaWdodCB3YXMgZml4ZWQgYXQgcGxvdCB0aW1lLCB0byBpdCBhZ2Fpbi5cbiAgICovXG4gIHJlbGF5b3V0KF90cnVlSW1hZ2VTaXplPzogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCB7IGNhbnZhcywgaG9zdCB9ID0gdGhpcztcbiAgICBpZiAoY2FudmFzICYmIGhvc3QpIHtcbiAgICAgIC8vIExldCB0aGUgaG9zdCB0YWtlIGl0cyBoZWlnaHQgZnJvbSB0aGUgbGF5b3V0LCBub3QgZnJvbSB0aGUgY2FudmFzIGluc2lkZSBpdC5cbiAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSAnMHB4JztcbiAgICAgIGNvbnN0IGhlaWdodCA9IGhvc3QuY2xpZW50SGVpZ2h0O1xuICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCA+IDAgPyBgJHtoZWlnaHR9cHhgIDogJzEwMCUnO1xuICAgIH1cbiAgICB0aGlzLnZpZXdlcj8ucmVxdWVzdFJlbmRlcigpO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIFBsb3RseS1zcGVjaWZpYyBheGlzIHJlc2V0LiAqL1xuICByZXNldEF4ZXMoKTogdm9pZCB7XG4gICAgdGhpcy5maXRDYW1lcmFTb29uKCk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgUGxvdGx5LXNwZWNpZmljIGF1dG9zY2FsZS4gKi9cbiAgYXV0b3NjYWxlKCk6IHZvaWQge1xuICAgIHRoaXMuZml0Q2FtZXJhU29vbigpO1xuICAgIHRoaXMuYXV0b3NjYWxlRXZlbnQkLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHpvb21JbigpOiB2b2lkIHtcbiAgICB0aGlzLnpvb21CeShaT09NX0JVVFRPTl9TVEVQKTtcbiAgfVxuXG4gIHpvb21PdXQoKTogdm9pZCB7XG4gICAgdGhpcy56b29tQnkoMSAvIFpPT01fQlVUVE9OX1NURVApO1xuICB9XG5cbiAgLyoqIFpvb20gYnkgYGZhY3RvcmAgKD4gMSA9IGluKSBvbiB3aGljaGV2ZXIgY2FtZXJhIGlzIGxpdmU6IHRoZSAyRCBjYW1lcmEncyB6b29tLCBvciDigJQgaW4gYSAzRFxuICAgKiAgc2NlbmUsIHdoZXJlIHRoYXQgd291bGQgY2hhbmdlIG5vdGhpbmcgdmlzaWJsZSDigJQgdGhlIG9yYml0IGNhbWVyYSdzIGRpc3RhbmNlLiAqL1xuICBwcml2YXRlIHpvb21CeShmYWN0b3I6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZpZXdlcjtcbiAgICBpZiAoIXYpIHJldHVybjtcbiAgICBpZiAodi5kaW1zLm5kaXNwbGF5ID09PSAzKVxuICAgICAgdi5jYW1lcmEzZC56b29tQnkoMSAvIGZhY3Rvcik7IC8vIHpvb21CeSBzY2FsZXMgdGhlIGRpc3RhbmNlXG4gICAgZWxzZSB2LmNhbWVyYS56b29tID0gdi5jYW1lcmEuem9vbSAqIGZhY3RvcjtcbiAgfVxuXG4gIHNldERyYWdNb2RlKF9tb2RlOiBzdHJpbmcgfCBmYWxzZSk6IHZvaWQge1xuICAgIC8vIE5vLW9wOiBwYW4gYW5kIHpvb20gYXJlIGFsd2F5cyB0aGUgbmFwYXJpIGNhbWVyYSdzIGRlZmF1bHQgZ2VzdHVyZXMsIGFuZCBwYW4vem9vbSBnYXRpbmcgZm9yXG4gICAgLy8gZHJhd2luZyBpcyBvd25lZCBieSB0aGUgcmVnaW9uIG92ZXJsYXkncyBzZXRNb2RlIChzZXRDb250cm9sc0VuYWJsZWQpLiBUb2dnbGluZyBjb250cm9scyBoZXJlXG4gICAgLy8gd291bGQgZmlnaHQgdGhhdCDigJQgdGhlIGhvc3QgY2FsbHMgc2V0RHJhZ01vZGUoZmFsc2UpIGFsb25nc2lkZSBvdmVybGF5LnNldE1vZGUoPHRvb2w+KS5cbiAgfVxuXG4gIHNldEltYWdlU21vb3RoaW5nRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5ncy5pbWFnZVNtb290aGluZyA9IGVuYWJsZWQ7XG4gICAgLy8gQXBwbHkgbGl2ZSB0byB0aGUgcmVuZGVyZWQgaW1hZ2UgbGF5ZXJzOyBiYWtlZCBpbnRvIHRoZSBuZXh0IHJlbmRlciB0b28uXG4gICAgdGhpcy5zY2VuZT8uc2V0SW1hZ2VTbW9vdGhpbmc/LihlbmFibGVkKTtcbiAgfVxuXG4gIHNldFNob3dTdGFjayhfc2hvd3N0YWNrOiBib29sZWFuKTogdm9pZCB7XG4gICAgLyogc3RhY2sgbmF2aWdhdGVkIHZpYSBzZXRaSW5kZXggKi9cbiAgfVxuXG4gIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZCkgdGhpcy5sb2FkZWQueiA9IHpJbmRleDtcbiAgICBpZiAoIXRoaXMudmlld2VyKSByZXR1cm47XG4gICAgLy8gRGlzcGF0Y2ggb24gV0hBVCBJUyBNT1VOVEVELCBub3Qgb24gd2hpY2ggbGF5ZXIgaGFuZGxlIGhhcHBlbnMgdG8gYmUgbm9uLW51bGw6IGEgc3VyZmFjZVxuICAgIC8vIHN0aWxsIHByZWxvYWRpbmcgKG9yIHdob3NlIGZpcnN0IGJ1aWxkIGZhaWxlZCkgaGFzIG5vIGxheWVyIHlldCwgYW5kIGEgM0Qgc2NhdHRlciBvciBjbG91ZFxuICAgIC8vIGhhcyBub25lIG9mIHRoZW0g4oCUIGFuZCBib3RoIHVzZWQgdG8gZmFsbCB0aHJvdWdoIHRvIHRoZSAyRCByZW5kZXIgKE5BUEFSSS1TVkMtOSkuXG4gICAgdGhpcy5zY2VuZT8uc2V0Wih6SW5kZXgpO1xuICB9XG5cbiAgc2V0U3RhY2tMb2FkaW5nKHN0YWNrTG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc3RhY2tMb2FkaW5nJC5uZXh0KHN0YWNrTG9hZGluZyk7XG4gIH1cblxuICAvKiogQ2FuY2VsIGluLWZsaWdodCBmcmFtZSBsb2FkaW5nOiBhYm9ydCB7QGxpbmsgbG9hZGluZ30gc28gdGhlIHZvbHVtZS1hc3NlbWJseSAvIHN1cmZhY2VcbiAgICogIHByZWxvYWQgd29ya2VycyBzdG9wIGZldGNoaW5nIG1vcmUgZnJhbWVzLCBhbmQgY2xlYXIgdGhlIGxvYWRpbmcgZmxhZyArIHByb2dyZXNzLiAqL1xuICBjYW5jZWxMb2FkaW5nKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZy5hYm9ydCgpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLnN0YWNrTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5zdGFja0xvYWRpbmdQcm9ncmVzcyQubmV4dCgwKTtcbiAgfVxuXG4gIGlzU3RhY2tMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrTG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRTdGFja0xvYWRpbmdQcm9ncmVzcygpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrTG9hZGluZ1Byb2dyZXNzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldFRydWVJbWFnZVNpemUoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VXID4gMCAmJiB0aGlzLmltYWdlSCA+IDAgPyB7IHdpZHRoOiB0aGlzLmltYWdlVywgaGVpZ2h0OiB0aGlzLmltYWdlSCB9IDogbnVsbDtcbiAgfVxuXG4gIGdldEN1cnJlbnRJbWFnZSgpOiBQcm9taXNlPEltYWdlIHwgbnVsbD4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBnZXREaXNwbGF5ZWRQaXhlbERhdGEoKTogUGl4ZWxEYXRhIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHMubGFzdFBpeGVscztcbiAgfVxuXG4gIGdldERpc3BsYXllZFNvdXJjZVJlY3QoKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZpZXdlcjtcbiAgICBjb25zdCBzaXplID0gdGhpcy5nZXRUcnVlSW1hZ2VTaXplKCk7XG4gICAgaWYgKCF2IHx8ICFzaXplKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByID0gdi52aXNpYmxlV29ybGRSZWN0KCk7XG4gICAgY29uc3QgeCA9IE1hdGgubWF4KDAsIHIueCk7XG4gICAgY29uc3QgeSA9IE1hdGgubWF4KDAsIHIueSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgd2lkdGg6IE1hdGgubWluKHNpemUud2lkdGgsIHIueCArIHIud2lkdGgpIC0geCxcbiAgICAgIGhlaWdodDogTWF0aC5taW4oc2l6ZS5oZWlnaHQsIHIueSArIHIuaGVpZ2h0KSAtIHksXG4gICAgfTtcbiAgfVxuXG4gIGRvd25sb2FkSW1hZ2UoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLmV4cG9ydENvbXBvc2l0ZSgpO1xuICB9XG5cbiAgLyoqIE5vLW9wOiB0aGUgbW91bnRlZCBzY2VuZSBpcyBmaXhlZCBwZXIge0BsaW5rIHBsb3R9OyBhIG5ldyBwbG90IHR5cGUgdGFrZXMgYSByZS1wbG90LiAqL1xuICBzZXRQbG90VHlwZShfcGxvdFR5cGU6IFBsb3RUeXBlKTogdm9pZCB7XG4gICAgLyogdGhlIHNjZW5lIGlzIGNob3NlbiBieSBwbG90KCkgKi9cbiAgfVxuXG4gIC8qKiBNYXAgYSBQbG90bHktc3R5bGUgM0QgZHJhZyBtb2RlIG9udG8gbmFwYXJpLWpzJ3MgY2FtZXJhIGRyYWcgbW9kZS4gKi9cbiAgc2V0U3VyZmFjZURyYWdNb2RlKG1vZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy52aWV3ZXIpIHJldHVybjtcbiAgICB0aGlzLnZpZXdlci5zZXRDYW1lcmFEcmFnTW9kZShjYW1lcmFEcmFnTW9kZShtb2RlKSk7XG4gIH1cblxuICAvKiogUmUtZnJhbWUgdGhlIDNEIGNhbWVyYSBvbiB0aGUgc2NlbmU6IG5hcGFyaS1qcyBmcmFtZXMgdGhlIHVuaW9uIG9mIGV2ZXJ5IDNEIGxheWVyJ3MgYm91bmRzXG4gICAqICAoc3VyZmFjZSwgdm9sdW1lLCBwb2ludCBjbG91ZCksIHdpdGggdGhlIHZpZXdwb3J0LWF3YXJlIGZyYW1pbmcgaXRzIGFkZGVycyB1c2UuICovXG4gIHJlc2V0U3VyZmFjZUNhbWVyYSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdlcj8uZml0VG9MYXllcnMoKTtcbiAgICB0aGlzLnZpZXdlcj8ucmVxdWVzdFJlbmRlcigpO1xuICB9XG5cbiAgZ2V0QXV0b3NjYWxlRXZlbnQoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b3NjYWxlRXZlbnQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwbG90IHR5cGVzIHRoaXMgYmFja2VuZCBjYW4gbW91bnQg4oCUIGV2ZXJ5IHR5cGUge0BsaW5rIHBsb3R9IGRpc3BhdGNoZXMgb24uXG4gICAqXG4gICAqIENvbnRyYWN0LW9ubHkgaW4gcHJvZHVjdGlvbjogdGhlIHJvdXRlciBhbnN3ZXJzIGBnZXRQbG90VHlwZURlc2NyaXB0b3JzYCBmcm9tIHRoZSBQbG90bHlcbiAgICogc2VydmljZSwgc28gbm90aGluZyByZWFjaGVzIHRoaXMgb25lIHRocm91Z2ggaXQ7IGl0IGlzIGtlcHQgYWNjdXJhdGUgZm9yIGRpcmVjdCBjYWxsZXJzLlxuICAgKi9cbiAgZ2V0UGxvdFR5cGVEZXNjcmlwdG9ycygpOiBQbG90VHlwZURlc2NyaXB0b3JbXSB7XG4gICAgLy8gVGhlIFdlYkdQVSBuYXBhcmktanMgb3B0aW9ucywgb2ZmZXJlZCBhbG9uZ3NpZGUgKG5vdCByZXBsYWNpbmcpIHRoZSBPU0QvUGxvdGx5IHR5cGVzLlxuICAgIHJldHVybiBbXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuTkFQQVJJX0lNQUdFXSEsXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuTkFQQVJJX1NDQVRURVJdISxcbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5OQVBBUklfU1VSRkFDRV0hLFxuICAgICAgUExPVF9UWVBFX0RFU0NSSVBUT1JTW1Bsb3RUeXBlLk5BUEFSSV9TQ0FUVEVSM0RdISxcbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5OQVBBUklfVk9MVU1FXSEsXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuTkFQQVJJX0lTT1NVUkZBQ0VdISxcbiAgICAgIC8vIEdhdGVkIGJ5IGByZXF1aXJlc1NwYXRpYWxEYXRhYCwgc28gdGhlIHNlbGVjdG9yIGhpZGVzIHRoZW0gdW50aWwgYSBkYXRhc2V0IGlzIHB1Ymxpc2hlZFxuICAgICAgLy8gKHRoZSAzRCBvbmUgYWxzbyBieSBgcmVxdWlyZXNTcGF0aWFsM2RgKS5cbiAgICAgIFBMT1RfVFlQRV9ERVNDUklQVE9SU1tQbG90VHlwZS5TUEFUSUFMX09NSUNTXSEsXG4gICAgICBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbUGxvdFR5cGUuU1BBVElBTF9PTUlDU18zRF0hLFxuICAgIF07XG4gIH1cblxuICAvKiogVGhlIG5hcGFyaSAzRCBkZWNpbWF0ZSBmYWN0b3IgKDEgPSBmdWxsIOKApiA4ID0g4oWbKS4gUmVhZCBieSB0aGUgdG9vbGJhciB0byBpbml0IHRoZSBjb250cm9sLiAqL1xuICBnZXRSZXNvbHV0aW9uU2NhbGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZXNvbHV0aW9uU2NhbGU7XG4gIH1cblxuICAvKiogU2V0IHRoZSBkZWNpbWF0ZSBmYWN0b3IgZm9yIHRoZSBuYXBhcmkgM0QgdHlwZXMuIFRha2VzIGVmZmVjdCBvbiB0aGUgbmV4dCAocmUpbG9hZCDigJQgdGhlIGhvc3RcbiAgICogIHJlLXBsb3RzIGFmdGVyIGNhbGxpbmcgdGhpcywgc2luY2UgZGVjaW1hdGlvbiBjaGFuZ2VzIHRoZSBmZXRjaGVkL2Fzc2VtYmxlZCBkYXRhLiAqL1xuICBzZXRSZXNvbHV0aW9uU2NhbGUoc2NhbGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3MucmVzb2x1dGlvblNjYWxlID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChzY2FsZSkpO1xuICB9XG5cbiAgLyoqIG5hcGFyaS1qcyBoYXMgdGhlIG5hdmlnYXRvciBhbmQgaW1hZ2Ugc21vb3RoaW5nIHRvbyAoaXRzIDJEIHZpZXdzKS4gKi9cbiAgZ2V0T3NkVmlld09wdGlvbnMoKTogSU9zZFZpZXdPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy52aWV3T3B0aW9ucztcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdPcHRpb25zOiBJT3NkVmlld09wdGlvbnMgPSB7XG4gICAgc2V0TmF2aWdhdG9yVmlzaWJsZTogKHZpc2libGUpID0+IHRoaXMuc2V0TmF2aWdhdG9yVmlzaWJsZSh2aXNpYmxlKSxcbiAgICBzZXRJbWFnZVNtb290aGluZ0VuYWJsZWQ6IChlbmFibGVkKSA9PiB0aGlzLnNldEltYWdlU21vb3RoaW5nRW5hYmxlZChlbmFibGVkKSxcbiAgfTtcblxuICAvKiogVGhlIDNEIGRlY2ltYXRlIGZhY3RvciAodGhlIDNEIHR5cGVzJyBSZXNvbHV0aW9uIGNvbnRyb2wpLiAqL1xuICBnZXRWb2x1bWVSZXNvbHV0aW9uKCk6IElWb2x1bWVSZXNvbHV0aW9uIHtcbiAgICByZXR1cm4gdGhpcy52b2x1bWVSZXNvbHV0aW9uO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgdm9sdW1lUmVzb2x1dGlvbjogSVZvbHVtZVJlc29sdXRpb24gPSB7XG4gICAgZ2V0OiAoKSA9PiB0aGlzLmdldFJlc29sdXRpb25TY2FsZSgpLFxuICAgIHNldDogKHNjYWxlKSA9PiB0aGlzLnNldFJlc29sdXRpb25TY2FsZShzY2FsZSksXG4gIH07XG5cbiAgLyoqIFdoZXJlIHRoZSBjYW1lcmEgc2V0dGxlZCwgZm9yIHRoZSBpbnRlbnNpdHkgaW5zZXQncyByZS1zYW1wbGluZy4gKi9cbiAgZ2V0SW50ZW5zaXR5U2FtcGxpbmcoKTogSUludGVuc2l0eVZpZXdwb3J0U291cmNlIHtcbiAgICByZXR1cm4gdGhpcy52aWV3cG9ydFNvdXJjZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdwb3J0U291cmNlOiBJSW50ZW5zaXR5Vmlld3BvcnRTb3VyY2UgPSB7XG4gICAgZ2V0Vmlld3BvcnRDaGFuZ2UkOiAoKSA9PiB0aGlzLnZpZXdwb3J0Q2hhbmdlJC5hc09ic2VydmFibGUoKSxcbiAgfTtcblxuICAvLyDilIDilIAgSVJlZ2lvblN0b3JlICsgY2xhc3NpZmljYXRpb24gY29sb3VycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gSW5oZXJpdGVkIGZyb20gQmFzZVN0b3JlVmlzdWFsaXplciDigJQgcHVyZSBkZWxlZ2F0aW9ucyB0byB0aGUgc2hhcmVkXG4gIC8vIFJlZ2lvblN0b3JlIC8gVmlzdWFsaXplclN0b3JlIChpZGVudGljYWwgdG8gdGhlIE9TRCBiYWNrZW5kKS5cblxuICAvLyDilIDilIAgSVRvb2xDb250cm9sbGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBzZXRBY3RpdmVUb29sIGFuZCB0aGUgcGVyLXRvb2wgc2V0dGVycyBydW4gaW4gQmFzZVN0b3JlVmlzdWFsaXplciBvdmVyIHRoaXMuY2FudmFzVG9vbHM7IHRoZVxuICAvLyBwb2ludGVyIGFuZCByZWFkYmFjayBnYXRpbmcsIGFuZCB0aGUgU0FNIC8gY2VsbHBvc2UgcnVucywgYXJlIHRoZSB0b29sIGJyaWRnZSdzLlxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBiZWZvcmVUb29sQ2hhbmdlKG5leHQ6IENhbnZhc1Rvb2xJZCB8IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b29scy5iZWZvcmVUb29sQ2hhbmdlKG5leHQpO1xuICB9XG4gIHNlZ21lbnRSZWN0YW5nbGVzKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHMuc2VnbWVudFJlY3RhbmdsZXMoKTtcbiAgfVxuICBzZWdtZW50UmVjdGFuZ2xlc0NlbGxwb3NlKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHMuc2VnbWVudFJlY3RhbmdsZXNDZWxscG9zZSgpO1xuICB9XG4gIHNldFNhbU1vZGVsKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNhbVRvb2wuc2V0TW9kZWwoaWQpO1xuICAgIHRoaXMuc2FtUG9pbnRUb29sLnNldE1vZGVsKGlkKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJRGlzcGxheU9wdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIEluaGVyaXRlZCBmcm9tIEJhc2VTdG9yZVZpc3VhbGl6ZXIg4oCUIHB1cmUgZGVsZWdhdGlvbnMgdG8gdGhlIHNoYXJlZFxuICAvLyBWaXN1YWxpemVyU3RvcmUgKGlkZW50aWNhbCB0byB0aGUgT1NEIGJhY2tlbmQpLlxuXG4gIC8vIOKUgOKUgCBJVmlzdWFsaXplciBjb21wb3NpdGUgbWVtYmVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0UmVnaW9uT3ZlcmxheSgpOiBJUmVnaW9uT3ZlcmxheSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLnJlZ2lvbk92ZXJsYXk7XG4gIH1cbiAgZ2V0SXNvc3VyZmFjZUNvbnRyb2xzKCk6IElJc29zdXJmYWNlQ29udHJvbHMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zY2VuZT8uaXNvQ29udHJvbHM/LigpID8/IG51bGw7XG4gIH1cbiAgZ2V0SW50ZW5zaXR5Q29udHJvbHMoKTogSUludGVuc2l0eUNvbnRyb2xzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0U3VyZmFjZTNkQ29udHJvbHMoKTogSVN1cmZhY2UzZENvbnRyb2xzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2NlbmU/LnN1cmZhY2UzZENvbnRyb2xzPy4oKSA/PyBudWxsO1xuICB9XG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGwge1xuICAgIGlmICghdGhpcy52aWV3ZXIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnNjZW5lPy5oaXN0b2dyYW0oY2hhbm5lbEluZGV4LCBiaW5zKSA/PyBudWxsO1xuICB9XG4gIGdldEhpc3RvZ3JhbSQoY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IE9ic2VydmFibGU8SUhpc3RvZ3JhbSB8IG51bGw+IHtcbiAgICAvLyA+OC1iaXQgY2hhbm5lbHM6IHRoZSB0cnVlIG5hdGl2ZSBkaXN0cmlidXRpb24gZnJvbSB0aGUgc2VydmVyICh0aGUgZGlzcGxheWVkIHBpeGVscyBhcmVcbiAgICAvLyA4LWJpdCwgc28gdGhlIGNsaWVudCBoaXN0b2dyYW0gd291bGQgYmUgY2xpcHBlZCkuIDgtYml0IGNoYW5uZWxzIHVzZSB0aGUgY2xpZW50IHBhdGguXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudGlsZUNsaWVudC5uYXRpdmVIaXN0b2dyYW0kKHRoaXMubG9hZGVkPy5pbWFnZUluZm8sIHRoaXMubG9hZGVkPy56ID8/IDAsIGNoYW5uZWxJbmRleCwgYmlucykgPz9cbiAgICAgIG9mKHRoaXMuZ2V0SGlzdG9ncmFtKGNoYW5uZWxJbmRleCwgYmlucykpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBTYXZlIHRoZSBkaXNwbGF5ZWQgY29tcG9zaXRlIGFzIGEgUE5HLiBUaHJvdWdoIGZpbGUtc2F2ZXIsIHdoaWNoICh1bmxpa2UgcmV2b2tpbmcgYW4gb2JqZWN0XG4gICAqICBVUkwgc3RyYWlnaHQgYWZ0ZXIgYGEuY2xpY2soKWApIGRvZXMgbm90IHJhY2UgdGhlIGJyb3dzZXIncyBkb3dubG9hZC4gKi9cbiAgZXhwb3J0Q29tcG9zaXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZpZXdlcjtcbiAgICBpZiAoIXYpIHJldHVybjtcbiAgICB2b2lkIHZcbiAgICAgIC5zY3JlZW5zaG90KClcbiAgICAgIC50aGVuKChibG9iKSA9PiBzYXZlQXMoYmxvYiwgJ25hcGFyaS1qcy5wbmcnKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLndhcm4oJ1tuYXBhcmktanNdIFBORyBleHBvcnQgZmFpbGVkJywgZXJyKSk7XG4gIH1cbiAgLyoqIE5hdGl2ZS1iaXQtZGVwdGggKDE2LzMyLWJpdCkgbXVsdGktYmFuZCBUSUZGIGV4cG9ydCB2aWEgdGhlIHNlcnZlciBgL2V4cG9ydC90aWZmYCBlbmRwb2ludCDigJRcbiAgICogIHRoZSBkaXNwbGF5ZWQgUE5HIGlzIGFuIDgtYml0IGZpZ3VyZSwgdGhpcyBwcmVzZXJ2ZXMgdGhlIHRydWUgcGl4ZWwgdmFsdWVzLiBWaXNpYmxlIGNoYW5uZWxzXG4gICAqICBvbmx5IChvbWl0dGVkIHdoZW4gYWxsIGFyZSB2aXNpYmxlIOKGkiBzZXJ2ZXIgZGVmYXVsdCkuIE1pcnJvcnMgdGhlIE9TRCBiYWNrZW5kLiAqL1xuICBhc3luYyBleHBvcnREYXRhKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMudGlsZUNsaWVudC5leHBvcnRUaWZmKFxuICAgICAgdGhpcy5sb2FkZWQ/LnogPz8gMCxcbiAgICAgIHRoaXMuc3RvcmUuY3VycmVudENoYW5uZWxTdGF0ZXMoKSxcbiAgICAgIHRoaXMubG9hZGVkPy5maWxlbmFtZSxcbiAgICApO1xuICB9XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { colormapFromLut } from 'napari-js';
|
|
2
2
|
import { NO_CATEGORY, isCategoricalColumn, } from '../../../contracts/spatial-dataset.contract';
|
|
3
3
|
import { DEFAULT_CATEGORICAL_PALETTE, MISSING_COLOR, contrastWindow, parseHex, resolveCategoryColors, } from '../../../spatial/spatial-encoding';
|
|
4
|
-
import { POLYGON_LEVEL_MIN_CELL_PX, cellTypeColumnFor, cellsShown, polygonLevelFor, tileId, tilesInRect, typicalCellDiameter, } from '../../../spatial/lod';
|
|
4
|
+
import { POLYGON_LEVEL_MIN_CELL_PX, cellTypeColumnFor, cellsShown, drawnCellSets, polygonLevelFor, tileId, tilesInRect, typicalCellDiameter, } from '../../../spatial/lod';
|
|
5
5
|
import { filterRings, mergePolygonTiles } from '../../../spatial/spatial-tile-merge';
|
|
6
6
|
import { geneFilterKey } from '../../../spatial/spatial-gene-filter';
|
|
7
7
|
import { ContrastWindowCache } from '../napari-spatial-encoding';
|
|
@@ -204,13 +204,10 @@ export class CellLayers {
|
|
|
204
204
|
let nuclei = null;
|
|
205
205
|
let geometryKey;
|
|
206
206
|
if (tiled) {
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
? view.cellSet
|
|
210
|
-
: (tiled.defaultSet ?? tiled.sets[0]?.name);
|
|
211
|
-
if (!set)
|
|
207
|
+
const drawn = drawnCellSets(tiled, view.cellSet);
|
|
208
|
+
if (!drawn)
|
|
212
209
|
return null;
|
|
213
|
-
const
|
|
210
|
+
const { set, nucleusSet } = drawn;
|
|
214
211
|
const keys = tilesInRect(rect, level, tiled.levels, tiled.bounds, MAX_CELL_TILES);
|
|
215
212
|
geometryKey = `${dataset.id}|${set}|${nucleusSet ?? ''}|${hiddenKey}|${keys.map(tileId).join(',')}`;
|
|
216
213
|
if (geometryKey === this.cellGeometryKey && this.currentRings) {
|
|
@@ -272,4 +269,4 @@ function categoryRgba(meta) {
|
|
|
272
269
|
const hex = meta && meta.kind === 'categorical' ? resolveCategoryColors(meta) : [DEFAULT_CATEGORICAL_PALETTE[0]];
|
|
273
270
|
return hex.map((h) => rgba01(parseHex(h)));
|
|
274
271
|
}
|
|
275
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1sYXllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFDTCxXQUFXLEVBS1gsbUJBQW1CLEdBQ3BCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsRUFDUixxQkFBcUIsR0FDdEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUtqRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFvQjFCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQWNyQixZQUNtQixJQUFxQixFQUNyQixNQUFxQyxFQUNyQyxNQUF5QixFQUN6QixJQUFvQjtRQUhwQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUErQjtRQUNyQyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQWpCL0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDOUIsMEVBQTBFO1FBQ2xFLGlCQUFZLEdBQThC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TUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbG9ybWFwRnJvbUx1dCB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IENvbG9ybWFwLCBSR0JBIH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUgeyBSZ2IgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7XG4gIE5PX0NBVEVHT1JZLFxuICBTcGF0aWFsQ29sdW1uLFxuICBTcGF0aWFsRGF0YXNldCxcbiAgU3BhdGlhbFBvbHlnb25UaWxlLFxuICBTcGF0aWFsUG9seWdvbnMsXG4gIGlzQ2F0ZWdvcmljYWxDb2x1bW4sXG59IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFLFxuICBNSVNTSU5HX0NPTE9SLFxuICBjb250cmFzdFdpbmRvdyxcbiAgcGFyc2VIZXgsXG4gIHJlc29sdmVDYXRlZ29yeUNvbG9ycyxcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25NYXNrIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5pbXBvcnQge1xuICBEYXRhUmVjdCxcbiAgUE9MWUdPTl9MRVZFTF9NSU5fQ0VMTF9QWCxcbiAgY2VsbFR5cGVDb2x1bW5Gb3IsXG4gIGNlbGxzU2hvd24sXG4gIHBvbHlnb25MZXZlbEZvcixcbiAgdGlsZUlkLFxuICB0aWxlc0luUmVjdCxcbiAgdHlwaWNhbENlbGxEaWFtZXRlcixcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9sb2QnO1xuaW1wb3J0IHsgZmlsdGVyUmluZ3MsIG1lcmdlUG9seWdvblRpbGVzIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXRpbGUtbWVyZ2UnO1xuaW1wb3J0IHsgZ2VuZUZpbHRlcktleSB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1nZW5lLWZpbHRlcic7XG5pbXBvcnQgeyBDb250cmFzdFdpbmRvd0NhY2hlIH0gZnJvbSAnLi4vbmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcnO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yaWNhbExvb2t1cCwgSGlkZGVuQ29kZXMgfSBmcm9tICcuL2NhdGVnb3JpY2FsLWxvb2t1cCc7XG5pbXBvcnQgdHlwZSB7IE9yZGVyZWRMYXllckdyb3VwcywgVGlsZUdyb3VwIH0gZnJvbSAnLi9sYXllci1ncm91cHMnO1xuaW1wb3J0IHR5cGUgeyBQbGFuQ29udGV4dCB9IGZyb20gJy4vcGxhbi1jb250ZXh0JztcblxuY29uc3QgTUFYX0NFTExfVElMRVMgPSA0ODtcblxuLyoqIFRoZSBjZWxscycgY29sb3VycyBhcyBhIHNoYXBlcyBsYXllciB0YWtlcyB0aGVtOiBwZXItc2hhcGUgUkdCQSwgdmFsdWVzIG92ZXIgYSBjb2xvcm1hcCwgb3JcbiAqICBvbmUgY29sb3VyLiAqL1xuaW50ZXJmYWNlIENlbGxDb2xvcnMge1xuICB2YWx1ZXM/OiBGbG9hdDMyQXJyYXk7XG4gIGNvbG9ybWFwPzogQ29sb3JtYXA7XG4gIGNvbnRyYXN0TGltaXRzPzogW251bWJlciwgbnVtYmVyXTtcbiAgY29sb3I/OiBSR0JBO1xuICBmYWNlQ29sb3I/OiBGbG9hdDMyQXJyYXk7XG59XG5cbi8qKiBXaGF0IHRoZSBjZWxsIGxheWVycyBuZWVkIGZyb20gdGhlIHNlcnZpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxMYXllcnNIb3N0IHtcbiAgLyoqIFRoZSBjb250aW51b3VzIExVVCB0aGUgdmlldyBpcyB1c2luZyAoc28gY2VsbHMgY29sb3VyZWQgYnkgYSBnZW5lIG1hdGNoIHRoZSBtYXJrZXJzKS4gKi9cbiAgY29udGludW91c0x1dCh2aWV3OiBTcGF0aWFsVmlld1N0YXRlKTogUmdiW107XG4gIC8qKiBPdXRsaW5lcyBhcHBlYXJlZCBvciBkaXNhcHBlYXJlZDogdGhlIG1hcmtlcnMnIHZpc2liaWxpdHkgZm9sbG93cy4gKi9cbiAgcG9seWdvbnNTaG93bkNoYW5nZWQoc2hvd246IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBjZWxsIG91dGxpbmVzIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXcsIGF0IHRoZSBwb2x5Z29uIGxldmVsIHRoZSB6b29tIGNhbGxzIGZvcjogYSBmaWxsLFxuICogYW4gb3V0bGluZSBvciBib3RoIChwbHVzIG51Y2xldXMgb3V0bGluZXMgZm9yIHRoZSBcImJvdGhcIiBjZWxsIHNldCksIGNvbG91cmVkIGJ5IHRoZSB2aWV3J3NcbiAqIGNlbGwtY29sb3VyIG1vZGUsIHdpdGggc3dpdGNoZWQtb2ZmIGdyb3VwcyBsZWZ0IG91dCBvZiB0aGUgZ2VvbWV0cnkuXG4gKlxuICogR2VvbWV0cnkgYW5kIHN0eWxlIGFyZSBrZXllZCBhcGFydCwgc28gYSByZWNvbG91ciAoYSBuZXcgY2VsbC10eXBlIGNvbHVtbiwgYSBzZWxlY3Rpb24pXG4gKiByZXdyaXRlcyB0aGUgcGVyLXNoYXBlIHZhbHVlcyBvZiB0aGUgZXhpc3RpbmcgbGF5ZXJzIGFuZCBuZXZlciByZS1leHBhbmRzIHRoZSByaW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIENlbGxMYXllcnMge1xuICBwcml2YXRlIHBvbHlnb25zU2hvd24gPSBmYWxzZTtcbiAgLyoqIFJpbmdzIGN1cnJlbnRseSBkcmF3biBhbmQgdGhlIChkYXRhc2V0LCBzZXQsIHRpbGVzKSB0aGV5IGNhbWUgZnJvbS4gKi9cbiAgcHJpdmF0ZSBjdXJyZW50UmluZ3M6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNlbGxHZW9tZXRyeUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudE51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2VsbFN0eWxlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIFNlbGVjdGlvbiBpZGVudGl0eSDihpIgcmV2aXNpb24sIHNvIGEgY2hhbmdlIGtleSBjYW4gbmFtZSBhIHNlbGVjdGlvbiBjaGVhcGx5LiAqL1xuICBwcml2YXRlIGxhc3RTZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2VsZWN0aW9uUmV2aXNpb24gPSAwO1xuICAvKiogQ29udGludW91cyBjb2xvdXJpbmdzJyB3aW5kb3dzLCBwZXIgKHZlY3RvciwgY2xpcCwgbG9nKTogYGNvbnRyYXN0V2luZG93YCBzb3J0cyBldmVyeVxuICAgKiAgdmFsdWUsIGFuZCBhIHNlbGVjdGlvbiBvciBvcGFjaXR5IGNoYW5nZSByZWNvbG91cnMgd2l0aCB0aGUgdmVjdG9yIHVuY2hhbmdlZCAoU1BBVElBTC0xMikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29udHJhc3RXaW5kb3dzID0gbmV3IENvbnRyYXN0V2luZG93Q2FjaGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwczogT3JkZXJlZExheWVyR3JvdXBzPFRpbGVHcm91cD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb29rdXA6IENhdGVnb3JpY2FsTG9va3VwLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogQ2VsbExheWVyc0hvc3QsXG4gICkge31cblxuICAvKiogVHJ1ZSB3aGlsZSBvdXRsaW5lcyBhcmUgb24gc2NyZWVuIOKAlCB0aGUgc2VydmljZSBoaWRlcyBpdHMgZG90cyB0aGVuLiAqL1xuICBnZXQgb3V0bGluZXNTaG93bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wb2x5Z29uc1Nob3duO1xuICB9XG5cbiAgLyoqIFRoZSB2aWV3ZXIgd2VudCBhd2F5IChpdHMgbGF5ZXJzIHdpdGggaXQpOiB0aGUgb3V0bGluZXMgYXJlIG5vIGxvbmdlciBzaG93bi4gKi9cbiAgZGV0YWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBEcmF3IHRoZSBjZWxscyBjb3ZlcmluZyBgcmVjdGAgYXQgdGhlIGxldmVsIGBweFBlclVuaXRgIGNhbGxzIGZvciwgb3IgZHJvcCB0aGVtLiAqL1xuICBhc3luYyBwbGFuKFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayxcbiAgICByZWN0OiBEYXRhUmVjdCxcbiAgICBweFBlclVuaXQ6IG51bWJlcixcbiAgICBjdHg6IFBsYW5Db250ZXh0LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aWxlZCA9IGRhdGFzZXQucG9seWdvblRpbGVzO1xuICAgIGNvbnN0IHdob2xlID0gIXRpbGVkICYmIGRhdGFzZXQucG9seWdvbnMgJiYgdGhpcy5wb3J0LmdldFBvbHlnb25zO1xuICAgIGlmICghY2VsbHNTaG93bihkYXRhc2V0LCB2aWV3KSB8fCAoIXRpbGVkICYmICF3aG9sZSkpIHtcbiAgICAgIHRoaXMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaWFtZXRlciA9IHR5cGljYWxDZWxsRGlhbWV0ZXIoZGF0YXNldC5vYnNlcnZhdGlvbnMucmFkaXVzKTtcbiAgICAvLyBXaG9sZS1kYXRhc2V0IHJpbmdzIGhhdmUgb25lIGxldmVsIGFuZCBubyBjb2Fyc2VyIGZhbGxiYWNrLCBzbyB0aGV5IGFyZSBkcmF3biBhc1xuICAgIC8vIHNvb24gYXMgYSBjZWxsIGlzIGJpZyBlbm91Z2ggdG8gcmVhZCBhcyBhIHNoYXBlIHJhdGhlciB0aGFuIGEgZG90LlxuICAgIGNvbnN0IGxldmVsID0gdGlsZWRcbiAgICAgID8gcG9seWdvbkxldmVsRm9yKHB4UGVyVW5pdCwgZGlhbWV0ZXIsIHRpbGVkLmxldmVscy5sZW5ndGgpXG4gICAgICA6IHB4UGVyVW5pdCAqIGRpYW1ldGVyID49IFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFhbMl1cbiAgICAgICAgPyAwXG4gICAgICAgIDogLTE7XG4gICAgaWYgKGxldmVsIDwgMCkge1xuICAgICAgdGhpcy5kcm9wKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR3JvdXBzIHN3aXRjaGVkIG9mZiBpbiB0aGUgbGlzdDogdGhlaXIgY2VsbHMgYXJlIGxlZnQgb3V0IG9mIHRoZSBnZW9tZXRyeS5cbiAgICBjb25zdCBoaWRkZW4gPSBhd2FpdCB0aGlzLmxvb2t1cC5oaWRkZW5Db2RlcyhkYXRhc2V0LCB2aWV3KTtcbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcbiAgICBjb25zdCBsYWJlbCA9IHZpZXcuY2VsbFNldCA9PT0gJ2JvdGgnID8gJ0NlbGxzIGFuZCBudWNsZWknIDogdmlldy5jZWxsU2V0ID09PSAnbnVjbGV1cycgPyAnTnVjbGVpJyA6ICdDZWxscyc7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBhd2FpdCBjdHgudHJhY2sobGFiZWwsIHRoaXMuY2VsbEdlb21ldHJ5KGRhdGFzZXQsIHZpZXcsIHJlY3QsIGxldmVsLCBoaWRkZW4sIGN0eCkpO1xuICAgIGlmICghZ2VvbWV0cnkpIHJldHVybjtcbiAgICBjb25zdCB7IHJpbmdzLCBudWNsZWksIGdlb21ldHJ5S2V5IH0gPSBnZW9tZXRyeTtcblxuICAgIGNvbnN0IGdlb21ldHJ5Q2hhbmdlZCA9IGdlb21ldHJ5S2V5ICE9PSB0aGlzLmNlbGxHZW9tZXRyeUtleTtcbiAgICBjb25zdCBzdHlsZUtleSA9IFtcbiAgICAgIGdlb21ldHJ5S2V5LFxuICAgICAgdmlldy5jZWxsQ29sb3JNb2RlLFxuICAgICAgdmlldy5jZWxsQ29sb3JHZW5lLFxuICAgICAgdmlldy5jZWxsU2luZ2xlQ29sb3IsXG4gICAgICBjZWxsVHlwZUNvbHVtbkZvcihkYXRhc2V0LCB2aWV3KSxcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmV2KHNlbGVjdGlvbiksXG4gICAgICB2aWV3LmxvZ1NjYWxlLFxuICAgICAgdmlldy5wZXJjZW50aWxlQ2xpcC5qb2luKCksXG4gICAgICBKU09OLnN0cmluZ2lmeSh2aWV3LmNvbnRpbnVvdXNDb2xvcm1hcCksXG4gICAgICB2aWV3LmNlbGxEcmF3LFxuICAgICAgdmlldy5jZWxsT3BhY2l0eSxcbiAgICBdLmpvaW4oJ3wnKTtcbiAgICBjb25zdCBwcmVzZW50ID0gKFsnY2VsbEZpbGwnLCAnY2VsbE91dGxpbmUnLCAnbnVjbGV1c091dGxpbmUnXSBhcyBjb25zdCkuc29tZSgoZykgPT4gdGhpcy5ncm91cHMuc2hvd24oZykpO1xuICAgIGlmICghZ2VvbWV0cnlDaGFuZ2VkICYmIHN0eWxlS2V5ID09PSB0aGlzLmNlbGxTdHlsZUtleSAmJiBwcmVzZW50KSB7XG4gICAgICB0aGlzLnNldFBvbHlnb25zU2hvd24odHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbG9ycyA9IGF3YWl0IHRoaXMuY2VsbENvbG9ycyhkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24sIHJpbmdzLm9ic2VydmF0aW9uKTtcbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcblxuICAgIHRoaXMuY3VycmVudFJpbmdzID0gcmluZ3M7XG4gICAgdGhpcy5jdXJyZW50TnVjbGVpID0gbnVjbGVpO1xuICAgIC8vIEEgZ2VvbWV0cnkgbWlzc2luZyBhIGZhaWxlZCB0aWxlIGlzIGRyYXduIGJ1dCBub3QgcmVtZW1iZXJlZCwgc28gdGhlIHJldHJ5IHJlZmV0Y2hlcyBpdC5cbiAgICB0aGlzLmNlbGxHZW9tZXRyeUtleSA9IGN0eC5pbmNvbXBsZXRlID8gbnVsbCA6IGdlb21ldHJ5S2V5O1xuICAgIHRoaXMuY2VsbFN0eWxlS2V5ID0gc3R5bGVLZXk7XG4gICAgdGhpcy5kcmF3Q2VsbHMoZGF0YXNldCwgdmlldywgZ2VvbWV0cnksIGNvbG9ycywgZ2VvbWV0cnlDaGFuZ2VkKTtcbiAgICB0aGlzLnNldFBvbHlnb25zU2hvd24odHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwgbGF5ZXJzOiB0aGUgZmlsbCBhbmQgdGhlIG91dGxpbmUgdGhlIHZpZXcncyBkcmF3IG1vZGUgYXNrcyBmb3IsIGFuZCB3aXRoIFwiYm90aFwiIHRoZVxuICAgKiBudWNsZXVzIG91dGxpbmVzIG92ZXIgdGhlbS4gQSBnZW9tZXRyeSBjaGFuZ2UgYnVpbGRzIG5ldyBsYXllcnM7IGEgc3R5bGUgY2hhbmdlIHJlc3R5bGVzIHRoZW0uXG4gICAqL1xuICBwcml2YXRlIGRyYXdDZWxscyhcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHsgcmluZ3MsIG51Y2xlaSB9OiB7IHJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGU7IG51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCB9LFxuICAgIGNvbG9yczogQ2VsbENvbG9ycyxcbiAgICBnZW9tZXRyeUNoYW5nZWQ6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IGRhdGFzZXQuaW1hZ2VSZWY7XG4gICAgY29uc3QgY29tbW9uID0geyBzY2FsZTogcmVmPy5zY2FsZSA/PyBbMSwgMV0sIHRyYW5zbGF0ZTogcmVmPy50cmFuc2xhdGUgPz8gWzAsIDBdIH0gYXMgY29uc3Q7XG4gICAgY29uc3QgZmlsbCA9IHZpZXcuY2VsbERyYXcgIT09ICdvdXRsaW5lJztcbiAgICBjb25zdCBvdXRsaW5lID0gdmlldy5jZWxsRHJhdyAhPT0gJ2ZpbGwnO1xuXG4gICAgdGhpcy5ncm91cHMudXBzZXJ0U2hhcGVzKCdjZWxsRmlsbCcsIGZpbGwsIGdlb21ldHJ5Q2hhbmdlZCwgcmluZ3MsIHtcbiAgICAgIG5hbWU6ICdjZWxscycsXG4gICAgICBkcmF3OiAnZmlsbCcsXG4gICAgICBvcGFjaXR5OiB2aWV3LmNlbGxPcGFjaXR5LFxuICAgICAgLi4uY29sb3JzLFxuICAgICAgLi4uY29tbW9uLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcyhcbiAgICAgICdjZWxsT3V0bGluZScsXG4gICAgICBvdXRsaW5lLFxuICAgICAgZ2VvbWV0cnlDaGFuZ2VkLFxuICAgICAgcmluZ3MsXG4gICAgICBmaWxsXG4gICAgICAgID8gLy8gT3ZlciBhIGZpbGwsIGEgZGFyayBvdXRsaW5lIHNlcGFyYXRlcyBuZWlnaGJvdXJzIG9mIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgICAgeyBuYW1lOiAnY2VsbCBvdXRsaW5lcycsIGRyYXc6ICdvdXRsaW5lJywgY29sb3I6IFswLjA4LCAwLjA4LCAwLjEsIDFdLCBvcGFjaXR5OiAwLjcsIC4uLmNvbW1vbiB9XG4gICAgICAgIDogeyBuYW1lOiAnY2VsbCBvdXRsaW5lcycsIGRyYXc6ICdvdXRsaW5lJywgb3BhY2l0eTogMSwgLi4uY29sb3JzLCAuLi5jb21tb24gfSxcbiAgICApO1xuICAgIC8vIFwiQm90aFwiOiBudWNsZWkgb3V0bGluZWQgb3ZlciB0aGUgY2VsbHMsIGxpZ2h0IHNvIHRoZXkgcmVhZCBhZ2FpbnN0IGFueSBmaWxsLlxuICAgIGlmIChudWNsZWkpIHtcbiAgICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcygnbnVjbGV1c091dGxpbmUnLCB0cnVlLCBnZW9tZXRyeUNoYW5nZWQsIG51Y2xlaSwge1xuICAgICAgICBuYW1lOiAnbnVjbGV1cyBvdXRsaW5lcycsXG4gICAgICAgIGRyYXc6ICdvdXRsaW5lJyxcbiAgICAgICAgY29sb3I6IFswLjk1LCAwLjk1LCAwLjk4LCAxXSxcbiAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAuLi5jb21tb24sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncm91cHMuZHJvcCgnbnVjbGV1c091dGxpbmUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdGlvblJldihzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrKTogbnVtYmVyIHtcbiAgICBpZiAoc2VsZWN0aW9uICE9PSB0aGlzLmxhc3RTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmV2aXNpb24rKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uUmV2aXNpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJpbmdzJyBjb2xvdXJzIGJ5IHRoZWlyIG93bmVycywgYnkgdGhlIHZpZXcncyBjZWxsLWNvbG91ciBtb2RlIChYZW5pdW0gRXhwbG9yZXIncyBcIkNlbGxcbiAgICogQ29sb3JcIik6IG9uZSBSR0JBIHBlciBzaGFwZSBmb3IgYSBncm91cGluZywgdmFsdWVzICsgY29sb3JtYXAgZm9yIGEgbWVhc3VyZW1lbnQsIG9uZSBjb2xvdXJcbiAgICogZm9yIFwic2luZ2xlXCIuIEEgc2VsZWN0aW9uIG11dGVzIHdoYXQgaXQgbGVhdmVzIG91dC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2VsbENvbG9ycyhcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICAgb3duZXJzOiBVaW50MzJBcnJheSxcbiAgKTogUHJvbWlzZTxDZWxsQ29sb3JzPiB7XG4gICAgY29uc3QgbXV0ZWQgPSBzZWxlY3Rpb24uY291bnQgPiAwID8gc2VsZWN0aW9uLm1hc2sgOiBudWxsO1xuICAgIGNvbnN0IG1vZGUgPSB2aWV3LmNlbGxDb2xvck1vZGU7XG5cbiAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IHBhcnNlSGV4KHZpZXcuY2VsbFNpbmdsZUNvbG9yKTtcbiAgICAgIHJldHVybiB7IGNvbG9yOiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NSwgMV0gfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250aW51b3VzID0gYXN5bmMgKHJhdzogRmxvYXQzMkFycmF5LCBsb2c6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkob3duZXJzLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG93bmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB2ID0gcmF3W293bmVyc1tpXV0gPz8gTmFOO1xuICAgICAgICB2YWx1ZXNbaV0gPSBsb2cgPyBNYXRoLmxvZzFwKE1hdGgubWF4KDAsIHYpKSA6IHY7XG4gICAgICB9XG4gICAgICBjb25zdCBbY2xpcExvLCBjbGlwSGldID0gdmlldy5wZXJjZW50aWxlQ2xpcDtcbiAgICAgIC8vIEtleWVkIGJ5IHRoZSBTT1VSQ0UgdmVjdG9yICh0aGUgbG9nIGNvcHkgd291bGQgYmUgbmV3IG9uIGV2ZXJ5IGNhbGwpLCBhcyB0aGUgM0QgY2xvdWQncy5cbiAgICAgIGNvbnN0IFtsbywgaGldID0gdGhpcy5jb250cmFzdFdpbmRvd3MuZ2V0KHJhdywgY2xpcExvLCBjbGlwSGksIGxvZywgKCkgPT5cbiAgICAgICAgY29udHJhc3RXaW5kb3cobG9nID8gcmF3Lm1hcCgodikgPT4gTWF0aC5sb2cxcChNYXRoLm1heCgwLCB2KSkpIDogcmF3LCBjbGlwTG8sIGNsaXBIaSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBjb2xvcm1hcDogY29sb3JtYXBGcm9tTHV0KCdzcGF0aWFsLWNvbnRpbnVvdXMnLCB0aGlzLmhvc3QuY29udGludW91c0x1dCh2aWV3KSksXG4gICAgICAgIGNvbnRyYXN0TGltaXRzOiBbbG8sIGhpXSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGlmIChtb2RlID09PSAnZ2VuZScgJiYgdmlldy5jZWxsQ29sb3JHZW5lKSB7XG4gICAgICByZXR1cm4gY29udGludW91cyhhd2FpdCB0aGlzLnBvcnQuZ2V0RmVhdHVyZVZlY3Rvcih2aWV3LmNlbGxDb2xvckdlbmUpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKG1vZGUgPT09ICd0cmFuc2NyaXB0RGVuc2l0eScgJiYgZGF0YXNldC5jb2x1bW5zLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gJ3RyYW5zY3JpcHRfZGVuc2l0eScpKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBhd2FpdCB0aGlzLnBvcnQuZ2V0Q29sdW1uKCd0cmFuc2NyaXB0X2RlbnNpdHknKTtcbiAgICAgIGlmICghaXNDYXRlZ29yaWNhbENvbHVtbihjb2x1bW4pKSByZXR1cm4gY29udGludW91cyhjb2x1bW4udmFsdWVzLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBtb2RlID09PSAnc2VnbWVudGF0aW9uJyAmJiBkYXRhc2V0LmNvbHVtbnMuc29tZSgoYykgPT4gYy5uYW1lID09PSAnc2VnbWVudGF0aW9uX21ldGhvZCcpXG4gICAgICAgID8gJ3NlZ21lbnRhdGlvbl9tZXRob2QnXG4gICAgICAgIDogY2VsbFR5cGVDb2x1bW5Gb3IoZGF0YXNldCwgdmlldyk7XG4gICAgY29uc3QgY29kZXMgPSBuYW1lID8gYXdhaXQgdGhpcy5sb29rdXAuY29kZXMobmFtZSkgOiBudWxsO1xuICAgIGNvbnN0IHBhbGV0dGUgPSBjYXRlZ29yeVJnYmEoY29kZXM/Lm1ldGEgPz8gbnVsbCk7XG4gICAgY29uc3QgbWlzc2luZyA9IHJnYmEwMShNSVNTSU5HX0NPTE9SKTtcbiAgICAvLyBPbmUgUkdCQSBwZXIgc2hhcGUgKG5hcGFyaSBTaGFwZXMnIGBmYWNlX2NvbG9yYCk6IGFueSBudW1iZXIgb2YgY2F0ZWdvcmllcyBrZWVwcyBpdHMgb3duXG4gICAgLy8gY29sb3VyLCB3aGVyZSBhIGNvbG9ybWFwIGJhbmQgcGVyIGNhdGVnb3J5IHJhbiBvdXQgb2YgTFVUIGVudHJpZXMgcGFzdCB+MTI3LlxuICAgIGNvbnN0IGZhY2VDb2xvciA9IG5ldyBGbG9hdDMyQXJyYXkob3duZXJzLmxlbmd0aCAqIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3duZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvID0gb3duZXJzW2ldO1xuICAgICAgY29uc3QgY29kZSA9ICFjb2RlcyB8fCAobXV0ZWQgJiYgIW11dGVkW29dKSA/IE5PX0NBVEVHT1JZIDogY29kZXMuY29kZXNbb107XG4gICAgICBmYWNlQ29sb3Iuc2V0KHBhbGV0dGVbY29kZV0gPz8gbWlzc2luZywgaSAqIDQpO1xuICAgIH1cbiAgICByZXR1cm4geyBmYWNlQ29sb3IgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY2VsbCByaW5ncyAoYW5kLCBmb3IgXCJib3RoXCIsIHRoZSBudWNsZXVzIHJpbmdzKSBjb3ZlcmluZyBgcmVjdGAgYXQgYGxldmVsYCwgbWludXNcbiAgICogdGhlIGhpZGRlbiBncm91cHMg4oCUIHJldXNlZCB3aGVuIG5vdGhpbmcgdGhhdCBkZWNpZGVzIHRoZW0gY2hhbmdlZC4gTnVsbCB3aGVuIHRoZVxuICAgKiB2aWV3IHdlbnQgc3RhbGUgb3IgdGhlIGRhdGFzZXQgaGFzIG5vIHNldCB0byBkcmF3LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjZWxsR2VvbWV0cnkoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICByZWN0OiBEYXRhUmVjdCxcbiAgICBsZXZlbDogbnVtYmVyLFxuICAgIGhpZGRlbjogSGlkZGVuQ29kZXMgfCBudWxsLFxuICAgIGN0eDogUGxhbkNvbnRleHQsXG4gICk6IFByb21pc2U8eyByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlOyBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGw7IGdlb21ldHJ5S2V5OiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICBjb25zdCB0aWxlZCA9IGRhdGFzZXQucG9seWdvblRpbGVzO1xuICAgIGNvbnN0IGhpZGRlbktleSA9IGAke3ZpZXcuaGlkZGVuR3JvdXBzLmpvaW4oJ1xcdTAwMDEnKX18JHtnZW5lRmlsdGVyS2V5KHZpZXcpfWA7XG4gICAgbGV0IHJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGU7XG4gICAgbGV0IG51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGdlb21ldHJ5S2V5OiBzdHJpbmc7XG4gICAgaWYgKHRpbGVkKSB7XG4gICAgICBjb25zdCBib3RoID0gdmlldy5jZWxsU2V0ID09PSAnYm90aCc7XG4gICAgICBjb25zdCBzZXQgPVxuICAgICAgICAhYm90aCAmJiB2aWV3LmNlbGxTZXQgJiYgdGlsZWQuc2V0cy5zb21lKChzKSA9PiBzLm5hbWUgPT09IHZpZXcuY2VsbFNldClcbiAgICAgICAgICA/IHZpZXcuY2VsbFNldFxuICAgICAgICAgIDogKHRpbGVkLmRlZmF1bHRTZXQgPz8gdGlsZWQuc2V0c1swXT8ubmFtZSk7XG4gICAgICBpZiAoIXNldCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBudWNsZXVzU2V0ID0gYm90aCA/IHRpbGVkLnNldHMuZmluZCgocykgPT4gcy5uYW1lICE9PSBzZXQpPy5uYW1lIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qga2V5cyA9IHRpbGVzSW5SZWN0KHJlY3QsIGxldmVsLCB0aWxlZC5sZXZlbHMsIHRpbGVkLmJvdW5kcywgTUFYX0NFTExfVElMRVMpO1xuICAgICAgZ2VvbWV0cnlLZXkgPSBgJHtkYXRhc2V0LmlkfXwke3NldH18JHtudWNsZXVzU2V0ID8/ICcnfXwke2hpZGRlbktleX18JHtrZXlzLm1hcCh0aWxlSWQpLmpvaW4oJywnKX1gO1xuICAgICAgaWYgKGdlb21ldHJ5S2V5ID09PSB0aGlzLmNlbGxHZW9tZXRyeUtleSAmJiB0aGlzLmN1cnJlbnRSaW5ncykge1xuICAgICAgICByaW5ncyA9IHRoaXMuY3VycmVudFJpbmdzO1xuICAgICAgICBudWNsZWkgPSB0aGlzLmN1cnJlbnROdWNsZWk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbdGlsZXMsIG51Y2xldXNUaWxlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKHNldCwgay5sZXZlbCwgay5neCwgay5neSkpLFxuICAgICAgICAgIG51Y2xldXNTZXRcbiAgICAgICAgICAgID8gY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKG51Y2xldXNTZXQsIGsubGV2ZWwsIGsuZ3gsIGsuZ3kpKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUobnVsbCksXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybiBudWxsO1xuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKG1lcmdlUG9seWdvblRpbGVzKHRpbGVzKSwgaGlkZGVuKTtcbiAgICAgICAgbnVjbGVpID0gbnVjbGV1c1RpbGVzID8gZmlsdGVyUmluZ3MobWVyZ2VQb2x5Z29uVGlsZXMobnVjbGV1c1RpbGVzKSwgaGlkZGVuKSA6IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlb21ldHJ5S2V5ID0gYCR7ZGF0YXNldC5pZH18d2hvbGV8JHtoaWRkZW5LZXl9YDtcbiAgICAgIGlmIChnZW9tZXRyeUtleSA9PT0gdGhpcy5jZWxsR2VvbWV0cnlLZXkgJiYgdGhpcy5jdXJyZW50UmluZ3MpIHtcbiAgICAgICAgcmluZ3MgPSB0aGlzLmN1cnJlbnRSaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvbHlzOiBTcGF0aWFsUG9seWdvbnMgPSBhd2FpdCB0aGlzLnBvcnQuZ2V0UG9seWdvbnMhKCk7XG4gICAgICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIFdob2xlLWRhdGFzZXQgcmluZ3MgYXJlIGluZGV4LWFsaWduZWQgd2l0aCB0aGUgb2JzZXJ2YXRpb25zLlxuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKFxuICAgICAgICAgIHsgLi4ucG9seXMsIG9ic2VydmF0aW9uOiBVaW50MzJBcnJheS5mcm9tKHsgbGVuZ3RoOiBwb2x5cy5jb3VudCB9LCAoX3YsIGkpID0+IGkpIH0sXG4gICAgICAgICAgaGlkZGVuLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9O1xuICB9XG5cbiAgLyoqIFJlbW92ZSB0aGUgY2VsbCBsYXllcnMgYW5kIGZvcmdldCB3aGF0IHRoZXkgc2hvd2VkLiAqL1xuICBkcm9wKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ2NlbGxGaWxsJyk7XG4gICAgdGhpcy5ncm91cHMuZHJvcCgnY2VsbE91dGxpbmUnKTtcbiAgICB0aGlzLmdyb3Vwcy5kcm9wKCdudWNsZXVzT3V0bGluZScpO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51bGw7XG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBudWxsO1xuICAgIHRoaXMuY2VsbFN0eWxlS2V5ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IG51bGw7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9seWdvbnNTaG93bihzaG93bjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChzaG93biA9PT0gdGhpcy5wb2x5Z29uc1Nob3duKSByZXR1cm47XG4gICAgdGhpcy5wb2x5Z29uc1Nob3duID0gc2hvd247XG4gICAgdGhpcy5ob3N0LnBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duKTtcbiAgfVxufVxuXG4vKiogQW4gOC1iaXQgUkdCIGFzIGFuIG9wYXF1ZSAwLi4xIFJHQkEuICovXG5mdW5jdGlvbiByZ2JhMDEoW3IsIGcsIGJdOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiBSR0JBIHtcbiAgcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1LCAxXTtcbn1cblxuLyoqIEEgZ3JvdXBpbmcncyBjYXRlZ29yeSBjb2xvdXJzLCBhcyAwLi4xIFJHQkEgYnkgY2F0ZWdvcnkgY29kZSAob25lIGRlZmF1bHQgd2l0aG91dCBhIGdyb3VwaW5nKS4gKi9cbmZ1bmN0aW9uIGNhdGVnb3J5UmdiYShtZXRhOiBTcGF0aWFsQ29sdW1uWydtZXRhJ10gfCBudWxsKTogUkdCQVtdIHtcbiAgY29uc3QgaGV4ID0gbWV0YSAmJiBtZXRhLmtpbmQgPT09ICdjYXRlZ29yaWNhbCcgPyByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMobWV0YSkgOiBbREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFWzBdXTtcbiAgcmV0dXJuIGhleC5tYXAoKGgpID0+IHJnYmEwMShwYXJzZUhleChoKSkpO1xufVxuIl19
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1sYXllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFDTCxXQUFXLEVBS1gsbUJBQW1CLEdBQ3BCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsRUFDUixxQkFBcUIsR0FDdEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsYUFBYSxFQUNiLGVBQWUsRUFDZixNQUFNLEVBQ04sV0FBVyxFQUNYLG1CQUFtQixHQUNwQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFLakUsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBb0IxQjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFjckIsWUFDbUIsSUFBcUIsRUFDckIsTUFBcUMsRUFDckMsTUFBeUIsRUFDekIsSUFBb0I7UUFIcEIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFqQi9CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzlCLDBFQUEwRTtRQUNsRSxp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SUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRUQsMkNBQTJDO0FBQzNDLFNBQVMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQW9DO0lBQzFELE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQscUdBQXFHO0FBQ3JHLFNBQVMsWUFBWSxDQUFDLElBQWtDO0lBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2xvcm1hcEZyb21MdXQgfSBmcm9tICduYXBhcmktanMnO1xuaW1wb3J0IHR5cGUgeyBDb2xvcm1hcCwgUkdCQSB9IGZyb20gJ25hcGFyaS1qcyc7XG5cbmltcG9ydCB0eXBlIHsgUmdiIH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL2NvbG9ybWFwLWx1dCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxWaWV3U3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQge1xuICBOT19DQVRFR09SWSxcbiAgU3BhdGlhbENvbHVtbixcbiAgU3BhdGlhbERhdGFzZXQsXG4gIFNwYXRpYWxQb2x5Z29uVGlsZSxcbiAgU3BhdGlhbFBvbHlnb25zLFxuICBpc0NhdGVnb3JpY2FsQ29sdW1uLFxufSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmltcG9ydCB7XG4gIERFRkFVTFRfQ0FURUdPUklDQUxfUEFMRVRURSxcbiAgTUlTU0lOR19DT0xPUixcbiAgY29udHJhc3RXaW5kb3csXG4gIHBhcnNlSGV4LFxuICByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMsXG59IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1lbmNvZGluZyc7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uTWFzayB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuaW1wb3J0IHtcbiAgRGF0YVJlY3QsXG4gIFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFgsXG4gIGNlbGxUeXBlQ29sdW1uRm9yLFxuICBjZWxsc1Nob3duLFxuICBkcmF3bkNlbGxTZXRzLFxuICBwb2x5Z29uTGV2ZWxGb3IsXG4gIHRpbGVJZCxcbiAgdGlsZXNJblJlY3QsXG4gIHR5cGljYWxDZWxsRGlhbWV0ZXIsXG59IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvbG9kJztcbmltcG9ydCB7IGZpbHRlclJpbmdzLCBtZXJnZVBvbHlnb25UaWxlcyB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC10aWxlLW1lcmdlJztcbmltcG9ydCB7IGdlbmVGaWx0ZXJLZXkgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL3NwYXRpYWwtZ2VuZS1maWx0ZXInO1xuaW1wb3J0IHsgQ29udHJhc3RXaW5kb3dDYWNoZSB9IGZyb20gJy4uL25hcGFyaS1zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxMb29rdXAsIEhpZGRlbkNvZGVzIH0gZnJvbSAnLi9jYXRlZ29yaWNhbC1sb29rdXAnO1xuaW1wb3J0IHR5cGUgeyBPcmRlcmVkTGF5ZXJHcm91cHMsIFRpbGVHcm91cCB9IGZyb20gJy4vbGF5ZXItZ3JvdXBzJztcbmltcG9ydCB0eXBlIHsgUGxhbkNvbnRleHQgfSBmcm9tICcuL3BsYW4tY29udGV4dCc7XG5cbmNvbnN0IE1BWF9DRUxMX1RJTEVTID0gNDg7XG5cbi8qKiBUaGUgY2VsbHMnIGNvbG91cnMgYXMgYSBzaGFwZXMgbGF5ZXIgdGFrZXMgdGhlbTogcGVyLXNoYXBlIFJHQkEsIHZhbHVlcyBvdmVyIGEgY29sb3JtYXAsIG9yXG4gKiAgb25lIGNvbG91ci4gKi9cbmludGVyZmFjZSBDZWxsQ29sb3JzIHtcbiAgdmFsdWVzPzogRmxvYXQzMkFycmF5O1xuICBjb2xvcm1hcD86IENvbG9ybWFwO1xuICBjb250cmFzdExpbWl0cz86IFtudW1iZXIsIG51bWJlcl07XG4gIGNvbG9yPzogUkdCQTtcbiAgZmFjZUNvbG9yPzogRmxvYXQzMkFycmF5O1xufVxuXG4vKiogV2hhdCB0aGUgY2VsbCBsYXllcnMgbmVlZCBmcm9tIHRoZSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsTGF5ZXJzSG9zdCB7XG4gIC8qKiBUaGUgY29udGludW91cyBMVVQgdGhlIHZpZXcgaXMgdXNpbmcgKHNvIGNlbGxzIGNvbG91cmVkIGJ5IGEgZ2VuZSBtYXRjaCB0aGUgbWFya2VycykuICovXG4gIGNvbnRpbnVvdXNMdXQodmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFJnYltdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duOiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgY2VsbCBvdXRsaW5lcyBvZiB0aGUgMkQgc3BhdGlhbCB2aWV3LCBhdCB0aGUgcG9seWdvbiBsZXZlbCB0aGUgem9vbSBjYWxscyBmb3I6IGEgZmlsbCxcbiAqIGFuIG91dGxpbmUgb3IgYm90aCAocGx1cyBudWNsZXVzIG91dGxpbmVzIGZvciB0aGUgXCJib3RoXCIgY2VsbCBzZXQpLCBjb2xvdXJlZCBieSB0aGUgdmlldydzXG4gKiBjZWxsLWNvbG91ciBtb2RlLCB3aXRoIHN3aXRjaGVkLW9mZiBncm91cHMgbGVmdCBvdXQgb2YgdGhlIGdlb21ldHJ5LlxuICpcbiAqIEdlb21ldHJ5IGFuZCBzdHlsZSBhcmUga2V5ZWQgYXBhcnQsIHNvIGEgcmVjb2xvdXIgKGEgbmV3IGNlbGwtdHlwZSBjb2x1bW4sIGEgc2VsZWN0aW9uKVxuICogcmV3cml0ZXMgdGhlIHBlci1zaGFwZSB2YWx1ZXMgb2YgdGhlIGV4aXN0aW5nIGxheWVycyBhbmQgbmV2ZXIgcmUtZXhwYW5kcyB0aGUgcmluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsTGF5ZXJzIHtcbiAgcHJpdmF0ZSBwb2x5Z29uc1Nob3duID0gZmFsc2U7XG4gIC8qKiBSaW5ncyBjdXJyZW50bHkgZHJhd24gYW5kIHRoZSAoZGF0YXNldCwgc2V0LCB0aWxlcykgdGhleSBjYW1lIGZyb20uICovXG4gIHByaXZhdGUgY3VycmVudFJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjZWxsR2VvbWV0cnlLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnROdWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNlbGxTdHlsZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTZWxlY3Rpb24gaWRlbnRpdHkg4oaSIHJldmlzaW9uLCBzbyBhIGNoYW5nZSBrZXkgY2FuIG5hbWUgYSBzZWxlY3Rpb24gY2hlYXBseS4gKi9cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNlbGVjdGlvblJldmlzaW9uID0gMDtcbiAgLyoqIENvbnRpbnVvdXMgY29sb3VyaW5ncycgd2luZG93cywgcGVyICh2ZWN0b3IsIGNsaXAsIGxvZyk6IGBjb250cmFzdFdpbmRvd2Agc29ydHMgZXZlcnlcbiAgICogIHZhbHVlLCBhbmQgYSBzZWxlY3Rpb24gb3Igb3BhY2l0eSBjaGFuZ2UgcmVjb2xvdXJzIHdpdGggdGhlIHZlY3RvciB1bmNoYW5nZWQgKFNQQVRJQUwtMTIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyYXN0V2luZG93cyA9IG5ldyBDb250cmFzdFdpbmRvd0NhY2hlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncm91cHM6IE9yZGVyZWRMYXllckdyb3VwczxUaWxlR3JvdXA+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9va3VwOiBDYXRlZ29yaWNhbExvb2t1cCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IENlbGxMYXllcnNIb3N0LFxuICApIHt9XG5cbiAgLyoqIFRydWUgd2hpbGUgb3V0bGluZXMgYXJlIG9uIHNjcmVlbiDigJQgdGhlIHNlcnZpY2UgaGlkZXMgaXRzIGRvdHMgdGhlbi4gKi9cbiAgZ2V0IG91dGxpbmVzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9seWdvbnNTaG93bjtcbiAgfVxuXG4gIC8qKiBUaGUgdmlld2VyIHdlbnQgYXdheSAoaXRzIGxheWVycyB3aXRoIGl0KTogdGhlIG91dGxpbmVzIGFyZSBubyBsb25nZXIgc2hvd24uICovXG4gIGRldGFjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UG9seWdvbnNTaG93bihmYWxzZSk7XG4gIH1cblxuICAvKiogRHJhdyB0aGUgY2VsbHMgY292ZXJpbmcgYHJlY3RgIGF0IHRoZSBsZXZlbCBgcHhQZXJVbml0YCBjYWxscyBmb3IsIG9yIGRyb3AgdGhlbS4gKi9cbiAgYXN5bmMgcGxhbihcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgcHhQZXJVbml0OiBudW1iZXIsXG4gICAgY3R4OiBQbGFuQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCB3aG9sZSA9ICF0aWxlZCAmJiBkYXRhc2V0LnBvbHlnb25zICYmIHRoaXMucG9ydC5nZXRQb2x5Z29ucztcbiAgICBpZiAoIWNlbGxzU2hvd24oZGF0YXNldCwgdmlldykgfHwgKCF0aWxlZCAmJiAhd2hvbGUpKSB7XG4gICAgICB0aGlzLmRyb3AoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlhbWV0ZXIgPSB0eXBpY2FsQ2VsbERpYW1ldGVyKGRhdGFzZXQub2JzZXJ2YXRpb25zLnJhZGl1cyk7XG4gICAgLy8gV2hvbGUtZGF0YXNldCByaW5ncyBoYXZlIG9uZSBsZXZlbCBhbmQgbm8gY29hcnNlciBmYWxsYmFjaywgc28gdGhleSBhcmUgZHJhd24gYXNcbiAgICAvLyBzb29uIGFzIGEgY2VsbCBpcyBiaWcgZW5vdWdoIHRvIHJlYWQgYXMgYSBzaGFwZSByYXRoZXIgdGhhbiBhIGRvdC5cbiAgICBjb25zdCBsZXZlbCA9IHRpbGVkXG4gICAgICA/IHBvbHlnb25MZXZlbEZvcihweFBlclVuaXQsIGRpYW1ldGVyLCB0aWxlZC5sZXZlbHMubGVuZ3RoKVxuICAgICAgOiBweFBlclVuaXQgKiBkaWFtZXRlciA+PSBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYWzJdXG4gICAgICAgID8gMFxuICAgICAgICA6IC0xO1xuICAgIGlmIChsZXZlbCA8IDApIHtcbiAgICAgIHRoaXMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdyb3VwcyBzd2l0Y2hlZCBvZmYgaW4gdGhlIGxpc3Q6IHRoZWlyIGNlbGxzIGFyZSBsZWZ0IG91dCBvZiB0aGUgZ2VvbWV0cnkuXG4gICAgY29uc3QgaGlkZGVuID0gYXdhaXQgdGhpcy5sb29rdXAuaGlkZGVuQ29kZXMoZGF0YXNldCwgdmlldyk7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG4gICAgY29uc3QgbGFiZWwgPSB2aWV3LmNlbGxTZXQgPT09ICdib3RoJyA/ICdDZWxscyBhbmQgbnVjbGVpJyA6IHZpZXcuY2VsbFNldCA9PT0gJ251Y2xldXMnID8gJ051Y2xlaScgOiAnQ2VsbHMnO1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gYXdhaXQgY3R4LnRyYWNrKGxhYmVsLCB0aGlzLmNlbGxHZW9tZXRyeShkYXRhc2V0LCB2aWV3LCByZWN0LCBsZXZlbCwgaGlkZGVuLCBjdHgpKTtcbiAgICBpZiAoIWdlb21ldHJ5KSByZXR1cm47XG4gICAgY29uc3QgeyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9ID0gZ2VvbWV0cnk7XG5cbiAgICBjb25zdCBnZW9tZXRyeUNoYW5nZWQgPSBnZW9tZXRyeUtleSAhPT0gdGhpcy5jZWxsR2VvbWV0cnlLZXk7XG4gICAgY29uc3Qgc3R5bGVLZXkgPSBbXG4gICAgICBnZW9tZXRyeUtleSxcbiAgICAgIHZpZXcuY2VsbENvbG9yTW9kZSxcbiAgICAgIHZpZXcuY2VsbENvbG9yR2VuZSxcbiAgICAgIHZpZXcuY2VsbFNpbmdsZUNvbG9yLFxuICAgICAgY2VsbFR5cGVDb2x1bW5Gb3IoZGF0YXNldCwgdmlldyksXG4gICAgICB0aGlzLnNlbGVjdGlvblJldihzZWxlY3Rpb24pLFxuICAgICAgdmlldy5sb2dTY2FsZSxcbiAgICAgIHZpZXcucGVyY2VudGlsZUNsaXAuam9pbigpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmlldy5jb250aW51b3VzQ29sb3JtYXApLFxuICAgICAgdmlldy5jZWxsRHJhdyxcbiAgICAgIHZpZXcuY2VsbE9wYWNpdHksXG4gICAgXS5qb2luKCd8Jyk7XG4gICAgY29uc3QgcHJlc2VudCA9IChbJ2NlbGxGaWxsJywgJ2NlbGxPdXRsaW5lJywgJ251Y2xldXNPdXRsaW5lJ10gYXMgY29uc3QpLnNvbWUoKGcpID0+IHRoaXMuZ3JvdXBzLnNob3duKGcpKTtcbiAgICBpZiAoIWdlb21ldHJ5Q2hhbmdlZCAmJiBzdHlsZUtleSA9PT0gdGhpcy5jZWxsU3R5bGVLZXkgJiYgcHJlc2VudCkge1xuICAgICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xvcnMgPSBhd2FpdCB0aGlzLmNlbGxDb2xvcnMoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uLCByaW5ncy5vYnNlcnZhdGlvbik7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IHJpbmdzO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51Y2xlaTtcbiAgICAvLyBBIGdlb21ldHJ5IG1pc3NpbmcgYSBmYWlsZWQgdGlsZSBpcyBkcmF3biBidXQgbm90IHJlbWVtYmVyZWQsIHNvIHRoZSByZXRyeSByZWZldGNoZXMgaXQuXG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBjdHguaW5jb21wbGV0ZSA/IG51bGwgOiBnZW9tZXRyeUtleTtcbiAgICB0aGlzLmNlbGxTdHlsZUtleSA9IHN0eWxlS2V5O1xuICAgIHRoaXMuZHJhd0NlbGxzKGRhdGFzZXQsIHZpZXcsIGdlb21ldHJ5LCBjb2xvcnMsIGdlb21ldHJ5Q2hhbmdlZCk7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjZWxsIGxheWVyczogdGhlIGZpbGwgYW5kIHRoZSBvdXRsaW5lIHRoZSB2aWV3J3MgZHJhdyBtb2RlIGFza3MgZm9yLCBhbmQgd2l0aCBcImJvdGhcIiB0aGVcbiAgICogbnVjbGV1cyBvdXRsaW5lcyBvdmVyIHRoZW0uIEEgZ2VvbWV0cnkgY2hhbmdlIGJ1aWxkcyBuZXcgbGF5ZXJzOyBhIHN0eWxlIGNoYW5nZSByZXN0eWxlcyB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3Q2VsbHMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICB7IHJpbmdzLCBudWNsZWkgfTogeyByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlOyBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgfSxcbiAgICBjb2xvcnM6IENlbGxDb2xvcnMsXG4gICAgZ2VvbWV0cnlDaGFuZ2VkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSBkYXRhc2V0LmltYWdlUmVmO1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgc2NhbGU6IHJlZj8uc2NhbGUgPz8gWzEsIDFdLCB0cmFuc2xhdGU6IHJlZj8udHJhbnNsYXRlID8/IFswLCAwXSB9IGFzIGNvbnN0O1xuICAgIGNvbnN0IGZpbGwgPSB2aWV3LmNlbGxEcmF3ICE9PSAnb3V0bGluZSc7XG4gICAgY29uc3Qgb3V0bGluZSA9IHZpZXcuY2VsbERyYXcgIT09ICdmaWxsJztcblxuICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcygnY2VsbEZpbGwnLCBmaWxsLCBnZW9tZXRyeUNoYW5nZWQsIHJpbmdzLCB7XG4gICAgICBuYW1lOiAnY2VsbHMnLFxuICAgICAgZHJhdzogJ2ZpbGwnLFxuICAgICAgb3BhY2l0eTogdmlldy5jZWxsT3BhY2l0eSxcbiAgICAgIC4uLmNvbG9ycyxcbiAgICAgIC4uLmNvbW1vbixcbiAgICB9KTtcbiAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoXG4gICAgICAnY2VsbE91dGxpbmUnLFxuICAgICAgb3V0bGluZSxcbiAgICAgIGdlb21ldHJ5Q2hhbmdlZCxcbiAgICAgIHJpbmdzLFxuICAgICAgZmlsbFxuICAgICAgICA/IC8vIE92ZXIgYSBmaWxsLCBhIGRhcmsgb3V0bGluZSBzZXBhcmF0ZXMgbmVpZ2hib3VycyBvZiB0aGUgc2FtZSB0eXBlLlxuICAgICAgICAgIHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIGNvbG9yOiBbMC4wOCwgMC4wOCwgMC4xLCAxXSwgb3BhY2l0eTogMC43LCAuLi5jb21tb24gfVxuICAgICAgICA6IHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIG9wYWNpdHk6IDEsIC4uLmNvbG9ycywgLi4uY29tbW9uIH0sXG4gICAgKTtcbiAgICAvLyBcIkJvdGhcIjogbnVjbGVpIG91dGxpbmVkIG92ZXIgdGhlIGNlbGxzLCBsaWdodCBzbyB0aGV5IHJlYWQgYWdhaW5zdCBhbnkgZmlsbC5cbiAgICBpZiAobnVjbGVpKSB7XG4gICAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoJ251Y2xldXNPdXRsaW5lJywgdHJ1ZSwgZ2VvbWV0cnlDaGFuZ2VkLCBudWNsZWksIHtcbiAgICAgICAgbmFtZTogJ251Y2xldXMgb3V0bGluZXMnLFxuICAgICAgICBkcmF3OiAnb3V0bGluZScsXG4gICAgICAgIGNvbG9yOiBbMC45NSwgMC45NSwgMC45OCwgMV0sXG4gICAgICAgIG9wYWNpdHk6IDAuOCxcbiAgICAgICAgLi4uY29tbW9uLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ251Y2xldXNPdXRsaW5lJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25SZXYoc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayk6IG51bWJlciB7XG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gdGhpcy5sYXN0U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gICAgICB0aGlzLnNlbGVjdGlvblJldmlzaW9uKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJldmlzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByaW5ncycgY29sb3VycyBieSB0aGVpciBvd25lcnMsIGJ5IHRoZSB2aWV3J3MgY2VsbC1jb2xvdXIgbW9kZSAoWGVuaXVtIEV4cGxvcmVyJ3MgXCJDZWxsXG4gICAqIENvbG9yXCIpOiBvbmUgUkdCQSBwZXIgc2hhcGUgZm9yIGEgZ3JvdXBpbmcsIHZhbHVlcyArIGNvbG9ybWFwIGZvciBhIG1lYXN1cmVtZW50LCBvbmUgY29sb3VyXG4gICAqIGZvciBcInNpbmdsZVwiLiBBIHNlbGVjdGlvbiBtdXRlcyB3aGF0IGl0IGxlYXZlcyBvdXQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNlbGxDb2xvcnMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICBzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrLFxuICAgIG93bmVyczogVWludDMyQXJyYXksXG4gICk6IFByb21pc2U8Q2VsbENvbG9ycz4ge1xuICAgIGNvbnN0IG11dGVkID0gc2VsZWN0aW9uLmNvdW50ID4gMCA/IHNlbGVjdGlvbi5tYXNrIDogbnVsbDtcbiAgICBjb25zdCBtb2RlID0gdmlldy5jZWxsQ29sb3JNb2RlO1xuXG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBjb25zdCBbciwgZywgYl0gPSBwYXJzZUhleCh2aWV3LmNlbGxTaW5nbGVDb2xvcik7XG4gICAgICByZXR1cm4geyBjb2xvcjogW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTUsIDFdIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udGludW91cyA9IGFzeW5jIChyYXc6IEZsb2F0MzJBcnJheSwgbG9nOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvd25lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdiA9IHJhd1tvd25lcnNbaV1dID8/IE5hTjtcbiAgICAgICAgdmFsdWVzW2ldID0gbG9nID8gTWF0aC5sb2cxcChNYXRoLm1heCgwLCB2KSkgOiB2O1xuICAgICAgfVxuICAgICAgY29uc3QgW2NsaXBMbywgY2xpcEhpXSA9IHZpZXcucGVyY2VudGlsZUNsaXA7XG4gICAgICAvLyBLZXllZCBieSB0aGUgU09VUkNFIHZlY3RvciAodGhlIGxvZyBjb3B5IHdvdWxkIGJlIG5ldyBvbiBldmVyeSBjYWxsKSwgYXMgdGhlIDNEIGNsb3VkJ3MuXG4gICAgICBjb25zdCBbbG8sIGhpXSA9IHRoaXMuY29udHJhc3RXaW5kb3dzLmdldChyYXcsIGNsaXBMbywgY2xpcEhpLCBsb2csICgpID0+XG4gICAgICAgIGNvbnRyYXN0V2luZG93KGxvZyA/IHJhdy5tYXAoKHYpID0+IE1hdGgubG9nMXAoTWF0aC5tYXgoMCwgdikpKSA6IHJhdywgY2xpcExvLCBjbGlwSGkpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgY29sb3JtYXA6IGNvbG9ybWFwRnJvbUx1dCgnc3BhdGlhbC1jb250aW51b3VzJywgdGhpcy5ob3N0LmNvbnRpbnVvdXNMdXQodmlldykpLFxuICAgICAgICBjb250cmFzdExpbWl0czogW2xvLCBoaV0gYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgIH07XG4gICAgfTtcbiAgICBpZiAobW9kZSA9PT0gJ2dlbmUnICYmIHZpZXcuY2VsbENvbG9yR2VuZSkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVvdXMoYXdhaXQgdGhpcy5wb3J0LmdldEZlYXR1cmVWZWN0b3Iodmlldy5jZWxsQ29sb3JHZW5lKSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAndHJhbnNjcmlwdERlbnNpdHknICYmIGRhdGFzZXQuY29sdW1ucy5zb21lKChjKSA9PiBjLm5hbWUgPT09ICd0cmFuc2NyaXB0X2RlbnNpdHknKSkge1xuICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgdGhpcy5wb3J0LmdldENvbHVtbigndHJhbnNjcmlwdF9kZW5zaXR5Jyk7XG4gICAgICBpZiAoIWlzQ2F0ZWdvcmljYWxDb2x1bW4oY29sdW1uKSkgcmV0dXJuIGNvbnRpbnVvdXMoY29sdW1uLnZhbHVlcywgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPVxuICAgICAgbW9kZSA9PT0gJ3NlZ21lbnRhdGlvbicgJiYgZGF0YXNldC5jb2x1bW5zLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gJ3NlZ21lbnRhdGlvbl9tZXRob2QnKVxuICAgICAgICA/ICdzZWdtZW50YXRpb25fbWV0aG9kJ1xuICAgICAgICA6IGNlbGxUeXBlQ29sdW1uRm9yKGRhdGFzZXQsIHZpZXcpO1xuICAgIGNvbnN0IGNvZGVzID0gbmFtZSA/IGF3YWl0IHRoaXMubG9va3VwLmNvZGVzKG5hbWUpIDogbnVsbDtcbiAgICBjb25zdCBwYWxldHRlID0gY2F0ZWdvcnlSZ2JhKGNvZGVzPy5tZXRhID8/IG51bGwpO1xuICAgIGNvbnN0IG1pc3NpbmcgPSByZ2JhMDEoTUlTU0lOR19DT0xPUik7XG4gICAgLy8gT25lIFJHQkEgcGVyIHNoYXBlIChuYXBhcmkgU2hhcGVzJyBgZmFjZV9jb2xvcmApOiBhbnkgbnVtYmVyIG9mIGNhdGVnb3JpZXMga2VlcHMgaXRzIG93blxuICAgIC8vIGNvbG91ciwgd2hlcmUgYSBjb2xvcm1hcCBiYW5kIHBlciBjYXRlZ29yeSByYW4gb3V0IG9mIExVVCBlbnRyaWVzIHBhc3QgfjEyNy5cbiAgICBjb25zdCBmYWNlQ29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGggKiA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG93bmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbyA9IG93bmVyc1tpXTtcbiAgICAgIGNvbnN0IGNvZGUgPSAhY29kZXMgfHwgKG11dGVkICYmICFtdXRlZFtvXSkgPyBOT19DQVRFR09SWSA6IGNvZGVzLmNvZGVzW29dO1xuICAgICAgZmFjZUNvbG9yLnNldChwYWxldHRlW2NvZGVdID8/IG1pc3NpbmcsIGkgKiA0KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZmFjZUNvbG9yIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwgcmluZ3MgKGFuZCwgZm9yIFwiYm90aFwiLCB0aGUgbnVjbGV1cyByaW5ncykgY292ZXJpbmcgYHJlY3RgIGF0IGBsZXZlbGAsIG1pbnVzXG4gICAqIHRoZSBoaWRkZW4gZ3JvdXBzIOKAlCByZXVzZWQgd2hlbiBub3RoaW5nIHRoYXQgZGVjaWRlcyB0aGVtIGNoYW5nZWQuIE51bGwgd2hlbiB0aGVcbiAgICogdmlldyB3ZW50IHN0YWxlIG9yIHRoZSBkYXRhc2V0IGhhcyBubyBzZXQgdG8gZHJhdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2VsbEdlb21ldHJ5KFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBoaWRkZW46IEhpZGRlbkNvZGVzIHwgbnVsbCxcbiAgICBjdHg6IFBsYW5Db250ZXh0LFxuICApOiBQcm9taXNlPHsgcmluZ3M6IFNwYXRpYWxQb2x5Z29uVGlsZTsgbnVjbGVpOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsOyBnZW9tZXRyeUtleTogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCBoaWRkZW5LZXkgPSBgJHt2aWV3LmhpZGRlbkdyb3Vwcy5qb2luKCdcXHUwMDAxJyl9fCR7Z2VuZUZpbHRlcktleSh2aWV3KX1gO1xuICAgIGxldCByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlO1xuICAgIGxldCBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBnZW9tZXRyeUtleTogc3RyaW5nO1xuICAgIGlmICh0aWxlZCkge1xuICAgICAgY29uc3QgZHJhd24gPSBkcmF3bkNlbGxTZXRzKHRpbGVkLCB2aWV3LmNlbGxTZXQpO1xuICAgICAgaWYgKCFkcmF3bikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCB7IHNldCwgbnVjbGV1c1NldCB9ID0gZHJhd247XG4gICAgICBjb25zdCBrZXlzID0gdGlsZXNJblJlY3QocmVjdCwgbGV2ZWwsIHRpbGVkLmxldmVscywgdGlsZWQuYm91bmRzLCBNQVhfQ0VMTF9USUxFUyk7XG4gICAgICBnZW9tZXRyeUtleSA9IGAke2RhdGFzZXQuaWR9fCR7c2V0fXwke251Y2xldXNTZXQgPz8gJyd9fCR7aGlkZGVuS2V5fXwke2tleXMubWFwKHRpbGVJZCkuam9pbignLCcpfWA7XG4gICAgICBpZiAoZ2VvbWV0cnlLZXkgPT09IHRoaXMuY2VsbEdlb21ldHJ5S2V5ICYmIHRoaXMuY3VycmVudFJpbmdzKSB7XG4gICAgICAgIHJpbmdzID0gdGhpcy5jdXJyZW50UmluZ3M7XG4gICAgICAgIG51Y2xlaSA9IHRoaXMuY3VycmVudE51Y2xlaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IFt0aWxlcywgbnVjbGV1c1RpbGVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBjdHguZmV0Y2hBbGwoa2V5cywgKGspID0+IHRoaXMucG9ydC5nZXRQb2x5Z29uVGlsZSEoc2V0LCBrLmxldmVsLCBrLmd4LCBrLmd5KSksXG4gICAgICAgICAgbnVjbGV1c1NldFxuICAgICAgICAgICAgPyBjdHguZmV0Y2hBbGwoa2V5cywgKGspID0+IHRoaXMucG9ydC5nZXRQb2x5Z29uVGlsZSEobnVjbGV1c1NldCwgay5sZXZlbCwgay5neCwgay5neSkpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShudWxsKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJpbmdzID0gZmlsdGVyUmluZ3MobWVyZ2VQb2x5Z29uVGlsZXModGlsZXMpLCBoaWRkZW4pO1xuICAgICAgICBudWNsZWkgPSBudWNsZXVzVGlsZXMgPyBmaWx0ZXJSaW5ncyhtZXJnZVBvbHlnb25UaWxlcyhudWNsZXVzVGlsZXMpLCBoaWRkZW4pIDogbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZ2VvbWV0cnlLZXkgPSBgJHtkYXRhc2V0LmlkfXx3aG9sZXwke2hpZGRlbktleX1gO1xuICAgICAgaWYgKGdlb21ldHJ5S2V5ID09PSB0aGlzLmNlbGxHZW9tZXRyeUtleSAmJiB0aGlzLmN1cnJlbnRSaW5ncykge1xuICAgICAgICByaW5ncyA9IHRoaXMuY3VycmVudFJpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9seXM6IFNwYXRpYWxQb2x5Z29ucyA9IGF3YWl0IHRoaXMucG9ydC5nZXRQb2x5Z29ucyEoKTtcbiAgICAgICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gV2hvbGUtZGF0YXNldCByaW5ncyBhcmUgaW5kZXgtYWxpZ25lZCB3aXRoIHRoZSBvYnNlcnZhdGlvbnMuXG4gICAgICAgIHJpbmdzID0gZmlsdGVyUmluZ3MoXG4gICAgICAgICAgeyAuLi5wb2x5cywgb2JzZXJ2YXRpb246IFVpbnQzMkFycmF5LmZyb20oeyBsZW5ndGg6IHBvbHlzLmNvdW50IH0sIChfdiwgaSkgPT4gaSkgfSxcbiAgICAgICAgICBoaWRkZW4sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJpbmdzLCBudWNsZWksIGdlb21ldHJ5S2V5IH07XG4gIH1cblxuICAvKiogUmVtb3ZlIHRoZSBjZWxsIGxheWVycyBhbmQgZm9yZ2V0IHdoYXQgdGhleSBzaG93ZWQuICovXG4gIGRyb3AoKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cHMuZHJvcCgnY2VsbEZpbGwnKTtcbiAgICB0aGlzLmdyb3Vwcy5kcm9wKCdjZWxsT3V0bGluZScpO1xuICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ251Y2xldXNPdXRsaW5lJyk7XG4gICAgdGhpcy5jdXJyZW50TnVjbGVpID0gbnVsbDtcbiAgICB0aGlzLmNlbGxHZW9tZXRyeUtleSA9IG51bGw7XG4gICAgdGhpcy5jZWxsU3R5bGVLZXkgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJpbmdzID0gbnVsbDtcbiAgICB0aGlzLnNldFBvbHlnb25zU2hvd24oZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb2x5Z29uc1Nob3duKHNob3duOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHNob3duID09PSB0aGlzLnBvbHlnb25zU2hvd24pIHJldHVybjtcbiAgICB0aGlzLnBvbHlnb25zU2hvd24gPSBzaG93bjtcbiAgICB0aGlzLmhvc3QucG9seWdvbnNTaG93bkNoYW5nZWQoc2hvd24pO1xuICB9XG59XG5cbi8qKiBBbiA4LWJpdCBSR0IgYXMgYW4gb3BhcXVlIDAuLjEgUkdCQS4gKi9cbmZ1bmN0aW9uIHJnYmEwMShbciwgZywgYl06IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IFJHQkEge1xuICByZXR1cm4gW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTUsIDFdO1xufVxuXG4vKiogQSBncm91cGluZydzIGNhdGVnb3J5IGNvbG91cnMsIGFzIDAuLjEgUkdCQSBieSBjYXRlZ29yeSBjb2RlIChvbmUgZGVmYXVsdCB3aXRob3V0IGEgZ3JvdXBpbmcpLiAqL1xuZnVuY3Rpb24gY2F0ZWdvcnlSZ2JhKG1ldGE6IFNwYXRpYWxDb2x1bW5bJ21ldGEnXSB8IG51bGwpOiBSR0JBW10ge1xuICBjb25zdCBoZXggPSBtZXRhICYmIG1ldGEua2luZCA9PT0gJ2NhdGVnb3JpY2FsJyA/IHJlc29sdmVDYXRlZ29yeUNvbG9ycyhtZXRhKSA6IFtERUZBVUxUX0NBVEVHT1JJQ0FMX1BBTEVUVEVbMF1dO1xuICByZXR1cm4gaGV4Lm1hcCgoaCkgPT4gcmdiYTAxKHBhcnNlSGV4KGgpKSk7XG59XG4iXX0=
|