gamma-app-controller 1.2.14 → 1.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (16) hide show
  1. package/esm2020/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.mjs +21 -3
  2. package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.mjs +2 -2
  3. package/esm2020/lib/application-controller/application-filter/application-filter.component.mjs +21 -3
  4. package/esm2020/lib/application-controller/application-view-components/application-views/application-views.component.mjs +21 -3
  5. package/esm2020/lib/application-controller/page-controller/page-controller/page-controller.component.mjs +21 -3
  6. package/esm2020/lib/template-module/defaulLandingComponent/landing-component.component.mjs +10 -8
  7. package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +9 -6
  8. package/fesm2015/gamma-app-controller.mjs +98 -21
  9. package/fesm2015/gamma-app-controller.mjs.map +1 -1
  10. package/fesm2020/gamma-app-controller.mjs +98 -21
  11. package/fesm2020/gamma-app-controller.mjs.map +1 -1
  12. package/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.d.ts +3 -0
  13. package/lib/application-controller/application-filter/application-filter.component.d.ts +3 -0
  14. package/lib/application-controller/application-view-components/application-views/application-views.component.d.ts +3 -0
  15. package/lib/application-controller/page-controller/page-controller/page-controller.component.d.ts +3 -0
  16. package/package.json +1 -1
@@ -216,6 +216,7 @@ export class LandingComponentComponent {
216
216
  });
217
217
  let datasetIds = new Set();
218
218
  let viewIds = new Set();
219
+ let datasetIdsSet = new Set();
219
220
  widget.widgetNode.forEach(node => {
220
221
  if (node.nodeProperties.display) {
221
222
  node.compConfig.viewConfig.forEach(view => {
@@ -234,6 +235,7 @@ export class LandingComponentComponent {
234
235
  viewId: view.viewId,
235
236
  filter: derivedFilters
236
237
  };
238
+ datasetIdsSet.add(view.datasetId);
237
239
  datasetIds.add(node);
238
240
  viewIds.add(view.viewId);
239
241
  });
@@ -248,21 +250,23 @@ export class LandingComponentComponent {
248
250
  const newViews = this.defaultViewIdsOnPageRefresh.map(item => item.viewId);
249
251
  this.defaultViewIds = [...this.defaultViewIds, ...newViews.filter(item => !this.defaultViewIds.includes(item))];
250
252
  }
253
+ let uniquedatasetIds = Array.from(datasetIdsSet);
251
254
  let obj = {
252
255
  widgetId: widget.widgetId,
253
256
  pageId: widget.pageId,
254
257
  filters: defaultFilters,
255
- datasetIds: datasetIds
258
+ datasetIds: uniquedatasetIds
256
259
  };
257
260
  this.allWidgetByDataset.push(obj);
258
261
  });
262
+ debugger;
259
263
  this.uniqueDataSetObject = {};
260
264
  let apiCalls = [];
261
265
  this.allWidgetByDataset.forEach(view => {
262
266
  view.datasetIds.forEach(id => {
263
- let found = datasetConfig.find(d => d.datasetId === id.datasetId);
267
+ let found = datasetConfig.find(d => d.datasetId === id);
264
268
  if (found) {
265
- apiCalls.push(this.datasetService.getDataFromDataSet(found, id.datasetId, id.filter));
269
+ apiCalls.push(this.datasetService.getDataFromDataSet(found, id, view.filters));
266
270
  }
267
271
  });
268
272
  });
@@ -334,7 +338,6 @@ export class LandingComponentComponent {
334
338
  const itemDiv = document.createElement('div');
335
339
  itemDiv.id = elementId;
336
340
  itemDiv.classList.add(item.nodeProperties.width, w_height, 'mb-2');
337
- debugger;
338
341
  if (item.nodeProperties.widgetTitle !== "") {
339
342
  const widgetDiv = this.getWidgetTitleDiv(item);
340
343
  itemDiv.appendChild(widgetDiv);
@@ -356,7 +359,6 @@ export class LandingComponentComponent {
356
359
  else if (existingElement) {
357
360
  const itemDiv = existingElement;
358
361
  itemDiv.innerHTML = '';
359
- debugger;
360
362
  if (item.nodeProperties.widgetTitle !== "") {
361
363
  const widgetDiv = this.getWidgetTitleDiv(item);
362
364
  itemDiv.appendChild(widgetDiv);
@@ -684,12 +686,12 @@ export class LandingComponentComponent {
684
686
  });
685
687
  queryParams['pageId'] = params['pageId'];
686
688
  const fullUrl = this.router.serializeUrl(this.router.createUrlTree([data.pageUrl], { queryParams }));
687
- window.open(fullUrl, '_blank');
689
+ this.router.navigate([data.pageUrl], { queryParams });
688
690
  }
689
691
  else {
690
692
  const queryString = new URLSearchParams(params).toString();
691
693
  const fullUrl = this.router.serializeUrl(this.router.createUrlTree([data.pageUrl], { queryParams: params }));
692
- window.open(fullUrl, '_blank');
694
+ this.router.navigate([data.pageUrl], { queryParams });
693
695
  console.log(data);
694
696
  }
695
697
  }
@@ -1206,4 +1208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1206
1208
  type: ViewChild,
1207
1209
  args: ['dynamicContainerForPopup', { static: true }]
1208
1210
  }] } });
1209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZGluZy1jb21wb25lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi90ZW1wbGF0ZS1tb2R1bGUvZGVmYXVsTGFuZGluZ0NvbXBvbmVudC9sYW5kaW5nLWNvbXBvbmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9kZWZhdWxMYW5kaW5nQ29tcG9uZW50L2xhbmRpbmctY29tcG9uZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFrRyxTQUFTLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBNLE9BQU8sTUFBTSxNQUFNLDRDQUE0QyxDQUFDO0FBR2hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1GQUFtRixDQUFDO0FBQy9ILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFGQUFxRixDQUFDO0FBQ2xJLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLG1HQUFtRyxDQUFDO0FBQ3RKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJGQUEyRixDQUFDO0FBQzFJLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFHQUFxRyxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFHQUFxRyxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBRWhILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFN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QUFnQjtzQkFBaEUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1Usd0JBQXdCO3NCQUFoRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuaW1wb3J0IHsgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWFkdmFuY2UtY2hhcnQvZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFUb2RheVByZXZpb3VzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS10b2RheS1wcmV2aW91cy9nYW1tYS10b2RheS1wcmV2aW91cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwQWR2YW5jZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvYXBwLWFkdmFuY2UtaGVhZGVyL2FwcC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlL2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbVNpbmdsZU51bWJlckNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW0tc2luZ2xlLW51bWJlci1jYXJkL2dhbW0tc2luZ2xlLW51bWJlci1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlL2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2FkdmFuY2Utd2lkZ2V0LWhlYWRlci1maWx0ZXIvYWR2YW5jZS13aWRnZXQtaGVhZGVyLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFHZW9DaGFydENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtZ2VvLWNoYXJ0L2dhbW1hLWdlby1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFIZWF0Q2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWhlYXRtYXAvZ2FtbWEtaGVhdG1hcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExhbmRpbmdDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi9sYW5kaW5nLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IExhbmRpbmdBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbCB9IGZyb20gJy4vbGFuZGluZy1kYXRhc2V0LWNhbGwuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBMYW5kaW5nTGF5b3V0TG9jYWxTdG9yYWdlIH0gZnJvbSAnLi9sYW5kaW5nLnRva2VuU3RvcmFnZS5zZXJ2Y2UnO1xuLy8gaW1wb3J0IHsgQXBwTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci90b2tlblN0b3JhZ2Uuc2VydmNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbGFuZGluZy1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGFuZGluZy1jb21wb25lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sYW5kaW5nLWNvbXBvbmVudC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExhbmRpbmdDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGRhc2hib3JkX2NvbnRhaW5lcjogYW55ID0gW107XG4gIHNlbGVjdGVkX3dpZHRoOiBhbnk7XG4gIHdpZGdldF93aWR0aCA9IFsndy1mdWxsJywgJ3ctMS8yJywgJ3ctMS8zJywgJ3ctMS80JywgJ3ctMS81JywgJ3ctMS82J11cbiAgbG9hZGluZ01vZGFsOiBib29sZWFuO1xuICBwYWdlX3RpdGxlID0gJ0Rhc2hib2FyZCc7XG4gIGRlZmF1bHRTdGFydERhdGU7XG4gIGRlZmF1bHRFbmREYXRlO1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICovXG5cbiAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICBAVmlld0NoaWxkKCdkeW5hbWljQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbnRhaW5lckZvclBvcHVwJywgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0NvbnRhaW5lckZvclBvcHVwOiBFbGVtZW50UmVmO1xuXG4gIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG4gIC8vIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG5cbiAgQ29tcFJlZnM6IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gIGNvbXBvbmVudENsYXNzTWFwID0ge1xuICAgIEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50LFxuICAgIEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCxcbiAgICBBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50LFxuICAgIEdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCxcbiAgICBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICBHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50LFxuICAgIEFkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnQsXG4gICAgR2FtbWFHZW9DaGFydENvbXBvbmVudCxcbiAgICBHYW1tYUhlYXRDaGFydENvbXBvbmVudFxuICB9O1xuICBkYXRhU291cmNlTWF0YURhdGE6IGFueSA9IFtdO1xuICBxdWVyeVR5cGUgPSBcIm1vbmdvXCI7XG4gIGRhdGFTZXRNb2RhbDogYW55ID0gW107XG4gIGNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBzZWxlc2NlZERhdGFTb3VyY2U6IGFueTtcbiAgZGF0YVNvdXJjZU1vZGFsOiBhbnkgPSB7fTtcbiAgaXNEYXNoQm9hcmRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VsZWN0ZWRWaWV3Rm9ybUNvbXBvbmVudDogYW55ID0ge307XG4gIGFkZGVkd2lkR2V0Q29uZmlnID0ge1xuICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgIFwid2lkZ2V0VGl0bGVcIjogXCJcIixcbiAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgXCJoZWlnaHRcIjogXCJcIlxuICB9XG5cblxuICBkYXNoQm9hcmRXaWRnZXRDb25maWc6IGFueSA9IFtcblxuICBdO1xuICBpc1dpZGdldENyZWF0aW9uQ29udGVudDogYm9vbGVhbjtcbiAgc2VsZWN0ZWRXaWR0aDogYW55O1xuICBzZWxlY3RlZEhlaWdodDogYW55O1xuICBuZXdXaWRnZXRJbmRleDogYW55O1xuICBzZWxlY3RlZEluZGV4T2JqRm9yQ2hhcnQ6IGFueSA9IHt9O1xuICBzZWxlY3RlZENvbnRhaW5lck9iamVjdEZvckNoYXJ0OiBhbnkgPSB7fTtcbiAgZGF0YVNldHRhYmxlRGF0YVNvdXJjZTogYW55O1xuICB1bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG5cbiAgaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXc6IGJvb2xlYW4gPSB0cnVlO1xuICBmaWx0ZXJzOiBhbnk7XG4gIGFsbFdpZGdldEJ5RGF0YXNldCA9IFtdO1xuICBwYWdlVGl0bGU6IGFueTtcbiAgc3RhdGVEYXRhU291cmNlID0gbmV3IE1hcCgpO1xuICBtYWluUGFnZURpdkVsZW1lbnQ6IGFueTtcbiAgY29udGV4dE1lbnVEYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgaGF2aW5nRGF0YU9iamVjdDogYW55ID0ge307XG4gIGlzV2lkZ2V0RmlsdGVyczogYm9vbGVhbjtcbiAgbm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlOiBhbnk7XG4gIGdsb2JhbERlZmF1bHRGaWx0ZXI6IGFueSA9IHt9O1xuICBwYWdlSWQ6IGFueTtcblxuICBrcGlfYnJlYWRjcnVtYnNfY29udGFpbmVyOiBhbnk7XG4gIG9wZXJhdG9yTmFtZTogYW55O1xuXG4gIGRlZmF1bHRWaWV3SWRzOiBhbnkgPSBbXTtcbiAgZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoOiBhbnkgPSBbXTtcbiAgaXNQb3B1cFZpZXc6IGJvb2xlYW47XG4gIG1vZGFsQ29uZmlnczogYW55O1xuICBkZWZhdWx0TWF0Y2hlZEZpbHRlcnMgPSB7IG9wZXJhdGlvbkZpbHRlcjogeyBzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCIgfSB9O1xuICBpc0RlZmF1bHRGaWx0ZXJQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICB2aWV3UGFyYW1zOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgc2VydmljZTogTGFuZGluZ0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGFzZXRTZXJ2aWNlOiBMYW5kaW5nQXBwbGljYXRpb25EYXRzc2V0c0NhbGwsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBBcHBMYW5kaW5nTGF5b3V0TG9jYWxTdG9yYWdlXG5cbiAgICAvLyBwcml2YXRlIHN0b3JhZ2U6IEFwcExvY2FsU3RvcmFnZVxuXG5cbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIC8vIHRoaXMuc2VydmljZS5nZXRsaXN0S3BpQnJvd3NlcigpLnN1YnNjcmliZSh7XG4gICAgLy8gICBuZXh0OiAoKGRhdGE6IGFueSkgPT4ge1xuICAgIC8vICAgICB0aGlzLmtwaV9icmVhZGNydW1ic19jb250YWluZXIgPSBkYXRhO1xuICAgIC8vICAgfSlcbiAgICAvLyB9KVxuXG5cblxuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnBhZ2VJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3BhZ2VJZCddO1xuICAgIHRoaXMuZ2V0UGFkZURhdGFTb3VyY2UoZmFsc2UpO1xuXG4gIH1cblxuICBhc3luYyBnZXRGaWx0ZXJzRm9yVGVtcGxhdGUoZmlsdGVyKSB7XG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVyO1xuICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IGZpbHRlci5zdGFydERhdGU7XG4gICAgdGhpcy5kZWZhdWx0RW5kRGF0ZSA9IGZpbHRlci5lbmREYXRlO1xuICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gZmlsdGVyLnN0YXJ0RGF0ZTtcbiAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydlbmREYXRlJ10gPSBmaWx0ZXIuZW5kRGF0ZTtcblxuICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgcXVlcnlQYXJhbXM6IGZpbHRlci5vcGVyYXRpb25GaWx0ZXIsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICB9O1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcblxuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZyA9IFtdO1xuICAgIGF3YWl0IHRoaXMuZ2V0UGFkZURhdGFTb3VyY2UodHJ1ZSk7XG4gICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG5cbiAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldC5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgdmlldy5kYXRhc2V0SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICBsZXQgZm91bmQgPSAodGhpcy5kYXRhU2V0TW9kYWwgYXMgYW55W10pLmZpbmQoZCA9PiBkLmRhdGFzZXRJZCA9PT0gaWQuZGF0YXNldElkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaWQuZGF0YXNldElkLCBmaWx0ZXIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQYWRlRGF0YVNvdXJjZShjb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuc2VydmljZS5nZXRBcHBQYWdlRGV0YWlsQ29uZmlnKHRoaXMucGFnZUlkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgICB0aGlzLnBhZ2VUaXRsZSA9IGRhdGEucGFnZU5hbWU7XG4gICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBkYXRhO1xuXG4gICAgICAgICAgLy8gdGhpcy5nZXREcmlsbGRvd25EaXNwbGF5QnlVcmxQYXJhbXMoZGF0YS53aWRnZXRzKTtcblxuICAgICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCkubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIGZhbHNlKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudENvbmZpZ1NldCgpO1xuICAgICAgICAgICAgLy8gdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcblxuXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXJyb3InKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG5cbiAgZ2V0Q29tcG9uZW50Q29uZmlnU2V0KCkge1xuICAgIGxldCBkYXRhc2V0ID0gdGhpcy5zZXJ2aWNlLmdldEFwcERhdGFzZXRDb25maWdzKCk7XG4gICAgbGV0IHZpZXdDb21wb25lbnQgPSB0aGlzLnNlcnZpY2UuZ2V0QXBwVmlld0NvbmZpZ3MoKTtcbiAgICB0aGlzLmRlZmF1bHRWaWV3SWRzID0gW107XG4gICAgZm9ya0pvaW4oe1xuICAgICAgZGF0YXNldENvbmZpZzogZGF0YXNldCxcbiAgICAgIHZpZXdDb25maWc6IHZpZXdDb21wb25lbnRcbiAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCh7IGRhdGFzZXRDb25maWcsIHZpZXdDb25maWcgfSkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2UgPSB2aWV3Q29uZmlnO1xuICAgICAgICB0aGlzLmRhdGFTZXRNb2RhbCA9IGRhdGFzZXRDb25maWc7XG4gICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0ID0gW107XG4gICAgICAgIGNvbnN0IHsgcGFnZUlkLCBzdGFydERhdGUsIGVuZERhdGUsIC4uLnBhcmFtcyB9ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAgICAgbGV0IGRlZmF1bHRGaWx0ZXJzID0geyBvcGVyYXRpb25GaWx0ZXI6IHsgc3RhcnREYXRlOiBcIlwiLCBlbmREYXRlOiBcIlwiLCAuLi5wYXJhbXMgfSB9O1xuXG5cbiAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICAgICAgd2lkZ2V0LmZpbHRlcnMuZmlsdGVySXRlbXMuZm9yRWFjaChlbGVtZW50ID0+IHtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZmlsdGVyVHlwZSA9PT0gJ2RhdGUnIHx8IGVsZW1lbnQuZmlsdGVyVHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJkeW5hbWljXCIgJiYgZWxlbWVudC5tb21lbnRGdW5jdGlvbiAhPT0gXCJcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIiAmJiBlbGVtZW50Lm1vbWVudEZvcm1hdCAhPT0gXCJcIikge1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5tb21lbnRGdW5jdGlvbiA9PSBcIm1vbnRoUGlja2VyXCIpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBbY291bnQsIHVuaXRdID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWUuc3BsaXQoJywnKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJlbmREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gKGVuZERhdGUgJiYgZW5kRGF0ZSAhPT0gJycpID8gZW5kRGF0ZSA6IG1vbWVudCgpLnN1YnRyYWN0KHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZW5kT2YodW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuc3VidHJhY3QocGFyc2VJbnQoY291bnQpLCB1bml0KS5lbmRPZih1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSAhPT0gJycpID8gc3RhcnREYXRlIDogbW9tZW50KCkuc3VidHJhY3QocGFyc2VJbnQoY291bnQpLCB1bml0KS5zdGFydE9mKHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5tb21lbnRGdW5jdGlvbiA9PSBcIndlZWtQaWNrZXJcIikge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJlbmREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gKGVuZERhdGUgJiYgZW5kRGF0ZSAhPT0gJycpID8gZW5kRGF0ZSA6IG1vbWVudCgpLmVuZE9mKCd3ZWVrJykuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuZW5kT2YoJ3dlZWsnKS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSAhPT0gJycpID8gc3RhcnREYXRlIDogbW9tZW50KCkuc3RhcnRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN0YXJ0T2YoJ3dlZWsnKS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmVuZERhdGUgPSAoZW5kRGF0ZSAmJiBlbmREYXRlICE9PSAnJykgPyBlbmREYXRlIDogbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwic3RhcnREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLnN0YXJ0RGF0ZSA9IChzdGFydERhdGUgJiYgc3RhcnREYXRlICE9PSAnJykgPyBzdGFydERhdGUgOiBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpW2VsZW1lbnQubW9tZW50RnVuY3Rpb25dKHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJzdGF0aWNcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLnN0YXJ0RGF0ZSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodHlwZW9mIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiICYmIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlICE9PSBcIlwiKSB8fFxuICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKSAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vcGVyYXRvck5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltlbGVtZW50Lm9wZXJhdG9yTmFtZV0gPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogW2VsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyW2VsZW1lbnQuYXBpTmFtZV0gPSBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZS5qb2luKFwiLFwiKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsZXQgZGF0YXNldElkczogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgbGV0IHZpZXdJZHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICAgICAgICAgIHdpZGdldC53aWRnZXROb2RlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlUHJvcGVydGllcy5kaXNwbGF5KSB7XG4gICAgICAgICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Vmlld0lkcy5wdXNoKHZpZXcudmlld0lkKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kT2JqZWN0ID0gdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2g/LmZpbmQoaXRlbSA9PiBpdGVtLnZpZXdJZCA9PT0gdmlldy52aWV3SWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcml2ZWRGaWx0ZXJzID0gZm91bmRPYmplY3QgPyB0aGlzLmdldERyaWxkb3duRmlsdGVyKGZvdW5kT2JqZWN0LCBkZWZhdWx0RmlsdGVycykgOiBkZWZhdWx0RmlsdGVycztcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgICAgXCJmaWx0ZXJzXCI6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVyaXZlZEZpbHRlcnMpKSxcbiAgICAgICAgICAgICAgICAgIFwia2V5VG9QYXNzXCI6IFtdLFxuICAgICAgICAgICAgICAgICAgXCJkcmlsbERvd25UeXBlXCI6IFwibmF0dXJhbFwiLFxuICAgICAgICAgICAgICAgICAgXCJkcmlsbGRvd25Gcm9tXCI6IFwiXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZpZXcudmlld0lkLCBvYmopXG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICBkYXRhc2V0SWQ6IHZpZXcuZGF0YXNldElkLFxuICAgICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgIGZpbHRlcjogZGVyaXZlZEZpbHRlcnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YXNldElkcy5hZGQobm9kZSk7XG4gICAgICAgICAgICAgICAgdmlld0lkcy5hZGQodmlldy52aWV3SWQpO1xuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5wdXNoKHsgdmlld0lkOiB2aWV3LnZpZXdJZCwgdmlld05hbWU6IG5vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsIGRpc3BsYXlLZXk6IHZpZXcua3BpQ29uZmlnLmtleVRvUGFzcyB9KVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdzID0gdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2gubWFwKGl0ZW0gPT4gaXRlbS52aWV3SWQpO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Vmlld0lkcyA9IFsuLi50aGlzLmRlZmF1bHRWaWV3SWRzLCAuLi5uZXdWaWV3cy5maWx0ZXIoaXRlbSA9PiAhdGhpcy5kZWZhdWx0Vmlld0lkcy5pbmNsdWRlcyhpdGVtKSldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZvciBSVERNUyBvcGVyYXRvcm5hbWVcbiAgICAgICAgICAvLyB0aGlzLm9wZXJhdG9yTmFtZSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ29wZXJhdG9yTmFtZSddO1xuICAgICAgICAgIC8vIGlmICh0aGlzLm9wZXJhdG9yTmFtZSkge1xuICAgICAgICAgIC8vICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyWydvcGVyYXRvcl9rZXknXSA9IHRoaXMub3BlcmF0b3JOYW1lO1xuICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LndpZGdldElkLFxuICAgICAgICAgICAgcGFnZUlkOiB3aWRnZXQucGFnZUlkLFxuICAgICAgICAgICAgZmlsdGVyczogZGVmYXVsdEZpbHRlcnMsXG4gICAgICAgICAgICBkYXRhc2V0SWRzOiBkYXRhc2V0SWRzXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LnB1c2gob2JqKTtcbiAgICAgICAgfSk7XG5cblxuXG4gICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHt9O1xuICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICAgICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICBsZXQgZm91bmQgPSAoZGF0YXNldENvbmZpZyBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZC5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGlkLmRhdGFzZXRJZCwgaWQuZmlsdGVyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgIGxldCB1cmxQYXJhbXM6IGFueSA9IGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlclxuICAgICAgICAgIHVybFBhcmFtc1sncGFnZUlkJ10gPSB0aGlzLnBhZ2VJZFxuICAgICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHVybFBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pLCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXJyb3InKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YVNldCgpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0RhdGFzZXQgQ3JlYXRpb24nKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cblxuXG4gIGFzeW5jIGNyZWF0ZURpdkVsZW1lbnRzKGRhdGFzZXRCeUlkLCBjb250ZXh0KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5keW5hbWljQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgY29uc3QgY29udGV4dF9maWx0ZXIgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy5maWx0ZXJzID8gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcuZmlsdGVycy5maWx0ZXJJdGVtcyA6IG51bGw7XG5cbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZvckVhY2goYXN5bmMgZGl2ID0+IHtcbiAgICAgIGNvbnN0IHJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgbGV0IHdfaGVpZ2h0ID0gKGRpdi53aWRnZXRQcm9wZXJ0aWVzLmhlaWdodCA9PSBcIlwiKSA/IFwiaC1hdXRvXCIgOiAnaC1bJyArIGRpdi53aWRnZXRQcm9wZXJ0aWVzLmhlaWdodCArICddJztcbiAgICAgIHJvd0Rpdi5jbGFzc0xpc3QuYWRkKGRpdi53aWRnZXRQcm9wZXJ0aWVzLndpZHRoLCB3X2hlaWdodCk7XG4gICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgY29uc3QgZmlsdGVySXRlbXMgPSAoZGl2LmZpbHRlcnMpID8gZGl2LmZpbHRlcnMuZmlsdGVySXRlbXMgOiBbXTtcbiAgICAgIHRoaXMubG9hZEZpbHRlckNvbXBvbmVudChkaXYsIGZpbHRlckRpdiwgZmlsdGVySXRlbXMsIGNvbnRleHRfZmlsdGVyKTtcbiAgICAgIHJvd0Rpdi5hcHBlbmRDaGlsZChmaWx0ZXJEaXYpO1xuXG4gICAgICBpZiAoZGl2LndpZGdldE5vZGUubGVuZ3RoICE9IDApIHtcbiAgICAgICAgbGV0IG1haW5JdGVtRGl2ID0gcm93RGl2LnF1ZXJ5U2VsZWN0b3IoJy5mbGV4LmZsZXgtd3JhcCcpO1xuXG5cblxuICAgICAgICAvLyBJZiBjb250ZXh0IGlzIHRydWUgYW5kIG1haW5JdGVtRGl2IGV4aXN0cywgY2xlYXIgaXRzIGNvbnRlbnRzXG4gICAgICAgIGlmIChjb250ZXh0ICYmIG1haW5JdGVtRGl2KSB7XG4gICAgICAgICAgbWFpbkl0ZW1EaXYuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDcmVhdGUgbWFpbkl0ZW1EaXYgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICAgIG1haW5JdGVtRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgbWFpbkl0ZW1EaXYuY2xhc3NMaXN0LmFkZChcImZsZXhcIiwgXCJmbGV4LXdyYXBcIik7XG4gICAgICAgICAgcm93RGl2LmFwcGVuZENoaWxkKG1haW5JdGVtRGl2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZFdpZGdldE5vZGVzKGRpdiwgbWFpbkl0ZW1EaXYsIGRhdGFzZXRCeUlkKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHJvd0Rpdik7XG4gICAgfSk7XG4gIH1cbiAgbG9hZFdpZGdldE5vZGVzKGRpdjogYW55LCBtYWluSXRlbURpdjogYW55LCBkYXRhc2V0QnlJZDogYW55KSB7XG4gICAgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQgPSBtYWluSXRlbURpdjtcbiAgICBkaXYud2lkZ2V0Tm9kZS5mb3JFYWNoKGl0ZW0gPT4ge1xuXG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW0sIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgfSk7XG4gIH1cblxuXG4gIGxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW06IGFueSwgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQsIGRhdGFzZXRCeUlkOiBhbnkpIHtcbiAgICBjb25zdCBlbGVtZW50SWQgPSBgaWQtJHtpdGVtLmlkfWA7XG4gICAgY29uc3QgZXhpc3RpbmdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZWxlbWVudElkfWApO1xuICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLmRpc3BsYXkgJiYgIWV4aXN0aW5nRWxlbWVudCkge1xuICAgICAgY29uc3Qgd19oZWlnaHQgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLmhlaWdodCA9PT0gXCJcIiA/IFwiaC1hdXRvXCIgOiBgaC1bJHtpdGVtLm5vZGVQcm9wZXJ0aWVzLmhlaWdodH1dYDtcbiAgICAgIGNvbnN0IGl0ZW1EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGl0ZW1EaXYuaWQgPSBlbGVtZW50SWQ7XG4gICAgICBpdGVtRGl2LmNsYXNzTGlzdC5hZGQoaXRlbS5ub2RlUHJvcGVydGllcy53aWR0aCwgd19oZWlnaHQsICdtYi0yJyk7XG4gICAgICBkZWJ1Z2dlclxuICAgICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlICE9PSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldERpdiA9IHRoaXMuZ2V0V2lkZ2V0VGl0bGVEaXYoaXRlbSk7XG4gICAgICAgIGl0ZW1EaXYuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBpbm5lckRpdi5jbGFzc0xpc3QuYWRkKCdyb3VuZGVkJywgJ2p1c3RpZnktY2VudGVyJywgJ2l0ZW1zLWNlbnRlcicsICdib3JkZXInLCAncC0xJywgJ20tMScsICdmbGV4JywgJ2ZsZXgtcm93Jyk7XG4gICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snZGF0YVNvdXJjZSddID0gZGF0YXNldEJ5SWRbZWxlbWVudC5kYXRhc2V0SWRdO1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snY29udGV4dE1lbnUnXSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlO1xuICAgICAgICBlbGVtZW50Wyd0aXRsZVBhcmFtcyddID0gaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRQYXJhbXMgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29tcF9vYmplY3QgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMsIGl0ZW0uaWQpO1xuICAgICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50KGVsZW1lbnQsIGNvbXBfb2JqZWN0LCBpdGVtRGl2KTtcbiAgICAgIH0pO1xuICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChpdGVtRGl2KTtcbiAgICAgIGlmICghdGhpcy5pc0Rhc2hCb2FyZENvbnRlbnRUeXBlVmlldykge1xuICAgICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdFbGVtZW50KSB7XG4gICAgICBjb25zdCBpdGVtRGl2ID0gZXhpc3RpbmdFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaXRlbURpdi5pbm5lckhUTUwgPSAnJztcbiAgICAgIGRlYnVnZ2VyXG4gICAgICBpZiAoaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZSAhPT0gXCJcIikge1xuICAgICAgICBjb25zdCB3aWRnZXREaXYgPSB0aGlzLmdldFdpZGdldFRpdGxlRGl2KGl0ZW0pO1xuICAgICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKHdpZGdldERpdik7XG4gICAgICB9XG4gICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snZGF0YVNvdXJjZSddID0gZGF0YXNldEJ5SWRbZWxlbWVudC5kYXRhc2V0SWRdO1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snY29udGV4dE1lbnUnXSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlO1xuICAgICAgICBlbGVtZW50Wyd0aXRsZVBhcmFtcyddID0gaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRQYXJhbXMgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29tcF9vYmplY3QgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMsIGl0ZW0uaWQpO1xuICAgICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50KGVsZW1lbnQsIGNvbXBfb2JqZWN0LCBpdGVtRGl2KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMuaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXcpIHtcbiAgICAgICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaW5uZXJEaXYuY2xhc3NMaXN0LmFkZCgncm91bmRlZCcsICdqdXN0aWZ5LWNlbnRlcicsICdpdGVtcy1jZW50ZXInLCAnYm9yZGVyJywgJ3AtMScsICdtLTEnLCAnZmxleCcsICdmbGV4LXJvdycpO1xuICAgICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRXaWRnZXRUaXRsZURpdihpdGVtKSB7XG5cbiAgICBjb25zdCB3aWRnZXREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB3aWRnZXREaXYuY2xhc3NMaXN0LmFkZChcbiAgICAgICdmbGV4JywgJ2l0ZW1zLWNlbnRlcicsICdqdXN0aWZ5LWJldHdlZW4nLCAnZm9udC1ib2xkJywgJ3RleHQtbWQnLFxuICAgICAgJ3RleHQtZ3JheS05MDAnLCAnZGFyazp0ZXh0LXdoaXRlJywgJ2JvcmRlci1iJywgJ3AtMycsICdkYXJrOmJnLWdyYXktODAwJywgJ2JnLWdyYXktMjAwJyxcbiAgICAgICdteC0yJywgJ3JvdW5kZWQtdC1sZycsICdyZWxhdGl2ZSdcbiAgICApO1xuXG4gICAgY29uc3QgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aXRsZURpdi5jbGFzc0xpc3QuYWRkKCdyZWxhdGl2ZScsICdncm91cCcpO1xuXG4gICAgbGV0IHBhcmFtcyA9IFwiXCI7XG4gICAgaWYgKCFpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyAmJiB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaD8ubGVuZ3RoKSB7XG4gICAgICBwYXJhbXMgPSB0aGlzLmdldFRpdGxlUGFyYW1zKGl0ZW0pIHx8IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcyA9IGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0UGFyYW1zIHx8IFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkZ2V0VGl0bGUgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlO1xuICAgIGNvbnN0IHRvb2x0aXBNYXRjaCA9IHdpZGdldFRpdGxlLm1hdGNoKC9cXCR0XFx7KFtcXHNcXFNdKj8pXFx9Lyk7XG5cbiAgICBjb25zdCBkaXNwbGF5VGl0bGUgPSB3aWRnZXRUaXRsZS5yZXBsYWNlKC9cXCR0XFx7W1xcc1xcU10qP1xcfS9nLCAnJykudHJpbSgpO1xuXG4gICAgdGl0bGVEaXYuaW5uZXJUZXh0ID0gZGlzcGxheVRpdGxlICsgcGFyYW1zO1xuXG4gICAgaWYgKHRvb2x0aXBNYXRjaCkge1xuICAgICAgY29uc3QgdG9vbHRpcENvbnRlbnQgPSB0b29sdGlwTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgY29uc3QgdG9vbHRpcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdG9vbHRpcERpdi5jbGFzc0xpc3QuYWRkKFxuICAgICAgICAnYWJzb2x1dGUnLCAnbGVmdC0wJywgJ2JvdHRvbS1mdWxsJywgJ21iLTInLCAndy1tYXgnLCAnbWF4LXcteHMnLFxuICAgICAgICAnYmctYmxhY2snLCAndGV4dC13aGl0ZScsICd0ZXh0LXNtJywgJ3AtMicsICdyb3VuZGVkLWxnJywgJ3NoYWRvdy1sZycsXG4gICAgICAgICdvcGFjaXR5LTAnLCAnZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAnLCAndHJhbnNpdGlvbi1vcGFjaXR5JywgJ2R1cmF0aW9uLTMwMCcsXG4gICAgICAgICd6LTUwJ1xuICAgICAgKTtcbiAgICAgIHRvb2x0aXBEaXYuaW5uZXJIVE1MID0gdG9vbHRpcENvbnRlbnQ7XG5cbiAgICAgIHRpdGxlRGl2LmFwcGVuZENoaWxkKHRvb2x0aXBEaXYpO1xuICAgIH1cblxuICAgIHdpZGdldERpdi5hcHBlbmRDaGlsZCh0aXRsZURpdik7XG5cblxuICAgIGNvbnN0IHNlYXJjaENvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHNlYXJjaENvbnRhaW5lckRpdi5jbGFzc0xpc3QuYWRkKCdmbGV4JywgJ2l0ZW1zLWNlbnRlcicsICdtbC1hdXRvJywgJ3NwYWNlLXgtMicsICdqdXN0aWZ5LWVuZCcpOyAvLyBtbC1hdXRvIHB1c2hlcyBjb250ZW50IHRvIHRoZSByaWdodCBzaWRlXG5cbiAgICAvLyBDaGVjayBmb3Igd2lkZ2V0IGZpbHRlclxuICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLmlzV2lkZ2V0RmlsdGVyKSB7XG4gICAgICBjb25zdCBzZWFyY2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgIHNlYXJjaEJ1dHRvbi5pbm5lclRleHQgPSAnRmlsdGVyJztcbiAgICAgIHNlYXJjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdweC0zJywgJ3B5LTEuNScsICdiZy1ibHVlLTYwMCcsICdtci0yJywgJ3RleHQtd2hpdGUnLCAncm91bmRlZCcsICdob3ZlcjpiZy1ibHVlLTcwMCcpO1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UgPSB7fTtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWyd2aWV3Q29uZmlnJ10gPSBpdGVtO1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ2hhdmluZ0NvbmZpZyddID0gW107XG5cbiAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1dpZGdldEZpbHRlcnMgPSB0cnVlO1xuICAgICAgICBsZXQgZmlsdGVQcm9wZXJ0aWNlID0gW107XG4gICAgICAgIGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgbGV0IGtleV9uYW1lID0gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2VsZW1lbnQuZGF0YXNldElkXVswXTtcbiAgICAgICAgICBPYmplY3Qua2V5cyhrZXlfbmFtZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWx0ZVByb3BlcnRpY2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICBmaWx0ZVByb3BlcnRpY2UucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGVsZW1lbnQsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJmbG9hdFwiLFxuICAgICAgICAgICAgb3BlcmF0b3I6IFwiXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UuaGF2aW5nQ29uZmlnLnB1c2gob2JqKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgc2VhcmNoQ29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHNlYXJjaEJ1dHRvbilcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgaXRlbSBmaWx0ZXJJZFxuICAgIGlmIChpdGVtLmZpbHRlcklkKSB7XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZSA9IHt9O1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ3ZpZXdDb25maWcnXSA9IGl0ZW07XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsnaGF2aW5nQ29uZmlnJ10gPSBbXTtcblxuICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcEZpbHRlckNvbmZpZyhpdGVtLmZpbHRlcklkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgdGhpcy5sb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGl0ZW0sIHdpZGdldERpdiwgZGF0YS5maWx0ZXJJdGVtcywgaXRlbSk7XG4gICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igbm9kZSBmaWx0ZXJzXG4gICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMgJiYgaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycy5sZW5ndGggIT09IDApIHtcbiAgICAgIGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZmlsdGVyRGl2LmNsYXNzTGlzdC5hZGQoJ2ZsZXgnLCAnaXRlbXMtY2VudGVyJyk7XG5cbiAgICAgICAgaWYgKGZpbHRlci5pbnB1dF90eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0Qm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICB0ZXh0Qm94LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgdGV4dEJveC5wbGFjZWhvbGRlciA9IGBFbnRlciAke2ZpbHRlci5sb2NhbF9jb2x1bW59YDtcbiAgICAgICAgICB0ZXh0Qm94LmNsYXNzTGlzdC5hZGQoJ3B4LTInLCAncHktMS41JywgJ3JvdW5kZWQnLCAnYm9yZGVyJywgJ21yLTEnLCAnYm9yZGVyLWdyYXktNTAwJywgJ3RleHQtZ3JheS05MDAnLCAnYmctZ3JheS0yMDAnLCAnZGFyazpiZy1ncmF5LTcwMCcsICdkYXJrOnRleHQtd2hpdGUnKTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgIHNlYXJjaEJ1dHRvbi5pbm5lclRleHQgPSAnU2VhcmNoJztcbiAgICAgICAgICBzZWFyY2hCdXR0b24uY2xhc3NMaXN0LmFkZCgncHgtMycsICdweS0xLjUnLCAnYmctYmx1ZS02MDAnLCAnbXItMicsICd0ZXh0LXdoaXRlJywgJ3JvdW5kZWQnLCAnaG92ZXI6YmctYmx1ZS03MDAnKTtcblxuICAgICAgICAgIGNvbnN0IHNlcGFyZXJvdEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIHNlcGFyZXJvdEJ1dHRvbi5pbm5lckhUTUwgPSAnfCc7XG5cbiAgICAgICAgICBzZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gdGV4dEJveC52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZ2V0UmVhcmNoUmVzdWx0RnJvbUlucHV0Qm94KHNlYXJjaFRlcm0sIGl0ZW0sIGZpbHRlcik7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBmaWx0ZXJEaXYuYXBwZW5kQ2hpbGQodGV4dEJveCk7XG4gICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHNlYXJjaEJ1dHRvbik7XG4gICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHNlcGFyZXJvdEJ1dHRvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzZWFyY2hDb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoZmlsdGVyRGl2KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHdpZGdldERpdi5hcHBlbmRDaGlsZChzZWFyY2hDb250YWluZXJEaXYpO1xuICAgIHJldHVybiB3aWRnZXREaXY7XG4gIH1cblxuXG5cbiAgbG9hZER5bmFtaWNDb21wb25lbnQoZGF0YSwgaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQpOiBhbnkge1xuICAgIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdGhpcy5jb21wb25lbnRDbGFzc01hcFtkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lXTtcbiAgICB0aGlzLkNvbXBSZWZzID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcblxuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5jaGFydERhdGFTb3VyY2UgPSBkYXRhO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5rcGlfbmFtZSA9IFwiXCI7XG4gICAgaWYgKGRhdGEua3BpQ29uZmlnLmNvbXBvbmVudE5hbWUgPT0gXCJHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50XCIgfHwgZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZSA9PSBcIkdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudFwiKSB7XG4gICAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uub1Jvd0NsaWNrLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmdldFJvd0NsaWNrKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLm9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb24uc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0Q29udGV4dENsaWNrKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZSA9PSBcIkdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50XCIpIHtcblxuICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLm9uQ2hhcnRQb2ludENsaWNrLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuXG4gICAgICAgIHRoaXMuZ2V0Um93Q2xpY2sodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluZGV4T2JqLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMucHVzaCh0aGlzLkNvbXBSZWZzKTtcbiAgICBjb25zdCBjc3NDbGFzcyA9IFwidy1mdWxsXCI7XG4gICAgdGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY3NzQ2xhc3MpO1xuICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIGxvYWRGaWx0ZXJDb21wb25lbnQoaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQsIGZpbHRlckl0ZW1zLCBjb250ZXh0X2ZpbHRlcikge1xuICAgIGxldCB1c2VyTmFtZSA9IHRoaXMuc3RvcmFnZS5nZXQoJ3VzZXJfbmFtZScpXG4gICAgbGV0IHNlbGVjdGVkRGF0ZXMgPSB7IHN0YXJ0RGF0ZTogdGhpcy5kZWZhdWx0U3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmRlZmF1bHRFbmREYXRlIH1cbiAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbJ0FwcEFkdmFuY2VIZWFkZXJDb21wb25lbnQnXTtcbiAgICB0aGlzLkNvbXBSZWZzID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyA9IHNlbGVjdGVkRGF0ZXM7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmZpbHRlckl0ZW1zID0gZmlsdGVySXRlbXM7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmNvbnRleHRGaWx0ZXJJdGVtcyA9IGNvbnRleHRfZmlsdGVyO1xuXG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnBhZ2VUaXRsZSA9IHRoaXMucGFnZVRpdGxlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5icmVhZF9jcnVtYnNfY29udGFpbmVyID0gdGhpcy5rcGlfYnJlYWRjcnVtYnNfY29udGFpbmVyO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5pc0VkaXRCdXR0b24gPSAodXNlck5hbWUgJiYgdXNlck5hbWUgPT0gXCJhZG1pblwiKSA/IHRydWUgOiBmYWxzZTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuaXNBZHZhbmNlQnV0dG9uID0gdHJ1ZTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZ2V0RmlsdGVyUGFnZUNvbmZpZy5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZ2V0RmlsdGVyc0ZvclRlbXBsYXRlKHZhbHVlKTtcbiAgICB9KTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZ2V0T3BlcmF0b3JOYW1lLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5sb2FkRGF0YUJ5T3BlcmF0b3IodmFsdWUpO1xuICAgIH0pO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5nZXRDb250ZXh0RmlsdGVyRGF0YS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZ2V0Q29udGV4dEZpbHRlckRhdGEodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaW5kZXhPYmouY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcy5wdXNoKHRoaXMuQ29tcFJlZnMpO1xuICAgIGNvbnN0IGNzc0NsYXNzID0gXCJ3LWZ1bGxcIjtcbiAgICB0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjc3NDbGFzcyk7XG4gICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG4gIGxvYWRXaWRnZXRGaWx0ZXJDb21wb25lbnQoaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQsIGZpbHRlckl0ZW1zLCB2aWV3SWRzKSB7XG4gICAgbGV0IHNlbGVjdGVkRGF0ZXMgPSB7IHN0YXJ0RGF0ZTogdGhpcy5kZWZhdWx0U3RhcnREYXRlLCBlbmREYXRlOiB0aGlzLmRlZmF1bHRFbmREYXRlIH1cbiAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbJ0FkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnQnXTtcbiAgICB0aGlzLkNvbXBSZWZzID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgY29uc3QgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlID0gdGhpcy5Db21wUmVmcy5pbnN0YW5jZTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyA9IHNlbGVjdGVkRGF0ZXM7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmZpbHRlckl0ZW1zID0gZmlsdGVySXRlbXM7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnZpZXdJZHMgPSB2aWV3SWRzO1xuXG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldFdpZGdldEZpbHRlckNvbmZpZy5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZ2V0V2lkZ2V0RmlsdGVyRm9yVGVtcGxhdGUodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgaW5kZXhPYmouY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcy5wdXNoKHRoaXMuQ29tcFJlZnMpO1xuICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIC8vIGZvciBjb250ZXh0IG1lbnUgZnVuY3Rpb25cbiAgZ2V0Q29udGV4dENsaWNrKGV2ZW50KSB7XG4gICAgY29uc3Qgc3RhdGVEYXRhID0gQXJyYXkuZnJvbSh0aGlzLnN0YXRlRGF0YVNvdXJjZS5rZXlzKCkpO1xuICAgIGNvbnN0IGN1cnJlbnRWaWV3SW5kZXggPSBzdGF0ZURhdGEuaW5kZXhPZihldmVudC52aWV3SWQpO1xuICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRWaWV3SW5kZXggKyAxOyBpIDwgc3RhdGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWxldGVkVmlld0lkcy5wdXNoKHN0YXRlRGF0YVtpXSlcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKChub2RlOiBhbnksIG5vZGVJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIGV2ZW50LmRyaWxsZG93blRvKSkge1xuICAgICAgICAgIGxldCB2aWV3ID0gZWxlbWVudC53aWRnZXROb2RlW25vZGVJbmRleF07XG4gICAgICAgICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgICAgICAgbGV0IGNoYXRBcGlDYWxsID0gW107XG5cbiAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50LCB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoZXZlbnQuZHJpbGxkb3duRnJvbSkpO1xuICAgICAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZGVsZXRlZFZpZXdJZHMpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC53aWRnZXROb2RlLmZvckVhY2godmlld1ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlld0lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh2aWV3SWQudmlld0lkID09IGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnNvbWUoaXRlbSA9PiBpdGVtLnZpZXdJZCA9PT0gdmlld0lkLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90IGV4aXN0cywgcHVzaCB0aGUgbmV3IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0lkOiB2aWV3SWQudmlld0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6IG5vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5S2V5OiB2aWV3SWQua3BpQ29uZmlnLmtleVRvUGFzc1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0YSA9IHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChlbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5kZWxldGUoZW50cnkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmlld1ZhbHVlLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXdWYWx1ZS5pZH1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VG9IaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDsgLy8gQ2FzdCB0byBIVE1MRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UuZmlsdGVyKGUgPT4gZS5kaXNwbGF5S2V5ICE9PSBldmVudC5rZXlUb1Bhc3MpO1xuICAgICAgICAgICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZmlsdGVyc1wiOiBhcHBsaWVkRmlsdGVycyxcbiAgICAgICAgICAgICAgICBcImtleVRvUGFzc1wiOiB0aGlzLnVwZGF0ZU9wZXJhdG9yRGF0YShldmVudC5rZXlUb1Bhc3MsIGV2ZW50LmRhdGEpLFxuICAgICAgICAgICAgICAgIFwiZHJpbGxEb3duVHlwZVwiOiBldmVudC5kcmlsbERvd25UeXBlLFxuICAgICAgICAgICAgICAgIFwiZHJpbGxkb3duRnJvbVwiOiBldmVudC5kcmlsbGRvd25Gcm9tXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZhbFsndmlld0lkJ10sIG9iailcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgICAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG5cblxuICAgICAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBhcHBsaWVkRmlsdGVyc1snb3BlcmF0aW9uRmlsdGVyJ10sXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vZGUubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICAvLyBmb3Igcm93IGNsaWNrIGZ1bmN0aW9uXG4gIGFzeW5jIGdldFJvd0NsaWNrKGV2ZW50KSB7XG5cbiAgICBjb25zdCBzdGF0ZURhdGEgPSBBcnJheS5mcm9tKHRoaXMuc3RhdGVEYXRhU291cmNlLmtleXMoKSk7XG4gICAgY29uc3QgY3VycmVudFZpZXdJbmRleCA9IHN0YXRlRGF0YS5pbmRleE9mKGV2ZW50LnZpZXdJZCk7XG4gICAgY29uc3QgZGVsZXRlZFZpZXdJZHMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSBjdXJyZW50Vmlld0luZGV4ICsgMTsgaSA8IHN0YXRlRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gaWYgKCF0aGlzLmRlZmF1bHRWaWV3SWRzLmluY2x1ZGVzKHN0YXRlRGF0YVtpXSkpIHtcbiAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goc3RhdGVEYXRhW2ldKTtcbiAgICAgIC8vIH1cbiAgICB9XG4gICAgY29uc3QgaG91cmx5Tm9kZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlLmZpbmQobm9kZSA9PiB0aGlzLmdldEhvdXJseURhdGEobm9kZSkpKVxuICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuICAgIGlmIChob3VybHlOb2RlICYmIGV2ZW50LmtleVRvUGFzcy5pbmNsdWRlcyhcInJlY29yZERhdGVcIikpIHtcbiAgICAgIHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2tGb3JIb3VybHlDaGFydChldmVudCwgaG91cmx5Tm9kZSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZpZXdOb2RlID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1xuICAgICAgLm1hcCh3aWRnZXQgPT4gd2lkZ2V0LndpZGdldE5vZGUuZmluZChub2RlID0+IHRoaXMuZ2V0RWxlbWVudE9mQ3VycmVudFZpZXcobm9kZSwgZXZlbnQudmlld0lkKSkpXG4gICAgICAuZmluZChub2RlID0+IG5vZGUpO1xuXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXA7XG4gICAgaWYgKGN1cnJlbnRWaWV3Tm9kZSkge1xuICAgICAgY29uc3QgZHJpbGRvd25zRm9yQ3VycmVudFZpZXcgPSBbXTtcbiAgICAgIGNvbnN0IGRyaWxkb3duc0ZvckN1cnJlbnRQYWdlID0gW107XG4gICAgICBjdXJyZW50Vmlld05vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goYXN5bmMgZWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5lbmFibGVDbGlja0V2ZW50KSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zPy5ldmVudFR5cGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuZXZlbnRUeXBlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBsZXQgZXZlbnRUeXBlID0gZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuZXZlbnRUeXBlO1xuICAgICAgICAgICAgbGV0IGFzc29jaWF0ZWRWaWV3cyA9IGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRWaWV3cztcbiAgICAgICAgICAgIGxldCBhc3NvY2lhdGVkUGFnZSA9IChlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5hc3NvY2lhdGVkUGFnZSkgPyBlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5hc3NvY2lhdGVkUGFnZSA6IFwiXCI7XG4gICAgICAgICAgICBsZXQgY2xpY2tFdmVudE9wdGlvbnMgPSBlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucztcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gJ29wdGlvbmFsRHJpbGxEb3duJykge1xuICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlZFZpZXdzICYmIGFzc29jaWF0ZWRWaWV3cy5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHZpZXdGb3JEcmlsbERvd24gb2YgYXNzb2NpYXRlZFZpZXdzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJDb25kaXRpb24gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHZpZXdGb3JEcmlsbERvd25bJ2ZpbHRlckNvbmRpdGlvbiddKTtcbiAgICAgICAgICAgICAgICAgIGxldCBtYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGZpbHRlckNvbmRpdGlvbi5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy5nZXQoa2V5KSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0ZvckRyaWxsRG93blsndmlld0lkJ10uZm9yRWFjaCh2aWV3Rm9ySWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3LnB1c2godmlld0ZvcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gJ2RyaWxsZG93bicgfHwgZXZlbnRUeXBlID09ICdwb3B1cCcpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgYXNzb2NpYXRlZFZpZXdzKSB7XG4gICAgICAgICAgICAgICAgZHJpbGRvd25zRm9yQ3VycmVudFZpZXcucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09ICduYXZpZ2F0ZVRvUGFnZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VEZXRhaWxDb25maWcoYXNzb2NpYXRlZFBhZ2UpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IHsgcGFnZUlkLCAuLi5wYXJhbXMgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XG4gICAgICAgICAgICAgICAgICBsZXQgYXNzb2NpYXRlZFBhcmFtc1RlbXBsYXRlID0gY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFBhcmFtcztcbiAgICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChldmVudC52aWV3SWQpKTtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmtleVRvUGFzcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNbZWxlbWVudF0gPSBldmVudC5kYXRhW2VsZW1lbnRdO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBwYXJhbXNbJ3BhZ2VJZCddID0gYXNzb2NpYXRlZFBhZ2U7XG4gICAgICAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlZFBhcmFtc1RlbXBsYXRlICE9PSBcIlwiKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmFsQXNzb2NpYXRlZFBhcmFtczogYW55ID0gdGhpcy5yZXBsYWNlQXNzb2NpYXRlZFBhcmFtcyhhc3NvY2lhdGVkUGFyYW1zVGVtcGxhdGUsIHBhcmFtcywgYXBwbGllZEZpbHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtczogYW55ID0ge307XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsQXNzb2NpYXRlZFBhcmFtcy5zcGxpdChcIiZcIikuZm9yRWFjaChwYWlyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1sncGFnZUlkJ10gPSBwYXJhbXNbJ3BhZ2VJZCddO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW2RhdGEucGFnZVVybF0sIHsgcXVlcnlQYXJhbXMgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihmdWxsVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW2RhdGEucGFnZVVybF0sIHsgcXVlcnlQYXJhbXM6IHBhcmFtcyB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihmdWxsVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG5cblxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gJ3NhbWVWaWV3RHJpbGxkb3duJykge1xuICAgICAgICAgICAgICBkZWJ1Z2dlclxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmIChkcmlsZG93bnNGb3JDdXJyZW50Vmlldy5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICBmb3IgKGxldCB2aWV3SWRGb3JOZXh0IG9mIGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFZpZXdOb2RlID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1xuICAgICAgICAgICAgICAgICAgLm1hcCh3aWRnZXQgPT4gd2lkZ2V0LndpZGdldE5vZGUuZmluZChub2RlID0+IHRoaXMuZ2V0RWxlbWVudE9mQ3VycmVudFZpZXcobm9kZSwgdmlld0lkRm9yTmV4dCkpKVxuICAgICAgICAgICAgICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuICAgICAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5pc1BvcHVwVmlldyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldE1vZGFsVmlld0J5Um93Q0xpY2soZXZlbnQsIG5leHRWaWV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2soZXZlbnQsIG5leHRWaWV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGRlbGV0ZWRWaWV3SWRzKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC53aWRnZXROb2RlLmZvckVhY2godmlld1ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3SWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmlld0lkLnZpZXdJZCA9PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnNvbWUoaXRlbSA9PiBpdGVtLnZpZXdJZCA9PT0gdmlld0lkLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SWQ6IHZpZXdJZC52aWV3SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiBjdXJyZW50Vmlld05vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IHZpZXdJZC5rcGlDb25maWcua2V5VG9QYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRhID0gdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5kZWxldGUoZW50cnkpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZS5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXdWYWx1ZS5pZH1gO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0hpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50OyAvLyBDYXN0IHRvIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0Vmlld0luZGV4ID0gc3RhdGVEYXRhLmluZGV4T2YoZXZlbnQudmlld0lkKSArIDE7XG4gICAgICAgICAgICBjb25zdCBuZXh0VmlldyA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgICAgICAgICAgLm1hcCh3aWRnZXQgPT4gd2lkZ2V0LndpZGdldE5vZGVbbmV4dFZpZXdJbmRleF0pXG4gICAgICAgICAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0Vmlldykge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0J5Um93Q0xpY2soZXZlbnQsIG5leHRWaWV3KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cblxuICAgICAgLy8gZm9yIHZpZXcgZ3JvdXBcblxuXG5cbiAgICB9XG4gIH1cblxuICBnZXRWaWV3QnlSb3dDTGlja0ZvckhvdXJseUNoYXJ0KGV2ZW50LCBub2RlKSB7XG5cbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICBjb25zdCBkZWxldGVkVmlld0lkcyA9IFtdO1xuICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50LCB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoaXRlbS52aWV3SWQpKTtcbiAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpdGVtLmRhdGFzZXRJZCk7XG4gICAgICBkZWxldGVkVmlld0lkcy5wdXNoKGl0ZW0udmlld0lkKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpdGVtLmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIC8vIG5vZGUubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUobm9kZSwgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICB9LCAyMDApO1xuXG4gICAgfSk7XG4gICAgLy8gfVxuICB9XG5cbiAgYXN5bmMgZ2V0TW9kYWxWaWV3QnlSb3dDTGljayhldmVudCwgdmlldykge1xuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChldmVudC52aWV3SWQpKTtcbiAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGNvbnRlbnRWaWV3ID0+IHtcbiAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGNvbnRlbnRWaWV3LmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChhcGlDYWxscylcblxuXG4gICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IGV2ZW50LmtleVRvUGFzcyk7XG4gICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3Zm9yRGF0YVNldCA9PiB7XG5cbiAgICAgIGxldCBvYmogPSB7XG4gICAgICAgIFwiZmlsdGVyc1wiOiBhcHBsaWVkRmlsdGVycyxcbiAgICAgICAgXCJrZXlUb1Bhc3NcIjogdGhpcy51cGRhdGVPcGVyYXRvckRhdGEoZXZlbnQua2V5VG9QYXNzLCBldmVudC5kYXRhKSxcbiAgICAgICAgXCJkcmlsbERvd25UeXBlXCI6IGV2ZW50LmRyaWxsRG93blR5cGUsXG4gICAgICAgIFwiZHJpbGxkb3duRnJvbVwiOiBldmVudC5kcmlsbGRvd25Gcm9tXG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5zZXQodmlld2ZvckRhdGFTZXRbJ3ZpZXdJZCddLCBvYmopXG4gICAgfSk7XG4gICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgdGhpcy5tb2RhbENvbmZpZ3MgPSB7XG4gICAgICB2aWV3OiB2aWV3LFxuICAgICAgZGF0YXNvdXJjZTogdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0XG4gICAgfVxuICAgIC8vIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc1BvcHVwVmlldyA9IHRydWU7XG4gICAgfSwgMjAwKTtcbiAgfVxuICBhc3luYyBnZXRWaWV3QnlSb3dDTGljayhldmVudCwgdmlldykge1xuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgIGxldCBjaGF0QXBpQ2FsbCA9IFtdO1xuICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChldmVudC52aWV3SWQpKTtcblxuICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICAvLyBsZXQgcXVlcnlQYXJhbXMgPSB0aGlzLmdldEZpbHRlcnNGb3JRdWVyeVBhcmFtcyhhcHBsaWVkRmlsdGVycywgZm91bmQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycywgY29udGVudFZpZXcpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuXG4gICAgICB9XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpXG5cblxuICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UuZmlsdGVyKGUgPT4gZS5kaXNwbGF5S2V5ICE9PSBldmVudC5rZXlUb1Bhc3MpO1xuICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlld2ZvckRhdGFTZXQgPT4ge1xuXG4gICAgICBsZXQgb2JqID0ge1xuICAgICAgICBcImZpbHRlcnNcIjogYXBwbGllZEZpbHRlcnMsXG4gICAgICAgIFwia2V5VG9QYXNzXCI6IHRoaXMudXBkYXRlT3BlcmF0b3JEYXRhKGV2ZW50LmtleVRvUGFzcywgZXZlbnQuZGF0YSksXG4gICAgICAgIFwiZHJpbGxEb3duVHlwZVwiOiBldmVudC5kcmlsbERvd25UeXBlLFxuICAgICAgICBcImRyaWxsZG93bkZyb21cIjogZXZlbnQuZHJpbGxkb3duRnJvbVxuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2Uuc2V0KHZpZXdmb3JEYXRhU2V0Wyd2aWV3SWQnXSwgb2JqKVxuICAgIH0pO1xuICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IHRydWU7XG4gICAgdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcblxuICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgcXVlcnlQYXJhbXM6IGFwcGxpZWRGaWx0ZXJzWydvcGVyYXRpb25GaWx0ZXInXSxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgIH07XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuc3RhdGVEYXRhU291cmNlKTtcblxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcmVwbGFjZUFzc29jaWF0ZWRQYXJhbXModGVtcGxhdGU6IHN0cmluZywgcGFyYW1zOiBhbnksIGFwcGxpZWRGaWx0ZXJzOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXCQoRnxQKVxceyhbXn1dKylcXH0vZywgKG1hdGNoLCB0eXBlLCBrZXkpID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBcIkZcIikge1xuICAgICAgICByZXR1cm4gYXBwbGllZEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyPy5ba2V5XSA/PyBcIlwiO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIlBcIikge1xuICAgICAgICByZXR1cm4gcGFyYW1zPy5ba2V5XSA/PyBcIlwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9Cb3R0b20oY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnIH0pO1xuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGZpbmRXaWRnZXRCeUlkKGNvbmZpZ3M6IGFueVtdLCBpZDogc3RyaW5nKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG4gICAgICBpZiAoY29uZmlnLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy53aWRnZXROb2RlICYmIGNvbmZpZy53aWRnZXROb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKGNvbmZpZy53aWRnZXROb2RlLCBpZCk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdXBkYXRlT3BlcmF0b3JEYXRhKGtleV9uYW1lOiBzdHJpbmdbXSwgdmFsdWVfZGF0YTogYW55KTogYW55IHtcbiAgICBsZXQgb3BlcmF0b3IgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlfbmFtZSkge1xuICAgICAgbGV0IG9iajogYW55ID0ge307XG4gICAgICBvYmpba2V5XSA9IHZhbHVlX2RhdGFba2V5XTtcbiAgICAgIG9wZXJhdG9yLnB1c2gob2JqKVxuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0b3I7XG4gIH1cblxuXG4gIGdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIHZpZXdJZCkge1xuICAgIGNvbnN0IG1hdGNoZWRPYmplY3QgPSBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5maW5kKG9iamVjdCA9PiBvYmplY3Qudmlld0lkID09PSB2aWV3SWQpO1xuICAgIHJldHVybiBtYXRjaGVkT2JqZWN0ID8gbm9kZSA6IG51bGw7XG4gIH1cbiAgZ2V0SG91cmx5RGF0YShub2RlKSB7XG4gICAgY29uc3QgbWF0Y2hlZE9iamVjdCA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZpbmQob2JqZWN0ID0+IG9iamVjdC5rcGlDb25maWcuZm9ybWF0ZSA9PT0gJ2hvdXJseScpO1xuICAgIHJldHVybiBtYXRjaGVkT2JqZWN0ID8gbm9kZSA6IG51bGw7XG4gIH1cblxuICBnZXRTZXRPcGVyYXRvckZpbHRlcihvYmplY3REYXRhLCBwcmV2aW91c1ZpZXdTdGF0ZXMpIHtcblxuICAgIGNvbnN0IHsgZGF0YSwga2V5VG9QYXNzIH0gPSBvYmplY3REYXRhO1xuICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByZXZpb3VzVmlld1N0YXRlcy5maWx0ZXJzLm9wZXJhdGlvbkZpbHRlcikpO1xuXG4gICAga2V5VG9QYXNzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChrZXkgaW4gZGF0YSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCAnJyk7XG4gICAgICAgIGlmIChub3JtYWxpemVkS2V5ID09PSBcInJlY29yZGRhdGVcIiAmJiBcInN0YXJ0RGF0ZVwiIGluIGFwcGxpZWRGaWx0ZXIgJiYgXCJlbmREYXRlXCIgaW4gYXBwbGllZEZpbHRlcikge1xuICAgICAgICAgIGFwcGxpZWRGaWx0ZXIuc3RhcnREYXRlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGFwcGxpZWRGaWx0ZXIuZW5kRGF0ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBsaWVkRmlsdGVyW2tleV0gPSBkYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBkZWZhdWx0b3BlcmF0aW9uRmlsdGVyID0gdGhpcy5nbG9iYWxEZWZhdWx0RmlsdGVyLm9wZXJhdGlvbkZpbHRlcjtcbiAgICBpZiAoZGVmYXVsdG9wZXJhdGlvbkZpbHRlcikge1xuICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdG9wZXJhdGlvbkZpbHRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoIWFwcGxpZWRGaWx0ZXIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGFwcGxpZWRGaWx0ZXJba2V5XSA9IGRlZmF1bHRvcGVyYXRpb25GaWx0ZXJba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlcmF0aW9uRmlsdGVyID0ge307XG4gICAgb3BlcmF0aW9uRmlsdGVyWydvcGVyYXRpb25GaWx0ZXInXSA9IGFwcGxpZWRGaWx0ZXI7XG4gICAgcmV0dXJuIG9wZXJhdGlvbkZpbHRlcjtcbiAgfVxuXG5cbiAgZ2V0UmVhcmNoUmVzdWx0RnJvbUlucHV0Qm94KGlucHV0VmFsdWUsIHZpZXdDb25maWcsIGZpbHRlck9iamVjdCkge1xuICAgIGxldCB2aWV3ID0gdmlld0NvbmZpZztcbiAgICBsZXQgZXZlbnROb2RlID0geyBkYXRhOiB7fSwga2V5VG9QYXNzOiBbXSB9XG4gICAgZXZlbnROb2RlLmRhdGFbZmlsdGVyT2JqZWN0LnNlcnZlcl9jb2x1bW5dID0gaW5wdXRWYWx1ZTtcbiAgICBldmVudE5vZGVbJ2tleVRvUGFzcyddID0gW2ZpbHRlck9iamVjdC5zZXJ2ZXJfY29sdW1uXTtcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcblxuICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudE5vZGUsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChjb250ZW50Vmlldy52aWV3SWQpKTtcbiAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGNvbnRlbnRWaWV3LmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2aWV3Q29uZmlnLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlld0NvbmZpZy5pZH1gO1xuICAgIGNvbnN0IGVsZW1lbnRUb0hpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50OyAvLyBDYXN0IHRvIEhUTUxFbGVtZW50XG4gICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgIGVsZW1lbnRUb0hpZGUucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG5cbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UuZmlsdGVyKGUgPT4gZS5kaXNwbGF5S2V5ICE9PSB2aWV3Q29uZmlnLmtleVRvUGFzcyk7XG5cbiAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IHRydWU7XG4gICAgICAvLyB2aWV3Lm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlldy5pZH1gO1xuICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKHZpZXcsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgfSwgMjAwKTtcbiAgICAgIGxldCBwYXJhbXMgPSB7fTtcbiAgICAgIHBhcmFtc1tmaWx0ZXJPYmplY3Quc2VydmVyX2NvbHVtbl0gPSBpbnB1dFZhbHVlO1xuICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgfTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgc3VibWl0RmlsdGVyKCkge1xuICAgIGxldCB2aWV3ID0gdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2Uudmlld0NvbmZpZztcbiAgICAvLyBsZXQgY2FsX3ZhbHVlID0gKHBhcnNlRmxvYXQoc2VhcmNoVGVybSkgLyAxMDApXG4gICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgdGhpcy5oYXZpbmdEYXRhT2JqZWN0ID0gdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UuaGF2aW5nQ29uZmlnLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS52YWx1ZSAhPT0gXCJcIik7XG4gICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoY29udGVudFZpZXcudmlld0lkKTtcbiAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGNvbnRlbnRWaWV3LmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMuZmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuXG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS52aWV3Q29uZmlnLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS52aWV3Q29uZmlnLmlkfWA7XG4gICAgICBjb25zdCBlbGVtZW50VG9IaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDsgLy8gQ2FzdCB0byBIVE1MRWxlbWVudFxuICAgICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLnZpZXdDb25maWcua2V5VG9QYXNzKTtcbiAgICAgIHRoaXMuaXNXaWRnZXRGaWx0ZXJzID0gZmFsc2U7XG4gICAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgICAgLy8gdmlldy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgLy8gY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICAgIC8vIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSk7XG4gIH1cblxuXG4gIGdldFdpZGdldEZpbHRlckZvclRlbXBsYXRlKHZhbHVlKSB7XG5cbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICBjb25zdCBkZWxldGVkVmlld0lkcyA9IFtdO1xuICAgIHZhbHVlLnZpZXdOb2Rlcy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCB3aWRnZXRGaWx0ZXIgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoaXRlbS52aWV3SWQpO1xuICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gd2lkZ2V0RmlsdGVyLmZpbHRlcnM7XG4gICAgICBsZXQgZm91bmQgPSAodGhpcy5kYXRhU2V0TW9kYWwgYXMgYW55W10pLmZpbmQoZCA9PiBkLmRhdGFzZXRJZCA9PT0gaXRlbS5kYXRhc2V0SWQpO1xuICAgICAgZGVsZXRlZFZpZXdJZHMucHVzaChpdGVtLnZpZXdJZCk7XG4gICAgICBjb25zdCBoYXZpbmcgPSBPYmplY3QuZW50cmllcyh2YWx1ZS5vcGVyYXRpb25GaWx0ZXIpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICBjb2x1bW5OYW1lOiBrZXksXG4gICAgICAgIGRhdGFUeXBlOiBcImZsb2F0XCIsXG4gICAgICAgIG9wZXJhdG9yOiBcImd0ZVwiLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH0pKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGZvdW5kLmNvbmZpZy5xdWVyeUNvbmZpZ1snaGF2aW5ncyddID0gaGF2aW5nO1xuICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpdGVtLmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIC8vIHZhbHVlLnZpZXdOb2Rlcy5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2YWx1ZS52aWV3Tm9kZXMsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgfSwgMjAwKTtcblxuICAgIH0pO1xuICAgIC8vIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWREYXRhQnlPcGVyYXRvcihvcE5hbWUpIHtcbiAgICBsZXQgZmlsdGVyID0geyBvcGVyYXRpb25GaWx0ZXI6IHsgc3RhcnREYXRlOiBcIlwiLCBlbmREYXRlOiBcIlwiLCBvcGVyYXRvcl9rZXk6IFwiXCIgfSB9O1xuICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gdGhpcy5kZWZhdWx0U3RhcnREYXRlO1xuICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ2VuZERhdGUnXSA9IHRoaXMuZGVmYXVsdEVuZERhdGU7XG4gICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclsnb3BlcmF0b3Jfa2V5J10gPSBvcE5hbWU7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuXG4gICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICBcIm9wZXJhdG9yTmFtZVwiOiBvcE5hbWVcbiAgICAgIH0sXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICB9O1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcblxuICAgIC8vIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnID0gW107XG4gICAgYXdhaXQgdGhpcy5nZXRQYWRlRGF0YVNvdXJjZSh0cnVlKTtcbiAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB7fTtcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcblxuICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LmZvckVhY2godmlldyA9PiB7XG4gICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZC5kYXRhc2V0SWQpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZC5kYXRhc2V0SWQsIGZpbHRlcikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgfVxuXG4gIGFzeW5jIGdldENvbnRleHRGaWx0ZXJEYXRhKHZhbHVlKSB7XG5cbiAgICBsZXQgZmlsdGVyID0geyBvcGVyYXRpb25GaWx0ZXI6IHsgc3RhcnREYXRlOiBcIlwiLCBlbmREYXRlOiBcIlwiIH0gfTtcbiAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydzdGFydERhdGUnXSA9IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZTtcbiAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydlbmREYXRlJ10gPSB0aGlzLmRlZmF1bHRFbmREYXRlO1xuICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbdmFsdWUub3BlcmF0b3JOYW1lXSA9IHRoaXMucGFyc2VJbnB1dCh2YWx1ZS5kZWZhdWx0RmlsdGVyVmFsdWUpO1xuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICBsZXQgb2JqID0ge307XG4gICAgb2JqW3ZhbHVlLm9wZXJhdG9yTmFtZV0gPSB2YWx1ZS5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICBxdWVyeVBhcmFtczogb2JqLFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgfTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbik7XG5cbiAgICAvLyB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZyA9IFtdO1xuICAgIGF3YWl0IHRoaXMuZ2V0UGFkZURhdGFTb3VyY2UodHJ1ZSk7XG4gICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG5cbiAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldC5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgdmlldy5kYXRhc2V0SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICBsZXQgZm91bmQgPSAodGhpcy5kYXRhU2V0TW9kYWwgYXMgYW55W10pLmZpbmQoZCA9PiBkLmRhdGFzZXRJZCA9PT0gaWQuZGF0YXNldElkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaWQuZGF0YXNldElkLCBmaWx0ZXIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5nbG9iYWxEZWZhdWx0RmlsdGVyID0gZmlsdGVyO1xuICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICB0aGlzLmNyZWF0ZURpdkVsZW1lbnRzKHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCwgdHJ1ZSk7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2VJbnB1dChpbnB1dCkge1xuICAgIGlucHV0ID0gaW5wdXQudHJpbSgpO1xuXG4gICAgaWYgKGlucHV0LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgIHJldHVybiBpbnB1dC5zcGxpdCgnLCcpLm1hcChpdGVtID0+IGl0ZW0udHJpbSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0RHJpbGxkb3duRGlzcGxheUJ5VXJsUGFyYW1zKGFsbF92aWV3cykge1xuICAgIHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoID0gW107XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaCA9IChwYXJhbXNbJ3ZpZXdzJ10gJiYgcGFyYW1zWyd2aWV3cyddICE9PSBcIlwiKSA/IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtc1sndmlld3MnXSkpIDogW107XG4gICAgYWxsX3ZpZXdzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBmb3IgKGxldCBlbnRyeSBvZiBlbGVtZW50LndpZGdldE5vZGUpIHtcbiAgICAgICAgbGV0IHNob3VsZERpc3BsYXkgPSBmYWxzZTtcbiAgICAgICAgZW50cnkuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmlldyA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaC5maW5kKHZhbCA9PiB2YWwudmlld0lkID09PSB2aWV3LnZpZXdJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmRPYmplY3QpIHtcbiAgICAgICAgICAgICAgc2hvdWxkRGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNob3VsZERpc3BsYXkpIHtcbiAgICAgICAgICBlbnRyeS5ub2RlUHJvcGVydGllcy5kaXNwbGF5ID0gdHJ1ZTtcblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cblxuICB9XG5cblxuICBnZXRGaWx0ZXJzRm9yUXVlcnlQYXJhbXMob3BlcmF0b3JzLCBmaWx0ZXJzLCB2aWV3UGFyYW1zKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uRmlsdGVyID0gb3BlcmF0b3JzLm9wZXJhdGlvbkZpbHRlciB8fCB7fTtcbiAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcblxuICAgIGxldCBjdXJyZW50Vmlld3M6IGFueVtdID0gW107XG4gICAgaWYgKGN1cnJlbnRQYXJhbXNbJ3ZpZXdzJ10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGN1cnJlbnRWaWV3cyA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRQYXJhbXNbJ3ZpZXdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgdmlld3MgcGFyYW1cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyRGF0YTogYW55ID0geyB2aWV3SWQ6IHZpZXdQYXJhbXMudmlld0lkIH07XG5cbiAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IGxvY2FsS2V5ID0gZmlsdGVyLmxvY2FsQ29sdW1uO1xuICAgICAgY29uc3Qgc2VydmVyS2V5ID0gZmlsdGVyLnNlcnZlckNvbHVtbjtcbiAgICAgIGxldCB2YWx1ZSA9IG9wZXJhdGlvbkZpbHRlcltsb2NhbEtleV07XG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgICAgIGZpbHRlckRhdGFbc2VydmVyS2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IGN1cnJlbnRWaWV3cy5maW5kSW5kZXgodiA9PiB2LnZpZXdJZCA9PT0gdmlld1BhcmFtcy52aWV3SWQpO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICBjdXJyZW50Vmlld3NbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXJEYXRhO1xuICAgICAgY3VycmVudFZpZXdzID0gY3VycmVudFZpZXdzLnNsaWNlKDAsIGV4aXN0aW5nSW5kZXggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFZpZXdzLnB1c2goZmlsdGVyRGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5jb2RlZFZpZXdzID0gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWaWV3cykpO1xuXG4gICAgY29uc3QgbWVyZ2VkUGFyYW1zID0ge1xuICAgICAgLi4uY3VycmVudFBhcmFtcyxcbiAgICAgIHZpZXdzOiBlbmNvZGVkVmlld3NcbiAgICB9O1xuXG4gICAgY29uc3QgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiBtZXJnZWRQYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgfTtcblxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcbiAgfVxuXG4gIGdldERyaWxkb3duRmlsdGVyKGRyaWxkb3duRmlsdGVyLCBkZWZhdWx0RmlsdGVyKSB7XG4gICAgY29uc3QgZXhwZWN0ZWREYXRlRmllbGRzID0gWydyZWNvcmREYXRlJywgJ3JlY29yZF9kYXRlJywgJ2V2ZW50RGF0ZScsICdldmVudF9kYXRlJ107XG4gICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWZhdWx0RmlsdGVyKSk7XG4gICAgY29uc3QgeyB2aWV3SWQsIC4uLmZpbHRlcmVkRHJpbGxkb3duIH0gPSBkcmlsZG93bkZpbHRlcjtcbiAgICBsZXQgZGF0ZVZhbHVlID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBleHBlY3RlZERhdGVGaWVsZHMpIHtcbiAgICAgIGlmIChmaWx0ZXJlZERyaWxsZG93bltrZXldKSB7XG4gICAgICAgIGRhdGVWYWx1ZSA9IGZpbHRlcmVkRHJpbGxkb3duW2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0ZVZhbHVlKSB7XG4gICAgICByZXN1bHQub3BlcmF0aW9uRmlsdGVyLnN0YXJ0RGF0ZSA9IGRhdGVWYWx1ZTtcbiAgICAgIHJlc3VsdC5vcGVyYXRpb25GaWx0ZXIuZW5kRGF0ZSA9IGRhdGVWYWx1ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmlsdGVyZWREcmlsbGRvd24pIHtcbiAgICAgIGlmICghZXhwZWN0ZWREYXRlRmllbGRzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbkZpbHRlcltrZXldID0gZmlsdGVyZWREcmlsbGRvd25ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuXG4gIH1cblxuXG4gIGdldFRpdGxlUGFyYW1zKGl0ZW1zKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gICAgaXRlbXMuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCBmb3VuZE9iamVjdCA9IHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoLmZpbmQodmFsID0+IHZhbC52aWV3SWQgPT09IGVsZW1lbnQudmlld0lkKTtcbiAgICAgIGlmIChmb3VuZE9iamVjdCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyhmb3VuZE9iamVjdClcbiAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSAndmlld0lkJylcbiAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQga2V5IHRvIFRpdGxlIENhc2Ugd2l0aCBzcGFjZXNcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEtleSA9IGtleVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXy9nLCAnICcpICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIHVuZGVyc2NvcmVzIHdpdGggc3BhY2VzXG4gICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJcXHcvZywgY2hhciA9PiBjaGFyLnRvVXBwZXJDYXNlKCkpOyAvLyBjYXBpdGFsaXplIGVhY2ggd29yZFxuICAgICAgICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEtleX0gPSAke3ZhbHVlfWA7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuam9pbignIHwgJyk7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKGB8ICR7cmVzdWx0fSBgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHRzLmpvaW4oJ1xcbicpOyAvLyBvciB3aGF0ZXZlciBzZXBhcmF0b3IgeW91IHByZWZlciBiZXR3ZWVuIG11bHRpcGxlIHJlc3VsdHNcbiAgfVxuXG59XG4iLCI8YXBwLWxvYWRpbmcgKm5nSWY9XCJsb2FkaW5nTW9kYWxcIj48L2FwcC1sb2FkaW5nPlxuXG48ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIFwiICNkeW5hbWljQ29udGFpbmVyPjwvZGl2PlxuPC9kaXY+Il19
1211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZGluZy1jb21wb25lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi90ZW1wbGF0ZS1tb2R1bGUvZGVmYXVsTGFuZGluZ0NvbXBvbmVudC9sYW5kaW5nLWNvbXBvbmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9kZWZhdWxMYW5kaW5nQ29tcG9uZW50L2xhbmRpbmctY29tcG9uZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFrRyxTQUFTLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBNLE9BQU8sTUFBTSxNQUFNLDRDQUE0QyxDQUFDO0FBR2hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1GQUFtRixDQUFDO0FBQy9ILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFGQUFxRixDQUFDO0FBQ2xJLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLG1HQUFtRyxDQUFDO0FBQ3RKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJGQUEyRixDQUFDO0FBQzFJLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFHQUFxRyxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFHQUFxRyxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBRWhILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFN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Qix1UkMxQ2xELG1KQUlNOzJGRHVCTyx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCO3NYQWtCakMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUdsRSxZQUFZO3NCQURYLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUVELGdCQUFnQjtzQkFBaEUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1Usd0JBQXdCO3NCQUFoRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuaW1wb3J0IHsgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWFkdmFuY2UtY2hhcnQvZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFUb2RheVByZXZpb3VzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS10b2RheS1wcmV2aW91cy9nYW1tYS10b2RheS1wcmV2aW91cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwQWR2YW5jZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvYXBwLWFkdmFuY2UtaGVhZGVyL2FwcC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlL2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbVNpbmdsZU51bWJlckNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW0tc2luZ2xlLW51bWJlci1jYXJkL2dhbW0tc2luZ2xlLW51bWJlci1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlL2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2FkdmFuY2Utd2lkZ2V0LWhlYWRlci1maWx0ZXIvYWR2YW5jZS13aWRnZXQtaGVhZGVyLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFHZW9DaGFydENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtZ2VvLWNoYXJ0L2dhbW1hLWdlby1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFIZWF0Q2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWhlYXRtYXAvZ2FtbWEtaGVhdG1hcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExhbmRpbmdDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi9sYW5kaW5nLWNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IExhbmRpbmdBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbCB9IGZyb20gJy4vbGFuZGluZy1kYXRhc2V0LWNhbGwuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBMYW5kaW5nTGF5b3V0TG9jYWxTdG9yYWdlIH0gZnJvbSAnLi9sYW5kaW5nLnRva2VuU3RvcmFnZS5zZXJ2Y2UnO1xuLy8gaW1wb3J0IHsgQXBwTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci90b2tlblN0b3JhZ2Uuc2VydmNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbGFuZGluZy1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGFuZGluZy1jb21wb25lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sYW5kaW5nLWNvbXBvbmVudC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExhbmRpbmdDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGRhc2hib3JkX2NvbnRhaW5lcjogYW55ID0gW107XG4gIHNlbGVjdGVkX3dpZHRoOiBhbnk7XG4gIHdpZGdldF93aWR0aCA9IFsndy1mdWxsJywgJ3ctMS8yJywgJ3ctMS8zJywgJ3ctMS80JywgJ3ctMS81JywgJ3ctMS82J11cbiAgbG9hZGluZ01vZGFsOiBib29sZWFuO1xuICBwYWdlX3RpdGxlID0gJ0Rhc2hib2FyZCc7XG4gIGRlZmF1bHRTdGFydERhdGU7XG4gIGRlZmF1bHRFbmREYXRlO1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICovXG5cbiAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICBAVmlld0NoaWxkKCdkeW5hbWljQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbnRhaW5lckZvclBvcHVwJywgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0NvbnRhaW5lckZvclBvcHVwOiBFbGVtZW50UmVmO1xuXG4gIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG4gIC8vIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG5cbiAgQ29tcFJlZnM6IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gIGNvbXBvbmVudENsYXNzTWFwID0ge1xuICAgIEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50LFxuICAgIEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCxcbiAgICBBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50LFxuICAgIEdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCxcbiAgICBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICBHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50LFxuICAgIEFkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnQsXG4gICAgR2FtbWFHZW9DaGFydENvbXBvbmVudCxcbiAgICBHYW1tYUhlYXRDaGFydENvbXBvbmVudFxuICB9O1xuICBkYXRhU291cmNlTWF0YURhdGE6IGFueSA9IFtdO1xuICBxdWVyeVR5cGUgPSBcIm1vbmdvXCI7XG4gIGRhdGFTZXRNb2RhbDogYW55ID0gW107XG4gIGNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBzZWxlc2NlZERhdGFTb3VyY2U6IGFueTtcbiAgZGF0YVNvdXJjZU1vZGFsOiBhbnkgPSB7fTtcbiAgaXNEYXNoQm9hcmRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VsZWN0ZWRWaWV3Rm9ybUNvbXBvbmVudDogYW55ID0ge307XG4gIGFkZGVkd2lkR2V0Q29uZmlnID0ge1xuICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgIFwid2lkZ2V0VGl0bGVcIjogXCJcIixcbiAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgXCJoZWlnaHRcIjogXCJcIlxuICB9XG5cblxuICBkYXNoQm9hcmRXaWRnZXRDb25maWc6IGFueSA9IFtcblxuICBdO1xuICBpc1dpZGdldENyZWF0aW9uQ29udGVudDogYm9vbGVhbjtcbiAgc2VsZWN0ZWRXaWR0aDogYW55O1xuICBzZWxlY3RlZEhlaWdodDogYW55O1xuICBuZXdXaWRnZXRJbmRleDogYW55O1xuICBzZWxlY3RlZEluZGV4T2JqRm9yQ2hhcnQ6IGFueSA9IHt9O1xuICBzZWxlY3RlZENvbnRhaW5lck9iamVjdEZvckNoYXJ0OiBhbnkgPSB7fTtcbiAgZGF0YVNldHRhYmxlRGF0YVNvdXJjZTogYW55O1xuICB1bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG5cbiAgaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXc6IGJvb2xlYW4gPSB0cnVlO1xuICBmaWx0ZXJzOiBhbnk7XG4gIGFsbFdpZGdldEJ5RGF0YXNldCA9IFtdO1xuICBwYWdlVGl0bGU6IGFueTtcbiAgc3RhdGVEYXRhU291cmNlID0gbmV3IE1hcCgpO1xuICBtYWluUGFnZURpdkVsZW1lbnQ6IGFueTtcbiAgY29udGV4dE1lbnVEYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgaGF2aW5nRGF0YU9iamVjdDogYW55ID0ge307XG4gIGlzV2lkZ2V0RmlsdGVyczogYm9vbGVhbjtcbiAgbm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlOiBhbnk7XG4gIGdsb2JhbERlZmF1bHRGaWx0ZXI6IGFueSA9IHt9O1xuICBwYWdlSWQ6IGFueTtcblxuICBrcGlfYnJlYWRjcnVtYnNfY29udGFpbmVyOiBhbnk7XG4gIG9wZXJhdG9yTmFtZTogYW55O1xuXG4gIGRlZmF1bHRWaWV3SWRzOiBhbnkgPSBbXTtcbiAgZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoOiBhbnkgPSBbXTtcbiAgaXNQb3B1cFZpZXc6IGJvb2xlYW47XG4gIG1vZGFsQ29uZmlnczogYW55O1xuICBkZWZhdWx0TWF0Y2hlZEZpbHRlcnMgPSB7IG9wZXJhdGlvbkZpbHRlcjogeyBzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCIgfSB9O1xuICBpc0RlZmF1bHRGaWx0ZXJQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICB2aWV3UGFyYW1zOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgc2VydmljZTogTGFuZGluZ0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGFzZXRTZXJ2aWNlOiBMYW5kaW5nQXBwbGljYXRpb25EYXRzc2V0c0NhbGwsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBBcHBMYW5kaW5nTGF5b3V0TG9jYWxTdG9yYWdlXG5cbiAgICAvLyBwcml2YXRlIHN0b3JhZ2U6IEFwcExvY2FsU3RvcmFnZVxuXG5cbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIC8vIHRoaXMuc2VydmljZS5nZXRsaXN0S3BpQnJvd3NlcigpLnN1YnNjcmliZSh7XG4gICAgLy8gICBuZXh0OiAoKGRhdGE6IGFueSkgPT4ge1xuICAgIC8vICAgICB0aGlzLmtwaV9icmVhZGNydW1ic19jb250YWluZXIgPSBkYXRhO1xuICAgIC8vICAgfSlcbiAgICAvLyB9KVxuXG5cblxuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnBhZ2VJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3BhZ2VJZCddO1xuICAgIHRoaXMuZ2V0UGFkZURhdGFTb3VyY2UoZmFsc2UpO1xuXG4gIH1cblxuICBhc3luYyBnZXRGaWx0ZXJzRm9yVGVtcGxhdGUoZmlsdGVyKSB7XG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVyO1xuICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IGZpbHRlci5zdGFydERhdGU7XG4gICAgdGhpcy5kZWZhdWx0RW5kRGF0ZSA9IGZpbHRlci5lbmREYXRlO1xuICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gZmlsdGVyLnN0YXJ0RGF0ZTtcbiAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydlbmREYXRlJ10gPSBmaWx0ZXIuZW5kRGF0ZTtcblxuICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgcXVlcnlQYXJhbXM6IGZpbHRlci5vcGVyYXRpb25GaWx0ZXIsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICB9O1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcblxuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZyA9IFtdO1xuICAgIGF3YWl0IHRoaXMuZ2V0UGFkZURhdGFTb3VyY2UodHJ1ZSk7XG4gICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG5cbiAgICB0aGlzLmFsbFdpZGdldEJ5RGF0YXNldC5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgdmlldy5kYXRhc2V0SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICBsZXQgZm91bmQgPSAodGhpcy5kYXRhU2V0TW9kYWwgYXMgYW55W10pLmZpbmQoZCA9PiBkLmRhdGFzZXRJZCA9PT0gaWQuZGF0YXNldElkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaWQuZGF0YXNldElkLCBmaWx0ZXIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQYWRlRGF0YVNvdXJjZShjb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuc2VydmljZS5nZXRBcHBQYWdlRGV0YWlsQ29uZmlnKHRoaXMucGFnZUlkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgICB0aGlzLnBhZ2VUaXRsZSA9IGRhdGEucGFnZU5hbWU7XG4gICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBkYXRhO1xuXG4gICAgICAgICAgLy8gdGhpcy5nZXREcmlsbGRvd25EaXNwbGF5QnlVcmxQYXJhbXMoZGF0YS53aWRnZXRzKTtcblxuICAgICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCkubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIGZhbHNlKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudENvbmZpZ1NldCgpO1xuICAgICAgICAgICAgLy8gdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcblxuXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXJyb3InKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG5cbiAgZ2V0Q29tcG9uZW50Q29uZmlnU2V0KCkge1xuICAgIGxldCBkYXRhc2V0ID0gdGhpcy5zZXJ2aWNlLmdldEFwcERhdGFzZXRDb25maWdzKCk7XG4gICAgbGV0IHZpZXdDb21wb25lbnQgPSB0aGlzLnNlcnZpY2UuZ2V0QXBwVmlld0NvbmZpZ3MoKTtcbiAgICB0aGlzLmRlZmF1bHRWaWV3SWRzID0gW107XG4gICAgZm9ya0pvaW4oe1xuICAgICAgZGF0YXNldENvbmZpZzogZGF0YXNldCxcbiAgICAgIHZpZXdDb25maWc6IHZpZXdDb21wb25lbnRcbiAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCh7IGRhdGFzZXRDb25maWcsIHZpZXdDb25maWcgfSkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2UgPSB2aWV3Q29uZmlnO1xuICAgICAgICB0aGlzLmRhdGFTZXRNb2RhbCA9IGRhdGFzZXRDb25maWc7XG4gICAgICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0ID0gW107XG4gICAgICAgIGNvbnN0IHsgcGFnZUlkLCBzdGFydERhdGUsIGVuZERhdGUsIC4uLnBhcmFtcyB9ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAgICAgbGV0IGRlZmF1bHRGaWx0ZXJzID0geyBvcGVyYXRpb25GaWx0ZXI6IHsgc3RhcnREYXRlOiBcIlwiLCBlbmREYXRlOiBcIlwiLCAuLi5wYXJhbXMgfSB9O1xuXG5cbiAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICAgICAgd2lkZ2V0LmZpbHRlcnMuZmlsdGVySXRlbXMuZm9yRWFjaChlbGVtZW50ID0+IHtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZmlsdGVyVHlwZSA9PT0gJ2RhdGUnIHx8IGVsZW1lbnQuZmlsdGVyVHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJkeW5hbWljXCIgJiYgZWxlbWVudC5tb21lbnRGdW5jdGlvbiAhPT0gXCJcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIiAmJiBlbGVtZW50Lm1vbWVudEZvcm1hdCAhPT0gXCJcIikge1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5tb21lbnRGdW5jdGlvbiA9PSBcIm1vbnRoUGlja2VyXCIpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBbY291bnQsIHVuaXRdID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWUuc3BsaXQoJywnKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJlbmREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gKGVuZERhdGUgJiYgZW5kRGF0ZSAhPT0gJycpID8gZW5kRGF0ZSA6IG1vbWVudCgpLnN1YnRyYWN0KHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZW5kT2YodW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuc3VidHJhY3QocGFyc2VJbnQoY291bnQpLCB1bml0KS5lbmRPZih1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSAhPT0gJycpID8gc3RhcnREYXRlIDogbW9tZW50KCkuc3VidHJhY3QocGFyc2VJbnQoY291bnQpLCB1bml0KS5zdGFydE9mKHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5tb21lbnRGdW5jdGlvbiA9PSBcIndlZWtQaWNrZXJcIikge1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJlbmREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gKGVuZERhdGUgJiYgZW5kRGF0ZSAhPT0gJycpID8gZW5kRGF0ZSA6IG1vbWVudCgpLmVuZE9mKCd3ZWVrJykuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuZW5kT2YoJ3dlZWsnKS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSAhPT0gJycpID8gc3RhcnREYXRlIDogbW9tZW50KCkuc3RhcnRPZignd2VlaycpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN0YXJ0T2YoJ3dlZWsnKS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmVuZERhdGUgPSAoZW5kRGF0ZSAmJiBlbmREYXRlICE9PSAnJykgPyBlbmREYXRlIDogbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwic3RhcnREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLnN0YXJ0RGF0ZSA9IChzdGFydERhdGUgJiYgc3RhcnREYXRlICE9PSAnJykgPyBzdGFydERhdGUgOiBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpW2VsZW1lbnQubW9tZW50RnVuY3Rpb25dKHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJzdGF0aWNcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLnN0YXJ0RGF0ZSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodHlwZW9mIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiICYmIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlICE9PSBcIlwiKSB8fFxuICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKSAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vcGVyYXRvck5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltlbGVtZW50Lm9wZXJhdG9yTmFtZV0gPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogW2VsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyW2VsZW1lbnQuYXBpTmFtZV0gPSBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZS5qb2luKFwiLFwiKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsZXQgZGF0YXNldElkczogU2V0PGFueT4gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgbGV0IHZpZXdJZHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICAgICAgICAgIGxldCBkYXRhc2V0SWRzU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgd2lkZ2V0LndpZGdldE5vZGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVQcm9wZXJ0aWVzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWaWV3SWRzLnB1c2godmlldy52aWV3SWQpXG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRlZmF1bHRWaWV3SWRzT25QYWdlUmVmcmVzaD8uZmluZChpdGVtID0+IGl0ZW0udmlld0lkID09PSB2aWV3LnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVyaXZlZEZpbHRlcnMgPSBmb3VuZE9iamVjdCA/IHRoaXMuZ2V0RHJpbGRvd25GaWx0ZXIoZm91bmRPYmplY3QsIGRlZmF1bHRGaWx0ZXJzKSA6IGRlZmF1bHRGaWx0ZXJzO1xuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICBcImZpbHRlcnNcIjogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZXJpdmVkRmlsdGVycykpLFxuICAgICAgICAgICAgICAgICAgXCJrZXlUb1Bhc3NcIjogW10sXG4gICAgICAgICAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogXCJuYXR1cmFsXCIsXG4gICAgICAgICAgICAgICAgICBcImRyaWxsZG93bkZyb21cIjogXCJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5zZXQodmlldy52aWV3SWQsIG9iailcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXRJZDogdmlldy5kYXRhc2V0SWQsXG4gICAgICAgICAgICAgICAgICB2aWV3SWQ6IHZpZXcudmlld0lkLFxuICAgICAgICAgICAgICAgICAgZmlsdGVyOiBkZXJpdmVkRmlsdGVyc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhc2V0SWRzU2V0LmFkZCh2aWV3LmRhdGFzZXRJZCk7XG4gICAgICAgICAgICAgICAgZGF0YXNldElkcy5hZGQobm9kZSk7XG4gICAgICAgICAgICAgICAgdmlld0lkcy5hZGQodmlldy52aWV3SWQpO1xuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5wdXNoKHsgdmlld0lkOiB2aWV3LnZpZXdJZCwgdmlld05hbWU6IG5vZGUubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUsIGRpc3BsYXlLZXk6IHZpZXcua3BpQ29uZmlnLmtleVRvUGFzcyB9KVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdzID0gdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2gubWFwKGl0ZW0gPT4gaXRlbS52aWV3SWQpO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Vmlld0lkcyA9IFsuLi50aGlzLmRlZmF1bHRWaWV3SWRzLCAuLi5uZXdWaWV3cy5maWx0ZXIoaXRlbSA9PiAhdGhpcy5kZWZhdWx0Vmlld0lkcy5pbmNsdWRlcyhpdGVtKSldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGZvciBSVERNUyBvcGVyYXRvcm5hbWVcbiAgICAgICAgICAvLyB0aGlzLm9wZXJhdG9yTmFtZSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ29wZXJhdG9yTmFtZSddO1xuICAgICAgICAgIC8vIGlmICh0aGlzLm9wZXJhdG9yTmFtZSkge1xuICAgICAgICAgIC8vICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyWydvcGVyYXRvcl9rZXknXSA9IHRoaXMub3BlcmF0b3JOYW1lO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICBsZXQgdW5pcXVlZGF0YXNldElkcyA9IEFycmF5LmZyb20oZGF0YXNldElkc1NldCk7XG4gICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgIHdpZGdldElkOiB3aWRnZXQud2lkZ2V0SWQsXG4gICAgICAgICAgICBwYWdlSWQ6IHdpZGdldC5wYWdlSWQsXG4gICAgICAgICAgICBmaWx0ZXJzOiBkZWZhdWx0RmlsdGVycyxcbiAgICAgICAgICAgIGRhdGFzZXRJZHM6IHVuaXF1ZWRhdGFzZXRJZHNcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQucHVzaChvYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZWJ1Z2dlclxuXG4gICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHt9O1xuICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICAgICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICBsZXQgZm91bmQgPSAoZGF0YXNldENvbmZpZyBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgaWQsIHZpZXcuZmlsdGVycykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgIGxldCB1cmxQYXJhbXM6IGFueSA9IGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlclxuICAgICAgICAgIHVybFBhcmFtc1sncGFnZUlkJ10gPSB0aGlzLnBhZ2VJZFxuICAgICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHVybFBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pLCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXJyb3InKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YVNldCgpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0RhdGFzZXQgQ3JlYXRpb24nKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cblxuXG4gIGFzeW5jIGNyZWF0ZURpdkVsZW1lbnRzKGRhdGFzZXRCeUlkLCBjb250ZXh0KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5keW5hbWljQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgY29uc3QgY29udGV4dF9maWx0ZXIgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy5maWx0ZXJzID8gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcuZmlsdGVycy5maWx0ZXJJdGVtcyA6IG51bGw7XG5cbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZvckVhY2goYXN5bmMgZGl2ID0+IHtcbiAgICAgIGNvbnN0IHJvd0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgbGV0IHdfaGVpZ2h0ID0gKGRpdi53aWRnZXRQcm9wZXJ0aWVzLmhlaWdodCA9PSBcIlwiKSA/IFwiaC1hdXRvXCIgOiAnaC1bJyArIGRpdi53aWRnZXRQcm9wZXJ0aWVzLmhlaWdodCArICddJztcbiAgICAgIHJvd0Rpdi5jbGFzc0xpc3QuYWRkKGRpdi53aWRnZXRQcm9wZXJ0aWVzLndpZHRoLCB3X2hlaWdodCk7XG4gICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgY29uc3QgZmlsdGVySXRlbXMgPSAoZGl2LmZpbHRlcnMpID8gZGl2LmZpbHRlcnMuZmlsdGVySXRlbXMgOiBbXTtcbiAgICAgIHRoaXMubG9hZEZpbHRlckNvbXBvbmVudChkaXYsIGZpbHRlckRpdiwgZmlsdGVySXRlbXMsIGNvbnRleHRfZmlsdGVyKTtcbiAgICAgIHJvd0Rpdi5hcHBlbmRDaGlsZChmaWx0ZXJEaXYpO1xuXG4gICAgICBpZiAoZGl2LndpZGdldE5vZGUubGVuZ3RoICE9IDApIHtcbiAgICAgICAgbGV0IG1haW5JdGVtRGl2ID0gcm93RGl2LnF1ZXJ5U2VsZWN0b3IoJy5mbGV4LmZsZXgtd3JhcCcpO1xuXG5cblxuICAgICAgICAvLyBJZiBjb250ZXh0IGlzIHRydWUgYW5kIG1haW5JdGVtRGl2IGV4aXN0cywgY2xlYXIgaXRzIGNvbnRlbnRzXG4gICAgICAgIGlmIChjb250ZXh0ICYmIG1haW5JdGVtRGl2KSB7XG4gICAgICAgICAgbWFpbkl0ZW1EaXYuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDcmVhdGUgbWFpbkl0ZW1EaXYgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICAgIG1haW5JdGVtRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgbWFpbkl0ZW1EaXYuY2xhc3NMaXN0LmFkZChcImZsZXhcIiwgXCJmbGV4LXdyYXBcIik7XG4gICAgICAgICAgcm93RGl2LmFwcGVuZENoaWxkKG1haW5JdGVtRGl2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZFdpZGdldE5vZGVzKGRpdiwgbWFpbkl0ZW1EaXYsIGRhdGFzZXRCeUlkKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHJvd0Rpdik7XG4gICAgfSk7XG4gIH1cbiAgbG9hZFdpZGdldE5vZGVzKGRpdjogYW55LCBtYWluSXRlbURpdjogYW55LCBkYXRhc2V0QnlJZDogYW55KSB7XG4gICAgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQgPSBtYWluSXRlbURpdjtcbiAgICBkaXYud2lkZ2V0Tm9kZS5mb3JFYWNoKGl0ZW0gPT4ge1xuXG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW0sIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCk7XG4gICAgfSk7XG4gIH1cblxuXG4gIGxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW06IGFueSwgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQsIGRhdGFzZXRCeUlkOiBhbnkpIHtcbiAgICBjb25zdCBlbGVtZW50SWQgPSBgaWQtJHtpdGVtLmlkfWA7XG4gICAgY29uc3QgZXhpc3RpbmdFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZWxlbWVudElkfWApO1xuICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLmRpc3BsYXkgJiYgIWV4aXN0aW5nRWxlbWVudCkge1xuICAgICAgY29uc3Qgd19oZWlnaHQgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLmhlaWdodCA9PT0gXCJcIiA/IFwiaC1hdXRvXCIgOiBgaC1bJHtpdGVtLm5vZGVQcm9wZXJ0aWVzLmhlaWdodH1dYDtcbiAgICAgIGNvbnN0IGl0ZW1EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGl0ZW1EaXYuaWQgPSBlbGVtZW50SWQ7XG4gICAgICBpdGVtRGl2LmNsYXNzTGlzdC5hZGQoaXRlbS5ub2RlUHJvcGVydGllcy53aWR0aCwgd19oZWlnaHQsICdtYi0yJyk7XG5cbiAgICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlICE9PSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldERpdiA9IHRoaXMuZ2V0V2lkZ2V0VGl0bGVEaXYoaXRlbSk7XG4gICAgICAgIGl0ZW1EaXYuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBpbm5lckRpdi5jbGFzc0xpc3QuYWRkKCdyb3VuZGVkJywgJ2p1c3RpZnktY2VudGVyJywgJ2l0ZW1zLWNlbnRlcicsICdib3JkZXInLCAncC0xJywgJ20tMScsICdmbGV4JywgJ2ZsZXgtcm93Jyk7XG4gICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snZGF0YVNvdXJjZSddID0gZGF0YXNldEJ5SWRbZWxlbWVudC5kYXRhc2V0SWRdO1xuICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snY29udGV4dE1lbnUnXSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlO1xuICAgICAgICBlbGVtZW50Wyd0aXRsZVBhcmFtcyddID0gaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRQYXJhbXMgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29tcF9vYmplY3QgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMsIGl0ZW0uaWQpO1xuICAgICAgICB0aGlzLmxvYWREeW5hbWljQ29tcG9uZW50KGVsZW1lbnQsIGNvbXBfb2JqZWN0LCBpdGVtRGl2KTtcbiAgICAgIH0pO1xuICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChpdGVtRGl2KTtcbiAgICAgIGlmICghdGhpcy5pc0Rhc2hCb2FyZENvbnRlbnRUeXBlVmlldykge1xuICAgICAgICBpdGVtRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdFbGVtZW50KSB7XG4gICAgICBjb25zdCBpdGVtRGl2ID0gZXhpc3RpbmdFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaXRlbURpdi5pbm5lckhUTUwgPSAnJztcblxuICAgICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGUgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGl2ID0gdGhpcy5nZXRXaWRnZXRUaXRsZURpdihpdGVtKTtcbiAgICAgICAgaXRlbURpdi5hcHBlbmRDaGlsZCh3aWRnZXREaXYpO1xuICAgICAgfVxuICAgICAgaXRlbS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZWxlbWVudC5rcGlDb25maWdbJ2RhdGFTb3VyY2UnXSA9IGRhdGFzZXRCeUlkW2VsZW1lbnQuZGF0YXNldElkXTtcbiAgICAgICAgZWxlbWVudC5rcGlDb25maWdbJ2NvbnRleHRNZW51J10gPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZTtcbiAgICAgICAgZWxlbWVudFsndGl0bGVQYXJhbXMnXSA9IGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0UGFyYW1zIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IGNvbXBfb2JqZWN0ID0gdGhpcy5maW5kV2lkZ2V0QnlJZCh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLCBpdGVtLmlkKTtcbiAgICAgICAgdGhpcy5sb2FkRHluYW1pY0NvbXBvbmVudChlbGVtZW50LCBjb21wX29iamVjdCwgaXRlbURpdik7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLmlzRGFzaEJvYXJkQ29udGVudFR5cGVWaWV3KSB7XG4gICAgICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyRGl2LmNsYXNzTGlzdC5hZGQoJ3JvdW5kZWQnLCAnanVzdGlmeS1jZW50ZXInLCAnaXRlbXMtY2VudGVyJywgJ2JvcmRlcicsICdwLTEnLCAnbS0xJywgJ2ZsZXgnLCAnZmxleC1yb3cnKTtcbiAgICAgICAgaXRlbURpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0V2lkZ2V0VGl0bGVEaXYoaXRlbSkge1xuXG4gICAgY29uc3Qgd2lkZ2V0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgd2lkZ2V0RGl2LmNsYXNzTGlzdC5hZGQoXG4gICAgICAnZmxleCcsICdpdGVtcy1jZW50ZXInLCAnanVzdGlmeS1iZXR3ZWVuJywgJ2ZvbnQtYm9sZCcsICd0ZXh0LW1kJyxcbiAgICAgICd0ZXh0LWdyYXktOTAwJywgJ2Rhcms6dGV4dC13aGl0ZScsICdib3JkZXItYicsICdwLTMnLCAnZGFyazpiZy1ncmF5LTgwMCcsICdiZy1ncmF5LTIwMCcsXG4gICAgICAnbXgtMicsICdyb3VuZGVkLXQtbGcnLCAncmVsYXRpdmUnXG4gICAgKTtcblxuICAgIGNvbnN0IHRpdGxlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGl0bGVEaXYuY2xhc3NMaXN0LmFkZCgncmVsYXRpdmUnLCAnZ3JvdXAnKTtcblxuICAgIGxldCBwYXJhbXMgPSBcIlwiO1xuICAgIGlmICghaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRQYXJhbXMgJiYgdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2g/Lmxlbmd0aCkge1xuICAgICAgcGFyYW1zID0gdGhpcy5nZXRUaXRsZVBhcmFtcyhpdGVtKSB8fCBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFBhcmFtcyB8fCBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZGdldFRpdGxlID0gaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZTtcbiAgICBjb25zdCB0b29sdGlwTWF0Y2ggPSB3aWRnZXRUaXRsZS5tYXRjaCgvXFwkdFxceyhbXFxzXFxTXSo/KVxcfS8pO1xuXG4gICAgY29uc3QgZGlzcGxheVRpdGxlID0gd2lkZ2V0VGl0bGUucmVwbGFjZSgvXFwkdFxce1tcXHNcXFNdKj9cXH0vZywgJycpLnRyaW0oKTtcblxuICAgIHRpdGxlRGl2LmlubmVyVGV4dCA9IGRpc3BsYXlUaXRsZSArIHBhcmFtcztcblxuICAgIGlmICh0b29sdGlwTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHRvb2x0aXBDb250ZW50ID0gdG9vbHRpcE1hdGNoWzFdLnRyaW0oKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRvb2x0aXBEaXYuY2xhc3NMaXN0LmFkZChcbiAgICAgICAgJ2Fic29sdXRlJywgJ2xlZnQtMCcsICdib3R0b20tZnVsbCcsICdtYi0yJywgJ3ctbWF4JywgJ21heC13LXhzJyxcbiAgICAgICAgJ2JnLWJsYWNrJywgJ3RleHQtd2hpdGUnLCAndGV4dC1zbScsICdwLTInLCAncm91bmRlZC1sZycsICdzaGFkb3ctbGcnLFxuICAgICAgICAnb3BhY2l0eS0wJywgJ2dyb3VwLWhvdmVyOm9wYWNpdHktMTAwJywgJ3RyYW5zaXRpb24tb3BhY2l0eScsICdkdXJhdGlvbi0zMDAnLFxuICAgICAgICAnei01MCdcbiAgICAgICk7XG4gICAgICB0b29sdGlwRGl2LmlubmVySFRNTCA9IHRvb2x0aXBDb250ZW50O1xuXG4gICAgICB0aXRsZURpdi5hcHBlbmRDaGlsZCh0b29sdGlwRGl2KTtcbiAgICB9XG5cbiAgICB3aWRnZXREaXYuYXBwZW5kQ2hpbGQodGl0bGVEaXYpO1xuXG5cbiAgICBjb25zdCBzZWFyY2hDb250YWluZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzZWFyY2hDb250YWluZXJEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInLCAnbWwtYXV0bycsICdzcGFjZS14LTInLCAnanVzdGlmeS1lbmQnKTsgLy8gbWwtYXV0byBwdXNoZXMgY29udGVudCB0byB0aGUgcmlnaHQgc2lkZVxuXG4gICAgLy8gQ2hlY2sgZm9yIHdpZGdldCBmaWx0ZXJcbiAgICBpZiAoaXRlbS5ub2RlUHJvcGVydGllcy5pc1dpZGdldEZpbHRlcikge1xuICAgICAgY29uc3Qgc2VhcmNoQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBzZWFyY2hCdXR0b24uaW5uZXJUZXh0ID0gJ0ZpbHRlcic7XG4gICAgICBzZWFyY2hCdXR0b24uY2xhc3NMaXN0LmFkZCgncHgtMycsICdweS0xLjUnLCAnYmctYmx1ZS02MDAnLCAnbXItMicsICd0ZXh0LXdoaXRlJywgJ3JvdW5kZWQnLCAnaG92ZXI6YmctYmx1ZS03MDAnKTtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlID0ge307XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsndmlld0NvbmZpZyddID0gaXRlbTtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWydoYXZpbmdDb25maWcnXSA9IFtdO1xuXG4gICAgICBzZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNXaWRnZXRGaWx0ZXJzID0gdHJ1ZTtcbiAgICAgICAgbGV0IGZpbHRlUHJvcGVydGljZSA9IFtdO1xuICAgICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGxldCBrZXlfbmFtZSA9IHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtlbGVtZW50LmRhdGFzZXRJZF1bMF07XG4gICAgICAgICAgT2JqZWN0LmtleXMoa2V5X25hbWUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmICghZmlsdGVQcm9wZXJ0aWNlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbHRlUHJvcGVydGljZS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBlbGVtZW50LFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwiZmxvYXRcIixcbiAgICAgICAgICAgIG9wZXJhdG9yOiBcIlwiLFxuICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLmhhdmluZ0NvbmZpZy5wdXNoKG9iailcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHNlYXJjaENvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChzZWFyY2hCdXR0b24pXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGl0ZW0gZmlsdGVySWRcbiAgICBpZiAoaXRlbS5maWx0ZXJJZCkge1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UgPSB7fTtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWyd2aWV3Q29uZmlnJ10gPSBpdGVtO1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ2hhdmluZ0NvbmZpZyddID0gW107XG5cbiAgICAgIHRoaXMuc2VydmljZS5nZXRBcHBGaWx0ZXJDb25maWcoaXRlbS5maWx0ZXJJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIHRoaXMubG9hZFdpZGdldEZpbHRlckNvbXBvbmVudChpdGVtLCB3aWRnZXREaXYsIGRhdGEuZmlsdGVySXRlbXMsIGl0ZW0pO1xuICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG5cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIG5vZGUgZmlsdGVyc1xuICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzICYmIGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGZpbHRlckRpdi5jbGFzc0xpc3QuYWRkKCdmbGV4JywgJ2l0ZW1zLWNlbnRlcicpO1xuXG4gICAgICAgIGlmIChmaWx0ZXIuaW5wdXRfdHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgY29uc3QgdGV4dEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgdGV4dEJveC50eXBlID0gJ3RleHQnO1xuICAgICAgICAgIHRleHRCb3gucGxhY2Vob2xkZXIgPSBgRW50ZXIgJHtmaWx0ZXIubG9jYWxfY29sdW1ufWA7XG4gICAgICAgICAgdGV4dEJveC5jbGFzc0xpc3QuYWRkKCdweC0yJywgJ3B5LTEuNScsICdyb3VuZGVkJywgJ2JvcmRlcicsICdtci0xJywgJ2JvcmRlci1ncmF5LTUwMCcsICd0ZXh0LWdyYXktOTAwJywgJ2JnLWdyYXktMjAwJywgJ2Rhcms6YmctZ3JheS03MDAnLCAnZGFyazp0ZXh0LXdoaXRlJyk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICBzZWFyY2hCdXR0b24uaW5uZXJUZXh0ID0gJ1NlYXJjaCc7XG4gICAgICAgICAgc2VhcmNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ3B4LTMnLCAncHktMS41JywgJ2JnLWJsdWUtNjAwJywgJ21yLTInLCAndGV4dC13aGl0ZScsICdyb3VuZGVkJywgJ2hvdmVyOmJnLWJsdWUtNzAwJyk7XG5cbiAgICAgICAgICBjb25zdCBzZXBhcmVyb3RCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBzZXBhcmVyb3RCdXR0b24uaW5uZXJIVE1MID0gJ3wnO1xuXG4gICAgICAgICAgc2VhcmNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IHRleHRCb3gudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmdldFJlYXJjaFJlc3VsdEZyb21JbnB1dEJveChzZWFyY2hUZXJtLCBpdGVtLCBmaWx0ZXIpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHRleHRCb3gpO1xuICAgICAgICAgIGZpbHRlckRpdi5hcHBlbmRDaGlsZChzZWFyY2hCdXR0b24pO1xuICAgICAgICAgIGZpbHRlckRpdi5hcHBlbmRDaGlsZChzZXBhcmVyb3RCdXR0b24pO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VhcmNoQ29udGFpbmVyRGl2LmFwcGVuZENoaWxkKGZpbHRlckRpdik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB3aWRnZXREaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQ29udGFpbmVyRGl2KTtcbiAgICByZXR1cm4gd2lkZ2V0RGl2O1xuICB9XG5cblxuXG4gIGxvYWREeW5hbWljQ29tcG9uZW50KGRhdGEsIGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50KTogYW55IHtcbiAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZV07XG4gICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuQ29tcFJlZnMuaW5zdGFuY2U7XG5cbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuY2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2Uua3BpX25hbWUgPSBcIlwiO1xuICAgIGlmIChkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lID09IFwiR2FtbWFBZHZhbmNlT3BlcmF0b3JUYWJsZUNvbXBvbmVudFwiIHx8IGRhdGEua3BpQ29uZmlnLmNvbXBvbmVudE5hbWUgPT0gXCJHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnRcIikge1xuICAgICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLm9Sb3dDbGljay5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5nZXRSb3dDbGljayh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5vbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmdldENvbnRleHRDbGljayh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGRhdGEua3BpQ29uZmlnLmNvbXBvbmVudE5hbWUgPT0gXCJHYW1tYUFkdmFuY2VDaGFydENvbXBvbmVudFwiKSB7XG5cbiAgICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5vbkNoYXJ0UG9pbnRDbGljay5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcblxuICAgICAgICB0aGlzLmdldFJvd0NsaWNrKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBpbmRleE9iai5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2godGhpcy5Db21wUmVmcyk7XG4gICAgY29uc3QgY3NzQ2xhc3MgPSBcInctZnVsbFwiO1xuICAgIHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTtcbiAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBsb2FkRmlsdGVyQ29tcG9uZW50KGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50LCBmaWx0ZXJJdGVtcywgY29udGV4dF9maWx0ZXIpIHtcbiAgICBsZXQgdXNlck5hbWUgPSB0aGlzLnN0b3JhZ2UuZ2V0KCd1c2VyX25hbWUnKVxuICAgIGxldCBzZWxlY3RlZERhdGVzID0geyBzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5kZWZhdWx0RW5kRGF0ZSB9XG4gICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwWydBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50J107XG4gICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuQ29tcFJlZnMuaW5zdGFuY2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJJdGVtcyA9IGZpbHRlckl0ZW1zO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5jb250ZXh0RmlsdGVySXRlbXMgPSBjb250ZXh0X2ZpbHRlcjtcblxuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5wYWdlVGl0bGUgPSB0aGlzLnBhZ2VUaXRsZTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuYnJlYWRfY3J1bWJzX2NvbnRhaW5lciA9IHRoaXMua3BpX2JyZWFkY3J1bWJzX2NvbnRhaW5lcjtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuaXNFZGl0QnV0dG9uID0gKHVzZXJOYW1lICYmIHVzZXJOYW1lID09IFwiYWRtaW5cIikgPyB0cnVlIDogZmFsc2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmlzQWR2YW5jZUJ1dHRvbiA9IHRydWU7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldEZpbHRlclBhZ2VDb25maWcuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmdldEZpbHRlcnNGb3JUZW1wbGF0ZSh2YWx1ZSk7XG4gICAgfSk7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmdldE9wZXJhdG9yTmFtZS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMubG9hZERhdGFCeU9wZXJhdG9yKHZhbHVlKTtcbiAgICB9KTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZ2V0Q29udGV4dEZpbHRlckRhdGEuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmdldENvbnRleHRGaWx0ZXJEYXRhKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGluZGV4T2JqLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMucHVzaCh0aGlzLkNvbXBSZWZzKTtcbiAgICBjb25zdCBjc3NDbGFzcyA9IFwidy1mdWxsXCI7XG4gICAgdGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY3NzQ2xhc3MpO1xuICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuICBsb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50LCBmaWx0ZXJJdGVtcywgdmlld0lkcykge1xuICAgIGxldCBzZWxlY3RlZERhdGVzID0geyBzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5kZWZhdWx0RW5kRGF0ZSB9XG4gICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwWydBZHZhbmNlV2lkZ2V0SGVhZGVyRmlsdGVyQ29tcG9uZW50J107XG4gICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuQ29tcFJlZnMuaW5zdGFuY2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJJdGVtcyA9IGZpbHRlckl0ZW1zO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS52aWV3SWRzID0gdmlld0lkcztcblxuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5nZXRXaWRnZXRGaWx0ZXJDb25maWcuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmdldFdpZGdldEZpbHRlckZvclRlbXBsYXRlKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGluZGV4T2JqLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMucHVzaCh0aGlzLkNvbXBSZWZzKTtcbiAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICAvLyBmb3IgY29udGV4dCBtZW51IGZ1bmN0aW9uXG4gIGdldENvbnRleHRDbGljayhldmVudCkge1xuICAgIGNvbnN0IHN0YXRlRGF0YSA9IEFycmF5LmZyb20odGhpcy5zdGF0ZURhdGFTb3VyY2Uua2V5cygpKTtcbiAgICBjb25zdCBjdXJyZW50Vmlld0luZGV4ID0gc3RhdGVEYXRhLmluZGV4T2YoZXZlbnQudmlld0lkKTtcbiAgICBjb25zdCBkZWxldGVkVmlld0lkcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBjdXJyZW50Vmlld0luZGV4ICsgMTsgaSA8IHN0YXRlRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgZGVsZXRlZFZpZXdJZHMucHVzaChzdGF0ZURhdGFbaV0pXG4gICAgfVxuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBlbGVtZW50LndpZGdldE5vZGUuZm9yRWFjaCgobm9kZTogYW55LCBub2RlSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAodGhpcy5nZXRFbGVtZW50T2ZDdXJyZW50Vmlldyhub2RlLCBldmVudC5kcmlsbGRvd25UbykpIHtcbiAgICAgICAgICBsZXQgdmlldyA9IGVsZW1lbnQud2lkZ2V0Tm9kZVtub2RlSW5kZXhdO1xuICAgICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgICAgICAgIGxldCBjaGF0QXBpQ2FsbCA9IFtdO1xuXG4gICAgICAgICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LmRyaWxsZG93bkZyb20pKTtcbiAgICAgICAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGNvbnRlbnRWaWV3ID0+IHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBjb250ZW50Vmlldy5kYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGNvbnRlbnRWaWV3LmRhdGFzZXRJZCwgYXBwbGllZEZpbHRlcnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGRlbGV0ZWRWaWV3SWRzKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQud2lkZ2V0Tm9kZS5mb3JFYWNoKHZpZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXdJZCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodmlld0lkLnZpZXdJZCA9PSBlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5zb21lKGl0ZW0gPT4gaXRlbS52aWV3SWQgPT09IHZpZXdJZC52aWV3SWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBleGlzdHMsIHB1c2ggdGhlIG5ldyBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogdmlld0lkLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiBub2RlLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlld0lkLmtwaUNvbmZpZy5rZXlUb1Bhc3NcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGEgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZGVsZXRlKGVudHJ5KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZS5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3VmFsdWUuaWR9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0hpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VG9IaWRlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLmZpbHRlcihlID0+IGUuZGlzcGxheUtleSAhPT0gZXZlbnQua2V5VG9QYXNzKTtcbiAgICAgICAgICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImZpbHRlcnNcIjogYXBwbGllZEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgXCJrZXlUb1Bhc3NcIjogdGhpcy51cGRhdGVPcGVyYXRvckRhdGEoZXZlbnQua2V5VG9QYXNzLCBldmVudC5kYXRhKSxcbiAgICAgICAgICAgICAgICBcImRyaWxsRG93blR5cGVcIjogZXZlbnQuZHJpbGxEb3duVHlwZSxcbiAgICAgICAgICAgICAgICBcImRyaWxsZG93bkZyb21cIjogZXZlbnQuZHJpbGxkb3duRnJvbVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLnNldCh2YWxbJ3ZpZXdJZCddLCBvYmopXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgICAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuXG5cbiAgICAgICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgICAgICBxdWVyeVBhcmFtczogYXBwbGllZEZpbHRlcnNbJ29wZXJhdGlvbkZpbHRlciddLFxuICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbik7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBub2RlLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLy8gZm9yIHJvdyBjbGljayBmdW5jdGlvblxuICBhc3luYyBnZXRSb3dDbGljayhldmVudCkge1xuXG4gICAgY29uc3Qgc3RhdGVEYXRhID0gQXJyYXkuZnJvbSh0aGlzLnN0YXRlRGF0YVNvdXJjZS5rZXlzKCkpO1xuICAgIGNvbnN0IGN1cnJlbnRWaWV3SW5kZXggPSBzdGF0ZURhdGEuaW5kZXhPZihldmVudC52aWV3SWQpO1xuICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gY3VycmVudFZpZXdJbmRleCArIDE7IGkgPCBzdGF0ZURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIGlmICghdGhpcy5kZWZhdWx0Vmlld0lkcy5pbmNsdWRlcyhzdGF0ZURhdGFbaV0pKSB7XG4gICAgICBkZWxldGVkVmlld0lkcy5wdXNoKHN0YXRlRGF0YVtpXSk7XG4gICAgICAvLyB9XG4gICAgfVxuICAgIGNvbnN0IGhvdXJseU5vZGUgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAubWFwKHdpZGdldCA9PiB3aWRnZXQud2lkZ2V0Tm9kZS5maW5kKG5vZGUgPT4gdGhpcy5nZXRIb3VybHlEYXRhKG5vZGUpKSlcbiAgICAgIC5maW5kKG5vZGUgPT4gbm9kZSk7XG5cbiAgICBpZiAoaG91cmx5Tm9kZSAmJiBldmVudC5rZXlUb1Bhc3MuaW5jbHVkZXMoXCJyZWNvcmREYXRlXCIpKSB7XG4gICAgICB0aGlzLmdldFZpZXdCeVJvd0NMaWNrRm9ySG91cmx5Q2hhcnQoZXZlbnQsIGhvdXJseU5vZGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWaWV3Tm9kZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNcbiAgICAgIC5tYXAod2lkZ2V0ID0+IHdpZGdldC53aWRnZXROb2RlLmZpbmQobm9kZSA9PiB0aGlzLmdldEVsZW1lbnRPZkN1cnJlbnRWaWV3KG5vZGUsIGV2ZW50LnZpZXdJZCkpKVxuICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwO1xuICAgIGlmIChjdXJyZW50Vmlld05vZGUpIHtcbiAgICAgIGNvbnN0IGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3ID0gW107XG4gICAgICBjb25zdCBkcmlsZG93bnNGb3JDdXJyZW50UGFnZSA9IFtdO1xuICAgICAgY3VycmVudFZpZXdOb2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGFzeW5jIGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuZW5hYmxlQ2xpY2tFdmVudCkge1xuICAgICAgICAgIGlmIChlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucz8uZXZlbnRUeXBlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmV2ZW50VHlwZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgbGV0IGV2ZW50VHlwZSA9IGVsZW1lbnQua3BpQ29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmV2ZW50VHlwZTtcbiAgICAgICAgICAgIGxldCBhc3NvY2lhdGVkVmlld3MgPSBlbGVtZW50LmtwaUNvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5hc3NvY2lhdGVkVmlld3M7XG4gICAgICAgICAgICBsZXQgYXNzb2NpYXRlZFBhZ2UgPSAoZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFBhZ2UpID8gZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFBhZ2UgOiBcIlwiO1xuICAgICAgICAgICAgbGV0IGNsaWNrRXZlbnRPcHRpb25zID0gZWxlbWVudC5rcGlDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09ICdvcHRpb25hbERyaWxsRG93bicpIHtcbiAgICAgICAgICAgICAgaWYgKGFzc29jaWF0ZWRWaWV3cyAmJiBhc3NvY2lhdGVkVmlld3MubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2aWV3Rm9yRHJpbGxEb3duIG9mIGFzc29jaWF0ZWRWaWV3cykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uZGl0aW9uID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh2aWV3Rm9yRHJpbGxEb3duWydmaWx0ZXJDb25kaXRpb24nXSk7XG4gICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJDb25kaXRpb24uZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuZ2V0KGtleSkgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXRjaEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdGb3JEcmlsbERvd25bJ3ZpZXdJZCddLmZvckVhY2godmlld0ZvcklkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBkcmlsZG93bnNGb3JDdXJyZW50Vmlldy5wdXNoKHZpZXdGb3JJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09ICdkcmlsbGRvd24nIHx8IGV2ZW50VHlwZSA9PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGFzc29jaWF0ZWRWaWV3cykge1xuICAgICAgICAgICAgICAgIGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3LnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSAnbmF2aWdhdGVUb1BhZ2UnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VydmljZS5nZXRBcHBQYWdlRGV0YWlsQ29uZmlnKGFzc29jaWF0ZWRQYWdlKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCB7IHBhZ2VJZCwgLi4ucGFyYW1zIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgICAgICAgbGV0IGFzc29jaWF0ZWRQYXJhbXNUZW1wbGF0ZSA9IGNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRQYXJhbXM7XG4gICAgICAgICAgICAgICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50LCB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoZXZlbnQudmlld0lkKSk7XG4gICAgICAgICAgICAgICAgICBldmVudC5rZXlUb1Bhc3MuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2VsZW1lbnRdID0gZXZlbnQuZGF0YVtlbGVtZW50XTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgcGFyYW1zWydwYWdlSWQnXSA9IGFzc29jaWF0ZWRQYWdlO1xuICAgICAgICAgICAgICAgICAgaWYgKGFzc29jaWF0ZWRQYXJhbXNUZW1wbGF0ZSAhPT0gXCJcIikge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaW5hbEFzc29jaWF0ZWRQYXJhbXM6IGFueSA9IHRoaXMucmVwbGFjZUFzc29jaWF0ZWRQYXJhbXMoYXNzb2NpYXRlZFBhcmFtc1RlbXBsYXRlLCBwYXJhbXMsIGFwcGxpZWRGaWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBmaW5hbEFzc29jaWF0ZWRQYXJhbXMuc3BsaXQoXCImXCIpLmZvckVhY2gocGFpciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpci5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbJ3BhZ2VJZCddID0gcGFyYW1zWydwYWdlSWQnXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVsbFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtkYXRhLnBhZ2VVcmxdLCB7IHF1ZXJ5UGFyYW1zIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtkYXRhLnBhZ2VVcmxdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cub3BlbihmdWxsVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW2RhdGEucGFnZVVybF0sIHsgcXVlcnlQYXJhbXM6IHBhcmFtcyB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZGF0YS5wYWdlVXJsXSwgeyBxdWVyeVBhcmFtcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSlcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cblxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSAnc2FtZVZpZXdEcmlsbGRvd24nKSB7XG4gICAgICAgICAgICAgIGRlYnVnZ2VyXG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGRyaWxkb3duc0ZvckN1cnJlbnRWaWV3Lmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IHZpZXdJZEZvck5leHQgb2YgZHJpbGRvd25zRm9yQ3VycmVudFZpZXcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Vmlld05vZGUgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzXG4gICAgICAgICAgICAgICAgICAubWFwKHdpZGdldCA9PiB3aWRnZXQud2lkZ2V0Tm9kZS5maW5kKG5vZGUgPT4gdGhpcy5nZXRFbGVtZW50T2ZDdXJyZW50Vmlldyhub2RlLCB2aWV3SWRGb3JOZXh0KSkpXG4gICAgICAgICAgICAgICAgICAuZmluZChub2RlID0+IG5vZGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmlzUG9wdXBWaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0TW9kYWxWaWV3QnlSb3dDTGljayhldmVudCwgbmV4dFZpZXdOb2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3QnlSb3dDTGljayhldmVudCwgbmV4dFZpZXdOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZGVsZXRlZFZpZXdJZHMpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LndpZGdldE5vZGUuZm9yRWFjaCh2aWV3VmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgdmlld1ZhbHVlLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXdJZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3SWQudmlld0lkID09IGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2Uuc29tZShpdGVtID0+IGl0ZW0udmlld0lkID09PSB2aWV3SWQudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogdmlld0lkLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6IGN1cnJlbnRWaWV3Tm9kZS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUtleTogdmlld0lkLmtwaUNvbmZpZy5rZXlUb1Bhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGEgPSB0aGlzLnN0YXRlRGF0YVNvdXJjZS5nZXQoZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLmRlbGV0ZShlbnRyeSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgdmlld1ZhbHVlLm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlld1ZhbHVlLmlkfWA7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWaWV3SW5kZXggPSBzdGF0ZURhdGEuaW5kZXhPZihldmVudC52aWV3SWQpICsgMTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWaWV3ID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1xuICAgICAgICAgICAgICAubWFwKHdpZGdldCA9PiB3aWRnZXQud2lkZ2V0Tm9kZVtuZXh0Vmlld0luZGV4XSlcbiAgICAgICAgICAgICAgLmZpbmQobm9kZSA9PiBub2RlKTtcblxuICAgICAgICAgICAgaWYgKG5leHRWaWV3KSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3QnlSb3dDTGljayhldmVudCwgbmV4dFZpZXcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuXG4gICAgICAvLyBmb3IgdmlldyBncm91cFxuXG5cblxuICAgIH1cbiAgfVxuXG4gIGdldFZpZXdCeVJvd0NMaWNrRm9ySG91cmx5Q2hhcnQoZXZlbnQsIG5vZGUpIHtcblxuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG4gICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuZ2V0U2V0T3BlcmF0b3JGaWx0ZXIoZXZlbnQsIHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChpdGVtLnZpZXdJZCkpO1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGl0ZW0uZGF0YXNldElkKTtcbiAgICAgIGRlbGV0ZWRWaWV3SWRzLnB1c2goaXRlbS52aWV3SWQpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGl0ZW0uZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgLy8gbm9kZS5ub2RlUHJvcGVydGllc1snd2lkZ2V0UGFyYW1zJ10gPSBldmVudC50YWJsZVRpdGxlO1xuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZShub2RlLCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMubWFpblBhZ2VEaXZFbGVtZW50KTtcbiAgICAgIH0sIDIwMCk7XG5cbiAgICB9KTtcbiAgICAvLyB9XG4gIH1cblxuICBhc3luYyBnZXRNb2RhbFZpZXdCeVJvd0NMaWNrKGV2ZW50LCB2aWV3KSB7XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LnZpZXdJZCkpO1xuICAgIHZpZXcuY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goY29udGVudFZpZXcgPT4ge1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGFwaUNhbGxzKVxuXG5cbiAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLmZpbHRlcihlID0+IGUuZGlzcGxheUtleSAhPT0gZXZlbnQua2V5VG9QYXNzKTtcbiAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKHZpZXdmb3JEYXRhU2V0ID0+IHtcblxuICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgXCJmaWx0ZXJzXCI6IGFwcGxpZWRGaWx0ZXJzLFxuICAgICAgICBcImtleVRvUGFzc1wiOiB0aGlzLnVwZGF0ZU9wZXJhdG9yRGF0YShldmVudC5rZXlUb1Bhc3MsIGV2ZW50LmRhdGEpLFxuICAgICAgICBcImRyaWxsRG93blR5cGVcIjogZXZlbnQuZHJpbGxEb3duVHlwZSxcbiAgICAgICAgXCJkcmlsbGRvd25Gcm9tXCI6IGV2ZW50LmRyaWxsZG93bkZyb21cbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdGVEYXRhU291cmNlLnNldCh2aWV3Zm9yRGF0YVNldFsndmlld0lkJ10sIG9iailcbiAgICB9KTtcbiAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWydkaXNwbGF5J10gPSB0cnVlO1xuICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICB0aGlzLm1vZGFsQ29uZmlncyA9IHtcbiAgICAgIHZpZXc6IHZpZXcsXG4gICAgICBkYXRhc291cmNlOiB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RcbiAgICB9XG4gICAgLy8gdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZSh2aWV3LCB0aGlzLm1haW5QYWdlRGl2RWxlbWVudCwgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLmlzUG9wdXBWaWV3ID0gdHJ1ZTtcbiAgICB9LCAyMDApO1xuICB9XG4gIGFzeW5jIGdldFZpZXdCeVJvd0NMaWNrKGV2ZW50LCB2aWV3KSB7XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgbGV0IGNoYXRBcGlDYWxsID0gW107XG4gICAgbGV0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5nZXRTZXRPcGVyYXRvckZpbHRlcihldmVudCwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGV2ZW50LnZpZXdJZCkpO1xuXG4gICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICBsZXQgZm91bmQgPSAodGhpcy5kYXRhU2V0TW9kYWwgYXMgYW55W10pLmZpbmQoZCA9PiBkLmRhdGFzZXRJZCA9PT0gY29udGVudFZpZXcuZGF0YXNldElkKTtcbiAgICAgIC8vIGxldCBxdWVyeVBhcmFtcyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclF1ZXJ5UGFyYW1zKGFwcGxpZWRGaWx0ZXJzLCBmb3VuZC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLCBjb250ZW50Vmlldyk7XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBjb250ZW50Vmlldy5kYXRhc2V0SWQsIGFwcGxpZWRGaWx0ZXJzKSk7XG5cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChhcGlDYWxscylcblxuXG4gICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IGV2ZW50LmtleVRvUGFzcyk7XG4gICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3Zm9yRGF0YVNldCA9PiB7XG5cbiAgICAgIGxldCBvYmogPSB7XG4gICAgICAgIFwiZmlsdGVyc1wiOiBhcHBsaWVkRmlsdGVycyxcbiAgICAgICAgXCJrZXlUb1Bhc3NcIjogdGhpcy51cGRhdGVPcGVyYXRvckRhdGEoZXZlbnQua2V5VG9QYXNzLCBldmVudC5kYXRhKSxcbiAgICAgICAgXCJkcmlsbERvd25UeXBlXCI6IGV2ZW50LmRyaWxsRG93blR5cGUsXG4gICAgICAgIFwiZHJpbGxkb3duRnJvbVwiOiBldmVudC5kcmlsbGRvd25Gcm9tXG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlRGF0YVNvdXJjZS5zZXQodmlld2ZvckRhdGFTZXRbJ3ZpZXdJZCddLCBvYmopXG4gICAgfSk7XG4gICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICB2aWV3Lm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3ZpZXcuaWR9YDtcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKHZpZXcsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuXG4gICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICBxdWVyeVBhcmFtczogYXBwbGllZEZpbHRlcnNbJ29wZXJhdGlvbkZpbHRlciddLFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgfTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgbmF2aWdhdGlvbik7XG4gICAgY29uc29sZS5sb2codGhpcy5zdGF0ZURhdGFTb3VyY2UpO1xuXG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICByZXBsYWNlQXNzb2NpYXRlZFBhcmFtcyh0ZW1wbGF0ZTogc3RyaW5nLCBwYXJhbXM6IGFueSwgYXBwbGllZEZpbHRlcnM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xcJChGfFApXFx7KFtefV0rKVxcfS9nLCAobWF0Y2gsIHR5cGUsIGtleSkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09IFwiRlwiKSB7XG4gICAgICAgIHJldHVybiBhcHBsaWVkRmlsdGVycy5vcGVyYXRpb25GaWx0ZXI/LltrZXldID8/IFwiXCI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiUFwiKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXM/LltrZXldID8/IFwiXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG4gIH1cblxuICBzY3JvbGxUb0JvdHRvbShjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcgfSk7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgIH0sIDApO1xuICB9XG5cbiAgZmluZFdpZGdldEJ5SWQoY29uZmlnczogYW55W10sIGlkOiBzdHJpbmcpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICAgIGlmIChjb25maWcuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLndpZGdldE5vZGUgJiYgY29uZmlnLndpZGdldE5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFdpZGdldEJ5SWQoY29uZmlnLndpZGdldE5vZGUsIGlkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB1cGRhdGVPcGVyYXRvckRhdGEoa2V5X25hbWU6IHN0cmluZ1tdLCB2YWx1ZV9kYXRhOiBhbnkpOiBhbnkge1xuICAgIGxldCBvcGVyYXRvciA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleV9uYW1lKSB7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcbiAgICAgIG9ialtrZXldID0gdmFsdWVfZGF0YVtrZXldO1xuICAgICAgb3BlcmF0b3IucHVzaChvYmopXG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRvcjtcbiAgfVxuXG5cbiAgZ2V0RWxlbWVudE9mQ3VycmVudFZpZXcobm9kZSwgdmlld0lkKSB7XG4gICAgY29uc3QgbWF0Y2hlZE9iamVjdCA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLmZpbmQob2JqZWN0ID0+IG9iamVjdC52aWV3SWQgPT09IHZpZXdJZCk7XG4gICAgcmV0dXJuIG1hdGNoZWRPYmplY3QgPyBub2RlIDogbnVsbDtcbiAgfVxuICBnZXRIb3VybHlEYXRhKG5vZGUpIHtcbiAgICBjb25zdCBtYXRjaGVkT2JqZWN0ID0gbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcuZmluZChvYmplY3QgPT4gb2JqZWN0LmtwaUNvbmZpZy5mb3JtYXRlID09PSAnaG91cmx5Jyk7XG4gICAgcmV0dXJuIG1hdGNoZWRPYmplY3QgPyBub2RlIDogbnVsbDtcbiAgfVxuXG4gIGdldFNldE9wZXJhdG9yRmlsdGVyKG9iamVjdERhdGEsIHByZXZpb3VzVmlld1N0YXRlcykge1xuXG4gICAgY29uc3QgeyBkYXRhLCBrZXlUb1Bhc3MgfSA9IG9iamVjdERhdGE7XG4gICAgY29uc3QgYXBwbGllZEZpbHRlciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHJldmlvdXNWaWV3U3RhdGVzLmZpbHRlcnMub3BlcmF0aW9uRmlsdGVyKSk7XG5cbiAgICBrZXlUb1Bhc3MuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSBpbiBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csICcnKTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRLZXkgPT09IFwicmVjb3JkZGF0ZVwiICYmIFwic3RhcnREYXRlXCIgaW4gYXBwbGllZEZpbHRlciAmJiBcImVuZERhdGVcIiBpbiBhcHBsaWVkRmlsdGVyKSB7XG4gICAgICAgICAgYXBwbGllZEZpbHRlci5zdGFydERhdGUgPSBkYXRhW2tleV07XG4gICAgICAgICAgYXBwbGllZEZpbHRlci5lbmREYXRlID0gZGF0YVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFwcGxpZWRGaWx0ZXJba2V5XSA9IGRhdGFba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRvcGVyYXRpb25GaWx0ZXIgPSB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIub3BlcmF0aW9uRmlsdGVyO1xuICAgIGlmIChkZWZhdWx0b3BlcmF0aW9uRmlsdGVyKSB7XG4gICAgICBPYmplY3Qua2V5cyhkZWZhdWx0b3BlcmF0aW9uRmlsdGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghYXBwbGllZEZpbHRlci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgYXBwbGllZEZpbHRlcltrZXldID0gZGVmYXVsdG9wZXJhdGlvbkZpbHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcGVyYXRpb25GaWx0ZXIgPSB7fTtcbiAgICBvcGVyYXRpb25GaWx0ZXJbJ29wZXJhdGlvbkZpbHRlciddID0gYXBwbGllZEZpbHRlcjtcbiAgICByZXR1cm4gb3BlcmF0aW9uRmlsdGVyO1xuICB9XG5cblxuICBnZXRSZWFyY2hSZXN1bHRGcm9tSW5wdXRCb3goaW5wdXRWYWx1ZSwgdmlld0NvbmZpZywgZmlsdGVyT2JqZWN0KSB7XG4gICAgbGV0IHZpZXcgPSB2aWV3Q29uZmlnO1xuICAgIGxldCBldmVudE5vZGUgPSB7IGRhdGE6IHt9LCBrZXlUb1Bhc3M6IFtdIH1cbiAgICBldmVudE5vZGUuZGF0YVtmaWx0ZXJPYmplY3Quc2VydmVyX2NvbHVtbl0gPSBpbnB1dFZhbHVlO1xuICAgIGV2ZW50Tm9kZVsna2V5VG9QYXNzJ10gPSBbZmlsdGVyT2JqZWN0LnNlcnZlcl9jb2x1bW5dO1xuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG4gICAgdmlldy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChjb250ZW50VmlldyA9PiB7XG4gICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB0aGlzLmdldFNldE9wZXJhdG9yRmlsdGVyKGV2ZW50Tm9kZSwgdGhpcy5zdGF0ZURhdGFTb3VyY2UuZ2V0KGNvbnRlbnRWaWV3LnZpZXdJZCkpO1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZpZXdDb25maWcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3Q29uZmlnLmlkfWA7XG4gICAgY29uc3QgZWxlbWVudFRvSGlkZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7IC8vIENhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgZWxlbWVudFRvSGlkZS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcblxuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgdGhpcy5jb250ZXh0TWVudURhdGFTb3VyY2UgPSB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZS5maWx0ZXIoZSA9PiBlLmRpc3BsYXlLZXkgIT09IHZpZXdDb25maWcua2V5VG9QYXNzKTtcblxuICAgICAgdmlldy5ub2RlUHJvcGVydGllc1snZGlzcGxheSddID0gdHJ1ZTtcbiAgICAgIC8vIHZpZXcubm9kZVByb3BlcnRpZXNbJ3dpZGdldFBhcmFtcyddID0gZXZlbnQudGFibGVUaXRsZTtcbiAgICAgIGNvbnN0IHByZWZpeGVkSWQgPSBgaWQtJHt2aWV3LmlkfWA7XG4gICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7cHJlZml4ZWRJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIHRoaXMubG9hZFNpbmdsZVdpZGdldE5vZGUodmlldywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICB9LCAyMDApO1xuICAgICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgICAgcGFyYW1zW2ZpbHRlck9iamVjdC5zZXJ2ZXJfY29sdW1uXSA9IGlucHV0VmFsdWU7XG4gICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICB9O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICAgIH0pO1xuICB9XG5cblxuICBzdWJtaXRGaWx0ZXIoKSB7XG4gICAgbGV0IHZpZXcgPSB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS52aWV3Q29uZmlnO1xuICAgIC8vIGxldCBjYWxfdmFsdWUgPSAocGFyc2VGbG9hdChzZWFyY2hUZXJtKSAvIDEwMClcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICB0aGlzLmhhdmluZ0RhdGFPYmplY3QgPSB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS5oYXZpbmdDb25maWcuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnZhbHVlICE9PSBcIlwiKTtcbiAgICB2aWV3LmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGNvbnRlbnRWaWV3ID0+IHtcbiAgICAgIGxldCBhcHBsaWVkRmlsdGVycyA9IHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChjb250ZW50Vmlldy52aWV3SWQpO1xuICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGNvbnRlbnRWaWV3LmRhdGFzZXRJZCk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChmb3VuZCwgY29udGVudFZpZXcuZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycy5maWx0ZXJzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG5cbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLnZpZXdDb25maWcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IGZhbHNlO1xuICAgICAgY29uc3QgcHJlZml4ZWRJZCA9IGBpZC0ke3RoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlLnZpZXdDb25maWcuaWR9YDtcbiAgICAgIGNvbnN0IGVsZW1lbnRUb0hpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtwcmVmaXhlZElkfWApIGFzIEhUTUxFbGVtZW50OyAvLyBDYXN0IHRvIEhUTUxFbGVtZW50XG4gICAgICBpZiAoZWxlbWVudFRvSGlkZSkge1xuICAgICAgICBlbGVtZW50VG9IaWRlLnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgICB0aGlzLmNvbnRleHRNZW51RGF0YVNvdXJjZSA9IHRoaXMuY29udGV4dE1lbnVEYXRhU291cmNlLmZpbHRlcihlID0+IGUuZGlzcGxheUtleSAhPT0gdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2Uudmlld0NvbmZpZy5rZXlUb1Bhc3MpO1xuICAgICAgdGhpcy5pc1dpZGdldEZpbHRlcnMgPSBmYWxzZTtcbiAgICAgIHZpZXcubm9kZVByb3BlcnRpZXNbJ2Rpc3BsYXknXSA9IHRydWU7XG4gICAgICAvLyB2aWV3Lm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICAvLyBjb25zdCBwcmVmaXhlZElkID0gYGlkLSR7dmlldy5pZH1gO1xuICAgICAgLy8gY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3ByZWZpeGVkSWR9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKHZpZXcsIHRoaXMubWFpblBhZ2VEaXZFbGVtZW50LCB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5tYWluUGFnZURpdkVsZW1lbnQpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgZ2V0V2lkZ2V0RmlsdGVyRm9yVGVtcGxhdGUodmFsdWUpIHtcblxuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgIGNvbnN0IGRlbGV0ZWRWaWV3SWRzID0gW107XG4gICAgdmFsdWUudmlld05vZGVzLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgbGV0IHdpZGdldEZpbHRlciA9IHRoaXMuc3RhdGVEYXRhU291cmNlLmdldChpdGVtLnZpZXdJZCk7XG4gICAgICBsZXQgYXBwbGllZEZpbHRlcnMgPSB3aWRnZXRGaWx0ZXIuZmlsdGVycztcbiAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpdGVtLmRhdGFzZXRJZCk7XG4gICAgICBkZWxldGVkVmlld0lkcy5wdXNoKGl0ZW0udmlld0lkKTtcbiAgICAgIGNvbnN0IGhhdmluZyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlLm9wZXJhdGlvbkZpbHRlcikubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgIGNvbHVtbk5hbWU6IGtleSxcbiAgICAgICAgZGF0YVR5cGU6IFwiZmxvYXRcIixcbiAgICAgICAgb3BlcmF0b3I6IFwiZ3RlXCIsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgZm91bmQuY29uZmlnLnF1ZXJ5Q29uZmlnWydoYXZpbmdzJ10gPSBoYXZpbmc7XG4gICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGl0ZW0uZGF0YXNldElkLCBhcHBsaWVkRmlsdGVycykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgLy8gdmFsdWUudmlld05vZGVzLm5vZGVQcm9wZXJ0aWVzWyd3aWRnZXRQYXJhbXMnXSA9IGV2ZW50LnRhYmxlVGl0bGU7XG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKHZhbHVlLnZpZXdOb2RlcywgdGhpcy5tYWluUGFnZURpdkVsZW1lbnQsIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLm1haW5QYWdlRGl2RWxlbWVudCk7XG4gICAgICB9LCAyMDApO1xuXG4gICAgfSk7XG4gICAgLy8gfVxuICB9XG5cbiAgYXN5bmMgbG9hZERhdGFCeU9wZXJhdG9yKG9wTmFtZSkge1xuICAgIGxldCBmaWx0ZXIgPSB7IG9wZXJhdGlvbkZpbHRlcjogeyBzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCIsIG9wZXJhdG9yX2tleTogXCJcIiB9IH07XG4gICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclsnc3RhcnREYXRlJ10gPSB0aGlzLmRlZmF1bHRTdGFydERhdGU7XG4gICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclsnZW5kRGF0ZSddID0gdGhpcy5kZWZhdWx0RW5kRGF0ZTtcbiAgICBmaWx0ZXIub3BlcmF0aW9uRmlsdGVyWydvcGVyYXRvcl9rZXknXSA9IG9wTmFtZTtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG5cbiAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIFwib3BlcmF0b3JOYW1lXCI6IG9wTmFtZVxuICAgICAgfSxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxuICAgIH07XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuXG4gICAgLy8gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBbXTtcbiAgICBhd2FpdCB0aGlzLmdldFBhZGVEYXRhU291cmNlKHRydWUpO1xuICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHt9O1xuICAgIGxldCBhcGlDYWxscyA9IFtdO1xuXG4gICAgdGhpcy5hbGxXaWRnZXRCeURhdGFzZXQuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgIHZpZXcuZGF0YXNldElkcy5mb3JFYWNoKGlkID0+IHtcbiAgICAgICAgbGV0IGZvdW5kID0gKHRoaXMuZGF0YVNldE1vZGFsIGFzIGFueVtdKS5maW5kKGQgPT4gZC5kYXRhc2V0SWQgPT09IGlkLmRhdGFzZXRJZCk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZm91bmQsIGlkLmRhdGFzZXRJZCwgZmlsdGVyKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuZ2xvYmFsRGVmYXVsdEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QsIHRydWUpO1xuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICB9KTtcblxuICB9XG5cbiAgYXN5bmMgZ2V0Q29udGV4dEZpbHRlckRhdGEodmFsdWUpIHtcblxuICAgIGxldCBmaWx0ZXIgPSB7IG9wZXJhdGlvbkZpbHRlcjogeyBzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCIgfSB9O1xuICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ3N0YXJ0RGF0ZSddID0gdGhpcy5kZWZhdWx0U3RhcnREYXRlO1xuICAgIGZpbHRlci5vcGVyYXRpb25GaWx0ZXJbJ2VuZERhdGUnXSA9IHRoaXMuZGVmYXVsdEVuZERhdGU7XG4gICAgZmlsdGVyLm9wZXJhdGlvbkZpbHRlclt2YWx1ZS5vcGVyYXRvck5hbWVdID0gdGhpcy5wYXJzZUlucHV0KHZhbHVlLmRlZmF1bHRGaWx0ZXJWYWx1ZSk7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIGxldCBvYmogPSB7fTtcbiAgICBvYmpbdmFsdWUub3BlcmF0b3JOYW1lXSA9IHZhbHVlLmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiBvYmosXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcbiAgICB9O1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCBuYXZpZ2F0aW9uKTtcblxuICAgIC8vIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnID0gW107XG4gICAgYXdhaXQgdGhpcy5nZXRQYWRlRGF0YVNvdXJjZSh0cnVlKTtcbiAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB7fTtcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcblxuICAgIHRoaXMuYWxsV2lkZ2V0QnlEYXRhc2V0LmZvckVhY2godmlldyA9PiB7XG4gICAgICB2aWV3LmRhdGFzZXRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgIGxldCBmb3VuZCA9ICh0aGlzLmRhdGFTZXRNb2RhbCBhcyBhbnlbXSkuZmluZChkID0+IGQuZGF0YXNldElkID09PSBpZC5kYXRhc2V0SWQpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0RGF0YUZyb21EYXRhU2V0KGZvdW5kLCBpZC5kYXRhc2V0SWQsIGZpbHRlcikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmdsb2JhbERlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0LCB0cnVlKTtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZUlucHV0KGlucHV0KSB7XG4gICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XG5cbiAgICBpZiAoaW5wdXQuaW5jbHVkZXMoJywnKSkge1xuICAgICAgcmV0dXJuIGlucHV0LnNwbGl0KCcsJykubWFwKGl0ZW0gPT4gaXRlbS50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICB9XG5cblxuICBnZXREcmlsbGRvd25EaXNwbGF5QnlVcmxQYXJhbXMoYWxsX3ZpZXdzKSB7XG4gICAgdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2ggPSBbXTtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgIHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoID0gKHBhcmFtc1sndmlld3MnXSAmJiBwYXJhbXNbJ3ZpZXdzJ10gIT09IFwiXCIpID8gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQocGFyYW1zWyd2aWV3cyddKSkgOiBbXTtcbiAgICBhbGxfdmlld3MuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGZvciAobGV0IGVudHJ5IG9mIGVsZW1lbnQud2lkZ2V0Tm9kZSkge1xuICAgICAgICBsZXQgc2hvdWxkRGlzcGxheSA9IGZhbHNlO1xuICAgICAgICBlbnRyeS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaCh2aWV3ID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZE9iamVjdCA9IHRoaXMuZGVmYXVsdFZpZXdJZHNPblBhZ2VSZWZyZXNoLmZpbmQodmFsID0+IHZhbC52aWV3SWQgPT09IHZpZXcudmlld0lkKTtcbiAgICAgICAgICAgIGlmIChmb3VuZE9iamVjdCkge1xuICAgICAgICAgICAgICBzaG91bGREaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc2hvdWxkRGlzcGxheSkge1xuICAgICAgICAgIGVudHJ5Lm5vZGVQcm9wZXJ0aWVzLmRpc3BsYXkgPSB0cnVlO1xuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuXG4gIH1cblxuXG4gIGdldEZpbHRlcnNGb3JRdWVyeVBhcmFtcyhvcGVyYXRvcnMsIGZpbHRlcnMsIHZpZXdQYXJhbXMpIHtcbiAgICBjb25zdCBvcGVyYXRpb25GaWx0ZXIgPSBvcGVyYXRvcnMub3BlcmF0aW9uRmlsdGVyIHx8IHt9O1xuICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuXG4gICAgbGV0IGN1cnJlbnRWaWV3czogYW55W10gPSBbXTtcbiAgICBpZiAoY3VycmVudFBhcmFtc1sndmlld3MnXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudFZpZXdzID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoY3VycmVudFBhcmFtc1sndmlld3MnXSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCB2aWV3cyBwYXJhbVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJEYXRhOiBhbnkgPSB7IHZpZXdJZDogdmlld1BhcmFtcy52aWV3SWQgfTtcblxuICAgIGZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgbG9jYWxLZXkgPSBmaWx0ZXIubG9jYWxDb2x1bW47XG4gICAgICBjb25zdCBzZXJ2ZXJLZXkgPSBmaWx0ZXIuc2VydmVyQ29sdW1uO1xuICAgICAgbGV0IHZhbHVlID0gb3BlcmF0aW9uRmlsdGVyW2xvY2FsS2V5XTtcblxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICAgICAgZmlsdGVyRGF0YVtzZXJ2ZXJLZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gY3VycmVudFZpZXdzLmZpbmRJbmRleCh2ID0+IHYudmlld0lkID09PSB2aWV3UGFyYW1zLnZpZXdJZCk7XG5cbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIGN1cnJlbnRWaWV3c1tleGlzdGluZ0luZGV4XSA9IGZpbHRlckRhdGE7XG4gICAgICBjdXJyZW50Vmlld3MgPSBjdXJyZW50Vmlld3Muc2xpY2UoMCwgZXhpc3RpbmdJbmRleCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Vmlld3MucHVzaChmaWx0ZXJEYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNvZGVkVmlld3MgPSBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3VycmVudFZpZXdzKSk7XG5cbiAgICBjb25zdCBtZXJnZWRQYXJhbXMgPSB7XG4gICAgICAuLi5jdXJyZW50UGFyYW1zLFxuICAgICAgdmlld3M6IGVuY29kZWRWaWV3c1xuICAgIH07XG5cbiAgICBjb25zdCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgcXVlcnlQYXJhbXM6IG1lcmdlZFBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICB9O1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIG5hdmlnYXRpb24pO1xuICB9XG5cbiAgZ2V0RHJpbGRvd25GaWx0ZXIoZHJpbGRvd25GaWx0ZXIsIGRlZmF1bHRGaWx0ZXIpIHtcbiAgICBjb25zdCBleHBlY3RlZERhdGVGaWVsZHMgPSBbJ3JlY29yZERhdGUnLCAncmVjb3JkX2RhdGUnLCAnZXZlbnREYXRlJywgJ2V2ZW50X2RhdGUnXTtcbiAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWx0ZXIpKTtcbiAgICBjb25zdCB7IHZpZXdJZCwgLi4uZmlsdGVyZWREcmlsbGRvd24gfSA9IGRyaWxkb3duRmlsdGVyO1xuICAgIGxldCBkYXRlVmFsdWUgPSBudWxsO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGV4cGVjdGVkRGF0ZUZpZWxkcykge1xuICAgICAgaWYgKGZpbHRlcmVkRHJpbGxkb3duW2tleV0pIHtcbiAgICAgICAgZGF0ZVZhbHVlID0gZmlsdGVyZWREcmlsbGRvd25ba2V5XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRlVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gZGF0ZVZhbHVlO1xuICAgICAgcmVzdWx0Lm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gZGF0ZVZhbHVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJlZERyaWxsZG93bikge1xuICAgICAgaWYgKCFleHBlY3RlZERhdGVGaWVsZHMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICByZXN1bHQub3BlcmF0aW9uRmlsdGVyW2tleV0gPSBmaWx0ZXJlZERyaWxsZG93bltrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgfVxuXG5cbiAgZ2V0VGl0bGVQYXJhbXMoaXRlbXMpIHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBpdGVtcy5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kT2JqZWN0ID0gdGhpcy5kZWZhdWx0Vmlld0lkc09uUGFnZVJlZnJlc2guZmluZCh2YWwgPT4gdmFsLnZpZXdJZCA9PT0gZWxlbWVudC52aWV3SWQpO1xuICAgICAgaWYgKGZvdW5kT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5lbnRyaWVzKGZvdW5kT2JqZWN0KVxuICAgICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgIT09ICd2aWV3SWQnKVxuICAgICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgLy8gQ29udmVydCBrZXkgdG8gVGl0bGUgQ2FzZSB3aXRoIHNwYWNlc1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkS2V5ID0ga2V5XG4gICAgICAgICAgICAgIC5yZXBsYWNlKC9fL2csICcgJykgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdW5kZXJzY29yZXMgd2l0aCBzcGFjZXNcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcYlxcdy9nLCBjaGFyID0+IGNoYXIudG9VcHBlckNhc2UoKSk7IC8vIGNhcGl0YWxpemUgZWFjaCB3b3JkXG4gICAgICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkS2V5fSA9ICR7dmFsdWV9YDtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5qb2luKCcgfCAnKTtcblxuICAgICAgICByZXN1bHRzLnB1c2goYHwgJHtyZXN1bHR9IGApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdHMuam9pbignXFxuJyk7IC8vIG9yIHdoYXRldmVyIHNlcGFyYXRvciB5b3UgcHJlZmVyIGJldHdlZW4gbXVsdGlwbGUgcmVzdWx0c1xuICB9XG5cbn1cbiIsIjxhcHAtbG9hZGluZyAqbmdJZj1cImxvYWRpbmdNb2RhbFwiPjwvYXBwLWxvYWRpbmc+XG5cbjxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgXCIgI2R5bmFtaWNDb250YWluZXI+PC9kaXY+XG48L2Rpdj4iXX0=