tango-app-ui-manage-settings 3.3.1-beta.3 → 3.3.1-beta.4

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 (20) hide show
  1. package/esm2022/lib/components/configurations/configurations.component.mjs +5 -5
  2. package/esm2022/lib/components/configurations/email-configuration/email-configuration.component.mjs +5 -3
  3. package/esm2022/lib/components/configurations/email-scheduler/email-scheduler.component.mjs +345 -0
  4. package/esm2022/lib/components/configurations/employee-training/employee-training.component.mjs +1 -2
  5. package/esm2022/lib/components/mail-only-users/mail-only-users.component.mjs +156 -0
  6. package/esm2022/lib/services/client-api.service.mjs +15 -1
  7. package/esm2022/lib/tango-manage-settings.module.mjs +9 -3
  8. package/fesm2022/tango-app-ui-manage-settings.mjs +740 -240
  9. package/fesm2022/tango-app-ui-manage-settings.mjs.map +1 -1
  10. package/lib/components/activity-logs/activity-logs.component.d.ts +1 -1
  11. package/lib/components/configurations/email-scheduler/email-scheduler.component.d.ts +85 -0
  12. package/lib/components/contact-directory/contact-directory.component.d.ts +1 -1
  13. package/lib/components/mail-only-users/mail-only-users.component.d.ts +41 -0
  14. package/lib/components/payments-subscription/billing/billing-group-form/billing-group-form.component.d.ts +1 -1
  15. package/lib/components/payments-subscription/billing/billing.component.d.ts +1 -1
  16. package/lib/components/payments-subscription/invoice-credits/invoice-credits.component.d.ts +2 -2
  17. package/lib/components/tango-manage-settings/tango-manage-settings.component.d.ts +1 -1
  18. package/lib/services/client-api.service.d.ts +5 -0
  19. package/lib/tango-manage-settings.module.d.ts +14 -12
  20. package/package.json +1 -1
@@ -11,8 +11,8 @@ import * as i7 from "./ticket-configuration/ticket-configuration.component";
11
11
  import * as i8 from "./report-configuration/report-configuration.component";
12
12
  import * as i9 from "./user-configuration/user-configuration.component";
13
13
  import * as i10 from "./feature-configuration/feature-configuration.component";
14
- import * as i11 from "./email-configuration/email-configuration.component";
15
- import * as i12 from "./employee-training/employee-training.component";
14
+ import * as i11 from "./employee-training/employee-training.component";
15
+ import * as i12 from "./email-scheduler/email-scheduler.component";
16
16
  export class ConfigurationsComponent {
17
17
  clientApi;
18
18
  toaster;
@@ -190,13 +190,13 @@ export class ConfigurationsComponent {
190
190
  return differentEntries;
191
191
  }
192
192
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigurationsComponent, deps: [{ token: i1.ClientApiService }, { token: i2.ToastService }, { token: i3.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
193
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ConfigurationsComponent, selector: "lib-configurations", viewQueries: [{ propertyName: "accordion", first: true, predicate: ["accordion"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div ngbAccordion #accordion=\"ngbAccordion\" [closeOthers]=\"true\" [destroyOnHide]=\"true\" (show)=\"openItem()\" >\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6 \" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Audit Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-audit-configuration></lib-audit-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Employee Training</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-employee-training></lib-employee-training>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Ticket Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-ticket-configuration></lib-ticket-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Email Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-email-configuration></lib-email-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Report Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-report-configuration></lib-report-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >User Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-user-configuration></lib-user-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Domain Details</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-domain-details></lib-domain-details> \r\n </ng-template>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Feature Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-feature-configuration></lib-feature-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".settings-accordian-card{border-radius:10px;background:var(#FFF)}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i5.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i5.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i5.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i5.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "component", type: i6.AuditConfigurationComponent, selector: "lib-audit-configuration" }, { kind: "component", type: i7.TicketConfigurationComponent, selector: "lib-ticket-configuration" }, { kind: "component", type: i8.ReportConfigurationComponent, selector: "lib-report-configuration" }, { kind: "component", type: i9.UserConfigurationComponent, selector: "lib-user-configuration" }, { kind: "component", type: i10.FeatureConfigurationComponent, selector: "lib-feature-configuration" }, { kind: "component", type: i11.EmailConfigurationComponent, selector: "lib-email-configuration" }, { kind: "component", type: i12.EmployeeTrainingComponent, selector: "lib-employee-training" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
193
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ConfigurationsComponent, selector: "lib-configurations", viewQueries: [{ propertyName: "accordion", first: true, predicate: ["accordion"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div ngbAccordion #accordion=\"ngbAccordion\" [closeOthers]=\"true\" [destroyOnHide]=\"true\" (show)=\"openItem()\" >\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6 \" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Audit Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-audit-configuration></lib-audit-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Employee Training</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-employee-training></lib-employee-training>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Ticket Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-ticket-configuration></lib-ticket-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Email Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <!-- <lib-email-configuration></lib-email-configuration> -->\r\n <lib-email-scheduler></lib-email-scheduler>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Report Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-report-configuration></lib-report-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >User Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-user-configuration></lib-user-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Domain Details</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-domain-details></lib-domain-details> \r\n </ng-template>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Feature Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-feature-configuration></lib-feature-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".settings-accordian-card{border-radius:10px;background:var(#FFF)}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i5.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i5.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i5.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i5.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "component", type: i6.AuditConfigurationComponent, selector: "lib-audit-configuration" }, { kind: "component", type: i7.TicketConfigurationComponent, selector: "lib-ticket-configuration" }, { kind: "component", type: i8.ReportConfigurationComponent, selector: "lib-report-configuration" }, { kind: "component", type: i9.UserConfigurationComponent, selector: "lib-user-configuration" }, { kind: "component", type: i10.FeatureConfigurationComponent, selector: "lib-feature-configuration" }, { kind: "component", type: i11.EmployeeTrainingComponent, selector: "lib-employee-training" }, { kind: "component", type: i12.EmailSchedulerComponent, selector: "lib-email-scheduler" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
194
194
  }
195
195
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigurationsComponent, decorators: [{
196
196
  type: Component,
197
- args: [{ selector: 'lib-configurations', template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div ngbAccordion #accordion=\"ngbAccordion\" [closeOthers]=\"true\" [destroyOnHide]=\"true\" (show)=\"openItem()\" >\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6 \" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Audit Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-audit-configuration></lib-audit-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Employee Training</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-employee-training></lib-employee-training>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Ticket Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-ticket-configuration></lib-ticket-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Email Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-email-configuration></lib-email-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Report Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-report-configuration></lib-report-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >User Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-user-configuration></lib-user-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Domain Details</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-domain-details></lib-domain-details> \r\n </ng-template>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Feature Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-feature-configuration></lib-feature-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".settings-accordian-card{border-radius:10px;background:var(#FFF)}\n"] }]
197
+ args: [{ selector: 'lib-configurations', template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div ngbAccordion #accordion=\"ngbAccordion\" [closeOthers]=\"true\" [destroyOnHide]=\"true\" (show)=\"openItem()\" >\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6 \" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Audit Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-audit-configuration></lib-audit-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Employee Training</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-employee-training></lib-employee-training>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Ticket Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-ticket-configuration></lib-ticket-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Email Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <!-- <lib-email-configuration></lib-email-configuration> -->\r\n <lib-email-scheduler></lib-email-scheduler>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Report Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-report-configuration></lib-report-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >User Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-user-configuration></lib-user-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Domain Details</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-domain-details></lib-domain-details> \r\n </ng-template>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Feature Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-feature-configuration></lib-feature-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".settings-accordian-card{border-radius:10px;background:var(#FFF)}\n"] }]
198
198
  }], ctorParameters: () => [{ type: i1.ClientApiService }, { type: i2.ToastService }, { type: i3.GlobalStateService }], propDecorators: { accordion: [{
199
199
  type: ViewChild,
200
200
  args: ['accordion', { static: true }]
201
201
  }] } });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy9jb25maWd1cmF0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLHVCQUF1QjtJQVdkO0lBQXFDO0lBQThCO0lBVnZGLFVBQVUsQ0FBTTtJQUNDLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLHNCQUFzQixDQUFNO0lBQzVCLHVCQUF1QixDQUFNO0lBQzdCLHNCQUFzQixDQUFNO0lBQzVCLG9CQUFvQixDQUFNO0lBQ2dCLFNBQVMsQ0FBTTtJQUl6RCxZQUFvQixTQUEyQixFQUFVLE9BQXFCLEVBQVMsRUFBcUI7UUFBeEYsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFjO1FBQVMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDMUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMzRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dC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QUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQ3pELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDckM7aUJBQ0o7cUJBQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JDO2FBQ0o7U0FDSjtRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQzt3R0FuTVksdUJBQXVCOzRGQUF2Qix1QkFBdUIsZ0xDWHBDLDQvTkE2SVU7OzRGRGxJRyx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usb0JBQW9CO2lKQVdZLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2xpZW50QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NsaWVudC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jb25maWd1cmF0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgY2xpZW50RGF0YTogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHRpY2tldENvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICBmZWF0dXJlQ29uZmlnUHJldlZhbHVlczogYW55O1xyXG4gIGRvbWFpbkNvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICB1c2VyQ29uZmlnUHJldlZhbHVlczogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ2FjY29yZGlvbicsIHsgc3RhdGljOiB0cnVlIH0pIGFjY29yZGlvbjogYW55O1xyXG5cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2xpZW50QXBpOiBDbGllbnRBcGlTZXJ2aWNlLCBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0U2VydmljZSwgcHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAnc3VibWl0Jykge1xyXG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybShlKVxyXG4gICAgICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gJ2NhbmNlbCcpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Rm9ybShlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudERhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50RGF0YSA9IGVcclxuICAgICAgICB0aGlzLnBvcHVsYXRlVGlja2V0Q29uZmlndXJhdGlvbihlKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbihlKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKGUpXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZVVzZXJDb25maWd1cmF0aW9uKGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9wZW5JdGVtKCkge1xyXG4gICAgdGhpcy5wb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgdGhpcy5wb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgIHRoaXMucG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgIHRoaXMucG9wdWxhdGVVc2VyQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24oZGF0YTogYW55KSB7XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBpbnN0YWxsYXRpb25SZUFzc2lnbjogZGF0YT8udGlja2V0Q29uZmlncz8uaW5zdGFsbGF0aW9uUmVBc3NpZ24sXHJcbiAgICAgIHNlbmRUb0FkbWluOiBkYXRhPy50aWNrZXRDb25maWdzPy5hbGVydFNlbnRUbz8uYWRtaW4sXHJcbiAgICAgIHNlbmRUb1VzZXI6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmFsZXJ0U2VudFRvPy51c2VyLFxyXG4gICAgICBkb3duVGltZVR5cGU6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmRvd25UaW1lVHlwZSxcclxuICAgICAgaW5mcmFEb3duVGltZTogZGF0YT8udGlja2V0Q29uZmlncz8uaW5mcmFEb3duVGltZSxcclxuICAgICAgTWluRmlsZXNDb3VudDogZGF0YT8udGlja2V0Q29uZmlncz8uTWluRmlsZXNDb3VudCxcclxuICAgICAgaXNSY2FUaWNrZXRBc3NpZ246IGRhdGE/LnRpY2tldENvbmZpZ3M/LmlzUmNhVGlja2V0QXNzaWduLFxyXG4gICAgICByY2FUaWNrZXRBc3NpZ246IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJjYVRpY2tldEFzc2lnbixcclxuICAgICAgaXNSZWZyZXNoQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmlzUmVmcmVzaEFsZXJ0LFxyXG4gICAgICByZWZyZXNoQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJlZnJlc2hBbGVydCxcclxuICAgICAgaXNTdGF0dXNDaGVja0FsZXJ0OiBkYXRhPy50aWNrZXRDb25maWdzPy5pc1N0YXR1c0NoZWNrQWxlcnQsXHJcbiAgICAgIHN0YXR1c0NoZWNrQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LnN0YXR1c0NoZWNrQWxlcnQsXHJcbiAgICAgIHJlVHJhaW46IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJlVHJhaW4sXHJcbiAgICAgIGFjY3VyYWN5UGVyY2VudGFnZTogZGF0YT8udGlja2V0Q29uZmlncz8uYWNjdXJhY3lQZXJjZW50YWdlLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGlja2V0Q29uZmlnUHJldlZhbHVlcyA9IG9ialxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ3RpY2tldC1jb25maWd1cmF0aW9uJyB9KVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIG9wZW46IGRhdGE/LmZlYXR1cmVDb25maWdzPy5vcGVuLFxyXG4gICAgICBjbG9zZTogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmNsb3NlLFxyXG4gICAgICBpbmZyYUFsZXJ0Q29uZGl0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaW5mcmFBbGVydD8uY29uZGl0aW9uLFxyXG4gICAgICBpbmZyYUFsZXJ0VmFsdWU6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pbmZyYUFsZXJ0Py52YWx1ZSxcclxuICAgICAgYm91bmNlZExpbWl0Q29uZGl0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uYm91bmNlZExpbWl0Py5jb25kaXRpb24sXHJcbiAgICAgIGJvdW5jZWRMaW1pdFZhbHVlOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uYm91bmNlZExpbWl0Py52YWx1ZSxcclxuICAgICAgY29udmVyc2lvbkNvbmRpdGlvbjogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmNvbnZlcnNpb24/LmNvbmRpdGlvbixcclxuICAgICAgY29udmVyc2lvblZhbHVlOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uY29udmVyc2lvbj8udmFsdWUsXHJcbiAgICAgIGJpbGxhYmxlQ2FsY3VsYXRpb246IGRhdGE/LmZlYXR1cmVDb25maWdzPy5iaWxsYWJsZUNhbGN1bGF0aW9uLFxyXG4gICAgICBtaXNzZWRPcHBvcnR1bml0eUNhbGN1bGF0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8ubWlzc2VkT3Bwb3J0dW5pdHlDYWxjdWxhdGlvbixcclxuICAgICAgY29udmVyc2lvbkNhbGN1bGF0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uY29udmVyc2lvbkNhbGN1bGF0aW9uLFxyXG4gICAgICBpc05vcm1hbGl6ZWQ6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05vcm1hbGl6ZWQsXHJcbiAgICAgIGlzUGFzc2VyQnlEYXRhOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNQYXNzZXJCeURhdGEsXHJcbiAgICAgIGlzRm9vdGZhbGxEaXJlY3Rvcnk6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0Zvb3RmYWxsRGlyZWN0b3J5LFxyXG4gICAgICBpc0V4Y2x1ZGVkQXJlYTpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNFeGNsdWRlZEFyZWEsXHJcbiAgICAgIGlzQ2FtZXJhRGlzYWJsZWQ6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0NhbWVyYURpc2FibGVkLFxyXG4gICAgICBpc2JpbGxpbmdEaXNhYmxlZDpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNiaWxsaW5nRGlzYWJsZWQsXHJcbiAgICAgIGlzTmV3RGFzaGJvYXJkOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05ld0Rhc2hib2FyZCxcclxuICAgICAgdXBkYXRlRmVhdHVyZUNvbmZpZzpkYXRhPy5mZWF0dXJlQ29uZmlncz8udXBkYXRlRmVhdHVyZUNvbmZpZ1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmVhdHVyZUNvbmZpZ1ByZXZWYWx1ZXMgPSBvYmpcclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ2ZlYXR1cmUtY29uZmlndXJhdGlvbicgfSlcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlRG9tYWluRGV0YWlsQ29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIGRvbWFpbk5hbWU6IGRhdGE/LnNzb0xvZ2luPy5kb21haW5OYW1lLFxyXG4gICAgICBpc0VuYWJsZTogZGF0YT8uc3NvTG9naW4/LmlzRW5hYmxlLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG9tYWluQ29uZmlnUHJldlZhbHVlcyA9IG9ialxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ2RvbWFpbi1kZXRhaWxzJyB9KVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVVc2VyQ29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIGNzbTogZGF0YT8uYXNzaWduZWRVc2Vycz8uY3NtLFxyXG4gICAgICBvcHM6IGRhdGE/LmFzc2lnbmVkVXNlcnM/Lm9wcyxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVzZXJDb25maWdQcmV2VmFsdWVzID0gb2JqXHJcblxyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiB7IC4uLm9iaiB9LCB0eXBlOiAnaW5wdXQnLCBmb3JtOiAndXNlci1jb25maWd1cmF0aW9uJyB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzdWJtaXRGb3JtKGU6IGFueSkge1xyXG4gICAgaWYgKGUuZm9ybSA9PT0gJ3RpY2tldC1jb25maWd1cmF0aW9uJykge1xyXG4gICAgICBjb25zdCBkYXRhID0gIHRoaXMuZ2V0RGlmZmVyZW50RW50cmllcyh0aGlzLnRpY2tldENvbmZpZ1ByZXZWYWx1ZXMsIGUudmFsdWUpICAgICBcclxuICAgICAgdGhpcy5jbGllbnRBcGkudXBkYXRlVGlja2V0Q29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEuY2xpZW50SWQsIGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0U3VjY2Vzc1RvYXN0KGUuZGF0YT8ucmVzdWx0KVxyXG4gICAgICAgICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiBudWxsLCB0eXBlOiAnc3VibWl0dGVkJywgZm9ybTogJ251bGwnIH0pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGUuZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB9IGVsc2VcclxuICAgICAgaWYgKGUuZm9ybSA9PT0gJ2ZlYXR1cmUtY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gIHRoaXMuZ2V0RGlmZmVyZW50RW50cmllcyh0aGlzLmZlYXR1cmVDb25maWdQcmV2VmFsdWVzLCBlLnZhbHVlKVxyXG4gICAgICAgIHRoaXMuY2xpZW50QXBpLnVwZGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YS5jbGllbnRJZCwgZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0U3VjY2Vzc1RvYXN0KGUuZGF0YT8ucmVzdWx0KVxyXG4gICAgICAgICAgICB0aGlzLmNsaWVudEFwaS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IG51bGwsIHR5cGU6ICdzdWJtaXR0ZWQnLCBmb3JtOiAnbnVsbCcgfSlcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLmdldEVycm9yVG9hc3QoZS5lcnJvcj8uZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGlmIChlLmZvcm0gPT09ICdkb21haW4tZGV0YWlscycpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSAgdGhpcy5nZXREaWZmZXJlbnRFbnRyaWVzKHRoaXMuZG9tYWluQ29uZmlnUHJldlZhbHVlcywgZS52YWx1ZSkgICAgIFxyXG4gICAgICAgICAgdGhpcy5jbGllbnRBcGkudXBkYXRlRG9tYWluRGV0YWlsQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEuY2xpZW50SWQsIGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoZS5kYXRhPy5yZXN1bHQpXHJcbiAgICAgICAgICAgICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiBudWxsLCB0eXBlOiAnc3VibWl0dGVkJywgZm9ybTogJ251bGwnIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGUuZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0Rm9ybShlOiBhbnkpIHtcclxuICAgIGlmIChlLmZvcm0gPT09ICd0aWNrZXQtY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgdGhpcy5wb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgfSBlbHNlXHJcbiAgICAgIGlmIChlLmZvcm0gPT09ICdmZWF0dXJlLWNvbmZpZ3VyYXRpb24nKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgaWYgKGUuZm9ybSA9PT0gJ2RvbWFpbi1kZXRhaWxzJykge1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZURvbWFpbkRldGFpbENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgaWYgKGUuZm9ybSA9PT0gJ3VzZXItY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZVVzZXJDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmFjY29yZGlvbi5jb2xsYXBzZUFsbCgpXHJcblxyXG4gIH1cclxuXHJcbiBnZXREaWZmZXJlbnRFbnRyaWVzKG9iajE6IFJlY29yZDxzdHJpbmcsIGFueT4sIG9iajI6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGNvbnN0IGRpZmZlcmVudEVudHJpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iajIpIHtcclxuICAgICAgICBpZiAob2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iajFba2V5XSkgJiYgQXJyYXkuaXNBcnJheShvYmoyW2tleV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2JqMVtrZXldKSAhPT0gSlNPTi5zdHJpbmdpZnkob2JqMltrZXldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudEVudHJpZXNba2V5XSA9IG9iajJba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50RW50cmllc1trZXldID0gb2JqMltrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpZmZlcmVudEVudHJpZXM7XHJcbn1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIFtjbG9zZU90aGVyc109XCJ0cnVlXCIgW2Rlc3Ryb3lPbkhpZGVdPVwidHJ1ZVwiICAoc2hvdyk9XCJvcGVuSXRlbSgpXCIgPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nIFwiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNiBcIiAgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkF1ZGl0IENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1hdWRpdC1jb25maWd1cmF0aW9uPjwvbGliLWF1ZGl0LWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkVtcGxveWVlIFRyYWluaW5nPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXBsb3llZS10cmFpbmluZz48L2xpYi1lbXBsb3llZS10cmFpbmluZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyBcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+VGlja2V0IENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10aWNrZXQtY29uZmlndXJhdGlvbj48L2xpYi10aWNrZXQtY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyBcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+RW1haWwgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtYWlsLWNvbmZpZ3VyYXRpb24+PC9saWItZW1haWwtY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyBcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+UmVwb3J0IENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZXBvcnQtY29uZmlndXJhdGlvbj48L2xpYi1yZXBvcnQtY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyBcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+VXNlciBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItdXNlci1jb25maWd1cmF0aW9uPjwvbGliLXVzZXItY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiICBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+RG9tYWluIERldGFpbHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLWRvbWFpbi1kZXRhaWxzPjwvbGliLWRvbWFpbi1kZXRhaWxzPiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5GZWF0dXJlIENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1mZWF0dXJlLWNvbmZpZ3VyYXRpb24+PC9saWItZmVhdHVyZS1jb25maWd1cmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+Il19
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy9jb25maWd1cmF0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLHVCQUF1QjtJQVdkO0lBQXFDO0lBQThCO0lBVnZGLFVBQVUsQ0FBTTtJQUNDLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLHNCQUFzQixDQUFNO0lBQzVCLHVCQUF1QixDQUFNO0lBQzdCLHNCQUFzQixDQUFNO0lBQzVCLG9CQUFvQixDQUFNO0lBQ2dCLFNBQVMsQ0FBTTtJQUl6RCxZQUFvQixTQUEyQixFQUFVLE9BQXFCLEVBQVMsRUFBcUI7UUFBeEYsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFjO1FBQVMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDMUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMzRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dC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QUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQ3pELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDckM7aUJBQ0o7cUJBQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNoQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JDO2FBQ0o7U0FDSjtRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQzt3R0FuTVksdUJBQXVCOzRGQUF2Qix1QkFBdUIsZ0xDWHBDLGlsT0E4SVU7OzRGRG5JRyx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usb0JBQW9CO2lKQVdZLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2xpZW50QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NsaWVudC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jb25maWd1cmF0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgY2xpZW50RGF0YTogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHRpY2tldENvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICBmZWF0dXJlQ29uZmlnUHJldlZhbHVlczogYW55O1xyXG4gIGRvbWFpbkNvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICB1c2VyQ29uZmlnUHJldlZhbHVlczogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ2FjY29yZGlvbicsIHsgc3RhdGljOiB0cnVlIH0pIGFjY29yZGlvbjogYW55O1xyXG5cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2xpZW50QXBpOiBDbGllbnRBcGlTZXJ2aWNlLCBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0U2VydmljZSwgcHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAnc3VibWl0Jykge1xyXG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybShlKVxyXG4gICAgICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gJ2NhbmNlbCcpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Rm9ybShlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudERhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50RGF0YSA9IGVcclxuICAgICAgICB0aGlzLnBvcHVsYXRlVGlja2V0Q29uZmlndXJhdGlvbihlKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbihlKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKGUpXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZVVzZXJDb25maWd1cmF0aW9uKGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9wZW5JdGVtKCkge1xyXG4gICAgdGhpcy5wb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgdGhpcy5wb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgIHRoaXMucG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgIHRoaXMucG9wdWxhdGVVc2VyQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24oZGF0YTogYW55KSB7XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBpbnN0YWxsYXRpb25SZUFzc2lnbjogZGF0YT8udGlja2V0Q29uZmlncz8uaW5zdGFsbGF0aW9uUmVBc3NpZ24sXHJcbiAgICAgIHNlbmRUb0FkbWluOiBkYXRhPy50aWNrZXRDb25maWdzPy5hbGVydFNlbnRUbz8uYWRtaW4sXHJcbiAgICAgIHNlbmRUb1VzZXI6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmFsZXJ0U2VudFRvPy51c2VyLFxyXG4gICAgICBkb3duVGltZVR5cGU6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmRvd25UaW1lVHlwZSxcclxuICAgICAgaW5mcmFEb3duVGltZTogZGF0YT8udGlja2V0Q29uZmlncz8uaW5mcmFEb3duVGltZSxcclxuICAgICAgTWluRmlsZXNDb3VudDogZGF0YT8udGlja2V0Q29uZmlncz8uTWluRmlsZXNDb3VudCxcclxuICAgICAgaXNSY2FUaWNrZXRBc3NpZ246IGRhdGE/LnRpY2tldENvbmZpZ3M/LmlzUmNhVGlja2V0QXNzaWduLFxyXG4gICAgICByY2FUaWNrZXRBc3NpZ246IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJjYVRpY2tldEFzc2lnbixcclxuICAgICAgaXNSZWZyZXNoQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmlzUmVmcmVzaEFsZXJ0LFxyXG4gICAgICByZWZyZXNoQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJlZnJlc2hBbGVydCxcclxuICAgICAgaXNTdGF0dXNDaGVja0FsZXJ0OiBkYXRhPy50aWNrZXRDb25maWdzPy5pc1N0YXR1c0NoZWNrQWxlcnQsXHJcbiAgICAgIHN0YXR1c0NoZWNrQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LnN0YXR1c0NoZWNrQWxlcnQsXHJcbiAgICAgIHJlVHJhaW46IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJlVHJhaW4sXHJcbiAgICAgIGFjY3VyYWN5UGVyY2VudGFnZTogZGF0YT8udGlja2V0Q29uZmlncz8uYWNjdXJhY3lQZXJjZW50YWdlLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGlja2V0Q29uZmlnUHJldlZhbHVlcyA9IG9ialxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ3RpY2tldC1jb25maWd1cmF0aW9uJyB9KVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIG9wZW46IGRhdGE/LmZlYXR1cmVDb25maWdzPy5vcGVuLFxyXG4gICAgICBjbG9zZTogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmNsb3NlLFxyXG4gICAgICBpbmZyYUFsZXJ0Q29uZGl0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaW5mcmFBbGVydD8uY29uZGl0aW9uLFxyXG4gICAgICBpbmZyYUFsZXJ0VmFsdWU6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pbmZyYUFsZXJ0Py52YWx1ZSxcclxuICAgICAgYm91bmNlZExpbWl0Q29uZGl0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uYm91bmNlZExpbWl0Py5jb25kaXRpb24sXHJcbiAgICAgIGJvdW5jZWRMaW1pdFZhbHVlOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uYm91bmNlZExpbWl0Py52YWx1ZSxcclxuICAgICAgY29udmVyc2lvbkNvbmRpdGlvbjogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmNvbnZlcnNpb24/LmNvbmRpdGlvbixcclxuICAgICAgY29udmVyc2lvblZhbHVlOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uY29udmVyc2lvbj8udmFsdWUsXHJcbiAgICAgIGJpbGxhYmxlQ2FsY3VsYXRpb246IGRhdGE/LmZlYXR1cmVDb25maWdzPy5iaWxsYWJsZUNhbGN1bGF0aW9uLFxyXG4gICAgICBtaXNzZWRPcHBvcnR1bml0eUNhbGN1bGF0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8ubWlzc2VkT3Bwb3J0dW5pdHlDYWxjdWxhdGlvbixcclxuICAgICAgY29udmVyc2lvbkNhbGN1bGF0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uY29udmVyc2lvbkNhbGN1bGF0aW9uLFxyXG4gICAgICBpc05vcm1hbGl6ZWQ6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05vcm1hbGl6ZWQsXHJcbiAgICAgIGlzUGFzc2VyQnlEYXRhOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNQYXNzZXJCeURhdGEsXHJcbiAgICAgIGlzRm9vdGZhbGxEaXJlY3Rvcnk6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0Zvb3RmYWxsRGlyZWN0b3J5LFxyXG4gICAgICBpc0V4Y2x1ZGVkQXJlYTpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNFeGNsdWRlZEFyZWEsXHJcbiAgICAgIGlzQ2FtZXJhRGlzYWJsZWQ6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0NhbWVyYURpc2FibGVkLFxyXG4gICAgICBpc2JpbGxpbmdEaXNhYmxlZDpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNiaWxsaW5nRGlzYWJsZWQsXHJcbiAgICAgIGlzTmV3RGFzaGJvYXJkOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05ld0Rhc2hib2FyZCxcclxuICAgICAgdXBkYXRlRmVhdHVyZUNvbmZpZzpkYXRhPy5mZWF0dXJlQ29uZmlncz8udXBkYXRlRmVhdHVyZUNvbmZpZ1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmVhdHVyZUNvbmZpZ1ByZXZWYWx1ZXMgPSBvYmpcclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ2ZlYXR1cmUtY29uZmlndXJhdGlvbicgfSlcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlRG9tYWluRGV0YWlsQ29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIGRvbWFpbk5hbWU6IGRhdGE/LnNzb0xvZ2luPy5kb21haW5OYW1lLFxyXG4gICAgICBpc0VuYWJsZTogZGF0YT8uc3NvTG9naW4/LmlzRW5hYmxlLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG9tYWluQ29uZmlnUHJldlZhbHVlcyA9IG9ialxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ2RvbWFpbi1kZXRhaWxzJyB9KVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVVc2VyQ29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIGNzbTogZGF0YT8uYXNzaWduZWRVc2Vycz8uY3NtLFxyXG4gICAgICBvcHM6IGRhdGE/LmFzc2lnbmVkVXNlcnM/Lm9wcyxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVzZXJDb25maWdQcmV2VmFsdWVzID0gb2JqXHJcblxyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiB7IC4uLm9iaiB9LCB0eXBlOiAnaW5wdXQnLCBmb3JtOiAndXNlci1jb25maWd1cmF0aW9uJyB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzdWJtaXRGb3JtKGU6IGFueSkge1xyXG4gICAgaWYgKGUuZm9ybSA9PT0gJ3RpY2tldC1jb25maWd1cmF0aW9uJykge1xyXG4gICAgICBjb25zdCBkYXRhID0gIHRoaXMuZ2V0RGlmZmVyZW50RW50cmllcyh0aGlzLnRpY2tldENvbmZpZ1ByZXZWYWx1ZXMsIGUudmFsdWUpICAgICBcclxuICAgICAgdGhpcy5jbGllbnRBcGkudXBkYXRlVGlja2V0Q29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEuY2xpZW50SWQsIGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0U3VjY2Vzc1RvYXN0KGUuZGF0YT8ucmVzdWx0KVxyXG4gICAgICAgICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiBudWxsLCB0eXBlOiAnc3VibWl0dGVkJywgZm9ybTogJ251bGwnIH0pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGUuZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB9IGVsc2VcclxuICAgICAgaWYgKGUuZm9ybSA9PT0gJ2ZlYXR1cmUtY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gIHRoaXMuZ2V0RGlmZmVyZW50RW50cmllcyh0aGlzLmZlYXR1cmVDb25maWdQcmV2VmFsdWVzLCBlLnZhbHVlKVxyXG4gICAgICAgIHRoaXMuY2xpZW50QXBpLnVwZGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YS5jbGllbnRJZCwgZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0U3VjY2Vzc1RvYXN0KGUuZGF0YT8ucmVzdWx0KVxyXG4gICAgICAgICAgICB0aGlzLmNsaWVudEFwaS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IG51bGwsIHR5cGU6ICdzdWJtaXR0ZWQnLCBmb3JtOiAnbnVsbCcgfSlcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLmdldEVycm9yVG9hc3QoZS5lcnJvcj8uZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGlmIChlLmZvcm0gPT09ICdkb21haW4tZGV0YWlscycpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSAgdGhpcy5nZXREaWZmZXJlbnRFbnRyaWVzKHRoaXMuZG9tYWluQ29uZmlnUHJldlZhbHVlcywgZS52YWx1ZSkgICAgIFxyXG4gICAgICAgICAgdGhpcy5jbGllbnRBcGkudXBkYXRlRG9tYWluRGV0YWlsQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEuY2xpZW50SWQsIGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoZS5kYXRhPy5yZXN1bHQpXHJcbiAgICAgICAgICAgICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiBudWxsLCB0eXBlOiAnc3VibWl0dGVkJywgZm9ybTogJ251bGwnIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGUuZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0Rm9ybShlOiBhbnkpIHtcclxuICAgIGlmIChlLmZvcm0gPT09ICd0aWNrZXQtY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgdGhpcy5wb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgfSBlbHNlXHJcbiAgICAgIGlmIChlLmZvcm0gPT09ICdmZWF0dXJlLWNvbmZpZ3VyYXRpb24nKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgaWYgKGUuZm9ybSA9PT0gJ2RvbWFpbi1kZXRhaWxzJykge1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZURvbWFpbkRldGFpbENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgaWYgKGUuZm9ybSA9PT0gJ3VzZXItY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZVVzZXJDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmFjY29yZGlvbi5jb2xsYXBzZUFsbCgpXHJcblxyXG4gIH1cclxuXHJcbiBnZXREaWZmZXJlbnRFbnRyaWVzKG9iajE6IFJlY29yZDxzdHJpbmcsIGFueT4sIG9iajI6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGNvbnN0IGRpZmZlcmVudEVudHJpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iajIpIHtcclxuICAgICAgICBpZiAob2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iajFba2V5XSkgJiYgQXJyYXkuaXNBcnJheShvYmoyW2tleV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2JqMVtrZXldKSAhPT0gSlNPTi5zdHJpbmdpZnkob2JqMltrZXldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudEVudHJpZXNba2V5XSA9IG9iajJba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50RW50cmllc1trZXldID0gb2JqMltrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpZmZlcmVudEVudHJpZXM7XHJcbn1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIFtjbG9zZU90aGVyc109XCJ0cnVlXCIgW2Rlc3Ryb3lPbkhpZGVdPVwidHJ1ZVwiICAoc2hvdyk9XCJvcGVuSXRlbSgpXCIgPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nIFwiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNiBcIiAgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkF1ZGl0IENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1hdWRpdC1jb25maWd1cmF0aW9uPjwvbGliLWF1ZGl0LWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkVtcGxveWVlIFRyYWluaW5nPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXBsb3llZS10cmFpbmluZz48L2xpYi1lbXBsb3llZS10cmFpbmluZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyBcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+VGlja2V0IENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi10aWNrZXQtY29uZmlndXJhdGlvbj48L2xpYi10aWNrZXQtY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyBcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+RW1haWwgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaWItZW1haWwtY29uZmlndXJhdGlvbj48L2xpYi1lbWFpbC1jb25maWd1cmF0aW9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWVtYWlsLXNjaGVkdWxlcj48L2xpYi1lbWFpbC1zY2hlZHVsZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlJlcG9ydCBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVwb3J0LWNvbmZpZ3VyYXRpb24+PC9saWItcmVwb3J0LWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlVzZXIgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXVzZXItY29uZmlndXJhdGlvbj48L2xpYi11c2VyLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiAgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkRvbWFpbiBEZXRhaWxzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1kb21haW4tZGV0YWlscz48L2xpYi1kb21haW4tZGV0YWlscz4gICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+RmVhdHVyZSBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZmVhdHVyZS1jb25maWd1cmF0aW9uPjwvbGliLWZlYXR1cmUtY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PiJdfQ==