@openziti/ziti-console-lib 0.12.9 → 0.12.11

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 (67) hide show
  1. package/assets/html/index.htm +51 -8
  2. package/assets/styles/global.scss +1 -0
  3. package/assets/svgs/identity-marker.svg +8 -0
  4. package/assets/svgs/router-marker.svg +7 -0
  5. package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +18 -5
  6. package/esm2022/lib/features/data-table/data-table.component.mjs +5 -3
  7. package/esm2022/lib/features/preview-list/preview-list.component.mjs +13 -3
  8. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
  9. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +1 -1
  10. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +1 -1
  11. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +3 -1
  12. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +2 -2
  13. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +35 -13
  14. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +4 -4
  15. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +51 -12
  16. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +16 -5
  17. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +1 -1
  18. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +3 -1
  19. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +1 -1
  20. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +4 -2
  21. package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +3 -3
  22. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +2 -2
  23. package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +3 -3
  24. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +6 -1
  25. package/esm2022/lib/pages/identities/identities-page.component.mjs +3 -9
  26. package/esm2022/lib/pages/identities/identities-page.service.mjs +50 -1
  27. package/esm2022/lib/pages/services/services-page.component.mjs +2 -13
  28. package/esm2022/lib/pages/services/services-page.service.mjs +35 -2
  29. package/esm2022/lib/pages/terminators/terminators-page.component.mjs +7 -5
  30. package/esm2022/lib/services/ziti-controller-data.service.mjs +4 -4
  31. package/esm2022/lib/services/ziti-data.service.mjs +1 -1
  32. package/esm2022/lib/shared/list-page-component.class.mjs +4 -1
  33. package/esm2022/lib/shared/list-page-service.class.mjs +5 -2
  34. package/esm2022/lib/version.mjs +2 -2
  35. package/fesm2022/openziti-ziti-console-lib.mjs +255 -77
  36. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  37. package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts +2 -6
  38. package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts.map +1 -1
  39. package/lib/features/data-table/data-table.component.d.ts +1 -0
  40. package/lib/features/data-table/data-table.component.d.ts.map +1 -1
  41. package/lib/features/preview-list/preview-list.component.d.ts +3 -1
  42. package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
  43. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  44. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +1 -0
  45. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  46. package/lib/features/projectable-forms/service/service-form.service.d.ts +9 -3
  47. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
  48. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +1 -5
  49. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  50. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
  51. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  52. package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +1 -1
  53. package/lib/pages/identities/identities-page.component.d.ts +0 -2
  54. package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
  55. package/lib/pages/identities/identities-page.service.d.ts +3 -0
  56. package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
  57. package/lib/pages/services/services-page.component.d.ts +0 -3
  58. package/lib/pages/services/services-page.component.d.ts.map +1 -1
  59. package/lib/pages/services/services-page.service.d.ts +2 -0
  60. package/lib/pages/services/services-page.service.d.ts.map +1 -1
  61. package/lib/services/ziti-controller-data.service.d.ts +1 -1
  62. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  63. package/lib/services/ziti-data.service.d.ts +1 -1
  64. package/lib/services/ziti-data.service.d.ts.map +1 -1
  65. package/lib/shared/list-page-component.class.d.ts.map +1 -1
  66. package/lib/shared/list-page-service.class.d.ts.map +1 -1
  67. package/package.json +1 -1
@@ -5,7 +5,7 @@ import { SERVICE_EXTENSION_SERVICE } from "../service-form.service";
5
5
  import { ZITI_DATA_SERVICE } from "../../../../services/ziti-data.service";
6
6
  import { GrowlerModel } from "../../../messaging/growler.model";
7
7
  import { CreationSummaryDialogComponent } from "../../../creation-summary-dialog/creation-summary-dialog.component";
8
- import { isEmpty, isNil, isNaN, unset, cloneDeep, isEqual, set } from 'lodash';
8
+ import { isEmpty, isNil, isNaN, unset, cloneDeep, isEqual, set, get } from 'lodash';
9
9
  import { ConfirmComponent } from "../../../confirm/confirm.component";
10
10
  import { URLS } from "../../../../urls";
11
11
  import { BehaviorSubject } from "rxjs";
@@ -114,9 +114,7 @@ class SimpleServiceComponent extends ProjectableForm {
114
114
  this.bindDataChange = false;
115
115
  this.identitiesInit = new BehaviorSubject(false);
116
116
  this.entitiesInit = false;
117
- this.multiActions = [
118
- { id: 'convert-to-advanced', label: 'Convert to Advanced', hidden: false },
119
- ];
117
+ this.multiActions = [];
120
118
  this.entityType = 'services';
121
119
  this.close = new EventEmitter();
122
120
  this.selected = new EventEmitter();
@@ -129,6 +127,14 @@ class SimpleServiceComponent extends ProjectableForm {
129
127
  this.svc.formData = data;
130
128
  if (!isEmpty(data?.id)) {
131
129
  this.initAssociatedData();
130
+ if (get(this.formData, 'tags.service-type') === 'simple') {
131
+ this.multiActions = [
132
+ { id: 'convert-to-advanced', label: 'Convert to Advanced', hidden: false }
133
+ ];
134
+ }
135
+ else {
136
+ this.multiActions = [];
137
+ }
132
138
  }
133
139
  }
134
140
  get formData() {
@@ -186,6 +192,11 @@ class SimpleServiceComponent extends ProjectableForm {
186
192
  const policiesPromise = this.getAssocaitedPolicies();
187
193
  Promise.all([configsPromise, policiesPromise]).finally(() => {
188
194
  this.dataInit = true;
195
+ this.initServiceApiData = cloneDeep(this.serviceApiData);
196
+ this.initInterceptConfigApiData = cloneDeep(this.interceptConfigApiData);
197
+ this.initHostConfigApiData = cloneDeep(this.hostConfigApiData);
198
+ this.initDialPolicyApiData = cloneDeep(this.dialPolicyApiData);
199
+ this.initBindPolicyApiData = cloneDeep(this.bindPolicyApiData);
189
200
  });
190
201
  }
191
202
  });
@@ -989,4 +1000,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
989
1000
  }], formData: [{
990
1001
  type: Input
991
1002
  }] } });
992
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUMseUJBQXlCLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHdDQUF3QyxDQUFDO0FBRzFGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQVcsR0FBRyxFQUFNLE1BQU0sUUFBUSxDQUFDO0FBSzNGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE9BQU8sRUFBQyxJQUFJLEVBQUMs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b3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJvamVjdGFibGVGb3JtfSBmcm9tIFwiLi4vLi4vcHJvamVjdGFibGUtZm9ybS5jbGFzc1wiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge1NFUlZJQ0VfRVhURU5TSU9OX1NFUlZJQ0UsIFNlcnZpY2VGb3JtU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2UtZm9ybS5zZXJ2aWNlXCI7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge0NyZWF0aW9uU3VtbWFyeURpYWxvZ0NvbXBvbmVudH0gZnJvbSBcIi4uLy4uLy4uL2NyZWF0aW9uLXN1bW1hcnktZGlhbG9nL2NyZWF0aW9uLXN1bW1hcnktZGlhbG9nLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtpc0VtcHR5LCBpc05pbCwgaXNOYU4sIHVuc2V0LCBjbG9uZURlZXAsIGlzRXF1YWwsIGZvckVhY2gsIHNldCwgZ2V0fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7U2VydmljZXNQYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3BhZ2VzL3NlcnZpY2VzL3NlcnZpY2VzLXBhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0ZpbHRlck9ian0gZnJvbSBcIi4uLy4uLy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtDb25maXJtQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vY29uZmlybS9jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtVUkxTfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXJsc1wiO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZn0gZnJvbSBcInJ4anNcIjtcblxuLy8gQHRzLWlnbm9yZVxuY29uc3Qge2FwcH0gPSB3aW5kb3c7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zaW1wbGUtc2VydmljZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW1wbGUtc2VydmljZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpbXBsZS1zZXJ2aWNlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2ltcGxlU2VydmljZUNvbXBvbmVudCBleHRlbmRzIFByb2plY3RhYmxlRm9ybSB7XG4gIEBJbnB1dCgpIHNlcnZpY2VSb2xlQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaWRlbnRpdHlSb2xlQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXM6IGFueVtdID0gW107XG5cbiAgZGF0YUluaXQgPSBmYWxzZTtcbiAgc2hvd0Zvcm0gPSB0cnVlO1xuICBmb3JtVmlldyA9ICdzaW1wbGUnO1xuICBjb250cm9sbGVyRG9tYWluID0gJyc7XG4gIHppdGlTZXNzaW9uSWQ7XG4gIGludGVyY2VwdFBvcnQ7XG4gIGhvc3RQcm90b2NvbCA9ICd0Y3AnO1xuICBzZXJ2aWNlQ2xpQ29tbWFuZCA9ICcnO1xuICBpbnRlcmNlcHRDb25maWdDbGlDb21tYW5kID0gJyc7XG4gIGhvc3RDb25maWdDbGlDb21tYW5kID0gJyc7XG4gIGRpYWxQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gIGJpbmRQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gIHNlcnZpY2VBcGlVcmwgPSAnJztcbiAgaW50ZXJjZXB0Q29uZmlnQXBpVXJsID0gJyc7XG4gIGhvc3RDb25maWdBcGlVcmwgPSAnJztcbiAgZGlhbFBvbGljeUFwaVVybCA9ICcnO1xuICBiaW5kUG9saWN5QXBpVXJsID0gJyc7XG4gIGluaXRTZXJ2aWNlQXBpRGF0YSA9IHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIHJvbGVBdHRyaWJ1dGVzOiBbXSxcbiAgICBjb25maWdzOiBbXSxcbiAgICBlbmNyeXB0aW9uUmVxdWlyZWQ6IHRydWVcbiAgfTtcbiAgaW5pdEludGVyY2VwdENvbmZpZ0FwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICBjb25maWdUeXBlSWQ6XCJnN2NJV2JjR2dcIixcbiAgICBkYXRhOiB7XG4gICAgICBwb3J0UmFuZ2VzOiBbXSxcbiAgICAgIGFkZHJlc3NlczogW10sXG4gICAgICBwcm90b2NvbHM6IFsndGNwJywgJ3VkcCddXG4gICAgfVxuICB9O1xuICBpbml0SG9zdENvbmZpZ0FwaURhdGEgPSB7XG4gICAgbmFtZTogJycsXG4gICAgY29uZmlnVHlwZUlkOiBcIk5INXA0RnBHUlwiLFxuICAgIGRhdGE6IHtcbiAgICAgIGFkZHJlc3M6IFwiXCIsXG4gICAgICBwb3J0OiB1bmRlZmluZWQsXG4gICAgICBmb3J3YXJkUHJvdG9jb2w6IHRydWUsXG4gICAgICBhbGxvd2VkUHJvdG9jb2xzOiBbJ3RjcCddXG4gICAgfVxuICB9O1xuICBpbml0RGlhbFBvbGljeUFwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICB0eXBlOiBcIkRpYWxcIixcbiAgICBzZW1hbnRpYzogXCJBbnlPZlwiLFxuICAgIHNlcnZpY2VSb2xlczogW10sXG4gICAgaWRlbnRpdHlSb2xlczogW11cbiAgfTtcbiAgaW5pdEJpbmRQb2xpY3lBcGlEYXRhID0ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgdHlwZTogXCJCaW5kXCIsXG4gICAgc2VtYW50aWM6IFwiQW55T2ZcIixcbiAgICBzZXJ2aWNlUm9sZXM6IFtdLFxuICAgIGlkZW50aXR5Um9sZXM6IFtdXG4gIH07XG4gIHNlcnZpY2VBcGlEYXRhO1xuICBpbnRlcmNlcHRDb25maWdBcGlEYXRhO1xuICBob3N0Q29uZmlnQXBpRGF0YTtcbiAgZGlhbFBvbGljeUFwaURhdGE7XG4gIGJpbmRQb2xpY3lBcGlEYXRhO1xuICBkaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gIGRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBiaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gIGJpbmRQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBpZGVudGl0aWVzTmFtZUlkTWFwID0ge307XG4gIGlkZW50aXRpZXNJZE5hbWVNYXAgPSB7fTtcbiAgaW50ZXJjZXB0Q29uZmlnSWQ7XG4gIGhvc3RDb25maWdJZDtcbiAgc2VydmljZUlkO1xuICBzZGtPbmx5RGlhbCA9IGZhbHNlO1xuICBzZGtPbmx5QmluZCA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueTtcblxuICBpbnRlcmNlcHRJbmNyZW1lbnQgPSAtMTtcbiAgaG9zdEluY3JlbWVudCA9IC0xO1xuICBzZXJ2aWNlSW5jcmVtZW50ID0gLTE7XG4gIGRpYWxJbmNyZW1lbnQgPSAtMTtcbiAgYmluZEluY3JlbWVudCA9IC0xO1xuXG4gIHNlcnZpY2VEYXRhQ2hhbmdlID0gZmFsc2U7XG4gIGludGVyY2VwdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaG9zdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgZGlhbERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgYmluZERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaWRlbnRpdGllc0luaXQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGZhbHNlKTtcbiAgZW50aXRpZXNJbml0ID0gZmFsc2U7XG5cbiAgbXVsdGlBY3Rpb25zID0gW1xuICAgIHtpZDogJ2NvbnZlcnQtdG8tYWR2YW5jZWQnLCBsYWJlbDogJ0NvbnZlcnQgdG8gQWR2YW5jZWQnLCBoaWRkZW46IGZhbHNlfSxcbiAgXTtcblxuICBvdmVycmlkZSBlbnRpdHlUeXBlID0gJ3NlcnZpY2VzJztcblxuICBAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHJvdGVjdGVkIG92ZXJyaWRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgcHVibGljIHN2YzogU2VydmljZUZvcm1TZXJ2aWNlLFxuICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgb3ZlcnJpZGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSxcbiAgICAgIEBJbmplY3QoU0VSVklDRV9FWFRFTlNJT05fU0VSVklDRSkgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgIHByaXZhdGUgZGlhbG9nRm9ybTogTWF0RGlhbG9nLFxuICAgICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICBwcml2YXRlIHNlcnZpY2VzUGFnZVNlcnZpY2U6IFNlcnZpY2VzUGFnZVNlcnZpY2UsXG4gICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIHN1cGVyKGdyb3dsZXJTZXJ2aWNlLCBleHRTZXJ2aWNlLCB6aXRpU2VydmljZSwgcm91dGVyLCByb3V0ZSwgbG9jYXRpb24sIHNldHRpbmdzU2VydmljZSk7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1EYXRhKGRhdGEpIHtcbiAgICBpZiAoIWRhdGE/LmNvbmZpZ3MpIHtcbiAgICAgIGRhdGEuY29uZmlncyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnN2Yy5mb3JtRGF0YSA9IGRhdGE7XG4gICAgaWYgKCFpc0VtcHR5KGRhdGE/LmlkKSkge1xuICAgICAgdGhpcy5pbml0QXNzb2NpYXRlZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZm9ybURhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdmM/LmZvcm1EYXRhO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmNvbnRyb2xsZXJEb21haW4gPSB0aGlzLnNldHRpbmdzU2VydmljZT8uc2V0dGluZ3M/LnNlbGVjdGVkRWRnZUNvbnRyb2xsZXI7XG4gICAgdGhpcy56aXRpU2Vzc2lvbklkID0gdGhpcy5zZXR0aW5nc1NlcnZpY2U/LnNldHRpbmdzPy5zZXNzaW9uPy5pZDtcbiAgICB0aGlzLmluaXRGb3JtRGF0YSgpO1xuICAgIHRoaXMuZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIGluaXRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLnNlcnZpY2VBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlc2A7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9jb25maWdzYDtcbiAgICB0aGlzLmhvc3RDb25maWdBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9jb25maWdzYDtcbiAgICB0aGlzLmRpYWxQb2xpY3lBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlLXBvbGljaWVzYDtcbiAgICB0aGlzLmJpbmRQb2xpY3lBcGlVcmwgPSBgJHt0aGlzLmNvbnRyb2xsZXJEb21haW59L2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlLXBvbGljaWVzYDtcbiAgICB0aGlzLnNlcnZpY2VDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5ob3N0Q29uZmlnQ2xpQ29tbWFuZCA9ICcnO1xuICAgIHRoaXMuZGlhbFBvbGljeUNsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmJpbmRQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdJZCA9ICcnO1xuICAgIHRoaXMuaG9zdENvbmZpZ0lkID0gJyc7XG4gICAgdGhpcy5zZXJ2aWNlSWQgPSAnJztcbiAgICB0aGlzLnNka09ubHlEaWFsID0gZmFsc2U7XG4gICAgdGhpcy5zZGtPbmx5QmluZCA9IGZhbHNlO1xuICAgIHRoaXMuaW50ZXJjZXB0UG9ydCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLmRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRTZXJ2aWNlQXBpRGF0YSk7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdEludGVyY2VwdENvbmZpZ0FwaURhdGEpO1xuICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0SG9zdENvbmZpZ0FwaURhdGEpO1xuICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0RGlhbFBvbGljeUFwaURhdGEpO1xuICAgIHRoaXMuYmluZFBvbGljeUFwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0QmluZFBvbGljeUFwaURhdGEpO1xuICAgIHRoaXMuc2VydmljZXNQYWdlU2VydmljZS5nZXRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIHRoaXMuc2VydmljZVJvbGVBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gICAgdGhpcy5zZXJ2aWNlc1BhZ2VTZXJ2aWNlLmdldElkZW50aXR5Um9sZUF0dHJpYnV0ZXMoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIHRoaXMuaWRlbnRpdHlSb2xlQXR0cmlidXRlcyA9IHJlc3VsdC5kYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdEFzc29jaWF0ZWREYXRhKCkge1xuICAgIGlmICh0aGlzLmVudGl0aWVzSW5pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVudGl0aWVzSW5pdCA9IHRydWU7XG4gICAgdGhpcy5zZXJ2aWNlQXBpRGF0YSA9IHRoaXMuc3ZjLmZvcm1EYXRhO1xuICAgIHRoaXMuaWRlbnRpdGllc0luaXQuc3Vic2NyaWJlKCh2YWwpID0+IHtcbiAgICAgIGlmICh2YWwgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgY29uZmlnc1Byb21pc2UgPSB0aGlzLmdldEFzc29jaWF0ZWRDb25maWdzKCk7XG4gICAgICAgIGNvbnN0IHBvbGljaWVzUHJvbWlzZSA9IHRoaXMuZ2V0QXNzb2NhaXRlZFBvbGljaWVzKCk7XG4gICAgICAgIFByb21pc2UuYWxsKFtjb25maWdzUHJvbWlzZSwgcG9saWNpZXNQcm9taXNlXSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhSW5pdCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QXNzb2NpYXRlZENvbmZpZ3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIHRoaXMuZm9ybURhdGEuaWQsICdjb25maWdzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGFzc29jaWF0ZWRDb25maWdzID0gcmVzdWx0LmRhdGE7XG4gICAgICBhc3NvY2lhdGVkQ29uZmlncy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5jb25maWdUeXBlSWQgPT0gdGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5jb25maWdUeXBlSWQpIHtcbiAgICAgICAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEgPSBjb25maWc7XG4gICAgICAgICAgY29uc3QgcG9ydFJhbmdlID0gdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlc1swXTtcbiAgICAgICAgICB0aGlzLmludGVyY2VwdFBvcnQgPSBwb3J0UmFuZ2U/LmhpZ2g7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmNvbmZpZ1R5cGVJZCA9PSB0aGlzLmluaXRIb3N0Q29uZmlnQXBpRGF0YS5jb25maWdUeXBlSWQpIHtcbiAgICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhID0gY29uZmlnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFzc29jYWl0ZWRQb2xpY2llcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ3NlcnZpY2UtcG9saWNpZXMnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcy5mb3JFYWNoKChwb2xpY3kpID0+IHtcbiAgICAgICAgaWYgKHBvbGljeS50eXBlPy50b0xvd2VyQ2FzZSgpID09ICdkaWFsJykge1xuICAgICAgICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEgPSBwb2xpY3k7XG4gICAgICAgICAgY29uc3Qgcm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBuYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBwb2xpY3kuaWRlbnRpdHlSb2xlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5wdXNoKGF0dHIuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgIG5hbWVkQXR0cmlidXRlcy5wdXNoKHRoaXMuaWRlbnRpdGllc0lkTmFtZU1hcFthdHRyLnNsaWNlKDEpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcztcbiAgICAgICAgICB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgIH0gZWxzZSBpZiAocG9saWN5LnR5cGU/LnRvTG93ZXJDYXNlKCkgPT0gJ2JpbmQnKSB7XG4gICAgICAgICAgY29uc3Qgcm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBuYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBwb2xpY3kuaWRlbnRpdHlSb2xlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5wdXNoKGF0dHIuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgIG5hbWVkQXR0cmlidXRlcy5wdXNoKHRoaXMuaWRlbnRpdGllc0lkTmFtZU1hcFthdHRyLnNsaWNlKDEpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcztcbiAgICAgICAgICB0aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IHBvbGljeTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIGdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKGZpbHRlcj8pIHtcbiAgICBjb25zdCBwYWdpbmcgPSB7XG4gICAgICBzZWFyY2hPbjogJ25hbWUnLFxuICAgICAgZmlsdGVyOiBmaWx0ZXIgfHwgJycsXG4gICAgICB0b3RhbDogMzAsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc29ydDogJ25hbWUnLFxuICAgICAgb3JkZXI6ICdhc2MnXG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgaWYgKCFpc0VtcHR5KGZpbHRlcikpIHtcbiAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgIGZpbHRlck5hbWU6ICduYW1lJyxcbiAgICAgICAgY29sdW1uSWQ6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGZpbHRlciB8fCAnJScsXG4gICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2lkZW50aXRpZXMnLCBwYWdpbmcsIGZpbHRlcnMpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGEubWFwKChpZGVudGl0eSkgPT4ge1xuICAgICAgICB0aGlzLmlkZW50aXRpZXNOYW1lSWRNYXBbaWRlbnRpdHkubmFtZV0gPSBpZGVudGl0eS5pZDtcbiAgICAgICAgdGhpcy5pZGVudGl0aWVzSWROYW1lTWFwW2lkZW50aXR5LmlkXSA9IGlkZW50aXR5Lm5hbWU7XG4gICAgICAgIHRoaXMuaWRlbnRpdGllc0luaXQubmV4dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5Lm5hbWU7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgfSk7XG4gIH1cblxuICBtdWx0aUFjdGlvblJlcXVlc3RlZChhY3Rpb24pIHtcbiAgICBzd2l0Y2goYWN0aW9uLmlkKSB7XG4gICAgICBjYXNlICdzYXZlJzpcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29udmVydC10by1hZHZhbmNlZCc6XG4gICAgICAgIHRoaXMuY29udmVydFRvQWR2YW5jZWQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGVhZGVyQWN0aW9uUmVxdWVzdGVkKGFjdGlvbikge1xuICAgIHN3aXRjaChhY3Rpb24ubmFtZSkge1xuICAgICAgY2FzZSAnc2F2ZSc6XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0KSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXI/Lm5hdmlnYXRlQnlVcmwoVVJMUy5aSVRJX1NFUlZJQ0VTKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvdXRlcj8ubmF2aWdhdGVCeVVybChVUkxTLlpJVElfU0VSVklDRV9TRUxFQ1QpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9nZ2xlLXZpZXcnOlxuICAgICAgICB0aGlzLmZvcm1WaWV3ID0gYWN0aW9uLmRhdGE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNka09ubHlEaWFsKCkge1xuICAgIHRoaXMuc2RrT25seURpYWwgPSAhdGhpcy5zZGtPbmx5RGlhbDtcbiAgfVxuXG4gIHRvZ2dsZVNka09ubHlCaW5kKCkge1xuICAgIHRoaXMuc2RrT25seUJpbmQgPSAhdGhpcy5zZGtPbmx5QmluZDtcbiAgfVxuXG4gIHNlcnZpY2VOYW1lQ2hhbmdlZChldmVudCkge1xuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1pbnRlcmNlcHQtY29uZmlnYFxuICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0taG9zdC1jb25maWdgXG4gICAgdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1kaWFsLXBvbGljeWBcbiAgICB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUgPSBgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9LWJpbmQtcG9saWN5YFxuICB9XG5cbiAgaW50ZXJjZXB0UG9ydENoYW5nZWQoJGV2ZW50KSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuaW50ZXJjZXB0UG9ydCkgfHwgaXNOYU4odGhpcy5pbnRlcmNlcHRQb3J0KSkge1xuICAgICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlcyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzWzBdID0ge1xuICAgICAgaGlnaDogdGhpcy5pbnRlcmNlcHRQb3J0LFxuICAgICAgbG93OiB0aGlzLmludGVyY2VwdFBvcnRcbiAgICB9O1xuICB9XG5cbiAgaG9zdFByb3RvY29sc0NoYW5nZWQoJGV2ZW50KSB7XG4gICAgc3dpdGNoICh0aGlzLmhvc3RQcm90b2NvbCkge1xuICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5hbGxvd2VkUHJvdG9jb2xzID0gWyd0Y3AnLCAndWRwJ11cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEuYWxsb3dlZFByb3RvY29scyA9IFt0aGlzLmhvc3RQcm90b2NvbF07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUocmVmcmVzaD8pIHtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWUgPSB0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWUudHJpbSgpO1xuICAgIGlmICghdGhpcy52YWxpZGF0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmV3U2VydmljZSA9IGlzRW1wdHkodGhpcy5zZXJ2aWNlQXBpRGF0YT8uaWQpO1xuICAgIGlmIChpc05ld1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGhhc0NvbmZsaWN0czogYW55ID0gYXdhaXQgdGhpcy5jaGVja05hbWVDb25mbGljdHMoKTtcbiAgICAgIGlmIChoYXNDb25mbGljdHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5zaG93U3VtbWFyeSgpO1xuICAgIHRoaXMuc2VydmljZUFwaURhdGEuY29uZmlncyA9IFtdO1xuXG4gICAgY29uc3QgaW50ZXJjZXB0Q2ZnUHJvbWlzZSA9IGF3YWl0IHRoaXMuc2F2ZUludGVyY2VwdENvbmZpZyhzdW1tYXJ5RGF0YSk7XG4gICAgY29uc3QgaG9zdENmZ1Byb21pc2UgPSBhd2FpdCB0aGlzLnNhdmVIb3N0Q29uZmlnKHN1bW1hcnlEYXRhKTtcbiAgICBjb25zdCBzZXJ2aWNlUHJvbWlzZSA9IGF3YWl0IHRoaXMuc2F2ZVNlcnZpY2Uoc3VtbWFyeURhdGEpO1xuICAgIGNvbnN0IGRpYWxQb2xpY3lQcm9taXNlID0gYXdhaXQgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnRGlhbCcpO1xuICAgIGNvbnN0IGJpbmRQb2xpY3lQcm9taXNlID0gYXdhaXQgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnQmluZCcpO1xuXG4gICAgc3VtbWFyeURhdGE/LmZvckVhY2goKGVudGl0eVR5cGUpID0+IHtcbiAgICAgIGVudGl0eVR5cGUuZW50aXRpZXM/LmZvckVhY2goKGVudGl0eSkgPT4ge1xuICAgICAgICBpZiAoZW50aXR5LnR5cGUgPT09ICdzZXJ2aWNlcycpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuc2VydmljZUNsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldFNlcnZpY2VzQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnY29uZmlncycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdpbnRlcmNlcHQnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldEludGVyY2VwdENvbmZpZ0FwaVJlcXVlc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gJ2NvbmZpZ3MnICYmIGVudGl0eS5zdWJ0eXBlID09PSAnaG9zdCcpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuaG9zdENvbmZpZ0NsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldEhvc3RDb25maWdBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiBlbnRpdHkuc3VidHlwZSA9PT0gJ2RpYWwnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmRpYWxQb2xpY3lDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXREaWFsQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdiaW5kJykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZDtcbiAgICAgICAgICBlbnRpdHkuYXBpUmVxdWVzdCA9IHRoaXMuZ2V0QmluZEFwaVJlcXVlc3QoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93U3VtbWFyeSgpIHtcbiAgICBjb25zdCBpbnRlcmNlcHRTdW1tYXJ5ID0ge1xuICAgICAgbmFtZTogdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLm5hbWUsXG4gICAgICB0eXBlOiAnY29uZmlncycsXG4gICAgICBzdWJ0eXBlOiAnaW50ZXJjZXB0JyxcbiAgICAgIGFwaURhdGE6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSxcbiAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCxcbiAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgYXBpVXJsOiB0aGlzLmludGVyY2VwdENvbmZpZ0FwaVVybCxcbiAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgcmV0cnk6IHRoaXMuc2F2ZUludGVyY2VwdENvbmZpZy5iaW5kKHRoaXMpLFxuICAgIH07XG4gICAgY29uc3QgaG9zdFN1bW1hcnkgPSB7XG4gICAgICBuYW1lOiB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWUsXG4gICAgICB0eXBlOiAnY29uZmlncycsXG4gICAgICBzdWJ0eXBlOiAnaG9zdCcsXG4gICAgICBhcGlEYXRhOiB0aGlzLmhvc3RDb25maWdBcGlEYXRhLFxuICAgICAgY2xpQ29tbWFuZDogdGhpcy5ob3N0Q29uZmlnQ2xpQ29tbWFuZCxcbiAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgYXBpVXJsOiB0aGlzLmhvc3RDb25maWdBcGlVcmwsXG4gICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgIHJldHJ5OiB0aGlzLnNhdmVIb3N0Q29uZmlnLmJpbmQodGhpcylcbiAgICB9O1xuICAgIGNvbnN0IHN1bW1hcnlEYXRhOiBhbnkgPSBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnU2VydmljZXMnLFxuICAgICAgICBlbnRpdGllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc2VydmljZUFwaURhdGEubmFtZSxcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlcycsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLnNlcnZpY2VBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5zZXJ2aWNlQ2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLnNlcnZpY2VBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiB0aGlzLnNhdmVTZXJ2aWNlLmJpbmQodGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnU2VydmljZSBQb2xpY2llcycsXG4gICAgICAgIGVudGl0aWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2UtcG9saWNpZXMnLFxuICAgICAgICAgICAgc3VidHlwZTogJ2RpYWwnLFxuICAgICAgICAgICAgYXBpRGF0YTogdGhpcy5kaWFsUG9saWN5QXBpRGF0YSxcbiAgICAgICAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuZGlhbFBvbGljeUNsaUNvbW1hbmQsXG4gICAgICAgICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5kaWFsUG9saWN5QXBpVXJsLFxuICAgICAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgICAgICByZXRyeTogKHN1bW1hcnlEYXRhKSA9PiB7IHRoaXMuc2F2ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0RpYWwnKSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZS1wb2xpY2llcycsXG4gICAgICAgICAgICBzdWJ0eXBlOiAnYmluZCcsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLmJpbmRQb2xpY3lBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiAoc3VtbWFyeURhdGEpID0+IHsgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnQmluZCcpIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdO1xuICAgIGlmICghdGhpcy5zZGtPbmx5RGlhbCAmJiAhdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2ludGVyY2VwdFN1bW1hcnksIGhvc3RTdW1tYXJ5XVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2ludGVyY2VwdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICBzdW1tYXJ5RGF0YS5zcGxpY2UoMCwwLHtcbiAgICAgICAgdGl0bGU6ICdDb25maWd1cmF0aW9ucycsXG4gICAgICAgIGVudGl0aWVzOiBbaG9zdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHN1bW1hcnlEYXRhOiBzdW1tYXJ5RGF0YSxcbiAgICAgIGlzRWRpdDogdGhpcy5pc0VkaXRcbiAgICB9O1xuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dGb3JtLm9wZW4oQ3JlYXRpb25TdW1tYXJ5RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnbmV3Jykge1xuICAgICAgICB0aGlzLmluaXRGb3JtRGF0YSgpO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09ICdjYW5jZWwnKSB7XG4gICAgICAgIC8vLyBEbyBub3RoaW5nLCBzdGF5IG9uIHBhZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5pdERhdGFNb2RlbHMoKTtcbiAgICAgICAgdGhpcy5fZGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvdXRlcj8ubmF2aWdhdGVCeVVybChgJHt0aGlzLmJhc2VQYXRofWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzdW1tYXJ5RGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrTmFtZUNvbmZsaWN0cygpIHtcbiAgICBjb25zdCBmaWx0ZXI6IEZpbHRlck9iaiA9IHtcbiAgICAgIGZpbHRlck5hbWU6ICduYW1lJyxcbiAgICAgIGNvbHVtbklkOiAnbmFtZScsXG4gICAgICB2YWx1ZTogdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgdmVyYjogJz0nXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0czogYW55ID0ge1xuICAgICAgc2VydmljZUNvbmZsaWN0OiBmYWxzZSxcbiAgICAgIGludGVyY2VwdENvbmZsaWN0OiBmYWxzZSxcbiAgICAgIGhvc3RDb25mbGljdDogZmFsc2UsXG4gICAgICBkaWFsUG9saWN5Q29uZmxpY3Q6IGZhbHNlLFxuICAgICAgYmluZFBvbGljeUNvbmZsaWN0OiBmYWxzZSxcbiAgICAgIG5hbWVzOiBbXVxuICAgIH07XG4gICAgY29uc3QgcGFnaW5nID0gY2xvbmVEZWVwKHRoaXMueml0aVNlcnZpY2UuREVGQVVMVF9QQUdJTkcpO1xuICAgIHBhZ2luZy5ub1NlYXJjaCA9IGZhbHNlO1xuICAgIGNvbnN0IHNlcnZpY2VQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ3NlcnZpY2VzJywgcGFnaW5nLCBbZmlsdGVyXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5zZXJ2aWNlQ29uZmxpY3QgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLm5hbWVzLnB1c2godGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXIudmFsdWUgPSB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZTtcbiAgICBjb25zdCBpbnRlcmNlcHRQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZ3MnLCBwYWdpbmcsIFtmaWx0ZXJdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmludGVyY2VwdENvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5uYW1lcy5wdXNoKHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXIudmFsdWUgPSB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWU7XG4gICAgY29uc3QgaG9zdFByb20gPSB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlncycsIHBhZ2luZywgW2ZpbHRlcl0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMuaG9zdENvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5uYW1lcy5wdXNoKHRoaXMuaG9zdENvbmZpZ0FwaURhdGEubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZmlsdGVyLnZhbHVlID0gdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lO1xuICAgIGNvbnN0IGRpYWxQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ3NlcnZpY2UtcG9saWNpZXMnLCBwYWdpbmcsIFtmaWx0ZXJdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmRpYWxQb2xpY3lDb25mbGljdCA9IHRydWU7XG4gICAgICAgIHJlc3VsdHMubmFtZXMucHVzaCh0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZpbHRlci52YWx1ZSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZTtcbiAgICBjb25zdCBiaW5kUHJvbSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlLXBvbGljaWVzJywgcGFnaW5nLCBbZmlsdGVyXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5iaW5kUG9saWN5Q29uZmxpY3QgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLm5hbWVzLnB1c2godGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbc2VydmljZVByb20sIGludGVyY2VwdFByb20sIGhvc3RQcm9tLCBkaWFsUHJvbSwgYmluZFByb21dKS50aGVuKCgpID0+IHtcbiAgICAgIGxldCBoYXNDb25mbGljdCA9IHJlc3VsdHMubmFtZXMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb25mbGljdCkge1xuICAgICAgICB0aGlzLmVycm9ycy5uYW1lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Q29uZmxpY3RXYXJuaW5nKHJlc3VsdHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0NvbmZsaWN0O1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd0NvbmZsaWN0V2FybmluZyhjb25mbGljdERhdGEpIHtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhcHBlbmRJZDogJ1NpbXBsZVNlcnZpY2VDb25mbGljdHMnLFxuICAgICAgdGl0bGU6ICdOYW1lIENvbmZsaWN0JyxcbiAgICAgIG1lc3NhZ2U6IGBUaGUgbmFtZSB5b3UgaGF2ZSBlbnRlcmVkIGhhcyBjb25mbGljdHMgZm9yIHRoZSBmb2xsb3dpbmcgZW50aXRpZXNgLFxuICAgICAgYnVsbGV0TGlzdDogY29uZmxpY3REYXRhLm5hbWVzLFxuICAgICAgc3VibWVzc2FnZTogYFBsZWFzZSB1cGRhdGUgdGhlIGVudGVyZWQgbmFtZSBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICBjb25maXJtTGFiZWw6ICdSZXR1cm4nLFxuICAgICAgc2hvd0NhbmNlbExpbms6IGZhbHNlLFxuICAgICAgaW1hZ2VVcmw6ICcuLi8uLi9hc3NldHMvc3Zncy9Hcm93bF9FcnJvci5zdmcnXG4gICAgfTtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKENvbmZpcm1Db21wb25lbnQsIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCgpID0+IHtcbiAgICAgIHRoaXMubmFtZUZpZWxkSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0pXG4gIH1cblxuICBhc3luYyBzYXZlSW50ZXJjZXB0Q29uZmlnKHN1bW1hcnlEYXRhKSB7XG4gICAgY29uc3QgaXNOZXdDb25maWcgPSBpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YT8uaWQpO1xuXG4gICAgLy8gQ29uZGl0aW9uYWwgRGVsZXRpb24gKElkZW50aWNhbCBMb2dpYylcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiAhaXNOZXdDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmRlbGV0ZSgnY29uZmlncycsIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5pZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNka09ubHlEaWFsICYmIGlzTmV3Q29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXNlIHRoZSBIZWxwZXIgRnVuY3Rpb25cbiAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgdGhpcy5zYXZlQ29uZmlnKFxuICAgICAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEsXG4gICAgICAgICdpbnRlcmNlcHRJbmNyZW1lbnQnLFxuICAgICAgICAnaW50ZXJjZXB0Q29uZmlnSWQnLFxuICAgICAgICAnaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCdcbiAgICApO1xuXG4gICAgLy8gQXBwbHkgZmluYWwgc3RhdHVzIGxvZ2ljXG4gICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uc3RhdHVzID0gc3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUhvc3RDb25maWcoc3VtbWFyeURhdGEpIHtcbiAgICBjb25zdCBpc05ld0NvbmZpZyA9IGlzRW1wdHkodGhpcy5ob3N0Q29uZmlnQXBpRGF0YT8uaWQpO1xuXG4gICAgLy8gQ29uZGl0aW9uYWwgRGVsZXRpb24gKElkZW50aWNhbCBMb2dpYylcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiAhaXNOZXdDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmRlbGV0ZSgnY29uZmlncycsIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuaWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiBpc05ld0NvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgSGVscGVyIEZ1bmN0aW9uXG4gICAgY29uc3QgeyBzdGF0dXMsIGNvbmZpZ0FwaURhdGEgfSA9IGF3YWl0IHRoaXMuc2F2ZUNvbmZpZyhcbiAgICAgICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSxcbiAgICAgICAgJ2hvc3RJbmNyZW1lbnQnLFxuICAgICAgICAnaG9zdENvbmZpZ0lkJyxcbiAgICAgICAgJ2hvc3RDb25maWdDbGlDb21tYW5kJ1xuICAgICk7XG5cbiAgICAvLyBBcHBseSBmaW5hbCBzdGF0dXMgbG9naWMgKHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGludGVyY2VwdClcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uc3RhdHVzID0gc3RhdHVzO1xuICAgICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uYXBpRGF0YSA9IGNvbmZpZ0FwaURhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzFdLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLmFwaURhdGEgPSBjb25maWdBcGlEYXRhO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVDb25maWcoXG4gICAgICBjb25maWdBcGlEYXRhOiBhbnksICAgICAgLy8gZS5nLiwgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhXG4gICAgICBpbmNyZW1lbnRlcjogc3RyaW5nLCAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGluY3JlbWVudGVyIHByb3BlcnR5ICgnaW50ZXJjZXB0SW5jcmVtZW50JyBvciAnaG9zdEluY3JlbWVudCcpXG4gICAgICBjb25maWdJZFByb3A6IHN0cmluZywgICAgLy8gVGhlIG5hbWUgb2YgdGhlIElEIHByb3BlcnR5ICgnaW50ZXJjZXB0Q29uZmlnSWQnIG9yICdob3N0Q29uZmlnSWQnKVxuICAgICAgY2xpQ29tbWFuZFByb3A6IHN0cmluZyAgIC8vIFRoZSBuYW1lIG9mIHRoZSBDTEkgY29tbWFuZCBwcm9wZXJ0eSAoJ2ludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQnIG9yICdob3N0Q29uZmlnQ2xpQ29tbWFuZCcpXG4gICk6IFByb21pc2U8YW55PiB7XG5cbiAgICBjb25zdCBpc05ld0NvbmZpZyA9IGlzRW1wdHkoY29uZmlnQXBpRGF0YT8uaWQpO1xuICAgIGNvbnN0IGluY3JlbWVudFZhbHVlID0gdGhpc1tpbmNyZW1lbnRlcl0gYXMgbnVtYmVyOyAvLyBHZXQgY3VycmVudCBpbmNyZW1lbnQgdmFsdWVcbiAgICBsZXQgc3RhdHVzOiBzdHJpbmc7XG4gICAgbGV0IGNvbmZpZ1Jlc3VsdDogYW55O1xuXG4gICAgaWYgKGlzTmV3Q29uZmlnKSB7XG4gICAgICB0aGlzW2luY3JlbWVudGVyXSA9IGluY3JlbWVudFZhbHVlICsgMTsgLy8gSW5jcmVtZW50IGZvciBuYW1pbmdcblxuICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgIGlmICh0aGlzW2luY3JlbWVudGVyXSA+IDApIHtcbiAgICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXNbaW5jcmVtZW50ZXJdO1xuICAgICAgfVxuXG4gICAgICBjb25maWdBcGlEYXRhLm5hbWUgPSBjb25maWdBcGlEYXRhLm5hbWUgKyBwb3N0Rml4O1xuXG4gICAgICBjb25maWdSZXN1bHQgPSBhd2FpdCB0aGlzLnNhdmVFbnRpdHkoJ2NvbmZpZ3MnLCBjb25maWdBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiByZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWdSZXN1bHQgPSBhd2FpdCB0aGlzLnVwZGF0ZUVudGl0eSgnY29uZmlncycsIGNvbmZpZ0FwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ1Jlc3VsdC5lcnJvcikge1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2V0IHRoZSBjb25maWcgSUQgcHJvcGVydHkgZHluYW1pY2FsbHkgKGUuZy4sIHRoaXMuaW50ZXJjZXB0Q29uZmlnSWQpXG4gICAgICB0aGlzW2NvbmZpZ0lkUHJvcF0gPSBjb25maWdBcGlEYXRhLmlkIHx8IGNvbmZpZ1Jlc3VsdC5pZCB8fCBjb25maWdSZXN1bHQuZGF0YS5pZDtcblxuICAgICAgLy8gQWRkIHRoZSBuZXcgY29uZmlnIElEIHRvIHNlcnZpY2VBcGlEYXRhIChhc3N1bWluZyBzZXJ2aWNlQXBpRGF0YSBpcyBhY2Nlc3NpYmxlIHZpYSAndGhpcycpXG4gICAgICB0aGlzLnNlcnZpY2VBcGlEYXRhLmNvbmZpZ3MucHVzaCh0aGlzW2NvbmZpZ0lkUHJvcF0pO1xuXG4gICAgICAvLyBTZXQgdGhlIENMSSBjb21tYW5kIGR5bmFtaWNhbGx5XG4gICAgICB0aGlzW2NsaUNvbW1hbmRQcm9wXSA9IGB6aXRpIGVkZ2UgY3JlYXRlIGNvbmZpZyAnJHtjb25maWdBcGlEYXRhLm5hbWV9JyAnJHtjb25maWdBcGlEYXRhLmNvbmZpZ1R5cGVJZH0nICcke0pTT04uc3RyaW5naWZ5KGNvbmZpZ0FwaURhdGEuZGF0YSl9J2A7XG5cbiAgICAgIHN0YXR1cyA9ICdkb25lJztcbiAgICAgIHRoaXNbaW5jcmVtZW50ZXJdID0gLTE7IC8vIFJlc2V0IGluY3JlbWVudGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhdHVzLCBjb25maWdSZXN1bHQsIGNvbmZpZ0FwaURhdGEgfTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXJ2aWNlKHN1bW1hcnlEYXRhKSB7XG4gICAgY29uc3QgaXNOZXdTZXJ2aWNlID0gaXNFbXB0eSh0aGlzLnNlcnZpY2VBcGlEYXRhPy5pZCk7XG5cbiAgICBsZXQgc2VydmljZVJlc3VsdDtcbiAgICBpZiAoaXNOZXdTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNlcnZpY2VJbmNyZW1lbnQrKztcbiAgICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgICBpZiAodGhpcy5zZXJ2aWNlSW5jcmVtZW50ID4gMCkge1xuICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5zZXJ2aWNlSW5jcmVtZW50O1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lID0gdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lICsgcG9zdEZpeDtcbiAgICAgIHNldCh0aGlzLnNlcnZpY2VBcGlEYXRhLCAndGFncy5zZXJ2aWNlLXR5cGUnLCAnc2ltcGxlJyk7XG4gICAgICBzZXJ2aWNlUmVzdWx0ID0gYXdhaXQgdGhpcy5zYXZlRW50aXR5KCdzZXJ2aWNlcycsIHRoaXMuc2VydmljZUFwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2aWNlUmVzdWx0ID0gYXdhaXQgdGhpcy51cGRhdGVFbnRpdHkoJ3NlcnZpY2VzJywgdGhpcy5zZXJ2aWNlQXBpRGF0YSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHNlcnZpY2VTdGF0dXM7XG4gICAgaWYgKHNlcnZpY2VSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHNlcnZpY2VTdGF0dXMgPSAnZXJyb3InO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2VJZCA9IHRoaXMuc2VydmljZUFwaURhdGEuaWQgPyB0aGlzLnNlcnZpY2VBcGlEYXRhLmlkIDogKHNlcnZpY2VSZXN1bHQuaWQgPyBzZXJ2aWNlUmVzdWx0LmlkIDogc2VydmljZVJlc3VsdC5kYXRhLmlkKTtcbiAgICAgIHNlcnZpY2VTdGF0dXMgPSAnZG9uZSc7XG4gICAgICBsZXQgY2xpQ29uZmlnSWRzID0gJyc7XG4gICAgICBpZiAoIXRoaXMuc2RrT25seURpYWwgJiYgIXRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgICAgY2xpQ29uZmlnSWRzID0gYC0tY29uZmlncyAnJHt0aGlzLmludGVyY2VwdENvbmZpZ0lkfSwke3RoaXMuaG9zdENvbmZpZ0lkfSdgO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5zZGtPbmx5QmluZCAmJiB0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICAgIGNsaUNvbmZpZ0lkcyA9IGAtLWNvbmZpZ3MgJyR7dGhpcy5pbnRlcmNlcHRDb25maWdJZH0nYDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZGtPbmx5QmluZCAmJiAhdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgICBjbGlDb25maWdJZHMgPSBgLS1jb25maWdzICcke3RoaXMuaW50ZXJjZXB0Q29uZmlnSWR9J2A7XG4gICAgICB9XG4gICAgICB0aGlzLnNlcnZpY2VDbGlDb21tYW5kID0gYHppdGkgZWRnZSBjcmVhdGUgc2VydmljZSAnJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9JyAke2NsaUNvbmZpZ0lkc31gXG4gICAgICB0aGlzLnNlcnZpY2VJbmNyZW1lbnQgPSAtMTtcbiAgICB9XG4gICAgY29uc3Qgc3VtbWFyeUluZGV4ID0gKHRoaXMuc2RrT25seURpYWwgJiYgdGhpcy5zZGtPbmx5QmluZCkgPyAwIDogMTtcbiAgICBzdW1tYXJ5RGF0YVtzdW1tYXJ5SW5kZXhdLmVudGl0aWVzWzBdLnN0YXR1cyA9IHNlcnZpY2VTdGF0dXM7XG4gIH1cblxuICBhc3luYyBzYXZlUG9saWN5KHN1bW1hcnlEYXRhLCB0eXBlID0gJ0RpYWwnKSB7XG4gICAgY29uc3QgaXNOZXdQb2xpY3kgPSBpc0VtcHR5KHRoaXMuc2VydmljZUFwaURhdGE/LmlkKTtcblxuICAgIGxldCBwb2xpY3lBcGlEYXRhLCBwb2xpY3lSZXN1bHQsIHJvbGVBdHRyaWJ1dGVzLCBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgbGV0IGNsaVJvbGVzID0gJyc7XG4gICAgbGV0IHN0YXR1cyA9ICcnO1xuICAgIGlmIChpc05ld1BvbGljeSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgICB0aGlzLmRpYWxJbmNyZW1lbnQrKztcbiAgICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuZGlhbEluY3JlbWVudCA+IDApIHtcbiAgICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5kaWFsSW5jcmVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSA9IHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgICAgIHBvbGljeUFwaURhdGEgPSB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhO1xuICAgICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgICBuYW1lZEF0dHJpYnV0ZXMgPSB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJpbmRJbmNyZW1lbnQrKztcbiAgICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuYmluZEluY3JlbWVudCA+IDApIHtcbiAgICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5iaW5kSW5jcmVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgICAgIHBvbGljeUFwaURhdGEgPSB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhO1xuICAgICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgICBuYW1lZEF0dHJpYnV0ZXMgPSB0aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgICBwb2xpY3lBcGlEYXRhLnNlcnZpY2VSb2xlcyA9IFtgQCR7dGhpcy5zZXJ2aWNlSWR9YF07XG4gICAgICBwb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMgPSBuYW1lZEF0dHJpYnV0ZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGNsaVJvbGVzICs9ICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXSArICcsJztcbiAgICAgICAgcmV0dXJuICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXTtcbiAgICAgIH0pO1xuICAgICAgcG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzID0gWy4uLnBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcywgLi4ucm9sZUF0dHJpYnV0ZXMubWFwKChyb2xlKSA9PiB7XG4gICAgICAgIGNsaVJvbGVzICs9ICcjJyArIHJvbGUgKyAnLCc7XG4gICAgICAgIHJldHVybiAnIycgKyByb2xlO1xuICAgICAgfSldO1xuICAgICAgY2xpUm9sZXMgPSBjbGlSb2xlcy5zbGljZSgwLCAtMSk7XG4gICAgICBwb2xpY3lSZXN1bHQgPSBhd2FpdCB0aGlzLnNhdmVFbnRpdHkoJ3NlcnZpY2UtcG9saWNpZXMnLCBwb2xpY3lBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgICBwb2xpY3lBcGlEYXRhID0gdGhpcy5kaWFsUG9saWN5QXBpRGF0YTtcbiAgICAgICAgcm9sZUF0dHJpYnV0ZXMgPSB0aGlzLmRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcztcbiAgICAgICAgbmFtZWRBdHRyaWJ1dGVzID0gdGhpcy5kaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9saWN5QXBpRGF0YSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGE7XG4gICAgICAgIHJvbGVBdHRyaWJ1dGVzID0gdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXM7XG4gICAgICAgIG5hbWVkQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIHBvbGljeUFwaURhdGEuc2VydmljZVJvbGVzID0gW2BAJHt0aGlzLnNlcnZpY2VJZH1gXTtcbiAgICAgIHBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcyA9IG5hbWVkQXR0cmlidXRlcy5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgY2xpUm9sZXMgKz0gJ0AnICsgdGhpcy5pZGVudGl0aWVzTmFtZUlkTWFwW25hbWVdICsgJywnO1xuICAgICAgICByZXR1cm4gJ0AnICsgdGhpcy5pZGVudGl0aWVzTmFtZUlkTWFwW25hbWVdO1xuICAgICAgfSk7XG4gICAgICBwb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMgPSBbLi4ucG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzLCAuLi5yb2xlQXR0cmlidXRlcy5tYXAoKHJvbGUpID0+IHtcbiAgICAgICAgY2xpUm9sZXMgKz0gJyMnICsgcm9sZSArICcsJztcbiAgICAgICAgcmV0dXJuICcjJyArIHJvbGU7XG4gICAgICB9KV07XG4gICAgICBjbGlSb2xlcyA9IGNsaVJvbGVzLnNsaWNlKDAsIC0xKTtcbiAgICAgIHBvbGljeVJlc3VsdCA9IGF3YWl0IHRoaXMudXBkYXRlRW50aXR5KCdzZXJ2aWNlLXBvbGljaWVzJywgcG9saWN5QXBpRGF0YSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBvbGljeVJlc3VsdC5lcnJvcikge1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdHVzID0gJ2RvbmUnO1xuICAgIH1cbiAgICBjb25zdCBzdW1tYXJ5SW5kZXggPSAodGhpcy5zZGtPbmx5RGlhbCAmJiB0aGlzLnNka09ubHlCaW5kKSA/IDEgOiAyO1xuICAgIGNvbnN0IGVudGl0eUluZGV4ID0gdHlwZSA9PT0gJ0RpYWwnID8gMCA6IDE7XG4gICAgc3VtbWFyeURhdGFbc3VtbWFyeUluZGV4XS5lbnRpdGllc1tlbnRpdHlJbmRleF0uc3RhdHVzID0gc3RhdHVzO1xuICAgIGNvbnN0IGNsaUNvbW1hbmQgPSBgeml0aSBlZGdlIGNyZWF0ZSBzZXJ2aWNlLXBvbGljeSAnJHtwb2xpY3lBcGlEYXRhLm5hbWV9JyAke3R5cGV9IC0tc2VtYW50aWMgQW55T2YgLS1zZXJ2aWNlLXJvbGVzICdAJHt0aGlzLnNlcnZpY2VJZH0nIC0taWRlbnRpdHktcm9sZXMgJyR7Y2xpUm9sZXN9J2A7XG4gICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZCA9IGNsaUNvbW1hbmQ7XG4gICAgICBpZiAoc3RhdHVzID09PSAnZG9uZScpIHtcbiAgICAgICAgdGhpcy5kaWFsSW5jcmVtZW50ID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJpbmRJbmNyZW1lbnQgPSAtMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZCA9IGNsaUNvbW1hbmQ7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUVudGl0eSh0eXBlLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdCh0eXBlLCBkYXRhLCB0cnVlKTtcbiAgfVxuXG4gIHVwZGF0ZUVudGl0eSh0eXBlLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucGF0Y2godHlwZSwgZGF0YSwgZGF0YS5pZCwgdHJ1ZSk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgIHRoaXMudmFsaWRhdGVTZXJ2aWNlTmFtZSgpO1xuICAgIHRoaXMudmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKCk7XG4gICAgdGhpcy52YWxpZGF0ZUludGVyY2VwdFBvcnQoKTtcbiAgICB0aGlzLnZhbGlkYXRlSG9zdEFkZHJlc3MoKTtcbiAgICB0aGlzLnZhbGlkYXRlSG9zdFBvcnQoKTtcbiAgICB0aGlzLnZhbGlkYXRlRGlhbElkZW50aXRpZXMoKVxuICAgIHRoaXMudmFsaWRhdGVCaW5kSWRlbnRpdGllcygpO1xuICAgIHJldHVybiBpc0VtcHR5KHRoaXMuZXJyb3JzKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VydmljZU5hbWUoKSB7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lKSkge1xuICAgICAgdGhpcy5lcnJvcnMubmFtZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnbmFtZScpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSW50ZXJjZXB0QWRkcmVzcygpIHtcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzJyk7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3NGb3JtYXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRW1wdHkodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzKSB8fCBpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXSkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmludGVyY2VwdEFkZHJlc3MgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuaXNWYWxpZEludGVyY2VwdEhvc3QodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzWzBdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0QWRkcmVzcyA9IHRydWU7XG4gICAgICB0aGlzLmVycm9ycy5pbnRlcmNlcHRBZGRyZXNzRm9ybWF0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzJyk7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3NGb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUludGVyY2VwdFBvcnQoKSB7XG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwpIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0UG9ydCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbXB0eSh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUG9ydFJhbmdlcyh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0UG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSG9zdEFkZHJlc3MoKSB7XG4gICAgaWYgKCF0aGlzLnNka09ubHlCaW5kICYmIGlzRW1wdHkodGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3MpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0QWRkcmVzcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaG9zdEFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUhvc3RQb3J0KCkge1xuICAgIGlmICh0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2hvc3RQb3J0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc05pbCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkgfHwgaXNOYU4odGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnQpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkUG9ydCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhvc3RQb3J0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdob3N0UG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGlhbElkZW50aXRpZXMoKSB7XG4gICAgaWYgKGlzRW1wdHkoWy4uLnRoaXMuZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcywgLi4udGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXNdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuZGlhbElkZW50aXRpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2RpYWxJZGVudGl0aWVzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCaW5kSWRlbnRpdGllcygpIHtcbiAgICBpZiAoaXNFbXB0eShbLi4udGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzLCAuLi50aGlzLmJpbmRQb2xpY3lSb2xlQXR0cmlidXRlc10pKSB7XG4gICAgICB0aGlzLmVycm9ycy5iaW5kSWRlbnRpdGllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnYmluZElkZW50aXRpZXMnKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZXJ2aWNlc0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2VzJyBcXFxcXG4gICAgICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonIFxcXFxcbiAgICAgIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAgIC1IICd6dC1zZXNzaW9uOiAke3RoaXMueml0aVNlc3Npb25JZH0nIFxcXFxcbiAgICAgIC0tZGF0YS1yYXcgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2aWNlQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0SW50ZXJjZXB0Q29uZmlnQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvY29uZmlncycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0SG9zdENvbmZpZ0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3MnIFxcXFxcbiAgICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicgXFxcXFxuICAgICAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXFxcXFxuICAgICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy56aXRpU2Vzc2lvbklkfScgXFxcXFxuICAgICAgLS1kYXRhLXJhdyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmhvc3RDb25maWdBcGlEYXRhKX0nIFxcXFxgXG4gIH1cblxuICBnZXREaWFsQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuZGlhbFBvbGljeUFwaURhdGEpfScgXFxcXGA7XG4gIH1cblxuICBnZXRCaW5kQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuYmluZFBvbGljeUFwaURhdGEpfScgXFxcXGA7XG4gIH1cblxuICBpbml0RGF0YU1vZGVscygpIHtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhID0gdGhpcy5pbml0U2VydmljZUFwaURhdGE7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEgPSB0aGlzLmluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGE7XG4gICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhID0gdGhpcy5pbml0SG9zdENvbmZpZ0FwaURhdGEuZGF0YTtcbiAgICB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhID0gdGhpcy5pbml0RGlhbFBvbGljeUFwaURhdGE7XG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IHRoaXMuaW5pdEJpbmRQb2xpY3lBcGlEYXRhO1xuICB9XG5cbiAgY29udmVydFRvQWR2YW5jZWQoKSB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFwcGVuZElkOiAnQ29udmVydFNpbXBsZVNlcnZpY2UnLFxuICAgICAgdGl0bGU6ICdDb252ZXJ0IFNlcnZpY2UnLFxuICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBjb252ZXJ0IHRoaXMgc2ltcGxlIHNlcnZpY2UgdG8gYW4gYWR2YW5jZWQgc2VydmljZT8gVGhpcyBjaGFuZ2UgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgICAgYnVsbGV0TGlzdDogW10sXG4gICAgICBjb25maXJtTGFiZWw6ICdZZXMnLFxuICAgICAgY2FuY2VsTGFiZWw6ICdPb3BzLCBubyBnZXQgbWUgb3V0IG9mIGhlcmUnLFxuICAgICAgaW1hZ2VVcmw6ICcuLi8uLi9hc3NldHMvc3Zncy9Hcm93bF9XYXJuaW5nLnN2ZycsXG4gICAgICBzaG93Q2FuY2VsTGluazogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0Py5jb25maXJtZWQpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS50YWdzWydzZXJ2aWNlLXR5cGUnXSA9ICdhZHZhbmNlZCc7XG4gICAgICAgIHRoaXMudXBkYXRlRW50aXR5KCdzZXJ2aWNlcycsIHRoaXMuc2VydmljZUFwaURhdGEpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgYFNlcnZpY2UgVXBkYXRlZGAsXG4gICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9IHRvIGFuIGFkdmFuY2VkIHNlcnZpY2UuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1VSTFMuWklUSV9BRFZBTkNFRF9TRVJWSUNFICsgJy8nICsgdGhpcy5zZXJ2aWNlQXBpRGF0YS5pZF0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEZhaWxlZCB0byBVcGRhdGUgU2VydmljZWAsXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byBjb252ZXJ0ICR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfSB0byBhbiBhZHZhbmNlZCBzZXJ2aWNlLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgb3ZlcnJpZGUgY2hlY2tEYXRhQ2hhbmdlKCkge1xuICAgIGNvbnN0IHNlcnZpY2VEYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0U2VydmljZUFwaURhdGEsIHRoaXMuc2VydmljZUFwaURhdGEpO1xuICAgIGNvbnN0IGludGVyY2VwdERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEsIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhKTtcbiAgICBjb25zdCBob3N0RGF0YUNoYW5nZSA9ICFpc0VxdWFsKHRoaXMuaW5pdEhvc3RDb25maWdBcGlEYXRhLmRhdGEsIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YSk7XG4gICAgY29uc3QgZGlhbERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXREaWFsUG9saWN5QXBpRGF0YSwgdGhpcy5kaWFsUG9saWN5QXBpRGF0YSk7XG4gICAgY29uc3QgYmluZERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRCaW5kUG9saWN5QXBpRGF0YSwgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSk7XG4gICAgY29uc3QgZGF0YUNoYW5nZSA9IHNlcnZpY2VEYXRhQ2hhbmdlICE9PSB0aGlzLnNlcnZpY2VEYXRhQ2hhbmdlIHx8IGludGVyY2VwdERhdGFDaGFuZ2UgIT09IHRoaXMuaW50ZXJjZXB0RGF0YUNoYW5nZSB8fCBob3N0RGF0YUNoYW5nZSAhPT0gdGhpcy5ob3N0RGF0YUNoYW5nZSB8fFxuICAgICAgICBkaWFsRGF0YUNoYW5nZSAhPT0gdGhpcy5kaWFsRGF0YUNoYW5nZSB8fCBiaW5kRGF0YUNoYW5nZSAhPT0gdGhpcy5iaW5kRGF0YUNoYW5nZTtcbiAgICBpZiAoZGF0YUNoYW5nZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlRGF0YUNoYW5nZSA9IHNlcnZpY2VEYXRhQ2hhbmdlO1xuICAgICAgdGhpcy5pbnRlcmNlcHREYXRhQ2hhbmdlID0gaW50ZXJjZXB0RGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuaG9zdERhdGFDaGFuZ2UgPSBob3N0RGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuZGlhbERhdGFDaGFuZ2UgPSBkaWFsRGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuYmluZERhdGFDaGFuZ2UgPSBiaW5kRGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KGRhdGFDaGFuZ2UpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhQ2hhbmdlID0gc2VydmljZURhdGFDaGFuZ2UgfHwgaW50ZXJjZXB0RGF0YUNoYW5nZSB8fCBob3N0RGF0YUNoYW5nZSB8fCBkaWFsRGF0YUNoYW5nZSB8fCBiaW5kRGF0YUNoYW5nZTtcbiAgICBhcHAuaXNEaXJ0eSA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwcm9qZWN0YWJsZS1mb3JtLXdyYXBwZXIgc2ltcGxlLXNlcnZpY2Utd3JhcHBlclwiXG4gICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKCRldmVudClcIlxuICAgICAoa2V5dXAuZXNjYXBlKT1cImNsb3NlTW9kYWwodHJ1ZSwgZmFsc2UsICdjYXJkcycsICRldmVudClcIlxuICAgICB0YWJpbmRleD1cIjBcIlxuPlxuICAgIDxsaWItZm9ybS1oZWFkZXJcbiAgICAgICAgICAgIFtkYXRhXT1cImZvcm1EYXRhXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpc0VkaXQgPyAnRWRpdCBTaW1wbGUgU2VydmljZScgOiAnQ3JlYXRlIGEgU2ltcGxlIFNlcnZpY2UnXCJcbiAgICAgICAgICAgIFthY3Rpb25CdXR0b25UZXh0XT1cIidTYXZlJ1wiXG4gICAgICAgICAgICBbbXVsdGlBY3Rpb25zXT1cIm11bHRpQWN0aW9uc1wiXG4gICAgICAgICAgICAoYWN0aW9uUmVxdWVzdGVkKT1cImhlYWRlckFjdGlvblJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChtdWx0aUFjdGlvblJlcXVlc3RlZCk9XCJtdWx0aUFjdGlvblJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsoZm9ybVZpZXcpXT1cImZvcm1WaWV3XCJcbiAgICAgICAgICAgIFttb3JlQWN0aW9uc109XCJtb3JlQWN0aW9uc1wiXG4gICAgPjwvbGliLWZvcm0taGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cInNpbXBsZS1zZXJ2aWNlLWZvcm0tY29udGFpbmVyIHByb2plY3RhYmxlLWZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiB0aHJlZS1maWZ0aHNcIiAqbmdJZj1cInNob3dGb3JtXCI+XG4gICAgICAgICAgICA8ZGl2ICBpZD1cIklubGluZVNlcnZpY2VBcmVhXCIgY2xhc3M9XCJhbnlhZGRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLXNlcnZpY2UtaW5wdXRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXIgW3RpdGxlXT1cIidTZXJ2aWNlIERldGFpbHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dC1ncm91cCBzZXJ2aWNlLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5TZXJ2aWNlIE5hbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5hbWUgdGhpcyBzZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25hbWVGaWVsZElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5uYW1lfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlcnZpY2VBcGlEYXRhLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlcnZpY2VOYW1lQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidmFsaWRhdGVTZXJ2aWNlTmFtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPlNFTEVDVCBPUiBDUkVBVEUgU0VSVklDRSBBVFRSSUJVVEVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VydmljZUFwaURhdGEucm9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZVJvbGVBdHRyaWJ1dGVzXT1cInNlcnZpY2VSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0FkZCBhdHRyaWJ1dGVzIHRvIGdyb3VwIHNlcnZpY2VzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtc2VydmljZS1jZW50ZXItY29udGVudFwiICpuZ0lmPVwic2hvd0Zvcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQUNDRVNTSU5HIENPTkZJR1VSQVRJT04nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAxJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ0hvdyB3aWxsIGNsaWVudCBhcHBsaWNhdGlvbnMgdXNlIHRoaXMgc2VydmljZT8gU3BlY2lmeSBhIGhvc3RuYW1lL0lQIGFuZCBwb3J0LCBvciB1c2UgdGhlICZxdW90O1NESyBPbmx5JnF1b3Q7IHRvZ2dsZSBmb3IgYW4gYXBwbGljYXRpb24gZW1iZWRkZWQgY29uZmlndXJhdGlvbi4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0LWdyb3VwIGFjY2Vzc2luZy1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hhdCBpZGVudGl0aWVzIGNhbiBhY2Nlc3MgdGhpcyBzZXJ2aWNlPzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwiZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cImRpYWxQb2xpY3lSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cImlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJpZGVudGl0eVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGlkZW50aXR5IGF0dHJpYnV0ZXMgdG8gZ3JhbnQgYWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRXJyb3JdPVwiZXJyb3JzLmRpYWxJZGVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZE5hbWVkQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZURpYWxJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVEaWFsSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+SG93IHdpbGwgdGhlIHNlcnZpY2UgYmUgYWNjZXNzZWQ/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFkZHJlc3NQb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5TREsgT05MWTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGstdG9nZ2xlIGZvcm0tZmllbGQtdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoR3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2RrT25seURpYWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb246IHNka09ubHlEaWFsIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCIhc2RrT25seURpYWxcIiBjbGFzcz1cIm9uLWxhYmVsXCI+WUVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwic2RrT25seURpYWxcIiBjbGFzcz1cIm9mZi1sYWJlbFwiPk5PPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seURpYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWhvc3RuYW1lLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPkhPU1ROQU1FIC8gSVA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtaW5mbyBpbmZvaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBY2Nlc3NpbmcgaG9zdG5hbWVzIG11c3QgaW5jbHVkZSBhICcuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlcnJvcnMuaW50ZXJjZXB0QWRkcmVzc0Zvcm1hdFwiIGNsYXNzPVwiZXJyb3ItbGFiZWxcIj5BY2Nlc3NpbmcgaG9zdG5hbWVzIG11c3QgaW5jbHVkZSBhICcuJzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG93VG9cIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIChjaGFuZ2UpPVwidmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5pbnRlcmNlcHRBZGRyZXNzfVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5RGlhbCA/ICcnIDogJ2UuZy4gbXlzZXJ2aWNlLnppdGknXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5RGlhbCA/ICcnIDogaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seURpYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+UE9SVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvd1RvUG9ydFwiIHR5cGU9XCJudW1iZXJcIiBtYXhsZW5ndGg9XCIxMFwiIChjaGFuZ2UpPVwidmFsaWRhdGVJbnRlcmNlcHRQb3J0KClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5pbnRlcmNlcHRQb3J0fVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5RGlhbCA/ICcnIDogNDQzXCIgKGtleXVwKT1cImludGVyY2VwdFBvcnRDaGFuZ2VkKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNka09ubHlEaWFsID8gJycgOiBpbnRlcmNlcHRQb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSE9TVElORyBDT05GSUdVUkFUSU9OJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiAxMDAwMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidXaGVyZSBzaG91bGQgdHJhZmZpYyBmb3IgdGhpcyBzZXJ2aWNlIGJlIHNlbnQ/IFNwZWNpZnkgYSBwcm90b2NvbCwgaG9zdG5hbWUvSVAsIGFuZCBwb3J0LCBvciB1c2UgdGhlICZxdW90O1NESyBPbmx5JnF1b3Q7IHRvZ2dsZSBmb3IgYW4gYXBwbGljYXRpb24gZW1iZWRkZWQgY29uZmlndXJhdGlvbi4nXCJcblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXQtZ3JvdXAgaG9zdGluZy1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hhdCBpZGVudGl0aWVzIGNhbiBob3N0IHRoaXMgc2VydmljZT88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cImJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJiaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZU5hbWVkQXR0cmlidXRlc109XCJpZGVudGl0eU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBpZGVudGl0eSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRXJyb3JdPVwiZXJyb3JzLmJpbmRJZGVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZE5hbWVkQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZUJpbmRJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVCaW5kSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hlcmUgc2hvdWxkIHRyYWZmaWMgYmUgc2VudD88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgYWRkcmVzc0Z1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlNESyBPTkxZPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkay10b2dnbGUgZm9ybS1maWVsZC10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hHcmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZGtPbmx5QmluZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvbjogc2RrT25seUJpbmQgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cIiFzZGtPbmx5QmluZFwiIGNsYXNzPVwib24tbGFiZWxcIj5ZRVM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJzZGtPbmx5QmluZFwiIGNsYXNzPVwib2ZmLWxhYmVsXCI+Tk88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBzZGtPbmx5QmluZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5QUk9UT0NPTDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJIb3N0ZWRQcm90b2NvbFwiIChjaGFuZ2UpPVwiaG9zdFByb3RvY29sc0NoYW5nZWQoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2RrT25seUJpbmQgPyAnJyA6IGhvc3RQcm90b2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0Y3BcIj5UQ1A8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidWRwXCIgPlVEUDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib3RoXCIgPlRDUC9VRFA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seUJpbmR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+SE9TVE5BTUUgLyBJUDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvc3RlZEhvc3RcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIChjaGFuZ2UpPVwidmFsaWRhdGVIb3N0QWRkcmVzcygpXCIgW25nQ2xhc3NdPVwie2Vycm9yOiBlcnJvcnMuaG9zdEFkZHJlc3N9XCIgW3BsYWNlaG9sZGVyXT1cInNka09ubHlCaW5kID8gJycgOiAnZS5nLiBteXNlcnZpY2Uueml0aSdcIiBbKG5nTW9kZWwpXT1cInNka09ubHlCaW5kID8gJycgOiBob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IHNka09ubHlCaW5kfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlBPUlQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3N0ZWRQb3J0XCIgdHlwZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgKGNoYW5nZSk9XCJ2YWxpZGF0ZUhvc3RQb3J0KClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5ob3N0UG9ydH1cIiBbcGxhY2Vob2xkZXJdPVwic2RrT25seUJpbmQgPyAnJyA6IDQ0M1wiIFsobmdNb2RlbCldPVwic2RrT25seUJpbmQgPyAnJyA6IGhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
1003
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2Uvc2ltcGxlLXNlcnZpY2Uvc2ltcGxlLXNlcnZpY2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUMseUJBQXlCLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDdEYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHdDQUF3QyxDQUFDO0FBRzFGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQVcsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUszRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxPQUFPLEVBQUMs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QUFtQixJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDO1FBQ2xILEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLO0lBQ0wsQ0FBQzsrR0ExL0JVLHNCQUFzQixrQkFxR3JCLGdCQUFnQiwrQ0FFaEIsaUJBQWlCLDJDQUVqQix5QkFBeUI7bUdBekcxQixzQkFBc0IsNFRDNUJuQyx5c2FBaU1BOztTRHJLYSxzQkFBc0I7NEZBQXRCLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7OzBCQXlHekIsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUV2QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBRXhCLE1BQU07MkJBQUMseUJBQXlCOytNQXhHNUIscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBOEZJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQW1CTSxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJvamVjdGFibGVGb3JtfSBmcm9tIFwiLi4vLi4vcHJvamVjdGFibGUtZm9ybS5jbGFzc1wiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge1NFUlZJQ0VfRVhURU5TSU9OX1NFUlZJQ0UsIFNlcnZpY2VGb3JtU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2UtZm9ybS5zZXJ2aWNlXCI7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge0NyZWF0aW9uU3VtbWFyeURpYWxvZ0NvbXBvbmVudH0gZnJvbSBcIi4uLy4uLy4uL2NyZWF0aW9uLXN1bW1hcnktZGlhbG9nL2NyZWF0aW9uLXN1bW1hcnktZGlhbG9nLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtpc0VtcHR5LCBpc05pbCwgaXNOYU4sIHVuc2V0LCBjbG9uZURlZXAsIGlzRXF1YWwsIGZvckVhY2gsIHNldCwgZ2V0fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7U2VydmljZXNQYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3BhZ2VzL3NlcnZpY2VzL3NlcnZpY2VzLXBhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0ZpbHRlck9ian0gZnJvbSBcIi4uLy4uLy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtDb25maXJtQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vY29uZmlybS9jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtVUkxTfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXJsc1wiO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZn0gZnJvbSBcInJ4anNcIjtcblxuLy8gQHRzLWlnbm9yZVxuY29uc3Qge2FwcH0gPSB3aW5kb3c7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zaW1wbGUtc2VydmljZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW1wbGUtc2VydmljZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpbXBsZS1zZXJ2aWNlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2ltcGxlU2VydmljZUNvbXBvbmVudCBleHRlbmRzIFByb2plY3RhYmxlRm9ybSB7XG4gIEBJbnB1dCgpIHNlcnZpY2VSb2xlQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaWRlbnRpdHlSb2xlQXR0cmlidXRlczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXM6IGFueVtdID0gW107XG5cbiAgZGF0YUluaXQgPSBmYWxzZTtcbiAgc2hvd0Zvcm0gPSB0cnVlO1xuICBmb3JtVmlldyA9ICdzaW1wbGUnO1xuICBjb250cm9sbGVyRG9tYWluID0gJyc7XG4gIHppdGlTZXNzaW9uSWQ7XG4gIGludGVyY2VwdFBvcnQ7XG4gIGhvc3RQcm90b2NvbCA9ICd0Y3AnO1xuICBzZXJ2aWNlQ2xpQ29tbWFuZCA9ICcnO1xuICBpbnRlcmNlcHRDb25maWdDbGlDb21tYW5kID0gJyc7XG4gIGhvc3RDb25maWdDbGlDb21tYW5kID0gJyc7XG4gIGRpYWxQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gIGJpbmRQb2xpY3lDbGlDb21tYW5kID0gJyc7XG4gIHNlcnZpY2VBcGlVcmwgPSAnJztcbiAgaW50ZXJjZXB0Q29uZmlnQXBpVXJsID0gJyc7XG4gIGhvc3RDb25maWdBcGlVcmwgPSAnJztcbiAgZGlhbFBvbGljeUFwaVVybCA9ICcnO1xuICBiaW5kUG9saWN5QXBpVXJsID0gJyc7XG4gIGluaXRTZXJ2aWNlQXBpRGF0YSA9IHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIHJvbGVBdHRyaWJ1dGVzOiBbXSxcbiAgICBjb25maWdzOiBbXSxcbiAgICBlbmNyeXB0aW9uUmVxdWlyZWQ6IHRydWVcbiAgfTtcbiAgaW5pdEludGVyY2VwdENvbmZpZ0FwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICBjb25maWdUeXBlSWQ6XCJnN2NJV2JjR2dcIixcbiAgICBkYXRhOiB7XG4gICAgICBwb3J0UmFuZ2VzOiBbXSxcbiAgICAgIGFkZHJlc3NlczogW10sXG4gICAgICBwcm90b2NvbHM6IFsndGNwJywgJ3VkcCddXG4gICAgfVxuICB9O1xuICBpbml0SG9zdENvbmZpZ0FwaURhdGEgPSB7XG4gICAgbmFtZTogJycsXG4gICAgY29uZmlnVHlwZUlkOiBcIk5INXA0RnBHUlwiLFxuICAgIGRhdGE6IHtcbiAgICAgIGFkZHJlc3M6IFwiXCIsXG4gICAgICBwb3J0OiB1bmRlZmluZWQsXG4gICAgICBmb3J3YXJkUHJvdG9jb2w6IHRydWUsXG4gICAgICBhbGxvd2VkUHJvdG9jb2xzOiBbJ3RjcCddXG4gICAgfVxuICB9O1xuICBpbml0RGlhbFBvbGljeUFwaURhdGEgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICB0eXBlOiBcIkRpYWxcIixcbiAgICBzZW1hbnRpYzogXCJBbnlPZlwiLFxuICAgIHNlcnZpY2VSb2xlczogW10sXG4gICAgaWRlbnRpdHlSb2xlczogW11cbiAgfTtcbiAgaW5pdEJpbmRQb2xpY3lBcGlEYXRhID0ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgdHlwZTogXCJCaW5kXCIsXG4gICAgc2VtYW50aWM6IFwiQW55T2ZcIixcbiAgICBzZXJ2aWNlUm9sZXM6IFtdLFxuICAgIGlkZW50aXR5Um9sZXM6IFtdXG4gIH07XG4gIHNlcnZpY2VBcGlEYXRhO1xuICBpbnRlcmNlcHRDb25maWdBcGlEYXRhO1xuICBob3N0Q29uZmlnQXBpRGF0YTtcbiAgZGlhbFBvbGljeUFwaURhdGE7XG4gIGJpbmRQb2xpY3lBcGlEYXRhO1xuICBkaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gIGRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBiaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gIGJpbmRQb2xpY3lSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBpZGVudGl0aWVzTmFtZUlkTWFwID0ge307XG4gIGlkZW50aXRpZXNJZE5hbWVNYXAgPSB7fTtcbiAgaW50ZXJjZXB0Q29uZmlnSWQ7XG4gIGhvc3RDb25maWdJZDtcbiAgc2VydmljZUlkO1xuICBzZGtPbmx5RGlhbCA9IGZhbHNlO1xuICBzZGtPbmx5QmluZCA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueTtcblxuICBpbnRlcmNlcHRJbmNyZW1lbnQgPSAtMTtcbiAgaG9zdEluY3JlbWVudCA9IC0xO1xuICBzZXJ2aWNlSW5jcmVtZW50ID0gLTE7XG4gIGRpYWxJbmNyZW1lbnQgPSAtMTtcbiAgYmluZEluY3JlbWVudCA9IC0xO1xuXG4gIHNlcnZpY2VEYXRhQ2hhbmdlID0gZmFsc2U7XG4gIGludGVyY2VwdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaG9zdERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgZGlhbERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgYmluZERhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgaWRlbnRpdGllc0luaXQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGZhbHNlKTtcbiAgZW50aXRpZXNJbml0ID0gZmFsc2U7XG5cbiAgbXVsdGlBY3Rpb25zID0gW107XG5cbiAgb3ZlcnJpZGUgZW50aXR5VHlwZSA9ICdzZXJ2aWNlcyc7XG5cbiAgQE91dHB1dCgpIGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHByb3RlY3RlZCBvdmVycmlkZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgIHB1YmxpYyBzdmM6IFNlcnZpY2VGb3JtU2VydmljZSxcbiAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIG92ZXJyaWRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICBASW5qZWN0KFNFUlZJQ0VfRVhURU5TSU9OX1NFUlZJQ0UpIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICBwcml2YXRlIGRpYWxvZ0Zvcm06IE1hdERpYWxvZyxcbiAgICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSBzZXJ2aWNlc1BhZ2VTZXJ2aWNlOiBTZXJ2aWNlc1BhZ2VTZXJ2aWNlLFxuICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgIGxvY2F0aW9uOiBMb2NhdGlvblxuICApIHtcbiAgICBzdXBlcihncm93bGVyU2VydmljZSwgZXh0U2VydmljZSwgeml0aVNlcnZpY2UsIHJvdXRlciwgcm91dGUsIGxvY2F0aW9uLCBzZXR0aW5nc1NlcnZpY2UpO1xuICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmb3JtRGF0YShkYXRhKSB7XG4gICAgaWYgKCFkYXRhPy5jb25maWdzKSB7XG4gICAgICBkYXRhLmNvbmZpZ3MgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zdmMuZm9ybURhdGEgPSBkYXRhO1xuICAgIGlmICghaXNFbXB0eShkYXRhPy5pZCkpIHtcbiAgICAgIHRoaXMuaW5pdEFzc29jaWF0ZWREYXRhKCk7XG4gICAgICBpZiAoZ2V0KHRoaXMuZm9ybURhdGEsICd0YWdzLnNlcnZpY2UtdHlwZScpID09PSAnc2ltcGxlJykge1xuICAgICAgICB0aGlzLm11bHRpQWN0aW9ucyA9IFtcbiAgICAgICAgICB7aWQ6ICdjb252ZXJ0LXRvLWFkdmFuY2VkJywgbGFiZWw6ICdDb252ZXJ0IHRvIEFkdmFuY2VkJywgaGlkZGVuOiBmYWxzZX1cbiAgICAgICAgXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tdWx0aUFjdGlvbnMgPSBbXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBmb3JtRGF0YSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN2Yz8uZm9ybURhdGE7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuY29udHJvbGxlckRvbWFpbiA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlPy5zZXR0aW5ncz8uc2VsZWN0ZWRFZGdlQ29udHJvbGxlcjtcbiAgICB0aGlzLnppdGlTZXNzaW9uSWQgPSB0aGlzLnNldHRpbmdzU2VydmljZT8uc2V0dGluZ3M/LnNlc3Npb24/LmlkO1xuICAgIHRoaXMuaW5pdEZvcm1EYXRhKCk7XG4gICAgdGhpcy5nZXRJZGVudGl0eU5hbWVkQXR0cmlidXRlcygpO1xuICB9XG5cbiAgaW5pdEZvcm1EYXRhKCkge1xuICAgIHRoaXMuc2VydmljZUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2VzYDtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3NgO1xuICAgIHRoaXMuaG9zdENvbmZpZ0FwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3NgO1xuICAgIHRoaXMuZGlhbFBvbGljeUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2UtcG9saWNpZXNgO1xuICAgIHRoaXMuYmluZFBvbGljeUFwaVVybCA9IGAke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2UtcG9saWNpZXNgO1xuICAgIHRoaXMuc2VydmljZUNsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmhvc3RDb25maWdDbGlDb21tYW5kID0gJyc7XG4gICAgdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZCA9ICcnO1xuICAgIHRoaXMuYmluZFBvbGljeUNsaUNvbW1hbmQgPSAnJztcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0lkID0gJyc7XG4gICAgdGhpcy5ob3N0Q29uZmlnSWQgPSAnJztcbiAgICB0aGlzLnNlcnZpY2VJZCA9ICcnO1xuICAgIHRoaXMuc2RrT25seURpYWwgPSBmYWxzZTtcbiAgICB0aGlzLnNka09ubHlCaW5kID0gZmFsc2U7XG4gICAgdGhpcy5pbnRlcmNlcHRQb3J0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdFNlcnZpY2VBcGlEYXRhKTtcbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEgPSBjbG9uZURlZXAodGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YSk7XG4gICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRIb3N0Q29uZmlnQXBpRGF0YSk7XG4gICAgdGhpcy5kaWFsUG9saWN5QXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXREaWFsUG9saWN5QXBpRGF0YSk7XG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmluaXRCaW5kUG9saWN5QXBpRGF0YSk7XG4gICAgdGhpcy5zZXJ2aWNlc1BhZ2VTZXJ2aWNlLmdldFNlcnZpY2VSb2xlQXR0cmlidXRlcygpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy5zZXJ2aWNlUm9sZUF0dHJpYnV0ZXMgPSByZXN1bHQuZGF0YTtcbiAgICB9KTtcbiAgICB0aGlzLnNlcnZpY2VzUGFnZVNlcnZpY2UuZ2V0SWRlbnRpdHlSb2xlQXR0cmlidXRlcygpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy5pZGVudGl0eVJvbGVBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBpbml0QXNzb2NpYXRlZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuZW50aXRpZXNJbml0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW50aXRpZXNJbml0ID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhID0gdGhpcy5zdmMuZm9ybURhdGE7XG4gICAgdGhpcy5pZGVudGl0aWVzSW5pdC5zdWJzY3JpYmUoKHZhbCkgPT4ge1xuICAgICAgaWYgKHZhbCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBjb25maWdzUHJvbWlzZSA9IHRoaXMuZ2V0QXNzb2NpYXRlZENvbmZpZ3MoKTtcbiAgICAgICAgY29uc3QgcG9saWNpZXNQcm9taXNlID0gdGhpcy5nZXRBc3NvY2FpdGVkUG9saWNpZXMoKTtcbiAgICAgICAgUHJvbWlzZS5hbGwoW2NvbmZpZ3NQcm9taXNlLCBwb2xpY2llc1Byb21pc2VdKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFJbml0ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmluaXRTZXJ2aWNlQXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLnNlcnZpY2VBcGlEYXRhKTtcbiAgICAgICAgICB0aGlzLmluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSk7XG4gICAgICAgICAgdGhpcy5pbml0SG9zdENvbmZpZ0FwaURhdGEgPSBjbG9uZURlZXAodGhpcy5ob3N0Q29uZmlnQXBpRGF0YSk7XG4gICAgICAgICAgdGhpcy5pbml0RGlhbFBvbGljeUFwaURhdGEgPSBjbG9uZURlZXAodGhpcy5kaWFsUG9saWN5QXBpRGF0YSk7XG4gICAgICAgICAgdGhpcy5pbml0QmluZFBvbGljeUFwaURhdGEgPSBjbG9uZURlZXAodGhpcy5iaW5kUG9saWN5QXBpRGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QXNzb2NpYXRlZENvbmZpZ3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlcycsIHRoaXMuZm9ybURhdGEuaWQsICdjb25maWdzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGFzc29jaWF0ZWRDb25maWdzID0gcmVzdWx0LmRhdGE7XG4gICAgICBhc3NvY2lhdGVkQ29uZmlncy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5jb25maWdUeXBlSWQgPT0gdGhpcy5pbml0SW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5jb25maWdUeXBlSWQpIHtcbiAgICAgICAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEgPSBjb25maWc7XG4gICAgICAgICAgY29uc3QgcG9ydFJhbmdlID0gdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlc1swXTtcbiAgICAgICAgICB0aGlzLmludGVyY2VwdFBvcnQgPSBwb3J0UmFuZ2U/LmhpZ2g7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmNvbmZpZ1R5cGVJZCA9PSB0aGlzLmluaXRIb3N0Q29uZmlnQXBpRGF0YS5jb25maWdUeXBlSWQpIHtcbiAgICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhID0gY29uZmlnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFzc29jYWl0ZWRQb2xpY2llcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2VzJywgdGhpcy5mb3JtRGF0YS5pZCwgJ3NlcnZpY2UtcG9saWNpZXMnKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcy5mb3JFYWNoKChwb2xpY3kpID0+IHtcbiAgICAgICAgaWYgKHBvbGljeS50eXBlPy50b0xvd2VyQ2FzZSgpID09ICdkaWFsJykge1xuICAgICAgICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEgPSBwb2xpY3k7XG4gICAgICAgICAgY29uc3Qgcm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBuYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBwb2xpY3kuaWRlbnRpdHlSb2xlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5wdXNoKGF0dHIuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgIG5hbWVkQXR0cmlidXRlcy5wdXNoKHRoaXMuaWRlbnRpdGllc0lkTmFtZU1hcFthdHRyLnNsaWNlKDEpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcztcbiAgICAgICAgICB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgIH0gZWxzZSBpZiAocG9saWN5LnR5cGU/LnRvTG93ZXJDYXNlKCkgPT0gJ2JpbmQnKSB7XG4gICAgICAgICAgY29uc3Qgcm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBuYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgICBwb2xpY3kuaWRlbnRpdHlSb2xlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0ci5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgICByb2xlQXR0cmlidXRlcy5wdXNoKGF0dHIuc2xpY2UoMSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgIG5hbWVkQXR0cmlidXRlcy5wdXNoKHRoaXMuaWRlbnRpdGllc0lkTmFtZU1hcFthdHRyLnNsaWNlKDEpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcztcbiAgICAgICAgICB0aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IHBvbGljeTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIGdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKGZpbHRlcj8pIHtcbiAgICBjb25zdCBwYWdpbmcgPSB7XG4gICAgICBzZWFyY2hPbjogJ25hbWUnLFxuICAgICAgZmlsdGVyOiBmaWx0ZXIgfHwgJycsXG4gICAgICB0b3RhbDogMzAsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc29ydDogJ25hbWUnLFxuICAgICAgb3JkZXI6ICdhc2MnXG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgaWYgKCFpc0VtcHR5KGZpbHRlcikpIHtcbiAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgIGZpbHRlck5hbWU6ICduYW1lJyxcbiAgICAgICAgY29sdW1uSWQ6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGZpbHRlciB8fCAnJScsXG4gICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2lkZW50aXRpZXMnLCBwYWdpbmcsIGZpbHRlcnMpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGEubWFwKChpZGVudGl0eSkgPT4ge1xuICAgICAgICB0aGlzLmlkZW50aXRpZXNOYW1lSWRNYXBbaWRlbnRpdHkubmFtZV0gPSBpZGVudGl0eS5pZDtcbiAgICAgICAgdGhpcy5pZGVudGl0aWVzSWROYW1lTWFwW2lkZW50aXR5LmlkXSA9IGlkZW50aXR5Lm5hbWU7XG4gICAgICAgIHRoaXMuaWRlbnRpdGllc0luaXQubmV4dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5Lm5hbWU7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgfSk7XG4gIH1cblxuICBtdWx0aUFjdGlvblJlcXVlc3RlZChhY3Rpb24pIHtcbiAgICBzd2l0Y2goYWN0aW9uLmlkKSB7XG4gICAgICBjYXNlICdzYXZlJzpcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29udmVydC10by1hZHZhbmNlZCc6XG4gICAgICAgIHRoaXMuY29udmVydFRvQWR2YW5jZWQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGVhZGVyQWN0aW9uUmVxdWVzdGVkKGFjdGlvbikge1xuICAgIHN3aXRjaChhY3Rpb24ubmFtZSkge1xuICAgICAgY2FzZSAnc2F2ZSc6XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0KSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXI/Lm5hdmlnYXRlQnlVcmwoVVJMUy5aSVRJX1NFUlZJQ0VTKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvdXRlcj8ubmF2aWdhdGVCeVVybChVUkxTLlpJVElfU0VSVklDRV9TRUxFQ1QpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9nZ2xlLXZpZXcnOlxuICAgICAgICB0aGlzLmZvcm1WaWV3ID0gYWN0aW9uLmRhdGE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNka09ubHlEaWFsKCkge1xuICAgIHRoaXMuc2RrT25seURpYWwgPSAhdGhpcy5zZGtPbmx5RGlhbDtcbiAgfVxuXG4gIHRvZ2dsZVNka09ubHlCaW5kKCkge1xuICAgIHRoaXMuc2RrT25seUJpbmQgPSAhdGhpcy5zZGtPbmx5QmluZDtcbiAgfVxuXG4gIHNlcnZpY2VOYW1lQ2hhbmdlZChldmVudCkge1xuICAgIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1pbnRlcmNlcHQtY29uZmlnYFxuICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEubmFtZSA9IGAke3RoaXMuc2VydmljZUFwaURhdGEubmFtZX0taG9zdC1jb25maWdgXG4gICAgdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lID0gYCR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfS1kaWFsLXBvbGljeWBcbiAgICB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUgPSBgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9LWJpbmQtcG9saWN5YFxuICB9XG5cbiAgaW50ZXJjZXB0UG9ydENoYW5nZWQoJGV2ZW50KSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuaW50ZXJjZXB0UG9ydCkgfHwgaXNOYU4odGhpcy5pbnRlcmNlcHRQb3J0KSkge1xuICAgICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEucG9ydFJhbmdlcyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzWzBdID0ge1xuICAgICAgaGlnaDogdGhpcy5pbnRlcmNlcHRQb3J0LFxuICAgICAgbG93OiB0aGlzLmludGVyY2VwdFBvcnRcbiAgICB9O1xuICB9XG5cbiAgaG9zdFByb3RvY29sc0NoYW5nZWQoJGV2ZW50KSB7XG4gICAgc3dpdGNoICh0aGlzLmhvc3RQcm90b2NvbCkge1xuICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YS5hbGxvd2VkUHJvdG9jb2xzID0gWyd0Y3AnLCAndWRwJ11cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEuYWxsb3dlZFByb3RvY29scyA9IFt0aGlzLmhvc3RQcm90b2NvbF07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUocmVmcmVzaD8pIHtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWUgPSB0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWUudHJpbSgpO1xuICAgIGlmICghdGhpcy52YWxpZGF0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmV3U2VydmljZSA9IGlzRW1wdHkodGhpcy5zZXJ2aWNlQXBpRGF0YT8uaWQpO1xuICAgIGlmIChpc05ld1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGhhc0NvbmZsaWN0czogYW55ID0gYXdhaXQgdGhpcy5jaGVja05hbWVDb25mbGljdHMoKTtcbiAgICAgIGlmIChoYXNDb25mbGljdHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5zaG93U3VtbWFyeSgpO1xuICAgIHRoaXMuc2VydmljZUFwaURhdGEuY29uZmlncyA9IFtdO1xuXG4gICAgY29uc3QgaW50ZXJjZXB0Q2ZnUHJvbWlzZSA9IGF3YWl0IHRoaXMuc2F2ZUludGVyY2VwdENvbmZpZyhzdW1tYXJ5RGF0YSk7XG4gICAgY29uc3QgaG9zdENmZ1Byb21pc2UgPSBhd2FpdCB0aGlzLnNhdmVIb3N0Q29uZmlnKHN1bW1hcnlEYXRhKTtcbiAgICBjb25zdCBzZXJ2aWNlUHJvbWlzZSA9IGF3YWl0IHRoaXMuc2F2ZVNlcnZpY2Uoc3VtbWFyeURhdGEpO1xuICAgIGNvbnN0IGRpYWxQb2xpY3lQcm9taXNlID0gYXdhaXQgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnRGlhbCcpO1xuICAgIGNvbnN0IGJpbmRQb2xpY3lQcm9taXNlID0gYXdhaXQgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnQmluZCcpO1xuXG4gICAgc3VtbWFyeURhdGE/LmZvckVhY2goKGVudGl0eVR5cGUpID0+IHtcbiAgICAgIGVudGl0eVR5cGUuZW50aXRpZXM/LmZvckVhY2goKGVudGl0eSkgPT4ge1xuICAgICAgICBpZiAoZW50aXR5LnR5cGUgPT09ICdzZXJ2aWNlcycpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuc2VydmljZUNsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldFNlcnZpY2VzQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnY29uZmlncycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdpbnRlcmNlcHQnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldEludGVyY2VwdENvbmZpZ0FwaVJlcXVlc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkudHlwZSA9PT0gJ2NvbmZpZ3MnICYmIGVudGl0eS5zdWJ0eXBlID09PSAnaG9zdCcpIHtcbiAgICAgICAgICBlbnRpdHkuY2xpQ29tbWFuZCA9IHRoaXMuaG9zdENvbmZpZ0NsaUNvbW1hbmQ7XG4gICAgICAgICAgZW50aXR5LmFwaVJlcXVlc3QgPSB0aGlzLmdldEhvc3RDb25maWdBcGlSZXF1ZXN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiBlbnRpdHkuc3VidHlwZSA9PT0gJ2RpYWwnKSB7XG4gICAgICAgICAgZW50aXR5LmNsaUNvbW1hbmQgPSB0aGlzLmRpYWxQb2xpY3lDbGlDb21tYW5kO1xuICAgICAgICAgIGVudGl0eS5hcGlSZXF1ZXN0ID0gdGhpcy5nZXREaWFsQXBpUmVxdWVzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS50eXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgZW50aXR5LnN1YnR5cGUgPT09ICdiaW5kJykge1xuICAgICAgICAgIGVudGl0eS5jbGlDb21tYW5kID0gdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZDtcbiAgICAgICAgICBlbnRpdHkuYXBpUmVxdWVzdCA9IHRoaXMuZ2V0QmluZEFwaVJlcXVlc3QoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93U3VtbWFyeSgpIHtcbiAgICBjb25zdCBpbnRlcmNlcHRTdW1tYXJ5ID0ge1xuICAgICAgbmFtZTogdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLm5hbWUsXG4gICAgICB0eXBlOiAnY29uZmlncycsXG4gICAgICBzdWJ0eXBlOiAnaW50ZXJjZXB0JyxcbiAgICAgIGFwaURhdGE6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSxcbiAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCxcbiAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgYXBpVXJsOiB0aGlzLmludGVyY2VwdENvbmZpZ0FwaVVybCxcbiAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgcmV0cnk6IHRoaXMuc2F2ZUludGVyY2VwdENvbmZpZy5iaW5kKHRoaXMpLFxuICAgIH07XG4gICAgY29uc3QgaG9zdFN1bW1hcnkgPSB7XG4gICAgICBuYW1lOiB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWUsXG4gICAgICB0eXBlOiAnY29uZmlncycsXG4gICAgICBzdWJ0eXBlOiAnaG9zdCcsXG4gICAgICBhcGlEYXRhOiB0aGlzLmhvc3RDb25maWdBcGlEYXRhLFxuICAgICAgY2xpQ29tbWFuZDogdGhpcy5ob3N0Q29uZmlnQ2xpQ29tbWFuZCxcbiAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgYXBpVXJsOiB0aGlzLmhvc3RDb25maWdBcGlVcmwsXG4gICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgIHJldHJ5OiB0aGlzLnNhdmVIb3N0Q29uZmlnLmJpbmQodGhpcylcbiAgICB9O1xuICAgIGNvbnN0IHN1bW1hcnlEYXRhOiBhbnkgPSBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnU2VydmljZXMnLFxuICAgICAgICBlbnRpdGllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc2VydmljZUFwaURhdGEubmFtZSxcbiAgICAgICAgICAgIHR5cGU6ICdzZXJ2aWNlcycsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLnNlcnZpY2VBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5zZXJ2aWNlQ2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLnNlcnZpY2VBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiB0aGlzLnNhdmVTZXJ2aWNlLmJpbmQodGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnU2VydmljZSBQb2xpY2llcycsXG4gICAgICAgIGVudGl0aWVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3NlcnZpY2UtcG9saWNpZXMnLFxuICAgICAgICAgICAgc3VidHlwZTogJ2RpYWwnLFxuICAgICAgICAgICAgYXBpRGF0YTogdGhpcy5kaWFsUG9saWN5QXBpRGF0YSxcbiAgICAgICAgICAgIGNsaUNvbW1hbmQ6IHRoaXMuZGlhbFBvbGljeUNsaUNvbW1hbmQsXG4gICAgICAgICAgICBhcGlSZXF1ZXN0OiAnJyxcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5kaWFsUG9saWN5QXBpVXJsLFxuICAgICAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgICAgICByZXRyeTogKHN1bW1hcnlEYXRhKSA9PiB7IHRoaXMuc2F2ZVBvbGljeShzdW1tYXJ5RGF0YSwgJ0RpYWwnKSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZS1wb2xpY2llcycsXG4gICAgICAgICAgICBzdWJ0eXBlOiAnYmluZCcsXG4gICAgICAgICAgICBhcGlEYXRhOiB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhLFxuICAgICAgICAgICAgY2xpQ29tbWFuZDogdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZCxcbiAgICAgICAgICAgIGFwaVJlcXVlc3Q6ICcnLFxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLmJpbmRQb2xpY3lBcGlVcmwsXG4gICAgICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIHJldHJ5OiAoc3VtbWFyeURhdGEpID0+IHsgdGhpcy5zYXZlUG9saWN5KHN1bW1hcnlEYXRhLCAnQmluZCcpIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdO1xuICAgIGlmICghdGhpcy5zZGtPbmx5RGlhbCAmJiAhdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2ludGVyY2VwdFN1bW1hcnksIGhvc3RTdW1tYXJ5XVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgc3VtbWFyeURhdGEuc3BsaWNlKDAsMCx7XG4gICAgICAgIHRpdGxlOiAnQ29uZmlndXJhdGlvbnMnLFxuICAgICAgICBlbnRpdGllczogW2ludGVyY2VwdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICBzdW1tYXJ5RGF0YS5zcGxpY2UoMCwwLHtcbiAgICAgICAgdGl0bGU6ICdDb25maWd1cmF0aW9ucycsXG4gICAgICAgIGVudGl0aWVzOiBbaG9zdFN1bW1hcnldXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHN1bW1hcnlEYXRhOiBzdW1tYXJ5RGF0YSxcbiAgICAgIGlzRWRpdDogdGhpcy5pc0VkaXRcbiAgICB9O1xuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dGb3JtLm9wZW4oQ3JlYXRpb25TdW1tYXJ5RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnbmV3Jykge1xuICAgICAgICB0aGlzLmluaXRGb3JtRGF0YSgpO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09ICdjYW5jZWwnKSB7XG4gICAgICAgIC8vLyBEbyBub3RoaW5nLCBzdGF5IG9uIHBhZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5pdERhdGFNb2RlbHMoKTtcbiAgICAgICAgdGhpcy5fZGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvdXRlcj8ubmF2aWdhdGVCeVVybChgJHt0aGlzLmJhc2VQYXRofWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzdW1tYXJ5RGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrTmFtZUNvbmZsaWN0cygpIHtcbiAgICBjb25zdCBmaWx0ZXI6IEZpbHRlck9iaiA9IHtcbiAgICAgIGZpbHRlck5hbWU6ICduYW1lJyxcbiAgICAgIGNvbHVtbklkOiAnbmFtZScsXG4gICAgICB2YWx1ZTogdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgdHlwZTogJ1RFWFRJTlBVVCcsXG4gICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgdmVyYjogJz0nXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0czogYW55ID0ge1xuICAgICAgc2VydmljZUNvbmZsaWN0OiBmYWxzZSxcbiAgICAgIGludGVyY2VwdENvbmZsaWN0OiBmYWxzZSxcbiAgICAgIGhvc3RDb25mbGljdDogZmFsc2UsXG4gICAgICBkaWFsUG9saWN5Q29uZmxpY3Q6IGZhbHNlLFxuICAgICAgYmluZFBvbGljeUNvbmZsaWN0OiBmYWxzZSxcbiAgICAgIG5hbWVzOiBbXVxuICAgIH07XG4gICAgY29uc3QgcGFnaW5nID0gY2xvbmVEZWVwKHRoaXMueml0aVNlcnZpY2UuREVGQVVMVF9QQUdJTkcpO1xuICAgIHBhZ2luZy5ub1NlYXJjaCA9IGZhbHNlO1xuICAgIGNvbnN0IHNlcnZpY2VQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ3NlcnZpY2VzJywgcGFnaW5nLCBbZmlsdGVyXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5zZXJ2aWNlQ29uZmxpY3QgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLm5hbWVzLnB1c2godGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXIudmFsdWUgPSB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEubmFtZTtcbiAgICBjb25zdCBpbnRlcmNlcHRQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ2NvbmZpZ3MnLCBwYWdpbmcsIFtmaWx0ZXJdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmludGVyY2VwdENvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5uYW1lcy5wdXNoKHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXIudmFsdWUgPSB0aGlzLmhvc3RDb25maWdBcGlEYXRhLm5hbWU7XG4gICAgY29uc3QgaG9zdFByb20gPSB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY29uZmlncycsIHBhZ2luZywgW2ZpbHRlcl0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMuaG9zdENvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5uYW1lcy5wdXNoKHRoaXMuaG9zdENvbmZpZ0FwaURhdGEubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZmlsdGVyLnZhbHVlID0gdGhpcy5kaWFsUG9saWN5QXBpRGF0YS5uYW1lO1xuICAgIGNvbnN0IGRpYWxQcm9tID0gdGhpcy56aXRpU2VydmljZS5nZXQoJ3NlcnZpY2UtcG9saWNpZXMnLCBwYWdpbmcsIFtmaWx0ZXJdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzLmRpYWxQb2xpY3lDb25mbGljdCA9IHRydWU7XG4gICAgICAgIHJlc3VsdHMubmFtZXMucHVzaCh0aGlzLmRpYWxQb2xpY3lBcGlEYXRhLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZpbHRlci52YWx1ZSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZTtcbiAgICBjb25zdCBiaW5kUHJvbSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlLXBvbGljaWVzJywgcGFnaW5nLCBbZmlsdGVyXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0cy5iaW5kUG9saWN5Q29uZmxpY3QgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLm5hbWVzLnB1c2godGhpcy5iaW5kUG9saWN5QXBpRGF0YS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbc2VydmljZVByb20sIGludGVyY2VwdFByb20sIGhvc3RQcm9tLCBkaWFsUHJvbSwgYmluZFByb21dKS50aGVuKCgpID0+IHtcbiAgICAgIGxldCBoYXNDb25mbGljdCA9IHJlc3VsdHMubmFtZXMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb25mbGljdCkge1xuICAgICAgICB0aGlzLmVycm9ycy5uYW1lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Q29uZmxpY3RXYXJuaW5nKHJlc3VsdHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0NvbmZsaWN0O1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd0NvbmZsaWN0V2FybmluZyhjb25mbGljdERhdGEpIHtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhcHBlbmRJZDogJ1NpbXBsZVNlcnZpY2VDb25mbGljdHMnLFxuICAgICAgdGl0bGU6ICdOYW1lIENvbmZsaWN0JyxcbiAgICAgIG1lc3NhZ2U6IGBUaGUgbmFtZSB5b3UgaGF2ZSBlbnRlcmVkIGhhcyBjb25mbGljdHMgZm9yIHRoZSBmb2xsb3dpbmcgZW50aXRpZXNgLFxuICAgICAgYnVsbGV0TGlzdDogY29uZmxpY3REYXRhLm5hbWVzLFxuICAgICAgc3VibWVzc2FnZTogYFBsZWFzZSB1cGRhdGUgdGhlIGVudGVyZWQgbmFtZSBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICBjb25maXJtTGFiZWw6ICdSZXR1cm4nLFxuICAgICAgc2hvd0NhbmNlbExpbms6IGZhbHNlLFxuICAgICAgaW1hZ2VVcmw6ICcuLi8uLi9hc3NldHMvc3Zncy9Hcm93bF9FcnJvci5zdmcnXG4gICAgfTtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nRm9ybS5vcGVuKENvbmZpcm1Db21wb25lbnQsIHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCgpID0+IHtcbiAgICAgIHRoaXMubmFtZUZpZWxkSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0pXG4gIH1cblxuICBhc3luYyBzYXZlSW50ZXJjZXB0Q29uZmlnKHN1bW1hcnlEYXRhKSB7XG4gICAgY29uc3QgaXNOZXdDb25maWcgPSBpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YT8uaWQpO1xuXG4gICAgLy8gQ29uZGl0aW9uYWwgRGVsZXRpb24gKElkZW50aWNhbCBMb2dpYylcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiAhaXNOZXdDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmRlbGV0ZSgnY29uZmlncycsIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5pZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNka09ubHlEaWFsICYmIGlzTmV3Q29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXNlIHRoZSBIZWxwZXIgRnVuY3Rpb25cbiAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgdGhpcy5zYXZlQ29uZmlnKFxuICAgICAgICB0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEsXG4gICAgICAgICdpbnRlcmNlcHRJbmNyZW1lbnQnLFxuICAgICAgICAnaW50ZXJjZXB0Q29uZmlnSWQnLFxuICAgICAgICAnaW50ZXJjZXB0Q29uZmlnQ2xpQ29tbWFuZCdcbiAgICApO1xuXG4gICAgLy8gQXBwbHkgZmluYWwgc3RhdHVzIGxvZ2ljXG4gICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uc3RhdHVzID0gc3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUhvc3RDb25maWcoc3VtbWFyeURhdGEpIHtcbiAgICBjb25zdCBpc05ld0NvbmZpZyA9IGlzRW1wdHkodGhpcy5ob3N0Q29uZmlnQXBpRGF0YT8uaWQpO1xuXG4gICAgLy8gQ29uZGl0aW9uYWwgRGVsZXRpb24gKElkZW50aWNhbCBMb2dpYylcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiAhaXNOZXdDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmRlbGV0ZSgnY29uZmlncycsIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuaWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZGtPbmx5RGlhbCAmJiBpc05ld0NvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgSGVscGVyIEZ1bmN0aW9uXG4gICAgY29uc3QgeyBzdGF0dXMsIGNvbmZpZ0FwaURhdGEgfSA9IGF3YWl0IHRoaXMuc2F2ZUNvbmZpZyhcbiAgICAgICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YSxcbiAgICAgICAgJ2hvc3RJbmNyZW1lbnQnLFxuICAgICAgICAnaG9zdENvbmZpZ0lkJyxcbiAgICAgICAgJ2hvc3RDb25maWdDbGlDb21tYW5kJ1xuICAgICk7XG5cbiAgICAvLyBBcHBseSBmaW5hbCBzdGF0dXMgbG9naWMgKHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGludGVyY2VwdClcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uc3RhdHVzID0gc3RhdHVzO1xuICAgICAgc3VtbWFyeURhdGFbMF0uZW50aXRpZXNbMF0uYXBpRGF0YSA9IGNvbmZpZ0FwaURhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzFdLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgIHN1bW1hcnlEYXRhWzBdLmVudGl0aWVzWzBdLmFwaURhdGEgPSBjb25maWdBcGlEYXRhO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVDb25maWcoXG4gICAgICBjb25maWdBcGlEYXRhOiBhbnksICAgICAgLy8gZS5nLiwgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhXG4gICAgICBpbmNyZW1lbnRlcjogc3RyaW5nLCAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGluY3JlbWVudGVyIHByb3BlcnR5ICgnaW50ZXJjZXB0SW5jcmVtZW50JyBvciAnaG9zdEluY3JlbWVudCcpXG4gICAgICBjb25maWdJZFByb3A6IHN0cmluZywgICAgLy8gVGhlIG5hbWUgb2YgdGhlIElEIHByb3BlcnR5ICgnaW50ZXJjZXB0Q29uZmlnSWQnIG9yICdob3N0Q29uZmlnSWQnKVxuICAgICAgY2xpQ29tbWFuZFByb3A6IHN0cmluZyAgIC8vIFRoZSBuYW1lIG9mIHRoZSBDTEkgY29tbWFuZCBwcm9wZXJ0eSAoJ2ludGVyY2VwdENvbmZpZ0NsaUNvbW1hbmQnIG9yICdob3N0Q29uZmlnQ2xpQ29tbWFuZCcpXG4gICk6IFByb21pc2U8YW55PiB7XG5cbiAgICBjb25zdCBpc05ld0NvbmZpZyA9IGlzRW1wdHkoY29uZmlnQXBpRGF0YT8uaWQpO1xuICAgIGNvbnN0IGluY3JlbWVudFZhbHVlID0gdGhpc1tpbmNyZW1lbnRlcl0gYXMgbnVtYmVyOyAvLyBHZXQgY3VycmVudCBpbmNyZW1lbnQgdmFsdWVcbiAgICBsZXQgc3RhdHVzOiBzdHJpbmc7XG4gICAgbGV0IGNvbmZpZ1Jlc3VsdDogYW55O1xuXG4gICAgaWYgKGlzTmV3Q29uZmlnKSB7XG4gICAgICB0aGlzW2luY3JlbWVudGVyXSA9IGluY3JlbWVudFZhbHVlICsgMTsgLy8gSW5jcmVtZW50IGZvciBuYW1pbmdcblxuICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgIGlmICh0aGlzW2luY3JlbWVudGVyXSA+IDApIHtcbiAgICAgICAgcG9zdEZpeCA9ICdfJyArIHRoaXNbaW5jcmVtZW50ZXJdO1xuICAgICAgfVxuXG4gICAgICBjb25maWdBcGlEYXRhLm5hbWUgPSBjb25maWdBcGlEYXRhLm5hbWUgKyBwb3N0Rml4O1xuXG4gICAgICBjb25maWdSZXN1bHQgPSBhd2FpdCB0aGlzLnNhdmVFbnRpdHkoJ2NvbmZpZ3MnLCBjb25maWdBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiByZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWdSZXN1bHQgPSBhd2FpdCB0aGlzLnVwZGF0ZUVudGl0eSgnY29uZmlncycsIGNvbmZpZ0FwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHJlc3VsdCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ1Jlc3VsdC5lcnJvcikge1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2V0IHRoZSBjb25maWcgSUQgcHJvcGVydHkgZHluYW1pY2FsbHkgKGUuZy4sIHRoaXMuaW50ZXJjZXB0Q29uZmlnSWQpXG4gICAgICB0aGlzW2NvbmZpZ0lkUHJvcF0gPSBjb25maWdBcGlEYXRhLmlkIHx8IGNvbmZpZ1Jlc3VsdC5pZCB8fCBjb25maWdSZXN1bHQuZGF0YS5pZDtcblxuICAgICAgLy8gQWRkIHRoZSBuZXcgY29uZmlnIElEIHRvIHNlcnZpY2VBcGlEYXRhIChhc3N1bWluZyBzZXJ2aWNlQXBpRGF0YSBpcyBhY2Nlc3NpYmxlIHZpYSAndGhpcycpXG4gICAgICB0aGlzLnNlcnZpY2VBcGlEYXRhLmNvbmZpZ3MucHVzaCh0aGlzW2NvbmZpZ0lkUHJvcF0pO1xuXG4gICAgICAvLyBTZXQgdGhlIENMSSBjb21tYW5kIGR5bmFtaWNhbGx5XG4gICAgICB0aGlzW2NsaUNvbW1hbmRQcm9wXSA9IGB6aXRpIGVkZ2UgY3JlYXRlIGNvbmZpZyAnJHtjb25maWdBcGlEYXRhLm5hbWV9JyAnJHtjb25maWdBcGlEYXRhLmNvbmZpZ1R5cGVJZH0nICcke0pTT04uc3RyaW5naWZ5KGNvbmZpZ0FwaURhdGEuZGF0YSl9J2A7XG5cbiAgICAgIHN0YXR1cyA9ICdkb25lJztcbiAgICAgIHRoaXNbaW5jcmVtZW50ZXJdID0gLTE7IC8vIFJlc2V0IGluY3JlbWVudGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhdHVzLCBjb25maWdSZXN1bHQsIGNvbmZpZ0FwaURhdGEgfTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXJ2aWNlKHN1bW1hcnlEYXRhKSB7XG4gICAgY29uc3QgaXNOZXdTZXJ2aWNlID0gaXNFbXB0eSh0aGlzLnNlcnZpY2VBcGlEYXRhPy5pZCk7XG5cbiAgICBsZXQgc2VydmljZVJlc3VsdDtcbiAgICBpZiAoaXNOZXdTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNlcnZpY2VJbmNyZW1lbnQrKztcbiAgICAgIGxldCBwb3N0Rml4ID0gJyc7XG4gICAgICBpZiAodGhpcy5zZXJ2aWNlSW5jcmVtZW50ID4gMCkge1xuICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5zZXJ2aWNlSW5jcmVtZW50O1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lID0gdGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lICsgcG9zdEZpeDtcbiAgICAgIHNldCh0aGlzLnNlcnZpY2VBcGlEYXRhLCAndGFncy5zZXJ2aWNlLXR5cGUnLCAnc2ltcGxlJyk7XG4gICAgICBzZXJ2aWNlUmVzdWx0ID0gYXdhaXQgdGhpcy5zYXZlRW50aXR5KCdzZXJ2aWNlcycsIHRoaXMuc2VydmljZUFwaURhdGEpLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2aWNlUmVzdWx0ID0gYXdhaXQgdGhpcy51cGRhdGVFbnRpdHkoJ3NlcnZpY2VzJywgdGhpcy5zZXJ2aWNlQXBpRGF0YSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHNlcnZpY2VTdGF0dXM7XG4gICAgaWYgKHNlcnZpY2VSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHNlcnZpY2VTdGF0dXMgPSAnZXJyb3InO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2VJZCA9IHRoaXMuc2VydmljZUFwaURhdGEuaWQgPyB0aGlzLnNlcnZpY2VBcGlEYXRhLmlkIDogKHNlcnZpY2VSZXN1bHQuaWQgPyBzZXJ2aWNlUmVzdWx0LmlkIDogc2VydmljZVJlc3VsdC5kYXRhLmlkKTtcbiAgICAgIHNlcnZpY2VTdGF0dXMgPSAnZG9uZSc7XG4gICAgICBsZXQgY2xpQ29uZmlnSWRzID0gJyc7XG4gICAgICBpZiAoIXRoaXMuc2RrT25seURpYWwgJiYgIXRoaXMuc2RrT25seUJpbmQpIHtcbiAgICAgICAgY2xpQ29uZmlnSWRzID0gYC0tY29uZmlncyAnJHt0aGlzLmludGVyY2VwdENvbmZpZ0lkfSwke3RoaXMuaG9zdENvbmZpZ0lkfSdgO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5zZGtPbmx5QmluZCAmJiB0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICAgIGNsaUNvbmZpZ0lkcyA9IGAtLWNvbmZpZ3MgJyR7dGhpcy5pbnRlcmNlcHRDb25maWdJZH0nYDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZGtPbmx5QmluZCAmJiAhdGhpcy5zZGtPbmx5QmluZCkge1xuICAgICAgICBjbGlDb25maWdJZHMgPSBgLS1jb25maWdzICcke3RoaXMuaW50ZXJjZXB0Q29uZmlnSWR9J2A7XG4gICAgICB9XG4gICAgICB0aGlzLnNlcnZpY2VDbGlDb21tYW5kID0gYHppdGkgZWRnZSBjcmVhdGUgc2VydmljZSAnJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9JyAke2NsaUNvbmZpZ0lkc31gXG4gICAgICB0aGlzLnNlcnZpY2VJbmNyZW1lbnQgPSAtMTtcbiAgICB9XG4gICAgY29uc3Qgc3VtbWFyeUluZGV4ID0gKHRoaXMuc2RrT25seURpYWwgJiYgdGhpcy5zZGtPbmx5QmluZCkgPyAwIDogMTtcbiAgICBzdW1tYXJ5RGF0YVtzdW1tYXJ5SW5kZXhdLmVudGl0aWVzWzBdLnN0YXR1cyA9IHNlcnZpY2VTdGF0dXM7XG4gIH1cblxuICBhc3luYyBzYXZlUG9saWN5KHN1bW1hcnlEYXRhLCB0eXBlID0gJ0RpYWwnKSB7XG4gICAgY29uc3QgaXNOZXdQb2xpY3kgPSBpc0VtcHR5KHRoaXMuc2VydmljZUFwaURhdGE/LmlkKTtcblxuICAgIGxldCBwb2xpY3lBcGlEYXRhLCBwb2xpY3lSZXN1bHQsIHJvbGVBdHRyaWJ1dGVzLCBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgbGV0IGNsaVJvbGVzID0gJyc7XG4gICAgbGV0IHN0YXR1cyA9ICcnO1xuICAgIGlmIChpc05ld1BvbGljeSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgICB0aGlzLmRpYWxJbmNyZW1lbnQrKztcbiAgICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuZGlhbEluY3JlbWVudCA+IDApIHtcbiAgICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5kaWFsSW5jcmVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSA9IHRoaXMuZGlhbFBvbGljeUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgICAgIHBvbGljeUFwaURhdGEgPSB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhO1xuICAgICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuZGlhbFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgICBuYW1lZEF0dHJpYnV0ZXMgPSB0aGlzLmRpYWxQb2xpY3lOYW1lZEF0dHJpYnV0ZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJpbmRJbmNyZW1lbnQrKztcbiAgICAgICAgbGV0IHBvc3RGaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMuYmluZEluY3JlbWVudCA+IDApIHtcbiAgICAgICAgICBwb3N0Rml4ID0gJ18nICsgdGhpcy5iaW5kSW5jcmVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGEubmFtZSArIHBvc3RGaXg7XG4gICAgICAgIHBvbGljeUFwaURhdGEgPSB0aGlzLmJpbmRQb2xpY3lBcGlEYXRhO1xuICAgICAgICByb2xlQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeVJvbGVBdHRyaWJ1dGVzO1xuICAgICAgICBuYW1lZEF0dHJpYnV0ZXMgPSB0aGlzLmJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgICBwb2xpY3lBcGlEYXRhLnNlcnZpY2VSb2xlcyA9IFtgQCR7dGhpcy5zZXJ2aWNlSWR9YF07XG4gICAgICBwb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMgPSBuYW1lZEF0dHJpYnV0ZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGNsaVJvbGVzICs9ICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXSArICcsJztcbiAgICAgICAgcmV0dXJuICdAJyArIHRoaXMuaWRlbnRpdGllc05hbWVJZE1hcFtuYW1lXTtcbiAgICAgIH0pO1xuICAgICAgcG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzID0gWy4uLnBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcywgLi4ucm9sZUF0dHJpYnV0ZXMubWFwKChyb2xlKSA9PiB7XG4gICAgICAgIGNsaVJvbGVzICs9ICcjJyArIHJvbGUgKyAnLCc7XG4gICAgICAgIHJldHVybiAnIycgKyByb2xlO1xuICAgICAgfSldO1xuICAgICAgY2xpUm9sZXMgPSBjbGlSb2xlcy5zbGljZSgwLCAtMSk7XG4gICAgICBwb2xpY3lSZXN1bHQgPSBhd2FpdCB0aGlzLnNhdmVFbnRpdHkoJ3NlcnZpY2UtcG9saWNpZXMnLCBwb2xpY3lBcGlEYXRhKS5jYXRjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgICBwb2xpY3lBcGlEYXRhID0gdGhpcy5kaWFsUG9saWN5QXBpRGF0YTtcbiAgICAgICAgcm9sZUF0dHJpYnV0ZXMgPSB0aGlzLmRpYWxQb2xpY3lSb2xlQXR0cmlidXRlcztcbiAgICAgICAgbmFtZWRBdHRyaWJ1dGVzID0gdGhpcy5kaWFsUG9saWN5TmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9saWN5QXBpRGF0YSA9IHRoaXMuYmluZFBvbGljeUFwaURhdGE7XG4gICAgICAgIHJvbGVBdHRyaWJ1dGVzID0gdGhpcy5iaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXM7XG4gICAgICAgIG5hbWVkQXR0cmlidXRlcyA9IHRoaXMuYmluZFBvbGljeU5hbWVkQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIHBvbGljeUFwaURhdGEuc2VydmljZVJvbGVzID0gW2BAJHt0aGlzLnNlcnZpY2VJZH1gXTtcbiAgICAgIHBvbGljeUFwaURhdGEuaWRlbnRpdHlSb2xlcyA9IG5hbWVkQXR0cmlidXRlcy5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgY2xpUm9sZXMgKz0gJ0AnICsgdGhpcy5pZGVudGl0aWVzTmFtZUlkTWFwW25hbWVdICsgJywnO1xuICAgICAgICByZXR1cm4gJ0AnICsgdGhpcy5pZGVudGl0aWVzTmFtZUlkTWFwW25hbWVdO1xuICAgICAgfSk7XG4gICAgICBwb2xpY3lBcGlEYXRhLmlkZW50aXR5Um9sZXMgPSBbLi4ucG9saWN5QXBpRGF0YS5pZGVudGl0eVJvbGVzLCAuLi5yb2xlQXR0cmlidXRlcy5tYXAoKHJvbGUpID0+IHtcbiAgICAgICAgY2xpUm9sZXMgKz0gJyMnICsgcm9sZSArICcsJztcbiAgICAgICAgcmV0dXJuICcjJyArIHJvbGU7XG4gICAgICB9KV07XG4gICAgICBjbGlSb2xlcyA9IGNsaVJvbGVzLnNsaWNlKDAsIC0xKTtcbiAgICAgIHBvbGljeVJlc3VsdCA9IGF3YWl0IHRoaXMudXBkYXRlRW50aXR5KCdzZXJ2aWNlLXBvbGljaWVzJywgcG9saWN5QXBpRGF0YSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBvbGljeVJlc3VsdC5lcnJvcikge1xuICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdHVzID0gJ2RvbmUnO1xuICAgIH1cbiAgICBjb25zdCBzdW1tYXJ5SW5kZXggPSAodGhpcy5zZGtPbmx5RGlhbCAmJiB0aGlzLnNka09ubHlCaW5kKSA/IDEgOiAyO1xuICAgIGNvbnN0IGVudGl0eUluZGV4ID0gdHlwZSA9PT0gJ0RpYWwnID8gMCA6IDE7XG4gICAgc3VtbWFyeURhdGFbc3VtbWFyeUluZGV4XS5lbnRpdGllc1tlbnRpdHlJbmRleF0uc3RhdHVzID0gc3RhdHVzO1xuICAgIGNvbnN0IGNsaUNvbW1hbmQgPSBgeml0aSBlZGdlIGNyZWF0ZSBzZXJ2aWNlLXBvbGljeSAnJHtwb2xpY3lBcGlEYXRhLm5hbWV9JyAke3R5cGV9IC0tc2VtYW50aWMgQW55T2YgLS1zZXJ2aWNlLXJvbGVzICdAJHt0aGlzLnNlcnZpY2VJZH0nIC0taWRlbnRpdHktcm9sZXMgJyR7Y2xpUm9sZXN9J2A7XG4gICAgaWYgKHR5cGUgPT09ICdEaWFsJykge1xuICAgICAgdGhpcy5kaWFsUG9saWN5Q2xpQ29tbWFuZCA9IGNsaUNvbW1hbmQ7XG4gICAgICBpZiAoc3RhdHVzID09PSAnZG9uZScpIHtcbiAgICAgICAgdGhpcy5kaWFsSW5jcmVtZW50ID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJpbmRJbmNyZW1lbnQgPSAtMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iaW5kUG9saWN5Q2xpQ29tbWFuZCA9IGNsaUNvbW1hbmQ7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUVudGl0eSh0eXBlLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucG9zdCh0eXBlLCBkYXRhLCB0cnVlKTtcbiAgfVxuXG4gIHVwZGF0ZUVudGl0eSh0eXBlLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UucGF0Y2godHlwZSwgZGF0YSwgZGF0YS5pZCwgdHJ1ZSk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgIHRoaXMudmFsaWRhdGVTZXJ2aWNlTmFtZSgpO1xuICAgIHRoaXMudmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKCk7XG4gICAgdGhpcy52YWxpZGF0ZUludGVyY2VwdFBvcnQoKTtcbiAgICB0aGlzLnZhbGlkYXRlSG9zdEFkZHJlc3MoKTtcbiAgICB0aGlzLnZhbGlkYXRlSG9zdFBvcnQoKTtcbiAgICB0aGlzLnZhbGlkYXRlRGlhbElkZW50aXRpZXMoKVxuICAgIHRoaXMudmFsaWRhdGVCaW5kSWRlbnRpdGllcygpO1xuICAgIHJldHVybiBpc0VtcHR5KHRoaXMuZXJyb3JzKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VydmljZU5hbWUoKSB7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lKSkge1xuICAgICAgdGhpcy5lcnJvcnMubmFtZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnbmFtZScpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSW50ZXJjZXB0QWRkcmVzcygpIHtcbiAgICBpZiAodGhpcy5zZGtPbmx5RGlhbCkge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzJyk7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3NGb3JtYXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRW1wdHkodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzKSB8fCBpc0VtcHR5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXSkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmludGVyY2VwdEFkZHJlc3MgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuaXNWYWxpZEludGVyY2VwdEhvc3QodGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEuYWRkcmVzc2VzWzBdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0QWRkcmVzcyA9IHRydWU7XG4gICAgICB0aGlzLmVycm9ycy5pbnRlcmNlcHRBZGRyZXNzRm9ybWF0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdpbnRlcmNlcHRBZGRyZXNzJyk7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2ludGVyY2VwdEFkZHJlc3NGb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUludGVyY2VwdFBvcnQoKSB7XG4gICAgaWYgKHRoaXMuc2RrT25seURpYWwpIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0UG9ydCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbXB0eSh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUG9ydFJhbmdlcyh0aGlzLmludGVyY2VwdENvbmZpZ0FwaURhdGEuZGF0YS5wb3J0UmFuZ2VzKSkge1xuICAgICAgdGhpcy5lcnJvcnMuaW50ZXJjZXB0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaW50ZXJjZXB0UG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSG9zdEFkZHJlc3MoKSB7XG4gICAgaWYgKCF0aGlzLnNka09ubHlCaW5kICYmIGlzRW1wdHkodGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3MpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0QWRkcmVzcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnaG9zdEFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUhvc3RQb3J0KCkge1xuICAgIGlmICh0aGlzLnNka09ubHlCaW5kKSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2hvc3RQb3J0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc05pbCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkgfHwgaXNOYU4odGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhLnBvcnQpKSB7XG4gICAgICB0aGlzLmVycm9ycy5ob3N0UG9ydCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWxpZGF0aW9uU2VydmljZS5pc1ZhbGlkUG9ydCh0aGlzLmhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydCkpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhvc3RQb3J0ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZXQodGhpcy5lcnJvcnMsICdob3N0UG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGlhbElkZW50aXRpZXMoKSB7XG4gICAgaWYgKGlzRW1wdHkoWy4uLnRoaXMuZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlcywgLi4udGhpcy5kaWFsUG9saWN5Um9sZUF0dHJpYnV0ZXNdKSkge1xuICAgICAgdGhpcy5lcnJvcnMuZGlhbElkZW50aXRpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnNldCh0aGlzLmVycm9ycywgJ2RpYWxJZGVudGl0aWVzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCaW5kSWRlbnRpdGllcygpIHtcbiAgICBpZiAoaXNFbXB0eShbLi4udGhpcy5iaW5kUG9saWN5TmFtZWRBdHRyaWJ1dGVzLCAuLi50aGlzLmJpbmRQb2xpY3lSb2xlQXR0cmlidXRlc10pKSB7XG4gICAgICB0aGlzLmVycm9ycy5iaW5kSWRlbnRpdGllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0KHRoaXMuZXJyb3JzLCAnYmluZElkZW50aXRpZXMnKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZXJ2aWNlc0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL3NlcnZpY2VzJyBcXFxcXG4gICAgICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonIFxcXFxcbiAgICAgIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAgIC1IICd6dC1zZXNzaW9uOiAke3RoaXMueml0aVNlc3Npb25JZH0nIFxcXFxcbiAgICAgIC0tZGF0YS1yYXcgJyR7SlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2aWNlQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0SW50ZXJjZXB0Q29uZmlnQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvY29uZmlncycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YSl9JyBcXFxcYFxuICB9XG5cbiAgZ2V0SG9zdENvbmZpZ0FwaVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIGBjdXJsICcke3RoaXMuY29udHJvbGxlckRvbWFpbn0vZWRnZS9tYW5hZ2VtZW50L3YxL2NvbmZpZ3MnIFxcXFxcbiAgICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicgXFxcXFxuICAgICAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXFxcXFxuICAgICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy56aXRpU2Vzc2lvbklkfScgXFxcXFxuICAgICAgLS1kYXRhLXJhdyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmhvc3RDb25maWdBcGlEYXRhKX0nIFxcXFxgXG4gIH1cblxuICBnZXREaWFsQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuZGlhbFBvbGljeUFwaURhdGEpfScgXFxcXGA7XG4gIH1cblxuICBnZXRCaW5kQXBpUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gYGN1cmwgJyR7dGhpcy5jb250cm9sbGVyRG9tYWlufS9lZGdlL21hbmFnZW1lbnQvdjEvc2VydmljZS1wb2xpY2llcycgXFxcXFxuICAgICAgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyBcXFxcXG4gICAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgICAtSCAnenQtc2Vzc2lvbjogJHt0aGlzLnppdGlTZXNzaW9uSWR9JyBcXFxcXG4gICAgICAtLWRhdGEtcmF3ICcke0pTT04uc3RyaW5naWZ5KHRoaXMuYmluZFBvbGljeUFwaURhdGEpfScgXFxcXGA7XG4gIH1cblxuICBpbml0RGF0YU1vZGVscygpIHtcbiAgICB0aGlzLnNlcnZpY2VBcGlEYXRhID0gdGhpcy5pbml0U2VydmljZUFwaURhdGE7XG4gICAgdGhpcy5pbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEgPSB0aGlzLmluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGE7XG4gICAgdGhpcy5ob3N0Q29uZmlnQXBpRGF0YS5kYXRhID0gdGhpcy5pbml0SG9zdENvbmZpZ0FwaURhdGEuZGF0YTtcbiAgICB0aGlzLmRpYWxQb2xpY3lBcGlEYXRhID0gdGhpcy5pbml0RGlhbFBvbGljeUFwaURhdGE7XG4gICAgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSA9IHRoaXMuaW5pdEJpbmRQb2xpY3lBcGlEYXRhO1xuICB9XG5cbiAgY29udmVydFRvQWR2YW5jZWQoKSB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFwcGVuZElkOiAnQ29udmVydFNpbXBsZVNlcnZpY2UnLFxuICAgICAgdGl0bGU6ICdDb252ZXJ0IFNlcnZpY2UnLFxuICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBjb252ZXJ0IHRoaXMgc2ltcGxlIHNlcnZpY2UgdG8gYW4gYWR2YW5jZWQgc2VydmljZT8gVGhpcyBjaGFuZ2UgY2Fubm90IGJlIHVuZG9uZS5gLFxuICAgICAgYnVsbGV0TGlzdDogW10sXG4gICAgICBjb25maXJtTGFiZWw6ICdZZXMnLFxuICAgICAgY2FuY2VsTGFiZWw6ICdPb3BzLCBubyBnZXQgbWUgb3V0IG9mIGhlcmUnLFxuICAgICAgaW1hZ2VVcmw6ICcuLi8uLi9hc3NldHMvc3Zncy9Hcm93bF9XYXJuaW5nLnN2ZycsXG4gICAgICBzaG93Q2FuY2VsTGluazogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0Py5jb25maXJtZWQpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlQXBpRGF0YS50YWdzWydzZXJ2aWNlLXR5cGUnXSA9ICdhZHZhbmNlZCc7XG4gICAgICAgIHRoaXMudXBkYXRlRW50aXR5KCdzZXJ2aWNlcycsIHRoaXMuc2VydmljZUFwaURhdGEpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgYFNlcnZpY2UgVXBkYXRlZGAsXG4gICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSBjb252ZXJ0ZWQgJHt0aGlzLnNlcnZpY2VBcGlEYXRhLm5hbWV9IHRvIGFuIGFkdmFuY2VkIHNlcnZpY2UuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1VSTFMuWklUSV9BRFZBTkNFRF9TRVJWSUNFICsgJy8nICsgdGhpcy5zZXJ2aWNlQXBpRGF0YS5pZF0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEZhaWxlZCB0byBVcGRhdGUgU2VydmljZWAsXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byBjb252ZXJ0ICR7dGhpcy5zZXJ2aWNlQXBpRGF0YS5uYW1lfSB0byBhbiBhZHZhbmNlZCBzZXJ2aWNlLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgb3ZlcnJpZGUgY2hlY2tEYXRhQ2hhbmdlKCkge1xuICAgIGNvbnN0IHNlcnZpY2VEYXRhQ2hhbmdlID0gIWlzRXF1YWwodGhpcy5pbml0U2VydmljZUFwaURhdGEsIHRoaXMuc2VydmljZUFwaURhdGEpO1xuICAgIGNvbnN0IGludGVyY2VwdERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRJbnRlcmNlcHRDb25maWdBcGlEYXRhLmRhdGEsIHRoaXMuaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhKTtcbiAgICBjb25zdCBob3N0RGF0YUNoYW5nZSA9ICFpc0VxdWFsKHRoaXMuaW5pdEhvc3RDb25maWdBcGlEYXRhLmRhdGEsIHRoaXMuaG9zdENvbmZpZ0FwaURhdGEuZGF0YSk7XG4gICAgY29uc3QgZGlhbERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXREaWFsUG9saWN5QXBpRGF0YSwgdGhpcy5kaWFsUG9saWN5QXBpRGF0YSk7XG4gICAgY29uc3QgYmluZERhdGFDaGFuZ2UgPSAhaXNFcXVhbCh0aGlzLmluaXRCaW5kUG9saWN5QXBpRGF0YSwgdGhpcy5iaW5kUG9saWN5QXBpRGF0YSk7XG4gICAgY29uc3QgZGF0YUNoYW5nZSA9IHNlcnZpY2VEYXRhQ2hhbmdlICE9PSB0aGlzLnNlcnZpY2VEYXRhQ2hhbmdlIHx8IGludGVyY2VwdERhdGFDaGFuZ2UgIT09IHRoaXMuaW50ZXJjZXB0RGF0YUNoYW5nZSB8fCBob3N0RGF0YUNoYW5nZSAhPT0gdGhpcy5ob3N0RGF0YUNoYW5nZSB8fFxuICAgICAgICBkaWFsRGF0YUNoYW5nZSAhPT0gdGhpcy5kaWFsRGF0YUNoYW5nZSB8fCBiaW5kRGF0YUNoYW5nZSAhPT0gdGhpcy5iaW5kRGF0YUNoYW5nZTtcbiAgICBpZiAoZGF0YUNoYW5nZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlRGF0YUNoYW5nZSA9IHNlcnZpY2VEYXRhQ2hhbmdlO1xuICAgICAgdGhpcy5pbnRlcmNlcHREYXRhQ2hhbmdlID0gaW50ZXJjZXB0RGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuaG9zdERhdGFDaGFuZ2UgPSBob3N0RGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuZGlhbERhdGFDaGFuZ2UgPSBkaWFsRGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuYmluZERhdGFDaGFuZ2UgPSBiaW5kRGF0YUNoYW5nZTtcbiAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KGRhdGFDaGFuZ2UpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhQ2hhbmdlID0gc2VydmljZURhdGFDaGFuZ2UgfHwgaW50ZXJjZXB0RGF0YUNoYW5nZSB8fCBob3N0RGF0YUNoYW5nZSB8fCBkaWFsRGF0YUNoYW5nZSB8fCBiaW5kRGF0YUNoYW5nZTtcbiAgICBhcHAuaXNEaXJ0eSA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwcm9qZWN0YWJsZS1mb3JtLXdyYXBwZXIgc2ltcGxlLXNlcnZpY2Utd3JhcHBlclwiXG4gICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKCRldmVudClcIlxuICAgICAoa2V5dXAuZXNjYXBlKT1cImNsb3NlTW9kYWwodHJ1ZSwgZmFsc2UsICdjYXJkcycsICRldmVudClcIlxuICAgICB0YWJpbmRleD1cIjBcIlxuPlxuICAgIDxsaWItZm9ybS1oZWFkZXJcbiAgICAgICAgICAgIFtkYXRhXT1cImZvcm1EYXRhXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpc0VkaXQgPyAnRWRpdCBTaW1wbGUgU2VydmljZScgOiAnQ3JlYXRlIGEgU2ltcGxlIFNlcnZpY2UnXCJcbiAgICAgICAgICAgIFthY3Rpb25CdXR0b25UZXh0XT1cIidTYXZlJ1wiXG4gICAgICAgICAgICBbbXVsdGlBY3Rpb25zXT1cIm11bHRpQWN0aW9uc1wiXG4gICAgICAgICAgICAoYWN0aW9uUmVxdWVzdGVkKT1cImhlYWRlckFjdGlvblJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChtdWx0aUFjdGlvblJlcXVlc3RlZCk9XCJtdWx0aUFjdGlvblJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsoZm9ybVZpZXcpXT1cImZvcm1WaWV3XCJcbiAgICAgICAgICAgIFttb3JlQWN0aW9uc109XCJtb3JlQWN0aW9uc1wiXG4gICAgPjwvbGliLWZvcm0taGVhZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cInNpbXBsZS1zZXJ2aWNlLWZvcm0tY29udGFpbmVyIHByb2plY3RhYmxlLWZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiB0aHJlZS1maWZ0aHNcIiAqbmdJZj1cInNob3dGb3JtXCI+XG4gICAgICAgICAgICA8ZGl2ICBpZD1cIklubGluZVNlcnZpY2VBcmVhXCIgY2xhc3M9XCJhbnlhZGRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLXNlcnZpY2UtaW5wdXRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXIgW3RpdGxlXT1cIidTZXJ2aWNlIERldGFpbHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dC1ncm91cCBzZXJ2aWNlLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5TZXJ2aWNlIE5hbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5hbWUgdGhpcyBzZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25hbWVGaWVsZElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5uYW1lfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlcnZpY2VBcGlEYXRhLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlcnZpY2VOYW1lQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidmFsaWRhdGVTZXJ2aWNlTmFtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1zdWItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPlNFTEVDVCBPUiBDUkVBVEUgU0VSVklDRSBBVFRSSUJVVEVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VydmljZUFwaURhdGEucm9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZVJvbGVBdHRyaWJ1dGVzXT1cInNlcnZpY2VSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0FkZCBhdHRyaWJ1dGVzIHRvIGdyb3VwIHNlcnZpY2VzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtc2VydmljZS1jZW50ZXItY29udGVudFwiICpuZ0lmPVwic2hvd0Zvcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQUNDRVNTSU5HIENPTkZJR1VSQVRJT04nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAxJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ0hvdyB3aWxsIGNsaWVudCBhcHBsaWNhdGlvbnMgdXNlIHRoaXMgc2VydmljZT8gU3BlY2lmeSBhIGhvc3RuYW1lL0lQIGFuZCBwb3J0LCBvciB1c2UgdGhlICZxdW90O1NESyBPbmx5JnF1b3Q7IHRvZ2dsZSBmb3IgYW4gYXBwbGljYXRpb24gZW1iZWRkZWQgY29uZmlndXJhdGlvbi4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0LWdyb3VwIGFjY2Vzc2luZy1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hhdCBpZGVudGl0aWVzIGNhbiBhY2Nlc3MgdGhpcyBzZXJ2aWNlPzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwiZGlhbFBvbGljeU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cImRpYWxQb2xpY3lSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cImlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJpZGVudGl0eVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGlkZW50aXR5IGF0dHJpYnV0ZXMgdG8gZ3JhbnQgYWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRXJyb3JdPVwiZXJyb3JzLmRpYWxJZGVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZE5hbWVkQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZURpYWxJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVEaWFsSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+SG93IHdpbGwgdGhlIHNlcnZpY2UgYmUgYWNjZXNzZWQ/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFkZHJlc3NQb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5TREsgT05MWTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZGstdG9nZ2xlIGZvcm0tZmllbGQtdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoR3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2RrT25seURpYWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb246IHNka09ubHlEaWFsIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCIhc2RrT25seURpYWxcIiBjbGFzcz1cIm9uLWxhYmVsXCI+WUVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwic2RrT25seURpYWxcIiBjbGFzcz1cIm9mZi1sYWJlbFwiPk5PPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seURpYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWhvc3RuYW1lLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPkhPU1ROQU1FIC8gSVA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtaW5mbyBpbmZvaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBY2Nlc3NpbmcgaG9zdG5hbWVzIG11c3QgaW5jbHVkZSBhICcuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlcnJvcnMuaW50ZXJjZXB0QWRkcmVzc0Zvcm1hdFwiIGNsYXNzPVwiZXJyb3ItbGFiZWxcIj5BY2Nlc3NpbmcgaG9zdG5hbWVzIG11c3QgaW5jbHVkZSBhICcuJzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG93VG9cIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIChjaGFuZ2UpPVwidmFsaWRhdGVJbnRlcmNlcHRBZGRyZXNzKClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5pbnRlcmNlcHRBZGRyZXNzfVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5RGlhbCA/ICcnIDogJ2UuZy4gbXlzZXJ2aWNlLnppdGknXCIgWyhuZ01vZGVsKV09XCJzZGtPbmx5RGlhbCA/ICcnIDogaW50ZXJjZXB0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3Nlc1swXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seURpYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+UE9SVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvd1RvUG9ydFwiIHR5cGU9XCJudW1iZXJcIiBtYXhsZW5ndGg9XCIxMFwiIChjaGFuZ2UpPVwidmFsaWRhdGVJbnRlcmNlcHRQb3J0KClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5pbnRlcmNlcHRQb3J0fVwiIFtwbGFjZWhvbGRlcl09XCJzZGtPbmx5RGlhbCA/ICcnIDogNDQzXCIgKGtleXVwKT1cImludGVyY2VwdFBvcnRDaGFuZ2VkKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNka09ubHlEaWFsID8gJycgOiBpbnRlcmNlcHRQb3J0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSE9TVElORyBDT05GSUdVUkFUSU9OJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiAxMDAwMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidXaGVyZSBzaG91bGQgdHJhZmZpYyBmb3IgdGhpcyBzZXJ2aWNlIGJlIHNlbnQ/IFNwZWNpZnkgYSBwcm90b2NvbCwgaG9zdG5hbWUvSVAsIGFuZCBwb3J0LCBvciB1c2UgdGhlICZxdW90O1NESyBPbmx5JnF1b3Q7IHRvZ2dsZSBmb3IgYW4gYXBwbGljYXRpb24gZW1iZWRkZWQgY29uZmlndXJhdGlvbi4nXCJcblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXQtZ3JvdXAgaG9zdGluZy1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hhdCBpZGVudGl0aWVzIGNhbiBob3N0IHRoaXMgc2VydmljZT88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cImJpbmRQb2xpY3lOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJiaW5kUG9saWN5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZU5hbWVkQXR0cmlidXRlc109XCJpZGVudGl0eU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBpZGVudGl0eSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzRXJyb3JdPVwiZXJyb3JzLmJpbmRJZGVudGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZE5hbWVkQXR0cmlidXRlc0NoYW5nZSk9XCJ2YWxpZGF0ZUJpbmRJZGVudGl0aWVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwidmFsaWRhdGVCaW5kSWRlbnRpdGllcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZ2V0SWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtc3ViLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+V2hlcmUgc2hvdWxkIHRyYWZmaWMgYmUgc2VudD88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgYWRkcmVzc0Z1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlNESyBPTkxZPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNkay10b2dnbGUgZm9ybS1maWVsZC10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hHcmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZGtPbmx5QmluZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvbjogc2RrT25seUJpbmQgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cIiFzZGtPbmx5QmluZFwiIGNsYXNzPVwib24tbGFiZWxcIj5ZRVM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJzZGtPbmx5QmluZFwiIGNsYXNzPVwib2ZmLWxhYmVsXCI+Tk88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWl0ZW0tY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBzZGtPbmx5QmluZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZmlnLWl0ZW0tbGFiZWxcIj5QUk9UT0NPTDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJIb3N0ZWRQcm90b2NvbFwiIChjaGFuZ2UpPVwiaG9zdFByb3RvY29sc0NoYW5nZWQoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2RrT25seUJpbmQgPyAnJyA6IGhvc3RQcm90b2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0Y3BcIj5UQ1A8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidWRwXCIgPlVEUDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib3RoXCIgPlRDUC9VRFA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1pdGVtLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogc2RrT25seUJpbmR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmZpZy1pdGVtLWxhYmVsXCI+SE9TVE5BTUUgLyBJUDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvc3RlZEhvc3RcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIChjaGFuZ2UpPVwidmFsaWRhdGVIb3N0QWRkcmVzcygpXCIgW25nQ2xhc3NdPVwie2Vycm9yOiBlcnJvcnMuaG9zdEFkZHJlc3N9XCIgW3BsYWNlaG9sZGVyXT1cInNka09ubHlCaW5kID8gJycgOiAnZS5nLiBteXNlcnZpY2Uueml0aSdcIiBbKG5nTW9kZWwpXT1cInNka09ubHlCaW5kID8gJycgOiBob3N0Q29uZmlnQXBpRGF0YS5kYXRhLmFkZHJlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IHNka09ubHlCaW5kfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25maWctaXRlbS1sYWJlbFwiPlBPUlQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3N0ZWRQb3J0XCIgdHlwZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgKGNoYW5nZSk9XCJ2YWxpZGF0ZUhvc3RQb3J0KClcIiBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9ycy5ob3N0UG9ydH1cIiBbcGxhY2Vob2xkZXJdPVwic2RrT25seUJpbmQgPyAnJyA6IDQ0M1wiIFsobmdNb2RlbCldPVwic2RrT25seUJpbmQgPyAnJyA6IGhvc3RDb25maWdBcGlEYXRhLmRhdGEucG9ydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19