qms-angular 1.1.45 → 1.1.47

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. package/bundles/qms-angular.umd.js +1703 -37
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/select-process-data/index.js +2 -0
  4. package/esm2015/lib/components/select-process-data/public-api.js +3 -0
  5. package/esm2015/lib/components/select-process-data/select-process-data.component.js +275 -0
  6. package/esm2015/lib/components/select-process-data/select-process-data.module.js +64 -0
  7. package/esm2015/lib/components/select-process-data-tree/index.js +2 -0
  8. package/esm2015/lib/components/select-process-data-tree/public-api.js +3 -0
  9. package/esm2015/lib/components/select-process-data-tree/select-process-data-tree.component.js +1134 -0
  10. package/esm2015/lib/components/select-process-data-tree/select-process-data-tree.module.js +64 -0
  11. package/esm2015/lib/model/en.js +2 -1
  12. package/esm2015/lib/model/no.js +2 -1
  13. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +7 -4
  14. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +5 -4
  15. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +2 -2
  16. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +2 -2
  17. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.js +1 -1
  18. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +2 -1
  19. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-connection.service.js +3 -3
  20. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +13 -10
  21. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +4 -4
  22. package/esm2015/public-api.js +3 -1
  23. package/fesm2015/qms-angular.js +1507 -38
  24. package/fesm2015/qms-angular.js.map +1 -1
  25. package/lib/components/select-process-data/index.d.ts +1 -0
  26. package/lib/components/select-process-data/public-api.d.ts +2 -0
  27. package/lib/components/select-process-data/select-process-data.component.d.ts +120 -0
  28. package/lib/components/select-process-data/select-process-data.module.d.ts +2 -0
  29. package/lib/components/select-process-data-tree/index.d.ts +1 -0
  30. package/lib/components/select-process-data-tree/public-api.d.ts +2 -0
  31. package/lib/components/select-process-data-tree/select-process-data-tree.component.d.ts +196 -0
  32. package/lib/components/select-process-data-tree/select-process-data-tree.module.d.ts +2 -0
  33. package/lib/model/en.d.ts +1 -0
  34. package/lib/model/no.d.ts +1 -0
  35. package/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.d.ts +1 -0
  36. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-connection.service.d.ts +1 -1
  37. package/package.json +1 -1
  38. package/public-api.d.ts +2 -0
  39. package/qms-angular.metadata.json +1 -1
  40. package/src/assets/jointjs/scss/rappid.scss +12 -1
  41. package/src/lib/components/select-process-data/select-process-data.component.scss +241 -0
  42. package/src/lib/components/select-process-data-tree/select-process-data-tree.component.scss +634 -0
@@ -370,7 +370,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
370
370
  onlyFolder: false
371
371
  };
372
372
  this.loadingRelatedData = true;
373
- forkJoin(this.relatedService.getAreaChildrenNode(null, !this.splitView, false), this.relatedService.getFolderChildren(null, !this.splitView, false)).pipe(takeUntil(this.ngUnsubcribe))
373
+ forkJoin(this.relatedService.getAreaChildrenNode(null, !this.splitView, false, this.data.enabledInterconnected), this.relatedService.getFolderChildren(null, !this.splitView, false)).pipe(takeUntil(this.ngUnsubcribe))
374
374
  .subscribe(([res1, res2]) => {
375
375
  if (res1) {
376
376
  const areas = res1.map((x) => {
@@ -430,7 +430,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
430
430
  }));
431
431
  dialogRef.componentInstance.onExpandProcessArea.subscribe((folder) => {
432
432
  this.relatedService
433
- .getAreaChildrenNode(folder.id, !this.splitView, false)
433
+ .getAreaChildrenNode(folder.id, !this.splitView, false, this.data.enabledInterconnected)
434
434
  .pipe(takeUntil(this.ngUnsubcribe))
435
435
  .subscribe((res) => {
436
436
  if (res) {
@@ -442,7 +442,8 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
442
442
  expandable: x.type === ProcessNodeType.Area,
443
443
  statusId: x.status,
444
444
  statusName: x.statusName,
445
- displayId: x.type === ProcessNodeType.Area ? 0 : x.itemNumberId
445
+ displayId: x.type === ProcessNodeType.Area ? 0 : x.itemNumberId,
446
+ itemType: x.type === ProcessNodeType.Area ? DataType.area : x.type === ProcessNodeType.Process ? DataType.process : DataType.processInterconnected
446
447
  };
447
448
  });
448
449
  this.selectProcessDocumentGlobalService.setProcessAreaChildren(areas);
@@ -587,6 +588,8 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
587
588
  case DataType.folder:
588
589
  shapeModel.relatedItem.linkUrl = `/folder/${shapeModel.relatedItem.displayId}`;
589
590
  break;
591
+ case DataType.processInterconnected:
592
+ shapeModel.relatedItem.linkUrl = `/process-interconnected/${shapeModel.relatedItem.displayId}`;
590
593
  default:
591
594
  break;
592
595
  }
@@ -947,4 +950,4 @@ QMSCKEditorBpmnComponent.ctorParameters = () => [
947
950
  QMSCKEditorBpmnComponent.propDecorators = {
948
951
  ckEditor: [{ type: Input }]
949
952
  };
950
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sVUFBVSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFF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S0FBSyw0QkFBNEIsQ0FBQyxJQUFJO2dCQUNwSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUM5RztJQUNMLENBQUM7OztZQXY3QkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLHc4Q0FBaUQ7O2FBRXBEOzs7WUExRFEsU0FBUztZQUVULHVCQUF1QjtZQVV2QixXQUFXO1lBRFgseUJBQXlCO1lBSXpCLHNCQUFzQjtZQUN0Qix3QkFBd0I7WUFFeEIsd0JBQXdCO1lBT3hCLHFDQUFxQztZQU1yQyxnQ0FBZ0M7WUEvQnJCLFlBQVk7WUFnRHZCLHNCQUFzQjtZQUN0QixzQkFBc0I7WUFDdEIsWUFBWTtZQUNaLGVBQWU7WUFyQ2YsbUJBQW1CLHVCQXdGbkIsTUFBTSxTQUFDLGVBQWU7Ozt1QkF6QzFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IENLRWRpdG9yRXZlbnRDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRXZlbnQuY29uc3RhbnRcIjtcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3RcIjtcbmltcG9ydCBndWlkSGVscGVyIGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2d1aWRIZWxwZXJcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tdGVtcGxhdGUubW9kZWxcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbiB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGlhbG9nLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZHVsZS9jb25maXJtL3Ftcy1ja2VkaXRvci1jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItYnBtbi1hcGkuc2VydmljZVwiO1xuaW1wb3J0IHsgQnBtblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZVwiO1xuaW1wb3J0IHsgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZSc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci11cGxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHsgYmFzZTY0U3RyaW5nVG9GaWxlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZmlsZUhlbHBlclwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1jb21tb24uc2VydmljZXNcIjtcbmltcG9ydCB7IFFNU0JQTU5Db25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IFFNU0NLRWRpdG9yQlBNTkZ1bmN0aW9ucyBmcm9tICcuLy4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvYnBtbi5mdW5jdGlvbic7XG5pbXBvcnQgeyBEaWFncmFtVGVtcGxhdGVzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kaWFncmFtLXRlbXBsYXRlLm1vZGVsXCI7XG5pbXBvcnQgeyBUcmVlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvdHJlZVwiO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vZGF0YS10eXBlLmVudW1cIjtcbmltcG9ydCB7IEZsb3djaGFydFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW1cIjtcbmltcG9ydCB7IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwQ29tcG9uZW50LCBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cERhdGEgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9zZWxlY3QtcHJvY2Vzcy1kb2N1bWVudFwiO1xuaW1wb3J0IHsgTW9kdWxlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9tb2R1bGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBQcm9jZXNzTm9kZVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vcHJvY2Vzcy1ub2RlLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgSVJlbGF0ZWQgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9yZWxhdGVkL21vZGVsL3JlbGF0ZWQtZGF0YS5tb2RlbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnROb2RlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kb2N1bWVudC1ub2RlLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgUHJvY2Vzc1N0YXR1cyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzU3RhdHVzLmVudW1cIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQlBNTkNvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLWNvbm5lY3Rpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgUHJvY2Vzc0RvY3VtZW50VHJlZU5vZGVEYXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wcm9jZXNzLWRvY3VtZW50LXRyZWUtbm9kZS1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBTaGFwZU1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcW1zLWJwbW4vbW9kZWxzL3NoYXBlLW1vZGVsLm1vZGVsXCI7XG5pbXBvcnQgeyBUYXJnZXRUeXBlTmFtZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvdGFyZ2V0LXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgUU1TQlBNTlNoYXBlVGFyZ2V0IH0gZnJvbSBcIi4uLy4uL21vZGVscy9xbXMtYnBtbi1zaGFwZS10YXJnZXRcIjtcbmltcG9ydCB7IENLRWRpdG9yTGlua0NvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JMaW5rLmNvbnN0YW50XCI7XG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBMaW5rQXR0YWNobWVudENvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItbGluay9hdHRhY2htZW50cy9saW5rLWF0dGFjaG1lbnQuY29tcG9uZW50XCI7XG5pbXBvcnQgUU1TQ0tFZGl0b3JQYXJhbXRlciBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItcGFyYW1ldGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVBbmNob3IgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLWFuY2hvci5tb2RlbFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItbGluay1hbmNob3ItZG9jdW1lbnQubW9kZWxcIjtcbmltcG9ydCB7IExpbmtBbmNob3IgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2xpbmstYW5jaG9yLmVudW1cIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi90b2FzdC9xbXMtY2tlZGl0b3ItdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgQlBNTkxpbmtDb21wb25lbnQgfSBmcm9tIFwiLi9saW5rL2JwbW4tbGluay5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNoYXBlTGluayB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3Ftcy1icG1uL21vZGVscy9mbG93LWNoYXJ0LXNoYXBlL3NoYXBlLWxpbmtcIjtcbmltcG9ydCBUb29sYmFyRnVuY3Rpb24gZnJvbSBcIi4uLy4uL2NvbW1vbi9icG1uL3Rvb2xiYXIuZnVuY3Rpb25cIjtcbmltcG9ydCB7IFByb2Nlc3NDbGFzc2lmaWNhdGlvblR5cGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL3Byb2Nlc3MtY2xhc3NpZmljYXRpb24tdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci10cmVlLnNlcnZpY2VcIjtcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgR2V0U2VhcmNoUHJvY2Vzc0RvY3VtZW50T3B0aW9uIH0gZnJvbSBcIi4uLy4uL21vZGVscy9nZXQtc2VhcmNoLXByb2Nlc3MtZG9jdW1lbnQtb3B0aW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncW1zLWNrZWRpdG9yLWJwbW4nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9xbXMtY2tlZGl0b3ItYnBtbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckJwbW5Db21wb25lbnQgZXh0ZW5kcyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIExBTkc6IGFueTtcbiAgICBASW5wdXQoKSBja0VkaXRvcjogYW55O1xuXG4gICAgUU1TQlBNTkNvbmZpZzogUU1TQlBNTkNvbmZpZyA9IG5ldyBRTVNCUE1OQ29uZmlnKCk7XG4gICAganNvbkNvbnRlbnQ6IHN0cmluZztcblxuICAgIGlkID0gJyc7XG4gICAgbW9kdWxlOiBudW1iZXI7XG4gICAgZW50aXR5SWQgPSAnJztcbiAgICBlZGl0b3JDb250ZW50ID0gJyc7XG5cbiAgICBicG1uOiBRTVNDS0VkaXRvckJwbW4gPSBuZXcgUU1TQ0tFZGl0b3JCcG1uKCk7XG4gICAgYnBtblRlbWxhdGVzOiBRTVNDS0VkaXRvckJwbW5UZW1wbGF0ZVtdID0gW107XG4gICAgdGVtcGxhdGU7XG4gICAgc2hhcGVNb2RlbDogU2hhcGVNb2RlbCA9IG5ldyBTaGFwZU1vZGVsKCk7XG4gICAgLyoqIHRlbXBsYXRlIGJlZm9yZSBzZWxlY3RlZCBhbHJlYWR5IGFub3RoZXIgdGVtcGxhdGUgaW4gc2VsZWN0IGJveCAodXNpbmcgZm9yIHJlc2V0IHRlbXBsYXRlKSovXG4gICAgdGVtcFRlbXBsYXRlOiBhbnk7XG4gICAgdGFyZ2V0czogUU1TQlBNTlNoYXBlVGFyZ2V0W10gPSBbXTtcbiAgICBhbmNob3JzOiBRTVNCUE1OU2hhcGVBbmNob3JbXSA9IFtdO1xuICAgIC8vIHByb2Nlc3MvZG9jdW1lbnQgY29ubmVjdGlvbiB0eXBlXG4gICAgc3BsaXRWaWV3OiBib29sZWFuO1xuICAgIHByb2Nlc3NUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xuICAgIGRvY3VtZW50VHJlZUNvbmZpZzogVHJlZUNvbmZpZztcbiAgICB0cmVlUHJvY2Vzc0RhdGE6IFByb2Nlc3NEb2N1bWVudFRyZWVOb2RlRGF0YVtdO1xuICAgIHRyZWVEb2N1bWVudERhdGE6IFByb2Nlc3NEb2N1bWVudFRyZWVOb2RlRGF0YVtdO1xuICAgIGxvYWRpbmdSZWxhdGVkRGF0YTogYm9vbGVhbjtcbiAgICBlbmFibGVkSW50ZXJjb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBicG1uU2VydmljZTogQnBtblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYnBtbkFwaVNlcnZpY2U6IFFNU0NLRWRpdG9yQnBtbkFwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbGlua1NlcnZpY2U6IFFNU0NLRWRpdG9yTGlua1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IFFNU0NLRWRpdG9yQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlOiBRTVNTZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbGF0ZWRTZXJ2aWNlOiBRTVNDS0VkaXRvckJQTU5Db25uZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudD4sXG4gICAgICAgIHByaXZhdGUgdHJlZVNlcnZpY2U6IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUU1TQ0tFZGl0b3JCcG1uRGF0YVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICAgICAgdGhpcy5tb2R1bGUgPSBkYXRhLm1vZHVsZTtcbiAgICAgICAgdGhpcy5lbnRpdHlJZCA9IGRhdGEuZW50aXR5SWQ7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29udGVudCA9IGRhdGEuZWRpdG9yQ29udGVudDtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dQcm9jZXNzRG9jdW1lbnRUcmVlRGF0YUluU3BsaXRWaWV3ID0gZGF0YS5zaG93UHJvY2Vzc0RvY3VtZW50VHJlZURhdGFJblNwbGl0VmlldztcbiAgICAgICAgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQgPSBkYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZDtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBEaWFncmFtVGVtcGxhdGVzKCk7XG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5lZGl0TW9kZSA9IEZsb3djaGFydFZpZXdNb2RlLkVkaXQ7XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5jaGFuZ2VUZW1wbGF0ZVBvcHVwQ29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNIQU5HRV9URU1QTEFURV9OT1RFO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJwbW5UZW1sYXRlcyA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGVzKCk7XG4gICAgICAgIGNvbnN0IHRlbWxhdGVzID0gdGhpcy5icG1uVGVtbGF0ZXMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGluZGV4OiB4LmluZGV4LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogeC50ZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogeC50ZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgICAgICAganNvbkNvbnRlbnQ6IHguanNvbkNvbnRlbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgW107XG5cbiAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuanNvbkNvbnRlbnQgPSBhd2FpdCB0aGlzLmdldEpzb25Db250ZW50KHRoaXMuaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnBtblNlcnZpY2UuYnVpbGREaWFncmFtKFxuICAgICAgICAgICAgdGVtbGF0ZXMsXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlLFxuICAgICAgICAgICAgJ2RlZmF1bHQgam9pbnQtdGhlbWUtYnBtbicsXG4gICAgICAgICAgICB0aGlzLmpzb25Db250ZW50LFxuICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmVkaXRNb2RlLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIFRvb2xiYXJGdW5jdGlvbi5nZXRUb29sYmFyQ29uZmlndXJhdGlvbih0aGlzLkxBTkcpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3BsaXRWaWV3ID0gdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dQcm9jZXNzRG9jdW1lbnRUcmVlRGF0YUluU3BsaXRWaWV3O1xuICAgICAgICB0aGlzLmluaXRDb25uZWN0aW9uVHlwZXMoKTtcbiAgICAgICAgdGhpcy5pbml0VGFyZ2V0KCk7XG4gICAgICAgIHRoaXMuaW5pdFByb2Nlc3NEb2N1bWVudENvbmZpZ0FuZE5vZGVEYXRhKCk7XG4gICAgfVxuXG4gICAgaW5pdENvbm5lY3Rpb25UeXBlcygpIHtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmNvbm5lY3RUeXBlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcyxcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5CUE1OLkRPQ1VNRU5UX1BST0NFU1MsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5QUk9DRVNTX0RPQ1VNRU5UX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluayxcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5CUE1OLkxJTkssXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5MSU5LX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudCxcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BVFRBQ0hNRU5ULFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgaW5pdFRhcmdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0cykge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRzLnB1c2goeyB2YWx1ZTogVGFyZ2V0VHlwZU5hbWUubmV3LCB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJHRVRfQkxBTksgfSk7XG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IHZhbHVlOiBUYXJnZXRUeXBlTmFtZS5zYW1lLCB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJHRVRfU0VMRiB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFRlbXBsYXRlcygpOiBQcm9taXNlPFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlW10+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJwbW5HZXRUZW1wbGF0ZXMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGdldEpzb25Db250ZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QnBtbkJ5SWQoaWQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuanNvbkNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2VsZWN0Q29ubmVjdFR5cGUoZXZlbnQ6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgIHRoaXMub3BlblByb2Nlc3NEb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQXR0YWNobWVudERpYWxvZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuTGluaygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFRlbXBsYXRlKCkge1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xuICAgICAgICB0aGlzLnRlbXBUZW1wbGF0ZSA9IGdyYXBoLnRvSlNPTigpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEpzb25Db250ZW50ID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF07XG4gICAgICAgIGlmIChzZWxlY3RlZEpzb25Db250ZW50KSB7XG4gICAgICAgICAgICBpZiAoZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTihKU09OLnBhcnNlKHNlbGVjdGVkSnNvbkNvbnRlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2F2ZSBCUE1OXG4gICAgYXN5bmMgc2F2ZUltYWdlQ29udGVudChncmFwaE9iamVjdCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGhPYmplY3QpO1xuICAgICAgICAgICAgdGhpcy5icG1uID0ge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkID8gdGhpcy5pZCA6IGd1aWRIZWxwZXIuZW1wdHksXG4gICAgICAgICAgICAgICAganNvbkNvbnRlbnQ6IGpzb25Db250ZW50LFxuICAgICAgICAgICAgICAgIGlzVGVtcGxhdGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogJydcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5icG1uTW9kaWZ5aW5nKHRoaXMuYnBtbilcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbWFnZUNvbnRlbnQocGFwZXI6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHBhcGVyLnRvUE5HKChpbWFnZURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTdHJpbmcgPSBpbWFnZURhdGEuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGFyclN0cmluZ1sxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25JbnNlcnRJbWFnZSgpIHtcbiAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xuICAgICAgICBjb25zdCBwYXBlciA9IHdpbmRvd1tgcGFwZXJgXTtcbiAgICAgICAgY29uc3QgY2xpZW50UmVjdCA9IHBhcGVyLnBhcGVyVG9Mb2NhbFJlY3QocGFwZXIuZ2V0Q29udGVudEJCb3goKSk7XG4gICAgICAgIGNvbnN0IGdyYXBoT2JqZWN0ID0gZ3JhcGgudG9KU09OKCk7XG4gICAgICAgIGNvbnN0IGlkID0gYXdhaXQgdGhpcy5zYXZlSW1hZ2VDb250ZW50KGdyYXBoT2JqZWN0KTtcbiAgICAgICAgY29uc3QgaW1hZ2VDb250ZW50ID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgYXdhaXQgdGhpcy5nZXRJbWFnZUNvbnRlbnQocGFwZXIpO1xuICAgICAgICBjb25zdCBmaWxlID0gYmFzZTY0U3RyaW5nVG9GaWxlKGltYWdlQ29udGVudCwgYCR7Q0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU59IyR7aWR9YCk7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlVXJsID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLnVwbG9hZEltYWdlKGZpbGUpLnRvUHJvbWlzZSgpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUFkZGl0aW9uYWxXaWR0aChncmFwaCwgcGFwZXIsIGdyYXBoT2JqZWN0LmNlbGxzKTtcbiAgICAgICAgY29uc3QgaW1hZ2VtYXAgPSBRTVNDS0VkaXRvckJQTU5GdW5jdGlvbnMudG9JbWFnZU1hcChpZCwgZ3JhcGhPYmplY3QuY2VsbHMsIGNsaWVudFJlY3QpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IGtleTogYCR7Q0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU59IyR7aWR9YCwgdmFsdWVzOiByZWxhdGl2ZVVybCwgaW1hZ2VtYXA6IGltYWdlbWFwIH1cbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldFNjcm9sbFRvcENrZWRpdG9yKHRoaXMuY2tFZGl0b3IpO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uuc2V0U2Nyb2xsVG9wRWRpdG9yQ29udGFpbmVyKHRoaXMuY2tFZGl0b3IsIHNjcm9sbFRvcCk7XG4gICAgfVxuXG4gICAgb25DbG9zZURpYWxvZygpIHtcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcbiAgICB9XG5cbiAgICBzYXZlQXNUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcbiAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xuICAgICAgICBjb25zdCBqc29uQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKTtcbiAgICAgICAgdGhpcy5icG1uID0ge1xuICAgICAgICAgICAgaWQ6IGd1aWRIZWxwZXIuZW1wdHksXG4gICAgICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXG4gICAgICAgICAgICBpc1RlbXBsYXRlOiB0cnVlLFxuICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnBtbi50ZW1wbGF0ZU5hbWUgPSB0ZW1wbGF0ZU5hbWU7XG4gICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcbiAgICAgICAgICAgIC5icG1uTW9kaWZ5aW5nKHRoaXMuYnBtbilcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnBtblNlcnZpY2UuYWRkSXRlbVRlbXBsYXRlKHJlc3VsdCwgdGhpcy5icG1uKTtcbiAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0FWRUQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLmVycm9yKHRoaXMuTEFORy5RTVNDS0VESVRPUi5TQVZFX0ZBSUxFRCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlVGVtcGxhdGUoKSB7XG4gICAgICAgIGlmICghIXRoaXMudGVtcGxhdGUuZmxvd0NoYXJ0SWQpIHtcbiAgICAgICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuYnBtbkRlbGV0ZVRlbXBsYXRlKHRoaXMudGVtcGxhdGUuZmxvd0NoYXJ0SWQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5yZW1vdmVTZWxlY3RJdGVtKHRoaXMudGVtcGxhdGUuZmxvd0NoYXJ0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5zZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLkxBTkcuUU1TQ0tFRElUT1IuREVMRVRFRCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5lcnJvcih0aGlzLkxBTkcuUU1TQ0tFRElUT1IuREVMRVRFX0ZBSUxFRCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0VGVtcGxhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBUZW1wbGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xuICAgICAgICAgICAgaWYgKGdyYXBoKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGguZnJvbUpTT04odGhpcy50ZW1wVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnBtblNlcnZpY2Uuc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dDb25maXJtRGlhbG9nKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgaXNNZXNzYWdlOiBib29sZWFuLCBjYWxsYmFjaz86IChyZXN1bHQ/OiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xuICAgICAgICBkYXRhLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIGRhdGEuY29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIGRhdGEuaXNNZXNzYWdlID0gaXNNZXNzYWdlO1xuICAgICAgICBkYXRhLmlzQ2xvc2VCdG4gPSB0cnVlO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICcxNzVweCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nUmVmXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUFkZGl0aW9uYWxXaWR0aChncmFwaDogYW55LCBwYXBlcjogYW55LCBjZWxsczogYW55W10pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGJib3ggPSBncmFwaC5nZXRDZWxsKGNlbGxzW2ldKS5maW5kVmlldyhwYXBlcikuZ2V0QkJveFRvQ2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKCk7XG4gICAgICAgICAgICBjZWxsc1tpXS5hZGRpdGlvbmFsV2lkdGggPSAwO1xuICAgICAgICAgICAgaWYgKGJib3ggJiYgY2VsbHNbaV0/LnNpemU/LndpZHRoKVxuICAgICAgICAgICAgICAgIGNlbGxzW2ldLmFkZGl0aW9uYWxXaWR0aCA9IChiYm94LndpZHRoID4gY2VsbHNbaV0uc2l6ZS53aWR0aCkgPyAoYmJveC53aWR0aCAtIGNlbGxzW2ldLnNpemUud2lkdGgpIDogMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRTaGFwZU1vZGVsKGlkOiBhbnkgPSAnJywgaXRlbVR5cGU6IGFueSA9ICcnLCBpdGVtTmFtZTogc3RyaW5nID0gJycsIHN0YXR1c05hbWU6IHN0cmluZyA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsID0gbmV3IFNoYXBlTW9kZWwoKTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZCA9IGlkO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPSBpdGVtVHlwZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1OYW1lID0gaXRlbU5hbWU7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5zdGF0dXNOYW1lID0gc3RhdHVzTmFtZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IFRhcmdldFR5cGVOYW1lLm5ldztcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY29ubmVjdGlvbiBwcm9jZXNzL2RvY3VtZW50XG4gICAgaW5pdFByb2Nlc3NEb2N1bWVudENvbmZpZ0FuZE5vZGVEYXRhKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NUcmVlQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IHRydWUsXG4gICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogJycsXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IGZhbHNlLFxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLnByb2Nlc3MsXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXG4gICAgICAgICAgICBjbG9zZUljb25Db2xvcjogJyNhNGIwZGUnLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiB0cnVlLFxuICAgICAgICAgICAgb25seUZvbGRlcjogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50VHJlZUNvbmZpZyA9IHtcbiAgICAgICAgICAgIGFsbG93U2VsZWN0Rm9sZGVyOiB0cnVlLFxuICAgICAgICAgICAgYXJlYU9mQ3VycmVudFByb2Nlc3M6ICcnLFxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiB0cnVlLFxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmRvY3VtZW50LFxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnIzRhY2FmZicsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IHRydWUsXG4gICAgICAgICAgICBvbmx5Rm9sZGVyOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IHRydWU7XG4gICAgICAgIGZvcmtKb2luKHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0QXJlYUNoaWxkcmVuTm9kZShudWxsLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKSxcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0Rm9sZGVyQ2hpbGRyZW4obnVsbCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSlcbiAgICAgICAgKS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbcmVzMSwgcmVzMl0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHJlczEubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZCA9PT0gZ3VpZEhlbHBlci5lbXB0eSA/ICcnIDogeC5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZVByb2Nlc3NEYXRhID0gYXJlYXM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlczIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJlYXMgPSByZXMyLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiAheC5wYXJlbnRIYW5kYm9va0lkID8gJycgOiB4LnBhcmVudEhhbmRib29rSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdGhpcy5pc0ZvbGRlcih4LnR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogeC50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRG9jdW1lbnREYXRhID0gYXJlYXM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nUmVsYXRlZERhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wZW5Qcm9jZXNzRG9jdW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSA9IG5ldyBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cERhdGEoKTtcbiAgICAgICAgZGF0YS5tb2R1bGVJZCA9IE1vZHVsZVR5cGUuZG9jdW1lbnRQcm9jZXNzO1xuICAgICAgICBkYXRhLm1vZHVsZU5hbWUgPSB0aGlzLkxBTkcuQlBNTi5ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICBkYXRhLnRyZWVEYXRhMSA9IHRoaXMudHJlZVByb2Nlc3NEYXRhO1xuICAgICAgICBkYXRhLnRyZWVEYXRhMiA9IHRoaXMudHJlZURvY3VtZW50RGF0YTtcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnMSA9IHRoaXMucHJvY2Vzc1RyZWVDb25maWc7XG4gICAgICAgIGRhdGEudHJlZUNvbmZpZzIgPSB0aGlzLmRvY3VtZW50VHJlZUNvbmZpZztcbiAgICAgICAgZGF0YS5zcGxpdFZpZXcgPSB0aGlzLnNwbGl0VmlldztcbiAgICAgICAgZGF0YS5pc1NlbGVjdE9uZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNzY4cHgnLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnNjkwcHgnLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1hdC1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWFyY2guc3Vic2NyaWJlKGFzeW5jIChrZXl3b3JkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmICgha2V5d29yZCB8fCBrZXl3b3JkLnRyaW0oKSA9PT0gJycpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBsZXQgZ2V0U2VhcmNoT3B0aW9uID0gbmV3IEdldFNlYXJjaFByb2Nlc3NEb2N1bWVudE9wdGlvbih0cnVlLCB0cnVlLCB0aGlzLmRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGF3YWl0IHRoaXMudHJlZVNlcnZpY2UuZ2V0U2VhcmNoUHJvY2Vzc0RvY3VtZW50KGtleXdvcmQudHJpbSgpLCBnZXRTZWFyY2hPcHRpb24pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldFNlYXJjaFJlbGF0ZWQoc2VhcmNoUmVzdWx0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uRXhwYW5kUHJvY2Vzc0FyZWEuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QXJlYUNoaWxkcmVuTm9kZShmb2xkZXIuaWQsICF0aGlzLnNwbGl0VmlldywgZmFsc2UpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJlYXMgPSByZXMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHgudHlwZSA9PT0gUHJvY2Vzc05vZGVUeXBlLkFyZWEgPyB4LmlkLnRvU3RyaW5nKCkgOiB4LnByb2Nlc3NJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IHguc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiB4LnN0YXR1c05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IDAgOiB4Lml0ZW1OdW1iZXJJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRQcm9jZXNzQXJlYUNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRGb2xkZXIuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ2hpbGRyZW4oZm9sZGVyLmlkLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5nZXRQYXJlbnRJZCh4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSkgPyB4LnR5cGUgOiBmb2xkZXIubGV2ZWxUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldEZvbGRlckNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWxlY3RGb2xkZXJJdGVtLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9sZGVyLml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QXJlYUNvbnRlbnQoZm9sZGVyLmlkLCBmYWxzZSwgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5wcm9jZXNzSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGVsZS5wcm9jZXNzTnVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogZWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogZWxlLnByb2Nlc3NDbGFzc2lmaWNhdGlvbiA9PT0gUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMuUHJvY2Vzc2VzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZWxlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHRoaXMuZ2V0RGlzbGF5TmFtZU9mUHJvY2Vzc1N0YXR1cyhlbGUuc3RhdHVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBmb2xkZXIuaXRlbU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U3BsaXR2aWV3VmFsdWUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRlci5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ29udGVudChmb2xkZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBlbGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBlbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBEYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IGVsZS5zdGF0dXNOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGZvbGRlci5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogZm9sZGVyLmxldmVsVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKChvYmouaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MgfHwgb2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQpID8gb2JqLml0ZW1OdW1iZXJJZCA6IG9iai5pZCwgb2JqLml0ZW1UeXBlLCBvYmouaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAob2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KG9iai5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBEb2N1bW5ldCBQcm9jZXNzIFN1cHBvcnQgRnVuY1xuICAgIGlzRm9sZGVyKHR5cGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkb2N1bWVudFR5cGVzID0gW1xuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5Eb2N1bWVudCxcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuRmlsZURvY3VtZW50LFxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5MaW5rRG9jdW1lbnQsXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLlNob3J0Y3V0RG9jdW1lbnRcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuICFkb2N1bWVudFR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgIH1cblxuICAgIGdldFBhcmVudElkKGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2xkZXIoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuICFpdGVtLnBhcmVudEhhbmRib29rSWQgPyAnJyA6IGl0ZW0ucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXRlbS5wYXJlbnRGb2xkZXJJZCA/ICcnIDogaXRlbS5wYXJlbnRGb2xkZXJJZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldERpc2xheU5hbWVPZlByb2Nlc3NTdGF0dXMoc3RhdHVzOiBudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5pblByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLklOX1BST0dSRVNTJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5zZW5kVG9BcHByb3ZhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5TRU5EX1RPX0FQUFJPVkFMJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5hcHByb3ZlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5BUFBST1ZFRCc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMudW5kZXJSZXZpc2lvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTkRFUl9SRVZJU0lPTic7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuZGVsZXRlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5ERUxFVEVEJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5yZXZpZXdPckhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uSEVBUklORyc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuYXJjaGl2ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uQVJDSElWRUQnO1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdQUk9DRVNTLkhFQVJJTkcnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTktOT1dOJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmtVUkwoc2hhcGVNb2RlbDogU2hhcGVNb2RlbCkge1xuICAgICAgICBzd2l0Y2ggKHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9kb2N1bWVudC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9wcm9jZXNzLWRldGFpbC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9hcmVhL2RldGFpbC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgL2ZvbGRlci8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgQXR0YWNobWVudCBcbiAgICBvcGVuQXR0YWNobWVudERpYWxvZygpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclBhcmFtdGVyKCk7XG4gICAgICAgIGRhdGEubW9kdWxlID0gdGhpcy5tb2R1bGU7XG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLmVudGl0eUlkO1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oTGlua0F0dGFjaG1lbnRDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnNjUwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKG51bGwsIDAsIHJlc3VsdC50aXRsZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gcmVzdWx0LnVybDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5tYXRJY29uID0gJ3RleHRfc25pcHBldCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9BVFRBQ0hNRU5UO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNoYXBlQWN0aXZpdHkoZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICBpZiAoISFhdHRyaWJ1dGVzLmxpbmtVcmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGFGcm9tU2hhcGVBdHJyaWJ1dGUoYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IGF0dHJpYnV0ZXMubGlua1RhcmdldDtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCBzaGFwZSBjb25uZWN0IGxhYmVsXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5zaGFwZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zaGFwZU1vZGVsLnNoYXBlPy5jb25uZWN0aW9uVHlwZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9BVFRBQ0hNRU5UO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9MSU5LO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERhdGFGcm9tU2hhcGVBdHJyaWJ1dGUoc2hhcGVBdHRyaWJ1dGU6IGFueSkge1xuICAgICAgICBpZiAoISFzaGFwZUF0dHJpYnV0ZS5saW5rVXJsKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKCcnLCAnJywgc2hhcGVBdHRyaWJ1dGUubGlua1RpdGxlKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHNoYXBlQXR0cmlidXRlLmxpbmtVcmw7XG4gICAgICAgICAgICBjb25zdCBoYXNoSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgICAgICAgICAgbGV0IGRvY3VtZW50VHlwZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoISFzaGFwZUF0dHJpYnV0ZS5jb25uZWN0aW9uVHlwZUlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBzaGFwZUF0dHJpYnV0ZS5jb25uZWN0aW9uVHlwZUlkO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50VHlwZSA9IHRoaXMuZ2V0UmVsYXRlZEl0ZW1CeVNoYXBlQ29ubmVjdGlvblR5cGUoc2hhcGVBdHRyaWJ1dGUuY29ubmVjdGlvblR5cGVJZCwgdXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50VHlwZSA9IHRoaXMuZ2V0RG9jdW1lbnRUeXBlKHVybCk7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmtJZCA9IHRoaXMuZ2V0TGlua0lkKHVybCwgZG9jdW1lbnRUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWQgPSBsaW5rSWQgPyArbGlua0lkIDogLTE7XG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPSBkb2N1bWVudFR5cGU7XG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gc2hhcGVBdHRyaWJ1dGUubGlua1RhcmdldDtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBsb2dvXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudClcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubWF0SWNvbiA9ICd0ZXh0X3NuaXBwZXQnO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLlNWR0ljb24gPSB0aGlzLmdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZShkb2N1bWVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIExpbmtcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmxpbmsubGluayA9IHVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIWxpbmtJZCAmJiBkb2N1bWVudFR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQgJiYgaGFzaEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuYW5jaG9yLmFuY2hvclZhbHVlID0gdXJsLnN1YnN0cihoYXNoSW5kZXggKyAxLCB1cmwubGVuZ3RoIC0gaGFzaEluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KGxpbmtJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRMaW5rSWQodXJsOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlKSB7XG4gICAgICAgIGxldCBwYXJ0aWFsVXJsSW5kZXggPSAwO1xuICAgICAgICBsZXQgcGFydGlhbFVybExlbmd0aCA9IDA7XG4gICAgICAgIGxldCBpZCA9ICcnO1xuICAgICAgICBsZXQgZnJvbSA9IDA7XG4gICAgICAgIGxldCB1cmxMb3dlckNhc2UgPSAhIXVybCA/IHVybC50b0xvd2VyQ2FzZSgpIDogJyc7XG5cbiAgICAgICAgY29uc3QgcGFydGlhbFVybCA9IHRoaXMuZ2V0UGFydGlhbFVybCh0eXBlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBoYXNoSW5kZXggPSB1cmxMb3dlckNhc2UuaW5kZXhPZignIycpO1xuXG4gICAgICAgIGlmICghIXBhcnRpYWxVcmwpIHtcbiAgICAgICAgICAgIHBhcnRpYWxVcmxJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKHBhcnRpYWxVcmwpO1xuXG4gICAgICAgICAgICBwYXJ0aWFsVXJsTGVuZ3RoID0gcGFydGlhbFVybC5sZW5ndGg7XG4gICAgICAgICAgICBmcm9tID0gcGFydGlhbFVybEluZGV4ICsgcGFydGlhbFVybExlbmd0aDtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQgJiYgaGFzaEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSwgaGFzaEluZGV4IC0gZnJvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pLmluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZUludChpZCwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgIGlkID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cblxuICAgIGdldFBhcnRpYWxVcmwodHlwZTogRGF0YVR5cGUpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX0lOVEVSQ09OTkVDVEVEX1BBUlRJQUxfVVJMO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5BUkVBX1BBUlRJQUxfVVJMO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmVsYXRlZEl0ZW1CeVNoYXBlQ29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGVJZDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSwgdXJsOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoIChjb25uZWN0aW9uVHlwZUlkKSB7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RG9jdW1lbnRUeXBlKHVybCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RG9jdW1lbnRUeXBlKHVybDogc3RyaW5nKSB7XG4gICAgICAgIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5wcm9jZXNzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfSU5URVJDT05ORUNURURfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmFyZWE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuZm9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldEFuY2hvckRvY3VtZW50KGRvY3VtZW50SWQpIHtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmlzQW5jaG9yTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBbmNob3JEb2N1bWVudExpc3QoZG9jdW1lbnRJZClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkb2N1bWVudHMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcnMgPSB0aGlzLmV4dHJhY3REb2N1bWVudEFuY2hvcnMoZG9jdW1lbnRzIHx8IFtdKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuaXNBbmNob3JMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleHRyYWN0RG9jdW1lbnRBbmNob3JzKGFuY2hvckRvY3VtZW50OiBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudFtdKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvcnM6IFFNU0JQTU5TaGFwZUFuY2hvcltdID0gW3sgdmFsdWU6IDAsIHZpZXdWYWx1ZTogJycsIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLkJsYW5rIH1dO1xuICAgICAgICBsZXQgaWQgPSAzO1xuICAgICAgICBpZiAoYW5jaG9yRG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGFuY2hvckRvY3VtZW50LmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gZS5yaWNoVGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21Db250ZW50ID0gZGl2O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFUYWdzID0gZG9tQ29udGVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpO1xuICAgICAgICAgICAgICAgIGlmIChhVGFncykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFUYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWcgPSBhVGFnc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYW5jaG9ycy5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguYW5jaG9yVmFsdWUgPT09IHRhZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGFnLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JWYWx1ZTogdGFnLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SX0FUVEFDSE1FTlQsXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5BdHRhY2htZW50XG4gICAgICAgIH0pO1xuICAgICAgICBhbmNob3JzLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1JfUkVMQVRFRF9ET0NVTUVOVCxcbiAgICAgICAgICAgIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLlJlbGF0ZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhbmNob3JzO1xuICAgIH1cblxuICAgIGdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZShkYXRhVHlwZTogRGF0YVR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50JztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwcm9jZXNzJztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxuICAgICAgICAgICAgICAgIHJldHVybiAncHJvY2Vzc19pbnRlcmNvbm5lY3RlZCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbG9hZEFuY2hvckRvY3VtZW50KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwgJiYgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtICYmIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbkxpbmsoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgU2hhcGVMaW5rKCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQlBNTkxpbmtDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAnMzUwcHgnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMjQ1cHgnLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKG5ld0xpbmspID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdMaW5rKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmsgPSBuZXdMaW5rLmxpbms7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0xJTks7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUNvbm5lY3Rpb24oc2VsZWN0ZWRDb25uZWN0aW9uVHlwZTogYW55KSB7XG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgIGlmIChzZWxlY3RlZENvbm5lY3Rpb25UeXBlID09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3MpIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XG4gICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfRE9DVU1FTlRfT1JfUFJPQ0VTUztcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENvbm5lY3Rpb25UeXBlID09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfTElOSztcbiAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQ29ubmVjdGlvblR5cGUgPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50KSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aXRsZSwgY29udGVudCwgZmFsc2UsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IHRydWUgfHwgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0NvbmZpcm1lZCA9PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVXJsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVGFyZ2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2Nvbm5lY3Rpb25UeXBlSWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlU2hhcGVUYXJnZXQodGFyZ2V0SWQ6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSB0YXJnZXRJZDtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbFZpZXcubW9kZWwucHJvcCgnbGlua1RhcmdldCcsIHRhcmdldElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVTaGFwZUFuY2hvcihhbmNob3JWYWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmFuY2hvci5hbmNob3JWYWx1ZSA9IGFuY2hvclZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMfSR7dGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH0jJHthbmNob3JWYWx1ZX1gXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVXJsJywgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFwU2hhcGVEYXRhKCkge1xuICAgICAgICBpZiAoISF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSkge1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnbGlua1VybCcsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmtcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsIDogdGhpcy5zaGFwZU1vZGVsLmxpbmsubGluayk7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdsaW5rVGFyZ2V0JywgVGFyZ2V0VHlwZU5hbWUubmV3KTtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtUaXRsZScsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmtcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtTmFtZSA6ICcnKTtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2Nvbm5lY3Rpb25UeXBlSWQnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
953
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sVUFBVSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFF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ZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZVwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JFdmVudENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudFwiO1xuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckZsb3djaGFydC5jb25zdFwiO1xuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlclwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi10ZW1wbGF0ZS5tb2RlbFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4ubW9kZWxcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1kaWFsb2cubW9kZWxcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kdWxlL2NvbmZpcm0vcW1zLWNrZWRpdG9yLWNvbmZpcm0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcW1zLWNrZWRpdG9yLWJhc2UuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5BcGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLWFwaS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBCcG1uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItYnBtbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zL3NoYXBlLWZsb3ctY2hhcnQtY29ubmVjdGlvbi10eXBlJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkRhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXVwbG9hZC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBiYXNlNjRTdHJpbmdUb0ZpbGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2hlbHBlci9maWxlSGVscGVyXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckNvbW1vblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWNvbW1vbi5zZXJ2aWNlc1wiO1xuaW1wb3J0IHsgUU1TQlBNTkNvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWJwbW4tY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgUU1TQ0tFZGl0b3JCUE1ORnVuY3Rpb25zIGZyb20gJy4vLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy9icG1uLmZ1bmN0aW9uJztcbmltcG9ydCB7IERpYWdyYW1UZW1wbGF0ZXMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RpYWdyYW0tdGVtcGxhdGUubW9kZWxcIjtcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy90cmVlXCI7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bVwiO1xuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2Zsb3djaGFydC12aWV3LW1vZGUuZW51bVwiO1xuaW1wb3J0IHsgUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSwgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQsIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50XCI7XG5pbXBvcnQgeyBNb2R1bGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL21vZHVsZS10eXBlLmVudW1cIjtcbmltcG9ydCB7IFByb2Nlc3NOb2RlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzLW5vZGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBJUmVsYXRlZCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3JlbGF0ZWQvbW9kZWwvcmVsYXRlZC1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBQcm9jZXNzU3RhdHVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL3Byb2Nlc3NTdGF0dXMuZW51bVwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCUE1OQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4tY29ubmVjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQcm9jZXNzRG9jdW1lbnRUcmVlTm9kZURhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Byb2Nlc3MtZG9jdW1lbnQtdHJlZS1ub2RlLWRhdGEubW9kZWxcIjtcbmltcG9ydCB7IFNoYXBlTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9xbXMtYnBtbi9tb2RlbHMvc2hhcGUtbW9kZWwubW9kZWxcIjtcbmltcG9ydCB7IFRhcmdldFR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy90YXJnZXQtdHlwZS5lbnVtXCI7XG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVUYXJnZXQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLXRhcmdldFwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JMaW5rQ29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckxpbmsuY29uc3RhbnRcIjtcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IExpbmtBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uL3Ftcy1ja2VkaXRvci1saW5rL2F0dGFjaG1lbnRzL2xpbmstYXR0YWNobWVudC5jb21wb25lbnRcIjtcbmltcG9ydCBRTVNDS0VkaXRvclBhcmFtdGVyIGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1wYXJhbWV0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFFNU0JQTU5TaGFwZUFuY2hvciB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWJwbW4tc2hhcGUtYW5jaG9yLm1vZGVsXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1saW5rLWFuY2hvci1kb2N1bWVudC5tb2RlbFwiO1xuaW1wb3J0IHsgTGlua0FuY2hvciB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvbGluay1hbmNob3IuZW51bVwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3RvYXN0L3Ftcy1ja2VkaXRvci10b2FzdC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBCUE1OTGlua0NvbXBvbmVudCB9IGZyb20gXCIuL2xpbmsvYnBtbi1saW5rLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2hhcGVMaW5rIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcW1zLWJwbW4vbW9kZWxzL2Zsb3ctY2hhcnQtc2hhcGUvc2hhcGUtbGlua1wiO1xuaW1wb3J0IFRvb2xiYXJGdW5jdGlvbiBmcm9tIFwiLi4vLi4vY29tbW9uL2JwbW4vdG9vbGJhci5mdW5jdGlvblwiO1xuaW1wb3J0IHsgUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vcHJvY2Vzcy1jbGFzc2lmaWNhdGlvbi10eXBlLmVudW1cIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXRyZWUuc2VydmljZVwiO1xuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XG5pbXBvcnQgeyBHZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnRPcHRpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2dldC1zZWFyY2gtcHJvY2Vzcy1kb2N1bWVudC1vcHRpb25cIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdxbXMtY2tlZGl0b3ItYnBtbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9xbXMtY2tlZGl0b3ItYnBtbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgTEFORzogYW55O1xuICAgIEBJbnB1dCgpIGNrRWRpdG9yOiBhbnk7XG5cbiAgICBRTVNCUE1OQ29uZmlnOiBRTVNCUE1OQ29uZmlnID0gbmV3IFFNU0JQTU5Db25maWcoKTtcbiAgICBqc29uQ29udGVudDogc3RyaW5nO1xuXG4gICAgaWQgPSAnJztcbiAgICBtb2R1bGU6IG51bWJlcjtcbiAgICBlbnRpdHlJZCA9ICcnO1xuICAgIGVkaXRvckNvbnRlbnQgPSAnJztcblxuICAgIGJwbW46IFFNU0NLRWRpdG9yQnBtbiA9IG5ldyBRTVNDS0VkaXRvckJwbW4oKTtcbiAgICBicG1uVGVtbGF0ZXM6IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlW10gPSBbXTtcbiAgICB0ZW1wbGF0ZTtcbiAgICBzaGFwZU1vZGVsOiBTaGFwZU1vZGVsID0gbmV3IFNoYXBlTW9kZWwoKTtcbiAgICAvKiogdGVtcGxhdGUgYmVmb3JlIHNlbGVjdGVkIGFscmVhZHkgYW5vdGhlciB0ZW1wbGF0ZSBpbiBzZWxlY3QgYm94ICh1c2luZyBmb3IgcmVzZXQgdGVtcGxhdGUpKi9cbiAgICB0ZW1wVGVtcGxhdGU6IGFueTtcbiAgICB0YXJnZXRzOiBRTVNCUE1OU2hhcGVUYXJnZXRbXSA9IFtdO1xuICAgIGFuY2hvcnM6IFFNU0JQTU5TaGFwZUFuY2hvcltdID0gW107XG4gICAgLy8gcHJvY2Vzcy9kb2N1bWVudCBjb25uZWN0aW9uIHR5cGVcbiAgICBzcGxpdFZpZXc6IGJvb2xlYW47XG4gICAgcHJvY2Vzc1RyZWVDb25maWc6IFRyZWVDb25maWc7XG4gICAgZG9jdW1lbnRUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xuICAgIHRyZWVQcm9jZXNzRGF0YTogUHJvY2Vzc0RvY3VtZW50VHJlZU5vZGVEYXRhW107XG4gICAgdHJlZURvY3VtZW50RGF0YTogUHJvY2Vzc0RvY3VtZW50VHJlZU5vZGVEYXRhW107XG4gICAgbG9hZGluZ1JlbGF0ZWREYXRhOiBib29sZWFuO1xuICAgIGVuYWJsZWRJbnRlcmNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGJwbW5TZXJ2aWNlOiBCcG1uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBicG1uQXBpU2VydmljZTogUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsaW5rU2VydmljZTogUU1TQ0tFZGl0b3JMaW5rU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVsYXRlZFNlcnZpY2U6IFFNU0NLRWRpdG9yQlBNTkNvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50PixcbiAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBRTVNDS0VkaXRvckJwbW5EYXRhXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgICAgICB0aGlzLm1vZHVsZSA9IGRhdGEubW9kdWxlO1xuICAgICAgICB0aGlzLmVudGl0eUlkID0gZGF0YS5lbnRpdHlJZDtcbiAgICAgICAgdGhpcy5lZGl0b3JDb250ZW50ID0gZGF0YS5lZGl0b3JDb250ZW50O1xuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXcgPSBkYXRhLnNob3dQcm9jZXNzRG9jdW1lbnRUcmVlRGF0YUluU3BsaXRWaWV3O1xuICAgICAgICB0aGlzLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCA9IGRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gbmV3IERpYWdyYW1UZW1wbGF0ZXMoKTtcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmVkaXRNb2RlID0gRmxvd2NoYXJ0Vmlld01vZGUuRWRpdDtcblxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmNoYW5nZVRlbXBsYXRlUG9wdXBDb250ZW50ID0gdGhpcy5MQU5HLkJQTU4uQ0hBTkdFX1RFTVBMQVRFX05PVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYnBtblRlbWxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcbiAgICAgICAgY29uc3QgdGVtbGF0ZXMgPSB0aGlzLmJwbW5UZW1sYXRlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IHguaW5kZXgsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBmbG93Q2hhcnRJZDogeC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDogeC5qc29uQ29udGVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXTtcblxuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5qc29uQ29udGVudCA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbnRlbnQodGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5icG1uU2VydmljZS5idWlsZERpYWdyYW0oXG4gICAgICAgICAgICB0ZW1sYXRlcyxcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUsXG4gICAgICAgICAgICAnZGVmYXVsdCBqb2ludC10aGVtZS1icG1uJyxcbiAgICAgICAgICAgIHRoaXMuanNvbkNvbnRlbnQsXG4gICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuZWRpdE1vZGUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgVG9vbGJhckZ1bmN0aW9uLmdldFRvb2xiYXJDb25maWd1cmF0aW9uKHRoaXMuTEFORylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zcGxpdFZpZXcgPSB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXc7XG4gICAgICAgIHRoaXMuaW5pdENvbm5lY3Rpb25UeXBlcygpO1xuICAgICAgICB0aGlzLmluaXRUYXJnZXQoKTtcbiAgICAgICAgdGhpcy5pbml0UHJvY2Vzc0RvY3VtZW50Q29uZmlnQW5kTm9kZURhdGEoKTtcbiAgICB9XG5cbiAgICBpbml0Q29ubmVjdGlvblR5cGVzKCkge1xuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuY29ubmVjdFR5cGVzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzLFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uRE9DVU1FTlRfUFJPQ0VTUyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLlBST0NFU1NfRE9DVU1FTlRfQ09OTkVDVElPTl9HVUlERUxJTkUsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rLFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uTElOSyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkxJTktfQ09OTkVDVElPTl9HVUlERUxJTkUsXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50LFxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFUVEFDSE1FTlQsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBpbml0VGFyZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXRzKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IHZhbHVlOiBUYXJnZXRUeXBlTmFtZS5uZXcsIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUkdFVF9CTEFOSyB9KTtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0cy5wdXNoKHsgdmFsdWU6IFRhcmdldFR5cGVOYW1lLnNhbWUsIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUkdFVF9TRUxGIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0VGVtcGxhdGVzKCk6IFByb21pc2U8UU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGVbXT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcbiAgICAgICAgICAgICAgICAuYnBtbkdldFRlbXBsYXRlcygpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SnNvbkNvbnRlbnQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRCcG1uQnlJZChpZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5qc29uQ29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZWxlY3RDb25uZWN0VHlwZShldmVudDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUHJvY2Vzc0RvY3VtZW50KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5BdHRhY2htZW50RGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5MaW5rKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0VGVtcGxhdGUoKSB7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIHRoaXMudGVtcFRlbXBsYXRlID0gZ3JhcGgudG9KU09OKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSnNvbkNvbnRlbnQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSnNvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIGlmIChncmFwaCkge1xuICAgICAgICAgICAgICAgIGdyYXBoLmZyb21KU09OKEpTT04ucGFyc2Uoc2VsZWN0ZWRKc29uQ29udGVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzYXZlIEJQTU5cbiAgICBhc3luYyBzYXZlSW1hZ2VDb250ZW50KGdyYXBoT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaE9iamVjdCk7XG4gICAgICAgICAgICB0aGlzLmJwbW4gPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPyB0aGlzLmlkIDogZ3VpZEhlbHBlci5lbXB0eSxcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGdldEltYWdlQ29udGVudChwYXBlcjogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgcGFwZXIudG9QTkcoKGltYWdlRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclN0cmluZyA9IGltYWdlRGF0YS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoYXJyU3RyaW5nWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkluc2VydEltYWdlKCkge1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIGNvbnN0IHBhcGVyID0gd2luZG93W2BwYXBlcmBdO1xuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID0gcGFwZXIucGFwZXJUb0xvY2FsUmVjdChwYXBlci5nZXRDb250ZW50QkJveCgpKTtcbiAgICAgICAgY29uc3QgZ3JhcGhPYmplY3QgPSBncmFwaC50b0pTT04oKTtcbiAgICAgICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnNhdmVJbWFnZUNvbnRlbnQoZ3JhcGhPYmplY3QpO1xuICAgICAgICBjb25zdCBpbWFnZUNvbnRlbnQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBhd2FpdCB0aGlzLmdldEltYWdlQ29udGVudChwYXBlcik7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBiYXNlNjRTdHJpbmdUb0ZpbGUoaW1hZ2VDb250ZW50LCBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVVcmwgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkSW1hZ2UoZmlsZSkudG9Qcm9taXNlKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoLCBwYXBlciwgZ3JhcGhPYmplY3QuY2VsbHMpO1xuICAgICAgICBjb25zdCBpbWFnZW1hcCA9IFFNU0NLRWRpdG9yQlBNTkZ1bmN0aW9ucy50b0ltYWdlTWFwKGlkLCBncmFwaE9iamVjdC5jZWxscywgY2xpZW50UmVjdCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsga2V5OiBgJHtDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTn0jJHtpZH1gLCB2YWx1ZXM6IHJlbGF0aXZlVXJsLCBpbWFnZW1hcDogaW1hZ2VtYXAgfVxuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcbiAgICB9XG5cbiAgICBvbkNsb3NlRGlhbG9nKCkge1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgIH1cblxuICAgIHNhdmVBc1RlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xuICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xuICAgICAgICB0aGlzLmJwbW4gPSB7XG4gICAgICAgICAgICBpZDogZ3VpZEhlbHBlci5lbXB0eSxcbiAgICAgICAgICAgIGpzb25Db250ZW50OiBqc29uQ29udGVudCxcbiAgICAgICAgICAgIGlzVGVtcGxhdGU6IHRydWUsXG4gICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6ICcnXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5icG1uLnRlbXBsYXRlTmFtZSA9IHRlbXBsYXRlTmFtZTtcbiAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5hZGRJdGVtVGVtcGxhdGUocmVzdWx0LCB0aGlzLmJwbW4pO1xuICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5TQVZFRCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UuZXJyb3IodGhpcy5MQU5HLlFNU0NLRURJVE9SLlNBVkVfRkFJTEVEKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGVUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZCkge1xuICAgICAgICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC5icG1uRGVsZXRlVGVtcGxhdGUodGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnJlbW92ZVNlbGVjdEl0ZW0odGhpcy50ZW1wbGF0ZS5mbG93Q2hhcnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVEKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLmVycm9yKHRoaXMuTEFORy5RTVNDS0VESVRPUi5ERUxFVEVfRkFJTEVEKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGVtcFRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgICAgICAgICBpZiAoZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTih0aGlzLnRlbXBUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5icG1uU2VydmljZS5zZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd0NvbmZpcm1EaWFsb2codGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBpc01lc3NhZ2U6IGJvb2xlYW4sIGNhbGxiYWNrPzogKHJlc3VsdD86IGFueSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgPSBuZXcgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhKCk7XG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgZGF0YS5pc01lc3NhZ2UgPSBpc01lc3NhZ2U7XG4gICAgICAgIGRhdGEuaXNDbG9zZUJ0biA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzE3NXB4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWZcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQWRkaXRpb25hbFdpZHRoKGdyYXBoOiBhbnksIHBhcGVyOiBhbnksIGNlbGxzOiBhbnlbXSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgYmJveCA9IGdyYXBoLmdldENlbGwoY2VsbHNbaV0pLmZpbmRWaWV3KHBhcGVyKS5nZXRCQm94VG9DYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoKTtcbiAgICAgICAgICAgIGNlbGxzW2ldLmFkZGl0aW9uYWxXaWR0aCA9IDA7XG4gICAgICAgICAgICBpZiAoYmJveCAmJiBjZWxsc1tpXT8uc2l6ZT8ud2lkdGgpXG4gICAgICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gKGJib3gud2lkdGggPiBjZWxsc1tpXS5zaXplLndpZHRoKSA/IChiYm94LndpZHRoIC0gY2VsbHNbaV0uc2l6ZS53aWR0aCkgOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdFNoYXBlTW9kZWwoaWQ6IGFueSA9ICcnLCBpdGVtVHlwZTogYW55ID0gJycsIGl0ZW1OYW1lOiBzdHJpbmcgPSAnJywgc3RhdHVzTmFtZTogc3RyaW5nID0gbnVsbCkge1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gaWQ7XG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbU5hbWUgPSBpdGVtTmFtZTtcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnN0YXR1c05hbWUgPSBzdGF0dXNOYW1lO1xuICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb25uZWN0aW9uIHByb2Nlc3MvZG9jdW1lbnRcbiAgICBpbml0UHJvY2Vzc0RvY3VtZW50Q29uZmlnQW5kTm9kZURhdGEoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1RyZWVDb25maWcgPSB7XG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogdHJ1ZSxcbiAgICAgICAgICAgIGFyZWFPZkN1cnJlbnRQcm9jZXNzOiAnJyxcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUucHJvY2VzcyxcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnI2E0YjBkZScsXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IHRydWUsXG4gICAgICAgICAgICBvbmx5Rm9sZGVyOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnID0ge1xuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IHRydWUsXG4gICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogJycsXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuZG9jdW1lbnQsXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IGZhbHNlLFxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgb3Blbkljb25Db2xvcjogJyMxOTU0QTknLFxuICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcjNGFjYWZmJyxcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcbiAgICAgICAgICAgIG9ubHlGb2xkZXI6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9hZGluZ1JlbGF0ZWREYXRhID0gdHJ1ZTtcbiAgICAgICAgZm9ya0pvaW4odGhpcy5yZWxhdGVkU2VydmljZS5nZXRBcmVhQ2hpbGRyZW5Ob2RlKG51bGwsICF0aGlzLnNwbGl0VmlldywgZmFsc2UsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQpLFxuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZS5nZXRGb2xkZXJDaGlsZHJlbihudWxsLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKVxuICAgICAgICApLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtyZXMxLCByZXMyXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzMS5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkID09PSBndWlkSGVscGVyLmVtcHR5ID8gJycgOiB4LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlUHJvY2Vzc0RhdGEgPSBhcmVhcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzMikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHJlczIubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6ICF4LnBhcmVudEhhbmRib29rSWQgPyAnJyA6IHgucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB4LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEb2N1bWVudERhdGEgPSBhcmVhcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlblByb2Nlc3NEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhID0gbmV3IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSgpO1xuICAgICAgICBkYXRhLm1vZHVsZUlkID0gTW9kdWxlVHlwZS5kb2N1bWVudFByb2Nlc3M7XG4gICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5CUE1OLkRPQ1VNRU5UX1BST0NFU1M7XG4gICAgICAgIGRhdGEudHJlZURhdGExID0gdGhpcy50cmVlUHJvY2Vzc0RhdGE7XG4gICAgICAgIGRhdGEudHJlZURhdGEyID0gdGhpcy50cmVlRG9jdW1lbnREYXRhO1xuICAgICAgICBkYXRhLnRyZWVDb25maWcxID0gdGhpcy5wcm9jZXNzVHJlZUNvbmZpZztcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnMiA9IHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnO1xuICAgICAgICBkYXRhLnNwbGl0VmlldyA9IHRoaXMuc3BsaXRWaWV3O1xuICAgICAgICBkYXRhLmlzU2VsZWN0T25lID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICc3NjhweCcsXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICc2OTBweCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNlYXJjaC5zdWJzY3JpYmUoYXN5bmMgKGtleXdvcmQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFrZXl3b3JkIHx8IGtleXdvcmQudHJpbSgpID09PSAnJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGxldCBnZXRTZWFyY2hPcHRpb24gPSBuZXcgR2V0U2VhcmNoUHJvY2Vzc0RvY3VtZW50T3B0aW9uKHRydWUsIHRydWUsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gYXdhaXQgdGhpcy50cmVlU2VydmljZS5nZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnQoa2V5d29yZC50cmltKCksIGdldFNlYXJjaE9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChzZWFyY2hSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRQcm9jZXNzQXJlYS5zdWJzY3JpYmUoKGZvbGRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBcmVhQ2hpbGRyZW5Ob2RlKGZvbGRlci5pZCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSwgdGhpcy5kYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHJlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IHguaWQudG9TdHJpbmcoKSA6IHgucHJvY2Vzc0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogeC5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8gMCA6IHguaXRlbU51bWJlcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IERhdGFUeXBlLmFyZWEgOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5Qcm9jZXNzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRQcm9jZXNzQXJlYUNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRGb2xkZXIuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ2hpbGRyZW4oZm9sZGVyLmlkLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5nZXRQYXJlbnRJZCh4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSkgPyB4LnR5cGUgOiBmb2xkZXIubGV2ZWxUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldEZvbGRlckNoaWxkcmVuKGFyZWFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWxlY3RGb2xkZXJJdGVtLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9sZGVyLml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0QXJlYUNvbnRlbnQoZm9sZGVyLmlkLCBmYWxzZSwgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5wcm9jZXNzSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGVsZS5wcm9jZXNzTnVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogZWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogZWxlLnByb2Nlc3NDbGFzc2lmaWNhdGlvbiA9PT0gUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMuUHJvY2Vzc2VzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZWxlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHRoaXMuZ2V0RGlzbGF5TmFtZU9mUHJvY2Vzc1N0YXR1cyhlbGUuc3RhdHVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBmb2xkZXIuaXRlbU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U3BsaXR2aWV3VmFsdWUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRlci5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ29udGVudChmb2xkZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBlbGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBlbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBEYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IGVsZS5zdGF0dXNOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGZvbGRlci5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogZm9sZGVyLmxldmVsVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKChvYmouaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MgfHwgb2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQpID8gb2JqLml0ZW1OdW1iZXJJZCA6IG9iai5pZCwgb2JqLml0ZW1UeXBlLCBvYmouaXRlbU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAob2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KG9iai5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBEb2N1bW5ldCBQcm9jZXNzIFN1cHBvcnQgRnVuY1xuICAgIGlzRm9sZGVyKHR5cGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBkb2N1bWVudFR5cGVzID0gW1xuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5Eb2N1bWVudCxcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuRmlsZURvY3VtZW50LFxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5MaW5rRG9jdW1lbnQsXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLlNob3J0Y3V0RG9jdW1lbnRcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuICFkb2N1bWVudFR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgIH1cblxuICAgIGdldFBhcmVudElkKGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2xkZXIoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuICFpdGVtLnBhcmVudEhhbmRib29rSWQgPyAnJyA6IGl0ZW0ucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXRlbS5wYXJlbnRGb2xkZXJJZCA/ICcnIDogaXRlbS5wYXJlbnRGb2xkZXJJZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldERpc2xheU5hbWVPZlByb2Nlc3NTdGF0dXMoc3RhdHVzOiBudW1iZXIpIHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5pblByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLklOX1BST0dSRVNTJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5zZW5kVG9BcHByb3ZhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5TRU5EX1RPX0FQUFJPVkFMJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5hcHByb3ZlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5BUFBST1ZFRCc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMudW5kZXJSZXZpc2lvbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTkRFUl9SRVZJU0lPTic7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuZGVsZXRlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5ERUxFVEVEJztcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5yZXZpZXdPckhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uSEVBUklORyc7XG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuYXJjaGl2ZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uQVJDSElWRUQnO1xuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmhlYXJpbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdQUk9DRVNTLkhFQVJJTkcnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTktOT1dOJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmtVUkwoc2hhcGVNb2RlbDogU2hhcGVNb2RlbCkge1xuICAgICAgICBzd2l0Y2ggKHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9kb2N1bWVudC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9wcm9jZXNzLWRldGFpbC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYC9hcmVhL2RldGFpbC8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgL2ZvbGRlci8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgL3Byb2Nlc3MtaW50ZXJjb25uZWN0ZWQvJHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmw7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEF0dGFjaG1lbnQgXG4gICAgb3BlbkF0dGFjaG1lbnREaWFsb2coKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JQYXJhbXRlcigpO1xuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMubW9kdWxlO1xuICAgICAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5lbnRpdHlJZDtcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKExpbmtBdHRhY2htZW50Q29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzY1MHB4JyxcbiAgICAgICAgICAgIGhlaWdodDogJzY1MHB4JyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbChudWxsLCAwLCByZXN1bHQudGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IHJlc3VsdC51cmw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubWF0SWNvbiA9ICd0ZXh0X3NuaXBwZXQnO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRTaGFwZUFjdGl2aXR5KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgaWYgKCEhYXR0cmlidXRlcy5saW5rVXJsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhRnJvbVNoYXBlQXRycmlidXRlKGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSBhdHRyaWJ1dGVzLmxpbmtUYXJnZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgc2hhcGUgY29ubmVjdCBsYWJlbFxuICAgICAgICAgICAgICAgIGlmICghIXRoaXMuc2hhcGVNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc2hhcGVNb2RlbC5zaGFwZT8uY29ubmVjdGlvblR5cGVJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfRE9DVU1FTlRfUFJPQ0VTUztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfQVRUQUNITUVOVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfTElOSztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbVNoYXBlQXRycmlidXRlKHNoYXBlQXR0cmlidXRlOiBhbnkpIHtcbiAgICAgICAgaWYgKCEhc2hhcGVBdHRyaWJ1dGUubGlua1VybCkge1xuICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgnJywgJycsIHNoYXBlQXR0cmlidXRlLmxpbmtUaXRsZSk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBzaGFwZUF0dHJpYnV0ZS5saW5rVXJsO1xuICAgICAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICAgICAgICAgIGxldCBkb2N1bWVudFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCEhc2hhcGVBdHRyaWJ1dGUuY29ubmVjdGlvblR5cGVJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gc2hhcGVBdHRyaWJ1dGUuY29ubmVjdGlvblR5cGVJZDtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGUgPSB0aGlzLmdldFJlbGF0ZWRJdGVtQnlTaGFwZUNvbm5lY3Rpb25UeXBlKHNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQsIHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGUgPSB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsaW5rSWQgPSB0aGlzLmdldExpbmtJZCh1cmwsIGRvY3VtZW50VHlwZSk7XG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gbGlua0lkID8gK2xpbmtJZCA6IC0xO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlID0gZG9jdW1lbnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IHNoYXBlQXR0cmlidXRlLmxpbmtUYXJnZXQ7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbG9nb1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLm1hdEljb24gPSAndGV4dF9zbmlwcGV0JztcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZG9jdW1lbnRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSBMaW5rXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmsgPSB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFsaW5rSWQgJiYgZG9jdW1lbnRUeXBlID09IERhdGFUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmFuY2hvci5hbmNob3JWYWx1ZSA9IHVybC5zdWJzdHIoaGFzaEluZGV4ICsgMSwgdXJsLmxlbmd0aCAtIGhhc2hJbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudChsaW5rSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TGlua0lkKHVybDogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSkge1xuICAgICAgICBsZXQgcGFydGlhbFVybEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHBhcnRpYWxVcmxMZW5ndGggPSAwO1xuICAgICAgICBsZXQgaWQgPSAnJztcbiAgICAgICAgbGV0IGZyb20gPSAwO1xuICAgICAgICBsZXQgdXJsTG93ZXJDYXNlID0gISF1cmwgPyB1cmwudG9Mb3dlckNhc2UoKSA6ICcnO1xuXG4gICAgICAgIGNvbnN0IHBhcnRpYWxVcmwgPSB0aGlzLmdldFBhcnRpYWxVcmwodHlwZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gdXJsTG93ZXJDYXNlLmluZGV4T2YoJyMnKTtcblxuICAgICAgICBpZiAoISFwYXJ0aWFsVXJsKSB7XG4gICAgICAgICAgICBwYXJ0aWFsVXJsSW5kZXggPSB1cmxMb3dlckNhc2UuaW5kZXhPZihwYXJ0aWFsVXJsKTtcblxuICAgICAgICAgICAgcGFydGlhbFVybExlbmd0aCA9IHBhcnRpYWxVcmwubGVuZ3RoO1xuICAgICAgICAgICAgZnJvbSA9IHBhcnRpYWxVcmxJbmRleCArIHBhcnRpYWxVcmxMZW5ndGg7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09IERhdGFUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGhhc2hJbmRleCAtIGZyb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tKS5pbmRleE9mKCcvJyk7XG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoaWQsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICBpZCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBnZXRQYXJ0aWFsVXJsKHR5cGU6IERhdGFUeXBlKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTDtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkw7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJlbGF0ZWRJdGVtQnlTaGFwZUNvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlSWQ6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUsIHVybDogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAoY29ubmVjdGlvblR5cGVJZCkge1xuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERvY3VtZW50VHlwZSh1cmw6IHN0cmluZykge1xuICAgICAgICBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5kb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUucHJvY2VzcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX0lOVEVSQ09OTkVDVEVEX1BBUlRJQUxfVVJMKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5hcmVhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmZvbGRlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRBbmNob3JEb2N1bWVudChkb2N1bWVudElkKSB7XG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5pc0FuY2hvckxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QW5jaG9yRG9jdW1lbnRMaXN0KGRvY3VtZW50SWQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZG9jdW1lbnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JzID0gdGhpcy5leHRyYWN0RG9jdW1lbnRBbmNob3JzKGRvY3VtZW50cyB8fCBbXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmlzQW5jaG9yTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXh0cmFjdERvY3VtZW50QW5jaG9ycyhhbmNob3JEb2N1bWVudDogUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnRbXSkge1xuICAgICAgICBjb25zdCBhbmNob3JzOiBRTVNCUE1OU2hhcGVBbmNob3JbXSA9IFt7IHZhbHVlOiAwLCB2aWV3VmFsdWU6ICcnLCBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5CbGFuayB9XTtcbiAgICAgICAgbGV0IGlkID0gMztcbiAgICAgICAgaWYgKGFuY2hvckRvY3VtZW50KSB7XG4gICAgICAgICAgICBhbmNob3JEb2N1bWVudC5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IGUucmljaFRleHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tQ29udGVudCA9IGRpdjtcbiAgICAgICAgICAgICAgICBjb25zdCBhVGFncyA9IGRvbUNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTtcbiAgICAgICAgICAgICAgICBpZiAoYVRhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gYVRhZ3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFuY2hvcnMuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmFuY2hvclZhbHVlID09PSB0YWcubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRhZy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yVmFsdWU6IHRhZy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFuY2hvcnMucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9BVFRBQ0hNRU5ULFxuICAgICAgICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQXR0YWNobWVudFxuICAgICAgICB9KTtcbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SX1JFTEFURURfRE9DVU1FTlQsXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5SZWxhdGVkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYW5jaG9ycztcbiAgICB9XG5cbiAgICBnZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZGF0YVR5cGU6IERhdGFUeXBlKSB7XG4gICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwcm9jZXNzX2FyZWFfb3V0bGluZWQnO1xuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiAncHJvY2Vzcyc7XG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfaW50ZXJjb25uZWN0ZWQnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWxvYWRBbmNob3JEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsICYmIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbSAmJiB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudCh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW5MaW5rKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFNoYXBlTGluaygpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEJQTU5MaW5rQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogJzM1MHB4JyxcbiAgICAgICAgICAgIGhlaWdodDogJzI0NXB4JyxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1hdC1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChuZXdMaW5rKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3TGluaykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaztcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwubGluay5saW5rID0gbmV3TGluay5saW5rO1xuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9MSU5LO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGVDb25uZWN0aW9uKHNlbGVjdGVkQ29ubmVjdGlvblR5cGU6IGFueSkge1xuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLkxBTkcuQlBNTi5DT05GSVJNX0RFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICBpZiAoc2VsZWN0ZWRDb25uZWN0aW9uVHlwZSA9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzKSB7XG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9ET0NVTUVOVF9PUl9QUk9DRVNTO1xuICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDb25uZWN0aW9uVHlwZSA9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcbiAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0xJTks7XG4gICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENvbm5lY3Rpb25UeXBlID09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudCkge1xuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcbiAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9BVFRBQ0hNRU5UO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2codGl0bGUsIGNvbnRlbnQsIGZhbHNlLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSB0cnVlIHx8ICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcgJiYgdmFsdWUuaXNDb25maXJtZWQgPT0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsID0gbmV3IFNoYXBlTW9kZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnbGlua1VybCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnbGlua1RhcmdldCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnbGlua1RpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdjb25uZWN0aW9uVHlwZUlkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2F2ZVNoYXBlVGFyZ2V0KHRhcmdldElkOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gdGFyZ2V0SWQ7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtUYXJnZXQnLCB0YXJnZXRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzYXZlU2hhcGVBbmNob3IoYW5jaG9yVmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5hbmNob3IuYW5jaG9yVmFsdWUgPSBhbmNob3JWYWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTH0ke3RoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWR9IyR7YW5jaG9yVmFsdWV9YFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbFZpZXcubW9kZWwucHJvcCgnbGlua1VybCcsIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcFNoYXBlRGF0YSgpIHtcbiAgICAgICAgaWYgKCEhd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10pIHtcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtVcmwnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCAhPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA6IHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmspO1xuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnbGlua1RhcmdldCcsIFRhcmdldFR5cGVOYW1lLm5ldyk7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdsaW5rVGl0bGUnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCAhPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbU5hbWUgOiAnJyk7XG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdjb25uZWN0aW9uVHlwZUlkJywgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19