@pega/angular-sdk-components 0.242.4 → 0.242.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/esm2022/lib/_bridge/component-mapper/component-mapper.component.mjs +3 -10
  2. package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +27 -13
  3. package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +30 -13
  4. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +10 -37
  5. package/esm2022/lib/_components/infra/Containers/flow-container/helpers.mjs +2 -2
  6. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +2 -8
  7. package/esm2022/lib/_components/infra/assignment/assignment.component.mjs +75 -47
  8. package/esm2022/lib/_components/infra/assignment-card/assignment-card.component.mjs +30 -10
  9. package/esm2022/lib/_components/infra/root-container/root-container.component.mjs +3 -13
  10. package/esm2022/lib/_components/infra/view/view.component.mjs +15 -2
  11. package/esm2022/lib/_components/template/base/details-template-base.mjs +56 -0
  12. package/esm2022/lib/_components/template/base/form-template-base.mjs +16 -0
  13. package/esm2022/lib/_components/template/case-view/case-view.component.mjs +9 -14
  14. package/esm2022/lib/_components/template/default-form/default-form.component.mjs +35 -10
  15. package/esm2022/lib/_components/template/details/details.component.mjs +9 -36
  16. package/esm2022/lib/_components/template/details-narrow-wide/details-narrow-wide.component.mjs +9 -36
  17. package/esm2022/lib/_components/template/details-one-column/details-one-column.component.mjs +9 -38
  18. package/esm2022/lib/_components/template/details-sub-tabs/details-sub-tabs.component.mjs +12 -39
  19. package/esm2022/lib/_components/template/details-three-column/details-three-column.component.mjs +9 -38
  20. package/esm2022/lib/_components/template/details-two-column/details-two-column.component.mjs +9 -38
  21. package/esm2022/lib/_components/template/details-wide-narrow/details-wide-narrow.component.mjs +9 -38
  22. package/esm2022/lib/_components/template/one-column/one-column.component.mjs +3 -3
  23. package/esm2022/lib/_components/template/simple-table-manual/helpers.mjs +7 -6
  24. package/esm2022/lib/_components/template/three-column/three-column.component.mjs +3 -3
  25. package/esm2022/lib/_components/template/two-column/two-column.component.mjs +3 -3
  26. package/esm2022/lib/_components/template/wide-narrow-form/wide-narrow-form.component.mjs +3 -3
  27. package/esm2022/lib/_components/widget/todo/todo.component.mjs +3 -3
  28. package/esm2022/lib/_services/banner.service.mjs +35 -0
  29. package/esm2022/lib/_services/endpoints.mjs +1 -2
  30. package/esm2022/lib/_services/idle-detection.service.mjs +26 -0
  31. package/esm2022/public-api.mjs +5 -2
  32. package/fesm2022/pega-angular-sdk-components.mjs +431 -458
  33. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  34. package/lib/_components/field/dropdown/dropdown.component.d.ts +1 -1
  35. package/lib/_components/field/user-reference/user-reference.component.d.ts +5 -0
  36. package/lib/_components/infra/Containers/flow-container/flow-container.component.d.ts +0 -1
  37. package/lib/_components/infra/Containers/flow-container/helpers.d.ts +1 -0
  38. package/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.d.ts +1 -2
  39. package/lib/_components/infra/assignment/assignment.component.d.ts +6 -3
  40. package/lib/_components/infra/assignment-card/assignment-card.component.d.ts +10 -2
  41. package/lib/_components/infra/root-container/root-container.component.d.ts +0 -1
  42. package/lib/_components/template/base/details-template-base.d.ts +22 -0
  43. package/lib/_components/template/base/form-template-base.d.ts +10 -0
  44. package/lib/_components/template/case-view/case-view.component.d.ts +1 -2
  45. package/lib/_components/template/default-form/default-form.component.d.ts +9 -4
  46. package/lib/_components/template/details/details.component.d.ts +3 -11
  47. package/lib/_components/template/details-narrow-wide/details-narrow-wide.component.d.ts +3 -11
  48. package/lib/_components/template/details-one-column/details-one-column.component.d.ts +3 -13
  49. package/lib/_components/template/details-sub-tabs/details-sub-tabs.component.d.ts +3 -13
  50. package/lib/_components/template/details-three-column/details-three-column.component.d.ts +3 -13
  51. package/lib/_components/template/details-two-column/details-two-column.component.d.ts +3 -13
  52. package/lib/_components/template/details-wide-narrow/details-wide-narrow.component.d.ts +3 -13
  53. package/lib/_components/template/one-column/one-column.component.d.ts +2 -2
  54. package/lib/_components/template/simple-table-manual/helpers.d.ts +1 -0
  55. package/lib/_components/template/three-column/three-column.component.d.ts +2 -2
  56. package/lib/_components/template/two-column/two-column.component.d.ts +2 -2
  57. package/lib/_components/template/wide-narrow-form/wide-narrow-form.component.d.ts +2 -2
  58. package/lib/_services/banner.service.d.ts +8 -0
  59. package/lib/_services/endpoints.d.ts +0 -1
  60. package/lib/_services/idle-detection.service.d.ts +9 -0
  61. package/lib/doc/KeyReleaseUpdates.md +23 -6
  62. package/package.json +1 -1
  63. package/public-api.d.ts +4 -1
  64. package/esm2022/lib/_components/template/form-template-base/form-template-base.component.mjs +0 -13
  65. package/lib/_components/template/form-template-base/form-template-base.component.d.ts +0 -8
@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
3
3
  import { MatCardModule } from '@angular/material/card';
4
4
  import { ReferenceComponent } from '../../reference/reference.component';
5
5
  import { Utils } from '../../../../_helpers/utils';
6
- import { getToDoAssignments, showBanner } from './helpers';
6
+ import { getToDoAssignments, hasAssignments, showBanner } from './helpers';
7
7
  import { ComponentMapperComponent } from '../../../../_bridge/component-mapper/component-mapper.component';
8
8
  import { FlowContainerBaseComponent } from '../base-components/flow-container-base.component';
9
9
  import * as i0 from "@angular/core";
@@ -53,6 +53,9 @@ export class FlowContainerComponent extends FlowContainerBaseComponent {
53
53
  PCore.getPubSubUtils().subscribe('cancelPressed', () => {
54
54
  this.handleCancelPressed();
55
55
  }, 'cancelPressed');
56
+ PCore.getPubSubUtils().subscribe('clearBannerMessages', () => {
57
+ this.banners = [];
58
+ }, 'CLEAR_BANNER_MESSAGES');
56
59
  }
57
60
  ngOnDestroy() {
58
61
  if (this.angularPConnectData.unsubscribeFn) {
@@ -60,6 +63,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent {
60
63
  }
61
64
  PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.EVENT_CANCEL, 'cancelAssignment');
62
65
  PCore.getPubSubUtils().unsubscribe('cancelPressed', 'cancelPressed');
66
+ PCore.getPubSubUtils().unsubscribe('clearBannerMessages', 'CLEAR_BANNER_MESSAGES');
63
67
  }
64
68
  handleCancel() {
65
69
  // cancel happened, so ok to initialize the flow container
@@ -78,13 +82,14 @@ export class FlowContainerComponent extends FlowContainerBaseComponent {
78
82
  const pConn = this.pConnectOfActiveContainerItem || this.pConn$;
79
83
  const caseViewModeFromProps = this.angularPConnect.getComponentProp(this, 'caseViewMode');
80
84
  const caseViewModeFromRedux = pConn.getValue('context_data.caseViewMode', '');
85
+ const completeProps = this.angularPConnect.getCurrentCompleteProps(this);
81
86
  // ONLY call updateSelf when the component should update
82
87
  // AND removing the "gate" that was put there since shouldComponentUpdate
83
88
  // should be the real "gate"
89
+ // eslint-disable-next-line sonarjs/no-collapsible-if
84
90
  if (bUpdateSelf || caseViewModeFromProps !== caseViewModeFromRedux) {
85
91
  // don't want to redraw the flow container when there are page messages, because
86
92
  // the redraw causes us to loose the errors on the elements
87
- const completeProps = this.angularPConnect.getCurrentCompleteProps(this);
88
93
  if (!completeProps.pageMessages || completeProps.pageMessages.length == 0) {
89
94
  // with a cancel, need to timeout so todo will update correctly
90
95
  if (this.bHasCancel) {
@@ -97,10 +102,8 @@ export class FlowContainerComponent extends FlowContainerBaseComponent {
97
102
  this.updateSelf();
98
103
  }
99
104
  }
100
- else {
101
- this.showPageMessages(completeProps);
102
- }
103
105
  }
106
+ this.showPageMessages(completeProps);
104
107
  }
105
108
  showPageMessages(completeProps) {
106
109
  this.ngZone.run(() => {
@@ -179,36 +182,6 @@ export class FlowContainerComponent extends FlowContainerBaseComponent {
179
182
  // turn off spinner
180
183
  this.psService.sendMessage(false);
181
184
  }
182
- hasAssignments() {
183
- let hasAssignments = false;
184
- const assignmentsList = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.D_CASE_ASSIGNMENTS_RESULTS);
185
- // const thisOperator = PCore.getEnvironmentInfo().getOperatorIdentifier();
186
- // 8.7 includes assignments in Assignments List that may be assigned to
187
- // a different operator. So, see if there are any assignments for
188
- // the current operator
189
- const isEmbedded = window.location.href.includes('embedded');
190
- let bAssignmentsForThisOperator = false;
191
- if (isEmbedded) {
192
- const thisOperator = PCore.getEnvironmentInfo().getOperatorIdentifier();
193
- for (const assignment of assignmentsList) {
194
- if (assignment.assigneeInfo.ID === thisOperator) {
195
- bAssignmentsForThisOperator = true;
196
- }
197
- }
198
- }
199
- else {
200
- bAssignmentsForThisOperator = true;
201
- }
202
- // Bail if there is no assignmentsList
203
- if (!assignmentsList) {
204
- return hasAssignments;
205
- }
206
- const hasChildCaseAssignments = this.hasChildCaseAssignments();
207
- if (bAssignmentsForThisOperator || hasChildCaseAssignments || this.isCaseWideLocalAction()) {
208
- hasAssignments = true;
209
- }
210
- return hasAssignments;
211
- }
212
185
  isCaseWideLocalAction() {
213
186
  const actionID = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.ACTIVE_ACTION_ID);
214
187
  const caseActions = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.AVAILABLEACTIONS);
@@ -332,7 +305,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent {
332
305
  this.caseMessages$ = this.localizedVal(this.pConn$.getValue('caseMessages'), this.localeCategory);
333
306
  // caseMessages's behavior has changed in 24.2, and hence it doesn't let Optional Action work.
334
307
  // Changing the below condition for now. Was: (theCaseMessages || !hasAssignments())
335
- if (!this.hasAssignments()) {
308
+ if (!hasAssignments(this.pConn$)) {
336
309
  this.bHasCaseMessages$ = true;
337
310
  this.bShowConfirm = true;
338
311
  this.checkSvg$ = this.utils.getImageSrc('check', this.utils.getSDKStaticContentUrl());
@@ -487,4 +460,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
487
460
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.ProgressSpinnerService }, { type: i2.FormBuilder }, { type: i0.NgZone }, { type: i3.Utils }], propDecorators: { pConn$: [{
488
461
  type: Input
489
462
  }] } });
490
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQTZCLFVBQVUsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7OztBQXdCOUYsTUFBTSxPQUFPLHNCQUF1QixTQUFRLDBCQUEwQjtJQXdDcEUsWUFDRSxRQUFrQixFQUNWLEtBQXdCLEVBQ3hCLFNBQWlDLEVBQ2pDLEVBQWUsRUFDZixNQUFjLEVBQ2QsS0FBWTtRQUVwQixLQUFLLENBQUMsUUFBUSxDQUFDLENB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Q0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUV4RyxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUVELGdCQUFnQixDQUFDLGdCQUFnQixDQUFDO1lBQ2hDLFdBQVcsRUFBRSxFQUFFO1lBQ2YsR0FBRztZQUNILFFBQVE7WUFDUixZQUFZLEVBQUUsU0FBUztZQUN2QixZQUFZLEVBQUUsWUFBWTtZQUMxQixJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F6bEJVLHNCQUFzQjttR0FBdEIsc0JBQXNCLCtGQUp0QixDQUFDLEtBQUssQ0FBQyxpREM5QnBCLHFsREE0Q0EsNkVEWlksWUFBWSw0S0FBRSxhQUFhLHVMQUFtQix3QkFBd0I7OzRGQUVyRSxzQkFBc0I7a0JBUmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CLENBQUMsS0FBSyxDQUFDLGNBQ04sSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztxTkFHekUsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgTmdab25lLCBmb3J3YXJkUmVmLCBPbkRlc3Ryb3ksIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IHB1YmxpY0NvbnN0YW50cyB9IGZyb20gJ0BwZWdhL3Bjb3JlLXBjb25uZWN0LXR5cGVkZWZzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vX21lc3NhZ2VzL3Byb2dyZXNzLXNwaW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBSZWZlcmVuY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2UvcmVmZXJlbmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL19oZWxwZXJzL3V0aWxzJztcbmltcG9ydCB7IGdldFRvRG9Bc3NpZ25tZW50cywgc2hvd0Jhbm5lciB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBDb21wb25lbnRNYXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9fYnJpZGdlL2NvbXBvbmVudC1tYXBwZXIvY29tcG9uZW50LW1hcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmxvd0NvbnRhaW5lckJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWNvbXBvbmVudHMvZmxvdy1jb250YWluZXItYmFzZS5jb21wb25lbnQnO1xuXG4vKipcbiAqIFdBUk5JTkc6ICBJdCBpcyBub3QgZXhwZWN0ZWQgdGhhdCB0aGlzIGZpbGUgc2hvdWxkIGJlIG1vZGlmaWVkLiAgSXQgaXMgcGFydCBvZiBpbmZyYXN0cnVjdHVyZSBjb2RlIHRoYXQgd29ya3Mgd2l0aFxuICogUmVkdXggYW5kIGNyZWF0aW9uL3VwZGF0ZSBvZiBSZWR1eCBjb250YWluZXJzIGFuZCBQQ29ubmVjdC4gIE1vZGlmeWluZyB0aGlzIGNvZGUgY291bGQgaGF2ZSB1bmRlc2lyZWFibGUgcmVzdWx0cyBhbmRcbiAqIGlzIHRvdGFsbHkgYXQgeW91ciBvd24gcmlzay5cbiAqL1xuXG5pbnRlcmZhY2UgRmxvd0NvbnRhaW5lclByb3BzIHtcbiAgLy8gSWYgYW55LCBlbnRlciBhZGRpdGlvbmFsIHByb3BzIHRoYXQgb25seSBleGlzdCBvbiB0aGlzIGNvbXBvbmVudFxuICBjaGlsZHJlbj86IGFueVtdO1xuICBuYW1lPzogc3RyaW5nO1xuICByb3V0aW5nSW5mbz86IGFueTtcbiAgcGFnZU1lc3NhZ2VzOiBhbnlbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZsb3ctY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zsb3ctY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmxvdy1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbVXRpbHNdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRDYXJkTW9kdWxlLCBmb3J3YXJkUmVmKCgpID0+IENvbXBvbmVudE1hcHBlckNvbXBvbmVudCldXG59KVxuZXhwb3J0IGNsYXNzIEZsb3dDb250YWluZXJDb21wb25lbnQgZXh0ZW5kcyBGbG93Q29udGFpbmVyQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcENvbm4kOiB0eXBlb2YgUENvbm5lY3Q7XG5cbiAgcENvcmVDb25zdGFudHM6IHR5cGVvZiBwdWJsaWNDb25zdGFudHM7XG4gIGNvbmZpZ1Byb3BzJDogRmxvd0NvbnRhaW5lclByb3BzO1xuXG4gIGZvcm1Hcm91cCQ6IEZvcm1Hcm91cDtcbiAgYXJDaGlsZHJlbiQ6IGFueVtdO1xuICBpdGVtS2V5JCA9ICcnO1xuICBjb250YWluZXJOYW1lJDogc3RyaW5nO1xuICBidWlsZE5hbWUkOiBzdHJpbmc7XG5cbiAgLy8gdG9kb1xuICB0b2RvX3Nob3dUb2RvJCA9IGZhbHNlO1xuICB0b2RvX2Nhc2VJbmZvSUQkOiBzdHJpbmc7XG4gIHRvZG9fc2hvd1RvZG9MaXN0JCA9IGZhbHNlO1xuICB0b2RvX2RhdGFzb3VyY2UkOiBhbnk7XG4gIHRvZG9faGVhZGVyVGV4dCQgPSAnVG8gZG8nO1xuICB0b2RvX3R5cGUkOiBzdHJpbmc7XG4gIHRvZG9fY29udGV4dCQ6IHN0cmluZztcbiAgdG9kb19wQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcblxuICBiSGFzQ2FuY2VsID0gZmFsc2U7XG5cbiAgLy8gbWVzc2FnZXNcbiAgY2FzZU1lc3NhZ2VzJDogc3RyaW5nO1xuICBiSGFzQ2FzZU1lc3NhZ2VzJCA9IGZhbHNlO1xuICBjaGVja1N2ZyQ6IHN0cmluZztcbiAgVE9ETzogYW55O1xuICBiU2hvd0NvbmZpcm0gPSBmYWxzZTtcbiAgYlNob3dCYW5uZXI6IGJvb2xlYW47XG4gIGNvbmZpcm1fcGNvbm46IGFueTtcbiAgbG9jYWxpemVkVmFsOiBhbnk7XG4gIGxvY2FsZUNhdGVnb3J5ID0gJ01lc3NhZ2VzJztcbiAgbG9jYWxlUmVmZXJlbmNlOiBhbnk7XG4gIGJhbm5lcnM6IGFueVtdO1xuICAvLyBpdGVtS2V5OiBzdHJpbmcgPSBcIlwiOyAgIC8vIEpBIC0gdGhpcyBpcyB3aGF0IE5lYnVsYS9Db25zdGVsbGF0aW9uIHVzZXMgdG8gcGFzcyB0byBmaW5pc2hBc3NpZ25tZW50LCBuYXZpZ2F0ZVRvU3RlcFxuXG4gIHBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHBzU2VydmljZTogUHJvZ3Jlc3NTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAvLyBjcmVhdGUgdGhlIGZvcm1Hcm91cFxuICAgIHRoaXMuZm9ybUdyb3VwJCA9IHRoaXMuZmIuZ3JvdXAoeyBoaWRlUmVxdWlyZWQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gRmlyc3QgdGhpbmcgaW4gaW5pdGlhbGl6YXRpb24gaXMgcmVnaXN0ZXJpbmcgYW5kIHN1YnNjcmliaW5nIHRvIHRoZSBBbmd1bGFyUENvbm5lY3Qgc2VydmljZVxuICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YSA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnJlZ2lzdGVyQW5kU3Vic2NyaWJlQ29tcG9uZW50KHRoaXMsIHRoaXMub25TdGF0ZUNoYW5nZSk7XG5cbiAgICB0aGlzLmxvY2FsaXplZFZhbCA9IFBDb3JlLmdldExvY2FsZVV0aWxzKCkuZ2V0TG9jYWxlVmFsdWU7XG4gICAgY29uc3QgY2FzZUluZm8gPSB0aGlzLnBDb25uJC5nZXRDYXNlSW5mbygpO1xuICAgIHRoaXMubG9jYWxlUmVmZXJlbmNlID0gYCR7Y2FzZUluZm8/LmdldENsYXNzTmFtZSgpfSFDQVNFISR7Y2FzZUluZm8uZ2V0TmFtZSgpfWAudG9VcHBlckNhc2UoKTtcblxuICAgIC8vIFRoZW4sIGNvbnRpbnVlIG9uIHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb25cblxuICAgIC8vIGdldCB0aGUgUENvcmUgY29uc3RhbnRzXG4gICAgdGhpcy5wQ29yZUNvbnN0YW50cyA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuICAgIGNvbnN0IHsgVE9ETyB9ID0gdGhpcy5wQ29yZUNvbnN0YW50cztcbiAgICB0aGlzLlRPRE8gPSBUT0RPO1xuICAgIC8vIHdpdGggaW5pdCwgZm9yY2UgY2hpbGRyZW4gdG8gYmUgbG9hZGVkIG9mIGdsb2JhbCBwQ29ublxuICAgIHRoaXMuaW5pdENvbXBvbmVudCh0cnVlKTtcblxuICAgIHRoaXMuaW5pdENvbnRhaW5lcigpO1xuXG4gICAgdGhpcy5jaGVja0FuZFVwZGF0ZSgpO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5zdWJzY3JpYmUoXG4gICAgICBQQ29yZS5nZXRDb25zdGFudHMoKS5QVUJfU1VCX0VWRU5UUy5FVkVOVF9DQU5DRUwsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsKCk7XG4gICAgICB9LFxuICAgICAgJ2NhbmNlbEFzc2lnbm1lbnQnXG4gICAgKTtcblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkuc3Vic2NyaWJlKFxuICAgICAgJ2NhbmNlbFByZXNzZWQnLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUNhbmNlbFByZXNzZWQoKTtcbiAgICAgIH0sXG4gICAgICAnY2FuY2VsUHJlc3NlZCdcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbigpO1xuICAgIH1cblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkudW5zdWJzY3JpYmUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuUFVCX1NVQl9FVkVOVFMuRVZFTlRfQ0FOQ0VMLCAnY2FuY2VsQXNzaWdubWVudCcpO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS51bnN1YnNjcmliZSgnY2FuY2VsUHJlc3NlZCcsICdjYW5jZWxQcmVzc2VkJyk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWwoKSB7XG4gICAgLy8gY2FuY2VsIGhhcHBlbmVkLCBzbyBvayB0byBpbml0aWFsaXplIHRoZSBmbG93IGNvbnRhaW5lclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ29rVG9Jbml0Rmxvd0NvbnRhaW5lcicsICd0cnVlJyk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWxQcmVzc2VkKCkge1xuICAgIHRoaXMuYkhhc0NhbmNlbCA9IHRydWU7XG4gIH1cblxuICAvLyBDYWxsYmFjayBwYXNzZWQgd2hlbiBzdWJzY3JpYmluZyB0byBzdG9yZSBjaGFuZ2VcbiAgb25TdGF0ZUNoYW5nZSgpIHtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG4gIH1cblxuICBjaGVja0FuZFVwZGF0ZSgpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBicmlkZ2UgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgICBjb25zdCBiVXBkYXRlU2VsZiA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnNob3VsZENvbXBvbmVudFVwZGF0ZSh0aGlzKTtcblxuICAgIGNvbnN0IHBDb25uID0gdGhpcy5wQ29ubmVjdE9mQWN0aXZlQ29udGFpbmVySXRlbSB8fCB0aGlzLnBDb25uJDtcbiAgICBjb25zdCBjYXNlVmlld01vZGVGcm9tUHJvcHMgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5nZXRDb21wb25lbnRQcm9wKHRoaXMsICdjYXNlVmlld01vZGUnKTtcbiAgICBjb25zdCBjYXNlVmlld01vZGVGcm9tUmVkdXggPSBwQ29ubi5nZXRWYWx1ZSgnY29udGV4dF9kYXRhLmNhc2VWaWV3TW9kZScsICcnKTtcblxuICAgIC8vIE9OTFkgY2FsbCB1cGRhdGVTZWxmIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlXG4gICAgLy8gICAgQU5EIHJlbW92aW5nIHRoZSBcImdhdGVcIiB0aGF0IHdhcyBwdXQgdGhlcmUgc2luY2Ugc2hvdWxkQ29tcG9uZW50VXBkYXRlXG4gICAgLy8gICAgICBzaG91bGQgYmUgdGhlIHJlYWwgXCJnYXRlXCJcbiAgICBpZiAoYlVwZGF0ZVNlbGYgfHwgY2FzZVZpZXdNb2RlRnJvbVByb3BzICE9PSBjYXNlVmlld01vZGVGcm9tUmVkdXgpIHtcbiAgICAgIC8vIGRvbid0IHdhbnQgdG8gcmVkcmF3IHRoZSBmbG93IGNvbnRhaW5lciB3aGVuIHRoZXJlIGFyZSBwYWdlIG1lc3NhZ2VzLCBiZWNhdXNlXG4gICAgICAvLyB0aGUgcmVkcmF3IGNhdXNlcyB1cyB0byBsb29zZSB0aGUgZXJyb3JzIG9uIHRoZSBlbGVtZW50c1xuICAgICAgY29uc3QgY29tcGxldGVQcm9wcyA9IHRoaXMuYW5ndWxhclBDb25uZWN0LmdldEN1cnJlbnRDb21wbGV0ZVByb3BzKHRoaXMpIGFzIEZsb3dDb250YWluZXJQcm9wcztcbiAgICAgIGlmICghY29tcGxldGVQcm9wcy5wYWdlTWVzc2FnZXMgfHwgY29tcGxldGVQcm9wcy5wYWdlTWVzc2FnZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgLy8gd2l0aCBhIGNhbmNlbCwgbmVlZCB0byB0aW1lb3V0IHNvIHRvZG8gd2lsbCB1cGRhdGUgY29ycmVjdGx5XG4gICAgICAgIGlmICh0aGlzLmJIYXNDYW5jZWwpIHtcbiAgICAgICAgICB0aGlzLmJIYXNDYW5jZWwgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1BhZ2VNZXNzYWdlcyhjb21wbGV0ZVByb3BzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93UGFnZU1lc3NhZ2VzKGNvbXBsZXRlUHJvcHM6IEZsb3dDb250YWluZXJQcm9wcykge1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBjb25zdCBwYWdlTWVzc2FnZXMgPSBjb21wbGV0ZVByb3BzLnBhZ2VNZXNzYWdlcztcbiAgICAgIHRoaXMuYmFubmVycyA9IFt7IG1lc3NhZ2VzOiBwYWdlTWVzc2FnZXM/Lm1hcChtc2cgPT4gdGhpcy5sb2NhbGl6ZWRWYWwobXNnLm1lc3NhZ2UsICdNZXNzYWdlcycpKSwgdmFyaWFudDogJ3VyZ2VudCcgfV07XG4gICAgfSk7XG4gIH1cblxuICBnZXRUb2RvVmlzaWJpbHR5KCkge1xuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHRoaXMucENvbm4kLmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG4gICAgaWYgKGNhc2VWaWV3TW9kZSAmJiBjYXNlVmlld01vZGUgPT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCBraWQgPSB0aGlzLnBDb25uJC5nZXRDaGlsZHJlbigpWzBdO1xuICAgICAgY29uc3QgdG9kb0tpZCA9IGtpZC5nZXRQQ29ubmVjdCgpLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgIHRoaXMudG9kb19wQ29ubiQgPSB0b2RvS2lkLmdldFBDb25uZWN0KCk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGNhc2VWaWV3TW9kZSAmJiBjYXNlVmlld01vZGUgPT09ICdwZXJmb3JtJyk7XG4gIH1cblxuICBpbml0Q29udGFpbmVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lck1nciA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck1hbmFnZXIoKTtcbiAgICBjb25zdCBiYXNlQ29udGV4dCA9IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCk7XG4gICAgY29uc3QgY29udGFpbmVyTmFtZSA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck5hbWUoKTtcbiAgICBjb25zdCBjb250YWluZXJUeXBlID0gJ3NpbmdsZSc7XG5cbiAgICBjb25zdCBmbG93Q29udGFpbmVyVGFyZ2V0ID0gYCR7YmFzZUNvbnRleHR9LyR7Y29udGFpbmVyTmFtZX1gO1xuICAgIGNvbnN0IGlzQ29udGFpbmVySXRlbUF2YWlsYWJsZSA9IFBDb3JlLmdldENvbnRhaW5lclV0aWxzKCkuZ2V0QWN0aXZlQ29udGFpbmVySXRlbU5hbWUoZmxvd0NvbnRhaW5lclRhcmdldCk7XG5cbiAgICAvLyBjbGVhciBvdXQgc2luY2Ugd2UgYXJlIGluaXRpYWxpemluZ1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ29rVG9Jbml0Rmxvd0NvbnRhaW5lcicsICdmYWxzZScpO1xuXG4gICAgaWYgKCFpc0NvbnRhaW5lckl0ZW1BdmFpbGFibGUpIHtcbiAgICAgIGNvbnRhaW5lck1nci5pbml0aWFsaXplQ29udGFpbmVycyh7XG4gICAgICAgIHR5cGU6IGNvbnRhaW5lclR5cGVcbiAgICAgIH0pO1xuXG4gICAgICAvKiByZW1vdmUgY29tbWVudGVkIG91dCBjb2RlIHdoZW4gdXBkYXRlIFJlYWN0L1dDXG4gICAgICAgKioqIGluc3RlYWQgb2YgZ2V0dGluZyB2YWx1ZXMgaGVyZSB0byBwYXNzIHRvIGFkZENvbnRhaW5lckl0ZW0sIHdlIGNhbGwgdGhlIGZ1bmN0aW9uIGJlbG93IFwiYWRkQ29udGFpbmVySXRlbVwiXG4gICAgICAgKioqIHdoaWNoIGNvbWVzIGZyb20gZmxvdyBjb250YWluZXIgaGVscGVycyBpbiBOZWJ1bGFcbiAgICAgICAqL1xuICAgICAgLy8gY29udGFpbmVyTWdyLmFkZENvbnRhaW5lckl0ZW0oe1xuICAgICAgLy8gICBzZW1hbnRpY1VSTDogXCJcIixcbiAgICAgIC8vICAga2V5OiB0aGlzLnBDb25uJC5nZXRWYWx1ZShcImtleVwiKSxcbiAgICAgIC8vICAgZmxvd05hbWU6IHRoaXMucENvbm4kLmdldFZhbHVlKFwiZmxvd05hbWVcIiksXG4gICAgICAvLyAgIGNhc2VWaWV3TW9kZTogXCJwZXJmb3JtXCIsXG4gICAgICAvLyAgIGRhdGE6IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoYmFzZUNvbnRleHQpLFxuICAgICAgLy8gICBjb250YWluZXJUeXBlXG4gICAgICAvLyB9KTtcblxuICAgICAgdGhpcy5hZGRDb250YWluZXJJdGVtKHRoaXMucENvbm4kKTtcbiAgICB9XG4gIH1cblxuICBpbml0Q29tcG9uZW50KGJMb2FkQ2hpbGRyZW46IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1Byb3BzJCA9IHRoaXMucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyh0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpKSBhcyBGbG93Q29udGFpbmVyUHJvcHM7XG4gICAgdGhpcy5zaG93UGFnZU1lc3NhZ2VzKHRoaXMuY29uZmlnUHJvcHMkKTtcblxuICAgIC8vIHdoZW4gdHJ1ZSwgdXBkYXRlIGFyQ2hpbGRyZW4gZnJvbSBwQ29ubiwgb3RoZXJ3aXNlLCBhckNoaWxyZW4gd2lsbCBiZSB1cGRhdGVkIGluIHVwZGF0ZVNlbGYoKVxuICAgIGlmIChiTG9hZENoaWxkcmVuKSB7XG4gICAgICB0aGlzLmFyQ2hpbGRyZW4kID0gdGhpcy5wQ29ubiQuZ2V0Q2hpbGRyZW4oKTtcbiAgICB9XG5cbiAgICAvLyBjb25zdCBvRGF0YSA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKTtcblxuICAgIC8vIGNvbnN0IGFjdGl2ZUFjdGlvbkxhYmVsOiBzdHJpbmcgPSAnJztcbiAgICAvLyBjb25zdCB7IGdldFBDb25uZWN0IH0gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG5cbiAgICB0aGlzLnRvZG9fc2hvd1RvZG8kID0gdGhpcy5nZXRUb2RvVmlzaWJpbHR5KCk7XG5cbiAgICAvLyBjcmVhdGUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zXG4gICAgLy8gY29uc3QgY29udGFpbmVyTWdyID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIC8vIGNvbnN0IGFjdGlvbnNBUEkgPSB0aGlzLnBDb25uJC5nZXRBY3Rpb25zQXBpKCk7XG4gICAgY29uc3QgYmFzZUNvbnRleHQgPSB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpO1xuICAgIGNvbnN0IGFjTmFtZSA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck5hbWUoKTtcblxuICAgIGlmICh0aGlzLml0ZW1LZXkkID09PSAnJykge1xuICAgICAgdGhpcy5pdGVtS2V5JCA9IGJhc2VDb250ZXh0LmNvbmNhdCgnLycpLmNvbmNhdChhY05hbWUpO1xuICAgIH1cblxuICAgIHRoaXMucENvbm4kLmlzQm91bmRUb1N0YXRlKCk7XG5cbiAgICAvLyBpbnNpZGVcbiAgICAvLyBnZXQgZmlzdCBraWQsIGdldCB0aGUgbmFtZSBhbmQgZGlzcGxheVxuICAgIC8vIHBhc3MgZmlyc3Qga2lkIHRvIGEgdmlldyBjb250YWluZXIsIHdoaWNoIHdpbGwgZGlzcGVyc2UgaXQgdG8gYSB2aWV3IHdoaWNoIHdpbGwgdXNlIG9uZSBjb2x1bW4sIHR3byBjb2x1bW4sIGV0Yy5cbiAgICBjb25zdCBvV29ya0l0ZW0gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG4gICAgLy8gY29uc3Qgb1dvcmtNZXRhID0gb1dvcmtJdGVtLmdldFJhd01ldGFkYXRhKCk7XG4gICAgY29uc3Qgb1dvcmtEYXRhID0gb1dvcmtJdGVtLmdldERhdGFPYmplY3QoKTtcblxuICAgIC8vIHRoaXMuY29udGFpbmVyTmFtZSQgPSBvV29ya01ldGFbXCJuYW1lXCJdO1xuICAgIGlmIChiTG9hZENoaWxkcmVuICYmIG9Xb3JrRGF0YSkge1xuICAgICAgdGhpcy5jb250YWluZXJOYW1lJCA9IHRoaXMubG9jYWxpemVkVmFsKHRoaXMuZ2V0QWN0aXZlVmlld0xhYmVsKCkgfHwgb1dvcmtEYXRhLmNhc2VJbmZvLmFzc2lnbm1lbnRzWzBdLm5hbWUsIHVuZGVmaW5lZCwgdGhpcy5sb2NhbGVSZWZlcmVuY2UpO1xuICAgIH1cblxuICAgIC8vIHR1cm4gb2ZmIHNwaW5uZXJcbiAgICB0aGlzLnBzU2VydmljZS5zZW5kTWVzc2FnZShmYWxzZSk7XG4gIH1cblxuICBoYXNBc3NpZ25tZW50cygpIHtcbiAgICBsZXQgaGFzQXNzaWdubWVudHMgPSBmYWxzZTtcbiAgICBjb25zdCBhc3NpZ25tZW50c0xpc3QgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSh0aGlzLnBDb3JlQ29uc3RhbnRzLkNBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUyk7XG4gICAgLy8gY29uc3QgdGhpc09wZXJhdG9yID0gUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JJZGVudGlmaWVyKCk7XG4gICAgLy8gOC43IGluY2x1ZGVzIGFzc2lnbm1lbnRzIGluIEFzc2lnbm1lbnRzIExpc3QgdGhhdCBtYXkgYmUgYXNzaWduZWQgdG9cbiAgICAvLyAgYSBkaWZmZXJlbnQgb3BlcmF0b3IuIFNvLCBzZWUgaWYgdGhlcmUgYXJlIGFueSBhc3NpZ25tZW50cyBmb3JcbiAgICAvLyAgdGhlIGN1cnJlbnQgb3BlcmF0b3JcbiAgICBjb25zdCBpc0VtYmVkZGVkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VtYmVkZGVkJyk7XG4gICAgbGV0IGJBc3NpZ25tZW50c0ZvclRoaXNPcGVyYXRvciA9IGZhbHNlO1xuXG4gICAgaWYgKGlzRW1iZWRkZWQpIHtcbiAgICAgIGNvbnN0IHRoaXNPcGVyYXRvciA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9ySWRlbnRpZmllcigpO1xuICAgICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIGFzc2lnbm1lbnRzTGlzdCkge1xuICAgICAgICBpZiAoYXNzaWdubWVudC5hc3NpZ25lZUluZm8uSUQgPT09IHRoaXNPcGVyYXRvcikge1xuICAgICAgICAgIGJBc3NpZ25tZW50c0ZvclRoaXNPcGVyYXRvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYkFzc2lnbm1lbnRzRm9yVGhpc09wZXJhdG9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBCYWlsIGlmIHRoZXJlIGlzIG5vIGFzc2lnbm1lbnRzTGlzdFxuICAgIGlmICghYXNzaWdubWVudHNMaXN0KSB7XG4gICAgICByZXR1cm4gaGFzQXNzaWdubWVudHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzQ2hpbGRDYXNlQXNzaWdubWVudHMgPSB0aGlzLmhhc0NoaWxkQ2FzZUFzc2lnbm1lbnRzKCk7XG5cbiAgICBpZiAoYkFzc2lnbm1lbnRzRm9yVGhpc09wZXJhdG9yIHx8IGhhc0NoaWxkQ2FzZUFzc2lnbm1lbnRzIHx8IHRoaXMuaXNDYXNlV2lkZUxvY2FsQWN0aW9uKCkpIHtcbiAgICAgIGhhc0Fzc2lnbm1lbnRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzQXNzaWdubWVudHM7XG4gIH1cblxuICBpc0Nhc2VXaWRlTG9jYWxBY3Rpb24oKSB7XG4gICAgY29uc3QgYWN0aW9uSUQgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSh0aGlzLnBDb3JlQ29uc3RhbnRzLkNBU0VfSU5GTy5BQ1RJVkVfQUNUSU9OX0lEKTtcbiAgICBjb25zdCBjYXNlQWN0aW9ucyA9IHRoaXMucENvbm4kLmdldFZhbHVlKHRoaXMucENvcmVDb25zdGFudHMuQ0FTRV9JTkZPLkFWQUlMQUJMRUFDVElPTlMpO1xuICAgIGxldCBiQ2FzZVdpZGVBY3Rpb24gPSBmYWxzZTtcbiAgICBpZiAoY2FzZUFjdGlvbnMgJiYgYWN0aW9uSUQpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk9iaiA9IGNhc2VBY3Rpb25zLmZpbmQoY2FzZUFjdGlvbiA9PiBjYXNlQWN0aW9uLklEID09PSBhY3Rpb25JRCk7XG4gICAgICBpZiAoYWN0aW9uT2JqKSB7XG4gICAgICAgIGJDYXNlV2lkZUFjdGlvbiA9IGFjdGlvbk9iai50eXBlID09PSAnQ2FzZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiQ2FzZVdpZGVBY3Rpb247XG4gIH1cblxuICBoYXNDaGlsZENhc2VBc3NpZ25tZW50cygpIHtcbiAgICBjb25zdCBjaGlsZENhc2VzID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUodGhpcy5wQ29yZUNvbnN0YW50cy5DQVNFX0lORk8uQ0hJTERfQVNTSUdOTUVOVFMpO1xuXG4gICAgcmV0dXJuIGNoaWxkQ2FzZXMgJiYgY2hpbGRDYXNlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0QWN0aXZlVmlld0xhYmVsKCkge1xuICAgIGxldCBhY3RpdmVBY3Rpb25MYWJlbCA9ICcnO1xuXG4gICAgY29uc3QgeyBDQVNFX0lORk86IENBU0VfQ09OU1RTIH0gPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcblxuICAgIGNvbnN0IGNhc2VBY3Rpb25zID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0FDVElPTlMpIGFzIGFueVtdO1xuICAgIGNvbnN0IGFjdGl2ZUFjdGlvbklEID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQUNUSVZFX0FDVElPTl9JRCk7XG4gICAgY29uc3QgYWN0aXZlQWN0aW9uID0gY2FzZUFjdGlvbnM/LmZpbmQoYWN0aW9uID0+IGFjdGlvbi5JRCA9PT0gYWN0aXZlQWN0aW9uSUQpO1xuICAgIGlmIChhY3RpdmVBY3Rpb24pIHtcbiAgICAgIGFjdGl2ZUFjdGlvbkxhYmVsID0gYWN0aXZlQWN0aW9uLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBhY3RpdmVBY3Rpb25MYWJlbDtcbiAgfVxuXG4gIGZpbmRDdXJyZW50SW5kaWNpZXMoYXJTdGVwcGVyU3RlcHM6IGFueVtdLCBhckluZGljaWVzOiBudW1iZXJbXSwgZGVwdGg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGFyU3RlcHBlclN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICBpZiAoc3RlcC52aXNpdGVkX3N0YXR1cyA9PSAnY3VycmVudCcpIHtcbiAgICAgICAgYXJJbmRpY2llc1tkZXB0aF0gPSBjb3VudDtcblxuICAgICAgICAvLyBhZGQgaW5cbiAgICAgICAgc3RlcC5zdGVwX3N0YXR1cyA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChzdGVwLnZpc2l0ZWRfc3RhdHVzID09ICdzdWNjZXNzJykge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzdGVwLnN0ZXBfc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzdGVwLnN0ZXBfc3RhdHVzID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwLnN0ZXBzKSB7XG4gICAgICAgIGFySW5kaWNpZXMgPSB0aGlzLmZpbmRDdXJyZW50SW5kaWNpZXMoc3RlcC5zdGVwcywgYXJJbmRpY2llcywgZGVwdGggKyAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhckluZGljaWVzO1xuICB9XG5cbiAgLy8gQ2FsbGVkIHdoZW4gYnJpZGdlIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbXBvbmVudFxuICAvLyBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICB1cGRhdGVTZWxmKCkge1xuICAgIC8vIGZvciBub3dcbiAgICAvLyBjb25zdCB7IGdldFBDb25uZWN0IH0gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG4gICAgY29uc3QgbG9jYWxQQ29ubiA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcblxuICAgIHRoaXMucENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0gPSB0aGlzLmdldFBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtKHRoaXMucENvbm4kKSB8fCB0aGlzLnBDb25uJDtcblxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHRoaXMucENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0uZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnKTtcbiAgICB0aGlzLmJTaG93QmFubmVyID0gc2hvd0Jhbm5lcih0aGlzLnBDb25uJCk7XG5cbiAgICBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PSAncmV2aWV3Jykge1xuICAgICAgdGhpcy5sb2FkUmV2aWV3UGFnZShsb2NhbFBDb25uKTtcblxuICAgICAgLy8gaW4gTmVidWxhL0NvbnN0ZWxsYXRpb24sIHdoZW4gY2FuY2VsIGlzIGNhbGxlZCwgc29tZWhvdyB0aGUgY29uc3RydWN0b3IgZm9yIGZsb3dDb250YWluZXIgaXMgY2FsbGVkIHdoaWNoXG4gICAgICAvLyBkb2VzIGluaXQvYWRkIG9mIGNvbnRhaW5lcnMuICBUaGlzIG1pbWljcyB0aGF0XG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnb2tUb0luaXRGbG93Q29udGFpbmVyJykgPT0gJ3RydWUnKSB7XG4gICAgICAgIHRoaXMuaW5pdENvbnRhaW5lcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PT0gJ3BlcmZvcm0nKSB7XG4gICAgICAvLyBwZXJmb3JtXG4gICAgICB0aGlzLnRvZG9fc2hvd1RvZG8kID0gZmFsc2U7XG5cbiAgICAgIC8vIHRoaXMgaXMgZGlmZmVyZW50IHRoYW4gQW5ndWxhciBTREssIGFzIHdlIG5lZWQgdG8gaW5pdENvbnRhaW5lciBpZiByb290IGNvbnRhaW5lciByZWxvYWRlZFxuICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ29rVG9Jbml0Rmxvd0NvbnRhaW5lcicpID09ICd0cnVlJykge1xuICAgICAgICB0aGlzLmluaXRDb250YWluZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBoYXZlIGNhc2VNZXNzYWdlIHNob3cgbWVzc2FnZSBhbmQgZW5kXG4gICAgdGhpcy5zaG93Q2FzZU1lc3NhZ2VzKCk7XG5cbiAgICB0aGlzLnVwZGF0ZUZsb3dDb250YWluZXJDaGlsZHJlbigpO1xuICB9XG5cbiAgbG9hZFJldmlld1BhZ2UobG9jYWxQQ29ubikge1xuICAgIGNvbnN0IHsgQ0FTRV9JTkZPOiBDQVNFX0NPTlNUUyB9ID0gUENvcmUuZ2V0Q29uc3RhbnRzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIC8qXG4gICAgICAgICAgKioqIHJlbm92ZSB0aGlzIGNvbW1tZW50ZWQgb3V0IGNvZGUgd2hlbiBSZWFjdC9XQyBpcyB1cGRhdGVkXG4gICAgICAgICAgKioqIHRoaXMgY29kZSBpcyByZXBsYWNlIHdpdGggdGhlIGNhbGwgdG8gXCJnZXRUb0RvQXNzaWdtZW50c1wiIGZ1bmN0aW9uIGJlbG93XG5cbiAgICAgICAgICBjb25zdCBhc3NpZ25tZW50c0xpc3QgPSBsb2NhbFBDb25uLmdldFZhbHVlKFxuICAgICAgICAgICAgQ0FTRV9DT05TVFMuRF9DQVNFX0FTU0lHTk1FTlRTX1JFU1VMVFNcbiAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgLy8gYWRkIHN0YXR1c1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoXCJjYXNlSW5mby5zdGF0dXNcIik7XG5cbiAgICAgICAgICBsZXQgbG9jYWxBc3NpZ25tZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhc3NpZ25tZW50c0xpc3RbMF0pKTtcbiAgICAgICAgICBsb2NhbEFzc2lnbm1lbnQuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgIGxldCBsb2NhQXNzaWdubWVudHNMaXN0OiBBcnJheTxhbnk+ID0gW107XG4gICAgICAgICAgbG9jYUFzc2lnbm1lbnRzTGlzdC5wdXNoKGxvY2FsQXNzaWdubWVudCk7XG5cbiAgICAgICAgICBjb25zdCBjYXNlQWN0aW9ucyA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0FDVElPTlMpO1xuICAgICAgICAgICovXG5cbiAgICAgICAgY29uc3QgdG9kb0Fzc2lnbm1lbnRzID0gZ2V0VG9Eb0Fzc2lnbm1lbnRzKHRoaXMucENvbm4kKTtcblxuICAgICAgICBpZiAodG9kb0Fzc2lnbm1lbnRzICYmIHRvZG9Bc3NpZ25tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy50b2RvX2Nhc2VJbmZvSUQkID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0lEKTtcbiAgICAgICAgICB0aGlzLnRvZG9fZGF0YXNvdXJjZSQgPSB7IHNvdXJjZTogdG9kb0Fzc2lnbm1lbnRzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiByZW1vdmUgdGhpcyBjb21tZW50ZWQgb3V0IGNvZGUgd2hlbiB1cGRhdGUgUmVhY3QvV0MgKi9cbiAgICAgICAgLy8gbGV0IGtpZCA9IHRoaXMucENvbm4kLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgICAgLy8ga2lkLmdldFBDb25uZWN0KCkgY2FuIGJlIGEgUmVmZXJlbmNlIGNvbXBvbmVudC4gU28gbm9ybWFsaXplIGl0IGp1c3QgaW4gY2FzZVxuICAgICAgICAvLyAgICAgICAgbGV0IHRvZG9LaWQgPSBSZWZlcmVuY2VDb21wb25lbnQubm9ybWFsaXplUENvbm4oa2lkLmdldFBDb25uZWN0KCkpLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgICAgLy8gICAgICAgIHRoaXMudG9kb19wQ29ubiQgPSB0b2RvS2lkLmdldFBDb25uZWN0KCk7XG5cbiAgICAgICAgLyogY29kZSBjaGFuZ2UgaGVyZSB0byBub3RlIGZvciBSZWFjdC9XQyAgKi9cbiAgICAgICAgLy8gdG9kbyBub3cgbmVlZHMgcENvbm4gdG8gb3BlbiB0aGUgd29yayBpdGVtIG9uIGNsaWNrIFwiZ29cIlxuICAgICAgICB0aGlzLnRvZG9fcENvbm4kID0gdGhpcy5wQ29ubiQ7XG5cbiAgICAgICAgLy8gc3RpbGwgbmVlZHMgdGhlIGNvbnRleHQgb2YgdGhlIG9yaWdpbmFsIHdvcmsgaXRlbVxuICAgICAgICB0aGlzLnRvZG9fY29udGV4dCQgPSBsb2NhbFBDb25uLmdldENvbnRleHROYW1lKCk7XG5cbiAgICAgICAgdGhpcy50b2RvX3Nob3dUb2RvJCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93Q2FzZU1lc3NhZ2VzKCkge1xuICAgIHRoaXMuY2FzZU1lc3NhZ2VzJCA9IHRoaXMubG9jYWxpemVkVmFsKHRoaXMucENvbm4kLmdldFZhbHVlKCdjYXNlTWVzc2FnZXMnKSwgdGhpcy5sb2NhbGVDYXRlZ29yeSk7XG4gICAgLy8gY2FzZU1lc3NhZ2VzJ3MgYmVoYXZpb3IgaGFzIGNoYW5nZWQgaW4gMjQuMiwgYW5kIGhlbmNlIGl0IGRvZXNuJ3QgbGV0IE9wdGlvbmFsIEFjdGlvbiB3b3JrLlxuICAgIC8vIENoYW5naW5nIHRoZSBiZWxvdyBjb25kaXRpb24gZm9yIG5vdy4gV2FzOiAodGhlQ2FzZU1lc3NhZ2VzIHx8ICFoYXNBc3NpZ25tZW50cygpKVxuICAgIGlmICghdGhpcy5oYXNBc3NpZ25tZW50cygpKSB7XG4gICAgICB0aGlzLmJIYXNDYXNlTWVzc2FnZXMkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYlNob3dDb25maXJtID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hlY2tTdmckID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygnY2hlY2snLCB0aGlzLnV0aWxzLmdldFNES1N0YXRpY0NvbnRlbnRVcmwoKSk7XG4gICAgICAvLyBUZW1wIGZpeCBmb3IgOC43IGNoYW5nZTogY29uZmlybWF0aW9uTm90ZSBubyBsb25nZXIgY29taW5nIHRocm91Z2ggaW4gY2FzZU1lc3NhZ2VzJC5cbiAgICAgIC8vIFNvLCBpZiB3ZSBnZXQgaGVyZSBhbmQgY2FzZU1lc3NhZ2VzJCBpcyBlbXB0eSwgdXNlIGRlZmF1bHQgdmFsdWUgaW4gRFggQVBJIHJlc3BvbnNlXG4gICAgICBpZiAoIXRoaXMuY2FzZU1lc3NhZ2VzJCkge1xuICAgICAgICB0aGlzLmNhc2VNZXNzYWdlcyQgPSB0aGlzLmxvY2FsaXplZFZhbCgnVGhhbmsgeW91ISBUaGUgbmV4dCBzdGVwIGluIHRoaXMgY2FzZSBoYXMgYmVlbiByb3V0ZWQgYXBwcm9wcmlhdGVseS4nLCB0aGlzLmxvY2FsZUNhdGVnb3J5KTtcbiAgICAgIH1cblxuICAgICAgLy8gcHVibGlzaCB0aGlzIFwiYXNzaWdubWVudEZpbmlzaGVkXCIgZm9yIG1hc2h1cCwgbmVlZCB0byBnZXQgYXBwcm92ZWQgYXMgYSBzdGFuZGFyZFxuICAgICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5wdWJsaXNoKCdhc3NpZ25tZW50RmluaXNoZWQnKTtcblxuICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJIYXNDYXNlTWVzc2FnZXMkID0gZmFsc2U7XG4gICAgICB0aGlzLmJTaG93Q29uZmlybSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZsb3dDb250YWluZXJDaGlsZHJlbigpIHtcbiAgICAvLyByb3V0aW5nSW5mbyB3YXMgYWRkZWQgYXMgY29tcG9uZW50IHByb3AgaW4gcG9wdWxhdGVBZGRpdGlvbmFsUHJvcHNcbiAgICBjb25zdCByb3V0aW5nSW5mbyA9IHRoaXMuYW5ndWxhclBDb25uZWN0LmdldENvbXBvbmVudFByb3AodGhpcywgJ3JvdXRpbmdJbmZvJyk7XG4gICAgdGhpcy5jb25maXJtX3Bjb25uID0gbnVsbDtcblxuICAgIGxldCBsb2FkaW5nSW5mbzogYW55O1xuICAgIHRyeSB7XG4gICAgICAvLyBAdHMtaWdub3JlIC0gUHJvcGVydHkgJ2dldExvYWRpbmdTdGF0dXMnIGlzIHByaXZhdGUgYW5kIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gY2xhc3MgJ0MxMW5FbnYnXG4gICAgICBsb2FkaW5nSW5mbyA9IHRoaXMucENvbm4kLmdldExvYWRpbmdTdGF0dXMoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLyogZW1wdHkgKi9cbiAgICB9XG5cbiAgICAvLyB0aGlzIGNoZWNrIGluIHJvdXRpbmdJbmZvLCBtaW1pYyBOZWJ1bGEvQ29uc3RlbGxhdGlvbiAoUmVhY3QpIHRvIGNoZWNrIGFuZCBnZXQgdGhlIGludGVybmFscyBvZiB0aGVcbiAgICAvLyBmbG93Q29udGFpbmVyIGFuZCBmb3JjZSB1cGRhdGVzIHRvIHBDb25uZWN0L3JlZHV4XG4gICAgaWYgKHJvdXRpbmdJbmZvICYmIGxvYWRpbmdJbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcmRlciA9IHJvdXRpbmdJbmZvLmFjY2Vzc2VkT3JkZXI7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbXMgPSByb3V0aW5nSW5mby5pdGVtcztcbiAgICAgIGNvbnN0IHR5cGUgPSByb3V0aW5nSW5mby50eXBlO1xuICAgICAgaWYgKGN1cnJlbnRPcmRlciAmJiBjdXJyZW50SXRlbXMpIHtcbiAgICAgICAgLy8gSkEgLSBtYWtpbmcgbW9yZSBzaW1pbGFyIHRvIE5lYnVsYS9Db25zdGVsbGF0aW9uXG4gICAgICAgIGNvbnN0IGtleSA9IGN1cnJlbnRPcmRlcltjdXJyZW50T3JkZXIubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgLy8gc2F2ZSBvZmYgaXRlbUtleSB0byBiZSB1c2VkIGZvciBmaW5pc2hBc3NpZ25tZW50LCBldGMuXG4gICAgICAgIC8vIHRpbWVvdXQgYW5kIGRldGVjdENoYW5nZXMgdG8gYXZvaWQgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoa2V5ICYmIGtleSAhPSAnJykge1xuICAgICAgICAgICAgdGhpcy5pdGVtS2V5JCA9IGtleTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tY29sbGFwc2libGUtaWZcbiAgICAgICAgaWYgKGN1cnJlbnRPcmRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRJdGVtc1trZXldICYmIGN1cnJlbnRJdGVtc1trZXldLnZpZXcgJiYgdHlwZSA9PT0gJ3NpbmdsZScgJiYgT2JqZWN0LmtleXMoY3VycmVudEl0ZW1zW2tleV0udmlldykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gd2hlbiB3ZSBnZXQgaGVyZSwgaXQgaXQgYmVjYXVzZSB0aGUgZmxvdyBhY3Rpb24gZGF0YSBoYXMgY2hhbmdlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgc2VydmVyLCBhbmQgbmVlZCB0byBhZGQgdG8gcENvbm5lY3QgYW5kIHVwZGF0ZSBjaGlsZHJlblxuXG4gICAgICAgICAgICB0aGlzLmFkZFBDb25uZWN0QW5kVXBkYXRlQ2hpbGRyZW4oY3VycmVudEl0ZW1zW2tleV0sIGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkUENvbm5lY3RBbmRVcGRhdGVDaGlsZHJlbihjdXJyZW50SXRlbSwga2V5KSB7XG4gICAgY29uc3QgbG9jYWxQQ29ubiA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcblxuICAgIGNvbnN0IHJvb3RWaWV3ID0gY3VycmVudEl0ZW0udmlldztcbiAgICBjb25zdCB7IGNvbnRleHQsIG5hbWU6IFZpZXdOYW1lIH0gPSByb290Vmlldy5jb25maWc7XG4gICAgY29uc3QgY29uZmlnOiBhbnkgPSB7IG1ldGE6IHJvb3RWaWV3IH07XG5cbiAgICAvLyBEb24ndCBnbyBhaGVhZCBpZiBWaWV3IGRvZXNuJ3QgZXhpc3RcbiAgICBpZiAoIVZpZXdOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50b2RvX2NvbnRleHQkID0gY3VycmVudEl0ZW0uY29udGV4dDtcblxuICAgIGNvbmZpZy5vcHRpb25zID0ge1xuICAgICAgY29udGV4dDogY3VycmVudEl0ZW0uY29udGV4dCxcbiAgICAgIHBhZ2VSZWZlcmVuY2U6IGNvbnRleHQgfHwgbG9jYWxQQ29ubi5nZXRQYWdlUmVmZXJlbmNlKCksXG4gICAgICBoYXNGb3JtOiB0cnVlLFxuICAgICAgaXNGbG93Q29udGFpbmVyOiB0cnVlLFxuICAgICAgY29udGFpbmVyTmFtZTogbG9jYWxQQ29ubi5nZXRDb250YWluZXJOYW1lKCksXG4gICAgICBjb250YWluZXJJdGVtTmFtZToga2V5LFxuICAgICAgcGFyZW50UGFnZVJlZmVyZW5jZTogbG9jYWxQQ29ubi5nZXRQYWdlUmVmZXJlbmNlKClcbiAgICB9O1xuXG4gICAgY29uc3QgY29uZmlnT2JqZWN0ID0gUENvcmUuY3JlYXRlUENvbm5lY3QoY29uZmlnKTtcbiAgICB0aGlzLmNvbmZpcm1fcGNvbm4gPSBjb25maWdPYmplY3QuZ2V0UENvbm5lY3QoKTtcbiAgICAvLyA4LjcgLSBjb25maWcgbWlnaHQgYmUgYSBSZWZlcmVuY2UgY29tcG9uZW50IHNvLCBuZWVkIHRvIG5vcm1hbGl6ZSBpdCB0byBnZXRcbiAgICAvLyAgdGhlIFZpZXcgaWYgaXQgaXMgYSBSZWZlcmVuY2UgY29tcG9uZW50LiBBbmQgbmVlZCB0byBwYXNzIGluIHRoZSBnZXRQQ29ubmVjdFxuICAgIC8vICB0byBoYXZlIG5vcm1hbGl6ZSBkbyBhIGMxMUVudiBjcmVhdGVDb21wb25lbnQgKHRoYXQgbWFrZXMgc3VyZSBvcHRpb25zLmhhc0Zvcm1cbiAgICAvLyAgaXMgcGFzc2VkIGFsb25nIHRvIGFsbCB0aGUgY29tcG9uZW50J3MgY2hpbGRyZW4pXG4gICAgY29uc3Qgbm9ybWFsaXplZENvbmZpZ09iamVjdCA9IFJlZmVyZW5jZUNvbXBvbmVudC5ub3JtYWxpemVQQ29ubihjb25maWdPYmplY3QuZ2V0UENvbm5lY3QoKSk7XG4gICAgLy8gV2Ugd2FudCB0aGUgY2hpbGRyZW4gdG8gYmUgdGhlIFBDb25uZWN0IGl0c2VsZiwgbm90IHRoZSByZXN1bHQgb2YgY2FsbGluZyBnZXRQQ29ubmVjdCgpLFxuICAgIC8vICBTbyBuZWVkIHRvIGdldCB0aGUgUENvbm5lY3Qgb2YgdGhlIG5vcm1hbGl6ZWQgY29tcG9uZW50IHdlIGp1c3QgY3JlYXRlZC4uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDb25maWdPYmplY3RBc1BDb25uZWN0ID0gbm9ybWFsaXplZENvbmZpZ09iamVjdC5nZXRDb21wb25lbnQoKTtcblxuICAgIC8vIG1ha2VzIHN1cmUgQW5ndWxhciB0cmFja3MgdGhlc2UgY2hhbmdlc1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLmJ1aWxkTmFtZSQgPSB0aGlzLmdldEJ1aWxkTmFtZSgpO1xuICAgICAgLy8gd2hhdCBjb21lcyBiYWNrIG5vdyBpbiBjb25maWdPYmplY3QgaXMgdGhlIGNoaWxkcmVuIG9mIHRoZSBmbG93Q29udGFpbmVyXG5cbiAgICAgIHRoaXMuYXJDaGlsZHJlbiQgPSBbXTtcbiAgICAgIHRoaXMuYXJDaGlsZHJlbiQucHVzaChub3JtYWxpemVkQ29uZmlnT2JqZWN0QXNQQ29ubmVjdCk7XG5cbiAgICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcblxuICAgICAgY29uc3Qgb1dvcmtJdGVtID0gY29uZmlnT2JqZWN0LmdldFBDb25uZWN0KCk7XG4gICAgICBjb25zdCBvV29ya0RhdGE6IGFueSA9IG9Xb3JrSXRlbS5nZXREYXRhT2JqZWN0KCk7XG5cbiAgICAgIHRoaXMuY29udGFpbmVyTmFtZSQgPSB0aGlzLmxvY2FsaXplZFZhbCh0aGlzLmdldEFjdGl2ZVZpZXdMYWJlbCgpIHx8IG9Xb3JrRGF0YS5jYXNlSW5mby5hc3NpZ25tZW50cz8uWzBdLm5hbWUsIHVuZGVmaW5lZCwgdGhpcy5sb2NhbGVSZWZlcmVuY2UpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QnVpbGROYW1lKCk6IHN0cmluZyB7XG4gICAgLy8gbGV0IHsgZ2V0UENvbm5lY3QsIG5hbWUgfSA9IHRoaXMucENvbm4kLnByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpO1xuICAgIGxldCB2aWV3Q29udGFpbmVyTmFtZSA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck5hbWUoKTtcblxuICAgIGlmICghdmlld0NvbnRhaW5lck5hbWUpIHZpZXdDb250YWluZXJOYW1lID0gJyc7XG4gICAgcmV0dXJuIGAke2NvbnRleHQudG9VcHBlckNhc2UoKX0vJHt2aWV3Q29udGFpbmVyTmFtZS50b1VwcGVyQ2FzZSgpfWA7XG4gIH1cblxuICBmb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgdGhpcy50b3VjaEFsbCgpO1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cCQudmFsaWQ7XG4gIH1cblxuICB0b3VjaEFsbCgpOiB2b2lkIHtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybUdyb3VwJC5jb250cm9scykuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9wVmlld1JlZnJlc2goKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cCQuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGhlbHBlcnMgLSBjb3B5aWVkIGZyb20gZmxvdyBjb250YWluZXIgaGVscGVycy5qc1xuXG4gIGFkZENvbnRhaW5lckl0ZW0ocENvbm5lY3QpIHtcbiAgICAvLyBjb3BpZWQgZnJvbSBmbG93IGNvbnRhaW5lciBoZWxwZXIuanNcbiAgICBjb25zdCBjb250YWluZXJNYW5hZ2VyID0gcENvbm5lY3QuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIGNvbnN0IGNvbnRleHROYW1lID0gcENvbm5lY3QuZ2V0Q29udGV4dE5hbWUoKTsgLy8gaGVyZSB3ZSB3aWxsIGdldCBwYXJlbnQgY29udGV4dCBuYW1lLCBhcyBmbG93IGNvbnRhaW5lciBpcyBjaGlsZCBvZiB2aWV3IGNvbnRhaW5lclxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHBDb25uZWN0LmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG5cbiAgICBsZXQga2V5O1xuICAgIGxldCBmbG93TmFtZTtcblxuICAgIGlmIChjYXNlVmlld01vZGUgIT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBjb250ZXh0TmFtZS5zdWJzdHJpbmcoMCwgY29udGV4dE5hbWUubGFzdEluZGV4T2YoJ18nKSk7XG4gICAgICBjb25zdCBhY3RpdmVDb250YWluZXJJdGVtSUQgPSBQQ29yZS5nZXRDb250YWluZXJVdGlscygpLmdldEFjdGl2ZUNvbnRhaW5lckl0ZW1OYW1lKHRhcmdldCk7XG4gICAgICBjb25zdCBjb250YWluZXJJdGVtRGF0YSA9IFBDb3JlLmdldENvbnRhaW5lclV0aWxzKCkuZ2V0Q29udGFpbmVySXRlbURhdGEodGFyZ2V0LCBhY3RpdmVDb250YWluZXJJdGVtSUQpO1xuXG4gICAgICBpZiAoY29udGFpbmVySXRlbURhdGEpIHtcbiAgICAgICAgKHsga2V5LCBmbG93TmFtZSB9ID0gY29udGFpbmVySXRlbURhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lck1hbmFnZXIuYWRkQ29udGFpbmVySXRlbSh7XG4gICAgICBzZW1hbnRpY1VSTDogJycsXG4gICAgICBrZXksXG4gICAgICBmbG93TmFtZSxcbiAgICAgIGNhc2VWaWV3TW9kZTogJ3BlcmZvcm0nLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQVNTSUdOTUVOVCcsXG4gICAgICBkYXRhOiBwQ29ubmVjdC5nZXREYXRhT2JqZWN0KGNvbnRleHROYW1lKVxuICAgIH0pO1xuICB9XG4gIC8vIGhlbHBlcnMgZW5kXG59XG4iLCI8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiIGNsYXNzPVwicHNkay1mbG93LWNvbnRhaW5lci10b3BcIj5cbiAgPGRpdiAqbmdJZj1cIiFiU2hvd0NvbmZpcm1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXRvZG9fc2hvd1RvZG8kXCI+XG4gICAgICA8aDI+e3sgY29udGFpbmVyTmFtZSQgfX08L2gyPlxuICAgICAgPGRpdiAqbmdJZj1cImJhbm5lcnM/Lmxlbmd0aFwiPlxuICAgICAgICA8Y29tcG9uZW50LW1hcHBlciBuYW1lPVwiQWxlcnRCYW5uZXJcIiBbcHJvcHNdPVwieyBiYW5uZXJzIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidG9kb19zaG93VG9kbyRcIj5cbiAgICAgIDxjb21wb25lbnQtbWFwcGVyXG4gICAgICAgICpuZ0lmPVwicENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW1cIlxuICAgICAgICBuYW1lPVwiVG9kb1wiXG4gICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgcENvbm4kOiBwQ29ubmVjdE9mQWN0aXZlQ29udGFpbmVySXRlbSxcbiAgICAgICAgICBjYXNlSW5mb0lEJDogdG9kb19jYXNlSW5mb0lEJCxcbiAgICAgICAgICBkYXRhc291cmNlJDogdG9kb19kYXRhc291cmNlJCxcbiAgICAgICAgICBzaG93VG9kb0xpc3QkOiB0b2RvX3Nob3dUb2RvTGlzdCQsXG4gICAgICAgICAgaGVhZGVyVGV4dCQ6IHRvZG9faGVhZGVyVGV4dCQsXG4gICAgICAgICAgdHlwZSQ6ICdUT0RPJyxcbiAgICAgICAgICBjb250ZXh0JDogdG9kb19jb250ZXh0JCxcbiAgICAgICAgICBpc0NvbmZpcm06IHRydWVcbiAgICAgICAgfVwiXG4gICAgICA+PC9jb21wb25lbnQtbWFwcGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhdG9kb19zaG93VG9kbyRcIj5cbiAgICAgIDxjb21wb25lbnQtbWFwcGVyXG4gICAgICAgICpuZ0lmPVwicENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW1cIlxuICAgICAgICBuYW1lPVwiQXNzaWdubWVudFwiXG4gICAgICAgIFtwcm9wc109XCJ7IHBDb25uJDogcENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0sIGZvcm1Hcm91cCQsIGFyQ2hpbGRyZW4kLCBpdGVtS2V5JCB9XCJcbiAgICAgID48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiYkhhc0Nhc2VNZXNzYWdlcyRcIj5cbiAgICA8bWF0LWNhcmQgY2xhc3M9XCJwc2RrLW1lc3NhZ2UtY2FyZFwiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3dcIj5cbiAgICAgICAgPGRpdj48aW1nIGNsYXNzPVwicHNkay1pY29uXCIgc3JjPVwie3sgY2hlY2tTdmckIH19XCIgLz48L2Rpdj5cbiAgICAgICAgPGRpdj57eyBjYXNlTWVzc2FnZXMkIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImJTaG93QmFubmVyICYmIGJTaG93Q29uZmlybSAmJiBjb25maXJtX3Bjb25uXCI+XG4gICAgPGNvbXBvbmVudC1tYXBwZXIgbmFtZT1cIlZpZXdcIiBbcHJvcHNdPVwieyBmb3JtR3JvdXAkLCBwQ29ubiQ6IGNvbmZpcm1fcGNvbm4gfVwiPjwvY29tcG9uZW50LW1hcHBlcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
463
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2luZnJhL0NvbnRhaW5lcnMvZmxvdy1jb250YWluZXIvZmxvdy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQTZCLFVBQVUsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDM0csT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7QUF3QjlGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSwwQkFBMEI7SUF3Q3BFLFlBQ0UsUUFBa0IsRUFDVixLQUF3QixFQUN4QixTQUFpQyxFQUNqQyxFQUFlLEVBQ2YsTUFBYyxFQUNkLEtBQVk7UUFFcEIsS0FBSyxDQUFDLFFB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dCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE5nWm9uZSwgZm9yd2FyZFJlZiwgT25EZXN0cm95LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XG5pbXBvcnQgeyBwdWJsaWNDb25zdGFudHMgfSBmcm9tICdAcGVnYS9wY29yZS1wY29ubmVjdC10eXBlZGVmcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NTcGlubmVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL19tZXNzYWdlcy9wcm9ncmVzcy1zcGlubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVmZXJlbmNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlL3JlZmVyZW5jZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9faGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBnZXRUb0RvQXNzaWdubWVudHMsIGhhc0Fzc2lnbm1lbnRzLCBzaG93QmFubmVyIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IENvbXBvbmVudE1hcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL19icmlkZ2UvY29tcG9uZW50LW1hcHBlci9jb21wb25lbnQtbWFwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbG93Q29udGFpbmVyQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtY29tcG9uZW50cy9mbG93LWNvbnRhaW5lci1iYXNlLmNvbXBvbmVudCc7XG5cbi8qKlxuICogV0FSTklORzogIEl0IGlzIG5vdCBleHBlY3RlZCB0aGF0IHRoaXMgZmlsZSBzaG91bGQgYmUgbW9kaWZpZWQuICBJdCBpcyBwYXJ0IG9mIGluZnJhc3RydWN0dXJlIGNvZGUgdGhhdCB3b3JrcyB3aXRoXG4gKiBSZWR1eCBhbmQgY3JlYXRpb24vdXBkYXRlIG9mIFJlZHV4IGNvbnRhaW5lcnMgYW5kIFBDb25uZWN0LiAgTW9kaWZ5aW5nIHRoaXMgY29kZSBjb3VsZCBoYXZlIHVuZGVzaXJlYWJsZSByZXN1bHRzIGFuZFxuICogaXMgdG90YWxseSBhdCB5b3VyIG93biByaXNrLlxuICovXG5cbmludGVyZmFjZSBGbG93Q29udGFpbmVyUHJvcHMge1xuICAvLyBJZiBhbnksIGVudGVyIGFkZGl0aW9uYWwgcHJvcHMgdGhhdCBvbmx5IGV4aXN0IG9uIHRoaXMgY29tcG9uZW50XG4gIGNoaWxkcmVuPzogYW55W107XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHJvdXRpbmdJbmZvPzogYW55O1xuICBwYWdlTWVzc2FnZXM6IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZmxvdy1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmxvdy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mbG93LWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtVdGlsc10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdENhcmRNb2R1bGUsIGZvcndhcmRSZWYoKCkgPT4gQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50KV1cbn0pXG5leHBvcnQgY2xhc3MgRmxvd0NvbnRhaW5lckNvbXBvbmVudCBleHRlbmRzIEZsb3dDb250YWluZXJCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcblxuICBwQ29yZUNvbnN0YW50czogdHlwZW9mIHB1YmxpY0NvbnN0YW50cztcbiAgY29uZmlnUHJvcHMkOiBGbG93Q29udGFpbmVyUHJvcHM7XG5cbiAgZm9ybUdyb3VwJDogRm9ybUdyb3VwO1xuICBhckNoaWxkcmVuJDogYW55W107XG4gIGl0ZW1LZXkkID0gJyc7XG4gIGNvbnRhaW5lck5hbWUkOiBzdHJpbmc7XG4gIGJ1aWxkTmFtZSQ6IHN0cmluZztcblxuICAvLyB0b2RvXG4gIHRvZG9fc2hvd1RvZG8kID0gZmFsc2U7XG4gIHRvZG9fY2FzZUluZm9JRCQ6IHN0cmluZztcbiAgdG9kb19zaG93VG9kb0xpc3QkID0gZmFsc2U7XG4gIHRvZG9fZGF0YXNvdXJjZSQ6IGFueTtcbiAgdG9kb19oZWFkZXJUZXh0JCA9ICdUbyBkbyc7XG4gIHRvZG9fdHlwZSQ6IHN0cmluZztcbiAgdG9kb19jb250ZXh0JDogc3RyaW5nO1xuICB0b2RvX3BDb25uJDogdHlwZW9mIFBDb25uZWN0O1xuXG4gIGJIYXNDYW5jZWwgPSBmYWxzZTtcblxuICAvLyBtZXNzYWdlc1xuICBjYXNlTWVzc2FnZXMkOiBzdHJpbmc7XG4gIGJIYXNDYXNlTWVzc2FnZXMkID0gZmFsc2U7XG4gIGNoZWNrU3ZnJDogc3RyaW5nO1xuICBUT0RPOiBhbnk7XG4gIGJTaG93Q29uZmlybSA9IGZhbHNlO1xuICBiU2hvd0Jhbm5lcjogYm9vbGVhbjtcbiAgY29uZmlybV9wY29ubjogYW55O1xuICBsb2NhbGl6ZWRWYWw6IGFueTtcbiAgbG9jYWxlQ2F0ZWdvcnkgPSAnTWVzc2FnZXMnO1xuICBsb2NhbGVSZWZlcmVuY2U6IGFueTtcbiAgYmFubmVyczogYW55W107XG4gIC8vIGl0ZW1LZXk6IHN0cmluZyA9IFwiXCI7ICAgLy8gSkEgLSB0aGlzIGlzIHdoYXQgTmVidWxhL0NvbnN0ZWxsYXRpb24gdXNlcyB0byBwYXNzIHRvIGZpbmlzaEFzc2lnbm1lbnQsIG5hdmlnYXRlVG9TdGVwXG5cbiAgcENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcHNTZXJ2aWNlOiBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSB1dGlsczogVXRpbHNcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIC8vIGNyZWF0ZSB0aGUgZm9ybUdyb3VwXG4gICAgdGhpcy5mb3JtR3JvdXAkID0gdGhpcy5mYi5ncm91cCh7IGhpZGVSZXF1aXJlZDogZmFsc2UgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBGaXJzdCB0aGluZyBpbiBpbml0aWFsaXphdGlvbiBpcyByZWdpc3RlcmluZyBhbmQgc3Vic2NyaWJpbmcgdG8gdGhlIEFuZ3VsYXJQQ29ubmVjdCBzZXJ2aWNlXG4gICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhID0gdGhpcy5hbmd1bGFyUENvbm5lY3QucmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQodGhpcywgdGhpcy5vblN0YXRlQ2hhbmdlKTtcblxuICAgIHRoaXMubG9jYWxpemVkVmFsID0gUENvcmUuZ2V0TG9jYWxlVXRpbHMoKS5nZXRMb2NhbGVWYWx1ZTtcbiAgICBjb25zdCBjYXNlSW5mbyA9IHRoaXMucENvbm4kLmdldENhc2VJbmZvKCk7XG4gICAgdGhpcy5sb2NhbGVSZWZlcmVuY2UgPSBgJHtjYXNlSW5mbz8uZ2V0Q2xhc3NOYW1lKCl9IUNBU0UhJHtjYXNlSW5mby5nZXROYW1lKCl9YC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgLy8gVGhlbiwgY29udGludWUgb24gd2l0aCBvdGhlciBpbml0aWFsaXphdGlvblxuXG4gICAgLy8gZ2V0IHRoZSBQQ29yZSBjb25zdGFudHNcbiAgICB0aGlzLnBDb3JlQ29uc3RhbnRzID0gUENvcmUuZ2V0Q29uc3RhbnRzKCk7XG4gICAgY29uc3QgeyBUT0RPIH0gPSB0aGlzLnBDb3JlQ29uc3RhbnRzO1xuICAgIHRoaXMuVE9ETyA9IFRPRE87XG4gICAgLy8gd2l0aCBpbml0LCBmb3JjZSBjaGlsZHJlbiB0byBiZSBsb2FkZWQgb2YgZ2xvYmFsIHBDb25uXG4gICAgdGhpcy5pbml0Q29tcG9uZW50KHRydWUpO1xuXG4gICAgdGhpcy5pbml0Q29udGFpbmVyKCk7XG5cbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnN1YnNjcmliZShcbiAgICAgIFBDb3JlLmdldENvbnN0YW50cygpLlBVQl9TVUJfRVZFTlRTLkVWRU5UX0NBTkNFTCxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDYW5jZWwoKTtcbiAgICAgIH0sXG4gICAgICAnY2FuY2VsQXNzaWdubWVudCdcbiAgICApO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5zdWJzY3JpYmUoXG4gICAgICAnY2FuY2VsUHJlc3NlZCcsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsUHJlc3NlZCgpO1xuICAgICAgfSxcbiAgICAgICdjYW5jZWxQcmVzc2VkJ1xuICAgICk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnN1YnNjcmliZShcbiAgICAgICdjbGVhckJhbm5lck1lc3NhZ2VzJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5iYW5uZXJzID0gW107XG4gICAgICB9LFxuICAgICAgJ0NMRUFSX0JBTk5FUl9NRVNTQUdFUydcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbigpO1xuICAgIH1cblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkudW5zdWJzY3JpYmUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuUFVCX1NVQl9FVkVOVFMuRVZFTlRfQ0FOQ0VMLCAnY2FuY2VsQXNzaWdubWVudCcpO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS51bnN1YnNjcmliZSgnY2FuY2VsUHJlc3NlZCcsICdjYW5jZWxQcmVzc2VkJyk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnVuc3Vic2NyaWJlKCdjbGVhckJhbm5lck1lc3NhZ2VzJywgJ0NMRUFSX0JBTk5FUl9NRVNTQUdFUycpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsKCkge1xuICAgIC8vIGNhbmNlbCBoYXBwZW5lZCwgc28gb2sgdG8gaW5pdGlhbGl6ZSB0aGUgZmxvdyBjb250YWluZXJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdva1RvSW5pdEZsb3dDb250YWluZXInLCAndHJ1ZScpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsUHJlc3NlZCgpIHtcbiAgICB0aGlzLmJIYXNDYW5jZWwgPSB0cnVlO1xuICB9XG5cbiAgLy8gQ2FsbGJhY2sgcGFzc2VkIHdoZW4gc3Vic2NyaWJpbmcgdG8gc3RvcmUgY2hhbmdlXG4gIG9uU3RhdGVDaGFuZ2UoKSB7XG4gICAgdGhpcy5jaGVja0FuZFVwZGF0ZSgpO1xuICB9XG5cbiAgY2hlY2tBbmRVcGRhdGUoKSB7XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBjaGVjayB0aGUgYnJpZGdlIHRvIHNlZSBpZiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpXG4gICAgY29uc3QgYlVwZGF0ZVNlbGYgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5zaG91bGRDb21wb25lbnRVcGRhdGUodGhpcyk7XG5cbiAgICBjb25zdCBwQ29ubiA9IHRoaXMucENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0gfHwgdGhpcy5wQ29ubiQ7XG4gICAgY29uc3QgY2FzZVZpZXdNb2RlRnJvbVByb3BzID0gdGhpcy5hbmd1bGFyUENvbm5lY3QuZ2V0Q29tcG9uZW50UHJvcCh0aGlzLCAnY2FzZVZpZXdNb2RlJyk7XG4gICAgY29uc3QgY2FzZVZpZXdNb2RlRnJvbVJlZHV4ID0gcENvbm4uZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnLCAnJyk7XG5cbiAgICBjb25zdCBjb21wbGV0ZVByb3BzID0gdGhpcy5hbmd1bGFyUENvbm5lY3QuZ2V0Q3VycmVudENvbXBsZXRlUHJvcHModGhpcykgYXMgRmxvd0NvbnRhaW5lclByb3BzO1xuXG4gICAgLy8gT05MWSBjYWxsIHVwZGF0ZVNlbGYgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGVcbiAgICAvLyAgICBBTkQgcmVtb3ZpbmcgdGhlIFwiZ2F0ZVwiIHRoYXQgd2FzIHB1dCB0aGVyZSBzaW5jZSBzaG91bGRDb21wb25lbnRVcGRhdGVcbiAgICAvLyAgICAgIHNob3VsZCBiZSB0aGUgcmVhbCBcImdhdGVcIlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLWNvbGxhcHNpYmxlLWlmXG4gICAgaWYgKGJVcGRhdGVTZWxmIHx8IGNhc2VWaWV3TW9kZUZyb21Qcm9wcyAhPT0gY2FzZVZpZXdNb2RlRnJvbVJlZHV4KSB7XG4gICAgICAvLyBkb24ndCB3YW50IHRvIHJlZHJhdyB0aGUgZmxvdyBjb250YWluZXIgd2hlbiB0aGVyZSBhcmUgcGFnZSBtZXNzYWdlcywgYmVjYXVzZVxuICAgICAgLy8gdGhlIHJlZHJhdyBjYXVzZXMgdXMgdG8gbG9vc2UgdGhlIGVycm9ycyBvbiB0aGUgZWxlbWVudHNcbiAgICAgIGlmICghY29tcGxldGVQcm9wcy5wYWdlTWVzc2FnZXMgfHwgY29tcGxldGVQcm9wcy5wYWdlTWVzc2FnZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgLy8gd2l0aCBhIGNhbmNlbCwgbmVlZCB0byB0aW1lb3V0IHNvIHRvZG8gd2lsbCB1cGRhdGUgY29ycmVjdGx5XG4gICAgICAgIGlmICh0aGlzLmJIYXNDYW5jZWwpIHtcbiAgICAgICAgICB0aGlzLmJIYXNDYW5jZWwgPSBmYWxzZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNob3dQYWdlTWVzc2FnZXMoY29tcGxldGVQcm9wcyk7XG4gIH1cblxuICBzaG93UGFnZU1lc3NhZ2VzKGNvbXBsZXRlUHJvcHM6IEZsb3dDb250YWluZXJQcm9wcykge1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBjb25zdCBwYWdlTWVzc2FnZXMgPSBjb21wbGV0ZVByb3BzLnBhZ2VNZXNzYWdlcztcbiAgICAgIHRoaXMuYmFubmVycyA9IFt7IG1lc3NhZ2VzOiBwYWdlTWVzc2FnZXM/Lm1hcChtc2cgPT4gdGhpcy5sb2NhbGl6ZWRWYWwobXNnLm1lc3NhZ2UsICdNZXNzYWdlcycpKSwgdmFyaWFudDogJ3VyZ2VudCcgfV07XG4gICAgfSk7XG4gIH1cblxuICBnZXRUb2RvVmlzaWJpbHR5KCkge1xuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHRoaXMucENvbm4kLmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG4gICAgaWYgKGNhc2VWaWV3TW9kZSAmJiBjYXNlVmlld01vZGUgPT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCBraWQgPSB0aGlzLnBDb25uJC5nZXRDaGlsZHJlbigpWzBdO1xuICAgICAgY29uc3QgdG9kb0tpZCA9IGtpZC5nZXRQQ29ubmVjdCgpLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgIHRoaXMudG9kb19wQ29ubiQgPSB0b2RvS2lkLmdldFBDb25uZWN0KCk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGNhc2VWaWV3TW9kZSAmJiBjYXNlVmlld01vZGUgPT09ICdwZXJmb3JtJyk7XG4gIH1cblxuICBpbml0Q29udGFpbmVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lck1nciA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck1hbmFnZXIoKTtcbiAgICBjb25zdCBiYXNlQ29udGV4dCA9IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCk7XG4gICAgY29uc3QgY29udGFpbmVyTmFtZSA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck5hbWUoKTtcbiAgICBjb25zdCBjb250YWluZXJUeXBlID0gJ3NpbmdsZSc7XG5cbiAgICBjb25zdCBmbG93Q29udGFpbmVyVGFyZ2V0ID0gYCR7YmFzZUNvbnRleHR9LyR7Y29udGFpbmVyTmFtZX1gO1xuICAgIGNvbnN0IGlzQ29udGFpbmVySXRlbUF2YWlsYWJsZSA9IFBDb3JlLmdldENvbnRhaW5lclV0aWxzKCkuZ2V0QWN0aXZlQ29udGFpbmVySXRlbU5hbWUoZmxvd0NvbnRhaW5lclRhcmdldCk7XG5cbiAgICAvLyBjbGVhciBvdXQgc2luY2Ugd2UgYXJlIGluaXRpYWxpemluZ1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ29rVG9Jbml0Rmxvd0NvbnRhaW5lcicsICdmYWxzZScpO1xuXG4gICAgaWYgKCFpc0NvbnRhaW5lckl0ZW1BdmFpbGFibGUpIHtcbiAgICAgIGNvbnRhaW5lck1nci5pbml0aWFsaXplQ29udGFpbmVycyh7XG4gICAgICAgIHR5cGU6IGNvbnRhaW5lclR5cGVcbiAgICAgIH0pO1xuXG4gICAgICAvKiByZW1vdmUgY29tbWVudGVkIG91dCBjb2RlIHdoZW4gdXBkYXRlIFJlYWN0L1dDXG4gICAgICAgKioqIGluc3RlYWQgb2YgZ2V0dGluZyB2YWx1ZXMgaGVyZSB0byBwYXNzIHRvIGFkZENvbnRhaW5lckl0ZW0sIHdlIGNhbGwgdGhlIGZ1bmN0aW9uIGJlbG93IFwiYWRkQ29udGFpbmVySXRlbVwiXG4gICAgICAgKioqIHdoaWNoIGNvbWVzIGZyb20gZmxvdyBjb250YWluZXIgaGVscGVycyBpbiBOZWJ1bGFcbiAgICAgICAqL1xuICAgICAgLy8gY29udGFpbmVyTWdyLmFkZENvbnRhaW5lckl0ZW0oe1xuICAgICAgLy8gICBzZW1hbnRpY1VSTDogXCJcIixcbiAgICAgIC8vICAga2V5OiB0aGlzLnBDb25uJC5nZXRWYWx1ZShcImtleVwiKSxcbiAgICAgIC8vICAgZmxvd05hbWU6IHRoaXMucENvbm4kLmdldFZhbHVlKFwiZmxvd05hbWVcIiksXG4gICAgICAvLyAgIGNhc2VWaWV3TW9kZTogXCJwZXJmb3JtXCIsXG4gICAgICAvLyAgIGRhdGE6IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoYmFzZUNvbnRleHQpLFxuICAgICAgLy8gICBjb250YWluZXJUeXBlXG4gICAgICAvLyB9KTtcblxuICAgICAgdGhpcy5hZGRDb250YWluZXJJdGVtKHRoaXMucENvbm4kKTtcbiAgICB9XG4gIH1cblxuICBpbml0Q29tcG9uZW50KGJMb2FkQ2hpbGRyZW46IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNvbmZpZ1Byb3BzJCA9IHRoaXMucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyh0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpKSBhcyBGbG93Q29udGFpbmVyUHJvcHM7XG4gICAgdGhpcy5zaG93UGFnZU1lc3NhZ2VzKHRoaXMuY29uZmlnUHJvcHMkKTtcblxuICAgIC8vIHdoZW4gdHJ1ZSwgdXBkYXRlIGFyQ2hpbGRyZW4gZnJvbSBwQ29ubiwgb3RoZXJ3aXNlLCBhckNoaWxyZW4gd2lsbCBiZSB1cGRhdGVkIGluIHVwZGF0ZVNlbGYoKVxuICAgIGlmIChiTG9hZENoaWxkcmVuKSB7XG4gICAgICB0aGlzLmFyQ2hpbGRyZW4kID0gdGhpcy5wQ29ubiQuZ2V0Q2hpbGRyZW4oKTtcbiAgICB9XG5cbiAgICAvLyBjb25zdCBvRGF0YSA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKTtcblxuICAgIC8vIGNvbnN0IGFjdGl2ZUFjdGlvbkxhYmVsOiBzdHJpbmcgPSAnJztcbiAgICAvLyBjb25zdCB7IGdldFBDb25uZWN0IH0gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG5cbiAgICB0aGlzLnRvZG9fc2hvd1RvZG8kID0gdGhpcy5nZXRUb2RvVmlzaWJpbHR5KCk7XG5cbiAgICAvLyBjcmVhdGUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zXG4gICAgLy8gY29uc3QgY29udGFpbmVyTWdyID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIC8vIGNvbnN0IGFjdGlvbnNBUEkgPSB0aGlzLnBDb25uJC5nZXRBY3Rpb25zQXBpKCk7XG4gICAgY29uc3QgYmFzZUNvbnRleHQgPSB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpO1xuICAgIGNvbnN0IGFjTmFtZSA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck5hbWUoKTtcblxuICAgIGlmICh0aGlzLml0ZW1LZXkkID09PSAnJykge1xuICAgICAgdGhpcy5pdGVtS2V5JCA9IGJhc2VDb250ZXh0LmNvbmNhdCgnLycpLmNvbmNhdChhY05hbWUpO1xuICAgIH1cblxuICAgIHRoaXMucENvbm4kLmlzQm91bmRUb1N0YXRlKCk7XG5cbiAgICAvLyBpbnNpZGVcbiAgICAvLyBnZXQgZmlzdCBraWQsIGdldCB0aGUgbmFtZSBhbmQgZGlzcGxheVxuICAgIC8vIHBhc3MgZmlyc3Qga2lkIHRvIGEgdmlldyBjb250YWluZXIsIHdoaWNoIHdpbGwgZGlzcGVyc2UgaXQgdG8gYSB2aWV3IHdoaWNoIHdpbGwgdXNlIG9uZSBjb2x1bW4sIHR3byBjb2x1bW4sIGV0Yy5cbiAgICBjb25zdCBvV29ya0l0ZW0gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG4gICAgLy8gY29uc3Qgb1dvcmtNZXRhID0gb1dvcmtJdGVtLmdldFJhd01ldGFkYXRhKCk7XG4gICAgY29uc3Qgb1dvcmtEYXRhID0gb1dvcmtJdGVtLmdldERhdGFPYmplY3QoKTtcblxuICAgIC8vIHRoaXMuY29udGFpbmVyTmFtZSQgPSBvV29ya01ldGFbXCJuYW1lXCJdO1xuICAgIGlmIChiTG9hZENoaWxkcmVuICYmIG9Xb3JrRGF0YSkge1xuICAgICAgdGhpcy5jb250YWluZXJOYW1lJCA9IHRoaXMubG9jYWxpemVkVmFsKHRoaXMuZ2V0QWN0aXZlVmlld0xhYmVsKCkgfHwgb1dvcmtEYXRhLmNhc2VJbmZvLmFzc2lnbm1lbnRzWzBdLm5hbWUsIHVuZGVmaW5lZCwgdGhpcy5sb2NhbGVSZWZlcmVuY2UpO1xuICAgIH1cblxuICAgIC8vIHR1cm4gb2ZmIHNwaW5uZXJcbiAgICB0aGlzLnBzU2VydmljZS5zZW5kTWVzc2FnZShmYWxzZSk7XG4gIH1cblxuICBpc0Nhc2VXaWRlTG9jYWxBY3Rpb24oKSB7XG4gICAgY29uc3QgYWN0aW9uSUQgPSB0aGlzLnBDb25uJC5nZXRWYWx1ZSh0aGlzLnBDb3JlQ29uc3RhbnRzLkNBU0VfSU5GTy5BQ1RJVkVfQUNUSU9OX0lEKTtcbiAgICBjb25zdCBjYXNlQWN0aW9ucyA9IHRoaXMucENvbm4kLmdldFZhbHVlKHRoaXMucENvcmVDb25zdGFudHMuQ0FTRV9JTkZPLkFWQUlMQUJMRUFDVElPTlMpO1xuICAgIGxldCBiQ2FzZVdpZGVBY3Rpb24gPSBmYWxzZTtcbiAgICBpZiAoY2FzZUFjdGlvbnMgJiYgYWN0aW9uSUQpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk9iaiA9IGNhc2VBY3Rpb25zLmZpbmQoY2FzZUFjdGlvbiA9PiBjYXNlQWN0aW9uLklEID09PSBhY3Rpb25JRCk7XG4gICAgICBpZiAoYWN0aW9uT2JqKSB7XG4gICAgICAgIGJDYXNlV2lkZUFjdGlvbiA9IGFjdGlvbk9iai50eXBlID09PSAnQ2FzZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiQ2FzZVdpZGVBY3Rpb247XG4gIH1cblxuICBoYXNDaGlsZENhc2VBc3NpZ25tZW50cygpIHtcbiAgICBjb25zdCBjaGlsZENhc2VzID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUodGhpcy5wQ29yZUNvbnN0YW50cy5DQVNFX0lORk8uQ0hJTERfQVNTSUdOTUVOVFMpO1xuXG4gICAgcmV0dXJuIGNoaWxkQ2FzZXMgJiYgY2hpbGRDYXNlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0QWN0aXZlVmlld0xhYmVsKCkge1xuICAgIGxldCBhY3RpdmVBY3Rpb25MYWJlbCA9ICcnO1xuXG4gICAgY29uc3QgeyBDQVNFX0lORk86IENBU0VfQ09OU1RTIH0gPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcblxuICAgIGNvbnN0IGNhc2VBY3Rpb25zID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0FDVElPTlMpIGFzIGFueVtdO1xuICAgIGNvbnN0IGFjdGl2ZUFjdGlvbklEID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQUNUSVZFX0FDVElPTl9JRCk7XG4gICAgY29uc3QgYWN0aXZlQWN0aW9uID0gY2FzZUFjdGlvbnM/LmZpbmQoYWN0aW9uID0+IGFjdGlvbi5JRCA9PT0gYWN0aXZlQWN0aW9uSUQpO1xuICAgIGlmIChhY3RpdmVBY3Rpb24pIHtcbiAgICAgIGFjdGl2ZUFjdGlvbkxhYmVsID0gYWN0aXZlQWN0aW9uLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBhY3RpdmVBY3Rpb25MYWJlbDtcbiAgfVxuXG4gIGZpbmRDdXJyZW50SW5kaWNpZXMoYXJTdGVwcGVyU3RlcHM6IGFueVtdLCBhckluZGljaWVzOiBudW1iZXJbXSwgZGVwdGg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGFyU3RlcHBlclN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICBpZiAoc3RlcC52aXNpdGVkX3N0YXR1cyA9PSAnY3VycmVudCcpIHtcbiAgICAgICAgYXJJbmRpY2llc1tkZXB0aF0gPSBjb3VudDtcblxuICAgICAgICAvLyBhZGQgaW5cbiAgICAgICAgc3RlcC5zdGVwX3N0YXR1cyA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChzdGVwLnZpc2l0ZWRfc3RhdHVzID09ICdzdWNjZXNzJykge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzdGVwLnN0ZXBfc3RhdHVzID0gJ2NvbXBsZXRlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzdGVwLnN0ZXBfc3RhdHVzID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwLnN0ZXBzKSB7XG4gICAgICAgIGFySW5kaWNpZXMgPSB0aGlzLmZpbmRDdXJyZW50SW5kaWNpZXMoc3RlcC5zdGVwcywgYXJJbmRpY2llcywgZGVwdGggKyAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhckluZGljaWVzO1xuICB9XG5cbiAgLy8gQ2FsbGVkIHdoZW4gYnJpZGdlIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbXBvbmVudFxuICAvLyBzaG91bGQgdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICB1cGRhdGVTZWxmKCkge1xuICAgIC8vIGZvciBub3dcbiAgICAvLyBjb25zdCB7IGdldFBDb25uZWN0IH0gPSB0aGlzLmFyQ2hpbGRyZW4kWzBdLmdldFBDb25uZWN0KCk7XG4gICAgY29uc3QgbG9jYWxQQ29ubiA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcblxuICAgIHRoaXMucENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0gPSB0aGlzLmdldFBDb25uZWN0T2ZBY3RpdmVDb250YWluZXJJdGVtKHRoaXMucENvbm4kKSB8fCB0aGlzLnBDb25uJDtcblxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHRoaXMucENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0uZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnKTtcbiAgICB0aGlzLmJTaG93QmFubmVyID0gc2hvd0Jhbm5lcih0aGlzLnBDb25uJCk7XG5cbiAgICBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PSAncmV2aWV3Jykge1xuICAgICAgdGhpcy5sb2FkUmV2aWV3UGFnZShsb2NhbFBDb25uKTtcblxuICAgICAgLy8gaW4gTmVidWxhL0NvbnN0ZWxsYXRpb24sIHdoZW4gY2FuY2VsIGlzIGNhbGxlZCwgc29tZWhvdyB0aGUgY29uc3RydWN0b3IgZm9yIGZsb3dDb250YWluZXIgaXMgY2FsbGVkIHdoaWNoXG4gICAgICAvLyBkb2VzIGluaXQvYWRkIG9mIGNvbnRhaW5lcnMuICBUaGlzIG1pbWljcyB0aGF0XG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnb2tUb0luaXRGbG93Q29udGFpbmVyJykgPT0gJ3RydWUnKSB7XG4gICAgICAgIHRoaXMuaW5pdENvbnRhaW5lcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FzZVZpZXdNb2RlICYmIGNhc2VWaWV3TW9kZSA9PT0gJ3BlcmZvcm0nKSB7XG4gICAgICAvLyBwZXJmb3JtXG4gICAgICB0aGlzLnRvZG9fc2hvd1RvZG8kID0gZmFsc2U7XG5cbiAgICAgIC8vIHRoaXMgaXMgZGlmZmVyZW50IHRoYW4gQW5ndWxhciBTREssIGFzIHdlIG5lZWQgdG8gaW5pdENvbnRhaW5lciBpZiByb290IGNvbnRhaW5lciByZWxvYWRlZFxuICAgICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ29rVG9Jbml0Rmxvd0NvbnRhaW5lcicpID09ICd0cnVlJykge1xuICAgICAgICB0aGlzLmluaXRDb250YWluZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBoYXZlIGNhc2VNZXNzYWdlIHNob3cgbWVzc2FnZSBhbmQgZW5kXG4gICAgdGhpcy5zaG93Q2FzZU1lc3NhZ2VzKCk7XG5cbiAgICB0aGlzLnVwZGF0ZUZsb3dDb250YWluZXJDaGlsZHJlbigpO1xuICB9XG5cbiAgbG9hZFJldmlld1BhZ2UobG9jYWxQQ29ubikge1xuICAgIGNvbnN0IHsgQ0FTRV9JTkZPOiBDQVNFX0NPTlNUUyB9ID0gUENvcmUuZ2V0Q29uc3RhbnRzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIC8qXG4gICAgICAgICAgKioqIHJlbm92ZSB0aGlzIGNvbW1tZW50ZWQgb3V0IGNvZGUgd2hlbiBSZWFjdC9XQyBpcyB1cGRhdGVkXG4gICAgICAgICAgKioqIHRoaXMgY29kZSBpcyByZXBsYWNlIHdpdGggdGhlIGNhbGwgdG8gXCJnZXRUb0RvQXNzaWdtZW50c1wiIGZ1bmN0aW9uIGJlbG93XG5cbiAgICAgICAgICBjb25zdCBhc3NpZ25tZW50c0xpc3QgPSBsb2NhbFBDb25uLmdldFZhbHVlKFxuICAgICAgICAgICAgQ0FTRV9DT05TVFMuRF9DQVNFX0FTU0lHTk1FTlRTX1JFU1VMVFNcbiAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgLy8gYWRkIHN0YXR1c1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoXCJjYXNlSW5mby5zdGF0dXNcIik7XG5cbiAgICAgICAgICBsZXQgbG9jYWxBc3NpZ25tZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhc3NpZ25tZW50c0xpc3RbMF0pKTtcbiAgICAgICAgICBsb2NhbEFzc2lnbm1lbnQuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgIGxldCBsb2NhQXNzaWdubWVudHNMaXN0OiBBcnJheTxhbnk+ID0gW107XG4gICAgICAgICAgbG9jYUFzc2lnbm1lbnRzTGlzdC5wdXNoKGxvY2FsQXNzaWdubWVudCk7XG5cbiAgICAgICAgICBjb25zdCBjYXNlQWN0aW9ucyA9IGxvY2FsUENvbm4uZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0FDVElPTlMpO1xuICAgICAgICAgICovXG5cbiAgICAgICAgY29uc3QgdG9kb0Fzc2lnbm1lbnRzID0gZ2V0VG9Eb0Fzc2lnbm1lbnRzKHRoaXMucENvbm4kKTtcblxuICAgICAgICBpZiAodG9kb0Fzc2lnbm1lbnRzICYmIHRvZG9Bc3NpZ25tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy50b2RvX2Nhc2VJbmZvSUQkID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoQ0FTRV9DT05TVFMuQ0FTRV9JTkZPX0lEKTtcbiAgICAgICAgICB0aGlzLnRvZG9fZGF0YXNvdXJjZSQgPSB7IHNvdXJjZTogdG9kb0Fzc2lnbm1lbnRzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiByZW1vdmUgdGhpcyBjb21tZW50ZWQgb3V0IGNvZGUgd2hlbiB1cGRhdGUgUmVhY3QvV0MgKi9cbiAgICAgICAgLy8gbGV0IGtpZCA9IHRoaXMucENvbm4kLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgICAgLy8ga2lkLmdldFBDb25uZWN0KCkgY2FuIGJlIGEgUmVmZXJlbmNlIGNvbXBvbmVudC4gU28gbm9ybWFsaXplIGl0IGp1c3QgaW4gY2FzZVxuICAgICAgICAvLyAgICAgICAgbGV0IHRvZG9LaWQgPSBSZWZlcmVuY2VDb21wb25lbnQubm9ybWFsaXplUENvbm4oa2lkLmdldFBDb25uZWN0KCkpLmdldENoaWxkcmVuKClbMF07XG5cbiAgICAgICAgLy8gICAgICAgIHRoaXMudG9kb19wQ29ubiQgPSB0b2RvS2lkLmdldFBDb25uZWN0KCk7XG5cbiAgICAgICAgLyogY29kZSBjaGFuZ2UgaGVyZSB0byBub3RlIGZvciBSZWFjdC9XQyAgKi9cbiAgICAgICAgLy8gdG9kbyBub3cgbmVlZHMgcENvbm4gdG8gb3BlbiB0aGUgd29yayBpdGVtIG9uIGNsaWNrIFwiZ29cIlxuICAgICAgICB0aGlzLnRvZG9fcENvbm4kID0gdGhpcy5wQ29ubiQ7XG5cbiAgICAgICAgLy8gc3RpbGwgbmVlZHMgdGhlIGNvbnRleHQgb2YgdGhlIG9yaWdpbmFsIHdvcmsgaXRlbVxuICAgICAgICB0aGlzLnRvZG9fY29udGV4dCQgPSBsb2NhbFBDb25uLmdldENvbnRleHROYW1lKCk7XG5cbiAgICAgICAgdGhpcy50b2RvX3Nob3dUb2RvJCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93Q2FzZU1lc3NhZ2VzKCkge1xuICAgIHRoaXMuY2FzZU1lc3NhZ2VzJCA9IHRoaXMubG9jYWxpemVkVmFsKHRoaXMucENvbm4kLmdldFZhbHVlKCdjYXNlTWVzc2FnZXMnKSwgdGhpcy5sb2NhbGVDYXRlZ29yeSk7XG4gICAgLy8gY2FzZU1lc3NhZ2VzJ3MgYmVoYXZpb3IgaGFzIGNoYW5nZWQgaW4gMjQuMiwgYW5kIGhlbmNlIGl0IGRvZXNuJ3QgbGV0IE9wdGlvbmFsIEFjdGlvbiB3b3JrLlxuICAgIC8vIENoYW5naW5nIHRoZSBiZWxvdyBjb25kaXRpb24gZm9yIG5vdy4gV2FzOiAodGhlQ2FzZU1lc3NhZ2VzIHx8ICFoYXNBc3NpZ25tZW50cygpKVxuICAgIGlmICghaGFzQXNzaWdubWVudHModGhpcy5wQ29ubiQpKSB7XG4gICAgICB0aGlzLmJIYXNDYXNlTWVzc2FnZXMkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYlNob3dDb25maXJtID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hlY2tTdmckID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygnY2hlY2snLCB0aGlzLnV0aWxzLmdldFNES1N0YXRpY0NvbnRlbnRVcmwoKSk7XG4gICAgICAvLyBUZW1wIGZpeCBmb3IgOC43IGNoYW5nZTogY29uZmlybWF0aW9uTm90ZSBubyBsb25nZXIgY29taW5nIHRocm91Z2ggaW4gY2FzZU1lc3NhZ2VzJC5cbiAgICAgIC8vIFNvLCBpZiB3ZSBnZXQgaGVyZSBhbmQgY2FzZU1lc3NhZ2VzJCBpcyBlbXB0eSwgdXNlIGRlZmF1bHQgdmFsdWUgaW4gRFggQVBJIHJlc3BvbnNlXG4gICAgICBpZiAoIXRoaXMuY2FzZU1lc3NhZ2VzJCkge1xuICAgICAgICB0aGlzLmNhc2VNZXNzYWdlcyQgPSB0aGlzLmxvY2FsaXplZFZhbCgnVGhhbmsgeW91ISBUaGUgbmV4dCBzdGVwIGluIHRoaXMgY2FzZSBoYXMgYmVlbiByb3V0ZWQgYXBwcm9wcmlhdGVseS4nLCB0aGlzLmxvY2FsZUNhdGVnb3J5KTtcbiAgICAgIH1cblxuICAgICAgLy8gcHVibGlzaCB0aGlzIFwiYXNzaWdubWVudEZpbmlzaGVkXCIgZm9yIG1hc2h1cCwgbmVlZCB0byBnZXQgYXBwcm92ZWQgYXMgYSBzdGFuZGFyZFxuICAgICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5wdWJsaXNoKCdhc3NpZ25tZW50RmluaXNoZWQnKTtcblxuICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJIYXNDYXNlTWVzc2FnZXMkID0gZmFsc2U7XG4gICAgICB0aGlzLmJTaG93Q29uZmlybSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZsb3dDb250YWluZXJDaGlsZHJlbigpIHtcbiAgICAvLyByb3V0aW5nSW5mbyB3YXMgYWRkZWQgYXMgY29tcG9uZW50IHByb3AgaW4gcG9wdWxhdGVBZGRpdGlvbmFsUHJvcHNcbiAgICBjb25zdCByb3V0aW5nSW5mbyA9IHRoaXMuYW5ndWxhclBDb25uZWN0LmdldENvbXBvbmVudFByb3AodGhpcywgJ3JvdXRpbmdJbmZvJyk7XG4gICAgdGhpcy5jb25maXJtX3Bjb25uID0gbnVsbDtcblxuICAgIGxldCBsb2FkaW5nSW5mbzogYW55O1xuICAgIHRyeSB7XG4gICAgICAvLyBAdHMtaWdub3JlIC0gUHJvcGVydHkgJ2dldExvYWRpbmdTdGF0dXMnIGlzIHByaXZhdGUgYW5kIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gY2xhc3MgJ0MxMW5FbnYnXG4gICAgICBsb2FkaW5nSW5mbyA9IHRoaXMucENvbm4kLmdldExvYWRpbmdTdGF0dXMoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLyogZW1wdHkgKi9cbiAgICB9XG5cbiAgICAvLyB0aGlzIGNoZWNrIGluIHJvdXRpbmdJbmZvLCBtaW1pYyBOZWJ1bGEvQ29uc3RlbGxhdGlvbiAoUmVhY3QpIHRvIGNoZWNrIGFuZCBnZXQgdGhlIGludGVybmFscyBvZiB0aGVcbiAgICAvLyBmbG93Q29udGFpbmVyIGFuZCBmb3JjZSB1cGRhdGVzIHRvIHBDb25uZWN0L3JlZHV4XG4gICAgaWYgKHJvdXRpbmdJbmZvICYmIGxvYWRpbmdJbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcmRlciA9IHJvdXRpbmdJbmZvLmFjY2Vzc2VkT3JkZXI7XG4gICAgICBjb25zdCBjdXJyZW50SXRlbXMgPSByb3V0aW5nSW5mby5pdGVtcztcbiAgICAgIGNvbnN0IHR5cGUgPSByb3V0aW5nSW5mby50eXBlO1xuICAgICAgaWYgKGN1cnJlbnRPcmRlciAmJiBjdXJyZW50SXRlbXMpIHtcbiAgICAgICAgLy8gSkEgLSBtYWtpbmcgbW9yZSBzaW1pbGFyIHRvIE5lYnVsYS9Db25zdGVsbGF0aW9uXG4gICAgICAgIGNvbnN0IGtleSA9IGN1cnJlbnRPcmRlcltjdXJyZW50T3JkZXIubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgLy8gc2F2ZSBvZmYgaXRlbUtleSB0byBiZSB1c2VkIGZvciBmaW5pc2hBc3NpZ25tZW50LCBldGMuXG4gICAgICAgIC8vIHRpbWVvdXQgYW5kIGRldGVjdENoYW5nZXMgdG8gYXZvaWQgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoa2V5ICYmIGtleSAhPSAnJykge1xuICAgICAgICAgICAgdGhpcy5pdGVtS2V5JCA9IGtleTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tY29sbGFwc2libGUtaWZcbiAgICAgICAgaWYgKGN1cnJlbnRPcmRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRJdGVtc1trZXldICYmIGN1cnJlbnRJdGVtc1trZXldLnZpZXcgJiYgdHlwZSA9PT0gJ3NpbmdsZScgJiYgT2JqZWN0LmtleXMoY3VycmVudEl0ZW1zW2tleV0udmlldykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gd2hlbiB3ZSBnZXQgaGVyZSwgaXQgaXQgYmVjYXVzZSB0aGUgZmxvdyBhY3Rpb24gZGF0YSBoYXMgY2hhbmdlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgc2VydmVyLCBhbmQgbmVlZCB0byBhZGQgdG8gcENvbm5lY3QgYW5kIHVwZGF0ZSBjaGlsZHJlblxuXG4gICAgICAgICAgICB0aGlzLmFkZFBDb25uZWN0QW5kVXBkYXRlQ2hpbGRyZW4oY3VycmVudEl0ZW1zW2tleV0sIGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkUENvbm5lY3RBbmRVcGRhdGVDaGlsZHJlbihjdXJyZW50SXRlbSwga2V5KSB7XG4gICAgY29uc3QgbG9jYWxQQ29ubiA9IHRoaXMuYXJDaGlsZHJlbiRbMF0uZ2V0UENvbm5lY3QoKTtcblxuICAgIGNvbnN0IHJvb3RWaWV3ID0gY3VycmVudEl0ZW0udmlldztcbiAgICBjb25zdCB7IGNvbnRleHQsIG5hbWU6IFZpZXdOYW1lIH0gPSByb290Vmlldy5jb25maWc7XG4gICAgY29uc3QgY29uZmlnOiBhbnkgPSB7IG1ldGE6IHJvb3RWaWV3IH07XG5cbiAgICAvLyBEb24ndCBnbyBhaGVhZCBpZiBWaWV3IGRvZXNuJ3QgZXhpc3RcbiAgICBpZiAoIVZpZXdOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50b2RvX2NvbnRleHQkID0gY3VycmVudEl0ZW0uY29udGV4dDtcblxuICAgIGNvbmZpZy5vcHRpb25zID0ge1xuICAgICAgY29udGV4dDogY3VycmVudEl0ZW0uY29udGV4dCxcbiAgICAgIHBhZ2VSZWZlcmVuY2U6IGNvbnRleHQgfHwgbG9jYWxQQ29ubi5nZXRQYWdlUmVmZXJlbmNlKCksXG4gICAgICBoYXNGb3JtOiB0cnVlLFxuICAgICAgaXNGbG93Q29udGFpbmVyOiB0cnVlLFxuICAgICAgY29udGFpbmVyTmFtZTogbG9jYWxQQ29ubi5nZXRDb250YWluZXJOYW1lKCksXG4gICAgICBjb250YWluZXJJdGVtTmFtZToga2V5LFxuICAgICAgcGFyZW50UGFnZVJlZmVyZW5jZTogbG9jYWxQQ29ubi5nZXRQYWdlUmVmZXJlbmNlKClcbiAgICB9O1xuXG4gICAgY29uc3QgY29uZmlnT2JqZWN0ID0gUENvcmUuY3JlYXRlUENvbm5lY3QoY29uZmlnKTtcbiAgICB0aGlzLmNvbmZpcm1fcGNvbm4gPSBjb25maWdPYmplY3QuZ2V0UENvbm5lY3QoKTtcbiAgICAvLyA4LjcgLSBjb25maWcgbWlnaHQgYmUgYSBSZWZlcmVuY2UgY29tcG9uZW50IHNvLCBuZWVkIHRvIG5vcm1hbGl6ZSBpdCB0byBnZXRcbiAgICAvLyAgdGhlIFZpZXcgaWYgaXQgaXMgYSBSZWZlcmVuY2UgY29tcG9uZW50LiBBbmQgbmVlZCB0byBwYXNzIGluIHRoZSBnZXRQQ29ubmVjdFxuICAgIC8vICB0byBoYXZlIG5vcm1hbGl6ZSBkbyBhIGMxMUVudiBjcmVhdGVDb21wb25lbnQgKHRoYXQgbWFrZXMgc3VyZSBvcHRpb25zLmhhc0Zvcm1cbiAgICAvLyAgaXMgcGFzc2VkIGFsb25nIHRvIGFsbCB0aGUgY29tcG9uZW50J3MgY2hpbGRyZW4pXG4gICAgY29uc3Qgbm9ybWFsaXplZENvbmZpZ09iamVjdCA9IFJlZmVyZW5jZUNvbXBvbmVudC5ub3JtYWxpemVQQ29ubihjb25maWdPYmplY3QuZ2V0UENvbm5lY3QoKSk7XG4gICAgLy8gV2Ugd2FudCB0aGUgY2hpbGRyZW4gdG8gYmUgdGhlIFBDb25uZWN0IGl0c2VsZiwgbm90IHRoZSByZXN1bHQgb2YgY2FsbGluZyBnZXRQQ29ubmVjdCgpLFxuICAgIC8vICBTbyBuZWVkIHRvIGdldCB0aGUgUENvbm5lY3Qgb2YgdGhlIG5vcm1hbGl6ZWQgY29tcG9uZW50IHdlIGp1c3QgY3JlYXRlZC4uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDb25maWdPYmplY3RBc1BDb25uZWN0ID0gbm9ybWFsaXplZENvbmZpZ09iamVjdC5nZXRDb21wb25lbnQoKTtcblxuICAgIC8vIG1ha2VzIHN1cmUgQW5ndWxhciB0cmFja3MgdGhlc2UgY2hhbmdlc1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLmJ1aWxkTmFtZSQgPSB0aGlzLmdldEJ1aWxkTmFtZSgpO1xuICAgICAgLy8gd2hhdCBjb21lcyBiYWNrIG5vdyBpbiBjb25maWdPYmplY3QgaXMgdGhlIGNoaWxkcmVuIG9mIHRoZSBmbG93Q29udGFpbmVyXG5cbiAgICAgIHRoaXMuYXJDaGlsZHJlbiQgPSBbXTtcbiAgICAgIHRoaXMuYXJDaGlsZHJlbiQucHVzaChub3JtYWxpemVkQ29uZmlnT2JqZWN0QXNQQ29ubmVjdCk7XG5cbiAgICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcblxuICAgICAgY29uc3Qgb1dvcmtJdGVtID0gY29uZmlnT2JqZWN0LmdldFBDb25uZWN0KCk7XG4gICAgICBjb25zdCBvV29ya0RhdGE6IGFueSA9IG9Xb3JrSXRlbS5nZXREYXRhT2JqZWN0KCk7XG5cbiAgICAgIHRoaXMuY29udGFpbmVyTmFtZSQgPSB0aGlzLmxvY2FsaXplZFZhbCh0aGlzLmdldEFjdGl2ZVZpZXdMYWJlbCgpIHx8IG9Xb3JrRGF0YS5jYXNlSW5mby5hc3NpZ25tZW50cz8uWzBdLm5hbWUsIHVuZGVmaW5lZCwgdGhpcy5sb2NhbGVSZWZlcmVuY2UpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QnVpbGROYW1lKCk6IHN0cmluZyB7XG4gICAgLy8gbGV0IHsgZ2V0UENvbm5lY3QsIG5hbWUgfSA9IHRoaXMucENvbm4kLnByb3BzO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpO1xuICAgIGxldCB2aWV3Q29udGFpbmVyTmFtZSA9IHRoaXMucENvbm4kLmdldENvbnRhaW5lck5hbWUoKTtcblxuICAgIGlmICghdmlld0NvbnRhaW5lck5hbWUpIHZpZXdDb250YWluZXJOYW1lID0gJyc7XG4gICAgcmV0dXJuIGAke2NvbnRleHQudG9VcHBlckNhc2UoKX0vJHt2aWV3Q29udGFpbmVyTmFtZS50b1VwcGVyQ2FzZSgpfWA7XG4gIH1cblxuICBmb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgdGhpcy50b3VjaEFsbCgpO1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cCQudmFsaWQ7XG4gIH1cblxuICB0b3VjaEFsbCgpOiB2b2lkIHtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybUdyb3VwJC5jb250cm9scykuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9wVmlld1JlZnJlc2goKTogdm9pZCB7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1Hcm91cCQuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGhlbHBlcnMgLSBjb3B5aWVkIGZyb20gZmxvdyBjb250YWluZXIgaGVscGVycy5qc1xuXG4gIGFkZENvbnRhaW5lckl0ZW0ocENvbm5lY3QpIHtcbiAgICAvLyBjb3BpZWQgZnJvbSBmbG93IGNvbnRhaW5lciBoZWxwZXIuanNcbiAgICBjb25zdCBjb250YWluZXJNYW5hZ2VyID0gcENvbm5lY3QuZ2V0Q29udGFpbmVyTWFuYWdlcigpO1xuICAgIGNvbnN0IGNvbnRleHROYW1lID0gcENvbm5lY3QuZ2V0Q29udGV4dE5hbWUoKTsgLy8gaGVyZSB3ZSB3aWxsIGdldCBwYXJlbnQgY29udGV4dCBuYW1lLCBhcyBmbG93IGNvbnRhaW5lciBpcyBjaGlsZCBvZiB2aWV3IGNvbnRhaW5lclxuICAgIGNvbnN0IGNhc2VWaWV3TW9kZSA9IHBDb25uZWN0LmdldFZhbHVlKCdjb250ZXh0X2RhdGEuY2FzZVZpZXdNb2RlJyk7XG5cbiAgICBsZXQga2V5O1xuICAgIGxldCBmbG93TmFtZTtcblxuICAgIGlmIChjYXNlVmlld01vZGUgIT09ICdyZXZpZXcnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBjb250ZXh0TmFtZS5zdWJzdHJpbmcoMCwgY29udGV4dE5hbWUubGFzdEluZGV4T2YoJ18nKSk7XG4gICAgICBjb25zdCBhY3RpdmVDb250YWluZXJJdGVtSUQgPSBQQ29yZS5nZXRDb250YWluZXJVdGlscygpLmdldEFjdGl2ZUNvbnRhaW5lckl0ZW1OYW1lKHRhcmdldCk7XG4gICAgICBjb25zdCBjb250YWluZXJJdGVtRGF0YSA9IFBDb3JlLmdldENvbnRhaW5lclV0aWxzKCkuZ2V0Q29udGFpbmVySXRlbURhdGEodGFyZ2V0LCBhY3RpdmVDb250YWluZXJJdGVtSUQpO1xuXG4gICAgICBpZiAoY29udGFpbmVySXRlbURhdGEpIHtcbiAgICAgICAgKHsga2V5LCBmbG93TmFtZSB9ID0gY29udGFpbmVySXRlbURhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lck1hbmFnZXIuYWRkQ29udGFpbmVySXRlbSh7XG4gICAgICBzZW1hbnRpY1VSTDogJycsXG4gICAgICBrZXksXG4gICAgICBmbG93TmFtZSxcbiAgICAgIGNhc2VWaWV3TW9kZTogJ3BlcmZvcm0nLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQVNTSUdOTUVOVCcsXG4gICAgICBkYXRhOiBwQ29ubmVjdC5nZXREYXRhT2JqZWN0KGNvbnRleHROYW1lKVxuICAgIH0pO1xuICB9XG4gIC8vIGhlbHBlcnMgZW5kXG59XG4iLCI8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiIGNsYXNzPVwicHNkay1mbG93LWNvbnRhaW5lci10b3BcIj5cbiAgPGRpdiAqbmdJZj1cIiFiU2hvd0NvbmZpcm1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXRvZG9fc2hvd1RvZG8kXCI+XG4gICAgICA8aDI+e3sgY29udGFpbmVyTmFtZSQgfX08L2gyPlxuICAgICAgPGRpdiAqbmdJZj1cImJhbm5lcnM/Lmxlbmd0aFwiPlxuICAgICAgICA8Y29tcG9uZW50LW1hcHBlciBuYW1lPVwiQWxlcnRCYW5uZXJcIiBbcHJvcHNdPVwieyBiYW5uZXJzIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidG9kb19zaG93VG9kbyRcIj5cbiAgICAgIDxjb21wb25lbnQtbWFwcGVyXG4gICAgICAgICpuZ0lmPVwicENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW1cIlxuICAgICAgICBuYW1lPVwiVG9kb1wiXG4gICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgcENvbm4kOiBwQ29ubmVjdE9mQWN0aXZlQ29udGFpbmVySXRlbSxcbiAgICAgICAgICBjYXNlSW5mb0lEJDogdG9kb19jYXNlSW5mb0lEJCxcbiAgICAgICAgICBkYXRhc291cmNlJDogdG9kb19kYXRhc291cmNlJCxcbiAgICAgICAgICBzaG93VG9kb0xpc3QkOiB0b2RvX3Nob3dUb2RvTGlzdCQsXG4gICAgICAgICAgaGVhZGVyVGV4dCQ6IHRvZG9faGVhZGVyVGV4dCQsXG4gICAgICAgICAgdHlwZSQ6ICdUT0RPJyxcbiAgICAgICAgICBjb250ZXh0JDogdG9kb19jb250ZXh0JCxcbiAgICAgICAgICBpc0NvbmZpcm06IHRydWVcbiAgICAgICAgfVwiXG4gICAgICA+PC9jb21wb25lbnQtbWFwcGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhdG9kb19zaG93VG9kbyRcIj5cbiAgICAgIDxjb21wb25lbnQtbWFwcGVyXG4gICAgICAgICpuZ0lmPVwicENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW1cIlxuICAgICAgICBuYW1lPVwiQXNzaWdubWVudFwiXG4gICAgICAgIFtwcm9wc109XCJ7IHBDb25uJDogcENvbm5lY3RPZkFjdGl2ZUNvbnRhaW5lckl0ZW0sIGZvcm1Hcm91cCQsIGFyQ2hpbGRyZW4kLCBpdGVtS2V5JCB9XCJcbiAgICAgID48L2NvbXBvbmVudC1tYXBwZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiYkhhc0Nhc2VNZXNzYWdlcyRcIj5cbiAgICA8bWF0LWNhcmQgY2xhc3M9XCJwc2RrLW1lc3NhZ2UtY2FyZFwiPlxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3dcIj5cbiAgICAgICAgPGRpdj48aW1nIGNsYXNzPVwicHNkay1pY29uXCIgc3JjPVwie3sgY2hlY2tTdmckIH19XCIgLz48L2Rpdj5cbiAgICAgICAgPGRpdj57eyBjYXNlTWVzc2FnZXMkIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImJTaG93QmFubmVyICYmIGJTaG93Q29uZmlybSAmJiBjb25maXJtX3Bjb25uXCI+XG4gICAgPGNvbXBvbmVudC1tYXBwZXIgbmFtZT1cIlZpZXdcIiBbcHJvcHNdPVwieyBmb3JtR3JvdXAkLCBwQ29ubiQ6IGNvbmZpcm1fcGNvbm4gfVwiPjwvY29tcG9uZW50LW1hcHBlcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -25,7 +25,7 @@ function getChildCaseAssignments(pConnect) {
25
25
  }
26
26
  return allAssignments;
27
27
  }
28
- function hasAssignments(pConnect) {
28
+ export function hasAssignments(pConnect) {
29
29
  const { CASE_INFO } = PCore.getConstants();
30
30
  const assignments = pConnect.getValue(CASE_INFO.D_CASE_ASSIGNMENTS_RESULTS);
31
31
  const childCasesAssignments = getChildCaseAssignments(pConnect);
@@ -65,4 +65,4 @@ export function getToDoAssignments(pConnect) {
65
65
  }
66
66
  return todoAssignmentsCopy;
67
67
  }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9pbmZyYS9Db250YWluZXJzL2Zsb3ctY29udGFpbmVyL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyx1QkFBdUIsQ0FBQyxRQUFRO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsUUFBUTtJQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxJQUFJLFdBQVcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM1QixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNoRixPQUFPLFlBQVksRUFBRSxJQUFJLEtBQUssTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFFBQVE7SUFDdkMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkYsSUFBSSxjQUFjLEdBQVUsRUFBRSxDQUFDO0lBQy9CLElBQUksVUFBVSxJ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ckUsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDMUIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcseUJBQXlCLENBQUMsQ0FBQztJQUN2RSxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRXRFLElBQUksV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdkMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pELFVBQVUsQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksZUFBZSxDQUFDO1lBQ3ZFLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGhhc05vdGlmaWNhdGlvbk1lc3NhZ2VzKHBDb25uZWN0KSB7XG4gIHJldHVybiAhIXBDb25uZWN0LmdldFZhbHVlKCdjYXNlTWVzc2FnZXMnKTtcbn1cblxuZnVuY3Rpb24gaXNDYXNlV2lkZUxvY2FsQWN0aW9uKHBDb25uZWN0KSB7XG4gIGNvbnN0IHsgQ0FTRV9JTkZPIH0gPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcbiAgY29uc3QgYWN0aW9uSUQgPSBwQ29ubmVjdC5nZXRWYWx1ZShDQVNFX0lORk8uQUNUSVZFX0FDVElPTl9JRCk7XG4gIGNvbnN0IGNhc2VBY3Rpb25zID0gcENvbm5lY3QuZ2V0VmFsdWUoQ0FTRV9JTkZPLkNBU0VfSU5GT19BQ1RJT05TKTtcbiAgaWYgKGNhc2VBY3Rpb25zICYmIGFjdGlvbklEKSB7XG4gICAgY29uc3QgYWN0aXZlQWN0aW9uID0gY2FzZUFjdGlvbnMuZmluZChjYXNlQWN0aW9uID0+IGNhc2VBY3Rpb24uSUQgPT09IGFjdGlvbklEKTtcbiAgICByZXR1cm4gYWN0aXZlQWN0aW9uPy50eXBlID09PSAnQ2FzZSc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZENhc2VBc3NpZ25tZW50cyhwQ29ubmVjdCkge1xuICBjb25zdCBjaGlsZENhc2VzID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkNISUxEX0FTU0lHTk1FTlRTKTtcbiAgbGV0IGFsbEFzc2lnbm1lbnRzOiBhbnlbXSA9IFtdO1xuICBpZiAoY2hpbGRDYXNlcyAmJiBjaGlsZENhc2VzLmxlbmd0aCA+IDApIHtcbiAgICBjaGlsZENhc2VzLmZvckVhY2goKHsgYXNzaWdubWVudHMgPSBbXSwgTmFtZSB9KSA9PiB7XG4gICAgICBjb25zdCBjaGlsZENhc2VBc3NpZ25tZW50cyA9IGFzc2lnbm1lbnRzLm1hcCgoYXNzaWdubWVudDogYW55KSA9PiAoe1xuICAgICAgICAuLi5hc3NpZ25tZW50LFxuICAgICAgICBjYXNlTmFtZTogTmFtZVxuICAgICAgfSkpO1xuICAgICAgYWxsQXNzaWdubWVudHMgPSBhbGxBc3NpZ25tZW50cy5jb25jYXQoY2hpbGRDYXNlQXNzaWdubWVudHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBhbGxBc3NpZ25tZW50cztcbn1cblxuZnVuY3Rpb24gaGFzQXNzaWdubWVudHMocENvbm5lY3QpIHtcbiAgY29uc3QgeyBDQVNFX0lORk8gfSA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuICBjb25zdCBhc3NpZ25tZW50cyA9IHBDb25uZWN0LmdldFZhbHVlKENBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUyk7XG4gIGNvbnN0IGNoaWxkQ2FzZXNBc3NpZ25tZW50cyA9IGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KTtcblxuICByZXR1cm4gYXNzaWdubWVudHMgfHwgY2hpbGRDYXNlc0Fzc2lnbm1lbnRzIHx8IGlzQ2FzZVdpZGVMb2NhbEFjdGlvbihwQ29ubmVjdCk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93QmFubmVyID0gZ2V0UENvbm5lY3QgPT4ge1xuICBjb25zdCBwQ29ubmVjdCA9IGdldFBDb25uZWN0O1xuICByZXR1cm4gaGFzTm90aWZpY2F0aW9uTWVzc2FnZXMocENvbm5lY3QpIHx8ICFoYXNBc3NpZ25tZW50cyhwQ29ubmVjdCk7XG59O1xuXG5mdW5jdGlvbiBnZXRBY3RpdmVDYXNlQWN0aW9uTmFtZShwQ29ubmVjdCkge1xuICBjb25zdCBjYXNlQWN0aW9ucyA9IHBDb25uZWN0LmdldFZhbHVlKFBDb3JlLmdldENvbnN0YW50cygpLkNBU0VfSU5GTy5DQVNFX0lORk9fQUNUSU9OUyk7XG4gIGNvbnN0IGFjdGl2ZUFjdGlvbklEID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkFDVElWRV9BQ1RJT05fSUQpO1xuICBjb25zdCBhY3RpdmVBY3Rpb24gPSBjYXNlQWN0aW9ucy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uSUQgPT09IGFjdGl2ZUFjdGlvbklEKTtcbiAgcmV0dXJuIGFjdGl2ZUFjdGlvbj8ubmFtZSB8fCAnJztcbn1cblxuZnVuY3Rpb24gc2hvd1RvZG8ocENvbm5lY3QpIHtcbiAgY29uc3QgY2FzZVZpZXdNb2RlID0gcENvbm5lY3QuZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnKTtcbiAgcmV0dXJuIGNhc2VWaWV3TW9kZSAhPT0gJ3BlcmZvcm0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9Eb0Fzc2lnbm1lbnRzKHBDb25uZWN0KSB7XG4gIGNvbnN0IGNhc2VBY3Rpb25zID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkNBU0VfSU5GT19BQ1RJT05TKTtcbiAgY29uc3QgYXNzaWdubWVudExhYmVsID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkFTU0lHTk1FTlRfTEFCRUwpO1xuICBjb25zdCBhc3NpZ25tZW50cyA9IHBDb25uZWN0LmdldFZhbHVlKFBDb3JlLmdldENvbnN0YW50cygpLkNBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUykgfHwgW107XG4gIGNvbnN0IGNoaWxkQ2FzZXNBc3NpZ25tZW50cyA9IGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KSB8fCBbXTtcbiAgbGV0IGNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNoaWxkQ2FzZXNBc3NpZ25tZW50cykpO1xuXG4gIGNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHkgPSBjaGlsZENhc2VzQXNzaWdubWVudHNDb3B5Lm1hcChhc3NpZ25tZW50ID0+IHtcbiAgICBhc3NpZ25tZW50LmlzQ2hpbGQgPSB0cnVlO1xuICAgIHJldHVybiBhc3NpZ25tZW50O1xuICB9KTtcblxuICBjb25zdCB0b2RvQXNzaWdubWVudHMgPSBbLi4uYXNzaWdubWVudHMsIC4uLmNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHldO1xuICBsZXQgdG9kb0Fzc2lnbm1lbnRzQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodG9kb0Fzc2lnbm1lbnRzKSk7XG5cbiAgaWYgKGNhc2VBY3Rpb25zICYmICFzaG93VG9kbyhwQ29ubmVjdCkpIHtcbiAgICB0b2RvQXNzaWdubWVudHNDb3B5ID0gdG9kb0Fzc2lnbm1lbnRzQ29weS5tYXAoYXNzaWdubWVudCA9PiB7XG4gICAgICBhc3NpZ25tZW50Lm5hbWUgPSBnZXRBY3RpdmVDYXNlQWN0aW9uTmFtZShwQ29ubmVjdCkgfHwgYXNzaWdubWVudExhYmVsO1xuICAgICAgcmV0dXJuIGFzc2lnbm1lbnQ7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdG9kb0Fzc2lnbm1lbnRzQ29weTtcbn1cbiJdfQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9pbmZyYS9Db250YWluZXJzL2Zsb3ctY29udGFpbmVyL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyx1QkFBdUIsQ0FBQyxRQUFRO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsUUFBUTtJQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxJQUFJLFdBQVcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM1QixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNoRixPQUFPLFlBQVksRUFBRSxJQUFJLEtBQUssTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFFBQVE7SUFDdkMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkYsSUFBSSxjQUFjLEdBQVUsRUFBRSxDQUFDO0lBQy9CLElBQUksVUFBVSxJ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RTtRQUNyRSxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMxQixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFdEUsSUFBSSxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDekQsVUFBVSxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxlQUFlLENBQUM7WUFDdkUsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaGFzTm90aWZpY2F0aW9uTWVzc2FnZXMocENvbm5lY3QpIHtcbiAgcmV0dXJuICEhcENvbm5lY3QuZ2V0VmFsdWUoJ2Nhc2VNZXNzYWdlcycpO1xufVxuXG5mdW5jdGlvbiBpc0Nhc2VXaWRlTG9jYWxBY3Rpb24ocENvbm5lY3QpIHtcbiAgY29uc3QgeyBDQVNFX0lORk8gfSA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuICBjb25zdCBhY3Rpb25JRCA9IHBDb25uZWN0LmdldFZhbHVlKENBU0VfSU5GTy5BQ1RJVkVfQUNUSU9OX0lEKTtcbiAgY29uc3QgY2FzZUFjdGlvbnMgPSBwQ29ubmVjdC5nZXRWYWx1ZShDQVNFX0lORk8uQ0FTRV9JTkZPX0FDVElPTlMpO1xuICBpZiAoY2FzZUFjdGlvbnMgJiYgYWN0aW9uSUQpIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb24gPSBjYXNlQWN0aW9ucy5maW5kKGNhc2VBY3Rpb24gPT4gY2FzZUFjdGlvbi5JRCA9PT0gYWN0aW9uSUQpO1xuICAgIHJldHVybiBhY3RpdmVBY3Rpb24/LnR5cGUgPT09ICdDYXNlJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KSB7XG4gIGNvbnN0IGNoaWxkQ2FzZXMgPSBwQ29ubmVjdC5nZXRWYWx1ZShQQ29yZS5nZXRDb25zdGFudHMoKS5DQVNFX0lORk8uQ0hJTERfQVNTSUdOTUVOVFMpO1xuICBsZXQgYWxsQXNzaWdubWVudHM6IGFueVtdID0gW107XG4gIGlmIChjaGlsZENhc2VzICYmIGNoaWxkQ2FzZXMubGVuZ3RoID4gMCkge1xuICAgIGNoaWxkQ2FzZXMuZm9yRWFjaCgoeyBhc3NpZ25tZW50cyA9IFtdLCBOYW1lIH0pID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkQ2FzZUFzc2lnbm1lbnRzID0gYXNzaWdubWVudHMubWFwKChhc3NpZ25tZW50OiBhbnkpID0+ICh7XG4gICAgICAgIC4uLmFzc2lnbm1lbnQsXG4gICAgICAgIGNhc2VOYW1lOiBOYW1lXG4gICAgICB9KSk7XG4gICAgICBhbGxBc3NpZ25tZW50cyA9IGFsbEFzc2lnbm1lbnRzLmNvbmNhdChjaGlsZENhc2VBc3NpZ25tZW50cyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGFsbEFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQXNzaWdubWVudHMocENvbm5lY3QpIHtcbiAgY29uc3QgeyBDQVNFX0lORk8gfSA9IFBDb3JlLmdldENvbnN0YW50cygpO1xuICBjb25zdCBhc3NpZ25tZW50cyA9IHBDb25uZWN0LmdldFZhbHVlKENBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUyk7XG4gIGNvbnN0IGNoaWxkQ2FzZXNBc3NpZ25tZW50cyA9IGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KTtcblxuICByZXR1cm4gYXNzaWdubWVudHMgfHwgY2hpbGRDYXNlc0Fzc2lnbm1lbnRzIHx8IGlzQ2FzZVdpZGVMb2NhbEFjdGlvbihwQ29ubmVjdCk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93QmFubmVyID0gZ2V0UENvbm5lY3QgPT4ge1xuICBjb25zdCBwQ29ubmVjdCA9IGdldFBDb25uZWN0O1xuICByZXR1cm4gaGFzTm90aWZpY2F0aW9uTWVzc2FnZXMocENvbm5lY3QpIHx8ICFoYXNBc3NpZ25tZW50cyhwQ29ubmVjdCk7XG59O1xuXG5mdW5jdGlvbiBnZXRBY3RpdmVDYXNlQWN0aW9uTmFtZShwQ29ubmVjdCkge1xuICBjb25zdCBjYXNlQWN0aW9ucyA9IHBDb25uZWN0LmdldFZhbHVlKFBDb3JlLmdldENvbnN0YW50cygpLkNBU0VfSU5GTy5DQVNFX0lORk9fQUNUSU9OUyk7XG4gIGNvbnN0IGFjdGl2ZUFjdGlvbklEID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkFDVElWRV9BQ1RJT05fSUQpO1xuICBjb25zdCBhY3RpdmVBY3Rpb24gPSBjYXNlQWN0aW9ucy5maW5kKGFjdGlvbiA9PiBhY3Rpb24uSUQgPT09IGFjdGl2ZUFjdGlvbklEKTtcbiAgcmV0dXJuIGFjdGl2ZUFjdGlvbj8ubmFtZSB8fCAnJztcbn1cblxuZnVuY3Rpb24gc2hvd1RvZG8ocENvbm5lY3QpIHtcbiAgY29uc3QgY2FzZVZpZXdNb2RlID0gcENvbm5lY3QuZ2V0VmFsdWUoJ2NvbnRleHRfZGF0YS5jYXNlVmlld01vZGUnKTtcbiAgcmV0dXJuIGNhc2VWaWV3TW9kZSAhPT0gJ3BlcmZvcm0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9Eb0Fzc2lnbm1lbnRzKHBDb25uZWN0KSB7XG4gIGNvbnN0IGNhc2VBY3Rpb25zID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkNBU0VfSU5GT19BQ1RJT05TKTtcbiAgY29uc3QgYXNzaWdubWVudExhYmVsID0gcENvbm5lY3QuZ2V0VmFsdWUoUENvcmUuZ2V0Q29uc3RhbnRzKCkuQ0FTRV9JTkZPLkFTU0lHTk1FTlRfTEFCRUwpO1xuICBjb25zdCBhc3NpZ25tZW50cyA9IHBDb25uZWN0LmdldFZhbHVlKFBDb3JlLmdldENvbnN0YW50cygpLkNBU0VfSU5GTy5EX0NBU0VfQVNTSUdOTUVOVFNfUkVTVUxUUykgfHwgW107XG4gIGNvbnN0IGNoaWxkQ2FzZXNBc3NpZ25tZW50cyA9IGdldENoaWxkQ2FzZUFzc2lnbm1lbnRzKHBDb25uZWN0KSB8fCBbXTtcbiAgbGV0IGNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNoaWxkQ2FzZXNBc3NpZ25tZW50cykpO1xuXG4gIGNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHkgPSBjaGlsZENhc2VzQXNzaWdubWVudHNDb3B5Lm1hcChhc3NpZ25tZW50ID0+IHtcbiAgICBhc3NpZ25tZW50LmlzQ2hpbGQgPSB0cnVlO1xuICAgIHJldHVybiBhc3NpZ25tZW50O1xuICB9KTtcblxuICBjb25zdCB0b2RvQXNzaWdubWVudHMgPSBbLi4uYXNzaWdubWVudHMsIC4uLmNoaWxkQ2FzZXNBc3NpZ25tZW50c0NvcHldO1xuICBsZXQgdG9kb0Fzc2lnbm1lbnRzQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodG9kb0Fzc2lnbm1lbnRzKSk7XG5cbiAgaWYgKGNhc2VBY3Rpb25zICYmICFzaG93VG9kbyhwQ29ubmVjdCkpIHtcbiAgICB0b2RvQXNzaWdubWVudHNDb3B5ID0gdG9kb0Fzc2lnbm1lbnRzQ29weS5tYXAoYXNzaWdubWVudCA9PiB7XG4gICAgICBhc3NpZ25tZW50Lm5hbWUgPSBnZXRBY3RpdmVDYXNlQWN0aW9uTmFtZShwQ29ubmVjdCkgfHwgYXNzaWdubWVudExhYmVsO1xuICAgICAgcmV0dXJuIGFzc2lnbm1lbnQ7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdG9kb0Fzc2lnbm1lbnRzQ29weTtcbn1cbiJdfQ==