@csmart/ngc-smart-victim 1.14.44 → 1.14.45

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/README.md +25 -25
  2. package/esm2020/lib/caseNote/caseNote.component.mjs +194 -0
  3. package/esm2020/lib/common-dialog/common-dialog.component.mjs +23 -0
  4. package/esm2020/lib/common-dialog/common-dialog.module.mjs +34 -0
  5. package/esm2020/lib/common-dialog/common-dialog.service.mjs +33 -0
  6. package/esm2020/lib/contact/contact.component.mjs +140 -0
  7. package/esm2020/lib/email.services.mjs +42 -0
  8. package/esm2020/lib/intake.service.mjs +57 -0
  9. package/esm2020/lib/safetyPlan/serviceProvider.component.mjs +99 -0
  10. package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -0
  11. package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -0
  12. package/esm2020/lib/shared/app.shared.module.mjs +215 -0
  13. package/esm2020/lib/shared/validators/date.validator.mjs +59 -0
  14. package/esm2020/lib/smart-victim-delete-confirm.component.mjs +44 -0
  15. package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +1104 -0
  16. package/esm2020/lib/smart-victim.component.mjs +314 -0
  17. package/esm2020/lib/smart-victim.model.mjs +133 -0
  18. package/esm2020/lib/smart-victim.module.mjs +128 -0
  19. package/esm2020/lib/smart-victim.service.mjs +352 -0
  20. package/{esm2022 → esm2020}/lib/victim-routing.module.mjs +5 -5
  21. package/esm2020/lib/victimSearch/VictimSearchFilter.mjs +3 -0
  22. package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +38 -0
  23. package/{esm2022 → esm2020}/public-api.mjs +1 -1
  24. package/fesm2015/csmart-ngc-smart-victim.mjs +3273 -0
  25. package/fesm2015/csmart-ngc-smart-victim.mjs.map +1 -0
  26. package/fesm2020/csmart-ngc-smart-victim.mjs +3261 -0
  27. package/fesm2020/csmart-ngc-smart-victim.mjs.map +1 -0
  28. package/lib/caseNote/caseNote.component.d.ts +2 -2
  29. package/lib/common-dialog/common-dialog.component.d.ts +1 -1
  30. package/lib/contact/contact.component.d.ts +1 -1
  31. package/lib/safetyPlan/serviceProvider.component.d.ts +1 -1
  32. package/lib/safetyPlan/victimSafetyPlan.component.d.ts +2 -2
  33. package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +2 -2
  34. package/lib/smart-victim-delete-confirm.component.d.ts +1 -1
  35. package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +2 -2
  36. package/lib/smart-victim.component.d.ts +2 -2
  37. package/lib/victimSearch/victimSearchForm.component.d.ts +1 -1
  38. package/package.json +11 -5
  39. package/esm2022/lib/caseNote/caseNote.component.mjs +0 -219
  40. package/esm2022/lib/common-dialog/common-dialog.component.mjs +0 -26
  41. package/esm2022/lib/common-dialog/common-dialog.module.mjs +0 -34
  42. package/esm2022/lib/common-dialog/common-dialog.service.mjs +0 -34
  43. package/esm2022/lib/contact/contact.component.mjs +0 -158
  44. package/esm2022/lib/email.services.mjs +0 -43
  45. package/esm2022/lib/intake.service.mjs +0 -59
  46. package/esm2022/lib/safetyPlan/serviceProvider.component.mjs +0 -105
  47. package/esm2022/lib/safetyPlan/victimSafetyPlan.component.mjs +0 -146
  48. package/esm2022/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +0 -372
  49. package/esm2022/lib/shared/app.shared.module.mjs +0 -215
  50. package/esm2022/lib/shared/validators/date.validator.mjs +0 -59
  51. package/esm2022/lib/smart-victim-delete-confirm.component.mjs +0 -46
  52. package/esm2022/lib/smart-victim-detail/smart-victim-detail.component.mjs +0 -1141
  53. package/esm2022/lib/smart-victim.component.mjs +0 -343
  54. package/esm2022/lib/smart-victim.model.mjs +0 -233
  55. package/esm2022/lib/smart-victim.module.mjs +0 -128
  56. package/esm2022/lib/smart-victim.service.mjs +0 -357
  57. package/esm2022/lib/victimSearch/VictimSearchFilter.mjs +0 -8
  58. package/esm2022/lib/victimSearch/victimSearchForm.component.mjs +0 -37
  59. package/fesm2022/csmart-ngc-smart-victim.mjs +0 -3556
  60. package/fesm2022/csmart-ngc-smart-victim.mjs.map +0 -1
  61. /package/{esm2022 → esm2020}/csmart-ngc-smart-victim.mjs +0 -0
  62. /package/{esm2022 → esm2020}/lib/shared/validators/index.mjs +0 -0
@@ -0,0 +1,116 @@
1
+ import { Component } from '@angular/core';
2
+ import { NgcSmartVictimService } from '../smart-victim.service';
3
+ import { MatDialog } from '@angular/material/dialog';
4
+ import { CommonDialogService } from '.././common-dialog/common-dialog.service';
5
+ import { HttpClient } from '@angular/common/http';
6
+ import { Router, ActivatedRoute } from '@angular/router';
7
+ import { SmartAuthService } from '@csmart/ngc-smart-core';
8
+ import { MatTableDataSource } from '@angular/material/table';
9
+ import { MatSnackBar } from '@angular/material/snack-bar';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../smart-victim.service";
12
+ import * as i2 from ".././common-dialog/common-dialog.service";
13
+ import * as i3 from "@angular/common/http";
14
+ import * as i4 from "@angular/material/dialog";
15
+ import * as i5 from "@angular/router";
16
+ import * as i6 from "@angular/material/snack-bar";
17
+ import * as i7 from "@csmart/ngc-smart-core";
18
+ import * as i8 from "@angular/material/button";
19
+ import * as i9 from "@angular/material/card";
20
+ import * as i10 from "@angular/material/toolbar";
21
+ import * as i11 from "@angular/material/table";
22
+ import * as i12 from "@angular/common";
23
+ export class VictimSafetyPlanComponent {
24
+ constructor(_victimServicesComponent, commonDialogService, http, dialog, route, router, snackBar, smartAuthService) {
25
+ this._victimServicesComponent = _victimServicesComponent;
26
+ this.commonDialogService = commonDialogService;
27
+ this.http = http;
28
+ this.dialog = dialog;
29
+ this.route = route;
30
+ this.router = router;
31
+ this.snackBar = snackBar;
32
+ this.smartAuthService = smartAuthService;
33
+ this.editSafetyPlan = {};
34
+ this.safetyPlanDataSource = new MatTableDataSource();
35
+ }
36
+ ngAfterViewInit() {
37
+ this.smartAuthService.setPermission('Victim', this.route.snapshot);
38
+ }
39
+ ngOnInit() {
40
+ var data = this.route.snapshot.data;
41
+ this.loginStaff = data.loginStaff;
42
+ this.staffId = this.loginStaff.staffId;
43
+ this.sub = this.route.params.subscribe(params => {
44
+ this.victimId = params['victimId'];
45
+ });
46
+ this.hiddenAddNewFlag = false;
47
+ this.victimName = this.victimName;
48
+ this._victimServicesComponent.getSafetyPlans(this.victimId).subscribe(victimSafetyPlans => {
49
+ this.victimSafetyPlans = victimSafetyPlans;
50
+ this.safetyPlanDataSource.data = this.victimSafetyPlans;
51
+ console.log('this.victimSafetyPlans');
52
+ console.log(this.victimSafetyPlans);
53
+ });
54
+ // this.myVictimServiceId =1;
55
+ // this._victimServicesComponent.getVictimServiceDetail(this.myVictimServiceId).subscribe(
56
+ // victimServiceDetail => {
57
+ // this.victimServiceDetail = victimServiceDetail;
58
+ // console.log('service detail');
59
+ // console.log(this.victimServiceDetail);
60
+ // }
61
+ // );
62
+ this._victimServicesComponent.getServiceStatusHistories(1).subscribe(victimServiceStatusHistories => {
63
+ // this.victimServiceStatusHistories = victimServiceStatusHistories;
64
+ });
65
+ }
66
+ //---------------graphQL--------------------------------------
67
+ // getVictimServiceTypeProgramProviders(): Observable<VictimServiceTypeProgramProviderModel[]> {
68
+ // const queryString = `
69
+ // {
70
+ // findVictimServiceTypeProgramProviders {
71
+ // data {
72
+ // victimServiceTypeProgramProviderId
73
+ // victimServiceType
74
+ // victimProgramProvider
75
+ // }
76
+ // }
77
+ // }`;
78
+ // return this.http.post<any>(environment.smartApiUrl, { query: queryString })
79
+ // .map(result => {
80
+ // return result.data.findVictimServiceTypeProgramProviders.data;
81
+ // });
82
+ // }
83
+ goToSafetyPlanDetail(victimServiceId) {
84
+ this.router.navigate(['saftyPlanDetail', victimServiceId, this.victimId]);
85
+ }
86
+ onAddNew() {
87
+ this.hiddenDetailFlag = false;
88
+ }
89
+ onDeleteSafetyPlan(victimServiceId) {
90
+ this.commonDialogService
91
+ .confirm('', 'Do you want to delete this safety plan?', 'Yes', 'No')
92
+ .subscribe(res => {
93
+ this.result = res;
94
+ if (this.result) {
95
+ this._victimServicesComponent.deleteSafetyPlan(victimServiceId, this.staffId)
96
+ .subscribe(result => {
97
+ this.snackBar.open('delete safety plan Successfully !', '', { duration: 3000, });
98
+ this._victimServicesComponent.getSafetyPlans(this.victimId).subscribe(victimSafetyPlans => {
99
+ this.victimSafetyPlans = victimSafetyPlans;
100
+ this.safetyPlanDataSource.data = this.victimSafetyPlans;
101
+ });
102
+ });
103
+ }
104
+ });
105
+ }
106
+ back() {
107
+ this.router.navigate(['victimHome']);
108
+ }
109
+ }
110
+ /** @nocollapse */ VictimSafetyPlanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: VictimSafetyPlanComponent, deps: [{ token: i1.NgcSmartVictimService }, { token: i2.CommonDialogService }, { token: i3.HttpClient }, { token: i4.MatDialog }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i6.MatSnackBar }, { token: i7.SmartAuthService }], target: i0.ɵɵFactoryTarget.Component });
111
+ /** @nocollapse */ VictimSafetyPlanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: VictimSafetyPlanComponent, selector: "ng-component", providers: [CommonDialogService], ngImport: i0, template: "\n <mat-card>\n <mat-card-header>\n </mat-card-header>\n <mat-card-content>\n <mat-toolbar color=\"primary\">\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\n </mat-toolbar>\n <br>\n <button mat-raised-button color=\"primary\" (click)=\"goToSafetyPlanDetail(0)\" >Add Goal</button>\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\n <br>\n <br>\n <mat-table #table [dataSource]=\"safetyPlanDataSource\" class=\"example-table\">\n <ng-container matColumnDef=\"startDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"goal\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Goal</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.goal }} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"victimServiceStatus\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatus }} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"comment\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"victimServiceId\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\n <!-- <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"goToSafetyPlanDetail(row.victimServiceId)\"> \n <span class=\"glyphicon glyphicon-pencil\" ></span>&nbsp;\n <mat-icon>edit</mat-icon> \n </button> \n \n \n\n\n\n\n\n &nbsp;&nbsp;\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"onDeleteSafetyPlan(row.victimServiceId)\"> \n <span class=\"glyphicon glyphicon-trash\" ></span>&nbsp;Delete\n </button> \n </mat-cell> -->\n\n <mat-cell *matCellDef=\"let element\">\n \n <button class=\"edit-btn\" mat-icon-button color=\"primary\" matTooltip=\"Edit Safety Plan\" (click)=\"goToSafetyPlanDetail(element.victimServiceId)\">\n <i class=\"material-icons\">mode_edit</i>\n </button>\n\n &nbsp;&nbsp;\n \n <button\n class=\"delete-btn\"\n matTooltip=\"Delete Safety Plan\"\n mat-icon-button\n color=\"primary\"\n (click)=\"onDeleteSafetyPlan(element.victimServiceId)\">\n <i class=\"material-icons\">delete</i>\n </button>\n\n\n\n\n \n </mat-cell>\n\n \n \n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['startDate', 'goal', 'victimServiceStatus', 'comment', 'victimServiceId']\" class=\"example-header-row\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns:['startDate', 'goal', 'victimServiceStatus', 'comment', 'victimServiceId'];\" class=\"example-row\"></mat-row>\n </mat-table>\n \n \n</mat-card-content>\n</mat-card>", dependencies: [{ kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i9.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: i12.DatePipe, name: "date" }] });
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: VictimSafetyPlanComponent, decorators: [{
113
+ type: Component,
114
+ args: [{ providers: [CommonDialogService], template: "\n <mat-card>\n <mat-card-header>\n </mat-card-header>\n <mat-card-content>\n <mat-toolbar color=\"primary\">\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\n </mat-toolbar>\n <br>\n <button mat-raised-button color=\"primary\" (click)=\"goToSafetyPlanDetail(0)\" >Add Goal</button>\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\n <br>\n <br>\n <mat-table #table [dataSource]=\"safetyPlanDataSource\" class=\"example-table\">\n <ng-container matColumnDef=\"startDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"goal\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Goal</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.goal }} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"victimServiceStatus\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatus }} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"comment\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"victimServiceId\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\n <!-- <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"goToSafetyPlanDetail(row.victimServiceId)\"> \n <span class=\"glyphicon glyphicon-pencil\" ></span>&nbsp;\n <mat-icon>edit</mat-icon> \n </button> \n \n \n\n\n\n\n\n &nbsp;&nbsp;\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"onDeleteSafetyPlan(row.victimServiceId)\"> \n <span class=\"glyphicon glyphicon-trash\" ></span>&nbsp;Delete\n </button> \n </mat-cell> -->\n\n <mat-cell *matCellDef=\"let element\">\n \n <button class=\"edit-btn\" mat-icon-button color=\"primary\" matTooltip=\"Edit Safety Plan\" (click)=\"goToSafetyPlanDetail(element.victimServiceId)\">\n <i class=\"material-icons\">mode_edit</i>\n </button>\n\n &nbsp;&nbsp;\n \n <button\n class=\"delete-btn\"\n matTooltip=\"Delete Safety Plan\"\n mat-icon-button\n color=\"primary\"\n (click)=\"onDeleteSafetyPlan(element.victimServiceId)\">\n <i class=\"material-icons\">delete</i>\n </button>\n\n\n\n\n \n </mat-cell>\n\n \n \n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['startDate', 'goal', 'victimServiceStatus', 'comment', 'victimServiceId']\" class=\"example-header-row\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns:['startDate', 'goal', 'victimServiceStatus', 'comment', 'victimServiceId'];\" class=\"example-row\"></mat-row>\n </mat-table>\n \n \n</mat-card-content>\n</mat-card>" }]
115
+ }], ctorParameters: function () { return [{ type: i1.NgcSmartVictimService }, { type: i2.CommonDialogService }, { type: i3.HttpClient }, { type: i4.MatDialog }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.MatSnackBar }, { type: i7.SmartAuthService }]; } });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmljdGltU2FmZXR5UGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc2FmZXR5UGxhbi92aWN0aW1TYWZldHlQbGFuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zYWZldHlQbGFuL3ZpY3RpbVNhZmV0eVBsYW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUlsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPMUQsTUFBTSxPQUFPLHlCQUF5QjtJQTRCcEMsWUFFVSx3QkFBK0MsRUFDL0MsbUJBQXdDLEVBQ3hDLElBQWdCLEVBQ2pCLE1BQWlCLEVBQ2hCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZixRQUFxQixFQUNwQixnQkFBa0M7UUFQbEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUF1QjtRQUMvQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hD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LENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUksR0FBRyxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFFYixJQUFJLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7cUJBQzFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFFbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRSxDQUFDLENBQUM7b0JBRWhGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FDbkUsaUJBQWlCLENBQUMsRUFBRTt3QkFDbEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO3dCQUMzQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztvQkFDMUQsQ0FBQyxDQUNGLENBQUM7Z0JBRUQsQ0FBQyxDQUNGLENBQUM7YUFJTjtRQUVKLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFdkMsQ0FBQzs7eUlBdEpVLHlCQUF5Qjs2SEFBekIseUJBQXlCLHVDQUh6QixDQUFDLG1CQUFtQixDQUFDLDBCQ2pCbEMsaTFJQW9GVzsyRkRoRUUseUJBQXlCO2tCQUxyQyxTQUFTO2dDQUVHLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCxJbmplY3QsQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdjU21hcnRWaWN0aW1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBWaWN0aW1TYWZldHlQbGFuLFZpY3RpbVNlcnZpY2VEZXRhaWwsVmljdGltU2VydmljZVN0YXR1c0hpc3RvcnkgfSBmcm9tICcuLi9zbWFydC12aWN0aW0ubW9kZWwnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENvbW1vbkRpYWxvZ1NlcnZpY2V9IGZyb20gJy4uLy4vY29tbW9uLWRpYWxvZy9jb21tb24tZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbi8vaW1wb3J0IHsgVmljdGltU2FmZXR5UGxhbkRldGFpbENvbXBvbmVudCB9IGZyb20gJy4vdmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0ZWRPZmZlbmRlciwgTG9naW5TdGFmZiB9IGZyb20gJ0Bjc21hcnQvbmdjLXNtYXJ0LWNvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTbWFydEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGNzbWFydC9uZ2Mtc21hcnQtY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdmljdGltU2FmZXR5UGxhbi5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0NvbW1vbkRpYWxvZ1NlcnZpY2VdXG59KVxuXG5leHBvcnQgY2xhc3MgVmljdGltU2FmZXR5UGxhbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxBZnRlclZpZXdJbml0IHtcbiAgLy9zZWxlY3RlZE9mZmVuZGVyOiBTZWxlY3RlZE9mZmVuZGVyO1xuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xuICBvZmZlbmRlcklkOiBudW1iZXI7XG5cblxuICBoaWRkZW5EZXRhaWxGbGFnOmJvb2xlYW47XG4gIGhpZGRlbkFkZE5ld0ZsYWc6IGJvb2xlYW47XG4gIHNhZmV0eVBsYW5zOiBWaWN0aW1TYWZldHlQbGFuW107XG4gIHNhZmV0eVBsYW46IFZpY3RpbVNhZmV0eVBsYW47XG4gIGVkaXRTYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0gPFZpY3RpbVNhZmV0eVBsYW4+e307XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBjb250YWN0VHlwZXM6IGFueVtdO1xuICBjb250YWN0UHVycG9zZXM6IGFueVtdO1xuICB2aWN0aW1TZXJ2aWNlVHlwZXM6IGFueVtdO1xuICB2aWN0aW1TYWZldHlQbGFuczogVmljdGltU2FmZXR5UGxhbltdO1xuICB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBhbnlbXTtcbiAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllczogVmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlbXTtcbiAgcXVlcnlTdHJpbmc6IHN0cmluZztcbiAgdmljdGltU2VydmljZURldGFpbDogVmljdGltU2VydmljZURldGFpbFtdO1xuICBteVZpY3RpbVNlcnZpY2VJZDogbnVtYmVyO1xuICByZXN1bHQ6IGFueTtcbiAgdmljdGltTmFtZTogc3RyaW5nO1xuICBzdGFmZklkOiBudW1iZXI7XG4gIHZpY3RpbUlkOiBudW1iZXI7XG4gIHByaXZhdGUgc3ViOiBhbnk7XG4gIHNhZmV0eVBsYW5EYXRhU291cmNlID0gbmV3ICBNYXRUYWJsZURhdGFTb3VyY2UoKTtcbiBcbiAgY29uc3RydWN0b3IoXG4gXG4gICAgcHJpdmF0ZSBfdmljdGltU2VydmljZXNDb21wb25lbnQ6IE5nY1NtYXJ0VmljdGltU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBzbWFydEF1dGhTZXJ2aWNlOiBTbWFydEF1dGhTZXJ2aWNlLFxuICAgICBcbiAgKSB7XG4gICAgXG5cbiAgIH1cbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnNtYXJ0QXV0aFNlcnZpY2Uuc2V0UGVybWlzc2lvbignVmljdGltJywgdGhpcy5yb3V0ZS5zbmFwc2hvdCk7XG4gIH1cbiBcbiAgbmdPbkluaXQoKSB7XG5cbiAgICB2YXIgZGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcbiAgICB0aGlzLmxvZ2luU3RhZmYgPSBkYXRhLmxvZ2luU3RhZmY7XG4gICAgdGhpcy5zdGFmZklkID0gIHRoaXMubG9naW5TdGFmZi5zdGFmZklkO1xuXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMudmljdGltSWQgPSBwYXJhbXNbJ3ZpY3RpbUlkJ107XG5cbiAgICB9KTtcblxuICAgIHRoaXMuaGlkZGVuQWRkTmV3RmxhZyA9IGZhbHNlO1xuICAgIHRoaXMudmljdGltTmFtZT0gdGhpcy52aWN0aW1OYW1lO1xuICBcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRTYWZldHlQbGFucyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXG4gICAgICB2aWN0aW1TYWZldHlQbGFucyA9PiB7XG4gICAgICAgIHRoaXMudmljdGltU2FmZXR5UGxhbnMgPSB2aWN0aW1TYWZldHlQbGFuczsgXG4gICAgICAgIHRoaXMuc2FmZXR5UGxhbkRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudmljdGltU2FmZXR5UGxhbnM7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbVNhZmV0eVBsYW5zJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltU2FmZXR5UGxhbnMpO1xuXG4gIFxuICAgICAgfVxuICAgICk7XG5cbiAgICAgXG4gICAgLy8gIHRoaXMubXlWaWN0aW1TZXJ2aWNlSWQgPTE7XG4gICAgLy8gdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltU2VydmljZURldGFpbCh0aGlzLm15VmljdGltU2VydmljZUlkKS5zdWJzY3JpYmUoXG4gICAgLy8gICB2aWN0aW1TZXJ2aWNlRGV0YWlsID0+IHtcbiAgICAvLyAgICAgdGhpcy52aWN0aW1TZXJ2aWNlRGV0YWlsID0gdmljdGltU2VydmljZURldGFpbDtcbiAgICAvLyAgICAgY29uc29sZS5sb2coJ3NlcnZpY2UgZGV0YWlsJyk7XG4gICAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltU2VydmljZURldGFpbCk7IFxuICAgIC8vICAgfVxuICAgIC8vICk7XG5cbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRTZXJ2aWNlU3RhdHVzSGlzdG9yaWVzKDEpLnN1YnNjcmliZShcbiAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXMgPT4ge1xuICAgICAgIC8vIHRoaXMudmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllcyA9IHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXM7IFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgXG4vLy0tLS0tLS0tLS0tLS0tLWdyYXBoUUwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gICBnZXRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlck1vZGVsW10+IHtcbi8vICAgICBjb25zdCBxdWVyeVN0cmluZyA9IGBcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIGZpbmRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMge1xuLy8gICAgICAgICAgICAgICAgIGRhdGEge1xuLy8gICAgICAgICAgICAgICAgICAgdmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJJZFxuLy8gICAgICAgICAgICAgICAgICAgdmljdGltU2VydmljZVR5cGVcbi8vICAgICAgICAgICAgICAgICAgIHZpY3RpbVByb2dyYW1Qcm92aWRlclxuLy8gICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICB9YDtcblxuIFxuLy8gICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGVudmlyb25tZW50LnNtYXJ0QXBpVXJsLCB7IHF1ZXJ5OiBxdWVyeVN0cmluZyB9KVxuLy8gICAgICAgICAubWFwKHJlc3VsdCA9PiB7XG4vLyAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YS5maW5kVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzLmRhdGE7XG4vLyAgICAgfSk7XG4vLyB9XG5cbiAgZ29Ub1NhZmV0eVBsYW5EZXRhaWwodmljdGltU2VydmljZUlkOiBudW1iZXIpe1xuICBcbiAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgdmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXG5cbiAgfVxuICBvbkFkZE5ldygpe1xuICAgIHRoaXMuaGlkZGVuRGV0YWlsRmxhZyA9IGZhbHNlO1xuXG4gIH1cbiAgb25EZWxldGVTYWZldHlQbGFuKHZpY3RpbVNlcnZpY2VJZDogbnVtYmVyKXtcblxuICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxuICAgIC5jb25maXJtKCcnLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgc2FmZXR5IHBsYW4/JywgJ1llcycsICdObycpXG4gICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0KSB7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmRlbGV0ZVNhZmV0eVBsYW4odmljdGltU2VydmljZUlkLHRoaXMuc3RhZmZJZClcbiAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG5cbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdkZWxldGUgc2FmZXR5IHBsYW4gU3VjY2Vzc2Z1bGx5ICEnLCAnJywgeyBkdXJhdGlvbjogMzAwMCx9KTtcblxuICAgICAgICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRTYWZldHlQbGFucyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgdmljdGltU2FmZXR5UGxhbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy52aWN0aW1TYWZldHlQbGFucyA9IHZpY3RpbVNhZmV0eVBsYW5zOyBcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2FmZXR5UGxhbkRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudmljdGltU2FmZXR5UGxhbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgIFxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcblxuXG4gICAgICAgIH1cblxuICAgICB9KTtcbiAgfVxuXG4gIGJhY2soKXtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbUhvbWUnXSk7XG4gIFxuICB9XG5cblxuXG5cblxufVxuXG4iLCJcbiA8bWF0LWNhcmQ+XG4gICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG1hdC10b29sYmFyICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImNhcmQtaGVhZGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCI+U2FmZXR5IFBsYW48L2g0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC10b29sYmFyPlxuICAgICAgICA8YnI+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImdvVG9TYWZldHlQbGFuRGV0YWlsKDApXCIgPkFkZCBHb2FsPC9idXR0b24+XG4gICAgICAgICZuYnNwOyZuYnNwOzxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJiYWNrKClcIj5CYWNrPC9idXR0b24+XG4gICAgICAgIDxicj5cbiAgICAgICAgPGJyPlxuICAgICAgICA8bWF0LXRhYmxlICN0YWJsZSBbZGF0YVNvdXJjZV09XCJzYWZldHlQbGFuRGF0YVNvdXJjZVwiIGNsYXNzPVwiZXhhbXBsZS10YWJsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhcnREYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+U3RhcnQgRGF0ZTwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuc3RhcnREYXRlIHwgZGF0ZX19IDwvbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJnb2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkdvYWw8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5nb2FsIH19IDwvbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInZpY3RpbVNlcnZpY2VTdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+U3RhdHVzPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cudmljdGltU2VydmljZVN0YXR1cyB9fSA8L21hdC1jZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb21tZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNvbW1lbnQ8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5jb21tZW50IH19IDwvbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2aWN0aW1TZXJ2aWNlSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+PC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZ29Ub1NhZmV0eVBsYW5EZXRhaWwocm93LnZpY3RpbVNlcnZpY2VJZClcIj4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1wZW5jaWxcIiA+PC9zcGFuPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPiBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiBcbiAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgXG5cblxuXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25EZWxldGVTYWZldHlQbGFuKHJvdy52aWN0aW1TZXJ2aWNlSWQpXCI+ICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoXCIgPjwvc3Bhbj4mbmJzcDtEZWxldGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiBcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2VsbD4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXQtYnRuXCIgIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAgbWF0VG9vbHRpcD1cIkVkaXQgU2FmZXR5IFBsYW5cIiAoY2xpY2spPVwiZ29Ub1NhZmV0eVBsYW5EZXRhaWwoZWxlbWVudC52aWN0aW1TZXJ2aWNlSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5tb2RlX2VkaXQ8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSBTYWZldHkgUGxhblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVTYWZldHlQbGFuKGVsZW1lbnQudmljdGltU2VydmljZUlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5kZWxldGU8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2VsbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydzdGFydERhdGUnLCAnZ29hbCcsICd2aWN0aW1TZXJ2aWNlU3RhdHVzJywgJ2NvbW1lbnQnLCAndmljdGltU2VydmljZUlkJ11cIiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLXJvd1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgICAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6WydzdGFydERhdGUnLCAnZ29hbCcsICd2aWN0aW1TZXJ2aWNlU3RhdHVzJywgJ2NvbW1lbnQnLCAndmljdGltU2VydmljZUlkJ107XCIgY2xhc3M9XCJleGFtcGxlLXJvd1wiPjwvbWF0LXJvdz5cbiAgICAgICAgICAgICAgICA8L21hdC10YWJsZT5cbiAgICAgICAgICAgICAgIFxuICAgICAgIFxuPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD4iXX0=