@jax-data-science/sci-image-visualizer 0.11.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +4 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +18 -6
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +70 -2
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +29 -14
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +11 -1
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +9 -4
- package/esm2022/lib/region-editor/region-editor.component.mjs +46 -41
- package/esm2022/lib/region-import/label-volume.mjs +35 -4
- package/esm2022/lib/region-import/ome-zarr-labels.mjs +253 -0
- package/esm2022/lib/region-import/open-annotations.mjs +289 -0
- package/esm2022/lib/region-import/zarr-codecs.mjs +167 -0
- package/esm2022/lib/region-import/zip.mjs +157 -0
- package/esm2022/lib/routing-visualizer.service.mjs +20 -7
- package/esm2022/lib/visualizer/region-load.mjs +16 -1
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DnPlIP2F.mjs} +1103 -71
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DnPlIP2F.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-Bs987_-E.mjs} +4 -2
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-DEDSm_NL.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-Bs987_-E.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +3 -1
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/index.d.ts +6 -0
- package/lib/contracts/image.contract.d.ts +7 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +13 -1
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +40 -1
- package/lib/implementations/napari-js/napari-tool-bridge.d.ts +11 -0
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +5 -0
- package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +6 -1
- package/lib/region-editor/region-editor.component.d.ts +5 -4
- package/lib/region-import/label-volume.d.ts +4 -0
- package/lib/region-import/ome-zarr-labels.d.ts +36 -0
- package/lib/region-import/open-annotations.d.ts +73 -0
- package/lib/region-import/zarr-codecs.d.ts +14 -0
- package/lib/region-import/zip.d.ts +31 -0
- package/lib/routing-visualizer.service.d.ts +9 -1
- package/package.json +2 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BELcx0jv.mjs.map +0 -1
package/esm2022/index.mjs
CHANGED
|
@@ -67,6 +67,9 @@ export { REGION_SOURCE_MIN_CHARS } from './lib/region-source/region-source';
|
|
|
67
67
|
export { isLabelVolumeName, readLabelVolume } from './lib/region-import/label-volume';
|
|
68
68
|
export { labelClasses, labelSliceGeoJson } from './lib/region-import/label-classes';
|
|
69
69
|
export { importFile, planRegionImport } from './lib/region-import/region-import';
|
|
70
|
+
export { ANNOTATION_IMAGE_MAX_DIM, openAnnotations, readAnnotationSlices, } from './lib/region-import/open-annotations';
|
|
71
|
+
export { hasZarrMetadata, readOmeZarrLabels } from './lib/region-import/ome-zarr-labels';
|
|
72
|
+
export { expandZips, isZipName, readZip } from './lib/region-import/zip';
|
|
70
73
|
// ── Angular module + providers ───────────────────────────────────────────
|
|
71
74
|
// DEPRECATED, kept for one minor release: a shim re-exporting the standalone components
|
|
72
75
|
// below and binding the host-facing tokens at root.
|
|
@@ -94,4 +97,4 @@ export { SpatialChartsComponent } from './lib/spatial-controls/spatial-charts/sp
|
|
|
94
97
|
// Pure chart builders, exported so a host can render the same distributions
|
|
95
98
|
// wherever it likes (a report, a different charting surface).
|
|
96
99
|
export { buildOmicsTraces, omicsLayout, benefitsFromGrouping, } from './lib/implementations/plotly/omics-trace-builders';
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCw0RUFBNEU7QUFDNUUsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRWpHLDRFQUE0RTtBQUM1RSx1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLG1FQUFtRTtBQUNuRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsR0FDaEIsTUFBTSxtRUFBbUUsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixZQUFZLEVBQ1osWUFBWSxFQUNaLG1CQUFtQixFQUNuQixjQUFjLEdBQ2YsTUFBTSxzREFBc0QsQ0FBQztBQU05RCwyRUFBMkU7QUFDM0Us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QUM7QUFFN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDeEcsNEVBQTRFO0FBQzVFLDhEQUE4RDtBQUM5RCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxvQkFBb0IsR0FDckIsTUFBTSxtREFBbUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBvZiBgQGpheC1kYXRhLXNjaWVuY2Uvc2NpLWltYWdlLXZpc3VhbGl6ZXJgLiBFeHRlcm5hbCBjb25zdW1lcnMgaW1wb3J0XG4gKiBPTkxZIGZyb20gaGVyZTsgZXZlcnl0aGluZyBlbHNlIHVuZGVyIGBsaWIvYCBpcyBpbnRlcm5hbC4gVGhlIHN1cmZhY2UgaXNcbiAqIGNvbnRyYWN0cyArIHRva2VucyArIG5ldXRyYWwgbW9kZWxzICsgdGhlIEFuZ3VsYXIgbW9kdWxlIGFuZCBjb21wb25lbnRzLCBwbHVzXG4gKiBgcHJvdmlkZVZpc3VhbGl6YXRpb24oKWAgZm9yIGFuIGlzb2xhdGVkLCBjb21wb25lbnQtc2NvcGVkIHZpZXdlci4gVGhlIGxpYnJhcnlcbiAqIGJpbmRzIHRoZSB0b2tlbnMgaXRzZWxmIChWaXN1YWxpemF0aW9uTW9kdWxlIC8gcHJvdmlkZVZpc3VhbGl6YXRpb24pLCBzbyBhIGhvc3RcbiAqIGluamVjdHMgYFZJU1VBTElaRVJgLCBgUkVHSU9OX0VESVRPUl9BUElgIGFuZCBgQ0hBTk5FTF9ISVNUT0dSQU1fQVBJYCBhbmQgc3VwcGxpZXNcbiAqIG9ubHkgdGhlIHBvcnRzIGFuZCBgVklaX0NPTkZJR2AuXG4gKi9cblxuLy8g4pSA4pSAIENvbnRyYWN0cyAmIERJIHRva2VucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy92aXN1YWxpemVyLmNvbnRyYWN0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9yZWdpb24tZWRpdG9yLWFwaS5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvcG9ydHMvaW1hZ2Utc3RhdGUucG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvcG9ydHMvdGlsZS1hY2Nlc3MucG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvcG9ydHMvcmVnaW9uLWlvLnBvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3BvcnRzL3ByZWZlcmVuY2VzLnBvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL2NoYW5uZWwtaGlzdG9ncmFtLWFwaS5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvdml6LWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvaW1hZ2UuY29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3Bsb3QtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvdG9vbGJhci1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3Rvb2xiYXItdG9vbC5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvcGxvdC10eXBlLWNvbnRyaWJ1dGlvbi5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvY2FwYWJpbGl0aWVzLmNvbnRyYWN0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9yZWdpb24tb3ZlcmxheS5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvc2FtLmNvbnRyYWN0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdCc7XG5leHBvcnQgeyBDZWxscG9zZVNlZ21lbnRlclNlcnZpY2UgfSBmcm9tICcuL2xpYi90b29sYmFyL3NlZ21lbnRhdGlvbi9jZWxscG9zZS1zZWdtZW50ZXIuc2VydmljZSc7XG5cbi8vIOKUgOKUgCBTcGF0aWFsLW9taWNzIGRhdGEgcGxhbmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUaGUgd2lyZSBmb3JtYXQgdGhlIGJ1bmRsZWQgZXhhbXBsZSBzZXJ2ZXIgc3BlYWtzLCBwbHVzIGEgcmVhZHktbWFkZVxuLy8gU3BhdGlhbERhdGFQb3J0IGFkYXB0ZXIgZm9yIGl0LiBCb3RoIGFyZSBPUFRJT05BTDogYSBob3N0IHdpdGggaXRzIG93blxuLy8gYmFja2VuZCBpbXBsZW1lbnRzIFNwYXRpYWxEYXRhUG9ydCBkaXJlY3RseSBhbmQgaW1wb3J0cyBuZWl0aGVyLlxuZXhwb3J0IHtcbiAgU3BhdGlhbERhdGFIdHRwU2VydmljZSxcbiAgU3VwZXJzZWRlZEVycm9yLFxufSBmcm9tICcuL2xpYi9pbXBsZW1lbnRhdGlvbnMvc3BhdGlhbC1kYXRhLWh0dHAvc3BhdGlhbC1kYXRhLWh0dHAuc2VydmljZSc7XG5leHBvcnQge1xuICBTUEFUSUFMX1dJUkVfVkVSU0lPTixcbiAgaXNMaXR0bGVFbmRpYW4sXG4gIGFzc2VydE1hbmlmZXN0VmVyc2lvbixcbiAgZGF0YXNldEZyb21NYW5pZmVzdCxcbiAgZGVjb2RlQ29vcmRzLFxuICBkZWNvZGVSYWRpdXMsXG4gIGRlY29kZUNvbHVtbixcbiAgZGVjb2RlRmVhdHVyZVZlY3RvcixcbiAgZGVjb2RlUG9seWdvbnMsXG59IGZyb20gJy4vbGliL2ltcGxlbWVudGF0aW9ucy9zcGF0aWFsLWRhdGEtaHR0cC9zcGF0aWFsLXdpcmUnO1xuZXhwb3J0IHR5cGUge1xuICBTcGF0aWFsTWFuaWZlc3QsXG4gIFNwYXRpYWxEYXRhc2V0U3VtbWFyeSxcbiAgU3BhdGlhbFJhZGl1c1NwZWMsXG59IGZyb20gJy4vbGliL2ltcGxlbWVudGF0aW9ucy9zcGF0aWFsLWRhdGEtaHR0cC9zcGF0aWFsLXdpcmUnO1xuLy8gQmFja2VuZC1uZXV0cmFsIGVuY29kaW5nczogY29sdW1ucy9nZW5lcyAtPiBwZXItcG9pbnQgY29sb3VycyBhbmQgc2l6ZXMuXG5leHBvcnQge1xuICBlbmNvZGVDYXRlZ29yaWNhbCxcbiAgZW5jb2RlQ29udGludW91cyxcbiAgcmVzb2x2ZUNhdGVnb3J5Q29sb3JzLFxuICBjb250cmFzdFdpbmRvdyxcbiAgbWFya2VyRGlhbWV0ZXJzLFxuICBsdXRGb3IsXG4gIERFRkFVTFRfQ0FURUdPUklDQUxfUEFMRVRURSxcbiAgREVGQVVMVF9NVVRFRF9PUEFDSVRZLFxuICBNSVNTSU5HX0NPTE9SLFxufSBmcm9tICcuL2xpYi9zcGF0aWFsL3NwYXRpYWwtZW5jb2RpbmcnO1xuZXhwb3J0IHR5cGUgeyBSR0JBLCBDYXRlZ29yaWNhbEVuY29kaW5nT3B0aW9ucywgQ29udGludW91c0VuY29kaW5nT3B0aW9ucyB9IGZyb20gJy4vbGliL3NwYXRpYWwvc3BhdGlhbC1lbmNvZGluZyc7XG4vLyBTZWxlY3Rpb246IHdoaWNoIG9ic2VydmF0aW9ucyBmYWxsIGluc2lkZSB0aGUgZHJhd24gUk9JcyAoYXMgYSBTcGF0aWFsU2VsZWN0aW9uTWFzayxcbi8vIGV4cG9ydGVkIHdpdGggdGhlIGRhdGFzZXQgY29udHJhY3QgYWJvdmUpLCBhbmQgdGhlIHNoYXJlZCBzdG9yZVxuLy8gdGhhdCBob2xkcyB0aGUgYW5zd2VyLlxuZXhwb3J0IHtcbiAgc2VsZWN0SW5SZWdpb25zLFxuICBzZWxlY3RCeUNhdGVnb3J5LFxuICBtdXRlZEZyb21TZWxlY3Rpb24sXG4gIHBvaW50SW5SaW5nLFxuICBlbXB0eVNlbGVjdGlvbixcbiAgY291bnRNYXNrLFxuICBtYXNrVG9JbmRpY2VzLFxufSBmcm9tICcuL2xpYi9zcGF0aWFsL3NwYXRpYWwtc2VsZWN0aW9uJztcbmV4cG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25TdG9yZSB9IGZyb20gJy4vbGliL3N0b3JlL3NwYXRpYWwtc2VsZWN0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL2luc3RhbmNlLXNlZ21lbnRlci5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvc2VtYW50aWMtc2VnbWVudGVyLmNvbnRyYWN0JztcblxuLy8g4pSA4pSAIEdlbmVyaWMgY2xpZW50LXNpZGUgaW1hZ2UgdXRpbGl0aWVzIChzaGFyZWQgd2l0aCB0aGUgaG9zdCdzIHBpcGVsaW5lKSDilIDilIBcbmV4cG9ydCB7IFByb2Nlc3NpbmdJbWFnZSB9IGZyb20gJy4vbGliL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy1pbWFnZSc7XG5leHBvcnQgeyBjcm9wSW1hZ2UsIENyb3BJbWFnZU9wdGlvbnMgfSBmcm9tICcuL2xpYi9wcm9jZXNzaW5nL2ltYWdlLWNyb3AnO1xuZXhwb3J0IHsgSW1hZ2VDb252ZXJ0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9saWIvcHJvY2Vzc2luZy9pbWFnZS1jb252ZXJ0ZXIuc2VydmljZSc7XG5cbi8vIOKUgOKUgCBTQU0gbW9kZWwgcmVnaXN0cnkgKGhvc3QgY29uZmlndXJlcyBob3N0ZWQgT05OWCBVUkxzIG9uY2UgYXZhaWxhYmxlKSDilIDilIBcbmV4cG9ydCB7XG4gIFNBTV9NT0RFTFMsXG4gIERFRkFVTFRfU0FNX01PREVMX0lELFxuICBnZXRTYW1Nb2RlbCxcbiAgaXNTYW1Nb2RlbFJlYWR5LFxuICBzZXRTYW1Nb2RlbFVybHMsXG4gIHNldERlZmF1bHRTYW1Nb2RlbCxcbiAgZ2V0RGVmYXVsdFNhbU1vZGVsSWQsXG59IGZyb20gJy4vbGliL3Rvb2xiYXIvc2VnbWVudGF0aW9uL3NhbS1tb2RlbC1yZWdpc3RyeSc7XG5cbi8vIOKUgOKUgCBvbm54cnVudGltZS13ZWIgV0FTTSBsb2NhdGlvbiAoaG9zdCBvdmVycmlkZXMgb25jZSwgYXQgYXBwIGluaXQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuZXhwb3J0IHsgc2V0T3J0V2FzbUJhc2UsIGdldE9ydFdhc21CYXNlIH0gZnJvbSAnLi9saWIvdG9vbGJhci9zZWdtZW50YXRpb24vb3J0LXJ1bnRpbWUtY29uZmlnJztcbi8vIEZyZWVzIHRoZSBzZXZlcmFsIGh1bmRyZWQgTUIgb2YgZG93bmxvYWRlZCBTQU0gbW9kZWxzIHRoZSBicm93c2VyIGtlZXBzIHBlciBvcmlnaW4uXG5leHBvcnQgeyBjbGVhclNhbU1vZGVsQ2FjaGUgfSBmcm9tICcuL2xpYi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tb25ueC1jb3JlJztcblxuLy8g4pSA4pSAIE5ldXRyYWwgZGF0YSBtb2RlbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvcmVnaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9jbGFzcy1wcmVzZXQnO1xuZXhwb3J0IHsgU2hhcGVTZWxlY3Rpb24gfSBmcm9tICcuL2xpYi9tb2RlbHMvc2hhcGUnO1xuXG4vLyDilIDilIAgUmVnaW9uIHNvdXJjZXM6IGxhcmdlIHJlZ2lvbiBzZXRzLCBkcmF3biBieSBsZXZlbCBvZiBkZXRhaWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBBIGhvc3QgaGFuZHMgb25lIG92ZXIgdGhyb3VnaCBgSUltYWdlSW5mby5yZWdpb25Tb3VyY2VVcmxgIG9yIGEgbGFyZ2UgYHJvaUpzb25TdHJgOyB0aGVzZVxuLy8gb3BlbiBvbmUgZGlyZWN0bHkgKGUuZy4gZm9yIGEgY3VzdG9tIGxvYWRlciwgb3IgYSB0ZXN0KS5cbmV4cG9ydCB7IG9wZW5HZW9Kc29uUmVnaW9uU291cmNlIH0gZnJvbSAnLi9saWIvcmVnaW9uLXNvdXJjZS93b3JrZXItcmVnaW9uLXNvdXJjZSc7XG5leHBvcnQgeyBvcGVuSHR0cFJlZ2lvblNvdXJjZSB9IGZyb20gJy4vbGliL3JlZ2lvbi1zb3VyY2UvaHR0cC1yZWdpb24tc291cmNlJztcbmV4cG9ydCB0eXBlIHsgSHR0cFJlZ2lvblNvdXJjZU9wdGlvbnMsIFdpcmVUaWxlRmVhdHVyZSB9IGZyb20gJy4vbGliL3JlZ2lvbi1zb3VyY2UvaHR0cC1yZWdpb24tc291cmNlJztcbmV4cG9ydCB7IFJFR0lPTl9TT1VSQ0VfTUlOX0NIQVJTIH0gZnJvbSAnLi9saWIvcmVnaW9uLXNvdXJjZS9yZWdpb24tc291cmNlJztcbmV4cG9ydCB7IGlzTGFiZWxWb2x1bWVOYW1lLCByZWFkTGFiZWxWb2x1bWUgfSBmcm9tICcuL2xpYi9yZWdpb24taW1wb3J0L2xhYmVsLXZvbHVtZSc7XG5leHBvcnQgdHlwZSB7IExhYmVsVm9sdW1lIH0gZnJvbSAnLi9saWIvcmVnaW9uLWltcG9ydC9sYWJlbC12b2x1bWUnO1xuZXhwb3J0IHsgbGFiZWxDbGFzc2VzLCBsYWJlbFNsaWNlR2VvSnNvbiB9IGZyb20gJy4vbGliL3JlZ2lvbi1pbXBvcnQvbGFiZWwtY2xhc3Nlcyc7XG5leHBvcnQgdHlwZSB7IExhYmVsQ2xhc3NlcyB9IGZyb20gJy4vbGliL3JlZ2lvbi1pbXBvcnQvbGFiZWwtY2xhc3Nlcyc7XG5leHBvcnQgeyBpbXBvcnRGaWxlLCBwbGFuUmVnaW9uSW1wb3J0IH0gZnJvbSAnLi9saWIvcmVnaW9uLWltcG9ydC9yZWdpb24taW1wb3J0JztcbmV4cG9ydCB0eXBlIHsgUmVnaW9uSW1wb3J0RmlsZSwgUmVnaW9uSW1wb3J0UGxhbiB9IGZyb20gJy4vbGliL3JlZ2lvbi1pbXBvcnQvcmVnaW9uLWltcG9ydCc7XG5leHBvcnQgdHlwZSB7IFJlZ2lvblNvdXJjZSwgUmVnaW9uU291cmNlVmlldywgU291cmNlRmVhdHVyZSB9IGZyb20gJy4vbGliL3JlZ2lvbi1zb3VyY2UvcmVnaW9uLXNvdXJjZSc7XG5leHBvcnQgdHlwZSB7XG4gIFJlZ2lvbkluZGV4UGFnZSxcbiAgUmVnaW9uSW5kZXhRdWVyeSxcbiAgUmVnaW9uSW5kZXhSb3csXG4gIFJlZ2lvblNvdXJjZUluZm8sXG4gIFJlZ2lvblRpbGUsXG4gIFJlZ2lvblRpbGVLZXksXG4gIFRpbGVGZWF0dXJlLFxufSBmcm9tICcuL2xpYi9yZWdpb24tc291cmNlL3JlZ2lvbi10aWxlcyc7XG5cbi8vIOKUgOKUgCBBbmd1bGFyIG1vZHVsZSArIHByb3ZpZGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIERFUFJFQ0FURUQsIGtlcHQgZm9yIG9uZSBtaW5vciByZWxlYXNlOiBhIHNoaW0gcmUtZXhwb3J0aW5nIHRoZSBzdGFuZGFsb25lIGNvbXBvbmVudHNcbi8vIGJlbG93IGFuZCBiaW5kaW5nIHRoZSBob3N0LWZhY2luZyB0b2tlbnMgYXQgcm9vdC5cbmV4cG9ydCB7IFZpc3VhbGl6YXRpb25Nb2R1bGUgfSBmcm9tICcuL2xpYi92aXN1YWxpemF0aW9uLm1vZHVsZSc7XG4vLyBERVBSRUNBVEVEIGFzIHB1YmxpYyBBUEksIGtlcHQgZm9yIG9uZSByZWxlYXNlOiBob3N0cyBzaG91bGQgaW5qZWN0IHRoZSB0b2tlbnNcbi8vIChWSVNVQUxJWkVSIC8gUkVHSU9OX0VESVRPUl9BUEkgLyBDSEFOTkVMX0hJU1RPR1JBTV9BUEkpLCB3aGljaCB0aGUgbGlicmFyeSBiaW5kc1xuLy8gdG8gdGhpcyByb3V0ZXIgaXRzZWxmLiBSZWFjaGluZyBmb3IgdGhlIGNvbmNyZXRlIGNsYXNzIGJ5cGFzc2VzIHRoYXQgYmluZGluZy5cbmV4cG9ydCB7IFJvdXRpbmdWaXN1YWxpemVyU2VydmljZSB9IGZyb20gJy4vbGliL3JvdXRpbmctdmlzdWFsaXplci5zZXJ2aWNlJztcbi8vIFByb3ZpZGVyIGZhY3RvcnkgZm9yIGFuIGlzb2xhdGVkLCBjb21wb25lbnQtc2NvcGVkIHZpZXdlciBpbnN0YW5jZSAoZS5nLiBhXG4vLyBtb2RhbCB0aGF0IG11c3Qgbm90IHNoYXJlIHRoZSBtYWluIHZpZXdlcidzIHJlZ2lvbi9pbWFnZSBzdGF0ZSkuXG5leHBvcnQgeyBwcm92aWRlVmlzdWFsaXphdGlvbiB9IGZyb20gJy4vbGliL3Byb3ZpZGUtdmlzdWFsaXphdGlvbic7XG5cbi8vIEtleXMgb2YgdGhlIHRvYXN0IG91dGxldHMgdGhlIHZpc3VhbGl6ZXIgcmVuZGVycyBmb3IgdGhlIGxpYnJhcnkncyBvd24gbm90aWNlcy5cbi8vIEEgaG9zdCB0aGF0IHJlbmRlcnMgaXRzIG93biA8cC10b2FzdD4gd2l0aCBvbmUgb2YgdGhlc2Uga2V5cyBzaG93cyBlYWNoIG5vdGljZSB0d2ljZS5cbmV4cG9ydCB7IFZJWl9UT0FTVF9LRVksIFZJWl9BTEVSVF9UT0FTVF9LRVkgfSBmcm9tICcuL2xpYi90b2FzdC1vdXRsZXRzJztcblxuLy8g4pSA4pSAIFB1YmxpYyBjb21wb25lbnRzIChzdGFuZGFsb25lOyBhbHNvIHJlLWV4cG9ydGVkIGJ5IFZpc3VhbGl6YXRpb25Nb2R1bGUpIOKUgOKUgFxuLy8gVGhlIGVtYmVkZGFibGUgZWxlbWVudHMgKGA8dmlzdWFsaXplcj5gLCBgPHJlZ2lvbi1lZGl0b3I+YCwgYDxoZXgtY29sb3ItcGlja2VyPmAsXG4vLyBgPGNoYW5uZWwtaGlzdG9ncmFtPmAsIGA8c3BhdGlhbC1jb250cm9scz5gLCBgPHNwYXRpYWwtY2hhcnRzPmApLiBFYWNoIGlzIHN0YW5kYWxvbmU6XG4vLyBhIGhvc3QgaW1wb3J0cyBpdCBkaXJlY3RseSBhbmQgYmluZHMgdGhlIGJhY2tlbmQgY2hhaW4gd2l0aCBgcHJvdmlkZVZpc3VhbGl6YXRpb24oKWAuXG5leHBvcnQgeyBWaXN1YWxpemVyQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvdmlzdWFsaXplci5jb21wb25lbnQnO1xuZXhwb3J0IHsgUmVnaW9uRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvcmVnaW9uLWVkaXRvci9yZWdpb24tZWRpdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgeyBIZXhDb2xvclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vbGliL2hleC1jb2xvci1waWNrZXIvaGV4LWNvbG9yLXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0IHsgQ2hhbm5lbEhpc3RvZ3JhbUNvbXBvbmVudCB9IGZyb20gJy4vbGliL2NoYW5uZWwtaGlzdG9ncmFtL2NoYW5uZWwtaGlzdG9ncmFtLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTcGF0aWFsQ29udHJvbHNDb21wb25lbnQgfSBmcm9tICcuL2xpYi9zcGF0aWFsLWNvbnRyb2xzL3NwYXRpYWwtY29udHJvbHMuY29tcG9uZW50JztcbmV4cG9ydCB0eXBlIHsgU3BhdGlhbExlZ2VuZEVudHJ5IH0gZnJvbSAnLi9saWIvc3BhdGlhbC1jb250cm9scy9zcGF0aWFsLWNvbnRyb2xzLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTcGF0aWFsQ2hhcnRzQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvc3BhdGlhbC1jb250cm9scy9zcGF0aWFsLWNoYXJ0cy9zcGF0aWFsLWNoYXJ0cy5jb21wb25lbnQnO1xuLy8gUHVyZSBjaGFydCBidWlsZGVycywgZXhwb3J0ZWQgc28gYSBob3N0IGNhbiByZW5kZXIgdGhlIHNhbWUgZGlzdHJpYnV0aW9uc1xuLy8gd2hlcmV2ZXIgaXQgbGlrZXMgKGEgcmVwb3J0LCBhIGRpZmZlcmVudCBjaGFydGluZyBzdXJmYWNlKS5cbmV4cG9ydCB7XG4gIGJ1aWxkT21pY3NUcmFjZXMsXG4gIG9taWNzTGF5b3V0LFxuICBiZW5lZml0c0Zyb21Hcm91cGluZyxcbn0gZnJvbSAnLi9saWIvaW1wbGVtZW50YXRpb25zL3Bsb3RseS9vbWljcy10cmFjZS1idWlsZGVycyc7XG5leHBvcnQgdHlwZSB7XG4gIE9taWNzQ2hhcnRLaW5kLFxuICBPbWljc0dyb3VwaW5nLFxuICBPbWljc1RyYWNlSW5wdXQsXG59IGZyb20gJy4vbGliL2ltcGxlbWVudGF0aW9ucy9wbG90bHkvb21pY3MtdHJhY2UtYnVpbGRlcnMnO1xuIl19
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCw0RUFBNEU7QUFDNUUsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRWpHLDRFQUE0RTtBQUM1RSx1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLG1FQUFtRTtBQUNuRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsR0FDaEIsTUFBTSxtRUFBbUUsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixZQUFZLEVBQ1osWUFBWSxFQUNaLG1CQUFtQixFQUNuQixjQUFjLEdBQ2YsTUFBTSxzREFBc0QsQ0FBQztBQU05RCwyRUFBMkU7QUFDM0Us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QUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3hHLDRFQUE0RTtBQUM1RSw4REFBOEQ7QUFDOUQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsb0JBQW9CLEdBQ3JCLE1BQU0sbURBQW1ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpYyBBUEkgb2YgYEBqYXgtZGF0YS1zY2llbmNlL3NjaS1pbWFnZS12aXN1YWxpemVyYC4gRXh0ZXJuYWwgY29uc3VtZXJzIGltcG9ydFxuICogT05MWSBmcm9tIGhlcmU7IGV2ZXJ5dGhpbmcgZWxzZSB1bmRlciBgbGliL2AgaXMgaW50ZXJuYWwuIFRoZSBzdXJmYWNlIGlzXG4gKiBjb250cmFjdHMgKyB0b2tlbnMgKyBuZXV0cmFsIG1vZGVscyArIHRoZSBBbmd1bGFyIG1vZHVsZSBhbmQgY29tcG9uZW50cywgcGx1c1xuICogYHByb3ZpZGVWaXN1YWxpemF0aW9uKClgIGZvciBhbiBpc29sYXRlZCwgY29tcG9uZW50LXNjb3BlZCB2aWV3ZXIuIFRoZSBsaWJyYXJ5XG4gKiBiaW5kcyB0aGUgdG9rZW5zIGl0c2VsZiAoVmlzdWFsaXphdGlvbk1vZHVsZSAvIHByb3ZpZGVWaXN1YWxpemF0aW9uKSwgc28gYSBob3N0XG4gKiBpbmplY3RzIGBWSVNVQUxJWkVSYCwgYFJFR0lPTl9FRElUT1JfQVBJYCBhbmQgYENIQU5ORUxfSElTVE9HUkFNX0FQSWAgYW5kIHN1cHBsaWVzXG4gKiBvbmx5IHRoZSBwb3J0cyBhbmQgYFZJWl9DT05GSUdgLlxuICovXG5cbi8vIOKUgOKUgCBDb250cmFjdHMgJiBESSB0b2tlbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvdmlzdWFsaXplci5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvcmVnaW9uLWVkaXRvci1hcGkuY29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3BvcnRzL2ltYWdlLXN0YXRlLnBvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3BvcnRzL3RpbGUtYWNjZXNzLnBvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3BvcnRzL3JlZ2lvbi1pby5wb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9wb3J0cy9wcmVmZXJlbmNlcy5wb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9jaGFubmVsLWhpc3RvZ3JhbS1hcGkuY29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3Zpei1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL2ltYWdlLmNvbnRyYWN0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9wbG90LXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3Rvb2xiYXItY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy90b29sYmFyLXRvb2wuY29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3Bsb3QtdHlwZS1jb250cmlidXRpb24uY29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL2NhcGFiaWxpdGllcy5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3NhbS5jb250cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cmFjdHMvY2VsbC1zZWdtZW50ZXIuY29udHJhY3QnO1xuZXhwb3J0IHsgQ2VsbHBvc2VTZWdtZW50ZXJTZXJ2aWNlIH0gZnJvbSAnLi9saWIvdG9vbGJhci9zZWdtZW50YXRpb24vY2VsbHBvc2Utc2VnbWVudGVyLnNlcnZpY2UnO1xuXG4vLyDilIDilIAgU3BhdGlhbC1vbWljcyBkYXRhIHBsYW5lIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVGhlIHdpcmUgZm9ybWF0IHRoZSBidW5kbGVkIGV4YW1wbGUgc2VydmVyIHNwZWFrcywgcGx1cyBhIHJlYWR5LW1hZGVcbi8vIFNwYXRpYWxEYXRhUG9ydCBhZGFwdGVyIGZvciBpdC4gQm90aCBhcmUgT1BUSU9OQUw6IGEgaG9zdCB3aXRoIGl0cyBvd25cbi8vIGJhY2tlbmQgaW1wbGVtZW50cyBTcGF0aWFsRGF0YVBvcnQgZGlyZWN0bHkgYW5kIGltcG9ydHMgbmVpdGhlci5cbmV4cG9ydCB7XG4gIFNwYXRpYWxEYXRhSHR0cFNlcnZpY2UsXG4gIFN1cGVyc2VkZWRFcnJvcixcbn0gZnJvbSAnLi9saWIvaW1wbGVtZW50YXRpb25zL3NwYXRpYWwtZGF0YS1odHRwL3NwYXRpYWwtZGF0YS1odHRwLnNlcnZpY2UnO1xuZXhwb3J0IHtcbiAgU1BBVElBTF9XSVJFX1ZFUlNJT04sXG4gIGlzTGl0dGxlRW5kaWFuLFxuICBhc3NlcnRNYW5pZmVzdFZlcnNpb24sXG4gIGRhdGFzZXRGcm9tTWFuaWZlc3QsXG4gIGRlY29kZUNvb3JkcyxcbiAgZGVjb2RlUmFkaXVzLFxuICBkZWNvZGVDb2x1bW4sXG4gIGRlY29kZUZlYXR1cmVWZWN0b3IsXG4gIGRlY29kZVBvbHlnb25zLFxufSBmcm9tICcuL2xpYi9pbXBsZW1lbnRhdGlvbnMvc3BhdGlhbC1kYXRhLWh0dHAvc3BhdGlhbC13aXJlJztcbmV4cG9ydCB0eXBlIHtcbiAgU3BhdGlhbE1hbmlmZXN0LFxuICBTcGF0aWFsRGF0YXNldFN1bW1hcnksXG4gIFNwYXRpYWxSYWRpdXNTcGVjLFxufSBmcm9tICcuL2xpYi9pbXBsZW1lbnRhdGlvbnMvc3BhdGlhbC1kYXRhLWh0dHAvc3BhdGlhbC13aXJlJztcbi8vIEJhY2tlbmQtbmV1dHJhbCBlbmNvZGluZ3M6IGNvbHVtbnMvZ2VuZXMgLT4gcGVyLXBvaW50IGNvbG91cnMgYW5kIHNpemVzLlxuZXhwb3J0IHtcbiAgZW5jb2RlQ2F0ZWdvcmljYWwsXG4gIGVuY29kZUNvbnRpbnVvdXMsXG4gIHJlc29sdmVDYXRlZ29yeUNvbG9ycyxcbiAgY29udHJhc3RXaW5kb3csXG4gIG1hcmtlckRpYW1ldGVycyxcbiAgbHV0Rm9yLFxuICBERUZBVUxUX0NBVEVHT1JJQ0FMX1BBTEVUVEUsXG4gIERFRkFVTFRfTVVURURfT1BBQ0lUWSxcbiAgTUlTU0lOR19DT0xPUixcbn0gZnJvbSAnLi9saWIvc3BhdGlhbC9zcGF0aWFsLWVuY29kaW5nJztcbmV4cG9ydCB0eXBlIHsgUkdCQSwgQ2F0ZWdvcmljYWxFbmNvZGluZ09wdGlvbnMsIENvbnRpbnVvdXNFbmNvZGluZ09wdGlvbnMgfSBmcm9tICcuL2xpYi9zcGF0aWFsL3NwYXRpYWwtZW5jb2RpbmcnO1xuLy8gU2VsZWN0aW9uOiB3aGljaCBvYnNlcnZhdGlvbnMgZmFsbCBpbnNpZGUgdGhlIGRyYXduIFJPSXMgKGFzIGEgU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4vLyBleHBvcnRlZCB3aXRoIHRoZSBkYXRhc2V0IGNvbnRyYWN0IGFib3ZlKSwgYW5kIHRoZSBzaGFyZWQgc3RvcmVcbi8vIHRoYXQgaG9sZHMgdGhlIGFuc3dlci5cbmV4cG9ydCB7XG4gIHNlbGVjdEluUmVnaW9ucyxcbiAgc2VsZWN0QnlDYXRlZ29yeSxcbiAgbXV0ZWRGcm9tU2VsZWN0aW9uLFxuICBwb2ludEluUmluZyxcbiAgZW1wdHlTZWxlY3Rpb24sXG4gIGNvdW50TWFzayxcbiAgbWFza1RvSW5kaWNlcyxcbn0gZnJvbSAnLi9saWIvc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5leHBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuL2xpYi9zdG9yZS9zcGF0aWFsLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyYWN0cy9pbnN0YW5jZS1zZWdtZW50ZXIuY29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJhY3RzL3NlbWFudGljLXNlZ21lbnRlci5jb250cmFjdCc7XG5cbi8vIOKUgOKUgCBHZW5lcmljIGNsaWVudC1zaWRlIGltYWdlIHV0aWxpdGllcyAoc2hhcmVkIHdpdGggdGhlIGhvc3QncyBwaXBlbGluZSkg4pSA4pSAXG5leHBvcnQgeyBQcm9jZXNzaW5nSW1hZ2UgfSBmcm9tICcuL2xpYi9wcm9jZXNzaW5nL3Byb2Nlc3NpbmctaW1hZ2UnO1xuZXhwb3J0IHsgY3JvcEltYWdlLCBDcm9wSW1hZ2VPcHRpb25zIH0gZnJvbSAnLi9saWIvcHJvY2Vzc2luZy9pbWFnZS1jcm9wJztcbmV4cG9ydCB7IEltYWdlQ29udmVydGVyU2VydmljZSB9IGZyb20gJy4vbGliL3Byb2Nlc3NpbmcvaW1hZ2UtY29udmVydGVyLnNlcnZpY2UnO1xuXG4vLyDilIDilIAgU0FNIG1vZGVsIHJlZ2lzdHJ5IChob3N0IGNvbmZpZ3VyZXMgaG9zdGVkIE9OTlggVVJMcyBvbmNlIGF2YWlsYWJsZSkg4pSA4pSAXG5leHBvcnQge1xuICBTQU1fTU9ERUxTLFxuICBERUZBVUxUX1NBTV9NT0RFTF9JRCxcbiAgZ2V0U2FtTW9kZWwsXG4gIGlzU2FtTW9kZWxSZWFkeSxcbiAgc2V0U2FtTW9kZWxVcmxzLFxuICBzZXREZWZhdWx0U2FtTW9kZWwsXG4gIGdldERlZmF1bHRTYW1Nb2RlbElkLFxufSBmcm9tICcuL2xpYi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tbW9kZWwtcmVnaXN0cnknO1xuXG4vLyDilIDilIAgb25ueHJ1bnRpbWUtd2ViIFdBU00gbG9jYXRpb24gKGhvc3Qgb3ZlcnJpZGVzIG9uY2UsIGF0IGFwcCBpbml0KSDilIDilIDilIDilIDilIDilIDilIBcbmV4cG9ydCB7IHNldE9ydFdhc21CYXNlLCBnZXRPcnRXYXNtQmFzZSB9IGZyb20gJy4vbGliL3Rvb2xiYXIvc2VnbWVudGF0aW9uL29ydC1ydW50aW1lLWNvbmZpZyc7XG4vLyBGcmVlcyB0aGUgc2V2ZXJhbCBodW5kcmVkIE1CIG9mIGRvd25sb2FkZWQgU0FNIG1vZGVscyB0aGUgYnJvd3NlciBrZWVwcyBwZXIgb3JpZ2luLlxuZXhwb3J0IHsgY2xlYXJTYW1Nb2RlbENhY2hlIH0gZnJvbSAnLi9saWIvdG9vbGJhci9zZWdtZW50YXRpb24vc2FtLW9ubngtY29yZSc7XG5cbi8vIOKUgOKUgCBOZXV0cmFsIGRhdGEgbW9kZWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3JlZ2lvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvY2xhc3MtcHJlc2V0JztcbmV4cG9ydCB7IFNoYXBlU2VsZWN0aW9uIH0gZnJvbSAnLi9saWIvbW9kZWxzL3NoYXBlJztcblxuLy8g4pSA4pSAIFJlZ2lvbiBzb3VyY2VzOiBsYXJnZSByZWdpb24gc2V0cywgZHJhd24gYnkgbGV2ZWwgb2YgZGV0YWlsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQSBob3N0IGhhbmRzIG9uZSBvdmVyIHRocm91Z2ggYElJbWFnZUluZm8ucmVnaW9uU291cmNlVXJsYCBvciBhIGxhcmdlIGByb2lKc29uU3RyYDsgdGhlc2Vcbi8vIG9wZW4gb25lIGRpcmVjdGx5IChlLmcuIGZvciBhIGN1c3RvbSBsb2FkZXIsIG9yIGEgdGVzdCkuXG5leHBvcnQgeyBvcGVuR2VvSnNvblJlZ2lvblNvdXJjZSB9IGZyb20gJy4vbGliL3JlZ2lvbi1zb3VyY2Uvd29ya2VyLXJlZ2lvbi1zb3VyY2UnO1xuZXhwb3J0IHsgb3Blbkh0dHBSZWdpb25Tb3VyY2UgfSBmcm9tICcuL2xpYi9yZWdpb24tc291cmNlL2h0dHAtcmVnaW9uLXNvdXJjZSc7XG5leHBvcnQgdHlwZSB7IEh0dHBSZWdpb25Tb3VyY2VPcHRpb25zLCBXaXJlVGlsZUZlYXR1cmUgfSBmcm9tICcuL2xpYi9yZWdpb24tc291cmNlL2h0dHAtcmVnaW9uLXNvdXJjZSc7XG5leHBvcnQgeyBSRUdJT05fU09VUkNFX01JTl9DSEFSUyB9IGZyb20gJy4vbGliL3JlZ2lvbi1zb3VyY2UvcmVnaW9uLXNvdXJjZSc7XG5leHBvcnQgeyBpc0xhYmVsVm9sdW1lTmFtZSwgcmVhZExhYmVsVm9sdW1lIH0gZnJvbSAnLi9saWIvcmVnaW9uLWltcG9ydC9sYWJlbC12b2x1bWUnO1xuZXhwb3J0IHR5cGUgeyBMYWJlbFZvbHVtZSB9IGZyb20gJy4vbGliL3JlZ2lvbi1pbXBvcnQvbGFiZWwtdm9sdW1lJztcbmV4cG9ydCB7IGxhYmVsQ2xhc3NlcywgbGFiZWxTbGljZUdlb0pzb24gfSBmcm9tICcuL2xpYi9yZWdpb24taW1wb3J0L2xhYmVsLWNsYXNzZXMnO1xuZXhwb3J0IHR5cGUgeyBMYWJlbENsYXNzZXMgfSBmcm9tICcuL2xpYi9yZWdpb24taW1wb3J0L2xhYmVsLWNsYXNzZXMnO1xuZXhwb3J0IHsgaW1wb3J0RmlsZSwgcGxhblJlZ2lvbkltcG9ydCB9IGZyb20gJy4vbGliL3JlZ2lvbi1pbXBvcnQvcmVnaW9uLWltcG9ydCc7XG5leHBvcnQgdHlwZSB7IFJlZ2lvbkltcG9ydEZpbGUsIFJlZ2lvbkltcG9ydFBsYW4gfSBmcm9tICcuL2xpYi9yZWdpb24taW1wb3J0L3JlZ2lvbi1pbXBvcnQnO1xuZXhwb3J0IHtcbiAgQU5OT1RBVElPTl9JTUFHRV9NQVhfRElNLFxuICBvcGVuQW5ub3RhdGlvbnMsXG4gIHJlYWRBbm5vdGF0aW9uU2xpY2VzLFxufSBmcm9tICcuL2xpYi9yZWdpb24taW1wb3J0L29wZW4tYW5ub3RhdGlvbnMnO1xuZXhwb3J0IHR5cGUge1xuICBBbm5vdGF0aW9uRGVjb2RlcnMsXG4gIEFubm90YXRpb25TbGljZXMsXG4gIE9wZW5lZEFubm90YXRpb25zLFxufSBmcm9tICcuL2xpYi9yZWdpb24taW1wb3J0L29wZW4tYW5ub3RhdGlvbnMnO1xuZXhwb3J0IHsgaGFzWmFyck1ldGFkYXRhLCByZWFkT21lWmFyckxhYmVscyB9IGZyb20gJy4vbGliL3JlZ2lvbi1pbXBvcnQvb21lLXphcnItbGFiZWxzJztcbmV4cG9ydCB0eXBlIHsgTGFiZWxTdGFjaywgT21lWmFyckxhYmVscyB9IGZyb20gJy4vbGliL3JlZ2lvbi1pbXBvcnQvb21lLXphcnItbGFiZWxzJztcbmV4cG9ydCB7IGV4cGFuZFppcHMsIGlzWmlwTmFtZSwgcmVhZFppcCB9IGZyb20gJy4vbGliL3JlZ2lvbi1pbXBvcnQvemlwJztcbmV4cG9ydCB0eXBlIHsgWmlwRW50cnkgfSBmcm9tICcuL2xpYi9yZWdpb24taW1wb3J0L3ppcCc7XG5leHBvcnQgdHlwZSB7IFJlZ2lvblNvdXJjZSwgUmVnaW9uU291cmNlVmlldywgU291cmNlRmVhdHVyZSB9IGZyb20gJy4vbGliL3JlZ2lvbi1zb3VyY2UvcmVnaW9uLXNvdXJjZSc7XG5leHBvcnQgdHlwZSB7XG4gIFJlZ2lvbkluZGV4UGFnZSxcbiAgUmVnaW9uSW5kZXhRdWVyeSxcbiAgUmVnaW9uSW5kZXhSb3csXG4gIFJlZ2lvblNvdXJjZUluZm8sXG4gIFJlZ2lvblRpbGUsXG4gIFJlZ2lvblRpbGVLZXksXG4gIFRpbGVGZWF0dXJlLFxufSBmcm9tICcuL2xpYi9yZWdpb24tc291cmNlL3JlZ2lvbi10aWxlcyc7XG5cbi8vIOKUgOKUgCBBbmd1bGFyIG1vZHVsZSArIHByb3ZpZGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIERFUFJFQ0FURUQsIGtlcHQgZm9yIG9uZSBtaW5vciByZWxlYXNlOiBhIHNoaW0gcmUtZXhwb3J0aW5nIHRoZSBzdGFuZGFsb25lIGNvbXBvbmVudHNcbi8vIGJlbG93IGFuZCBiaW5kaW5nIHRoZSBob3N0LWZhY2luZyB0b2tlbnMgYXQgcm9vdC5cbmV4cG9ydCB7IFZpc3VhbGl6YXRpb25Nb2R1bGUgfSBmcm9tICcuL2xpYi92aXN1YWxpemF0aW9uLm1vZHVsZSc7XG4vLyBERVBSRUNBVEVEIGFzIHB1YmxpYyBBUEksIGtlcHQgZm9yIG9uZSByZWxlYXNlOiBob3N0cyBzaG91bGQgaW5qZWN0IHRoZSB0b2tlbnNcbi8vIChWSVNVQUxJWkVSIC8gUkVHSU9OX0VESVRPUl9BUEkgLyBDSEFOTkVMX0hJU1RPR1JBTV9BUEkpLCB3aGljaCB0aGUgbGlicmFyeSBiaW5kc1xuLy8gdG8gdGhpcyByb3V0ZXIgaXRzZWxmLiBSZWFjaGluZyBmb3IgdGhlIGNvbmNyZXRlIGNsYXNzIGJ5cGFzc2VzIHRoYXQgYmluZGluZy5cbmV4cG9ydCB7IFJvdXRpbmdWaXN1YWxpemVyU2VydmljZSB9IGZyb20gJy4vbGliL3JvdXRpbmctdmlzdWFsaXplci5zZXJ2aWNlJztcbi8vIFByb3ZpZGVyIGZhY3RvcnkgZm9yIGFuIGlzb2xhdGVkLCBjb21wb25lbnQtc2NvcGVkIHZpZXdlciBpbnN0YW5jZSAoZS5nLiBhXG4vLyBtb2RhbCB0aGF0IG11c3Qgbm90IHNoYXJlIHRoZSBtYWluIHZpZXdlcidzIHJlZ2lvbi9pbWFnZSBzdGF0ZSkuXG5leHBvcnQgeyBwcm92aWRlVmlzdWFsaXphdGlvbiB9IGZyb20gJy4vbGliL3Byb3ZpZGUtdmlzdWFsaXphdGlvbic7XG5cbi8vIEtleXMgb2YgdGhlIHRvYXN0IG91dGxldHMgdGhlIHZpc3VhbGl6ZXIgcmVuZGVycyBmb3IgdGhlIGxpYnJhcnkncyBvd24gbm90aWNlcy5cbi8vIEEgaG9zdCB0aGF0IHJlbmRlcnMgaXRzIG93biA8cC10b2FzdD4gd2l0aCBvbmUgb2YgdGhlc2Uga2V5cyBzaG93cyBlYWNoIG5vdGljZSB0d2ljZS5cbmV4cG9ydCB7IFZJWl9UT0FTVF9LRVksIFZJWl9BTEVSVF9UT0FTVF9LRVkgfSBmcm9tICcuL2xpYi90b2FzdC1vdXRsZXRzJztcblxuLy8g4pSA4pSAIFB1YmxpYyBjb21wb25lbnRzIChzdGFuZGFsb25lOyBhbHNvIHJlLWV4cG9ydGVkIGJ5IFZpc3VhbGl6YXRpb25Nb2R1bGUpIOKUgOKUgFxuLy8gVGhlIGVtYmVkZGFibGUgZWxlbWVudHMgKGA8dmlzdWFsaXplcj5gLCBgPHJlZ2lvbi1lZGl0b3I+YCwgYDxoZXgtY29sb3ItcGlja2VyPmAsXG4vLyBgPGNoYW5uZWwtaGlzdG9ncmFtPmAsIGA8c3BhdGlhbC1jb250cm9scz5gLCBgPHNwYXRpYWwtY2hhcnRzPmApLiBFYWNoIGlzIHN0YW5kYWxvbmU6XG4vLyBhIGhvc3QgaW1wb3J0cyBpdCBkaXJlY3RseSBhbmQgYmluZHMgdGhlIGJhY2tlbmQgY2hhaW4gd2l0aCBgcHJvdmlkZVZpc3VhbGl6YXRpb24oKWAuXG5leHBvcnQgeyBWaXN1YWxpemVyQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvdmlzdWFsaXplci5jb21wb25lbnQnO1xuZXhwb3J0IHsgUmVnaW9uRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvcmVnaW9uLWVkaXRvci9yZWdpb24tZWRpdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgeyBIZXhDb2xvclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vbGliL2hleC1jb2xvci1waWNrZXIvaGV4LWNvbG9yLXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0IHsgQ2hhbm5lbEhpc3RvZ3JhbUNvbXBvbmVudCB9IGZyb20gJy4vbGliL2NoYW5uZWwtaGlzdG9ncmFtL2NoYW5uZWwtaGlzdG9ncmFtLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTcGF0aWFsQ29udHJvbHNDb21wb25lbnQgfSBmcm9tICcuL2xpYi9zcGF0aWFsLWNvbnRyb2xzL3NwYXRpYWwtY29udHJvbHMuY29tcG9uZW50JztcbmV4cG9ydCB0eXBlIHsgU3BhdGlhbExlZ2VuZEVudHJ5IH0gZnJvbSAnLi9saWIvc3BhdGlhbC1jb250cm9scy9zcGF0aWFsLWNvbnRyb2xzLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTcGF0aWFsQ2hhcnRzQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvc3BhdGlhbC1jb250cm9scy9zcGF0aWFsLWNoYXJ0cy9zcGF0aWFsLWNoYXJ0cy5jb21wb25lbnQnO1xuLy8gUHVyZSBjaGFydCBidWlsZGVycywgZXhwb3J0ZWQgc28gYSBob3N0IGNhbiByZW5kZXIgdGhlIHNhbWUgZGlzdHJpYnV0aW9uc1xuLy8gd2hlcmV2ZXIgaXQgbGlrZXMgKGEgcmVwb3J0LCBhIGRpZmZlcmVudCBjaGFydGluZyBzdXJmYWNlKS5cbmV4cG9ydCB7XG4gIGJ1aWxkT21pY3NUcmFjZXMsXG4gIG9taWNzTGF5b3V0LFxuICBiZW5lZml0c0Zyb21Hcm91cGluZyxcbn0gZnJvbSAnLi9saWIvaW1wbGVtZW50YXRpb25zL3Bsb3RseS9vbWljcy10cmFjZS1idWlsZGVycyc7XG5leHBvcnQgdHlwZSB7XG4gIE9taWNzQ2hhcnRLaW5kLFxuICBPbWljc0dyb3VwaW5nLFxuICBPbWljc1RyYWNlSW5wdXQsXG59IGZyb20gJy4vbGliL2ltcGxlbWVudGF0aW9ucy9wbG90bHkvb21pY3MtdHJhY2UtYnVpbGRlcnMnO1xuIl19
|
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
* structurally, so the host keeps passing its own instances unchanged.
|
|
9
9
|
*/
|
|
10
10
|
export {};
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9pbWFnZS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGlicmFyeS1vd25lZCBkYXRhIGludGVyZmFjZXMgZm9yIHRoZSBpbWFnZSB0aGUgdmlzdWFsaXphdGlvbiByZW5kZXJzLlxuICpcbiAqIFRoZSB2aXN1YWxpemF0aW9uIHBhY2thZ2UgbXVzdCBub3QgaW1wb3J0IHRoZSBob3N0IGFwcCdzIGNvbmNyZXRlIG1vZGVsc1xuICogKGBtYWluL21vZGVscy9maWxlLWluZm9gKSwgb3IgaXQgY2FuJ3QgYmVjb21lIGEgc3RhbmRhbG9uZSBsaWJyYXJ5LiBUaGVzZVxuICogc2xpbSBpbnRlcmZhY2VzIGRlY2xhcmUgb25seSB0aGUgZmllbGRzIHRoZSBsaWJyYXJ5IHJlYWRzL3dyaXRlczsgdGhlIGhvc3Qnc1xuICogYEltYWdlSW5mb2AvYEltYWdlTWV0YWRhdGFgIGNsYXNzZXMgYXJlIHB1cmUgZGF0YSBob2xkZXJzIHRoYXQgc2F0aXNmeSB0aGVtXG4gKiBzdHJ1Y3R1cmFsbHksIHNvIHRoZSBob3N0IGtlZXBzIHBhc3NpbmcgaXRzIG93biBpbnN0YW5jZXMgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVnaW9uU291cmNlIH0gZnJvbSAnLi4vcmVnaW9uLXNvdXJjZS9yZWdpb24tc291cmNlJztcblxuLyoqIFBlci1jaGFubmVsIG1ldGFkYXRhIGZyb20gdGhlIHNlcnZlciBkZXNjcmlwdG9yIChpc3N1ZSAjNzYpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2hhbm5lbEluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTdWdnZXN0ZWQgZGlzcGxheSB0aW50IGFzIFwiI1JSR0dCQlwiLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICAvKiogRW1iZWRkZWQgMjU2LWVudHJ5IGRpc3BsYXkgTFVUIGFzIFwiI1JSR0dCQlwiIChpbnRlbnNpdHnihpJjb2xvciksIG9yXG4gICAqICBudWxsL3VuZGVmaW5lZCB3aGVuIHRoZSBmaWxlIGhhcyBubyBwYWxldHRlIGZvciB0aGlzIGNoYW5uZWwuICovXG4gIGx1dD86IHN0cmluZ1tdIHwgbnVsbDtcbiAgYml0RGVwdGg/OiBudW1iZXI7XG4gIC8qKiBQaXhlbC10eXBlIG1pbmltdW0gKGUuZy4gMCBmb3IgdW5zaWduZWQpLiBOYXRpdmUtdW5pdCBmbG9vciBvZiB0aGUgd2luZG93LiAqL1xuICBtaW5BbGxvd2VkPzogbnVtYmVyO1xuICAvKiogUGl4ZWwtdHlwZSBtYXhpbXVtIChlLmcuIDY1NTM1IGZvciB1bnNpZ25lZCAxNi1iaXQpLiBOYXRpdmUtdW5pdCBjZWlsaW5nLiAqL1xuICBtYXhBbGxvd2VkPzogbnVtYmVyO1xufVxuXG4vKiogUGVyLXNlcmllcyBpbWFnZSBtZXRhZGF0YSAocGh5c2ljYWwgc2l6ZSArIGRpbWVuc2lvbnMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VNZXRhZGF0YSB7XG4gIGNoYW5uZWxDb3VudDogbnVtYmVyO1xuICByZ2JDaGFubmVsczogbnVtYmVyO1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgejogbnVtYmVyO1xuICAvKiogUGh5c2ljYWwgcGl4ZWwgc2l6ZSBpbiDCtW07IG51bGwvdW5kZWZpbmVkIHdoZW4gdGhlIGZvcm1hdCByZXBvcnRzIG5vbmUuICovXG4gIG1wcFg/OiBudW1iZXIgfCBudWxsO1xuICBtcHBZPzogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFBoeXNpY2FsIHNwYWNpbmcgQkVUV0VFTiBzbGljZXMgaW4gwrVtIOKAlCB0aGUgeiBjb3VudGVycGFydCBvZiBgbXBwWGAvYG1wcFlgLFxuICAgKiAgZm9yIGEgc3RhY2sgdGhhdCBrbm93cyBpdCAoYSByZXNhbXBsZWQgdm9sdW1lLCBhIGNvbmZvY2FsIHN0YWNrKS4gSXQgaXMgd2hhdFxuICAgKiAgbGV0cyB0aGUgM0Qgdm9sdW1lIHZpZXcgcmVuZGVyIHRydWUgYW5pc290cm9weTogd2l0aCBhbGwgdGhyZWUgcHJlc2VudCB0aGVcbiAgICogIHdvcmxkIGJveCBpcyB0aGUgaW1hZ2UncyByZWFsIHBoeXNpY2FsIGV4dGVudCwgc28gNDAgeCA0MCB4IDIwMCDCtW0gdm94ZWxzXG4gICAqICByZWFkIGFzIGEgYnJhaW4gYW5kIG5vdCBhcyBhIGN1YmUtYXNwZWN0IGJyaWNrLiBBYnNlbnQsIHRoZSB2aWV3IGZhbGxzIGJhY2tcbiAgICogIHRvIGl0cyByZXNvbHV0aW9uLWludmFyaWFudCByZWZlcmVuY2UgYm94LCB3aGljaCBpcyBzaGFwZS1vbmx5LiAqL1xuICBtcHBaPzogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFBlci1jaGFubmVsIG5hbWUvY29sb3IvTFVUIGZvciBtdWx0aWNoYW5uZWwgKG5vbi1SR0IpIGltYWdlcywgd2hlbiBrbm93bi4gKi9cbiAgY2hhbm5lbEluZm8/OiBJQ2hhbm5lbEluZm9bXSB8IG51bGw7XG59XG5cbi8qKiBUaGUgaW1hZ2UgY3VycmVudGx5IGJlaW5nIHZpc3VhbGl6ZWQuIEZpZWxkIG9wdGlvbmFsaXR5IG1pcnJvcnMgdGhlIGhvc3Qnc1xuICogIGBJbWFnZUluZm9gIHNvIGl0cyBpbnN0YW5jZXMgYXJlIGFzc2lnbmFibGUgdG8gdGhpcyBpbnRlcmZhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZUluZm8ge1xuICBpc0dyYXlzY2FsZTogYm9vbGVhbjtcbiAgdHJ1ZUltYWdlU2l6ZTogbnVtYmVyW107XG4gIHVybHM6IHN0cmluZ1tdO1xuICAvKiogT3B0aW9uYWwgc21hbGwtdGllciBVUkxzIChmYXN0IGJsdXJyeSBwbGFjZWhvbGRlciksIDE6MSB3aXRoIGB1cmxzYC4gKi9cbiAgc21hbGxVcmxzPzogc3RyaW5nW107XG4gIGlzU3RhY2s6IGJvb2xlYW47XG4gIHNob3dTdGFjazogYm9vbGVhbjtcbiAgc2NhbGVSYXRpbzogYm9vbGVhbjtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgcm9pSnNvblN0cj86IHN0cmluZztcbiAgLyoqIFBlci1zbGljZSBST0kgR2VvSlNPTiwgYWxpZ25lZCAxOjEgd2l0aCBgdXJsc2AsIGZvciBhIGZvbGRlciBzdGFjayB3aGVyZVxuICAgKiAgZWFjaCBzbGljZSBpcyBhIHNlcGFyYXRlIGZpbGUgd2l0aCBpdHMgb3duIHNpYmxpbmcgYDxzdGVtPi5nZW9qc29uYFxuICAgKiAgKGBudWxsYCBmb3Igc2xpY2VzIHdpdGhvdXQgb25lKS4gV2hlbiBwcmVzZW50LCB0aGUgY29tcG9uZW50IGFwcGxpZXNcbiAgICogIGByb2lKc29uU3Ryc1t6XWAgZm9yIHRoZSBkaXNwbGF5ZWQgc2xpY2UgYW5kIHN3YXBzIGl0IG9uIHNjcnViIOKAlCBhc1xuICAgKiAgb3Bwb3NlZCB0byB0aGUgc2NhbGFyIGByb2lKc29uU3RyYCwgd2hpY2ggaXMgb25lIFJPSSBzZXQgZm9yIHRoZSB3aG9sZVxuICAgKiAgaW1hZ2UgKGEgc2luZ2xlIGZpbGUgb3IgYSBzZXJ2ZXIgei1zdGFjaykuIChqaXQtdWkjOTMpICovXG4gIHJvaUpzb25TdHJzPzogKHN0cmluZyB8IG51bGwpW107XG4gIC8qKiBCYXNlIFVSTCBvZiBhIHNlcnZlci1zaWRlIHJlZ2lvbiBzb3VyY2UgZm9yIHRoaXMgaW1hZ2UgKHNlZSBgb3Blbkh0dHBSZWdpb25Tb3VyY2VgKTpcbiAgICogIGl0cyByZWdpb25zIGFyZSBkcmF3biBmcm9tIHRoZSBzZXJ2ZXIncyBsZXZlbC1vZi1kZXRhaWwgdGlsZXMgaW5zdGVhZCBvZiBiZWluZyBsb2FkZWRcbiAgICogIGZyb20gYHJvaUpzb25TdHJgLiBPbiBhIHN0YWNrLCBzbGljZSB6IHNob3dzIHRoZSBzb3VyY2UncyBwbGFuZSB6LiAqL1xuICByZWdpb25Tb3VyY2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBUaGUgaW1hZ2UncyBvd24gcmVnaW9ucywgb25lIHJlZ2lvbiBzb3VyY2UgcGVyIHNsaWNlLCBvcGVuZWQgdGhlIGZpcnN0IHRpbWUgaXRzIHNsaWNlIGlzXG4gICAqICBzaG93bjogd2hhdCBhbiBpbWFnZSBidWlsdCBmcm9tIGFubm90YXRpb25zIGFsb25lIGNhcnJpZXMgKHNlZSBgb3BlbkFubm90YXRpb25zYDogYSBsYWJlbFxuICAgKiAgdm9sdW1lIHRyYWNlZCBzbGljZSBieSBzbGljZSwgYSBmb2xkZXIgb2YgcGVyLXNsaWNlIEdlb0pTT04pLiBBdHRhY2hlZCB3aGVuIHRoZSBpbWFnZSBsYW5kcyxcbiAgICogIHJlcGxhY2luZyBpdHMgcmVnaW9ucywgYXMgYW4gaW1wb3J0ZWQgbGFiZWwgdm9sdW1lIG9yIGZvbGRlciBpczsgdGFrZXMgcHJlY2VkZW5jZSBvdmVyXG4gICAqICBgcm9pSnNvblN0cnNgLCBgcm9pSnNvblN0cmAgYW5kIGByZWdpb25Tb3VyY2VVcmxgLiBLZXllZCBieSBzbGljZSBpbmRleC4gKi9cbiAgcmVnaW9uU2xpY2VzPzogUmVhZG9ubHlNYXA8bnVtYmVyLCAoKSA9PiBQcm9taXNlPFJlZ2lvblNvdXJjZT4+O1xuICAvKiogUGVyLXNsaWNlLCBwZXItY2hhbm5lbCBwbGFuZSBVUkxzIGZvciBhIFNFUlZFUkxFU1MgbXVsdGljaGFubmVsIGltYWdlXG4gICAqICAoYHRpbGVkOiBmYWxzZWAgKyBgaW1hZ2VNZXRhWzBdLmNoYW5uZWxDb3VudCA+IDFgKS4gYGNoYW5uZWxVcmxzW3pdW2NdYFxuICAgKiAgaXMgYSBjb21wbGV0ZSBzaW5nbGUtYmFuZCBpbWFnZSBvZiBjaGFubmVsIGMgYXQgc2xpY2Ugei4gVGhlIE9TRCBzaW1wbGVcbiAgICogIHBhdGggY29tcG9zaXRlcyB0aGVtIGNsaWVudC1zaWRlIOKAlCBwZXItY2hhbm5lbCBjb2xvdXIvd2luZG93L2dhbW1hIGZyb21cbiAgICogIHRoZSBjaGFubmVsIHBhbmUg4oCUIGluc3RlYWQgb2Ygb3BlbmluZyB0aGUgZmxhdCBgdXJsc1t6XWAuIChqaXQtdWkjNzYpICovXG4gIGNoYW5uZWxVcmxzPzogc3RyaW5nW11bXTtcbiAgaW1hZ2VNZXRhOiBJSW1hZ2VNZXRhZGF0YVtdO1xuICAvKiogSG93IHRoZSBPcGVuU2VhZHJhZ29uIGJhY2tlbmQgc2hvdWxkIHNvdXJjZSB0aGlzIGltYWdlLlxuICAgKiAgLSBgdHJ1ZWAvYWJzZW50IChkZWZhdWx0KTogc2VydmVyLXRpbGVkIOKAlCBPU0QgcG9sbHMgYC90aWxlcy9pbmZvYCBmb3IgYVxuICAgKiAgICBweXJhbWlkIGFuZCBmZXRjaGVzIHRpbGVzIGZyb20gdGhlIHNsaWRlLWNyb3Agc2VydmVyICh3aG9sZS1zbGlkZSBwYXRoKS5cbiAgICogIC0gYGZhbHNlYDogYSBzZWxmLWNvbnRhaW5lZCwgZGlyZWN0bHktbG9hZGFibGUgaW1hZ2Ug4oCUIGB1cmxzW3pJbmRleF1gIGlzIGFcbiAgICogICAgY29tcGxldGUgaW1hZ2UgKGUuZy4gYSBgYmxvYjpgIFVSTCBidWlsdCBmcm9tIGEgY2xpZW50LXNpZGUgcGl4ZWwgYnVmZmVyKSxcbiAgICogICAgb3BlbmVkIHZpYSBPU0QncyBzaW5nbGUtaW1hZ2Ugc291cmNlIHdpdGggbm8gdGlsZSBzZXJ2ZXIuIExldHMgaW4tbWVtb3J5XG4gICAqICAgIGltYWdlcyAodGhlIHByb2Nlc3NpbmcgcGlwZWxpbmUpIHVzZSB0aGUgT1NEIHZpZXdlciB3aXRob3V0IGEgcm91bmQtdHJpcC4gKi9cbiAgdGlsZWQ/OiBib29sZWFuO1xuICAvKiogT25lLXNob3QgaGludDogb3BlbiB0aGUgc3RhY2sgb24gdGhpcyBzbGljZSBpbnN0ZWFkIG9mIHNsaWNlIDAgKGUuZy4gdGhlXG4gICAqICBob3N0IGNsaWNrZWQgYSBzcGVjaWZpYyBmaWxlIHdpdGhpbiBhIG51bWJlcmVkIGltYWdlIHNlcmllcykuIFRoZVxuICAgKiAgY29tcG9uZW50IGNvbnN1bWVzIGFuZCBjbGVhcnMgdGhpcyB0aGUgZmlyc3QgdGltZSBpdCBzZWVzIHRoZSBvYmplY3QsIHNvXG4gICAqICByZS1kZWxpdmVyaW5nIHRoZSBzYW1lIEltYWdlSW5mbyAoZS5nLiBhIHBsb3QtdHlwZSBzd2l0Y2gpIGRvZXNuJ3QgcmVzZXRcbiAgICogIHRoZSB1c2VyJ3MgY3VycmVudCBzY3J1YiBwb3NpdGlvbi4gKi9cbiAgaW5pdGlhbFpJbmRleD86IG51bWJlcjtcbn1cbiJdfQ==
|
|
@@ -187,6 +187,7 @@ export class NapariRegionOverlay {
|
|
|
187
187
|
this.commitPolygon(pts, true);
|
|
188
188
|
this.redraw();
|
|
189
189
|
};
|
|
190
|
+
this.own = opts.screenSpace ? new Set() : null;
|
|
190
191
|
if (getComputedStyle(host).position === 'static')
|
|
191
192
|
host.style.position = 'relative';
|
|
192
193
|
this.svg = document.createElementNS(SVG_NS, 'svg');
|
|
@@ -200,7 +201,7 @@ export class NapariRegionOverlay {
|
|
|
200
201
|
touchAction: 'none',
|
|
201
202
|
});
|
|
202
203
|
this.host.appendChild(this.svg);
|
|
203
|
-
this.renderer = new NapariRegionSvgRenderer(this.svg, this.store);
|
|
204
|
+
this.renderer = new NapariRegionSvgRenderer(this.svg, this.store, (r) => this.draws(r));
|
|
204
205
|
this.projection = new OverlayProjection(this.svg, this.viewer);
|
|
205
206
|
this.sourceLayer =
|
|
206
207
|
opts.regionSource === false ? null : new RegionSourceLayer(this.svg, this.store.getRegionSourceView$());
|
|
@@ -333,11 +334,20 @@ export class NapariRegionOverlay {
|
|
|
333
334
|
this.draftPath.push([ix, iy]);
|
|
334
335
|
}
|
|
335
336
|
}
|
|
336
|
-
/** The currently-selected region (single selection), or null. */
|
|
337
|
+
/** The currently-selected region (single selection) this overlay draws, or null. */
|
|
337
338
|
selectedRegion() {
|
|
338
339
|
const regions = this.store.getRegions();
|
|
339
340
|
const i = this.selected[0];
|
|
340
|
-
|
|
341
|
+
const region = i != null && i >= 0 && i < regions.length ? regions[i] : null;
|
|
342
|
+
return region && this.draws(region) ? region : null;
|
|
343
|
+
}
|
|
344
|
+
/** Whether this overlay draws (and lets the pointer pick) `region`: see {@link own}. */
|
|
345
|
+
draws(region) {
|
|
346
|
+
return !this.own || this.own.has(region.id);
|
|
347
|
+
}
|
|
348
|
+
/** The regions this overlay drew in screen space (the 3D view's lassos); [] in image space. */
|
|
349
|
+
ownRegionIds() {
|
|
350
|
+
return this.own ? [...this.own] : [];
|
|
341
351
|
}
|
|
342
352
|
/**
|
|
343
353
|
* Start a select/move interaction: grab a handle (rectangle corner) or vertex of the already-
|
|
@@ -360,7 +370,7 @@ export class NapariRegionOverlay {
|
|
|
360
370
|
const regions = this.store.getRegions();
|
|
361
371
|
const [wx, wy] = this.projection.toWorld(e.clientX, e.clientY);
|
|
362
372
|
for (let i = regions.length - 1; i >= 0; i--) {
|
|
363
|
-
if (this.store.isClassHidden(regions[i].label))
|
|
373
|
+
if (this.store.isClassHidden(regions[i].label) || !this.draws(regions[i]))
|
|
364
374
|
continue;
|
|
365
375
|
if (regionContains(regions[i], wx, wy, { toScreen: this.projection.toScreen, tolPx: OPEN_PATH_HIT_PX })) {
|
|
366
376
|
this.store.selectRegion(regions[i]);
|
|
@@ -441,7 +451,7 @@ export class NapariRegionOverlay {
|
|
|
441
451
|
const regions = this.store.getRegions();
|
|
442
452
|
this.store.setSelectedShapeIndices(regionsInRect(regions, x0, y0, x1, y1, {
|
|
443
453
|
skipProfiles: true,
|
|
444
|
-
skip: (r) => this.store.isClassHidden(r.label),
|
|
454
|
+
skip: (r) => this.store.isClassHidden(r.label) || !this.draws(r),
|
|
445
455
|
}));
|
|
446
456
|
const features = this.sourceLayer?.featuresInRect(x0, y0, x1, y1) ?? [];
|
|
447
457
|
if (features.length) {
|
|
@@ -459,6 +469,7 @@ export class NapariRegionOverlay {
|
|
|
459
469
|
region.bounds = rect;
|
|
460
470
|
region.color = this.store.getShapeColor();
|
|
461
471
|
this.store.addRegion(region);
|
|
472
|
+
this.own?.add(region.id);
|
|
462
473
|
}
|
|
463
474
|
commitPolygon(points, closed) {
|
|
464
475
|
const poly = new Polygon();
|
|
@@ -472,6 +483,7 @@ export class NapariRegionOverlay {
|
|
|
472
483
|
region.color = this.store.getShapeColor();
|
|
473
484
|
region.label = 'Region';
|
|
474
485
|
this.store.addRegion(region);
|
|
486
|
+
this.own?.add(region.id);
|
|
475
487
|
}
|
|
476
488
|
// ── rendering ─────────────────────────────────────────────────────────────
|
|
477
489
|
/** Show or hide the drawn regions. A region being drawn stays visible either way. */
|
|
@@ -505,4 +517,4 @@ export class NapariRegionOverlay {
|
|
|
505
517
|
});
|
|
506
518
|
}
|
|
507
519
|
}
|
|
508
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXJlZ2lvbi1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvbmFwYXJpLWpzL25hcGFyaS1yZWdpb24tb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRW5HLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsYUFBYSxHQUNkLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFXLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDO0FBQzVDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0I7Ozs7R0FJRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixrR0FBa0c7QUFDbEcsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLDRFQUE0RTtBQUM1RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIseUZBQXlGO0FBQ3pGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBNkIzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFB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RUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsMEZBQTBGO0lBQ2xGLGFBQWE7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDN0YsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSVJlZ2lvbk92ZXJsYXksIFJlZ2lvblRvb2xNb2RlIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3JlZ2lvbi1vdmVybGF5LmNvbnRyYWN0JztcbmltcG9ydCB7IFJlZ2lvbiwgUmVjdGFuZ2xlLCBQb2x5Z29uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3JlZ2lvbic7XG5pbXBvcnQgeyBSZWdpb25TdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3JlZ2lvbi1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgQWZmaW5lIH0gZnJvbSAnLi4vLi4vcmVnaW9uLW92ZXJsYXkvc3ZnLXJlZ2lvbi1yZW5kZXJlcic7XG5pbXBvcnQgeyBSZWdpb25Tb3VyY2VMYXllciwgU09VUkNFX01BUlFVRUVfTElNSVQgfSBmcm9tICcuLi8uLi9yZWdpb24tb3ZlcmxheS9yZWdpb24tc291cmNlLWxheWVyJztcblxuaW1wb3J0IHtcbiAgaGl0SGFuZGxlLFxuICBuZWFyZXN0RWRnZSxcbiAgbmVhcmVzdFZlcnRleCxcbiAgcmVnaW9uQ29udGFpbnMsXG4gIHJlZ2lvbnNJblJlY3QsXG59IGZyb20gJy4uLy4uL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1nZW9tZXRyeSc7XG5cbmltcG9ydCB7IERyYWdCb3gsIE5hcGFyaVJlZ2lvblN2Z1JlbmRlcmVyIH0gZnJvbSAnLi9yZWdpb24tb3ZlcmxheS9yZWdpb24tc3ZnLXJlbmRlcmVyJztcbmltcG9ydCB7IE92ZXJsYXlQcm9qZWN0aW9uIH0gZnJvbSAnLi9yZWdpb24tb3ZlcmxheS9vdmVybGF5LXByb2plY3Rpb24nO1xuaW1wb3J0IHsgUmVnaW9uRWRpdCwgYXBwbHlSZWdpb25FZGl0IH0gZnJvbSAnLi9yZWdpb24tb3ZlcmxheS9yZWdpb24tZWRpdCc7XG5cbmNvbnN0IFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4vKipcbiAqIE1pbiBkcmFnIGJlZm9yZSBhIGZyZWVoYW5kIHBhdGggcmVjb3JkcyBhbm90aGVyIHBvaW50LCBpbiBTQ1JFRU4gcGl4ZWxzLlxuICpcbiAqIFNjcmVlbiByYXRoZXIgdGhhbiB3b3JsZCwgd2hpY2ggaXMgd2hhdCBcIjIgaW1hZ2UgcHhcIiBhbHdheXMgbWVhbnQgaW4gcHJhY3RpY2U6IGF0IDEwMCVcbiAqIHpvb20gb3ZlciBhbiBpbWFnZSB0aGUgdHdvIGFyZSB0aGUgc2FtZSB0aGluZy4gVGFrZW4gYXMgd29ybGQgdW5pdHMgaXQgYnJlYWtzIG9uIGFueVxuICogZGF0YXNldCB3aG9zZSB3b3JsZCBpcyBzbWFsbCDigJQgc2VxRklTSCdzIHNhbXBsZSBzcGFucyBhYm91dCA1IHVuaXRzLCBzbyBhIDItdW5pdFxuICogdGhyZXNob2xkIHJlY29yZHMgYSBwb2ludCBldmVyeSA0MCUgb2YgdGhlIHdheSBhY3Jvc3MgYW5kIGEgZnJlZWhhbmQgUk9JIGNvbWVzIG91dCBhcyBhXG4gKiB0cmlhbmdsZS4gQWdhaW5zdCB0aGUgc2NyZWVuIGl0IGFsc28gZG9lcyB0aGUgcmlnaHQgdGhpbmcgdW5kZXIgem9vbTogZHJhd2luZyB6b29tZWQgaW5cbiAqIHJlY29yZHMgYSBmaW5lciBwYXRoLCBiZWNhdXNlIHRoYXQgaXMgZXhhY3RseSB3aGVuIHRoZSBleHRyYSBkZXRhaWwgaXMgdmlzaWJsZS5cbiAqL1xuY29uc3QgRlJFRUhBTkRfU1RFUF9QWCA9IDI7XG4vKipcbiAqIFNtYWxsZXN0IGNvbW1pdHRlZCByZWN0YW5nbGUsIGluIFNDUkVFTiBwaXhlbHMgb24gZWFjaCBzaWRlLlxuICpcbiAqIEl0cyBqb2IgaXMgdG8gdGhyb3cgYXdheSBhIGNsaWNrIHRoYXQgd2FzIG5vdCBhIGRyYWcuIEhlbGQgaW4gd29ybGQgdW5pdHMg4oCUIHdoaWNoIGl0IHdhc1xuICog4oCUIGl0IGluc3RlYWQgdGhyb3dzIGF3YXkgcmVhbCBkcmFncyBvbiBhbnkgZGF0YXNldCB3aG9zZSB3b3JsZCBpcyBzbWFsbDogaW4gc2VxRklTSCdzXG4gKiB+NSB4IDcgdW5pdCBzYW1wbGUgYSByZWN0YW5nbGUgaGFkIHRvIGNvdmVyIDQwJSBvZiB0aGUgd2lkdGggdG8gY29tbWl0IGF0IGFsbCwgYW5kXG4gKiBhbnl0aGluZyBzbWFsbGVyIHZhbmlzaGVkIHdpdGggbm8gZmVlZGJhY2suIFRoYXQgd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgUk9JcyBiZWluZ1xuICogaW1wb3NzaWJsZSB0byBjcmVhdGUgdGhlcmUuXG4gKi9cbmNvbnN0IE1JTl9SRUNUX0RSQUdfUFggPSAyO1xuLyoqXG4gKiBBIHJ1YmJlciBiYW5kIHNtYWxsZXIgdGhhbiB0aGlzIG9uIGJvdGggc2lkZXMsIGluIFNDUkVFTiBwaXhlbHMsIGlzIGEgY2xpY2sgb24gZW1wdHkgc3BhY2VcbiAqIChpdCBjbGVhcnMgdGhlIHNlbGVjdGlvbikuIFNjcmVlbiBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHtAbGluayBNSU5fUkVDVF9EUkFHX1BYfTogMyB3b3JsZFxuICogdW5pdHMgaXMgb3ZlciBoYWxmIG9mIHNlcUZJU0gncyBzYW1wbGUuXG4gKi9cbmNvbnN0IE1JTl9NQVJRVUVFX1BYID0gMztcbi8qKiBDbGljay1kaXN0YW5jZSAoc2NyZWVuIHB4KSB3aXRoaW4gd2hpY2ggYSBwb2x5Z29uIGNsaWNrIHNuYXBzIGNsb3NlZCBvbnRvIHRoZSBmaXJzdCB2ZXJ0ZXguICovXG5jb25zdCBDTE9TRV9TTkFQX1BYID0gMTA7XG4vKiogU2NyZWVuLXB4IGhpdCByYWRpdXMgZm9yIGdyYWJiaW5nIGEgdmVydGV4IC8gcmVjdGFuZ2xlIGNvcm5lciBoYW5kbGUuICovXG5jb25zdCBIQU5ETEVfSElUX1BYID0gOTtcbi8qKiBTY3JlZW4tcHggZGlzdGFuY2UgZnJvbSBhbiBvcGVuIHBvbHlsaW5lIHdpdGhpbiB3aGljaCBhIGNsaWNrIHNlbGVjdHMgaXQgKGFzIE9TRCkuICovXG5jb25zdCBPUEVOX1BBVEhfSElUX1BYID0gNjtcblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgdGhlIG5hcGFyaSBWaWV3ZXIgdGhlIG92ZXJsYXkgbmVlZHMgKGNvb3JkIHRyYW5zZm9ybXMgKyBjb250cm9sIGdhdGluZykuXG4gKlxuICogQ09PUkRJTkFURSBTUEFDRVM6IGBjYW52YXNUb1dvcmxkYCB0YWtlcyBDTElFTlQgcGl4ZWxzICh2aWV3cG9ydCBjb29yZGluYXRlcywgYXMgYSBwb2ludGVyXG4gKiBldmVudCdzIGBjbGllbnRYL1lgKSwgZXhhY3RseSBhcyBuYXBhcmktanMgYFZpZXdlci5jYW52YXNUb1dvcmxkYCBkb2VzLiBgY2FudmFzVHJhbnNmb3JtYCBpc1xuICogdGhlIGNhbWVyYSdzIHdvcmxkIOKGkiBDQU5WQVMtTE9DQUwgQ1NTLXBpeGVsIGFmZmluZSwgbmFwYXJpLWpzIGBWaWV3ZXIuY2FudmFzVHJhbnNmb3JtYCwgd2hpY2hcbiAqIHJlYWRzIG5vIGxheW91dDogZHJhd2luZyBhbmQgZm9sbG93aW5nIHRoZSBjYW1lcmEgdXNlIGl0LCBzbyBhIGNhbWVyYSBmcmFtZSBjb3N0cyBvbmVcbiAqIGBtYXRyaXgoLi4uKWAgYW5kIG5vIGBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKWAgKHJldmlldyBOQVBBUkktQk9VTkRBUlktMTApLiBUaGUgc3ZnIGNvdmVycyB0aGVcbiAqIHBsb3QgaG9zdCBhbmQgdGhlIGNhbnZhcyBpcyB0aGUgaG9zdCdzIGluLWZsb3cgY2hpbGQgYXQgaXRzIHRvcC1sZWZ0LCBzbyBjYW52YXMtbG9jYWwgYW5kXG4gKiBzdmctbG9jYWwgcGl4ZWxzIGFyZSB0aGUgc2FtZTsgYSBwb2ludGVyJ3MgY2xpZW50IHBpeGVscyBhcmUgbWFwcGVkIGludG8gdGhlIHN2ZyBieSB0aGVcbiAqIG92ZXJsYXkgaXRzZWxmLlxuICpcbiAqIEV4cG9ydGVkIGJlY2F1c2UgdGhlIDNEIHNwYXRpYWwgbW9kZSBzdXBwbGllcyBhIFNDUkVFTi1TUEFDRSBpbXBsZW1lbnRhdGlvbiBvZiBpdDogdGhlcmUgdGhlXG4gKiBkcmF3biBzaGFwZSBpcyBhIGxhc3NvIGluIGNhbnZhcyBwaXhlbHMsIG5vdCBhIHJlY3RhbmdsZSBpbiBpbWFnZSBzcGFjZSwgc28gXCJ3b3JsZFwiIGlzIHRoZVxuICogY2FudmFzIGl0c2VsZiDigJQgYGNhbnZhc1RvV29ybGRgIGlzIHRoZSBjbGllbnQg4oaSIGNhbnZhcyBvZmZzZXQgYW5kIGBjYW52YXNUcmFuc2Zvcm1gIHRoZVxuICogaWRlbnRpdHkuIFRoYXQgbGV0cyB0aGUgM0QgdmlldyByZXVzZSB0aGlzIHdob2xlIG92ZXJsYXkg4oCUIGV2ZXJ5IHRvb2wsIHRoZSBoYW5kbGVzLCB0aGUgc3RvcmVcbiAqIHJvdW5kLXRyaXAg4oCUIHdpdGggbm8gM0Qtc3BlY2lmaWMgZHJhd2luZyBjb2RlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlWaWV3ZXIge1xuICAvKiogQ2xpZW50IHB4IOKGkiB3b3JsZC4gKi9cbiAgY2FudmFzVG9Xb3JsZChjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl07XG4gIC8qKiBXb3JsZCDihpIgY2FudmFzLWxvY2FsICg9IHN2Zy1sb2NhbCkgQ1NTIHB4LCBhcyBhbiBTVkcgYWZmaW5lIGBbYSwgYiwgYywgZCwgZSwgZl1gLiAqL1xuICBjYW52YXNUcmFuc2Zvcm0oKTogQWZmaW5lO1xuICBzZXRDb250cm9sc0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQ7XG4gIHJlYWRvbmx5IGNhbWVyYTogeyByZWFkb25seSBjaGFuZ2VkOiB7IGNvbm5lY3QobGlzdGVuZXI6ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIH0gfTtcbn1cblxuLyoqXG4gKiBTVkcgcmVnaW9uIG92ZXJsYXkgZm9yIHRoZSBuYXBhcmktanMgV2ViR1BVIGltYWdlIHZpZXcgKGppdC11aSMxMDIpLCBtaXJyb3JpbmcgdGhlIE9TRCBiYWNrZW5kJ3NcbiAqIHtAbGluayBPc2RSZWdpb25PdmVybGF5fSBidXQgZHJpdmVuIGJ5IG5hcGFyaSdzIGBjYW52YXNUb1dvcmxkYC9gY2FudmFzVHJhbnNmb3JtYCB0cmFuc2Zvcm1zXG4gKiAoc2VlIHtAbGluayBPdmVybGF5Vmlld2VyfSBmb3IgdGhlaXIgY29vcmRpbmF0ZSBzcGFjZXMpLlxuICogVmVjdG9yIHNoYXBlcyBhcmUgZHJhd24gaW4gYW4gYWJzb2x1dGVseS1wb3NpdGlvbmVkIGA8c3ZnPmAgb3ZlciB0aGUgY2FudmFzIChubyBuZWVkIHRvIHB1c2hcbiAqIHRoZW0gdGhyb3VnaCBXZWJHUFUpIGJ5IHtAbGluayBOYXBhcmlSZWdpb25TdmdSZW5kZXJlcn0gb3ZlciB0aGUgc2hhcmVkIGBTdmdSZWdpb25SZW5kZXJlcmA6XG4gKiBpbiB3b3JsZCBjb29yZGluYXRlcyBpbnNpZGUgb25lIHRyYW5zZm9ybWVkIGdyb3VwLCByZWJ1aWx0IG9uIGEgcmVnaW9uIG9yIHNlbGVjdGlvbiBjaGFuZ2UsXG4gKiB3aGlsZSBhIGNhbWVyYSBtb3ZlIG9ubHkgcmV3cml0ZXMgdGhlIHRyYW5zZm9ybSAobmFwYXJpLWpzJ3MgYGNhbnZhc1RyYW5zZm9ybWAsIHRoZSBjYW1lcmFcbiAqIGNlbnRyZS96b29tKSBhbmQgdGhlIGZldyBzY3JlZW4tc3BhY2UgaGFuZGxlcyBhbmQgbGFiZWxzLiBUaGlzIGNsYXNzIGlzXG4gKiB0aGUgZ2VzdHVyZSBjb250cm9sbGVyOiBwb2ludGVyIGhhbmRsZXJzLCB0aGUgdG9vbCBtb2RlLCBhbmQgdGhlIGVkaXQvZHJhZnQvbWFycXVlZSBzdGF0ZS5cbiAqIEl0IHdyaXRlcyBjb21wbGV0ZWQgc2hhcGVzIHRvIHRoZSBzaGFyZWQge0BsaW5rIFJlZ2lvblN0b3JlfSAoc28gc2F2ZSAvIHVuZG8gLyBleHBvcnQgd29ya1xuICogaWRlbnRpY2FsbHkgdG8gT1NEKS5cbiAqXG4gKiBTdXBwb3J0cyAoaml0LXVpIzEwMik6IHJlY3RhbmdsZSAvIHBvbHlnb24gLyBmcmVlaGFuZCBwYXRoIGRyYXdpbmcsIGNsaWNrLXNlbGVjdCBhbmQgcnViYmVyLWJhbmRcbiAqIG1hcnF1ZWUgc2VsZWN0LCBwYW4vem9vbSBnYXRpbmcgdmlhIGBzZXRDb250cm9sc0VuYWJsZWRgLCBib2R5IG1vdmUsIHZlcnRleCBtb3ZlL2FkZC9kZWxldGUsXG4gKiBiZXppZXIgaGFuZGxlIGVkaXRpbmcsIGFuZCBkb251dCBob2xlcyAoaW5jbHVkaW5nIGhvbGUgdmVydGV4ICsgaG9sZS1iZXppZXItaGFuZGxlIGVkaXRpbmcpLlxuICogSGl0LXRlc3Rpbmcgc2hhcmVzIGByZWdpb24tb3ZlcmxheS9yZWdpb24tZ2VvbWV0cnlgIHdpdGggdGhlIE9TRCBvdmVybGF5LCBzbyBib3RoIGZvbGxvd1xuICogdGhlIHNhbWUgcnVsZXMgKG11bHRpLXBhcnQgcmVnaW9ucywgaG9sZXMsIG9wZW4gcG9seWxpbmVzLCBoYW5kbGUtbGVzcyBiZXppZXIgY3VydmVzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hcGFyaVJlZ2lvbk92ZXJsYXkgaW1wbGVtZW50cyBJUmVnaW9uT3ZlcmxheSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3ZnOiBTVkdTVkdFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBOYXBhcmlSZWdpb25TdmdSZW5kZXJlcjtcbiAgLyoqIFRoZSBpbWFnZSdzIHJlZ2lvbiBzb3VyY2UsIGRyYXduIHVuZGVyIHRoZSByZWdpb25zIGF0IHRoZSB6b29tJ3MgbGV2ZWwgb2YgZGV0YWlsOyBudWxsXG4gICAqICB3aGVyZSB3b3JsZCBpcyBub3QgdGhlIGltYWdlICh0aGUgM0QgdmlldydzIHNjcmVlbi1zcGFjZSBsYXNzb3MpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHNvdXJjZUxheWVyOiBSZWdpb25Tb3VyY2VMYXllciB8IG51bGw7XG4gIC8qKiBDbGllbnQg4oaUIHN2Zy1sb2NhbCDihpQgd29ybGQgY29udmVyc2lvbnMsIHdpdGggdGhlIHN2ZyBvcmlnaW4gcmVhZCBvbmNlIHBlciBnZXN0dXJlL3JlZHJhdy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0aW9uOiBPdmVybGF5UHJvamVjdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc2Nvbm5lY3RDYW1lcmE6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBtb2RlOiBSZWdpb25Ub29sTW9kZSA9ICdub25lJztcbiAgcHJpdmF0ZSBzZWxlY3RlZDogbnVtYmVyW10gPSBbXTtcblxuICAvKiogSW4tcHJvZ3Jlc3MgZHJhd2luZyBzdGF0ZSAoaW1hZ2Utc3BhY2UpLiAqL1xuICBwcml2YXRlIGRyYWZ0UmVjdDogRHJhZ0JveCB8IG51bGwgPSBudWxsO1xuICAvKiogSW4tcHJvZ3Jlc3MgcnViYmVyLWJhbmQgc2VsZWN0aW9uIG1hcnF1ZWUgKHNlbGVjdCBtb2RlKSwgaW1hZ2Utc3BhY2UuICovXG4gIHByaXZhdGUgbWFycXVlZTogRHJhZ0JveCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGRyYWZ0UGF0aDogQXJyYXk8W251bWJlciwgbnVtYmVyXT4gfCBudWxsID0gbnVsbDsgLy8gZnJlZWhhbmQgb3IgY2xpY2sgcG9seWdvblxuICBwcml2YXRlIGRyYXdpbmcgPSBmYWxzZTsgLy8gcG9pbnRlciBpcyBkb3duIGZvciByZWN0IC8gZnJlZWhhbmRcbiAgcHJpdmF0ZSByZWdpb25zVmlzaWJsZSA9IHRydWU7XG5cbiAgLyoqIEluLXByb2dyZXNzIG1hbmlwdWxhdGlvbiAoc2VsZWN0L21vdmUgbW9kZXMpOiBkcmFnZ2luZyBhIGJvZHksIGEgcG9seWdvbiB2ZXJ0ZXgsIG9yIGFcbiAgICogIHJlY3RhbmdsZSBjb3JuZXIuIGBhbmNob3JgIGlzIHRoZSBmaXhlZCBvcHBvc2l0ZSBjb3JuZXIgZm9yIGEgcmVjdGFuZ2xlIHJlc2l6ZS4gKi9cbiAgcHJpdmF0ZSBlZGl0OiBSZWdpb25FZGl0IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0OiBIVE1MRWxlbWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdlcjogT3ZlcmxheVZpZXdlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBSZWdpb25TdG9yZSxcbiAgICBvcHRzOiB7IHJlZ2lvblNvdXJjZT86IGJvb2xlYW4gfSA9IHt9LFxuICApIHtcbiAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShob3N0KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIGhvc3Quc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgIHRoaXMuc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5zdmcuc3R5bGUsIHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgaW5zZXQ6ICcwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHpJbmRleDogJzIwJyxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJywgLy8gdW50aWwgYSB0b29sIGFjdGl2YXRlc1xuICAgICAgdG91Y2hBY3Rpb246ICdub25lJyxcbiAgICB9IGFzIFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4pO1xuICAgIHRoaXMuaG9zdC5hcHBlbmRDaGlsZCh0aGlzLnN2Zyk7XG4gICAgdGhpcy5yZW5kZXJlciA9IG5ldyBOYXBhcmlSZWdpb25TdmdSZW5kZXJlcih0aGlzLnN2ZywgdGhpcy5zdG9yZSk7XG4gICAgdGhpcy5wcm9qZWN0aW9uID0gbmV3IE92ZXJsYXlQcm9qZWN0aW9uKHRoaXMuc3ZnLCB0aGlzLnZpZXdlcik7XG4gICAgdGhpcy5zb3VyY2VMYXllciA9XG4gICAgICBvcHRzLnJlZ2lvblNvdXJjZSA9PT0gZmFsc2UgPyBudWxsIDogbmV3IFJlZ2lvblNvdXJjZUxheWVyKHRoaXMuc3ZnLCB0aGlzLnN0b3JlLmdldFJlZ2lvblNvdXJjZVZpZXckKCkpO1xuXG4gICAgdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLm9uUG9pbnRlckRvd24pO1xuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlKTtcbiAgICB0aGlzLnN2Zy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLm9uUG9pbnRlclVwKTtcbiAgICB0aGlzLnN2Zy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdGhpcy5vblBvaW50ZXJDYW5jZWwpO1xuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ2xvc3Rwb2ludGVyY2FwdHVyZScsIHRoaXMub25Qb2ludGVyQ2FuY2VsKTtcbiAgICB0aGlzLnN2Zy5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMub25EYmxDbGljayk7XG5cbiAgICB0aGlzLnN1YnMuYWRkKHRoaXMuc3RvcmUuZ2V0UmVnaW9uVXBkYXRlRXZlbnQoKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWRyYXcoKSkpO1xuICAgIHRoaXMuc3Vicy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLmdldFNlbGVjdGVkU2hhcGVJbmRpY2VzJCgpLnN1YnNjcmliZSgoaWR4KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBpZHggPz8gW107XG4gICAgICAgIHRoaXMucmVkcmF3KCk7XG4gICAgICB9KSxcbiAgICApO1xuICAgIC8vIEEgY2FtZXJhIG1vdmUgcmV3cml0ZXMgdGhlIHJlbmRlcmVyJ3MgdHJhbnNmb3JtIGFuZCBpdHMgZmV3IHNjcmVlbi1zcGFjZSBlbGVtZW50cztcbiAgICAvLyB0aGUgcmVnaW9ucyBhcmUgZHJhd24gaW4gd29ybGQgY29vcmRpbmF0ZXMgYW5kIGFyZSBub3QgcmVidWlsdCAoTkFQQVJJLUJPVU5EQVJZLTEwKS5cbiAgICB0aGlzLmRpc2Nvbm5lY3RDYW1lcmEgPSB0aGlzLnZpZXdlci5jYW1lcmEuY2hhbmdlZC5jb25uZWN0KCgpID0+IHRoaXMudXBkYXRlQ2FtZXJhKCkpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cblxuICAvLyDilIDilIAgSVJlZ2lvbk92ZXJsYXkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgcmVnaW9uIHRvb2wgY3VycmVudGx5IG93bnMgdGhlIHBvaW50ZXIuXG4gICAqXG4gICAqIEV4cG9zZWQgc28gdGhlIHNwYXRpYWwgdmlld3MgY2FuIHRlbGwgYSBiYXJlIGNsaWNrIG9uIHRoZSBjbG91ZCAoc2VsZWN0IHRoZVxuICAgKiBjbGFzcyB1bmRlciB0aGUgY3Vyc29yKSBmcm9tIGEgY2xpY2sgdGhhdCBiZWxvbmdzIHRvIGEgZHJhd2luZyBnZXN0dXJlIOKAlFxuICAgKiBwbGFjaW5nIGEgcG9seWdvbiB2ZXJ0ZXggaXMgYWxzbyBhIGNsaWNrIHRoYXQgZG9lcyBub3QgbW92ZSwgYW5kIGl0IG11c3Qgbm90XG4gICAqIGNoYW5nZSB0aGUgc2VsZWN0aW9uIGJlaGluZCB0aGUgc2hhcGUgYmVpbmcgZHJhd24uXG4gICAqL1xuICBnZXQgdG9vbEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlICE9PSAnbm9uZSc7XG4gIH1cblxuICBzZXRNb2RlKG1vZGU6IFJlZ2lvblRvb2xNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5lbmRHZXN0dXJlKCk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLmRyYWZ0UmVjdCA9IG51bGw7XG4gICAgdGhpcy5kcmFmdFBhdGggPSBudWxsO1xuICAgIC8vIFRoZSBvdmVybGF5IG93bnMgcG9pbnRlci9uYXZpZ2F0aW9uIGdhdGluZzogd2hpbGUgYSB0b29sIGlzIGFjdGl2ZSBpdCBjYXB0dXJlcyB0aGUgcG9pbnRlclxuICAgIC8vIGFuZCB0aGUgbmFwYXJpIGNhbWVyYSBjb250cm9scyBhcmUgZGlzYWJsZWQ7ICdub25lJyBoYW5kcyB0aGUgcG9pbnRlciBiYWNrIGZvciBwYW4vem9vbS5cbiAgICBjb25zdCBhY3RpdmUgPSBtb2RlICE9PSAnbm9uZSc7XG4gICAgdGhpcy52aWV3ZXIuc2V0Q29udHJvbHNFbmFibGVkKCFhY3RpdmUpO1xuICAgIHRoaXMuc3ZnLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBhY3RpdmUgPyAnYXV0bycgOiAnbm9uZSc7XG4gICAgdGhpcy5zdmcuc3R5bGUuY3Vyc29yID0gYWN0aXZlID8gJ2Nyb3NzaGFpcicgOiAnZGVmYXVsdCc7XG4gICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gIH1cblxuICBzZXRTZWxlY3RlZEJlemllcihiZXppZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uKCk7XG4gICAgaWYgKHNlbD8uaWQgIT0gbnVsbCkgdGhpcy5zdG9yZS5zZXRCZXppZXIoc2VsLmlkLCBiZXppZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdyBmaW5lbHkgYSBkcmF3biB2ZXJ0ZXggbWF5IGJlIHBsYWNlZCwgaW4gd29ybGQgdW5pdHM6IG9uZSAoYW4gaW1hZ2UncyBwaXhlbHMpIGJ5XG4gICAqIGRlZmF1bHQsIGZpbmVyIGZvciBhIGRhdGFzZXQgd2hvc2UgY29vcmRpbmF0ZXMgYXJlIG5vdCBwaXhlbHMgKHNlZSBPdmVybGF5UHJvamVjdGlvbikuXG4gICAqL1xuICBzZXRXb3JsZFF1YW50dW0ocXVhbnR1bTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm9qZWN0aW9uLnNldFdvcmxkUXVhbnR1bShxdWFudHVtKTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLm9uUG9pbnRlckRvd24pO1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlKTtcbiAgICB0aGlzLnN2Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLm9uUG9pbnRlclVwKTtcbiAgICB0aGlzLnN2Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdGhpcy5vblBvaW50ZXJDYW5jZWwpO1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvc3Rwb2ludGVyY2FwdHVyZScsIHRoaXMub25Qb2ludGVyQ2FuY2VsKTtcbiAgICB0aGlzLnN2Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMub25EYmxDbGljayk7XG4gICAgdGhpcy5kaXNjb25uZWN0Q2FtZXJhKCk7XG4gICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gQSBkcmFnIHRvcm4gZG93biBtaWQtZ2VzdHVyZSAoYSBiYWNrZW5kIHN3aXRjaCkgbXVzdCBzdGlsbCBjbG9zZSBpdHMgc3RvcmUgYmF0Y2guXG4gICAgdGhpcy5lbmRHZXN0dXJlKCk7XG4gICAgdGhpcy5zb3VyY2VMYXllcj8uZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnN2Zy5wYXJlbnROb2RlKSB0aGlzLnN2Zy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3ZnKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBwb2ludGVyIGhhbmRsZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBwcml2YXRlIHJlYWRvbmx5IG9uUG9pbnRlckRvd24gPSAoZTogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ25vbmUnKSByZXR1cm47XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucHJvamVjdGlvbi53aXRoT3JpZ2luKCgpID0+IHRoaXMucG9pbnRlckRvd24oZSkpO1xuICB9O1xuXG4gIHByaXZhdGUgcG9pbnRlckRvd24oZTogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgW2l4LCBpeV0gPSB0aGlzLnByb2plY3Rpb24udG9JbWFnZShlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2RyYXdyZWN0Jykge1xuICAgICAgdGhpcy5kcmFmdFJlY3QgPSB7IHgwOiBpeCwgeTA6IGl5LCB4MTogaXgsIHkxOiBpeSB9O1xuICAgICAgdGhpcy5kcmF3aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3ZnLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2RyYXdjbG9zZWRwYXRoJyB8fCB0aGlzLm1vZGUgPT09ICdkcmF3b3BlbnBhdGgnKSB7XG4gICAgICB0aGlzLmRyYWZ0UGF0aCA9IFtbaXgsIGl5XV07XG4gICAgICB0aGlzLmRyYXdpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZHJhd3BvbHlnb24nKSB7XG4gICAgICB0aGlzLmhhbmRsZVBvbHlnb25DbGljayhpeCwgaXksIGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ3NlbGVjdCcgfHwgdGhpcy5tb2RlID09PSAnbW92ZScpIHtcbiAgICAgIHRoaXMuYmVnaW5NYW5pcHVsYXRpb24oaXgsIGl5LCBlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2FkZHBvaW50Jykge1xuICAgICAgdGhpcy5oYW5kbGVBZGRQb2ludChpeCwgaXksIGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ2RlbGV0ZXBvaW50Jykge1xuICAgICAgdGhpcy5oYW5kbGVEZWxldGVQb2ludChpeCwgaXkpO1xuICAgIH1cbiAgICB0aGlzLnJlZHJhdygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvblBvaW50ZXJNb3ZlID0gKGU6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IFtpeCwgaXldID0gdGhpcy5wcm9qZWN0aW9uLnRvSW1hZ2UoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGlmICh0aGlzLm1hcnF1ZWUpIHtcbiAgICAgIHRoaXMubWFycXVlZS54MSA9IGl4O1xuICAgICAgdGhpcy5tYXJxdWVlLnkxID0gaXk7XG4gICAgICB0aGlzLnVwZGF0ZU1hcnF1ZWVFbCgpOyAvLyB1cGRhdGUganVzdCB0aGUgbWFycXVlZSByZWN0IOKAlCBOT1QgYSBmdWxsIHJlZ2lvbiByZWRyYXdcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgYXBwbHlSZWdpb25FZGl0KHRoaXMuc3RvcmUsIHRoaXMuZWRpdCwgaXgsIGl5KTtcbiAgICAgIHRoaXMucmVkcmF3KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kcmF3aW5nKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZHJhZnRSZWN0KSB7XG4gICAgICB0aGlzLmRyYWZ0UmVjdC54MSA9IGl4O1xuICAgICAgdGhpcy5kcmFmdFJlY3QueTEgPSBpeTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZHJhZnRQYXRoKSB7XG4gICAgICBjb25zdCBzdGVwID0gRlJFRUhBTkRfU1RFUF9QWCAqIHRoaXMucHJvamVjdGlvbi53b3JsZFBlckNhbnZhc1BpeGVsKCk7XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5kcmFmdFBhdGhbdGhpcy5kcmFmdFBhdGgubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoTWF0aC5hYnMoaXggLSBsYXN0WzBdKSA+PSBzdGVwIHx8IE1hdGguYWJzKGl5IC0gbGFzdFsxXSkgPj0gc3RlcCkge1xuICAgICAgICB0aGlzLmRyYWZ0UGF0aC5wdXNoKFtpeCwgaXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvblBvaW50ZXJVcCA9IChlOiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5tYXJxdWVlKSB7XG4gICAgICBjb25zdCBtID0gdGhpcy5tYXJxdWVlO1xuICAgICAgdGhpcy5tYXJxdWVlID0gbnVsbDtcbiAgICAgIHRoaXMucmVuZGVyZXIuY2xlYXJNYXJxdWVlKCk7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnN2Zy5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8qIGFscmVhZHkgcmVsZWFzZWQgKi9cbiAgICAgIH1cbiAgICAgIHRoaXMuZmluaXNoTWFycXVlZShtKTsgLy8gc2V0U2VsZWN0ZWRTaGFwZUluZGljZXMg4oaSIG9uZSByZWRyYXcgdmlhIHRoZSBzZWxlY3Rpb24gc3Vic2NyaXB0aW9uXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgIHRoaXMuc3RvcmUuZW5kQmF0Y2goKTtcbiAgICAgIHRoaXMuZWRpdCA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnN2Zy5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8qIGFscmVhZHkgcmVsZWFzZWQgKi9cbiAgICAgIH1cbiAgICAgIHRoaXMucmVkcmF3KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kcmF3aW5nKSByZXR1cm47XG4gICAgdGhpcy5kcmF3aW5nID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3ZnLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBjYXB0dXJlIG1heSBhbHJlYWR5IGJlIHJlbGVhc2VkICovXG4gICAgfVxuICAgIGlmICh0aGlzLmRyYWZ0UmVjdCkge1xuICAgICAgY29uc3QgeyB4MCwgeTAsIHgxLCB5MSB9ID0gdGhpcy5kcmFmdFJlY3Q7XG4gICAgICBjb25zdCB4ID0gTWF0aC5taW4oeDAsIHgxKTtcbiAgICAgIGNvbnN0IHkgPSBNYXRoLm1pbih5MCwgeTEpO1xuICAgICAgY29uc3QgdyA9IE1hdGguYWJzKHgxIC0geDApO1xuICAgICAgY29uc3QgaCA9IE1hdGguYWJzKHkxIC0geTApO1xuICAgICAgdGhpcy5kcmFmdFJlY3QgPSBudWxsO1xuICAgICAgY29uc3QgbWluID0gTUlOX1JFQ1RfRFJBR19QWCAqIHRoaXMucHJvamVjdGlvbi53b3JsZFBlckNhbnZhc1BpeGVsKCk7XG4gICAgICBpZiAodyA+PSBtaW4gJiYgaCA+PSBtaW4pIHRoaXMuY29tbWl0UmVjdGFuZ2xlKHgsIHksIHcsIGgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kcmFmdFBhdGgpIHtcbiAgICAgIGNvbnN0IHB0cyA9IHRoaXMuZHJhZnRQYXRoO1xuICAgICAgdGhpcy5kcmFmdFBhdGggPSBudWxsO1xuICAgICAgY29uc3QgY2xvc2VkID0gdGhpcy5tb2RlID09PSAnZHJhd2Nsb3NlZHBhdGgnO1xuICAgICAgaWYgKHB0cy5sZW5ndGggPj0gKGNsb3NlZCA/IDMgOiAyKSkgdGhpcy5jb21taXRQb2x5Z29uKHB0cywgY2xvc2VkKTtcbiAgICB9XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIHBvaW50ZXIgZ2VzdHVyZSBlbmRlZCB3aXRob3V0IGEgcG9pbnRlcnVwICh0aGUgYnJvd3NlciBjYW5jZWxsZWQgaXQsIG9yIGNhcHR1cmUgd2FzXG4gICAqIGxvc3QpOiBlbmQgaXQgd2l0aG91dCBjb21taXR0aW5nLiBBbHNvIGZpcmVzIGFmdGVyIGV2ZXJ5IG5vcm1hbCByZWxlYXNlLCB3aGVuIG5vdGhpbmdcbiAgICogaXMgbGl2ZSBhbnkgbW9yZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb25Qb2ludGVyQ2FuY2VsID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5lZGl0ICYmICF0aGlzLmRyYXdpbmcgJiYgIXRoaXMubWFycXVlZSkgcmV0dXJuO1xuICAgIHRoaXMuZW5kR2VzdHVyZSgpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEVuZCB3aGF0ZXZlciBwb2ludGVyIGdlc3R1cmUgaXMgbGl2ZSB3aXRob3V0IGNvbW1pdHRpbmcgaXQ6IGNsb3NlIHRoZSBzdG9yZSBiYXRjaCBhIGRyYWdcbiAgICogb3BlbmVkIChzbyBsYXRlciBlZGl0cyBhcmUgZW1pdHRlZCBhZ2FpbikgYW5kIGZvcmdldCB0aGUgZHJhZyAoc28gYSBiYXJlIGhvdmVyIG5vIGxvbmdlclxuICAgKiBtb3ZlcyB0aGUgcmVnaW9uKSwgYW5kIGRyb3AgdGhlIG1hcnF1ZWUgYW5kIGEgcmVjdGFuZ2xlL2ZyZWVoYW5kIGRyYWZ0LiBBIGNsaWNrLXBsYWNlZFxuICAgKiBwb2x5Z29uIGlzIG5vdCBhIHBvaW50ZXIgZ2VzdHVyZSBhbmQgc3Vydml2ZXMuXG4gICAqL1xuICBwcml2YXRlIGVuZEdlc3R1cmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdCkgdGhpcy5zdG9yZS5lbmRCYXRjaCgpO1xuICAgIHRoaXMuZWRpdCA9IG51bGw7XG4gICAgaWYgKHRoaXMuZHJhd2luZykge1xuICAgICAgdGhpcy5kcmFmdFJlY3QgPSBudWxsO1xuICAgICAgdGhpcy5kcmFmdFBhdGggPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmRyYXdpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcnF1ZWUgPSBudWxsO1xuICAgIHRoaXMucmVuZGVyZXIuY2xlYXJNYXJxdWVlKCk7XG4gIH1cblxuICAvKiogQ2xpY2stdG8tcGxhY2UgcG9seWdvbjogYWRkIGEgdmVydGV4LCBvciBjbG9zZSB3aGVuIGNsaWNraW5nIG5lYXIgdGhlIGZpcnN0IG9uZS4gKi9cbiAgcHJpdmF0ZSBoYW5kbGVQb2x5Z29uQ2xpY2soaXg6IG51bWJlciwgaXk6IG51bWJlciwgY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZHJhZnRQYXRoKSB7XG4gICAgICB0aGlzLmRyYWZ0UGF0aCA9IFtbaXgsIGl5XV07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5lYXIgPVxuICAgICAgdGhpcy5wcm9qZWN0aW9uLnNjcmVlbkRpc3QoY2xpZW50WCwgY2xpZW50WSwgdGhpcy5kcmFmdFBhdGhbMF1bMF0sIHRoaXMuZHJhZnRQYXRoWzBdWzFdKSA8PSBDTE9TRV9TTkFQX1BYICYmXG4gICAgICB0aGlzLmRyYWZ0UGF0aC5sZW5ndGggPj0gMztcbiAgICBpZiAobmVhcikge1xuICAgICAgY29uc3QgcHRzID0gdGhpcy5kcmFmdFBhdGg7XG4gICAgICB0aGlzLmRyYWZ0UGF0aCA9IG51bGw7XG4gICAgICB0aGlzLmNvbW1pdFBvbHlnb24ocHRzLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFmdFBhdGgucHVzaChbaXgsIGl5XSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbkRibENsaWNrID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnZHJhd3BvbHlnb24nIHx8ICF0aGlzLmRyYWZ0UGF0aCkgcmV0dXJuO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBwdHMgPSB0aGlzLmRyYWZ0UGF0aDtcbiAgICB0aGlzLmRyYWZ0UGF0aCA9IG51bGw7XG4gICAgaWYgKHB0cy5sZW5ndGggPj0gMykgdGhpcy5jb21taXRQb2x5Z29uKHB0cywgdHJ1ZSk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfTtcblxuICAvKiogVGhlIGN1cnJlbnRseS1zZWxlY3RlZCByZWdpb24gKHNpbmdsZSBzZWxlY3Rpb24pLCBvciBudWxsLiAqL1xuICBwcml2YXRlIHNlbGVjdGVkUmVnaW9uKCk6IFJlZ2lvbiB8IG51bGwge1xuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKTtcbiAgICBjb25zdCBpID0gdGhpcy5zZWxlY3RlZFswXTtcbiAgICByZXR1cm4gaSAhPSBudWxsICYmIGkgPj0gMCAmJiBpIDwgcmVnaW9ucy5sZW5ndGggPyByZWdpb25zW2ldIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHNlbGVjdC9tb3ZlIGludGVyYWN0aW9uOiBncmFiIGEgaGFuZGxlIChyZWN0YW5nbGUgY29ybmVyKSBvciB2ZXJ0ZXggb2YgdGhlIGFscmVhZHktXG4gICAqIHNlbGVjdGVkIHJlZ2lvbiBmaXJzdDsgb3RoZXJ3aXNlIHNlbGVjdCB0aGUgdG9wbW9zdCByZWdpb24gdW5kZXIgdGhlIGN1cnNvciBhbmQgZHJhZyBpdHMgYm9keS5cbiAgICovXG4gIHByaXZhdGUgYmVnaW5NYW5pcHVsYXRpb24oaXg6IG51bWJlciwgaXk6IG51bWJlciwgZTogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5zZWxlY3RlZFJlZ2lvbigpO1xuICAgIGlmIChzZWw/LmJvdW5kcykge1xuICAgICAgY29uc3QgW2x4LCBseV0gPSB0aGlzLnByb2plY3Rpb24uY2xpZW50VG9Mb2NhbChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgICBjb25zdCBncmFiID0gaGl0SGFuZGxlKHNlbCwgbHgsIGx5LCB0aGlzLnByb2plY3Rpb24udG9TY3JlZW4sIEhBTkRMRV9ISVRfUFgpO1xuICAgICAgaWYgKGdyYWIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5iZWdpbkJhdGNoKCk7XG4gICAgICAgIHRoaXMuZWRpdCA9IHsgLi4uZ3JhYiwgaWQ6IHNlbC5pZCwgbGFzdDogW2l4LCBpeV0gfTtcbiAgICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhpdC10ZXN0IGJvZGllcywgdG9wbW9zdCBmaXJzdCAobGFzdCBkcmF3biByZW5kZXJzIG9uIHRvcCksIGF0IHRoZSBleGFjdCBwb2ludGVyXG4gICAgLy8gcG9zaXRpb24g4oCUIHNuYXBwaW5nIGlzIGZvciBwbGFjaW5nIHZlcnRpY2VzLCBub3QgZm9yIHBpY2tpbmcuXG4gICAgY29uc3QgcmVnaW9ucyA9IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpO1xuICAgIGNvbnN0IFt3eCwgd3ldID0gdGhpcy5wcm9qZWN0aW9uLnRvV29ybGQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGZvciAobGV0IGkgPSByZWdpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5zdG9yZS5pc0NsYXNzSGlkZGVuKHJlZ2lvbnNbaV0ubGFiZWwpKSBjb250aW51ZTtcbiAgICAgIGlmIChyZWdpb25Db250YWlucyhyZWdpb25zW2ldLCB3eCwgd3ksIHsgdG9TY3JlZW46IHRoaXMucHJvamVjdGlvbi50b1NjcmVlbiwgdG9sUHg6IE9QRU5fUEFUSF9ISVRfUFggfSkpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3RSZWdpb24ocmVnaW9uc1tpXSk7XG4gICAgICAgIHRoaXMuc3RvcmUuYmVnaW5CYXRjaCgpO1xuICAgICAgICB0aGlzLmVkaXQgPSB7IGtpbmQ6ICdib2R5JywgaWQ6IHJlZ2lvbnNbaV0uaWQsIGxhc3Q6IFtpeCwgaXldIH07XG4gICAgICAgIHRoaXMuc3ZnLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBIGZlYXR1cmUgb2YgdGhlIHJlZ2lvbiBzb3VyY2U6IHRha2UgaXQgaW50byB0aGUgcmVnaW9ucyBhbmQgc2VsZWN0IGl0IChhIGRyYWcgb24gaXRcbiAgICAvLyBtb3ZlcyBpdCBvbmNlIGl0IGlzIHNlbGVjdGVkKS5cbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5zb3VyY2VMYXllcj8uZmVhdHVyZUF0KHd4LCB3eSwgT1BFTl9QQVRIX0hJVF9QWCk7XG4gICAgaWYgKGZlYXR1cmUpIHtcbiAgICAgIHZvaWQgdGhpcy5zdG9yZS5zZWxlY3RTb3VyY2VGZWF0dXJlcyhbZmVhdHVyZS5pZF0sIGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEVtcHR5IHNwYWNlOiBpbiBzZWxlY3QgbW9kZSBzdGFydCBhIHJ1YmJlci1iYW5kIG1hcnF1ZWUgKHNlbGVjdHMgdGhlIHJlZ2lvbnMgaXQgY292ZXJzIG9uXG4gICAgLy8gcmVsZWFzZSk7IGluIG1vdmUgbW9kZSBqdXN0IGNsZWFyIHRoZSBzZWxlY3Rpb24uXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHRoaXMubWFycXVlZSA9IHsgeDA6IGl4LCB5MDogaXksIHgxOiBpeCwgeTE6IGl5IH07XG4gICAgICB0aGlzLnVwZGF0ZU1hcnF1ZWVFbCgpO1xuICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKFtdKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2hvdyB0aGUgbWFycXVlZSB3aGVyZSBpdCBpcyBub3cgKG9ubHkgdGhlIG1hcnF1ZWUgZWxlbWVudDogbm8gZnVsbCByZWdpb24gcmVkcmF3KS4gKi9cbiAgcHJpdmF0ZSB1cGRhdGVNYXJxdWVlRWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1hcnF1ZWUpIHJldHVybjtcbiAgICBjb25zdCB7IHgwLCB5MCwgeDEsIHkxIH0gPSB0aGlzLm1hcnF1ZWU7XG4gICAgY29uc3QgW2x4LCBseV0gPSB0aGlzLnByb2plY3Rpb24udG9Mb2NhbChNYXRoLm1pbih4MCwgeDEpLCBNYXRoLm1pbih5MCwgeTEpKTtcbiAgICBjb25zdCBbcngsIHJ5XSA9IHRoaXMucHJvamVjdGlvbi50b0xvY2FsKE1hdGgubWF4KHgwLCB4MSksIE1hdGgubWF4KHkwLCB5MSkpO1xuICAgIHRoaXMucmVuZGVyZXIuc2hvd01hcnF1ZWUobHgsIGx5LCByeCwgcnkpO1xuICB9XG5cbiAgLyoqIGFkZHBvaW50IG1vZGU6IGluc2VydCBhIHZlcnRleCBhdCB0aGUgY2xpY2sgb24gdGhlIHNlbGVjdGVkIHBvbHlnb24ncyBuZWFyZXN0IGVkZ2VcbiAgICogIChleHRlcmlvciBvciBhIGhvbGUgcmluZykuICovXG4gIHByaXZhdGUgaGFuZGxlQWRkUG9pbnQoaXg6IG51bWJlciwgaXk6IG51bWJlciwgY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uKCk7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcbiAgICBjb25zdCBbbHgsIGx5XSA9IHRoaXMucHJvamVjdGlvbi5jbGllbnRUb0xvY2FsKGNsaWVudFgsIGNsaWVudFkpO1xuICAgIGNvbnN0IGVkZ2UgPSBuZWFyZXN0RWRnZShzZWwsIGx4LCBseSwgdGhpcy5wcm9qZWN0aW9uLnRvU2NyZWVuKTtcbiAgICBpZiAoIWVkZ2UpIHJldHVybjtcbiAgICBpZiAoZWRnZS5yaW5nIDwgMCkgdGhpcy5zdG9yZS5hZGRWZXJ0ZXgoc2VsLmlkLCBlZGdlLnNlZ0luZGV4LCBpeCwgaXkpO1xuICAgIGVsc2UgdGhpcy5zdG9yZS5hZGRIb2xlVmVydGV4KHNlbC5pZCwgZWRnZS5yaW5nLCBlZGdlLnNlZ0luZGV4LCBpeCwgaXkpO1xuICB9XG5cbiAgLyoqIGRlbGV0ZXBvaW50IG1vZGU6IHJlbW92ZSB0aGUgc2VsZWN0ZWQgcG9seWdvbidzIHZlcnRleCBuZWFyZXN0IHRoZSBjbGljayAoZXh0ZXJpb3Igb3IgYVxuICAgKiAgaG9sZSByaW5nKS4gKi9cbiAgcHJpdmF0ZSBoYW5kbGVEZWxldGVQb2ludChpeDogbnVtYmVyLCBpeTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5zZWxlY3RlZFJlZ2lvbigpO1xuICAgIGlmICghc2VsKSByZXR1cm47XG4gICAgY29uc3QgdiA9IG5lYXJlc3RWZXJ0ZXgoc2VsLCBpeCwgaXkpO1xuICAgIGlmICghdikgcmV0dXJuO1xuICAgIGlmICh2LnJpbmcgPCAwKSB0aGlzLnN0b3JlLmRlbGV0ZVZlcnRleChzZWwuaWQsIHYuaW5kZXgpO1xuICAgIGVsc2UgdGhpcy5zdG9yZS5kZWxldGVIb2xlVmVydGV4KHNlbC5pZCwgdi5yaW5nLCB2LmluZGV4KTtcbiAgfVxuXG4gIC8qKiBGaW5hbGl6ZSBhIHJ1YmJlci1iYW5kIG1hcnF1ZWU6IHNlbGVjdCBldmVyeSByZWdpb24gd2hvc2UgYm91bmRpbmcgYm94IGl0IG92ZXJsYXBzIChhXG4gICAqICBtYXJxdWVlIHVuZGVyIHtAbGluayBNSU5fTUFSUVVFRV9QWH0gaXMgYSBjbGljayBvbiBlbXB0eSBzcGFjZSDihpIgY2xlYXIgdGhlIHNlbGVjdGlvbikuICovXG4gIHByaXZhdGUgZmluaXNoTWFycXVlZShtOiBEcmFnQm94KTogdm9pZCB7XG4gICAgY29uc3QgeDAgPSBNYXRoLm1pbihtLngwLCBtLngxKTtcbiAgICBjb25zdCB4MSA9IE1hdGgubWF4KG0ueDAsIG0ueDEpO1xuICAgIGNvbnN0IHkwID0gTWF0aC5taW4obS55MCwgbS55MSk7XG4gICAgY29uc3QgeTEgPSBNYXRoLm1heChtLnkwLCBtLnkxKTtcbiAgICBjb25zdCBtaW4gPSBNSU5fTUFSUVVFRV9QWCAqIHRoaXMucHJvamVjdGlvbi53b3JsZFBlckNhbnZhc1BpeGVsKCk7XG4gICAgaWYgKHgxIC0geDAgPCBtaW4gJiYgeTEgLSB5MCA8IG1pbikge1xuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyhbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKTtcbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKFxuICAgICAgcmVnaW9uc0luUmVjdChyZWdpb25zLCB4MCwgeTAsIHgxLCB5MSwge1xuICAgICAgICBza2lwUHJvZmlsZXM6IHRydWUsXG4gICAgICAgIHNraXA6IChyKSA9PiB0aGlzLnN0b3JlLmlzQ2xhc3NIaWRkZW4oci5sYWJlbCksXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5zb3VyY2VMYXllcj8uZmVhdHVyZXNJblJlY3QoeDAsIHkwLCB4MSwgeTEpID8/IFtdO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgIHZvaWQgdGhpcy5zdG9yZS5zZWxlY3RTb3VyY2VGZWF0dXJlcyhcbiAgICAgICAgZmVhdHVyZXMuc2xpY2UoMCwgU09VUkNFX01BUlFVRUVfTElNSVQpLm1hcCgoZikgPT4gZi5pZCksXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBzaGFwZSBjb21taXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgY29tbWl0UmVjdGFuZ2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdGFuZ2xlKCk7XG4gICAgcmVjdC54ID0geDtcbiAgICByZWN0LnkgPSB5O1xuICAgIHJlY3Qud2lkdGggPSB3aWR0aDtcbiAgICByZWN0LmhlaWdodCA9IGhlaWdodDtcbiAgICBjb25zdCByZWdpb24gPSBuZXcgUmVnaW9uKCk7XG4gICAgcmVnaW9uLmJvdW5kcyA9IHJlY3Q7XG4gICAgcmVnaW9uLmNvbG9yID0gdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCk7XG4gICAgdGhpcy5zdG9yZS5hZGRSZWdpb24ocmVnaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tbWl0UG9seWdvbihwb2ludHM6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LCBjbG9zZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBwb2x5ID0gbmV3IFBvbHlnb24oKTtcbiAgICBwb2x5Lm5wb2ludHMgPSBwb2ludHMubGVuZ3RoO1xuICAgIHBvbHkueHBvaW50cyA9IHBvaW50cy5tYXAoKHApID0+IHBbMF0pO1xuICAgIHBvbHkueXBvaW50cyA9IHBvaW50cy5tYXAoKHApID0+IHBbMV0pO1xuICAgIHBvbHkuY29vcmRpbmF0ZXMgPSBwb2ludHMubWFwKChwKSA9PiBbcFswXSwgcFsxXV0pO1xuICAgIHBvbHkuY2xvc2VkID0gY2xvc2VkO1xuICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBSZWdpb24oKTtcbiAgICByZWdpb24uYm91bmRzID0gcG9seTtcbiAgICByZWdpb24uY29sb3IgPSB0aGlzLnN0b3JlLmdldFNoYXBlQ29sb3IoKTtcbiAgICByZWdpb24ubGFiZWwgPSAnUmVnaW9uJztcbiAgICB0aGlzLnN0b3JlLmFkZFJlZ2lvbihyZWdpb24pO1xuICB9XG5cbiAgLy8g4pSA4pSAIHJlbmRlcmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIFNob3cgb3IgaGlkZSB0aGUgZHJhd24gcmVnaW9ucy4gQSByZWdpb24gYmVpbmcgZHJhd24gc3RheXMgdmlzaWJsZSBlaXRoZXIgd2F5LiAqL1xuICBzZXRSZWdpb25zVmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHZpc2libGUgPT09IHRoaXMucmVnaW9uc1Zpc2libGUpIHJldHVybjtcbiAgICB0aGlzLnJlZ2lvbnNWaXNpYmxlID0gdmlzaWJsZTtcbiAgICB0aGlzLnNvdXJjZUxheWVyPy5zZXRWaXNpYmxlKHZpc2libGUpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cblxuICAvKiogRm9sbG93IGEgY2FtZXJhIG1vdmU6IG9uZSB0cmFuc2Zvcm0gYXR0cmlidXRlIHBsdXMgdGhlIHNjcmVlbi1zcGFjZSBlbGVtZW50cy4gKi9cbiAgcHJpdmF0ZSB1cGRhdGVDYW1lcmEoKTogdm9pZCB7XG4gICAgY29uc3QgYWZmaW5lID0gdGhpcy5wcm9qZWN0aW9uLmFmZmluZSgpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0Q2FtZXJhKGFmZmluZSk7XG4gICAgdGhpcy5zb3VyY2VMYXllcj8uc2V0Q2FtZXJhKGFmZmluZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVidWlsZCBldmVyeSBlbGVtZW50IGZyb20gdGhlIHN0b3JlOiB0aGUgcmVnaW9ucyBpbiB3b3JsZCBjb29yZGluYXRlcyAob25lIHRyYW5zZm9ybWVkXG4gICAqIGdyb3VwKSwgdGhlaXIgbGFiZWxzLCBhbmQgdGhlIG92ZXJsYXkuIFJlYWRzIG5vIGxheW91dDogdGhlIGNhbWVyYSBhZmZpbmUgaXMgdGhlIHZpZXdlcidzLlxuICAgKi9cbiAgcmVkcmF3KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ2FtZXJhKCk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5yZWdpb25zVmlzaWJsZSA/IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpIDogW10sIHRoaXMuc2VsZWN0ZWQpO1xuICAgIHRoaXMucmVuZGVyT3ZlcmxheSgpO1xuICB9XG5cbiAgLyoqIFJlYnVpbGQgdGhlIHNjcmVlbi1zcGFjZSBvdmVybGF5IG9ubHk6IHRoZSBzZWxlY3RlZCByZWdpb25zJyBoYW5kbGVzIGFuZCB0aGUgZHJhZnQuICovXG4gIHByaXZhdGUgcmVuZGVyT3ZlcmxheSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlck92ZXJsYXkodGhpcy5yZWdpb25zVmlzaWJsZSA/IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpIDogW10sIHRoaXMuc2VsZWN0ZWQsIHtcbiAgICAgIHJlY3Q6IHRoaXMuZHJhZnRSZWN0LFxuICAgICAgcGF0aDogdGhpcy5kcmFmdFBhdGgsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
520
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXJlZ2lvbi1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvbmFwYXJpLWpzL25hcGFyaS1yZWdpb24tb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRW5HLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsYUFBYSxHQUNkLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFXLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNFLE1BQU0sTUFBTSxHQUFHLDRCQUE0QixDQUFDO0FBQzVDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0I7Ozs7R0FJRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixrR0FBa0c7QUFDbEcsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLDRFQUE0RTtBQUM1RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIseUZBQXlGO0FBQ3pGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBNkIzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFB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QUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM3RixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJUmVnaW9uT3ZlcmxheSwgUmVnaW9uVG9vbE1vZGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVnaW9uLCBSZWN0YW5nbGUsIFBvbHlnb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB7IFJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvcmVnaW9uLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBBZmZpbmUgfSBmcm9tICcuLi8uLi9yZWdpb24tb3ZlcmxheS9zdmctcmVnaW9uLXJlbmRlcmVyJztcbmltcG9ydCB7IFJlZ2lvblNvdXJjZUxheWVyLCBTT1VSQ0VfTUFSUVVFRV9MSU1JVCB9IGZyb20gJy4uLy4uL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1zb3VyY2UtbGF5ZXInO1xuXG5pbXBvcnQge1xuICBoaXRIYW5kbGUsXG4gIG5lYXJlc3RFZGdlLFxuICBuZWFyZXN0VmVydGV4LFxuICByZWdpb25Db250YWlucyxcbiAgcmVnaW9uc0luUmVjdCxcbn0gZnJvbSAnLi4vLi4vcmVnaW9uLW92ZXJsYXkvcmVnaW9uLWdlb21ldHJ5JztcblxuaW1wb3J0IHsgRHJhZ0JveCwgTmFwYXJpUmVnaW9uU3ZnUmVuZGVyZXIgfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1zdmctcmVuZGVyZXInO1xuaW1wb3J0IHsgT3ZlcmxheVByb2plY3Rpb24gfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L292ZXJsYXktcHJvamVjdGlvbic7XG5pbXBvcnQgeyBSZWdpb25FZGl0LCBhcHBseVJlZ2lvbkVkaXQgfSBmcm9tICcuL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1lZGl0JztcblxuY29uc3QgU1ZHX05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbi8qKlxuICogTWluIGRyYWcgYmVmb3JlIGEgZnJlZWhhbmQgcGF0aCByZWNvcmRzIGFub3RoZXIgcG9pbnQsIGluIFNDUkVFTiBwaXhlbHMuXG4gKlxuICogU2NyZWVuIHJhdGhlciB0aGFuIHdvcmxkLCB3aGljaCBpcyB3aGF0IFwiMiBpbWFnZSBweFwiIGFsd2F5cyBtZWFudCBpbiBwcmFjdGljZTogYXQgMTAwJVxuICogem9vbSBvdmVyIGFuIGltYWdlIHRoZSB0d28gYXJlIHRoZSBzYW1lIHRoaW5nLiBUYWtlbiBhcyB3b3JsZCB1bml0cyBpdCBicmVha3Mgb24gYW55XG4gKiBkYXRhc2V0IHdob3NlIHdvcmxkIGlzIHNtYWxsIOKAlCBzZXFGSVNIJ3Mgc2FtcGxlIHNwYW5zIGFib3V0IDUgdW5pdHMsIHNvIGEgMi11bml0XG4gKiB0aHJlc2hvbGQgcmVjb3JkcyBhIHBvaW50IGV2ZXJ5IDQwJSBvZiB0aGUgd2F5IGFjcm9zcyBhbmQgYSBmcmVlaGFuZCBST0kgY29tZXMgb3V0IGFzIGFcbiAqIHRyaWFuZ2xlLiBBZ2FpbnN0IHRoZSBzY3JlZW4gaXQgYWxzbyBkb2VzIHRoZSByaWdodCB0aGluZyB1bmRlciB6b29tOiBkcmF3aW5nIHpvb21lZCBpblxuICogcmVjb3JkcyBhIGZpbmVyIHBhdGgsIGJlY2F1c2UgdGhhdCBpcyBleGFjdGx5IHdoZW4gdGhlIGV4dHJhIGRldGFpbCBpcyB2aXNpYmxlLlxuICovXG5jb25zdCBGUkVFSEFORF9TVEVQX1BYID0gMjtcbi8qKlxuICogU21hbGxlc3QgY29tbWl0dGVkIHJlY3RhbmdsZSwgaW4gU0NSRUVOIHBpeGVscyBvbiBlYWNoIHNpZGUuXG4gKlxuICogSXRzIGpvYiBpcyB0byB0aHJvdyBhd2F5IGEgY2xpY2sgdGhhdCB3YXMgbm90IGEgZHJhZy4gSGVsZCBpbiB3b3JsZCB1bml0cyDigJQgd2hpY2ggaXQgd2FzXG4gKiDigJQgaXQgaW5zdGVhZCB0aHJvd3MgYXdheSByZWFsIGRyYWdzIG9uIGFueSBkYXRhc2V0IHdob3NlIHdvcmxkIGlzIHNtYWxsOiBpbiBzZXFGSVNIJ3NcbiAqIH41IHggNyB1bml0IHNhbXBsZSBhIHJlY3RhbmdsZSBoYWQgdG8gY292ZXIgNDAlIG9mIHRoZSB3aWR0aCB0byBjb21taXQgYXQgYWxsLCBhbmRcbiAqIGFueXRoaW5nIHNtYWxsZXIgdmFuaXNoZWQgd2l0aCBubyBmZWVkYmFjay4gVGhhdCB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiBST0lzIGJlaW5nXG4gKiBpbXBvc3NpYmxlIHRvIGNyZWF0ZSB0aGVyZS5cbiAqL1xuY29uc3QgTUlOX1JFQ1RfRFJBR19QWCA9IDI7XG4vKipcbiAqIEEgcnViYmVyIGJhbmQgc21hbGxlciB0aGFuIHRoaXMgb24gYm90aCBzaWRlcywgaW4gU0NSRUVOIHBpeGVscywgaXMgYSBjbGljayBvbiBlbXB0eSBzcGFjZVxuICogKGl0IGNsZWFycyB0aGUgc2VsZWN0aW9uKS4gU2NyZWVuIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIE1JTl9SRUNUX0RSQUdfUFh9OiAzIHdvcmxkXG4gKiB1bml0cyBpcyBvdmVyIGhhbGYgb2Ygc2VxRklTSCdzIHNhbXBsZS5cbiAqL1xuY29uc3QgTUlOX01BUlFVRUVfUFggPSAzO1xuLyoqIENsaWNrLWRpc3RhbmNlIChzY3JlZW4gcHgpIHdpdGhpbiB3aGljaCBhIHBvbHlnb24gY2xpY2sgc25hcHMgY2xvc2VkIG9udG8gdGhlIGZpcnN0IHZlcnRleC4gKi9cbmNvbnN0IENMT1NFX1NOQVBfUFggPSAxMDtcbi8qKiBTY3JlZW4tcHggaGl0IHJhZGl1cyBmb3IgZ3JhYmJpbmcgYSB2ZXJ0ZXggLyByZWN0YW5nbGUgY29ybmVyIGhhbmRsZS4gKi9cbmNvbnN0IEhBTkRMRV9ISVRfUFggPSA5O1xuLyoqIFNjcmVlbi1weCBkaXN0YW5jZSBmcm9tIGFuIG9wZW4gcG9seWxpbmUgd2l0aGluIHdoaWNoIGEgY2xpY2sgc2VsZWN0cyBpdCAoYXMgT1NEKS4gKi9cbmNvbnN0IE9QRU5fUEFUSF9ISVRfUFggPSA2O1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgbmFwYXJpIFZpZXdlciB0aGUgb3ZlcmxheSBuZWVkcyAoY29vcmQgdHJhbnNmb3JtcyArIGNvbnRyb2wgZ2F0aW5nKS5cbiAqXG4gKiBDT09SRElOQVRFIFNQQUNFUzogYGNhbnZhc1RvV29ybGRgIHRha2VzIENMSUVOVCBwaXhlbHMgKHZpZXdwb3J0IGNvb3JkaW5hdGVzLCBhcyBhIHBvaW50ZXJcbiAqIGV2ZW50J3MgYGNsaWVudFgvWWApLCBleGFjdGx5IGFzIG5hcGFyaS1qcyBgVmlld2VyLmNhbnZhc1RvV29ybGRgIGRvZXMuIGBjYW52YXNUcmFuc2Zvcm1gIGlzXG4gKiB0aGUgY2FtZXJhJ3Mgd29ybGQg4oaSIENBTlZBUy1MT0NBTCBDU1MtcGl4ZWwgYWZmaW5lLCBuYXBhcmktanMgYFZpZXdlci5jYW52YXNUcmFuc2Zvcm1gLCB3aGljaFxuICogcmVhZHMgbm8gbGF5b3V0OiBkcmF3aW5nIGFuZCBmb2xsb3dpbmcgdGhlIGNhbWVyYSB1c2UgaXQsIHNvIGEgY2FtZXJhIGZyYW1lIGNvc3RzIG9uZVxuICogYG1hdHJpeCguLi4pYCBhbmQgbm8gYGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpYCAocmV2aWV3IE5BUEFSSS1CT1VOREFSWS0xMCkuIFRoZSBzdmcgY292ZXJzIHRoZVxuICogcGxvdCBob3N0IGFuZCB0aGUgY2FudmFzIGlzIHRoZSBob3N0J3MgaW4tZmxvdyBjaGlsZCBhdCBpdHMgdG9wLWxlZnQsIHNvIGNhbnZhcy1sb2NhbCBhbmRcbiAqIHN2Zy1sb2NhbCBwaXhlbHMgYXJlIHRoZSBzYW1lOyBhIHBvaW50ZXIncyBjbGllbnQgcGl4ZWxzIGFyZSBtYXBwZWQgaW50byB0aGUgc3ZnIGJ5IHRoZVxuICogb3ZlcmxheSBpdHNlbGYuXG4gKlxuICogRXhwb3J0ZWQgYmVjYXVzZSB0aGUgM0Qgc3BhdGlhbCBtb2RlIHN1cHBsaWVzIGEgU0NSRUVOLVNQQUNFIGltcGxlbWVudGF0aW9uIG9mIGl0OiB0aGVyZSB0aGVcbiAqIGRyYXduIHNoYXBlIGlzIGEgbGFzc28gaW4gY2FudmFzIHBpeGVscywgbm90IGEgcmVjdGFuZ2xlIGluIGltYWdlIHNwYWNlLCBzbyBcIndvcmxkXCIgaXMgdGhlXG4gKiBjYW52YXMgaXRzZWxmIOKAlCBgY2FudmFzVG9Xb3JsZGAgaXMgdGhlIGNsaWVudCDihpIgY2FudmFzIG9mZnNldCBhbmQgYGNhbnZhc1RyYW5zZm9ybWAgdGhlXG4gKiBpZGVudGl0eS4gVGhhdCBsZXRzIHRoZSAzRCB2aWV3IHJldXNlIHRoaXMgd2hvbGUgb3ZlcmxheSDigJQgZXZlcnkgdG9vbCwgdGhlIGhhbmRsZXMsIHRoZSBzdG9yZVxuICogcm91bmQtdHJpcCDigJQgd2l0aCBubyAzRC1zcGVjaWZpYyBkcmF3aW5nIGNvZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcmxheVZpZXdlciB7XG4gIC8qKiBDbGllbnQgcHgg4oaSIHdvcmxkLiAqL1xuICBjYW52YXNUb1dvcmxkKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqIFdvcmxkIOKGkiBjYW52YXMtbG9jYWwgKD0gc3ZnLWxvY2FsKSBDU1MgcHgsIGFzIGFuIFNWRyBhZmZpbmUgYFthLCBiLCBjLCBkLCBlLCBmXWAuICovXG4gIGNhbnZhc1RyYW5zZm9ybSgpOiBBZmZpbmU7XG4gIHNldENvbnRyb2xzRW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZDtcbiAgcmVhZG9ubHkgY2FtZXJhOiB7IHJlYWRvbmx5IGNoYW5nZWQ6IHsgY29ubmVjdChsaXN0ZW5lcjogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQgfSB9O1xufVxuXG4vKipcbiAqIFNWRyByZWdpb24gb3ZlcmxheSBmb3IgdGhlIG5hcGFyaS1qcyBXZWJHUFUgaW1hZ2UgdmlldyAoaml0LXVpIzEwMiksIG1pcnJvcmluZyB0aGUgT1NEIGJhY2tlbmQnc1xuICoge0BsaW5rIE9zZFJlZ2lvbk92ZXJsYXl9IGJ1dCBkcml2ZW4gYnkgbmFwYXJpJ3MgYGNhbnZhc1RvV29ybGRgL2BjYW52YXNUcmFuc2Zvcm1gIHRyYW5zZm9ybXNcbiAqIChzZWUge0BsaW5rIE92ZXJsYXlWaWV3ZXJ9IGZvciB0aGVpciBjb29yZGluYXRlIHNwYWNlcykuXG4gKiBWZWN0b3Igc2hhcGVzIGFyZSBkcmF3biBpbiBhbiBhYnNvbHV0ZWx5LXBvc2l0aW9uZWQgYDxzdmc+YCBvdmVyIHRoZSBjYW52YXMgKG5vIG5lZWQgdG8gcHVzaFxuICogdGhlbSB0aHJvdWdoIFdlYkdQVSkgYnkge0BsaW5rIE5hcGFyaVJlZ2lvblN2Z1JlbmRlcmVyfSBvdmVyIHRoZSBzaGFyZWQgYFN2Z1JlZ2lvblJlbmRlcmVyYDpcbiAqIGluIHdvcmxkIGNvb3JkaW5hdGVzIGluc2lkZSBvbmUgdHJhbnNmb3JtZWQgZ3JvdXAsIHJlYnVpbHQgb24gYSByZWdpb24gb3Igc2VsZWN0aW9uIGNoYW5nZSxcbiAqIHdoaWxlIGEgY2FtZXJhIG1vdmUgb25seSByZXdyaXRlcyB0aGUgdHJhbnNmb3JtIChuYXBhcmktanMncyBgY2FudmFzVHJhbnNmb3JtYCwgdGhlIGNhbWVyYVxuICogY2VudHJlL3pvb20pIGFuZCB0aGUgZmV3IHNjcmVlbi1zcGFjZSBoYW5kbGVzIGFuZCBsYWJlbHMuIFRoaXMgY2xhc3MgaXNcbiAqIHRoZSBnZXN0dXJlIGNvbnRyb2xsZXI6IHBvaW50ZXIgaGFuZGxlcnMsIHRoZSB0b29sIG1vZGUsIGFuZCB0aGUgZWRpdC9kcmFmdC9tYXJxdWVlIHN0YXRlLlxuICogSXQgd3JpdGVzIGNvbXBsZXRlZCBzaGFwZXMgdG8gdGhlIHNoYXJlZCB7QGxpbmsgUmVnaW9uU3RvcmV9IChzbyBzYXZlIC8gdW5kbyAvIGV4cG9ydCB3b3JrXG4gKiBpZGVudGljYWxseSB0byBPU0QpLlxuICpcbiAqIFN1cHBvcnRzIChqaXQtdWkjMTAyKTogcmVjdGFuZ2xlIC8gcG9seWdvbiAvIGZyZWVoYW5kIHBhdGggZHJhd2luZywgY2xpY2stc2VsZWN0IGFuZCBydWJiZXItYmFuZFxuICogbWFycXVlZSBzZWxlY3QsIHBhbi96b29tIGdhdGluZyB2aWEgYHNldENvbnRyb2xzRW5hYmxlZGAsIGJvZHkgbW92ZSwgdmVydGV4IG1vdmUvYWRkL2RlbGV0ZSxcbiAqIGJlemllciBoYW5kbGUgZWRpdGluZywgYW5kIGRvbnV0IGhvbGVzIChpbmNsdWRpbmcgaG9sZSB2ZXJ0ZXggKyBob2xlLWJlemllci1oYW5kbGUgZWRpdGluZykuXG4gKiBIaXQtdGVzdGluZyBzaGFyZXMgYHJlZ2lvbi1vdmVybGF5L3JlZ2lvbi1nZW9tZXRyeWAgd2l0aCB0aGUgT1NEIG92ZXJsYXksIHNvIGJvdGggZm9sbG93XG4gKiB0aGUgc2FtZSBydWxlcyAobXVsdGktcGFydCByZWdpb25zLCBob2xlcywgb3BlbiBwb2x5bGluZXMsIGhhbmRsZS1sZXNzIGJlemllciBjdXJ2ZXMpLlxuICovXG5leHBvcnQgY2xhc3MgTmFwYXJpUmVnaW9uT3ZlcmxheSBpbXBsZW1lbnRzIElSZWdpb25PdmVybGF5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdmc6IFNWR1NWR0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IE5hcGFyaVJlZ2lvblN2Z1JlbmRlcmVyO1xuICAvKiogVGhlIGltYWdlJ3MgcmVnaW9uIHNvdXJjZSwgZHJhd24gdW5kZXIgdGhlIHJlZ2lvbnMgYXQgdGhlIHpvb20ncyBsZXZlbCBvZiBkZXRhaWw7IG51bGxcbiAgICogIHdoZXJlIHdvcmxkIGlzIG5vdCB0aGUgaW1hZ2UgKHRoZSAzRCB2aWV3J3Mgc2NyZWVuLXNwYWNlIGxhc3NvcykuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlTGF5ZXI6IFJlZ2lvblNvdXJjZUxheWVyIHwgbnVsbDtcbiAgLyoqIENsaWVudCDihpQgc3ZnLWxvY2FsIOKGlCB3b3JsZCBjb252ZXJzaW9ucywgd2l0aCB0aGUgc3ZnIG9yaWdpbiByZWFkIG9uY2UgcGVyIGdlc3R1cmUvcmVkcmF3LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3Rpb246IE92ZXJsYXlQcm9qZWN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzY29ubmVjdENhbWVyYTogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIG1vZGU6IFJlZ2lvblRvb2xNb2RlID0gJ25vbmUnO1xuICBwcml2YXRlIHNlbGVjdGVkOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKiBJbi1wcm9ncmVzcyBkcmF3aW5nIHN0YXRlIChpbWFnZS1zcGFjZSkuICovXG4gIHByaXZhdGUgZHJhZnRSZWN0OiBEcmFnQm94IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJbi1wcm9ncmVzcyBydWJiZXItYmFuZCBzZWxlY3Rpb24gbWFycXVlZSAoc2VsZWN0IG1vZGUpLCBpbWFnZS1zcGFjZS4gKi9cbiAgcHJpdmF0ZSBtYXJxdWVlOiBEcmFnQm94IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZHJhZnRQYXRoOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiB8IG51bGwgPSBudWxsOyAvLyBmcmVlaGFuZCBvciBjbGljayBwb2x5Z29uXG4gIHByaXZhdGUgZHJhd2luZyA9IGZhbHNlOyAvLyBwb2ludGVyIGlzIGRvd24gZm9yIHJlY3QgLyBmcmVlaGFuZFxuICBwcml2YXRlIHJlZ2lvbnNWaXNpYmxlID0gdHJ1ZTtcblxuICAvKiogSW4tcHJvZ3Jlc3MgbWFuaXB1bGF0aW9uIChzZWxlY3QvbW92ZSBtb2Rlcyk6IGRyYWdnaW5nIGEgYm9keSwgYSBwb2x5Z29uIHZlcnRleCwgb3IgYVxuICAgKiAgcmVjdGFuZ2xlIGNvcm5lci4gYGFuY2hvcmAgaXMgdGhlIGZpeGVkIG9wcG9zaXRlIGNvcm5lciBmb3IgYSByZWN0YW5nbGUgcmVzaXplLiAqL1xuICBwcml2YXRlIGVkaXQ6IFJlZ2lvbkVkaXQgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2NyZWVuIHNwYWNlICh0aGUgM0QgdmlldydzIGxhc3Nvcyk6IHRoZSByZWdpb25zIHRoaXMgb3ZlcmxheSBkcmV3IGl0c2VsZiwgYnkgaWQuIE9ubHkgdGhvc2VcbiAgICogYXJlIGRyYXduLCBwaWNrZWQgb3IgZWRpdGVkIGhlcmU7IGV2ZXJ5IG90aGVyIHJlZ2lvbiBpbiB0aGUgc3RvcmUgaXMgaW4gaW1hZ2Ugc3BhY2UgKHRoZVxuICAgKiBpbWFnZSdzIG93biwgYW4gaW1wb3J0ZWQgc2V0LCBzdHJ1Y3R1cmVzIGEgdHJlZSBjbGljayB0b29rIGZyb20gYSBzb3VyY2UpIGFuZCBtZWFucyBub3RoaW5nXG4gICAqIGF0IGNhbnZhcyBwaXhlbHMuIE51bGw6IGV2ZXJ5IHJlZ2lvbiAod29ybGQgaXMgdGhlIGltYWdlKS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb3duOiBTZXQ8bnVtYmVyPiB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0OiBIVE1MRWxlbWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdlcjogT3ZlcmxheVZpZXdlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBSZWdpb25TdG9yZSxcbiAgICBvcHRzOiB7IHJlZ2lvblNvdXJjZT86IGJvb2xlYW47IHNjcmVlblNwYWNlPzogYm9vbGVhbiB9ID0ge30sXG4gICkge1xuICAgIHRoaXMub3duID0gb3B0cy5zY3JlZW5TcGFjZSA/IG5ldyBTZXQoKSA6IG51bGw7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoaG9zdCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSBob3N0LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB0aGlzLnN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuc3ZnLnN0eWxlLCB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGluc2V0OiAnMCcsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICB6SW5kZXg6ICcyMCcsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsIC8vIHVudGlsIGEgdG9vbCBhY3RpdmF0ZXNcbiAgICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gICAgfSBhcyBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+KTtcbiAgICB0aGlzLmhvc3QuYXBwZW5kQ2hpbGQodGhpcy5zdmcpO1xuICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgTmFwYXJpUmVnaW9uU3ZnUmVuZGVyZXIodGhpcy5zdmcsIHRoaXMuc3RvcmUsIChyKSA9PiB0aGlzLmRyYXdzKHIpKTtcbiAgICB0aGlzLnByb2plY3Rpb24gPSBuZXcgT3ZlcmxheVByb2plY3Rpb24odGhpcy5zdmcsIHRoaXMudmlld2VyKTtcbiAgICB0aGlzLnNvdXJjZUxheWVyID1cbiAgICAgIG9wdHMucmVnaW9uU291cmNlID09PSBmYWxzZSA/IG51bGwgOiBuZXcgUmVnaW9uU291cmNlTGF5ZXIodGhpcy5zdmcsIHRoaXMuc3RvcmUuZ2V0UmVnaW9uU291cmNlVmlldyQoKSk7XG5cbiAgICB0aGlzLnN2Zy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25Qb2ludGVyRG93bik7XG4gICAgdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25Qb2ludGVyVXApO1xuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLm9uUG9pbnRlckNhbmNlbCk7XG4gICAgdGhpcy5zdmcuYWRkRXZlbnRMaXN0ZW5lcignbG9zdHBvaW50ZXJjYXB0dXJlJywgdGhpcy5vblBvaW50ZXJDYW5jZWwpO1xuICAgIHRoaXMuc3ZnLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5vbkRibENsaWNrKTtcblxuICAgIHRoaXMuc3Vicy5hZGQodGhpcy5zdG9yZS5nZXRSZWdpb25VcGRhdGVFdmVudCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZHJhdygpKSk7XG4gICAgdGhpcy5zdWJzLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRTaGFwZUluZGljZXMkKCkuc3Vic2NyaWJlKChpZHgpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGlkeCA/PyBbXTtcbiAgICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gQSBjYW1lcmEgbW92ZSByZXdyaXRlcyB0aGUgcmVuZGVyZXIncyB0cmFuc2Zvcm0gYW5kIGl0cyBmZXcgc2NyZWVuLXNwYWNlIGVsZW1lbnRzO1xuICAgIC8vIHRoZSByZWdpb25zIGFyZSBkcmF3biBpbiB3b3JsZCBjb29yZGluYXRlcyBhbmQgYXJlIG5vdCByZWJ1aWx0IChOQVBBUkktQk9VTkRBUlktMTApLlxuICAgIHRoaXMuZGlzY29ubmVjdENhbWVyYSA9IHRoaXMudmlld2VyLmNhbWVyYS5jaGFuZ2VkLmNvbm5lY3QoKCkgPT4gdGhpcy51cGRhdGVDYW1lcmEoKSk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJUmVnaW9uT3ZlcmxheSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSByZWdpb24gdG9vbCBjdXJyZW50bHkgb3ducyB0aGUgcG9pbnRlci5cbiAgICpcbiAgICogRXhwb3NlZCBzbyB0aGUgc3BhdGlhbCB2aWV3cyBjYW4gdGVsbCBhIGJhcmUgY2xpY2sgb24gdGhlIGNsb3VkIChzZWxlY3QgdGhlXG4gICAqIGNsYXNzIHVuZGVyIHRoZSBjdXJzb3IpIGZyb20gYSBjbGljayB0aGF0IGJlbG9uZ3MgdG8gYSBkcmF3aW5nIGdlc3R1cmUg4oCUXG4gICAqIHBsYWNpbmcgYSBwb2x5Z29uIHZlcnRleCBpcyBhbHNvIGEgY2xpY2sgdGhhdCBkb2VzIG5vdCBtb3ZlLCBhbmQgaXQgbXVzdCBub3RcbiAgICogY2hhbmdlIHRoZSBzZWxlY3Rpb24gYmVoaW5kIHRoZSBzaGFwZSBiZWluZyBkcmF3bi5cbiAgICovXG4gIGdldCB0b29sQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgIT09ICdub25lJztcbiAgfVxuXG4gIHNldE1vZGUobW9kZTogUmVnaW9uVG9vbE1vZGUpOiB2b2lkIHtcbiAgICB0aGlzLmVuZEdlc3R1cmUoKTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuZHJhZnRSZWN0ID0gbnVsbDtcbiAgICB0aGlzLmRyYWZ0UGF0aCA9IG51bGw7XG4gICAgLy8gVGhlIG92ZXJsYXkgb3ducyBwb2ludGVyL25hdmlnYXRpb24gZ2F0aW5nOiB3aGlsZSBhIHRvb2wgaXMgYWN0aXZlIGl0IGNhcHR1cmVzIHRoZSBwb2ludGVyXG4gICAgLy8gYW5kIHRoZSBuYXBhcmkgY2FtZXJhIGNvbnRyb2xzIGFyZSBkaXNhYmxlZDsgJ25vbmUnIGhhbmRzIHRoZSBwb2ludGVyIGJhY2sgZm9yIHBhbi96b29tLlxuICAgIGNvbnN0IGFjdGl2ZSA9IG1vZGUgIT09ICdub25lJztcbiAgICB0aGlzLnZpZXdlci5zZXRDb250cm9sc0VuYWJsZWQoIWFjdGl2ZSk7XG4gICAgdGhpcy5zdmcuc3R5bGUucG9pbnRlckV2ZW50cyA9IGFjdGl2ZSA/ICdhdXRvJyA6ICdub25lJztcbiAgICB0aGlzLnN2Zy5zdHlsZS5jdXJzb3IgPSBhY3RpdmUgPyAnY3Jvc3NoYWlyJyA6ICdkZWZhdWx0JztcbiAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQmV6aWVyKGJlemllcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0ZWRSZWdpb24oKTtcbiAgICBpZiAoc2VsPy5pZCAhPSBudWxsKSB0aGlzLnN0b3JlLnNldEJlemllcihzZWwuaWQsIGJlemllcik7XG4gIH1cblxuICAvKipcbiAgICogSG93IGZpbmVseSBhIGRyYXduIHZlcnRleCBtYXkgYmUgcGxhY2VkLCBpbiB3b3JsZCB1bml0czogb25lIChhbiBpbWFnZSdzIHBpeGVscykgYnlcbiAgICogZGVmYXVsdCwgZmluZXIgZm9yIGEgZGF0YXNldCB3aG9zZSBjb29yZGluYXRlcyBhcmUgbm90IHBpeGVscyAoc2VlIE92ZXJsYXlQcm9qZWN0aW9uKS5cbiAgICovXG4gIHNldFdvcmxkUXVhbnR1bShxdWFudHVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb2plY3Rpb24uc2V0V29ybGRRdWFudHVtKHF1YW50dW0pO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN2Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25Qb2ludGVyRG93bik7XG4gICAgdGhpcy5zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25Qb2ludGVyVXApO1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLm9uUG9pbnRlckNhbmNlbCk7XG4gICAgdGhpcy5zdmcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9zdHBvaW50ZXJjYXB0dXJlJywgdGhpcy5vblBvaW50ZXJDYW5jZWwpO1xuICAgIHRoaXMuc3ZnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5vbkRibENsaWNrKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3RDYW1lcmEoKTtcbiAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAvLyBBIGRyYWcgdG9ybiBkb3duIG1pZC1nZXN0dXJlIChhIGJhY2tlbmQgc3dpdGNoKSBtdXN0IHN0aWxsIGNsb3NlIGl0cyBzdG9yZSBiYXRjaC5cbiAgICB0aGlzLmVuZEdlc3R1cmUoKTtcbiAgICB0aGlzLnNvdXJjZUxheWVyPy5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMuc3ZnLnBhcmVudE5vZGUpIHRoaXMuc3ZnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zdmcpO1xuICB9XG5cbiAgLy8g4pSA4pSAIHBvaW50ZXIgaGFuZGxlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgcmVhZG9ubHkgb25Qb2ludGVyRG93biA9IChlOiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnbm9uZScpIHJldHVybjtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9qZWN0aW9uLndpdGhPcmlnaW4oKCkgPT4gdGhpcy5wb2ludGVyRG93bihlKSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBwb2ludGVyRG93bihlOiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBbaXgsIGl5XSA9IHRoaXMucHJvamVjdGlvbi50b0ltYWdlKGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3JlY3QnKSB7XG4gICAgICB0aGlzLmRyYWZ0UmVjdCA9IHsgeDA6IGl4LCB5MDogaXksIHgxOiBpeCwgeTE6IGl5IH07XG4gICAgICB0aGlzLmRyYXdpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZHJhd2Nsb3NlZHBhdGgnIHx8IHRoaXMubW9kZSA9PT0gJ2RyYXdvcGVucGF0aCcpIHtcbiAgICAgIHRoaXMuZHJhZnRQYXRoID0gW1tpeCwgaXldXTtcbiAgICAgIHRoaXMuZHJhd2luZyA9IHRydWU7XG4gICAgICB0aGlzLnN2Zy5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdkcmF3cG9seWdvbicpIHtcbiAgICAgIHRoaXMuaGFuZGxlUG9seWdvbkNsaWNrKGl4LCBpeSwgZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnc2VsZWN0JyB8fCB0aGlzLm1vZGUgPT09ICdtb3ZlJykge1xuICAgICAgdGhpcy5iZWdpbk1hbmlwdWxhdGlvbihpeCwgaXksIGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnYWRkcG9pbnQnKSB7XG4gICAgICB0aGlzLmhhbmRsZUFkZFBvaW50KGl4LCBpeSwgZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnZGVsZXRlcG9pbnQnKSB7XG4gICAgICB0aGlzLmhhbmRsZURlbGV0ZVBvaW50KGl4LCBpeSk7XG4gICAgfVxuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG9uUG9pbnRlck1vdmUgPSAoZTogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgW2l4LCBpeV0gPSB0aGlzLnByb2plY3Rpb24udG9JbWFnZShlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgaWYgKHRoaXMubWFycXVlZSkge1xuICAgICAgdGhpcy5tYXJxdWVlLngxID0gaXg7XG4gICAgICB0aGlzLm1hcnF1ZWUueTEgPSBpeTtcbiAgICAgIHRoaXMudXBkYXRlTWFycXVlZUVsKCk7IC8vIHVwZGF0ZSBqdXN0IHRoZSBtYXJxdWVlIHJlY3Qg4oCUIE5PVCBhIGZ1bGwgcmVnaW9uIHJlZHJhd1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICBhcHBseVJlZ2lvbkVkaXQodGhpcy5zdG9yZSwgdGhpcy5lZGl0LCBpeCwgaXkpO1xuICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRyYXdpbmcpIHJldHVybjtcbiAgICBpZiAodGhpcy5kcmFmdFJlY3QpIHtcbiAgICAgIHRoaXMuZHJhZnRSZWN0LngxID0gaXg7XG4gICAgICB0aGlzLmRyYWZ0UmVjdC55MSA9IGl5O1xuICAgIH0gZWxzZSBpZiAodGhpcy5kcmFmdFBhdGgpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBGUkVFSEFORF9TVEVQX1BYICogdGhpcy5wcm9qZWN0aW9uLndvcmxkUGVyQ2FudmFzUGl4ZWwoKTtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmRyYWZ0UGF0aFt0aGlzLmRyYWZ0UGF0aC5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChNYXRoLmFicyhpeCAtIGxhc3RbMF0pID49IHN0ZXAgfHwgTWF0aC5hYnMoaXkgLSBsYXN0WzFdKSA+PSBzdGVwKSB7XG4gICAgICAgIHRoaXMuZHJhZnRQYXRoLnB1c2goW2l4LCBpeV0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uUG9pbnRlclVwID0gKGU6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLm1hcnF1ZWUpIHtcbiAgICAgIGNvbnN0IG0gPSB0aGlzLm1hcnF1ZWU7XG4gICAgICB0aGlzLm1hcnF1ZWUgPSBudWxsO1xuICAgICAgdGhpcy5yZW5kZXJlci5jbGVhck1hcnF1ZWUoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3ZnLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogYWxyZWFkeSByZWxlYXNlZCAqL1xuICAgICAgfVxuICAgICAgdGhpcy5maW5pc2hNYXJxdWVlKG0pOyAvLyBzZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyDihpIgb25lIHJlZHJhdyB2aWEgdGhlIHNlbGVjdGlvbiBzdWJzY3JpcHRpb25cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5zdG9yZS5lbmRCYXRjaCgpO1xuICAgICAgdGhpcy5lZGl0ID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3ZnLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogYWxyZWFkeSByZWxlYXNlZCAqL1xuICAgICAgfVxuICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRyYXdpbmcpIHJldHVybjtcbiAgICB0aGlzLmRyYXdpbmcgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdmcucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIGNhcHR1cmUgbWF5IGFscmVhZHkgYmUgcmVsZWFzZWQgKi9cbiAgICB9XG4gICAgaWYgKHRoaXMuZHJhZnRSZWN0KSB7XG4gICAgICBjb25zdCB7IHgwLCB5MCwgeDEsIHkxIH0gPSB0aGlzLmRyYWZ0UmVjdDtcbiAgICAgIGNvbnN0IHggPSBNYXRoLm1pbih4MCwgeDEpO1xuICAgICAgY29uc3QgeSA9IE1hdGgubWluKHkwLCB5MSk7XG4gICAgICBjb25zdCB3ID0gTWF0aC5hYnMoeDEgLSB4MCk7XG4gICAgICBjb25zdCBoID0gTWF0aC5hYnMoeTEgLSB5MCk7XG4gICAgICB0aGlzLmRyYWZ0UmVjdCA9IG51bGw7XG4gICAgICBjb25zdCBtaW4gPSBNSU5fUkVDVF9EUkFHX1BYICogdGhpcy5wcm9qZWN0aW9uLndvcmxkUGVyQ2FudmFzUGl4ZWwoKTtcbiAgICAgIGlmICh3ID49IG1pbiAmJiBoID49IG1pbikgdGhpcy5jb21taXRSZWN0YW5nbGUoeCwgeSwgdywgaCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRyYWZ0UGF0aCkge1xuICAgICAgY29uc3QgcHRzID0gdGhpcy5kcmFmdFBhdGg7XG4gICAgICB0aGlzLmRyYWZ0UGF0aCA9IG51bGw7XG4gICAgICBjb25zdCBjbG9zZWQgPSB0aGlzLm1vZGUgPT09ICdkcmF3Y2xvc2VkcGF0aCc7XG4gICAgICBpZiAocHRzLmxlbmd0aCA+PSAoY2xvc2VkID8gMyA6IDIpKSB0aGlzLmNvbW1pdFBvbHlnb24ocHRzLCBjbG9zZWQpO1xuICAgIH1cbiAgICB0aGlzLnJlZHJhdygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcG9pbnRlciBnZXN0dXJlIGVuZGVkIHdpdGhvdXQgYSBwb2ludGVydXAgKHRoZSBicm93c2VyIGNhbmNlbGxlZCBpdCwgb3IgY2FwdHVyZSB3YXNcbiAgICogbG9zdCk6IGVuZCBpdCB3aXRob3V0IGNvbW1pdHRpbmcuIEFsc28gZmlyZXMgYWZ0ZXIgZXZlcnkgbm9ybWFsIHJlbGVhc2UsIHdoZW4gbm90aGluZ1xuICAgKiBpcyBsaXZlIGFueSBtb3JlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvblBvaW50ZXJDYW5jZWwgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLmVkaXQgJiYgIXRoaXMuZHJhd2luZyAmJiAhdGhpcy5tYXJxdWVlKSByZXR1cm47XG4gICAgdGhpcy5lbmRHZXN0dXJlKCk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfTtcblxuICAvKipcbiAgICogRW5kIHdoYXRldmVyIHBvaW50ZXIgZ2VzdHVyZSBpcyBsaXZlIHdpdGhvdXQgY29tbWl0dGluZyBpdDogY2xvc2UgdGhlIHN0b3JlIGJhdGNoIGEgZHJhZ1xuICAgKiBvcGVuZWQgKHNvIGxhdGVyIGVkaXRzIGFyZSBlbWl0dGVkIGFnYWluKSBhbmQgZm9yZ2V0IHRoZSBkcmFnIChzbyBhIGJhcmUgaG92ZXIgbm8gbG9uZ2VyXG4gICAqIG1vdmVzIHRoZSByZWdpb24pLCBhbmQgZHJvcCB0aGUgbWFycXVlZSBhbmQgYSByZWN0YW5nbGUvZnJlZWhhbmQgZHJhZnQuIEEgY2xpY2stcGxhY2VkXG4gICAqIHBvbHlnb24gaXMgbm90IGEgcG9pbnRlciBnZXN0dXJlIGFuZCBzdXJ2aXZlcy5cbiAgICovXG4gIHByaXZhdGUgZW5kR2VzdHVyZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0KSB0aGlzLnN0b3JlLmVuZEJhdGNoKCk7XG4gICAgdGhpcy5lZGl0ID0gbnVsbDtcbiAgICBpZiAodGhpcy5kcmF3aW5nKSB7XG4gICAgICB0aGlzLmRyYWZ0UmVjdCA9IG51bGw7XG4gICAgICB0aGlzLmRyYWZ0UGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuZHJhd2luZyA9IGZhbHNlO1xuICAgIHRoaXMubWFycXVlZSA9IG51bGw7XG4gICAgdGhpcy5yZW5kZXJlci5jbGVhck1hcnF1ZWUoKTtcbiAgfVxuXG4gIC8qKiBDbGljay10by1wbGFjZSBwb2x5Z29uOiBhZGQgYSB2ZXJ0ZXgsIG9yIGNsb3NlIHdoZW4gY2xpY2tpbmcgbmVhciB0aGUgZmlyc3Qgb25lLiAqL1xuICBwcml2YXRlIGhhbmRsZVBvbHlnb25DbGljayhpeDogbnVtYmVyLCBpeTogbnVtYmVyLCBjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5kcmFmdFBhdGgpIHtcbiAgICAgIHRoaXMuZHJhZnRQYXRoID0gW1tpeCwgaXldXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmVhciA9XG4gICAgICB0aGlzLnByb2plY3Rpb24uc2NyZWVuRGlzdChjbGllbnRYLCBjbGllbnRZLCB0aGlzLmRyYWZ0UGF0aFswXVswXSwgdGhpcy5kcmFmdFBhdGhbMF1bMV0pIDw9IENMT1NFX1NOQVBfUFggJiZcbiAgICAgIHRoaXMuZHJhZnRQYXRoLmxlbmd0aCA+PSAzO1xuICAgIGlmIChuZWFyKSB7XG4gICAgICBjb25zdCBwdHMgPSB0aGlzLmRyYWZ0UGF0aDtcbiAgICAgIHRoaXMuZHJhZnRQYXRoID0gbnVsbDtcbiAgICAgIHRoaXMuY29tbWl0UG9seWdvbihwdHMsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYWZ0UGF0aC5wdXNoKFtpeCwgaXldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG9uRGJsQ2xpY2sgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLm1vZGUgIT09ICdkcmF3cG9seWdvbicgfHwgIXRoaXMuZHJhZnRQYXRoKSByZXR1cm47XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHB0cyA9IHRoaXMuZHJhZnRQYXRoO1xuICAgIHRoaXMuZHJhZnRQYXRoID0gbnVsbDtcbiAgICBpZiAocHRzLmxlbmd0aCA+PSAzKSB0aGlzLmNvbW1pdFBvbHlnb24ocHRzLCB0cnVlKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9O1xuXG4gIC8qKiBUaGUgY3VycmVudGx5LXNlbGVjdGVkIHJlZ2lvbiAoc2luZ2xlIHNlbGVjdGlvbikgdGhpcyBvdmVybGF5IGRyYXdzLCBvciBudWxsLiAqL1xuICBwcml2YXRlIHNlbGVjdGVkUmVnaW9uKCk6IFJlZ2lvbiB8IG51bGwge1xuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKTtcbiAgICBjb25zdCBpID0gdGhpcy5zZWxlY3RlZFswXTtcbiAgICBjb25zdCByZWdpb24gPSBpICE9IG51bGwgJiYgaSA+PSAwICYmIGkgPCByZWdpb25zLmxlbmd0aCA/IHJlZ2lvbnNbaV0gOiBudWxsO1xuICAgIHJldHVybiByZWdpb24gJiYgdGhpcy5kcmF3cyhyZWdpb24pID8gcmVnaW9uIDogbnVsbDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgb3ZlcmxheSBkcmF3cyAoYW5kIGxldHMgdGhlIHBvaW50ZXIgcGljaykgYHJlZ2lvbmA6IHNlZSB7QGxpbmsgb3dufS4gKi9cbiAgcHJpdmF0ZSBkcmF3cyhyZWdpb246IFJlZ2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5vd24gfHwgdGhpcy5vd24uaGFzKHJlZ2lvbi5pZCk7XG4gIH1cblxuICAvKiogVGhlIHJlZ2lvbnMgdGhpcyBvdmVybGF5IGRyZXcgaW4gc2NyZWVuIHNwYWNlICh0aGUgM0QgdmlldydzIGxhc3Nvcyk7IFtdIGluIGltYWdlIHNwYWNlLiAqL1xuICBvd25SZWdpb25JZHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLm93biA/IFsuLi50aGlzLm93bl0gOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHNlbGVjdC9tb3ZlIGludGVyYWN0aW9uOiBncmFiIGEgaGFuZGxlIChyZWN0YW5nbGUgY29ybmVyKSBvciB2ZXJ0ZXggb2YgdGhlIGFscmVhZHktXG4gICAqIHNlbGVjdGVkIHJlZ2lvbiBmaXJzdDsgb3RoZXJ3aXNlIHNlbGVjdCB0aGUgdG9wbW9zdCByZWdpb24gdW5kZXIgdGhlIGN1cnNvciBhbmQgZHJhZyBpdHMgYm9keS5cbiAgICovXG4gIHByaXZhdGUgYmVnaW5NYW5pcHVsYXRpb24oaXg6IG51bWJlciwgaXk6IG51bWJlciwgZTogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5zZWxlY3RlZFJlZ2lvbigpO1xuICAgIGlmIChzZWw/LmJvdW5kcykge1xuICAgICAgY29uc3QgW2x4LCBseV0gPSB0aGlzLnByb2plY3Rpb24uY2xpZW50VG9Mb2NhbChlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgICBjb25zdCBncmFiID0gaGl0SGFuZGxlKHNlbCwgbHgsIGx5LCB0aGlzLnByb2plY3Rpb24udG9TY3JlZW4sIEhBTkRMRV9ISVRfUFgpO1xuICAgICAgaWYgKGdyYWIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5iZWdpbkJhdGNoKCk7XG4gICAgICAgIHRoaXMuZWRpdCA9IHsgLi4uZ3JhYiwgaWQ6IHNlbC5pZCwgbGFzdDogW2l4LCBpeV0gfTtcbiAgICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhpdC10ZXN0IGJvZGllcywgdG9wbW9zdCBmaXJzdCAobGFzdCBkcmF3biByZW5kZXJzIG9uIHRvcCksIGF0IHRoZSBleGFjdCBwb2ludGVyXG4gICAgLy8gcG9zaXRpb24g4oCUIHNuYXBwaW5nIGlzIGZvciBwbGFjaW5nIHZlcnRpY2VzLCBub3QgZm9yIHBpY2tpbmcuXG4gICAgY29uc3QgcmVnaW9ucyA9IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpO1xuICAgIGNvbnN0IFt3eCwgd3ldID0gdGhpcy5wcm9qZWN0aW9uLnRvV29ybGQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgIGZvciAobGV0IGkgPSByZWdpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGhpcy5zdG9yZS5pc0NsYXNzSGlkZGVuKHJlZ2lvbnNbaV0ubGFiZWwpIHx8ICF0aGlzLmRyYXdzKHJlZ2lvbnNbaV0pKSBjb250aW51ZTtcbiAgICAgIGlmIChyZWdpb25Db250YWlucyhyZWdpb25zW2ldLCB3eCwgd3ksIHsgdG9TY3JlZW46IHRoaXMucHJvamVjdGlvbi50b1NjcmVlbiwgdG9sUHg6IE9QRU5fUEFUSF9ISVRfUFggfSkpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3RSZWdpb24ocmVnaW9uc1tpXSk7XG4gICAgICAgIHRoaXMuc3RvcmUuYmVnaW5CYXRjaCgpO1xuICAgICAgICB0aGlzLmVkaXQgPSB7IGtpbmQ6ICdib2R5JywgaWQ6IHJlZ2lvbnNbaV0uaWQsIGxhc3Q6IFtpeCwgaXldIH07XG4gICAgICAgIHRoaXMuc3ZnLnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBIGZlYXR1cmUgb2YgdGhlIHJlZ2lvbiBzb3VyY2U6IHRha2UgaXQgaW50byB0aGUgcmVnaW9ucyBhbmQgc2VsZWN0IGl0IChhIGRyYWcgb24gaXRcbiAgICAvLyBtb3ZlcyBpdCBvbmNlIGl0IGlzIHNlbGVjdGVkKS5cbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5zb3VyY2VMYXllcj8uZmVhdHVyZUF0KHd4LCB3eSwgT1BFTl9QQVRIX0hJVF9QWCk7XG4gICAgaWYgKGZlYXR1cmUpIHtcbiAgICAgIHZvaWQgdGhpcy5zdG9yZS5zZWxlY3RTb3VyY2VGZWF0dXJlcyhbZmVhdHVyZS5pZF0sIGUuc2hpZnRLZXkgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEVtcHR5IHNwYWNlOiBpbiBzZWxlY3QgbW9kZSBzdGFydCBhIHJ1YmJlci1iYW5kIG1hcnF1ZWUgKHNlbGVjdHMgdGhlIHJlZ2lvbnMgaXQgY292ZXJzIG9uXG4gICAgLy8gcmVsZWFzZSk7IGluIG1vdmUgbW9kZSBqdXN0IGNsZWFyIHRoZSBzZWxlY3Rpb24uXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHRoaXMubWFycXVlZSA9IHsgeDA6IGl4LCB5MDogaXksIHgxOiBpeCwgeTE6IGl5IH07XG4gICAgICB0aGlzLnVwZGF0ZU1hcnF1ZWVFbCgpO1xuICAgICAgdGhpcy5zdmcuc2V0UG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKFtdKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2hvdyB0aGUgbWFycXVlZSB3aGVyZSBpdCBpcyBub3cgKG9ubHkgdGhlIG1hcnF1ZWUgZWxlbWVudDogbm8gZnVsbCByZWdpb24gcmVkcmF3KS4gKi9cbiAgcHJpdmF0ZSB1cGRhdGVNYXJxdWVlRWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1hcnF1ZWUpIHJldHVybjtcbiAgICBjb25zdCB7IHgwLCB5MCwgeDEsIHkxIH0gPSB0aGlzLm1hcnF1ZWU7XG4gICAgY29uc3QgW2x4LCBseV0gPSB0aGlzLnByb2plY3Rpb24udG9Mb2NhbChNYXRoLm1pbih4MCwgeDEpLCBNYXRoLm1pbih5MCwgeTEpKTtcbiAgICBjb25zdCBbcngsIHJ5XSA9IHRoaXMucHJvamVjdGlvbi50b0xvY2FsKE1hdGgubWF4KHgwLCB4MSksIE1hdGgubWF4KHkwLCB5MSkpO1xuICAgIHRoaXMucmVuZGVyZXIuc2hvd01hcnF1ZWUobHgsIGx5LCByeCwgcnkpO1xuICB9XG5cbiAgLyoqIGFkZHBvaW50IG1vZGU6IGluc2VydCBhIHZlcnRleCBhdCB0aGUgY2xpY2sgb24gdGhlIHNlbGVjdGVkIHBvbHlnb24ncyBuZWFyZXN0IGVkZ2VcbiAgICogIChleHRlcmlvciBvciBhIGhvbGUgcmluZykuICovXG4gIHByaXZhdGUgaGFuZGxlQWRkUG9pbnQoaXg6IG51bWJlciwgaXk6IG51bWJlciwgY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uKCk7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcbiAgICBjb25zdCBbbHgsIGx5XSA9IHRoaXMucHJvamVjdGlvbi5jbGllbnRUb0xvY2FsKGNsaWVudFgsIGNsaWVudFkpO1xuICAgIGNvbnN0IGVkZ2UgPSBuZWFyZXN0RWRnZShzZWwsIGx4LCBseSwgdGhpcy5wcm9qZWN0aW9uLnRvU2NyZWVuKTtcbiAgICBpZiAoIWVkZ2UpIHJldHVybjtcbiAgICBpZiAoZWRnZS5yaW5nIDwgMCkgdGhpcy5zdG9yZS5hZGRWZXJ0ZXgoc2VsLmlkLCBlZGdlLnNlZ0luZGV4LCBpeCwgaXkpO1xuICAgIGVsc2UgdGhpcy5zdG9yZS5hZGRIb2xlVmVydGV4KHNlbC5pZCwgZWRnZS5yaW5nLCBlZGdlLnNlZ0luZGV4LCBpeCwgaXkpO1xuICB9XG5cbiAgLyoqIGRlbGV0ZXBvaW50IG1vZGU6IHJlbW92ZSB0aGUgc2VsZWN0ZWQgcG9seWdvbidzIHZlcnRleCBuZWFyZXN0IHRoZSBjbGljayAoZXh0ZXJpb3Igb3IgYVxuICAgKiAgaG9sZSByaW5nKS4gKi9cbiAgcHJpdmF0ZSBoYW5kbGVEZWxldGVQb2ludChpeDogbnVtYmVyLCBpeTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5zZWxlY3RlZFJlZ2lvbigpO1xuICAgIGlmICghc2VsKSByZXR1cm47XG4gICAgY29uc3QgdiA9IG5lYXJlc3RWZXJ0ZXgoc2VsLCBpeCwgaXkpO1xuICAgIGlmICghdikgcmV0dXJuO1xuICAgIGlmICh2LnJpbmcgPCAwKSB0aGlzLnN0b3JlLmRlbGV0ZVZlcnRleChzZWwuaWQsIHYuaW5kZXgpO1xuICAgIGVsc2UgdGhpcy5zdG9yZS5kZWxldGVIb2xlVmVydGV4KHNlbC5pZCwgdi5yaW5nLCB2LmluZGV4KTtcbiAgfVxuXG4gIC8qKiBGaW5hbGl6ZSBhIHJ1YmJlci1iYW5kIG1hcnF1ZWU6IHNlbGVjdCBldmVyeSByZWdpb24gd2hvc2UgYm91bmRpbmcgYm94IGl0IG92ZXJsYXBzIChhXG4gICAqICBtYXJxdWVlIHVuZGVyIHtAbGluayBNSU5fTUFSUVVFRV9QWH0gaXMgYSBjbGljayBvbiBlbXB0eSBzcGFjZSDihpIgY2xlYXIgdGhlIHNlbGVjdGlvbikuICovXG4gIHByaXZhdGUgZmluaXNoTWFycXVlZShtOiBEcmFnQm94KTogdm9pZCB7XG4gICAgY29uc3QgeDAgPSBNYXRoLm1pbihtLngwLCBtLngxKTtcbiAgICBjb25zdCB4MSA9IE1hdGgubWF4KG0ueDAsIG0ueDEpO1xuICAgIGNvbnN0IHkwID0gTWF0aC5taW4obS55MCwgbS55MSk7XG4gICAgY29uc3QgeTEgPSBNYXRoLm1heChtLnkwLCBtLnkxKTtcbiAgICBjb25zdCBtaW4gPSBNSU5fTUFSUVVFRV9QWCAqIHRoaXMucHJvamVjdGlvbi53b3JsZFBlckNhbnZhc1BpeGVsKCk7XG4gICAgaWYgKHgxIC0geDAgPCBtaW4gJiYgeTEgLSB5MCA8IG1pbikge1xuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyhbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKTtcbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKFxuICAgICAgcmVnaW9uc0luUmVjdChyZWdpb25zLCB4MCwgeTAsIHgxLCB5MSwge1xuICAgICAgICBza2lwUHJvZmlsZXM6IHRydWUsXG4gICAgICAgIHNraXA6IChyKSA9PiB0aGlzLnN0b3JlLmlzQ2xhc3NIaWRkZW4oci5sYWJlbCkgfHwgIXRoaXMuZHJhd3MociksXG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5zb3VyY2VMYXllcj8uZmVhdHVyZXNJblJlY3QoeDAsIHkwLCB4MSwgeTEpID8/IFtdO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgIHZvaWQgdGhpcy5zdG9yZS5zZWxlY3RTb3VyY2VGZWF0dXJlcyhcbiAgICAgICAgZmVhdHVyZXMuc2xpY2UoMCwgU09VUkNFX01BUlFVRUVfTElNSVQpLm1hcCgoZikgPT4gZi5pZCksXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBzaGFwZSBjb21taXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgY29tbWl0UmVjdGFuZ2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdGFuZ2xlKCk7XG4gICAgcmVjdC54ID0geDtcbiAgICByZWN0LnkgPSB5O1xuICAgIHJlY3Qud2lkdGggPSB3aWR0aDtcbiAgICByZWN0LmhlaWdodCA9IGhlaWdodDtcbiAgICBjb25zdCByZWdpb24gPSBuZXcgUmVnaW9uKCk7XG4gICAgcmVnaW9uLmJvdW5kcyA9IHJlY3Q7XG4gICAgcmVnaW9uLmNvbG9yID0gdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCk7XG4gICAgdGhpcy5zdG9yZS5hZGRSZWdpb24ocmVnaW9uKTtcbiAgICB0aGlzLm93bj8uYWRkKHJlZ2lvbi5pZCk7XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdFBvbHlnb24ocG9pbnRzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiwgY2xvc2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgcG9seSA9IG5ldyBQb2x5Z29uKCk7XG4gICAgcG9seS5ucG9pbnRzID0gcG9pbnRzLmxlbmd0aDtcbiAgICBwb2x5Lnhwb2ludHMgPSBwb2ludHMubWFwKChwKSA9PiBwWzBdKTtcbiAgICBwb2x5Lnlwb2ludHMgPSBwb2ludHMubWFwKChwKSA9PiBwWzFdKTtcbiAgICBwb2x5LmNvb3JkaW5hdGVzID0gcG9pbnRzLm1hcCgocCkgPT4gW3BbMF0sIHBbMV1dKTtcbiAgICBwb2x5LmNsb3NlZCA9IGNsb3NlZDtcbiAgICBjb25zdCByZWdpb24gPSBuZXcgUmVnaW9uKCk7XG4gICAgcmVnaW9uLmJvdW5kcyA9IHBvbHk7XG4gICAgcmVnaW9uLmNvbG9yID0gdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCk7XG4gICAgcmVnaW9uLmxhYmVsID0gJ1JlZ2lvbic7XG4gICAgdGhpcy5zdG9yZS5hZGRSZWdpb24ocmVnaW9uKTtcbiAgICB0aGlzLm93bj8uYWRkKHJlZ2lvbi5pZCk7XG4gIH1cblxuICAvLyDilIDilIAgcmVuZGVyaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogU2hvdyBvciBoaWRlIHRoZSBkcmF3biByZWdpb25zLiBBIHJlZ2lvbiBiZWluZyBkcmF3biBzdGF5cyB2aXNpYmxlIGVpdGhlciB3YXkuICovXG4gIHNldFJlZ2lvbnNWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodmlzaWJsZSA9PT0gdGhpcy5yZWdpb25zVmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMucmVnaW9uc1Zpc2libGUgPSB2aXNpYmxlO1xuICAgIHRoaXMuc291cmNlTGF5ZXI/LnNldFZpc2libGUodmlzaWJsZSk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxuXG4gIC8qKiBGb2xsb3cgYSBjYW1lcmEgbW92ZTogb25lIHRyYW5zZm9ybSBhdHRyaWJ1dGUgcGx1cyB0aGUgc2NyZWVuLXNwYWNlIGVsZW1lbnRzLiAqL1xuICBwcml2YXRlIHVwZGF0ZUNhbWVyYSgpOiB2b2lkIHtcbiAgICBjb25zdCBhZmZpbmUgPSB0aGlzLnByb2plY3Rpb24uYWZmaW5lKCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRDYW1lcmEoYWZmaW5lKTtcbiAgICB0aGlzLnNvdXJjZUxheWVyPy5zZXRDYW1lcmEoYWZmaW5lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWJ1aWxkIGV2ZXJ5IGVsZW1lbnQgZnJvbSB0aGUgc3RvcmU6IHRoZSByZWdpb25zIGluIHdvcmxkIGNvb3JkaW5hdGVzIChvbmUgdHJhbnNmb3JtZWRcbiAgICogZ3JvdXApLCB0aGVpciBsYWJlbHMsIGFuZCB0aGUgb3ZlcmxheS4gUmVhZHMgbm8gbGF5b3V0OiB0aGUgY2FtZXJhIGFmZmluZSBpcyB0aGUgdmlld2VyJ3MuXG4gICAqL1xuICByZWRyYXcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDYW1lcmEoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnJlZ2lvbnNWaXNpYmxlID8gdGhpcy5zdG9yZS5nZXRSZWdpb25zKCkgOiBbXSwgdGhpcy5zZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gIH1cblxuICAvKiogUmVidWlsZCB0aGUgc2NyZWVuLXNwYWNlIG92ZXJsYXkgb25seTogdGhlIHNlbGVjdGVkIHJlZ2lvbnMnIGhhbmRsZXMgYW5kIHRoZSBkcmFmdC4gKi9cbiAgcHJpdmF0ZSByZW5kZXJPdmVybGF5KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyT3ZlcmxheSh0aGlzLnJlZ2lvbnNWaXNpYmxlID8gdGhpcy5zdG9yZS5nZXRSZWdpb25zKCkgOiBbXSwgdGhpcy5zZWxlY3RlZCwge1xuICAgICAgcmVjdDogdGhpcy5kcmFmdFJlY3QsXG4gICAgICBwYXRoOiB0aGlzLmRyYWZ0UGF0aCxcbiAgICB9KTtcbiAgfVxufVxuIl19
|