@openziti/ziti-console-lib 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/assets/fonts/icomoon.eot +0 -0
  2. package/assets/fonts/icomoon.svg +118 -0
  3. package/assets/fonts/icomoon.ttf +0 -0
  4. package/assets/fonts/icomoon.woff +0 -0
  5. package/assets/fonts/icomoon.woff2 +0 -0
  6. package/assets/styles/global.scss +147 -3
  7. package/assets/styles/icons.css +13 -0
  8. package/esm2022/lib/features/card-list/card-list.component.mjs +12 -11
  9. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +1 -1
  10. package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +13 -3
  11. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +1 -1
  12. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +13 -3
  13. package/esm2022/lib/features/login/login-dialog.component.mjs +123 -0
  14. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
  15. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +4 -4
  16. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +3 -15
  17. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +404 -0
  18. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +96 -0
  19. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +222 -0
  20. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +55 -0
  21. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +3 -3
  22. package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +3 -15
  23. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +3 -3
  24. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +3 -15
  25. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +3 -3
  26. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +3 -15
  27. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +24 -3
  28. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +15 -3
  29. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +3 -3
  30. package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +3 -15
  31. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +24 -4
  32. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +3 -15
  33. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +24 -4
  34. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
  35. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +3 -15
  36. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +6 -6
  37. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +3 -3
  38. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +3 -15
  39. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +3 -3
  40. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +3 -15
  41. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +3 -3
  42. package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +2 -2
  43. package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +2 -2
  44. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +1 -4
  45. package/esm2022/lib/models/certificate-authority.mjs +16 -0
  46. package/esm2022/lib/models/jwt-signer.mjs +2 -1
  47. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +3 -3
  48. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +120 -0
  49. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +240 -0
  50. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +2 -1
  51. package/esm2022/lib/services/login-service.class.mjs +5 -1
  52. package/esm2022/lib/services/node-data.service.mjs +8 -13
  53. package/esm2022/lib/services/validation.service.mjs +3 -12
  54. package/esm2022/lib/services/ziti-controller-data.service.mjs +23 -5
  55. package/esm2022/lib/services/ziti-data.service.mjs +27 -2
  56. package/esm2022/lib/shared/list-page-service.class.mjs +9 -4
  57. package/esm2022/lib/ziti-console-lib.module.mjs +19 -5
  58. package/esm2022/public-api.mjs +7 -1
  59. package/fesm2022/openziti-ziti-console-lib.mjs +1493 -303
  60. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  61. package/lib/features/card-list/card-list.component.d.ts +3 -2
  62. package/lib/features/card-list/card-list.component.d.ts.map +1 -1
  63. package/lib/features/dynamic-widgets/password/password-input.component.d.ts +3 -1
  64. package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +1 -1
  65. package/lib/features/dynamic-widgets/string/string-input.component.d.ts +3 -1
  66. package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -1
  67. package/lib/features/login/login-dialog.component.d.ts +29 -0
  68. package/lib/features/login/login-dialog.component.d.ts.map +1 -0
  69. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +1 -1
  70. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -1
  71. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +1 -1
  72. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +81 -0
  73. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +1 -0
  74. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +37 -0
  75. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +1 -0
  76. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +63 -0
  77. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +1 -0
  78. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +28 -0
  79. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +1 -0
  80. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -1
  81. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  82. package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +1 -1
  83. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +1 -1
  84. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  85. package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +1 -1
  86. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +1 -1
  87. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  88. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  89. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +5 -1
  90. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +1 -1
  91. package/lib/features/projectable-forms/form-header/form-header.component.d.ts +5 -1
  92. package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +1 -1
  93. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +1 -1
  94. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  95. package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +1 -1
  96. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +4 -1
  97. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
  98. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +1 -1
  99. package/lib/features/projectable-forms/projectable-form.class.d.ts +5 -1
  100. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  101. package/lib/features/projectable-forms/service/service-form.component.d.ts +1 -1
  102. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  103. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
  104. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +3 -2
  105. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  106. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +1 -1
  107. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  108. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
  109. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +1 -1
  110. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  111. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  112. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +1 -1
  113. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -1
  114. package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -1
  115. package/lib/models/certificate-authority.d.ts +14 -0
  116. package/lib/models/certificate-authority.d.ts.map +1 -0
  117. package/lib/models/jwt-signer.d.ts +1 -0
  118. package/lib/models/jwt-signer.d.ts.map +1 -1
  119. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +30 -0
  120. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +1 -0
  121. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +35 -0
  122. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +1 -0
  123. package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
  124. package/lib/services/login-service.class.d.ts +6 -2
  125. package/lib/services/login-service.class.d.ts.map +1 -1
  126. package/lib/services/node-data.service.d.ts +1 -0
  127. package/lib/services/node-data.service.d.ts.map +1 -1
  128. package/lib/services/validation.service.d.ts.map +1 -1
  129. package/lib/services/ziti-controller-data.service.d.ts +2 -2
  130. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  131. package/lib/services/ziti-data.service.d.ts +6 -2
  132. package/lib/services/ziti-data.service.d.ts.map +1 -1
  133. package/lib/shared/list-page-service.class.d.ts +1 -0
  134. package/lib/shared/list-page-service.class.d.ts.map +1 -1
  135. package/lib/ziti-console-lib.module.d.ts +22 -18
  136. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  137. package/package.json +1 -1
  138. package/public-api.d.ts +6 -0
  139. package/public-api.d.ts.map +1 -1
@@ -35,7 +35,7 @@ import * as i11 from "../../../services/settings.service";
35
35
  import * as i12 from "../../../services/ziti-data.service";
36
36
  class TerminatorFormComponent extends ProjectableForm {
37
37
  constructor(svc, schemaSvc, growlerService, extService, settingsService, zitiService, router, route, location) {
38
- super(growlerService, extService, zitiService, router, route, location);
38
+ super(growlerService, extService, zitiService, router, route, location, settingsService);
39
39
  this.svc = svc;
40
40
  this.schemaSvc = schemaSvc;
41
41
  this.settingsService = settingsService;
@@ -223,7 +223,7 @@ class TerminatorFormComponent extends ProjectableForm {
223
223
  });
224
224
  }
225
225
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TerminatorFormComponent, deps: [{ token: i1.TerminatorFormService }, { token: i2.SchemaService }, { token: i3.GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i5.Location }], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TerminatorFormComponent, selector: "lib-configuration", inputs: { formData: "formData", errors: "errors" }, outputs: { close: "close" }, usesInheritance: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Terminator Details' : 'Create Terminator')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n ></lib-form-header>\n <div class=\"terminator-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column one-half\">\n <lib-form-field-container\n [title]=\"'Service'\"\n [contentStyle]=\"'z-index: 10003'\"\n >\n <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedServiceNamedAttribute\" [disabled]=\"true\"/>\n <!--<lib-tag-selector\n [(selectedNamedAttributes)]=\"svc.selectedServiceNamedAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n [placeholder]=\"'Select a service'\"\n (addNamedAttribute)=\"serviceAttributeChanged($event)\"\n (namedAttributeRemoved)=\"serviceAttributeChanged()\"\n ></lib-tag-selector>-->\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Router'\"\n [contentStyle]=\"'z-index: 10002'\"\n >\n <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedRouterNamedAttribute\" [disabled]=\"true\"/>\n <!--<lib-tag-selector\n [(selectedNamedAttributes)]=\"svc.selectedRouterNamedAttributes\"\n [availableNamedAttributes]=\"svc.routerNamedAttributes\"\n [placeholder]=\"'Select a router'\"\n (addNamedAttribute)=\"routerAttributeChanged($event)\"\n (namedAttributeRemoved)=\"routerAttributeChanged()\"\n ></lib-tag-selector>-->\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Identity'\"\n [contentStyle]=\"'z-index: 10001'\"\n >\n <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedIdentityNamedAttribute\" [disabled]=\"true\"/>\n <!--<lib-tag-selector\n [(selectedNamedAttributes)]=\"svc.selectedIdentityNamedAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n [placeholder]=\"'Select an identity'\"\n (addNamedAttribute)=\"identityAttributeChanged($event)\"\n (namedAttributeRemoved)=\"identityAttributeChanged()\"\n ></lib-tag-selector>-->\n </lib-form-field-container>\n </div>\n <div class=\"form-group-column one-half\">\n <lib-form-field-container\n [title]=\"'Address'\"\n [contentStyle]=\"'z-index: 1001'\"\n >\n <input class=\"form-field-input read-only\" [disabled]=\"true\" [(ngModel)]=\"formData.address\"/>\n </lib-form-field-container>\n <lib-form-field-container\n [showHeader]=\"false\"\n [layout]=\"'row'\"\n [contentStyle]=\"'z-index: 1001'\"\n >\n <div class=\"form-field-label-container\">\n <span class=\"form-field-title\">Binding</span>\n <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.binding\"/>\n </div>\n <div class=\"form-field-label-container\">\n <span class=\"form-field-title\">Identity Secret</span>\n <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.identitySecret\"/>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [layout]=\"'row'\"\n [showHeader]=\"false\"\n >\n <div class=\"form-field-label-container\">\n <span class=\"form-field-title\">Hosting Cost</span>\n <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.cost\" type=\"number\"/>\n </div>\n <div class=\"form-field-label-container\">\n <span class=\"form-field-title\">Precedence</span>\n <select\n [(ngModel)]=\"formData.precedence\"\n [disabled]=\"true\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown read-only\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </div>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".terminator-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}::ng-deep .terminator-form-container select:disabled,::ng-deep .terminator-form-container input:disabled{opacity:.75!important;cursor:text;background-color:var(--stroke)!important}@media (max-width: 1524px){.terminator-form-container .projectable-form-main-column{max-width:38.75rem}}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: i8.FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: i10.JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }] }); }
226
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TerminatorFormComponent, selector: "lib-configuration", inputs: { formData: "formData", errors: "errors" }, outputs: { close: "close" }, usesInheritance: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n tabindex=\"0\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"(formData.id ? 'Terminator Details' : 'Create Terminator')\"\n [moreActions]=\"formData.moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [saveDisabled]=\"svc.saveDisabled || formDataInvalid\"\n ></lib-form-header>\n <div class=\"terminator-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" [hidden]=\"formView !== 'simple'\">\n <div class=\"form-group-column one-half\">\n <lib-form-field-container\n [title]=\"'Service'\"\n [contentStyle]=\"'z-index: 10003'\"\n >\n <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedServiceNamedAttribute\" [disabled]=\"true\"/>\n <!--<lib-tag-selector\n [(selectedNamedAttributes)]=\"svc.selectedServiceNamedAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n [placeholder]=\"'Select a service'\"\n (addNamedAttribute)=\"serviceAttributeChanged($event)\"\n (namedAttributeRemoved)=\"serviceAttributeChanged()\"\n ></lib-tag-selector>-->\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Router'\"\n [contentStyle]=\"'z-index: 10002'\"\n >\n <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedRouterNamedAttribute\" [disabled]=\"true\"/>\n <!--<lib-tag-selector\n [(selectedNamedAttributes)]=\"svc.selectedRouterNamedAttributes\"\n [availableNamedAttributes]=\"svc.routerNamedAttributes\"\n [placeholder]=\"'Select a router'\"\n (addNamedAttribute)=\"routerAttributeChanged($event)\"\n (namedAttributeRemoved)=\"routerAttributeChanged()\"\n ></lib-tag-selector>-->\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Identity'\"\n [contentStyle]=\"'z-index: 10001'\"\n >\n <input class=\"form-field-input read-only\" [(ngModel)]=\"selectedIdentityNamedAttribute\" [disabled]=\"true\"/>\n <!--<lib-tag-selector\n [(selectedNamedAttributes)]=\"svc.selectedIdentityNamedAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n [placeholder]=\"'Select an identity'\"\n (addNamedAttribute)=\"identityAttributeChanged($event)\"\n (namedAttributeRemoved)=\"identityAttributeChanged()\"\n ></lib-tag-selector>-->\n </lib-form-field-container>\n </div>\n <div class=\"form-group-column one-half\">\n <lib-form-field-container\n [title]=\"'Address'\"\n [contentStyle]=\"'z-index: 1001'\"\n >\n <input class=\"form-field-input read-only\" [disabled]=\"true\" [(ngModel)]=\"formData.address\"/>\n </lib-form-field-container>\n <lib-form-field-container\n [showHeader]=\"false\"\n [layout]=\"'row'\"\n [contentStyle]=\"'z-index: 1001'\"\n >\n <div class=\"form-field-label-container\">\n <span class=\"form-field-title\">Binding</span>\n <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.binding\"/>\n </div>\n <div class=\"form-field-label-container\">\n <span class=\"form-field-title\">Identity Secret</span>\n <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.identitySecret\"/>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [layout]=\"'row'\"\n [showHeader]=\"false\"\n >\n <div class=\"form-field-label-container\">\n <span class=\"form-field-title\">Hosting Cost</span>\n <input class=\"form-field-input\" [disabled]=\"true\" [(ngModel)]=\"formData.cost\" type=\"number\"/>\n </div>\n <div class=\"form-field-label-container\">\n <span class=\"form-field-title\">Precedence</span>\n <select\n [(ngModel)]=\"formData.precedence\"\n [disabled]=\"true\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown read-only\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </div>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n", styles: [".terminator-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:var(--gapXL)}.config-type-select.disabled{opacity:.7;pointer-events:none}::ng-deep .terminator-form-container select:disabled,::ng-deep .terminator-form-container input:disabled{opacity:.75!important;cursor:text;background-color:var(--stroke)!important}@media (max-width: 1524px){.terminator-form-container .projectable-form-main-column{max-width:38.75rem}}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: i8.FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: i10.JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }] }); }
227
227
  }
228
228
  export { TerminatorFormComponent };
229
229
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TerminatorFormComponent, decorators: [{
@@ -245,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
245
245
  }], close: [{
246
246
  type: Output
247
247
  }] } });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYXRvci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9wcm9qZWN0YWJsZS1mb3Jtcy90ZXJtaW5hdG9yL3Rlcm1pbmF0b3ItZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvdGVybWluYXRvci90ZXJtaW5hdG9yLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFFRyxNQUFNLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFHN0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQWUsTUFBTSxRQUFRLENBQUM7QUFFL0UsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9DQUFvQyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUV2RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBR3RELE1BS2EsdUJBQXdCLFNBQVEsZUFBZTtJQXNCeEQsWUFDVyxHQUEwQixFQUN6QixTQUF3QixFQUNoQyxjQUE4QixFQUNILFVBQTRCLEVBQ3RCLGVBQWdDLEVBQzdCLFdBQTRCLEVBQzdDLE1BQWMsRUFDZCxLQUFx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Qjs0RkFBdkIsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLG1CQUFtQjs7MEJBOEJ4QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyxpQkFBaUI7cUhBMUJYLFFBQVE7c0JBQXpCLEtBQUs7Z0JBQ1ksTUFBTTtzQkFBdkIsS0FBSztnQkFDSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LCBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGVybWluYXRvckZvcm1TZXJ2aWNlfSBmcm9tIFwiLi90ZXJtaW5hdG9yLWZvcm0uc2VydmljZVwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1NjaGVtYVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zY2hlbWEuc2VydmljZVwiO1xuaW1wb3J0IHtQcm9qZWN0YWJsZUZvcm19IGZyb20gXCIuLi9wcm9qZWN0YWJsZS1mb3JtLmNsYXNzXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7Q29uZmlnRWRpdG9yQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vY29uZmlnLWVkaXRvci9jb25maWctZWRpdG9yLmNvbXBvbmVudFwiO1xuXG5pbXBvcnQge2Nsb25lRGVlcCwgZGVmZXIsIGZvck93biwgaW52ZXJ0LCBpc0VtcHR5LCBpc05pbCwgdW5zZXR9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7VGVybWluYXRvcn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy90ZXJtaW5hdG9yXCI7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWNvbmZpZ3VyYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZXJtaW5hdG9yLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Rlcm1pbmF0b3ItZm9ybS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1pbmF0b3JGb3JtQ29tcG9uZW50IGV4dGVuZHMgUHJvamVjdGFibGVGb3JtIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgb3ZlcnJpZGUgZm9ybURhdGE6IGFueSA9IHt9O1xuICAgIEBJbnB1dCgpIG92ZXJyaWRlIGVycm9yczogYW55ID0ge307XG4gICAgQE91dHB1dCgpIGNsb3NlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBmb3JtVmlldyA9ICdzaW1wbGUnO1xuICAgIG9wdGlvbnM6IGFueVtdID0gW107XG4gICAgaXNFZGl0aW5nID0gIWlzRW1wdHkodGhpcy5mb3JtRGF0YS5pZCk7XG4gICAgZm9ybURhdGFJbnZhbGlkID0gZmFsc2U7XG4gICAgZWRpdE1vZGUgPSBmYWxzZTtcbiAgICBpdGVtczogYW55ID0gW107XG4gICAgc2V0dGluZ3M6IGFueSA9IHt9O1xuICAgIHNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZTtcbiAgICBzZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZTtcbiAgICBzZWxlY3RlZFJvdXRlck5hbWVkQXR0cmlidXRlO1xuICAgIHNlbGVjdGVkSWRlbnRpdHlJZDtcbiAgICBzZWxlY3RlZFNlcnZpY2VJZDtcbiAgICBzZWxlY3RlZFJvdXRlcklkO1xuICAgIG92ZXJyaWRlIGVudGl0eVR5cGUgPSAndGVybWluYXRvcnMnO1xuICAgIG92ZXJyaWRlIGVudGl0eUNsYXNzID0gVGVybWluYXRvcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc3ZjOiBUZXJtaW5hdG9yRm9ybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2NoZW1hU3ZjOiBTY2hlbWFTZXJ2aWNlLFxuICAgICAgICBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0hBUkVEWl9FWFRFTlNJT04pIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHVibGljIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBvdmVycmlkZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIGxvY2F0aW9uOiBMb2NhdGlvblxuICAgICkge1xuICAgICAgICBzdXBlcihncm93bGVyU2VydmljZSwgZXh0U2VydmljZSwgeml0aVNlcnZpY2UsIHJvdXRlciwgcm91dGUsIGxvY2F0aW9uKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NDaGFuZ2Uuc3Vic2NyaWJlKChyZXN1bHRzOmFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBlbnRpdHlVcGRhdGVkKCkge1xuICAgICAgICBzdXBlci5lbnRpdHlVcGRhdGVkKCk7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy5zdmMuZ2V0U2VydmljZU5hbWVkQXR0cmlidXRlcygpKTtcbiAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnN2Yy5nZXRJZGVudGl0eU5hbWVkQXR0cmlidXRlcygpKTtcbiAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnN2Yy5nZXRSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMoKSk7XG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFNlbGVjdGVkQXR0cmlidXRlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICB9XG5cbiAgICBoZWFkZXJBY3Rpb25SZXF1ZXN0ZWQoZXZlbnQpIHtcbiAgICAgICAgc3dpdGNoKGV2ZW50Lm5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NhdmUnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5Ub0xpc3RQYWdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0b2dnbGUtdmlldyc6XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtVmlldyA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdmVycmlkZSBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5jb25maWdUeXBlSWQgPSAnJztcbiAgICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm0oKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbT8uY29tcG9uZW50KSBpdGVtLmNvbXBvbmVudC5kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVycm9ycyA9IHt9O1xuICAgICAgICB0aGlzLml0ZW1zID0gW107XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHNhdmUoZXZlbnQ/OiBhbnkpIHtcbiAgICAgICAgaWYoIXRoaXMudmFsaWRhdGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ1ZhbHMgPSB0aGlzLmdldFRhZ1ZhbHVlcygpO1xuICAgICAgICBpZiAoIWlzRW1wdHkodGFnVmFscykpIHtcbiAgICAgICAgICAgIGZvck93bih0YWdWYWxzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEudGFnc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcGlEYXRhID0gdGhpcy5hcGlEYXRhO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3ZjLnNhdmUoYXBpRGF0YSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc01vZGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKHRydWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdERhdGEgPSB0aGlzLmZvcm1EYXRhO1xuICAgICAgICAgICAgdGhpcy5fZGF0YUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5Ub0xpc3RQYWdlKCk7XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoKSB7XG4gICAgICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgICAgIHJldHVybiBpc0VtcHR5KHRoaXMuZXJyb3JzKTtcbiAgICB9XG5cbiAgICBnZXQgYXBpQ2FsbFVSTCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciArICcvZWRnZS9tYW5hZ2VtZW50L3YxL3Rlcm1pbmF0b3JzJyArICh0aGlzLmZvcm1EYXRhLmlkID8gYC8ke3RoaXMuZm9ybURhdGEuaWR9YCA6ICcnKTtcbiAgICB9XG5cbiAgICBnZXQgYXBpRGF0YSgpOiBhbnkge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAgICAgICBzZXJ2aWNlOiB0aGlzLnNlbGVjdGVkU2VydmljZUlkIHx8ICcnLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzLnNlbGVjdGVkUm91dGVySWQgfHwgJycsXG4gICAgICAgICAgICBpZGVudGl0eTogdGhpcy5zZWxlY3RlZElkZW50aXR5SWQgfHwgJycsXG4gICAgICAgICAgICBiaW5kaW5nOiB0aGlzLmZvcm1EYXRhLmJpbmRpbmcgfHwgJycsXG4gICAgICAgICAgICBhZGRyZXNzOiB0aGlzLmZvcm1EYXRhLmFkZHJlc3MgfHwgJycsXG4gICAgICAgICAgICBpZGVudGl0eVNlY3JldDogdGhpcy5mb3JtRGF0YS5pZGVudGl0eVNlY3JldCB8fCAnJyxcbiAgICAgICAgICAgIHByZWNlZGVuY2U6IHRoaXMuZm9ybURhdGEucHJlY2VkZW5jZSB8fCAnJyxcbiAgICAgICAgICAgIGNvc3Q6IHRoaXMuZm9ybURhdGEuY29zdCB8fCAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmlkKSB7XG4gICAgICAgICAgICBkYXRhLmlkID0gdGhpcy5mb3JtRGF0YS5pZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwaURhdGE7XG4gICAgfVxuXG4gICAgX2FwaURhdGE6IGFueSA9IHt9O1xuICAgIHNldCBhcGlEYXRhKGRhdGEpIHtcbiAgICAgICAgdGhpcy5fYXBpRGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YUNoYW5nZWQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fYXBpRGF0YSA9IGNsb25lRGVlcCh0aGlzLmFwaURhdGEpO1xuICAgIH1cblxuICAgIGluaXRTZWxlY3RlZEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VJZEF0dHJpYnV0ZXNNYXAgPSBpbnZlcnQodGhpcy5zdmMuc2VydmljZU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgICAgIGNvbnN0IGlkZW50aXR5SWRBdHRyaWJ1dGVzTWFwID0gaW52ZXJ0KHRoaXMuc3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICAgICAgY29uc3Qgcm91dGVySWRBdHRyaWJ1dGVzTWFwID0gaW52ZXJ0KHRoaXMuc3ZjLnJvdXRlck5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGUgPSBzZXJ2aWNlSWRBdHRyaWJ1dGVzTWFwW3RoaXMuZm9ybURhdGE/LnNlcnZpY2UuaWRdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZSA9IGlkZW50aXR5SWRBdHRyaWJ1dGVzTWFwW3RoaXMuZm9ybURhdGE/LmlkZW50aXR5XTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlck5hbWVkQXR0cmlidXRlID0gcm91dGVySWRBdHRyaWJ1dGVzTWFwW3RoaXMuZm9ybURhdGE/LnJvdXRlci5pZF07XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlSWQgPSB0aGlzLmZvcm1EYXRhPy5zZXJ2aWNlLmlkO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSWRlbnRpdHlJZCA9IHRoaXMuZm9ybURhdGE/LmlkZW50aXR5O1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGVySWQgPSB0aGlzLmZvcm1EYXRhPy5yb3V0ZXIuaWQ7XG4gICAgICAgIHRoaXMuc3ZjLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgdGhpcy5zdmMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzLnB1c2godGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdmMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3ZjLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMucHVzaCh0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdmMuc2VsZWN0ZWRSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3V0ZXJOYW1lZEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgdGhpcy5zdmMuc2VsZWN0ZWRSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMucHVzaCh0aGlzLnNlbGVjdGVkUm91dGVyTmFtZWRBdHRyaWJ1dGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VydmljZUF0dHJpYnV0ZUNoYW5nZWQoZXZlbnQ/KSB7XG4gICAgICAgIGxldCBzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBpZiAoaXNFbXB0eShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlSWQgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlSWQgPSB0aGlzLnN2Yy5zZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzTWFwW2V2ZW50XTtcbiAgICAgICAgICAgIHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzID0gW2V2ZW50XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlID0gZXZlbnQ7XG4gICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3ZjLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcyA9IHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGl0eUF0dHJpYnV0ZUNoYW5nZWQoZXZlbnQ/KSB7XG4gICAgICAgIGxldCBzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBpZiAoaXNFbXB0eShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eUlkID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRlbnRpdHlJZCA9IHRoaXMuc3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzTWFwW2V2ZW50XTtcbiAgICAgICAgICAgIHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzID0gW2V2ZW50XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZSA9IGV2ZW50O1xuICAgICAgICBkZWZlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN2Yy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzID0gc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJvdXRlckF0dHJpYnV0ZUNoYW5nZWQoZXZlbnQ/KSB7XG4gICAgICAgIGxldCBzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBpZiAoaXNFbXB0eShldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZXJJZCA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlcklkID0gdGhpcy5zdmMucm91dGVyTmFtZWRBdHRyaWJ1dGVzTWFwW2V2ZW50XTtcbiAgICAgICAgICAgIHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzID0gW2V2ZW50XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGVyTmFtZWRBdHRyaWJ1dGUgPSBldmVudDtcbiAgICAgICAgZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdmMuc2VsZWN0ZWRSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMgPSBzZWxlY3RlZE5hbWVkQXR0cmlidXRlcztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInByb2plY3RhYmxlLWZvcm0td3JhcHBlclwiXG4gICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKCRldmVudClcIlxuICAgICAoa2V5dXAuZXNjYXBlKT1cImNsb3NlTW9kYWwoZmFsc2UpXCJcbiAgICAgdGFiaW5kZXg9XCIwXCJcbj5cbiAgICA8bGliLWZvcm0taGVhZGVyXG4gICAgICAgICAgICBbZGF0YV09XCJmb3JtRGF0YVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiKGZvcm1EYXRhLmlkID8gJ1Rlcm1pbmF0b3IgRGV0YWlscycgOiAnQ3JlYXRlIFRlcm1pbmF0b3InKVwiXG4gICAgICAgICAgICBbbW9yZUFjdGlvbnNdPVwiZm9ybURhdGEubW9yZUFjdGlvbnNcIlxuICAgICAgICAgICAgKGFjdGlvblJlcXVlc3RlZCk9XCJoZWFkZXJBY3Rpb25SZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbKGZvcm1WaWV3KV09XCJmb3JtVmlld1wiXG4gICAgICAgICAgICBbc2F2ZURpc2FibGVkXT1cInN2Yy5zYXZlRGlzYWJsZWQgfHwgZm9ybURhdGFJbnZhbGlkXCJcbiAgICA+PC9saWItZm9ybS1oZWFkZXI+XG4gICAgPGRpdiBjbGFzcz1cInRlcm1pbmF0b3ItZm9ybS1jb250YWluZXIgcHJvamVjdGFibGUtZm9ybS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2plY3RhYmxlLWZvcm0tbWFpbi1jb2x1bW4gZm9ybS1ncm91cC1yb3dcIiBbaGlkZGVuXT1cImZvcm1WaWV3ICE9PSAnc2ltcGxlJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uIG9uZS1oYWxmXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidTZXJ2aWNlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiAxMDAwMydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dCByZWFkLW9ubHlcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlXCIgW2Rpc2FibGVkXT1cInRydWVcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwhLS08bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cInN2Yy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwic3ZjLnNlcnZpY2VOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGEgc2VydmljZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGROYW1lZEF0dHJpYnV0ZSk9XCJzZXJ2aWNlQXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZWRBdHRyaWJ1dGVSZW1vdmVkKT1cInNlcnZpY2VBdHRyaWJ1dGVDaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPi0tPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInUm91dGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiAxMDAwMidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dCByZWFkLW9ubHlcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkUm91dGVyTmFtZWRBdHRyaWJ1dGVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgPCEtLTxsaWItdGFnLXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwic3ZjLnNlbGVjdGVkUm91dGVyTmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cInN2Yy5yb3V0ZXJOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGEgcm91dGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZE5hbWVkQXR0cmlidXRlKT1cInJvdXRlckF0dHJpYnV0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWVkQXR0cmlidXRlUmVtb3ZlZCk9XCJyb3V0ZXJBdHRyaWJ1dGVDaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPi0tPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSWRlbnRpdHknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAxJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0IHJlYWQtb25seVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlXCIgW2Rpc2FibGVkXT1cInRydWVcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwhLS08bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cInN2Yy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cInN2Yy5pZGVudGl0eU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgYW4gaWRlbnRpdHknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkTmFtZWRBdHRyaWJ1dGUpPVwiaWRlbnRpdHlBdHRyaWJ1dGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lZEF0dHJpYnV0ZVJlbW92ZWQpPVwiaWRlbnRpdHlBdHRyaWJ1dGVDaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPi0tPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1jb2x1bW4gb25lLWhhbGZcIj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FkZHJlc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDEnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXQgcmVhZC1vbmx5XCIgW2Rpc2FibGVkXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLmFkZHJlc3NcIi8+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIncm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiAxMDAxJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1sYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPkJpbmRpbmc8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCIgW2Rpc2FibGVkXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLmJpbmRpbmdcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1sYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPklkZW50aXR5IFNlY3JldDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZm9ybURhdGEuaWRlbnRpdHlTZWNyZXRcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYXlvdXRdPVwiJ3JvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtbGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5Ib3N0aW5nIENvc3Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCIgW2Rpc2FibGVkXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLmNvc3RcIiB0eXBlPVwibnVtYmVyXCIvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtbGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGVcIj5QcmVjZWRlbmNlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLnByZWNlZGVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiaG9zdGluZ1ByZWNlZGVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtZHJvcGRvd24gcmVhZC1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZGVmYXVsdFwiPkRlZmF1bHQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVxdWlyZWRcIj5SZXF1aXJlZDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmYWlsZWRcIj5GYWlsZWQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uXCIgKm5nSWY9XCJmb3JtVmlldyA9PT0gJ3JhdydcIj5cbiAgICAgICAgICAgIDxsaWItanNvbi12aWV3ICpuZ0lmPVwiZm9ybURhdGFcIiBbKGRhdGEpXT1cImZvcm1EYXRhXCI+PC9saWItanNvbi12aWV3PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGxpYi1sb2FkaW5nLWluZGljYXRvciAqbmdJZj1cImlzTG9hZGluZ1wiIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCI+PC9saWItbG9hZGluZy1pbmRpY2F0b3I+XG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYXRvci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9wcm9qZWN0YWJsZS1mb3Jtcy90ZXJtaW5hdG9yL3Rlcm1pbmF0b3ItZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvdGVybWluYXRvci90ZXJtaW5hdG9yLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFFRyxNQUFNLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFHN0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQWUsTUFBTSxRQUFRLENBQUM7QUFFL0UsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9DQUFvQyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUV2RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBR3RELE1BS2EsdUJBQXdCLFNBQVEsZUFBZTtJQXNCeEQsWUFDVyxHQUEwQixFQUN6QixTQUF3QixFQUNoQyxjQUE4QixFQUNILFVBQTRCLEVBQ1YsZUFBZ0MsRUFDekMsV0FBNEIsRUFDN0MsTUFBYyxFQUNkLEtBQXFC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OURhLHVCQUF1Qjs0RkFBdkIsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLG1CQUFtQjs7MEJBOEJ4QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyxpQkFBaUI7cUhBMUJYLFFBQVE7c0JBQXpCLEtBQUs7Z0JBQ1ksTUFBTTtzQkFBdkIsS0FBSztnQkFDSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LCBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGVybWluYXRvckZvcm1TZXJ2aWNlfSBmcm9tIFwiLi90ZXJtaW5hdG9yLWZvcm0uc2VydmljZVwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1NjaGVtYVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zY2hlbWEuc2VydmljZVwiO1xuaW1wb3J0IHtQcm9qZWN0YWJsZUZvcm19IGZyb20gXCIuLi9wcm9qZWN0YWJsZS1mb3JtLmNsYXNzXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7Q29uZmlnRWRpdG9yQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vY29uZmlnLWVkaXRvci9jb25maWctZWRpdG9yLmNvbXBvbmVudFwiO1xuXG5pbXBvcnQge2Nsb25lRGVlcCwgZGVmZXIsIGZvck93biwgaW52ZXJ0LCBpc0VtcHR5LCBpc05pbCwgdW5zZXR9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7VGVybWluYXRvcn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy90ZXJtaW5hdG9yXCI7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWNvbmZpZ3VyYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZXJtaW5hdG9yLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Rlcm1pbmF0b3ItZm9ybS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1pbmF0b3JGb3JtQ29tcG9uZW50IGV4dGVuZHMgUHJvamVjdGFibGVGb3JtIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgb3ZlcnJpZGUgZm9ybURhdGE6IGFueSA9IHt9O1xuICAgIEBJbnB1dCgpIG92ZXJyaWRlIGVycm9yczogYW55ID0ge307XG4gICAgQE91dHB1dCgpIGNsb3NlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBmb3JtVmlldyA9ICdzaW1wbGUnO1xuICAgIG9wdGlvbnM6IGFueVtdID0gW107XG4gICAgaXNFZGl0aW5nID0gIWlzRW1wdHkodGhpcy5mb3JtRGF0YS5pZCk7XG4gICAgZm9ybURhdGFJbnZhbGlkID0gZmFsc2U7XG4gICAgZWRpdE1vZGUgPSBmYWxzZTtcbiAgICBpdGVtczogYW55ID0gW107XG4gICAgc2V0dGluZ3M6IGFueSA9IHt9O1xuICAgIHNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZTtcbiAgICBzZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZTtcbiAgICBzZWxlY3RlZFJvdXRlck5hbWVkQXR0cmlidXRlO1xuICAgIHNlbGVjdGVkSWRlbnRpdHlJZDtcbiAgICBzZWxlY3RlZFNlcnZpY2VJZDtcbiAgICBzZWxlY3RlZFJvdXRlcklkO1xuICAgIG92ZXJyaWRlIGVudGl0eVR5cGUgPSAndGVybWluYXRvcnMnO1xuICAgIG92ZXJyaWRlIGVudGl0eUNsYXNzID0gVGVybWluYXRvcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc3ZjOiBUZXJtaW5hdG9yRm9ybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2NoZW1hU3ZjOiBTY2hlbWFTZXJ2aWNlLFxuICAgICAgICBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0hBUkVEWl9FWFRFTlNJT04pIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHJvdGVjdGVkIG92ZXJyaWRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBvdmVycmlkZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIGxvY2F0aW9uOiBMb2NhdGlvblxuICAgICkge1xuICAgICAgICBzdXBlcihncm93bGVyU2VydmljZSwgZXh0U2VydmljZSwgeml0aVNlcnZpY2UsIHJvdXRlciwgcm91dGUsIGxvY2F0aW9uLCBzZXR0aW5nc1NlcnZpY2UpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5nc0NoYW5nZS5zdWJzY3JpYmUoKHJlc3VsdHM6YW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGVudGl0eVVwZGF0ZWQoKSB7XG4gICAgICAgIHN1cGVyLmVudGl0eVVwZGF0ZWQoKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnN2Yy5nZXRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzKCkpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuc3ZjLmdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKCkpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuc3ZjLmdldFJvdXRlck5hbWVkQXR0cmlidXRlcygpKTtcbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbml0U2VsZWN0ZWRBdHRyaWJ1dGVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyRm9ybSgpO1xuICAgIH1cblxuICAgIGhlYWRlckFjdGlvblJlcXVlc3RlZChldmVudCkge1xuICAgICAgICBzd2l0Y2goZXZlbnQubmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnJldHVyblRvTGlzdFBhZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZS12aWV3JzpcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1WaWV3ID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhLmNvbmZpZ1R5cGVJZCA9ICcnO1xuICAgICAgICB0aGlzLmNsZWFyRm9ybSgpO1xuICAgIH1cblxuICAgIGNsZWFyRm9ybSgpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtPy5jb21wb25lbnQpIGl0ZW0uY29tcG9uZW50LmRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZShldmVudD86IGFueSkge1xuICAgICAgICBpZighdGhpcy52YWxpZGF0ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFnVmFscyA9IHRoaXMuZ2V0VGFnVmFsdWVzKCk7XG4gICAgICAgIGlmICghaXNFbXB0eSh0YWdWYWxzKSkge1xuICAgICAgICAgICAgZm9yT3duKHRhZ1ZhbHMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS50YWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFwaURhdGEgPSB0aGlzLmFwaURhdGE7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdmMuc2F2ZShhcGlEYXRhKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTW9kYWwodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbml0RGF0YSA9IHRoaXMuZm9ybURhdGE7XG4gICAgICAgICAgICB0aGlzLl9kYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJldHVyblRvTGlzdFBhZ2UoKTtcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodGhpcy5lcnJvcnMpO1xuICAgIH1cblxuICAgIGdldCBhcGlDYWxsVVJMKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyICsgJy9lZGdlL21hbmFnZW1lbnQvdjEvdGVybWluYXRvcnMnICsgKHRoaXMuZm9ybURhdGEuaWQgPyBgLyR7dGhpcy5mb3JtRGF0YS5pZH1gIDogJycpO1xuICAgIH1cblxuICAgIGdldCBhcGlEYXRhKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlSWQgfHwgJycsXG4gICAgICAgICAgICByb3V0ZXI6IHRoaXMuc2VsZWN0ZWRSb3V0ZXJJZCB8fCAnJyxcbiAgICAgICAgICAgIGlkZW50aXR5OiB0aGlzLnNlbGVjdGVkSWRlbnRpdHlJZCB8fCAnJyxcbiAgICAgICAgICAgIGJpbmRpbmc6IHRoaXMuZm9ybURhdGEuYmluZGluZyB8fCAnJyxcbiAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMuZm9ybURhdGEuYWRkcmVzcyB8fCAnJyxcbiAgICAgICAgICAgIGlkZW50aXR5U2VjcmV0OiB0aGlzLmZvcm1EYXRhLmlkZW50aXR5U2VjcmV0IHx8ICcnLFxuICAgICAgICAgICAgcHJlY2VkZW5jZTogdGhpcy5mb3JtRGF0YS5wcmVjZWRlbmNlIHx8ICcnLFxuICAgICAgICAgICAgY29zdDogdGhpcy5mb3JtRGF0YS5jb3N0IHx8IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybURhdGEuaWQpIHtcbiAgICAgICAgICAgIGRhdGEuaWQgPSB0aGlzLmZvcm1EYXRhLmlkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwaURhdGEgPSBkYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBpRGF0YTtcbiAgICB9XG5cbiAgICBfYXBpRGF0YTogYW55ID0ge307XG4gICAgc2V0IGFwaURhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhQ2hhbmdlZChldmVudCkge1xuICAgICAgICB0aGlzLl9hcGlEYXRhID0gY2xvbmVEZWVwKHRoaXMuYXBpRGF0YSk7XG4gICAgfVxuXG4gICAgaW5pdFNlbGVjdGVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUlkQXR0cmlidXRlc01hcCA9IGludmVydCh0aGlzLnN2Yy5zZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICAgICAgY29uc3QgaWRlbnRpdHlJZEF0dHJpYnV0ZXNNYXAgPSBpbnZlcnQodGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgICAgICBjb25zdCByb3V0ZXJJZEF0dHJpYnV0ZXNNYXAgPSBpbnZlcnQodGhpcy5zdmMucm91dGVyTmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZSA9IHNlcnZpY2VJZEF0dHJpYnV0ZXNNYXBbdGhpcy5mb3JtRGF0YT8uc2VydmljZS5pZF07XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlID0gaWRlbnRpdHlJZEF0dHJpYnV0ZXNNYXBbdGhpcy5mb3JtRGF0YT8uaWRlbnRpdHldO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGVyTmFtZWRBdHRyaWJ1dGUgPSByb3V0ZXJJZEF0dHJpYnV0ZXNNYXBbdGhpcy5mb3JtRGF0YT8ucm91dGVyLmlkXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VJZCA9IHRoaXMuZm9ybURhdGE/LnNlcnZpY2UuaWQ7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eUlkID0gdGhpcy5mb3JtRGF0YT8uaWRlbnRpdHk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZXJJZCA9IHRoaXMuZm9ybURhdGE/LnJvdXRlci5pZDtcbiAgICAgICAgdGhpcy5zdmMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlKSB7XG4gICAgICAgICAgICB0aGlzLnN2Yy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMucHVzaCh0aGlzLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN2Yy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgdGhpcy5zdmMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcy5wdXNoKHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN2Yy5zZWxlY3RlZFJvdXRlck5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvdXRlck5hbWVkQXR0cmlidXRlKSB7XG4gICAgICAgICAgICB0aGlzLnN2Yy5zZWxlY3RlZFJvdXRlck5hbWVkQXR0cmlidXRlcy5wdXNoKHRoaXMuc2VsZWN0ZWRSb3V0ZXJOYW1lZEF0dHJpYnV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJ2aWNlQXR0cmlidXRlQ2hhbmdlZChldmVudD8pIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgIGlmIChpc0VtcHR5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VJZCA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VJZCA9IHRoaXMuc3ZjLnNlcnZpY2VOYW1lZEF0dHJpYnV0ZXNNYXBbZXZlbnRdO1xuICAgICAgICAgICAgc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMgPSBbZXZlbnRdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGUgPSBldmVudDtcbiAgICAgICAgZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdmMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzID0gc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aXR5QXR0cmlidXRlQ2hhbmdlZChldmVudD8pIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgIGlmIChpc0VtcHR5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkZW50aXR5SWQgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eUlkID0gdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXBbZXZlbnRdO1xuICAgICAgICAgICAgc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMgPSBbZXZlbnRdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlID0gZXZlbnQ7XG4gICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3ZjLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMgPSBzZWxlY3RlZE5hbWVkQXR0cmlidXRlcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcm91dGVyQXR0cmlidXRlQ2hhbmdlZChldmVudD8pIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgICAgIGlmIChpc0VtcHR5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvdXRlcklkID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGVySWQgPSB0aGlzLnN2Yy5yb3V0ZXJOYW1lZEF0dHJpYnV0ZXNNYXBbZXZlbnRdO1xuICAgICAgICAgICAgc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMgPSBbZXZlbnRdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZXJOYW1lZEF0dHJpYnV0ZSA9IGV2ZW50O1xuICAgICAgICBkZWZlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN2Yy5zZWxlY3RlZFJvdXRlck5hbWVkQXR0cmlidXRlcyA9IHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHJvamVjdGFibGUtZm9ybS13cmFwcGVyXCJcbiAgICAgKGtleXVwLmVudGVyKT1cInNhdmUoJGV2ZW50KVwiXG4gICAgIChrZXl1cC5lc2NhcGUpPVwiY2xvc2VNb2RhbChmYWxzZSlcIlxuICAgICB0YWJpbmRleD1cIjBcIlxuPlxuICAgIDxsaWItZm9ybS1oZWFkZXJcbiAgICAgICAgICAgIFtkYXRhXT1cImZvcm1EYXRhXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIoZm9ybURhdGEuaWQgPyAnVGVybWluYXRvciBEZXRhaWxzJyA6ICdDcmVhdGUgVGVybWluYXRvcicpXCJcbiAgICAgICAgICAgIFttb3JlQWN0aW9uc109XCJmb3JtRGF0YS5tb3JlQWN0aW9uc1wiXG4gICAgICAgICAgICAoYWN0aW9uUmVxdWVzdGVkKT1cImhlYWRlckFjdGlvblJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsoZm9ybVZpZXcpXT1cImZvcm1WaWV3XCJcbiAgICAgICAgICAgIFtzYXZlRGlzYWJsZWRdPVwic3ZjLnNhdmVEaXNhYmxlZCB8fCBmb3JtRGF0YUludmFsaWRcIlxuICAgID48L2xpYi1mb3JtLWhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwidGVybWluYXRvci1mb3JtLWNvbnRhaW5lciBwcm9qZWN0YWJsZS1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvamVjdGFibGUtZm9ybS1tYWluLWNvbHVtbiBmb3JtLWdyb3VwLXJvd1wiIFtoaWRkZW5dPVwiZm9ybVZpZXcgIT09ICdzaW1wbGUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1jb2x1bW4gb25lLWhhbGZcIj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1NlcnZpY2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAzJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0IHJlYWQtb25seVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgPCEtLTxsaWItdGFnLXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwic3ZjLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZU5hbWVkQXR0cmlidXRlc109XCJzdmMuc2VydmljZU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgYSBzZXJ2aWNlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZE5hbWVkQXR0cmlidXRlKT1cInNlcnZpY2VBdHRyaWJ1dGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lZEF0dHJpYnV0ZVJlbW92ZWQpPVwic2VydmljZUF0dHJpYnV0ZUNoYW5nZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+LS0+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidSb3V0ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAyJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0IHJlYWQtb25seVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRSb3V0ZXJOYW1lZEF0dHJpYnV0ZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCIvPlxuICAgICAgICAgICAgICAgICAgICA8IS0tPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJzdmMuc2VsZWN0ZWRSb3V0ZXJOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwic3ZjLnJvdXRlck5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgYSByb3V0ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkTmFtZWRBdHRyaWJ1dGUpPVwicm91dGVyQXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZWRBdHRyaWJ1dGVSZW1vdmVkKT1cInJvdXRlckF0dHJpYnV0ZUNoYW5nZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+LS0+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJZGVudGl0eSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRTdHlsZV09XCInei1pbmRleDogMTAwMDEnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXQgcmVhZC1vbmx5XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgPCEtLTxsaWItdGFnLXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZE5hbWVkQXR0cmlidXRlcyldPVwic3ZjLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwic3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBhbiBpZGVudGl0eSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGROYW1lZEF0dHJpYnV0ZSk9XCJpZGVudGl0eUF0dHJpYnV0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWVkQXR0cmlidXRlUmVtb3ZlZCk9XCJpZGVudGl0eUF0dHJpYnV0ZUNoYW5nZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+LS0+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiBvbmUtaGFsZlwiPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQWRkcmVzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRTdHlsZV09XCInei1pbmRleDogMTAwMSdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dCByZWFkLW9ubHlcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZm9ybURhdGEuYWRkcmVzc1wiLz5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGF5b3V0XT1cIidyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDEnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+QmluZGluZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZm9ybURhdGEuYmluZGluZ1wiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWZpZWxkLXRpdGxlXCI+SWRlbnRpdHkgU2VjcmV0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1maWVsZC1pbnB1dFwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmb3JtRGF0YS5pZGVudGl0eVNlY3JldFwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIncm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1sYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPkhvc3RpbmcgQ29zdDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZm9ybURhdGEuY29zdFwiIHR5cGU9XCJudW1iZXJcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZC1sYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPlByZWNlZGVuY2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybURhdGEucHJlY2VkZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJob3N0aW5nUHJlY2VkZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1kcm9wZG93biByZWFkLW9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkZWZhdWx0XCI+RGVmYXVsdDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZXF1aXJlZFwiPlJlcXVpcmVkPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImZhaWxlZFwiPkZhaWxlZDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1jb2x1bW5cIiAqbmdJZj1cImZvcm1WaWV3ID09PSAncmF3J1wiPlxuICAgICAgICAgICAgPGxpYi1qc29uLXZpZXcgKm5nSWY9XCJmb3JtRGF0YVwiIFsoZGF0YSldPVwiZm9ybURhdGFcIj48L2xpYi1qc29uLXZpZXc+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48bGliLWxvYWRpbmctaW5kaWNhdG9yICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj48L2xpYi1sb2FkaW5nLWluZGljYXRvcj5cbiJdfQ==