@csmart/ngc-smart-victim 1.14.43 → 1.14.45

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. package/README.md +25 -25
  2. package/esm2020/csmart-ngc-smart-victim.mjs +4 -4
  3. package/esm2020/lib/caseNote/caseNote.component.mjs +194 -194
  4. package/esm2020/lib/common-dialog/common-dialog.component.mjs +23 -23
  5. package/esm2020/lib/common-dialog/common-dialog.module.mjs +34 -34
  6. package/esm2020/lib/common-dialog/common-dialog.service.mjs +33 -33
  7. package/esm2020/lib/contact/contact.component.mjs +140 -140
  8. package/esm2020/lib/email.services.mjs +42 -42
  9. package/esm2020/lib/intake.service.mjs +57 -57
  10. package/esm2020/lib/safetyPlan/serviceProvider.component.mjs +99 -99
  11. package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -116
  12. package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -340
  13. package/esm2020/lib/shared/app.shared.module.mjs +215 -215
  14. package/esm2020/lib/shared/validators/date.validator.mjs +59 -59
  15. package/esm2020/lib/shared/validators/index.mjs +1 -1
  16. package/esm2020/lib/smart-victim-delete-confirm.component.mjs +44 -44
  17. package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +1104 -1104
  18. package/esm2020/lib/smart-victim.component.mjs +314 -314
  19. package/esm2020/lib/smart-victim.model.mjs +133 -133
  20. package/esm2020/lib/smart-victim.module.mjs +128 -128
  21. package/esm2020/lib/smart-victim.service.mjs +352 -352
  22. package/esm2020/lib/victim-routing.module.mjs +41 -41
  23. package/esm2020/lib/victimSearch/VictimSearchFilter.mjs +3 -3
  24. package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +38 -38
  25. package/esm2020/public-api.mjs +11 -11
  26. package/fesm2015/csmart-ngc-smart-victim.mjs +3150 -3150
  27. package/fesm2015/csmart-ngc-smart-victim.mjs.map +1 -1
  28. package/fesm2020/csmart-ngc-smart-victim.mjs +3138 -3138
  29. package/fesm2020/csmart-ngc-smart-victim.mjs.map +1 -1
  30. package/index.d.ts +5 -5
  31. package/lib/caseNote/caseNote.component.d.ts +51 -51
  32. package/lib/common-dialog/common-dialog.component.d.ts +14 -14
  33. package/lib/common-dialog/common-dialog.module.d.ts +8 -8
  34. package/lib/common-dialog/common-dialog.service.d.ts +11 -11
  35. package/lib/contact/contact.component.d.ts +40 -40
  36. package/lib/email.services.d.ts +11 -11
  37. package/lib/intake.service.d.ts +57 -57
  38. package/lib/safetyPlan/serviceProvider.component.d.ts +19 -19
  39. package/lib/safetyPlan/victimSafetyPlan.component.d.ts +54 -54
  40. package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +62 -62
  41. package/lib/shared/app.shared.module.d.ts +33 -33
  42. package/lib/shared/validators/date.validator.d.ts +9 -9
  43. package/lib/shared/validators/index.d.ts +1 -1
  44. package/lib/smart-victim-delete-confirm.component.d.ts +12 -12
  45. package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +129 -129
  46. package/lib/smart-victim.component.d.ts +68 -68
  47. package/lib/smart-victim.model.d.ts +205 -205
  48. package/lib/smart-victim.module.d.ts +49 -49
  49. package/lib/smart-victim.service.d.ts +71 -71
  50. package/lib/victim-routing.module.d.ts +7 -7
  51. package/lib/victimSearch/VictimSearchFilter.d.ts +7 -7
  52. package/lib/victimSearch/victimSearchForm.component.d.ts +14 -14
  53. package/package.json +1 -1
  54. package/public-api.d.ts +7 -7
@@ -1,194 +1,194 @@
1
- import { Component } from '@angular/core';
2
- import { NgcSmartVictimService } from '../smart-victim.service';
3
- import { UntypedFormControl, UntypedFormBuilder, Validators } from '@angular/forms';
4
- import { CommonDialogService } from '.././common-dialog/common-dialog.service';
5
- import { MatSnackBar } from '@angular/material/snack-bar';
6
- import { Router, ActivatedRoute } from '@angular/router';
7
- import { SmartAuthService } from '@csmart/ngc-smart-core';
8
- import { dateValidator } from '../shared/validators';
9
- import { MatTableDataSource } from '@angular/material/table';
10
- import { EmailService } from '../email.services';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/forms";
13
- import * as i2 from "../smart-victim.service";
14
- import * as i3 from ".././common-dialog/common-dialog.service";
15
- import * as i4 from "@angular/material/snack-bar";
16
- import * as i5 from "@angular/router";
17
- import * as i6 from "@csmart/ngc-smart-core";
18
- import * as i7 from "../email.services";
19
- import * as i8 from "@angular/common";
20
- import * as i9 from "@angular/material/button";
21
- import * as i10 from "@angular/material/card";
22
- import * as i11 from "@angular/material/toolbar";
23
- import * as i12 from "@angular/cdk/text-field";
24
- import * as i13 from "@angular/material/form-field";
25
- import * as i14 from "@angular/material/input";
26
- import * as i15 from "@angular/material/datepicker";
27
- import * as i16 from "@angular/material/select";
28
- import * as i17 from "@angular/material/core";
29
- import * as i18 from "@angular/material/table";
30
- export class CaseNoteComponent {
31
- constructor(formBuilder, _victimServicesComponent, commonDialogService, snackBar, route, router, smartAuthService, emailService) {
32
- this.formBuilder = formBuilder;
33
- this._victimServicesComponent = _victimServicesComponent;
34
- this.commonDialogService = commonDialogService;
35
- this.snackBar = snackBar;
36
- this.route = route;
37
- this.router = router;
38
- this.smartAuthService = smartAuthService;
39
- this.emailService = emailService;
40
- this.editCaseNote = {};
41
- this.caseNoteDataSource = new MatTableDataSource();
42
- this.initForm();
43
- }
44
- initForm() {
45
- this.caseNoteForm = this.formBuilder.group({
46
- caseNoteDate: new UntypedFormControl('', Validators.compose([
47
- Validators.required, dateValidator()
48
- ])),
49
- contactType: new UntypedFormControl('', Validators.required),
50
- contactPurpose: new UntypedFormControl('', Validators.required),
51
- comment: new UntypedFormControl('', Validators.required)
52
- });
53
- this.caseNoteForm.markAsPristine();
54
- this.caseNoteForm.markAsUntouched();
55
- }
56
- ngAfterViewInit() {
57
- this.smartAuthService.setPermission('Victim', this.route.snapshot);
58
- }
59
- ngOnInit() {
60
- var data = this.route.snapshot.data;
61
- this.loginStaff = data.loginStaff;
62
- this.staffId = this.loginStaff.staffId;
63
- this.sub = this.route.params.subscribe(params => {
64
- this.victimId = params['victimId'];
65
- this.offenderId = params['offenderId'];
66
- });
67
- this.addDisableFlag = false;
68
- this.hiddenDetailFlag = true;
69
- this.hiddenAddNewFlag = false;
70
- this._victimServicesComponent.getVictim(this.victimId).subscribe((items) => {
71
- this.victimName = items.firstName + ', ' + items.lastName;
72
- });
73
- this._victimServicesComponent.getContactTypes().subscribe((items) => {
74
- this.contactTypes = items;
75
- });
76
- this._victimServicesComponent.getVictimContactPurposes().subscribe((items) => {
77
- this.contactPurposes = items;
78
- });
79
- this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(caseNoteList => {
80
- console.log('caseNoteList');
81
- console.log(caseNoteList);
82
- this.caseNoteList = caseNoteList;
83
- this.caseNoteDataSource.data = this.caseNoteList;
84
- });
85
- // this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(
86
- // (itms: any) => {
87
- // const ELEMENT_DATA: Element[] = itms;
88
- // this.caseNoteDataSource.data = ELEMENT_DATA;
89
- // })
90
- }
91
- onEditCaseNote(victimCaseNoteId) {
92
- this.hiddenDetailFlag = false;
93
- this.hiddenAddNewFlag = true;
94
- this.addDisableFlag = true;
95
- this.editCaseNote = this.caseNoteList.find(x => x.victimCaseNoteId === victimCaseNoteId);
96
- }
97
- onDeleteCaseNote(victimCaseNoteId) {
98
- this.commonDialogService
99
- .confirm('', 'Do you want to delete this case note?', 'Yes', 'No')
100
- .subscribe(res => {
101
- this.result = res;
102
- if (this.result) {
103
- this._victimServicesComponent.deleteCaseNote(victimCaseNoteId, this.staffId)
104
- .subscribe(result => {
105
- this.snackBar.open('delete Successfully !', '', { duration: 3000, });
106
- this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(caseNoteList => {
107
- this.caseNoteList = caseNoteList;
108
- this.caseNoteDataSource.data = this.caseNoteList;
109
- });
110
- });
111
- }
112
- });
113
- }
114
- onAddNew() {
115
- this.hiddenDetailFlag = false;
116
- this.editCaseNote.victimCaseNoteId = 0;
117
- const caseNoteDateControl = this.caseNoteForm.get('caseNoteDate');
118
- caseNoteDateControl.setValue(null);
119
- caseNoteDateControl.setErrors(null);
120
- caseNoteDateControl.markAsPristine();
121
- caseNoteDateControl.markAsPristine();
122
- const contactTypeControl = this.caseNoteForm.get('contactType');
123
- contactTypeControl.setValue(null);
124
- contactTypeControl.setErrors(null);
125
- contactTypeControl.markAsPristine();
126
- contactTypeControl.markAsUntouched();
127
- const contactPurposeControl = this.caseNoteForm.get('contactPurpose');
128
- contactPurposeControl.setValue(null);
129
- contactPurposeControl.setErrors(null);
130
- contactPurposeControl.markAsPristine();
131
- contactPurposeControl.markAsUntouched();
132
- const commentControl = this.caseNoteForm.get('comment');
133
- commentControl.setValue(null);
134
- commentControl.setErrors(null);
135
- commentControl.markAsPristine();
136
- commentControl.markAsUntouched();
137
- }
138
- back() {
139
- this.router.navigate(['victimHome']);
140
- }
141
- saveCaseNote() {
142
- this.emailService
143
- .createCaseNoteEmail("VictimCaseNoteReminders", this.offenderId, this.staffId)
144
- .subscribe();
145
- if (this.editCaseNote.victimCaseNoteId === undefined || this.editCaseNote.victimCaseNoteId === 0) {
146
- const castNote = {
147
- victimId: this.victimId,
148
- victimCaseNoteId: 0,
149
- caseNoteDate: this.editCaseNote.caseNoteDate,
150
- contactTypeId: this.editCaseNote.contactTypeId,
151
- contactType: null,
152
- victimContactPurposeId: this.editCaseNote.victimContactPurposeId,
153
- victimContactPurpose: null,
154
- comment: this.editCaseNote.comment,
155
- modifiedBy: this.staffId,
156
- victimFirstName: null,
157
- victimLastName: null
158
- };
159
- this._victimServicesComponent.addCaseNote(castNote).subscribe(result => {
160
- this.snackBar.open('Saved Successfully !', '', {
161
- duration: 3000,
162
- });
163
- // this._victimServicesComponent.sendEmail('', {referralId: 0, offenderId: this.offenderId }, this.loginStaff.staffId);
164
- this.hiddenDetailFlag = true;
165
- this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(caseNoteList => {
166
- this.caseNoteList = caseNoteList;
167
- this.caseNoteDataSource.data = this.caseNoteList;
168
- });
169
- });
170
- }
171
- else {
172
- this._victimServicesComponent.updateCaseNote(this.editCaseNote).subscribe(result => {
173
- this.snackBar.open('Update Successfully !', '', {
174
- duration: 3000,
175
- });
176
- this.hiddenDetailFlag = true;
177
- this.hiddenAddNewFlag = false;
178
- this.addDisableFlag = false;
179
- this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(caseNoteList => {
180
- this.caseNoteList = caseNoteList;
181
- this.caseNoteDataSource.data = this.caseNoteList;
182
- });
183
- });
184
- }
185
- //email
186
- }
187
- }
188
- /** @nocollapse */ CaseNoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CaseNoteComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.NgcSmartVictimService }, { token: i3.CommonDialogService }, { token: i4.MatSnackBar }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i6.SmartAuthService }, { token: i7.EmailService }], target: i0.ɵɵFactoryTarget.Component });
189
- /** @nocollapse */ CaseNoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CaseNoteComponent, selector: "ng-component", providers: [CommonDialogService], ngImport: i0, template: "\r\n <mat-card>\r\n <mat-card-header>\r\n\r\n </mat-card-header>\r\n <mat-card-content>\r\n \r\n <mat-toolbar color=\"primary\">\r\n <h4 class=\"card-header\" >Case Note</h4>\r\n </mat-toolbar>\r\n <br>\r\n <div class=\"row\" >\r\n <div [hidden]=\"hiddenAddNewFlag\">\r\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"onAddNew()\" [disabled]=\"addDisableFlag\">Add Case Note</button>\r\n\r\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n </div>\r\n </div>\r\n\r\n <div [hidden]=\"hiddenDetailFlag\" >\r\n <mat-card >\r\n <div class='container'> \r\n <form [formGroup]=\"caseNoteForm\" #caseNoteDetailForm=\"ngForm\" >\r\n \r\n <div>\r\n <mat-label>Victim Name:</mat-label>\r\n {{victimName}} \r\n </div>\r\n \r\n\r\n <div> \r\n <mat-form-field>\r\n <mat-label>Date of Case Note: </mat-label>\r\n <input matInput formControlName=\"caseNoteDate\" \r\n (click)=\"caseNoteDate.open()\" \r\n [matDatepicker]=\"caseNoteDate\" \r\n placeholder=\"Choose a start date\" \r\n [(ngModel)]=\"editCaseNote.caseNoteDate\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"caseNoteDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #caseNoteDate></mat-datepicker>\r\n\r\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('caseNoteDate').errors \r\n && (caseNoteForm.get('caseNoteDate').dirty || caseNoteForm.get('caseNoteDate').touched)\">\r\n <mat-error>case note date is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" \r\n *ngIf=\"caseNoteForm.get('caseNoteDate').hasError('date') \r\n && (caseNoteForm.get('caseNoteDate').dirty || caseNoteForm.get('caseNoteDate').touched)\">\r\n <mat-error>future case note Date is <strong>not allowed</strong></mat-error>\r\n </div>\r\n\r\n </mat-form-field>\r\n\r\n </div> \r\n \r\n \r\n\r\n <div>\r\n <mat-form-field>\r\n <mat-label>Contact Type:</mat-label>\r\n <mat-select placeholder=\"contactType\" formControlName=\"contactType\" required [(ngModel)]=\"editCaseNote.contactTypeId\">\r\n <mat-option *ngFor=\" let contactType of contactTypes\" [value]=\"contactType.contactTypeId\" >{{contactType.name}}</mat-option>\r\n </mat-select>\r\n\r\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('contactType').errors \r\n && (caseNoteForm.get('contactType').dirty || caseNoteForm.get('contactType').touched)\">\r\n <mat-error>comment is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n </div>\r\n \r\n <div> \r\n <mat-form-field class=\"mat-select-content\">\r\n <mat-label>Contact Purpose:</mat-label>\r\n <mat-select formControlName=\"contactPurpose\" required [(ngModel)]=\"editCaseNote.victimContactPurposeId\" class=\"mat-select-inner\">\r\n <mat-option *ngFor=\" let contactPurpose of contactPurposes\" [value]=\"contactPurpose.victimContactPurposeId\" >{{contactPurpose.name}}</mat-option>\r\n </mat-select>\r\n\r\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('contactPurpose').errors \r\n && (caseNoteForm.get('contactPurpose').dirty || caseNoteForm.get('contactPurpose').touched)\">\r\n <mat-error>comment is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n </mat-form-field>\r\n </div> \r\n \r\n <div>\r\n\r\n <mat-form-field style=\"width: 400px;\">\r\n <mat-label>Comment:</mat-label>\r\n <textarea \r\n class=\"textarea-content\"\r\n matInput \r\n placeholder=\"\" \r\n required formControlName=\"comment\" \r\n [(ngModel)]=\"editCaseNote.comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\">\r\n </textarea> \r\n\r\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('comment').errors \r\n && (caseNoteForm.get('comment').dirty || caseNoteForm.get('comment').touched)\">\r\n <mat-error>comment is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n </div>\r\n \r\n <div>\r\n <button mat-raised-button color=\"primary\" (click)=\"saveCaseNote()\" [disabled]=\"!caseNoteDetailForm.form.valid\" >Save</button>\r\n\r\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"hiddenDetailFlag = true;addDisableFlag = false; this.hiddenAddNewFlag = false;\">Cancel</button>\r\n </div>\r\n\r\n </form>\r\n </div>\r\n </mat-card>\r\n \r\n </div>\r\n <br>\r\n <mat-table #table [dataSource]=\"caseNoteDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"caseNoteDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Case Note Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.caseNoteDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"contactType\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Type</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactType}} </mat-cell>\r\n </ng-container>\r\n \r\n \r\n <ng-container matColumnDef=\"contactPurpose\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Purpose</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactPurpose}} </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"victimCaseNoteId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n \r\n <button \r\n class=\"sac-cso-read sac-vsp-read\" \r\n mat-icon-button \r\n color=\"primary\" \r\n matTooltip=\"Edit Case Note\" \r\n (click)=\"onEditCaseNote(row.victimCaseNoteId)\">\r\n <i class=\"material-icons\">mode_edit</i>\r\n </button>\r\n\r\n &nbsp;&nbsp;\r\n \r\n \r\n\r\n <button\r\n class=\"sac-vsp-read\"\r\n matTooltip=\"Delete Case Note\" \r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"onDeleteCaseNote(row.victimCaseNoteId)\">\r\n <i class=\"material-icons\">delete</i>\r\n </button>\r\n\r\n\r\n\r\n\r\n </mat-cell>\r\n </ng-container>\r\n \r\n <mat-header-row *matHeaderRowDef=\"['caseNoteDate', 'contactType', 'contactPurpose', 'comment', 'victimCaseNoteId']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:['caseNoteDate', 'contactType', 'contactPurpose', 'comment', 'victimCaseNoteId'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n</mat-card-content>\r\n</mat-card>", styles: [".container{width:800px;margin:16px;display:grid;grid-template-columns:repeat(1,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.mat-select-content{width:300px}.mat-select-inner{width:290px}.textarea-content{width:500px}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i9.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: i10.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i10.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i10.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i11.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i12.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i13.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i13.MatLabel, selector: "mat-label" }, { kind: "directive", type: i13.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i18.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i18.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i18.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i18.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i18.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i18.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i18.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i18.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i18.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i18.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: i8.DatePipe, name: "date" }] });
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CaseNoteComponent, decorators: [{
191
- type: Component,
192
- args: [{ providers: [CommonDialogService], template: "\r\n <mat-card>\r\n <mat-card-header>\r\n\r\n </mat-card-header>\r\n <mat-card-content>\r\n \r\n <mat-toolbar color=\"primary\">\r\n <h4 class=\"card-header\" >Case Note</h4>\r\n </mat-toolbar>\r\n <br>\r\n <div class=\"row\" >\r\n <div [hidden]=\"hiddenAddNewFlag\">\r\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"onAddNew()\" [disabled]=\"addDisableFlag\">Add Case Note</button>\r\n\r\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n </div>\r\n </div>\r\n\r\n <div [hidden]=\"hiddenDetailFlag\" >\r\n <mat-card >\r\n <div class='container'> \r\n <form [formGroup]=\"caseNoteForm\" #caseNoteDetailForm=\"ngForm\" >\r\n \r\n <div>\r\n <mat-label>Victim Name:</mat-label>\r\n {{victimName}} \r\n </div>\r\n \r\n\r\n <div> \r\n <mat-form-field>\r\n <mat-label>Date of Case Note: </mat-label>\r\n <input matInput formControlName=\"caseNoteDate\" \r\n (click)=\"caseNoteDate.open()\" \r\n [matDatepicker]=\"caseNoteDate\" \r\n placeholder=\"Choose a start date\" \r\n [(ngModel)]=\"editCaseNote.caseNoteDate\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"caseNoteDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #caseNoteDate></mat-datepicker>\r\n\r\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('caseNoteDate').errors \r\n && (caseNoteForm.get('caseNoteDate').dirty || caseNoteForm.get('caseNoteDate').touched)\">\r\n <mat-error>case note date is <strong>required</strong></mat-error>\r\n </div> \r\n\r\n <div class=\"help-block\" \r\n *ngIf=\"caseNoteForm.get('caseNoteDate').hasError('date') \r\n && (caseNoteForm.get('caseNoteDate').dirty || caseNoteForm.get('caseNoteDate').touched)\">\r\n <mat-error>future case note Date is <strong>not allowed</strong></mat-error>\r\n </div>\r\n\r\n </mat-form-field>\r\n\r\n </div> \r\n \r\n \r\n\r\n <div>\r\n <mat-form-field>\r\n <mat-label>Contact Type:</mat-label>\r\n <mat-select placeholder=\"contactType\" formControlName=\"contactType\" required [(ngModel)]=\"editCaseNote.contactTypeId\">\r\n <mat-option *ngFor=\" let contactType of contactTypes\" [value]=\"contactType.contactTypeId\" >{{contactType.name}}</mat-option>\r\n </mat-select>\r\n\r\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('contactType').errors \r\n && (caseNoteForm.get('contactType').dirty || caseNoteForm.get('contactType').touched)\">\r\n <mat-error>comment is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n </div>\r\n \r\n <div> \r\n <mat-form-field class=\"mat-select-content\">\r\n <mat-label>Contact Purpose:</mat-label>\r\n <mat-select formControlName=\"contactPurpose\" required [(ngModel)]=\"editCaseNote.victimContactPurposeId\" class=\"mat-select-inner\">\r\n <mat-option *ngFor=\" let contactPurpose of contactPurposes\" [value]=\"contactPurpose.victimContactPurposeId\" >{{contactPurpose.name}}</mat-option>\r\n </mat-select>\r\n\r\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('contactPurpose').errors \r\n && (caseNoteForm.get('contactPurpose').dirty || caseNoteForm.get('contactPurpose').touched)\">\r\n <mat-error>comment is <strong>required</strong></mat-error>\r\n </div> \r\n \r\n </mat-form-field>\r\n </div> \r\n \r\n <div>\r\n\r\n <mat-form-field style=\"width: 400px;\">\r\n <mat-label>Comment:</mat-label>\r\n <textarea \r\n class=\"textarea-content\"\r\n matInput \r\n placeholder=\"\" \r\n required formControlName=\"comment\" \r\n [(ngModel)]=\"editCaseNote.comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\">\r\n </textarea> \r\n\r\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('comment').errors \r\n && (caseNoteForm.get('comment').dirty || caseNoteForm.get('comment').touched)\">\r\n <mat-error>comment is <strong>required</strong></mat-error>\r\n </div> \r\n </mat-form-field>\r\n </div>\r\n \r\n <div>\r\n <button mat-raised-button color=\"primary\" (click)=\"saveCaseNote()\" [disabled]=\"!caseNoteDetailForm.form.valid\" >Save</button>\r\n\r\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"hiddenDetailFlag = true;addDisableFlag = false; this.hiddenAddNewFlag = false;\">Cancel</button>\r\n </div>\r\n\r\n </form>\r\n </div>\r\n </mat-card>\r\n \r\n </div>\r\n <br>\r\n <mat-table #table [dataSource]=\"caseNoteDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"caseNoteDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Case Note Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.caseNoteDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"contactType\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Type</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactType}} </mat-cell>\r\n </ng-container>\r\n \r\n \r\n <ng-container matColumnDef=\"contactPurpose\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Purpose</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactPurpose}} </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"victimCaseNoteId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n \r\n <button \r\n class=\"sac-cso-read sac-vsp-read\" \r\n mat-icon-button \r\n color=\"primary\" \r\n matTooltip=\"Edit Case Note\" \r\n (click)=\"onEditCaseNote(row.victimCaseNoteId)\">\r\n <i class=\"material-icons\">mode_edit</i>\r\n </button>\r\n\r\n &nbsp;&nbsp;\r\n \r\n \r\n\r\n <button\r\n class=\"sac-vsp-read\"\r\n matTooltip=\"Delete Case Note\" \r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"onDeleteCaseNote(row.victimCaseNoteId)\">\r\n <i class=\"material-icons\">delete</i>\r\n </button>\r\n\r\n\r\n\r\n\r\n </mat-cell>\r\n </ng-container>\r\n \r\n <mat-header-row *matHeaderRowDef=\"['caseNoteDate', 'contactType', 'contactPurpose', 'comment', 'victimCaseNoteId']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:['caseNoteDate', 'contactType', 'contactPurpose', 'comment', 'victimCaseNoteId'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n</mat-card-content>\r\n</mat-card>", styles: [".container{width:800px;margin:16px;display:grid;grid-template-columns:repeat(1,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.mat-select-content{width:300px}.mat-select-inner{width:290px}.textarea-content{width:500px}\n"] }]
193
- }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.NgcSmartVictimService }, { type: i3.CommonDialogService }, { type: i4.MatSnackBar }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.SmartAuthService }, { type: i7.EmailService }]; } });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZU5vdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdjLXNtYXJ0LXZpY3RpbS9zcmMvbGliL2Nhc2VOb3RlL2Nhc2VOb3RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9jYXNlTm90ZS9jYXNlTm90ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF1RSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQW9CLGtCQUFrQixFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdqRCxNQUFNLE9BQU8saUJBQWlCO0lBdUI1QixZQUNVLFdBQStCLEVBQy9CLHdCQUErQyxFQUMvQyxtQkFBd0MsRUFDekMsUUFBcUIsRUFDcEIsS0FBcUIsRUFDckIsTUFBYyxFQUNkLGdCQUFrQyxFQUNsQyxZQUEwQjtRQVAxQixnQkFBVyxHQUFYLFdBQVcs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QUk7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUksS0FBSyxDQUFDO2dCQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUNsRSxZQUFZLENBQUMsRUFBRTtvQkFDYixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztvQkFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNuRCxDQUFDLENBQ0YsQ0FBQztZQUNBLENBQUMsQ0FDSixDQUFDO1NBQ0M7UUFFTCxPQUFPO0lBRUwsQ0FBQzs7aUlBaFBVLGlCQUFpQjtxSEFBakIsaUJBQWlCLHVDQUhqQixDQUFDLG1CQUFtQixDQUFDLDBCQ25CbEMsdTBiQTJMVzsyRkRyS0UsaUJBQWlCO2tCQVA3QixTQUFTO2dDQUlHLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCxJbmplY3QsT25DaGFuZ2VzLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsQWZ0ZXJWaWV3SW5pdCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdjU21hcnRWaWN0aW1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlcixWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbW1vbkRpYWxvZ1NlcnZpY2V9IGZyb20gJy4uLy4vY29tbW9uLWRpYWxvZy9jb21tb24tZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IFNlbGVjdGVkT2ZmZW5kZXIsIExvZ2luU3RhZmYgfSBmcm9tICdAY3NtYXJ0L25nYy1zbWFydC1jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENhc2VOb3RlfSBmcm9tICcuLi9zbWFydC12aWN0aW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGNzbWFydC9uZ2Mtc21hcnQtY29yZSc7XHJcbmltcG9ydCB7IGRhdGVWYWxpZGF0b3IsIHBhc3NEYXRlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2hhcmVkL3ZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEVtYWlsU2VydmljZSB9IGZyb20gJy4uL2VtYWlsLnNlcnZpY2VzJztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiBcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FzZU5vdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Nhc2VOb3RlLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtDb21tb25EaWFsb2dTZXJ2aWNlXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIENhc2VOb3RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQgIHtcclxuXHJcbiAvLyBASW5wdXQoKSBpc0ludGFrZTogYm9vbGVhbjtcclxuICBvZmZlbmRlcklkOiBudW1iZXI7XHJcbiAgbG9naW5TdGFmZjogTG9naW5TdGFmZjtcclxuICBcclxuICBoaWRkZW5EZXRhaWxGbGFnOmJvb2xlYW47XHJcbiAgY2FzZU5vdGVMaXN0OiBDYXNlTm90ZVtdO1xyXG4gIGNhc2VOb3RlOiBDYXNlTm90ZTtcclxuICBlZGl0Q2FzZU5vdGU6IENhc2VOb3RlID0gPENhc2VOb3RlPnt9O1xyXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG4gIGNvbnRhY3RUeXBlczogYW55W107XHJcbiAgY29udGFjdFB1cnBvc2VzOiBhbnlbXTtcclxuICByZXN1bHQ6IGFueTtcclxuICB2aWN0aW1OYW1lOiBzdHJpbmc7XHJcbiAgc3RhZmZJZDogbnVtYmVyO1xyXG4gIHZpY3RpbUlkOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBzdWI6IGFueTtcclxuICBjYXNlTm90ZURhdGFTb3VyY2U9IG5ldyAgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcbiAgYWRkRGlzYWJsZUZsYWc6IGJvb2xlYW47XHJcbiAgaGlkZGVuQWRkTmV3RmxhZzogYm9vbGVhbjtcclxuICBjYXNlTm90ZUZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLCBcclxuICAgIHByaXZhdGUgX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50OiBOZ2NTbWFydFZpY3RpbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBzbWFydEF1dGhTZXJ2aWNlOiBTbWFydEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbWFpbFNlcnZpY2U6IEVtYWlsU2VydmljZVxyXG4gICAgIFxyXG4gICkge1xyXG4gICAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICAgfVxyXG4gICBwcml2YXRlIGluaXRGb3JtKCkge1xyXG4gICB0aGlzLmNhc2VOb3RlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgY2FzZU5vdGVEYXRlOiAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxkYXRlVmFsaWRhdG9yKCldKSksXHJcbiAgICBjb250YWN0VHlwZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyxWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgIGNvbnRhY3RQdXJwb3NlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgY29tbWVudDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyxWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gIH0pO1xyXG5cclxuICAgdGhpcy5jYXNlTm90ZUZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgdGhpcy5jYXNlTm90ZUZvcm0ubWFya0FzVW50b3VjaGVkKCk7XHJcblxyXG4gICB9XHJcbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc21hcnRBdXRoU2VydmljZS5zZXRQZXJtaXNzaW9uKCdWaWN0aW0nLCB0aGlzLnJvdXRlLnNuYXBzaG90KTtcclxuICB9XHJcbiBcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHZhciBkYXRhID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhO1xyXG4gICAgdGhpcy5sb2dpblN0YWZmID0gZGF0YS5sb2dpblN0YWZmO1xyXG4gICAgdGhpcy5zdGFmZklkID0gIHRoaXMubG9naW5TdGFmZi5zdGFmZklkO1xyXG5cclxuXHJcbiAgICB0aGlzLnN1YiA9IHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLnZpY3RpbUlkID0gcGFyYW1zWyd2aWN0aW1JZCddO1xyXG4gICAgICB0aGlzLm9mZmVuZGVySWQgPSBwYXJhbXNbJ29mZmVuZGVySWQnXTtcclxuIFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGREaXNhYmxlRmxhZz0gZmFsc2U7XHJcbiAgICB0aGlzLmhpZGRlbkRldGFpbEZsYWcgPSB0cnVlO1xyXG4gICAgdGhpcy5oaWRkZW5BZGROZXdGbGFnID0gZmFsc2U7XHJcblxyXG5cclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFZpY3RpbSh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1OYW1lID0gaXRlbXMuZmlyc3ROYW1lICsgJywgJyArIGl0ZW1zLmxhc3ROYW1lO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldENvbnRhY3RUeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnRhY3RUeXBlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFZpY3RpbUNvbnRhY3RQdXJwb3NlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnRhY3RQdXJwb3NlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIFxyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0Q2FzZXROb3Rlcyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgIGNhc2VOb3RlTGlzdCA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Nhc2VOb3RlTGlzdCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGNhc2VOb3RlTGlzdCk7XHJcbiAgICAgICAgdGhpcy5jYXNlTm90ZUxpc3QgPSBjYXNlTm90ZUxpc3Q7IFxyXG4gICAgICAgIHRoaXMuY2FzZU5vdGVEYXRhU291cmNlLmRhdGEgPSB0aGlzLmNhc2VOb3RlTGlzdDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcblxyXG4gICAgXHJcblxyXG4gICAgLy8gdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0Q2FzZXROb3Rlcyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXHJcbiAgICAvLyAgIChpdG1zOiBhbnkpID0+IHtcclxuICAgIC8vICAgY29uc3QgRUxFTUVOVF9EQVRBOiBFbGVtZW50W10gPSBpdG1zO1xyXG4gICAgLy8gICB0aGlzLmNhc2VOb3RlRGF0YVNvdXJjZS5kYXRhID0gIEVMRU1FTlRfREFUQTtcclxuICAgIC8vICAgfSlcclxuICB9XHJcbiAgb25FZGl0Q2FzZU5vdGUodmljdGltQ2FzZU5vdGVJZDogbnVtYmVyKXtcclxuICBcclxuICAgIHRoaXMuaGlkZGVuRGV0YWlsRmxhZyA9ZmFsc2U7XHJcbiAgICB0aGlzLmhpZGRlbkFkZE5ld0ZsYWcgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuYWRkRGlzYWJsZUZsYWcgPSB0cnVlO1xyXG4gICAgdGhpcy5lZGl0Q2FzZU5vdGUgPSB0aGlzLmNhc2VOb3RlTGlzdC5maW5kKHggPT4geC52aWN0aW1DYXNlTm90ZUlkID09PSB2aWN0aW1DYXNlTm90ZUlkKTtcclxuXHJcbiAgfVxyXG4gXHJcbiAgb25EZWxldGVDYXNlTm90ZSh2aWN0aW1DYXNlTm90ZUlkOiBudW1iZXIpe1xyXG4gICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxyXG4gICAgLmNvbmZpcm0oJycsICdEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBjYXNlIG5vdGU/JywgJ1llcycsICdObycpXHJcbiAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5kZWxldGVDYXNlTm90ZSh2aWN0aW1DYXNlTm90ZUlkLCB0aGlzLnN0YWZmSWQpXHJcbiAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ2RlbGV0ZSBTdWNjZXNzZnVsbHkgIScsICcnLCB7IGR1cmF0aW9uOiAzMDAwLH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0Q2FzZXROb3Rlcyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgY2FzZU5vdGVMaXN0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FzZU5vdGVMaXN0ID0gY2FzZU5vdGVMaXN0OyBcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FzZU5vdGVEYXRhU291cmNlLmRhdGEgPSB0aGlzLmNhc2VOb3RlTGlzdDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICB9KTtcclxuICB9XHJcbiAgb25BZGROZXcoKXtcclxuXHJcbiAgICB0aGlzLmhpZGRlbkRldGFpbEZsYWcgPSBmYWxzZTtcclxuICAgIHRoaXMuZWRpdENhc2VOb3RlLnZpY3RpbUNhc2VOb3RlSWQgPSAwO1xyXG5cclxuICAgIGNvbnN0IGNhc2VOb3RlRGF0ZUNvbnRyb2wgPSB0aGlzLmNhc2VOb3RlRm9ybS5nZXQoJ2Nhc2VOb3RlRGF0ZScpO1xyXG4gICAgY2FzZU5vdGVEYXRlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIGNhc2VOb3RlRGF0ZUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgY2FzZU5vdGVEYXRlQ29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgY2FzZU5vdGVEYXRlQ29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG5cclxuXHJcbiAgICBjb25zdCBjb250YWN0VHlwZUNvbnRyb2wgPSB0aGlzLmNhc2VOb3RlRm9ybS5nZXQoJ2NvbnRhY3RUeXBlJyk7XHJcbiAgICBjb250YWN0VHlwZUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICBjb250YWN0VHlwZUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgY29udGFjdFR5cGVDb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICBjb250YWN0VHlwZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XHJcblxyXG5cclxuICAgIGNvbnN0IGNvbnRhY3RQdXJwb3NlQ29udHJvbCA9IHRoaXMuY2FzZU5vdGVGb3JtLmdldCgnY29udGFjdFB1cnBvc2UnKTtcclxuICAgIGNvbnRhY3RQdXJwb3NlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIGNvbnRhY3RQdXJwb3NlQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICBjb250YWN0UHVycG9zZUNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIGNvbnRhY3RQdXJwb3NlQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHJcblxyXG4gICAgY29uc3QgY29tbWVudENvbnRyb2wgPSB0aGlzLmNhc2VOb3RlRm9ybS5nZXQoJ2NvbW1lbnQnKTtcclxuICAgIGNvbW1lbnRDb250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgY29tbWVudENvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgY29tbWVudENvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIGNvbW1lbnRDb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICBcclxuICB9XHJcbiAgYmFjaygpe1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1Ib21lJ10pO1xyXG4gIH1cclxuIFxyXG4gIHNhdmVDYXNlTm90ZSgpe1xyXG4gICAgdGhpcy5lbWFpbFNlcnZpY2VcclxuICAgIC5jcmVhdGVDYXNlTm90ZUVtYWlsKFxyXG4gICAgICBcIlZpY3RpbUNhc2VOb3RlUmVtaW5kZXJzXCIsXHJcbiAgICB0aGlzLm9mZmVuZGVySWQsXHJcbiAgICB0aGlzLnN0YWZmSWRcclxuICAgIClcclxuICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5lZGl0Q2FzZU5vdGUudmljdGltQ2FzZU5vdGVJZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZWRpdENhc2VOb3RlLnZpY3RpbUNhc2VOb3RlSWQgPT09IDApIHtcclxuXHJcbiAgICAgIGNvbnN0IGNhc3ROb3RlOiBDYXNlTm90ZSA9IHtcclxuICAgICAgICB2aWN0aW1JZDp0aGlzLnZpY3RpbUlkLFxyXG4gICAgICAgIHZpY3RpbUNhc2VOb3RlSWQ6IDAsXHJcbiAgICAgICAgY2FzZU5vdGVEYXRlOiB0aGlzLmVkaXRDYXNlTm90ZS5jYXNlTm90ZURhdGUsXHJcbiAgICAgICAgY29udGFjdFR5cGVJZDogdGhpcy5lZGl0Q2FzZU5vdGUuY29udGFjdFR5cGVJZCxcclxuICAgICAgICBjb250YWN0VHlwZTogbnVsbCxcclxuICAgICAgICB2aWN0aW1Db250YWN0UHVycG9zZUlkOiB0aGlzLmVkaXRDYXNlTm90ZS52aWN0aW1Db250YWN0UHVycG9zZUlkLFxyXG4gICAgICAgIHZpY3RpbUNvbnRhY3RQdXJwb3NlOiBudWxsLFxyXG4gICAgICAgIGNvbW1lbnQ6IHRoaXMuZWRpdENhc2VOb3RlLmNvbW1lbnQsXHJcbiAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkLFxyXG4gICAgICAgIHZpY3RpbUZpcnN0TmFtZTogbnVsbCxcclxuICAgICAgICB2aWN0aW1MYXN0TmFtZTogbnVsbFxyXG5cclxuICAgIH07XHJcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRDYXNlTm90ZShjYXN0Tm90ZSkuc3Vic2NyaWJlKFxyXG4gICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignU2F2ZWQgU3VjY2Vzc2Z1bGx5ICEnLCAnJywge1xyXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAvLyB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5zZW5kRW1haWwoJycsIHtyZWZlcnJhbElkOiAgMCwgb2ZmZW5kZXJJZDogdGhpcy5vZmZlbmRlcklkIH0sIHRoaXMubG9naW5TdGFmZi5zdGFmZklkKTtcclxuXHJcblxyXG5cclxuICAgICAgdGhpcy5oaWRkZW5EZXRhaWxGbGFnID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0Q2FzZXROb3Rlcyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgY2FzZU5vdGVMaXN0ID0+IHtcclxuICAgICAgICAgIHRoaXMuY2FzZU5vdGVMaXN0ID0gY2FzZU5vdGVMaXN0OyBcclxuICAgICAgICAgIHRoaXMuY2FzZU5vdGVEYXRhU291cmNlLmRhdGEgPSB0aGlzLmNhc2VOb3RlTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgKTtcclxuIH0gZWxzZSB7XHJcbiAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQudXBkYXRlQ2FzZU5vdGUodGhpcy5lZGl0Q2FzZU5vdGUpLnN1YnNjcmliZShcclxuICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVXBkYXRlIFN1Y2Nlc3NmdWxseSAhJywgJycsIHtcclxuICAgICAgICBkdXJhdGlvbjogMzAwMCxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5oaWRkZW5EZXRhaWxGbGFnID0gdHJ1ZTtcclxuICAgIHRoaXMuaGlkZGVuQWRkTmV3RmxhZyA9ICBmYWxzZTtcclxuICAgIHRoaXMuYWRkRGlzYWJsZUZsYWcgPSBmYWxzZTtcclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldENhc2V0Tm90ZXModGhpcy52aWN0aW1JZCkuc3Vic2NyaWJlKFxyXG4gICAgICBjYXNlTm90ZUxpc3QgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FzZU5vdGVMaXN0ID0gY2FzZU5vdGVMaXN0OyBcclxuICAgICAgICB0aGlzLmNhc2VOb3RlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5jYXNlTm90ZUxpc3Q7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICAgIH1cclxuICApO1xyXG4gICAgfSBcclxuXHJcbi8vZW1haWxcclxuXHJcbiAgfVxyXG5cclxufVxyXG4iLCJcclxuIDxtYXQtY2FyZD5cclxuICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC10b29sYmFyICBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImNhcmQtaGVhZGVyXCIgPkNhc2UgTm90ZTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiaGlkZGVuQWRkTmV3RmxhZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQWRkTmV3KClcIiBbZGlzYWJsZWRdPVwiYWRkRGlzYWJsZUZsYWdcIj5BZGQgQ2FzZSBOb3RlPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJiYWNrKClcIj5CYWNrPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiaGlkZGVuRGV0YWlsRmxhZ1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZCA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb250YWluZXInPiAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiY2FzZU5vdGVGb3JtXCIgI2Nhc2VOb3RlRGV0YWlsRm9ybT1cIm5nRm9ybVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIE5hbWU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3ZpY3RpbU5hbWV9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4gICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkRhdGUgb2YgQ2FzZSBOb3RlOiA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiY2FzZU5vdGVEYXRlXCIgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FzZU5vdGVEYXRlLm9wZW4oKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImNhc2VOb3RlRGF0ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIGEgc3RhcnQgZGF0ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdENhc2VOb3RlLmNhc2VOb3RlRGF0ZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJjYXNlTm90ZURhdGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjY2FzZU5vdGVEYXRlPjwvbWF0LWRhdGVwaWNrZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cImNhc2VOb3RlRm9ybS5nZXQoJ2Nhc2VOb3RlRGF0ZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChjYXNlTm90ZUZvcm0uZ2V0KCdjYXNlTm90ZURhdGUnKS5kaXJ0eSB8fCBjYXNlTm90ZUZvcm0uZ2V0KCdjYXNlTm90ZURhdGUnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5jYXNlIG5vdGUgZGF0ZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FzZU5vdGVGb3JtLmdldCgnY2FzZU5vdGVEYXRlJykuaGFzRXJyb3IoJ2RhdGUnKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChjYXNlTm90ZUZvcm0uZ2V0KCdjYXNlTm90ZURhdGUnKS5kaXJ0eSB8fCBjYXNlTm90ZUZvcm0uZ2V0KCdjYXNlTm90ZURhdGUnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5mdXR1cmUgY2FzZSBub3RlIERhdGUgaXMgPHN0cm9uZz5ub3QgYWxsb3dlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Db250YWN0IFR5cGU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgcGxhY2Vob2xkZXI9XCJjb250YWN0VHlwZVwiIGZvcm1Db250cm9sTmFtZT1cImNvbnRhY3RUeXBlXCIgIHJlcXVpcmVkICAgWyhuZ01vZGVsKV09XCJlZGl0Q2FzZU5vdGUuY29udGFjdFR5cGVJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCIgbGV0IGNvbnRhY3RUeXBlIG9mIGNvbnRhY3RUeXBlc1wiIFt2YWx1ZV09XCJjb250YWN0VHlwZS5jb250YWN0VHlwZUlkXCIgPnt7Y29udGFjdFR5cGUubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJjYXNlTm90ZUZvcm0uZ2V0KCdjb250YWN0VHlwZScpLmVycm9ycyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChjYXNlTm90ZUZvcm0uZ2V0KCdjb250YWN0VHlwZScpLmRpcnR5IHx8IGNhc2VOb3RlRm9ybS5nZXQoJ2NvbnRhY3RUeXBlJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+Y29tbWVudCBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtc2VsZWN0LWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q29udGFjdCBQdXJwb3NlOjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cImNvbnRhY3RQdXJwb3NlXCIgICByZXF1aXJlZCBbKG5nTW9kZWwpXT1cImVkaXRDYXNlTm90ZS52aWN0aW1Db250YWN0UHVycG9zZUlkXCIgY2xhc3M9XCJtYXQtc2VsZWN0LWlubmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cIiBsZXQgY29udGFjdFB1cnBvc2Ugb2YgY29udGFjdFB1cnBvc2VzXCIgW3ZhbHVlXT1cImNvbnRhY3RQdXJwb3NlLnZpY3RpbUNvbnRhY3RQdXJwb3NlSWRcIiA+e3tjb250YWN0UHVycG9zZS5uYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cImNhc2VOb3RlRm9ybS5nZXQoJ2NvbnRhY3RQdXJwb3NlJykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhc2VOb3RlRm9ybS5nZXQoJ2NvbnRhY3RQdXJwb3NlJykuZGlydHkgfHwgY2FzZU5vdGVGb3JtLmdldCgnY29udGFjdFB1cnBvc2UnKS50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5jb21tZW50IGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogNDAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNvbW1lbnQ6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHRhcmVhLWNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0Q2FzZU5vdGUuY29tbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtUZXh0YXJlYUF1dG9zaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXV0b3NpemU9XCJjZGtUZXh0YXJlYUF1dG9zaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWluUm93cz1cIjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNYXhSb3dzPVwiMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJjYXNlTm90ZUZvcm0uZ2V0KCdjb21tZW50JykuZXJyb3JzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhc2VOb3RlRm9ybS5nZXQoJ2NvbW1lbnQnKS5kaXJ0eSB8fCBjYXNlTm90ZUZvcm0uZ2V0KCdjb21tZW50JykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+Y29tbWVudCBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlQ2FzZU5vdGUoKVwiICBbZGlzYWJsZWRdPVwiIWNhc2VOb3RlRGV0YWlsRm9ybS5mb3JtLnZhbGlkXCIgPlNhdmU8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PGJ1dHRvbiAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJoaWRkZW5EZXRhaWxGbGFnID0gdHJ1ZTthZGREaXNhYmxlRmxhZyA9IGZhbHNlOyB0aGlzLmhpZGRlbkFkZE5ld0ZsYWcgPSBmYWxzZTtcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtdGFibGUgI3RhYmxlIFtkYXRhU291cmNlXT1cImNhc2VOb3RlRGF0YVNvdXJjZVwiIGNsYXNzPVwiZXhhbXBsZS10YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjYXNlTm90ZURhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNhc2UgTm90ZSBEYXRlPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+IHt7cm93LmNhc2VOb3RlRGF0ZSB8IGRhdGV9fSA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29udGFjdFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5Db250YWN0IFR5cGU8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+IHt7cm93LmNvbnRhY3RUeXBlfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb250YWN0UHVycG9zZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNvbnRhY3QgUHVycG9zZTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuY29udGFjdFB1cnBvc2V9fSA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvbW1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNvbW1lbnQ8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuY29tbWVudH19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidmljdGltQ2FzZU5vdGVJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPjwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FjLWNzby1yZWFkIHNhYy12c3AtcmVhZFwiICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFZGl0IENhc2UgTm90ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FZGl0Q2FzZU5vdGUocm93LnZpY3RpbUNhc2VOb3RlSWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPm1vZGVfZWRpdDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhYy12c3AtcmVhZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIENhc2UgTm90ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlQ2FzZU5vdGUocm93LnZpY3RpbUNhc2VOb3RlSWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+ZGVsZXRlPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydjYXNlTm90ZURhdGUnLCAnY29udGFjdFR5cGUnLCAnY29udGFjdFB1cnBvc2UnLCAnY29tbWVudCcsICd2aWN0aW1DYXNlTm90ZUlkJ11cIiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLXJvd1wiPjwvbWF0LWhlYWRlci1yb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczpbJ2Nhc2VOb3RlRGF0ZScsICdjb250YWN0VHlwZScsICdjb250YWN0UHVycG9zZScsICdjb21tZW50JywgJ3ZpY3RpbUNhc2VOb3RlSWQnXTtcIiBjbGFzcz1cImV4YW1wbGUtcm93XCI+PC9tYXQtcm93PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFibGU+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG48L21hdC1jYXJkLWNvbnRlbnQ+XHJcbjwvbWF0LWNhcmQ+Il19
1
+ import { Component } from '@angular/core';
2
+ import { NgcSmartVictimService } from '../smart-victim.service';
3
+ import { UntypedFormControl, UntypedFormBuilder, Validators } from '@angular/forms';
4
+ import { CommonDialogService } from '.././common-dialog/common-dialog.service';
5
+ import { MatSnackBar } from '@angular/material/snack-bar';
6
+ import { Router, ActivatedRoute } from '@angular/router';
7
+ import { SmartAuthService } from '@csmart/ngc-smart-core';
8
+ import { dateValidator } from '../shared/validators';
9
+ import { MatTableDataSource } from '@angular/material/table';
10
+ import { EmailService } from '../email.services';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/forms";
13
+ import * as i2 from "../smart-victim.service";
14
+ import * as i3 from ".././common-dialog/common-dialog.service";
15
+ import * as i4 from "@angular/material/snack-bar";
16
+ import * as i5 from "@angular/router";
17
+ import * as i6 from "@csmart/ngc-smart-core";
18
+ import * as i7 from "../email.services";
19
+ import * as i8 from "@angular/common";
20
+ import * as i9 from "@angular/material/button";
21
+ import * as i10 from "@angular/material/card";
22
+ import * as i11 from "@angular/material/toolbar";
23
+ import * as i12 from "@angular/cdk/text-field";
24
+ import * as i13 from "@angular/material/form-field";
25
+ import * as i14 from "@angular/material/input";
26
+ import * as i15 from "@angular/material/datepicker";
27
+ import * as i16 from "@angular/material/select";
28
+ import * as i17 from "@angular/material/core";
29
+ import * as i18 from "@angular/material/table";
30
+ export class CaseNoteComponent {
31
+ constructor(formBuilder, _victimServicesComponent, commonDialogService, snackBar, route, router, smartAuthService, emailService) {
32
+ this.formBuilder = formBuilder;
33
+ this._victimServicesComponent = _victimServicesComponent;
34
+ this.commonDialogService = commonDialogService;
35
+ this.snackBar = snackBar;
36
+ this.route = route;
37
+ this.router = router;
38
+ this.smartAuthService = smartAuthService;
39
+ this.emailService = emailService;
40
+ this.editCaseNote = {};
41
+ this.caseNoteDataSource = new MatTableDataSource();
42
+ this.initForm();
43
+ }
44
+ initForm() {
45
+ this.caseNoteForm = this.formBuilder.group({
46
+ caseNoteDate: new UntypedFormControl('', Validators.compose([
47
+ Validators.required, dateValidator()
48
+ ])),
49
+ contactType: new UntypedFormControl('', Validators.required),
50
+ contactPurpose: new UntypedFormControl('', Validators.required),
51
+ comment: new UntypedFormControl('', Validators.required)
52
+ });
53
+ this.caseNoteForm.markAsPristine();
54
+ this.caseNoteForm.markAsUntouched();
55
+ }
56
+ ngAfterViewInit() {
57
+ this.smartAuthService.setPermission('Victim', this.route.snapshot);
58
+ }
59
+ ngOnInit() {
60
+ var data = this.route.snapshot.data;
61
+ this.loginStaff = data.loginStaff;
62
+ this.staffId = this.loginStaff.staffId;
63
+ this.sub = this.route.params.subscribe(params => {
64
+ this.victimId = params['victimId'];
65
+ this.offenderId = params['offenderId'];
66
+ });
67
+ this.addDisableFlag = false;
68
+ this.hiddenDetailFlag = true;
69
+ this.hiddenAddNewFlag = false;
70
+ this._victimServicesComponent.getVictim(this.victimId).subscribe((items) => {
71
+ this.victimName = items.firstName + ', ' + items.lastName;
72
+ });
73
+ this._victimServicesComponent.getContactTypes().subscribe((items) => {
74
+ this.contactTypes = items;
75
+ });
76
+ this._victimServicesComponent.getVictimContactPurposes().subscribe((items) => {
77
+ this.contactPurposes = items;
78
+ });
79
+ this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(caseNoteList => {
80
+ console.log('caseNoteList');
81
+ console.log(caseNoteList);
82
+ this.caseNoteList = caseNoteList;
83
+ this.caseNoteDataSource.data = this.caseNoteList;
84
+ });
85
+ // this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(
86
+ // (itms: any) => {
87
+ // const ELEMENT_DATA: Element[] = itms;
88
+ // this.caseNoteDataSource.data = ELEMENT_DATA;
89
+ // })
90
+ }
91
+ onEditCaseNote(victimCaseNoteId) {
92
+ this.hiddenDetailFlag = false;
93
+ this.hiddenAddNewFlag = true;
94
+ this.addDisableFlag = true;
95
+ this.editCaseNote = this.caseNoteList.find(x => x.victimCaseNoteId === victimCaseNoteId);
96
+ }
97
+ onDeleteCaseNote(victimCaseNoteId) {
98
+ this.commonDialogService
99
+ .confirm('', 'Do you want to delete this case note?', 'Yes', 'No')
100
+ .subscribe(res => {
101
+ this.result = res;
102
+ if (this.result) {
103
+ this._victimServicesComponent.deleteCaseNote(victimCaseNoteId, this.staffId)
104
+ .subscribe(result => {
105
+ this.snackBar.open('delete Successfully !', '', { duration: 3000, });
106
+ this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(caseNoteList => {
107
+ this.caseNoteList = caseNoteList;
108
+ this.caseNoteDataSource.data = this.caseNoteList;
109
+ });
110
+ });
111
+ }
112
+ });
113
+ }
114
+ onAddNew() {
115
+ this.hiddenDetailFlag = false;
116
+ this.editCaseNote.victimCaseNoteId = 0;
117
+ const caseNoteDateControl = this.caseNoteForm.get('caseNoteDate');
118
+ caseNoteDateControl.setValue(null);
119
+ caseNoteDateControl.setErrors(null);
120
+ caseNoteDateControl.markAsPristine();
121
+ caseNoteDateControl.markAsPristine();
122
+ const contactTypeControl = this.caseNoteForm.get('contactType');
123
+ contactTypeControl.setValue(null);
124
+ contactTypeControl.setErrors(null);
125
+ contactTypeControl.markAsPristine();
126
+ contactTypeControl.markAsUntouched();
127
+ const contactPurposeControl = this.caseNoteForm.get('contactPurpose');
128
+ contactPurposeControl.setValue(null);
129
+ contactPurposeControl.setErrors(null);
130
+ contactPurposeControl.markAsPristine();
131
+ contactPurposeControl.markAsUntouched();
132
+ const commentControl = this.caseNoteForm.get('comment');
133
+ commentControl.setValue(null);
134
+ commentControl.setErrors(null);
135
+ commentControl.markAsPristine();
136
+ commentControl.markAsUntouched();
137
+ }
138
+ back() {
139
+ this.router.navigate(['victimHome']);
140
+ }
141
+ saveCaseNote() {
142
+ this.emailService
143
+ .createCaseNoteEmail("VictimCaseNoteReminders", this.offenderId, this.staffId)
144
+ .subscribe();
145
+ if (this.editCaseNote.victimCaseNoteId === undefined || this.editCaseNote.victimCaseNoteId === 0) {
146
+ const castNote = {
147
+ victimId: this.victimId,
148
+ victimCaseNoteId: 0,
149
+ caseNoteDate: this.editCaseNote.caseNoteDate,
150
+ contactTypeId: this.editCaseNote.contactTypeId,
151
+ contactType: null,
152
+ victimContactPurposeId: this.editCaseNote.victimContactPurposeId,
153
+ victimContactPurpose: null,
154
+ comment: this.editCaseNote.comment,
155
+ modifiedBy: this.staffId,
156
+ victimFirstName: null,
157
+ victimLastName: null
158
+ };
159
+ this._victimServicesComponent.addCaseNote(castNote).subscribe(result => {
160
+ this.snackBar.open('Saved Successfully !', '', {
161
+ duration: 3000,
162
+ });
163
+ // this._victimServicesComponent.sendEmail('', {referralId: 0, offenderId: this.offenderId }, this.loginStaff.staffId);
164
+ this.hiddenDetailFlag = true;
165
+ this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(caseNoteList => {
166
+ this.caseNoteList = caseNoteList;
167
+ this.caseNoteDataSource.data = this.caseNoteList;
168
+ });
169
+ });
170
+ }
171
+ else {
172
+ this._victimServicesComponent.updateCaseNote(this.editCaseNote).subscribe(result => {
173
+ this.snackBar.open('Update Successfully !', '', {
174
+ duration: 3000,
175
+ });
176
+ this.hiddenDetailFlag = true;
177
+ this.hiddenAddNewFlag = false;
178
+ this.addDisableFlag = false;
179
+ this._victimServicesComponent.getCasetNotes(this.victimId).subscribe(caseNoteList => {
180
+ this.caseNoteList = caseNoteList;
181
+ this.caseNoteDataSource.data = this.caseNoteList;
182
+ });
183
+ });
184
+ }
185
+ //email
186
+ }
187
+ }
188
+ /** @nocollapse */ CaseNoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CaseNoteComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.NgcSmartVictimService }, { token: i3.CommonDialogService }, { token: i4.MatSnackBar }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i6.SmartAuthService }, { token: i7.EmailService }], target: i0.ɵɵFactoryTarget.Component });
189
+ /** @nocollapse */ CaseNoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CaseNoteComponent, selector: "ng-component", providers: [CommonDialogService], ngImport: i0, template: "\n <mat-card>\n <mat-card-header>\n\n </mat-card-header>\n <mat-card-content>\n \n <mat-toolbar color=\"primary\">\n <h4 class=\"card-header\" >Case Note</h4>\n </mat-toolbar>\n <br>\n <div class=\"row\" >\n <div [hidden]=\"hiddenAddNewFlag\">\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"onAddNew()\" [disabled]=\"addDisableFlag\">Add Case Note</button>\n\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\n </div>\n </div>\n\n <div [hidden]=\"hiddenDetailFlag\" >\n <mat-card >\n <div class='container'> \n <form [formGroup]=\"caseNoteForm\" #caseNoteDetailForm=\"ngForm\" >\n \n <div>\n <mat-label>Victim Name:</mat-label>\n {{victimName}} \n </div>\n \n\n <div> \n <mat-form-field>\n <mat-label>Date of Case Note: </mat-label>\n <input matInput formControlName=\"caseNoteDate\" \n (click)=\"caseNoteDate.open()\" \n [matDatepicker]=\"caseNoteDate\" \n placeholder=\"Choose a start date\" \n [(ngModel)]=\"editCaseNote.caseNoteDate\" required>\n <mat-datepicker-toggle matSuffix [for]=\"caseNoteDate\"></mat-datepicker-toggle>\n <mat-datepicker #caseNoteDate></mat-datepicker>\n\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('caseNoteDate').errors \n && (caseNoteForm.get('caseNoteDate').dirty || caseNoteForm.get('caseNoteDate').touched)\">\n <mat-error>case note date is <strong>required</strong></mat-error>\n </div> \n\n <div class=\"help-block\" \n *ngIf=\"caseNoteForm.get('caseNoteDate').hasError('date') \n && (caseNoteForm.get('caseNoteDate').dirty || caseNoteForm.get('caseNoteDate').touched)\">\n <mat-error>future case note Date is <strong>not allowed</strong></mat-error>\n </div>\n\n </mat-form-field>\n\n </div> \n \n \n\n <div>\n <mat-form-field>\n <mat-label>Contact Type:</mat-label>\n <mat-select placeholder=\"contactType\" formControlName=\"contactType\" required [(ngModel)]=\"editCaseNote.contactTypeId\">\n <mat-option *ngFor=\" let contactType of contactTypes\" [value]=\"contactType.contactTypeId\" >{{contactType.name}}</mat-option>\n </mat-select>\n\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('contactType').errors \n && (caseNoteForm.get('contactType').dirty || caseNoteForm.get('contactType').touched)\">\n <mat-error>comment is <strong>required</strong></mat-error>\n </div> \n </mat-form-field>\n </div>\n \n <div> \n <mat-form-field class=\"mat-select-content\">\n <mat-label>Contact Purpose:</mat-label>\n <mat-select formControlName=\"contactPurpose\" required [(ngModel)]=\"editCaseNote.victimContactPurposeId\" class=\"mat-select-inner\">\n <mat-option *ngFor=\" let contactPurpose of contactPurposes\" [value]=\"contactPurpose.victimContactPurposeId\" >{{contactPurpose.name}}</mat-option>\n </mat-select>\n\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('contactPurpose').errors \n && (caseNoteForm.get('contactPurpose').dirty || caseNoteForm.get('contactPurpose').touched)\">\n <mat-error>comment is <strong>required</strong></mat-error>\n </div> \n \n </mat-form-field>\n </div> \n \n <div>\n\n <mat-form-field style=\"width: 400px;\">\n <mat-label>Comment:</mat-label>\n <textarea \n class=\"textarea-content\"\n matInput \n placeholder=\"\" \n required formControlName=\"comment\" \n [(ngModel)]=\"editCaseNote.comment\"\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"8\"\n cdkAutosizeMaxRows=\"12\">\n </textarea> \n\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('comment').errors \n && (caseNoteForm.get('comment').dirty || caseNoteForm.get('comment').touched)\">\n <mat-error>comment is <strong>required</strong></mat-error>\n </div> \n </mat-form-field>\n </div>\n \n <div>\n <button mat-raised-button color=\"primary\" (click)=\"saveCaseNote()\" [disabled]=\"!caseNoteDetailForm.form.valid\" >Save</button>\n\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"hiddenDetailFlag = true;addDisableFlag = false; this.hiddenAddNewFlag = false;\">Cancel</button>\n </div>\n\n </form>\n </div>\n </mat-card>\n \n </div>\n <br>\n <mat-table #table [dataSource]=\"caseNoteDataSource\" class=\"example-table\">\n <ng-container matColumnDef=\"caseNoteDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Case Note Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.caseNoteDate | date}} </mat-cell>\n </ng-container>\n\n\n <ng-container matColumnDef=\"contactType\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Type</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactType}} </mat-cell>\n </ng-container>\n \n \n <ng-container matColumnDef=\"contactPurpose\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Purpose</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactPurpose}} </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=\"victimCaseNoteId\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\n \n <button \n class=\"sac-cso-read sac-vsp-read\" \n mat-icon-button \n color=\"primary\" \n matTooltip=\"Edit Case Note\" \n (click)=\"onEditCaseNote(row.victimCaseNoteId)\">\n <i class=\"material-icons\">mode_edit</i>\n </button>\n\n &nbsp;&nbsp;\n \n \n\n <button\n class=\"sac-vsp-read\"\n matTooltip=\"Delete Case Note\" \n mat-icon-button\n color=\"primary\"\n (click)=\"onDeleteCaseNote(row.victimCaseNoteId)\">\n <i class=\"material-icons\">delete</i>\n </button>\n\n\n\n\n </mat-cell>\n </ng-container>\n \n <mat-header-row *matHeaderRowDef=\"['caseNoteDate', 'contactType', 'contactPurpose', 'comment', 'victimCaseNoteId']\" class=\"example-header-row\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns:['caseNoteDate', 'contactType', 'contactPurpose', 'comment', 'victimCaseNoteId'];\" class=\"example-row\"></mat-row>\n </mat-table>\n\n\n\n\n\n\n\n</mat-card-content>\n</mat-card>", styles: [".container{width:800px;margin:16px;display:grid;grid-template-columns:repeat(1,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.mat-select-content{width:300px}.mat-select-inner{width:290px}.textarea-content{width:500px}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i9.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: i10.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i10.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i10.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i11.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i12.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i13.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i13.MatLabel, selector: "mat-label" }, { kind: "directive", type: i13.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i18.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i18.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i18.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i18.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i18.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i18.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i18.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i18.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i18.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i18.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: i8.DatePipe, name: "date" }] });
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CaseNoteComponent, decorators: [{
191
+ type: Component,
192
+ args: [{ providers: [CommonDialogService], template: "\n <mat-card>\n <mat-card-header>\n\n </mat-card-header>\n <mat-card-content>\n \n <mat-toolbar color=\"primary\">\n <h4 class=\"card-header\" >Case Note</h4>\n </mat-toolbar>\n <br>\n <div class=\"row\" >\n <div [hidden]=\"hiddenAddNewFlag\">\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"onAddNew()\" [disabled]=\"addDisableFlag\">Add Case Note</button>\n\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\n </div>\n </div>\n\n <div [hidden]=\"hiddenDetailFlag\" >\n <mat-card >\n <div class='container'> \n <form [formGroup]=\"caseNoteForm\" #caseNoteDetailForm=\"ngForm\" >\n \n <div>\n <mat-label>Victim Name:</mat-label>\n {{victimName}} \n </div>\n \n\n <div> \n <mat-form-field>\n <mat-label>Date of Case Note: </mat-label>\n <input matInput formControlName=\"caseNoteDate\" \n (click)=\"caseNoteDate.open()\" \n [matDatepicker]=\"caseNoteDate\" \n placeholder=\"Choose a start date\" \n [(ngModel)]=\"editCaseNote.caseNoteDate\" required>\n <mat-datepicker-toggle matSuffix [for]=\"caseNoteDate\"></mat-datepicker-toggle>\n <mat-datepicker #caseNoteDate></mat-datepicker>\n\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('caseNoteDate').errors \n && (caseNoteForm.get('caseNoteDate').dirty || caseNoteForm.get('caseNoteDate').touched)\">\n <mat-error>case note date is <strong>required</strong></mat-error>\n </div> \n\n <div class=\"help-block\" \n *ngIf=\"caseNoteForm.get('caseNoteDate').hasError('date') \n && (caseNoteForm.get('caseNoteDate').dirty || caseNoteForm.get('caseNoteDate').touched)\">\n <mat-error>future case note Date is <strong>not allowed</strong></mat-error>\n </div>\n\n </mat-form-field>\n\n </div> \n \n \n\n <div>\n <mat-form-field>\n <mat-label>Contact Type:</mat-label>\n <mat-select placeholder=\"contactType\" formControlName=\"contactType\" required [(ngModel)]=\"editCaseNote.contactTypeId\">\n <mat-option *ngFor=\" let contactType of contactTypes\" [value]=\"contactType.contactTypeId\" >{{contactType.name}}</mat-option>\n </mat-select>\n\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('contactType').errors \n && (caseNoteForm.get('contactType').dirty || caseNoteForm.get('contactType').touched)\">\n <mat-error>comment is <strong>required</strong></mat-error>\n </div> \n </mat-form-field>\n </div>\n \n <div> \n <mat-form-field class=\"mat-select-content\">\n <mat-label>Contact Purpose:</mat-label>\n <mat-select formControlName=\"contactPurpose\" required [(ngModel)]=\"editCaseNote.victimContactPurposeId\" class=\"mat-select-inner\">\n <mat-option *ngFor=\" let contactPurpose of contactPurposes\" [value]=\"contactPurpose.victimContactPurposeId\" >{{contactPurpose.name}}</mat-option>\n </mat-select>\n\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('contactPurpose').errors \n && (caseNoteForm.get('contactPurpose').dirty || caseNoteForm.get('contactPurpose').touched)\">\n <mat-error>comment is <strong>required</strong></mat-error>\n </div> \n \n </mat-form-field>\n </div> \n \n <div>\n\n <mat-form-field style=\"width: 400px;\">\n <mat-label>Comment:</mat-label>\n <textarea \n class=\"textarea-content\"\n matInput \n placeholder=\"\" \n required formControlName=\"comment\" \n [(ngModel)]=\"editCaseNote.comment\"\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"8\"\n cdkAutosizeMaxRows=\"12\">\n </textarea> \n\n <div class=\"help-block\" *ngIf=\"caseNoteForm.get('comment').errors \n && (caseNoteForm.get('comment').dirty || caseNoteForm.get('comment').touched)\">\n <mat-error>comment is <strong>required</strong></mat-error>\n </div> \n </mat-form-field>\n </div>\n \n <div>\n <button mat-raised-button color=\"primary\" (click)=\"saveCaseNote()\" [disabled]=\"!caseNoteDetailForm.form.valid\" >Save</button>\n\n &nbsp;&nbsp;<button mat-raised-button color=\"primary\" (click)=\"hiddenDetailFlag = true;addDisableFlag = false; this.hiddenAddNewFlag = false;\">Cancel</button>\n </div>\n\n </form>\n </div>\n </mat-card>\n \n </div>\n <br>\n <mat-table #table [dataSource]=\"caseNoteDataSource\" class=\"example-table\">\n <ng-container matColumnDef=\"caseNoteDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Case Note Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.caseNoteDate | date}} </mat-cell>\n </ng-container>\n\n\n <ng-container matColumnDef=\"contactType\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Type</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactType}} </mat-cell>\n </ng-container>\n \n \n <ng-container matColumnDef=\"contactPurpose\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Purpose</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactPurpose}} </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=\"victimCaseNoteId\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\n \n <button \n class=\"sac-cso-read sac-vsp-read\" \n mat-icon-button \n color=\"primary\" \n matTooltip=\"Edit Case Note\" \n (click)=\"onEditCaseNote(row.victimCaseNoteId)\">\n <i class=\"material-icons\">mode_edit</i>\n </button>\n\n &nbsp;&nbsp;\n \n \n\n <button\n class=\"sac-vsp-read\"\n matTooltip=\"Delete Case Note\" \n mat-icon-button\n color=\"primary\"\n (click)=\"onDeleteCaseNote(row.victimCaseNoteId)\">\n <i class=\"material-icons\">delete</i>\n </button>\n\n\n\n\n </mat-cell>\n </ng-container>\n \n <mat-header-row *matHeaderRowDef=\"['caseNoteDate', 'contactType', 'contactPurpose', 'comment', 'victimCaseNoteId']\" class=\"example-header-row\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns:['caseNoteDate', 'contactType', 'contactPurpose', 'comment', 'victimCaseNoteId'];\" class=\"example-row\"></mat-row>\n </mat-table>\n\n\n\n\n\n\n\n</mat-card-content>\n</mat-card>", styles: [".container{width:800px;margin:16px;display:grid;grid-template-columns:repeat(1,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.mat-select-content{width:300px}.mat-select-inner{width:290px}.textarea-content{width:500px}\n"] }]
193
+ }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.NgcSmartVictimService }, { type: i3.CommonDialogService }, { type: i4.MatSnackBar }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.SmartAuthService }, { type: i7.EmailService }]; } });
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZU5vdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdjLXNtYXJ0LXZpY3RpbS9zcmMvbGliL2Nhc2VOb3RlL2Nhc2VOb3RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9jYXNlTm90ZS9jYXNlTm90ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF1RSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQW9CLGtCQUFrQixFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdqRCxNQUFNLE9BQU8saUJBQWlCO0lBdUI1QixZQUNVLFdBQStCLEVBQy9CLHdCQUErQyxFQUMvQyxtQkFBd0MsRUFDekMsUUFBcUIsRUFDcEIsS0FBcUIsRUFDckIsTUFBYyxFQUNkLGdCQUFrQyxFQUNsQyxZQUEwQjtRQVAxQixnQkFBVyxHQUFYLFdBQVcs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QUk7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUksS0FBSyxDQUFDO2dCQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUNsRSxZQUFZLENBQUMsRUFBRTtvQkFDYixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztvQkFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNuRCxDQUFDLENBQ0YsQ0FBQztZQUNBLENBQUMsQ0FDSixDQUFDO1NBQ0M7UUFFTCxPQUFPO0lBRUwsQ0FBQzs7aUlBaFBVLGlCQUFpQjtxSEFBakIsaUJBQWlCLHVDQUhqQixDQUFDLG1CQUFtQixDQUFDLDBCQ25CbEMsaTlhQTJMVzsyRkRyS0UsaUJBQWlCO2tCQVA3QixTQUFTO2dDQUlHLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCxJbmplY3QsT25DaGFuZ2VzLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsQWZ0ZXJWaWV3SW5pdCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nY1NtYXJ0VmljdGltU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5zZXJ2aWNlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1CdWlsZGVyLFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbkRpYWxvZ1NlcnZpY2V9IGZyb20gJy4uLy4vY29tbW9uLWRpYWxvZy9jb21tb24tZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgU2VsZWN0ZWRPZmZlbmRlciwgTG9naW5TdGFmZiB9IGZyb20gJ0Bjc21hcnQvbmdjLXNtYXJ0LWNvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDYXNlTm90ZX0gZnJvbSAnLi4vc21hcnQtdmljdGltLm1vZGVsJztcbmltcG9ydCB7IFNtYXJ0QXV0aFNlcnZpY2UgfSBmcm9tICdAY3NtYXJ0L25nYy1zbWFydC1jb3JlJztcbmltcG9ydCB7IGRhdGVWYWxpZGF0b3IsIHBhc3NEYXRlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2hhcmVkL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRW1haWxTZXJ2aWNlIH0gZnJvbSAnLi4vZW1haWwuc2VydmljZXMnO1xuXG5cblxuQENvbXBvbmVudCh7XG4gXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNlTm90ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhc2VOb3RlLmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbQ29tbW9uRGlhbG9nU2VydmljZV1cblxufSlcbmV4cG9ydCBjbGFzcyBDYXNlTm90ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxBZnRlclZpZXdJbml0ICB7XG5cbiAvLyBASW5wdXQoKSBpc0ludGFrZTogYm9vbGVhbjtcbiAgb2ZmZW5kZXJJZDogbnVtYmVyO1xuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xuICBcbiAgaGlkZGVuRGV0YWlsRmxhZzpib29sZWFuO1xuICBjYXNlTm90ZUxpc3Q6IENhc2VOb3RlW107XG4gIGNhc2VOb3RlOiBDYXNlTm90ZTtcbiAgZWRpdENhc2VOb3RlOiBDYXNlTm90ZSA9IDxDYXNlTm90ZT57fTtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIGNvbnRhY3RUeXBlczogYW55W107XG4gIGNvbnRhY3RQdXJwb3NlczogYW55W107XG4gIHJlc3VsdDogYW55O1xuICB2aWN0aW1OYW1lOiBzdHJpbmc7XG4gIHN0YWZmSWQ6IG51bWJlcjtcbiAgdmljdGltSWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBzdWI6IGFueTtcbiAgY2FzZU5vdGVEYXRhU291cmNlPSBuZXcgIE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xuICBhZGREaXNhYmxlRmxhZzogYm9vbGVhbjtcbiAgaGlkZGVuQWRkTmV3RmxhZzogYm9vbGVhbjtcbiAgY2FzZU5vdGVGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlciwgXG4gICAgcHJpdmF0ZSBfdmljdGltU2VydmljZXNDb21wb25lbnQ6IE5nY1NtYXJ0VmljdGltU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXG4gICAgcHVibGljIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgc21hcnRBdXRoU2VydmljZTogU21hcnRBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIGVtYWlsU2VydmljZTogRW1haWxTZXJ2aWNlXG4gICAgIFxuICApIHtcbiAgICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICAgfVxuICAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgIHRoaXMuY2FzZU5vdGVGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgY2FzZU5vdGVEYXRlOiAgbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsZGF0ZVZhbGlkYXRvcigpXSkpLFxuICAgIGNvbnRhY3RUeXBlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGNvbnRhY3RQdXJwb3NlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGNvbW1lbnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgfSk7XG5cbiAgIHRoaXMuY2FzZU5vdGVGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICB0aGlzLmNhc2VOb3RlRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcblxuICAgfVxuICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc21hcnRBdXRoU2VydmljZS5zZXRQZXJtaXNzaW9uKCdWaWN0aW0nLCB0aGlzLnJvdXRlLnNuYXBzaG90KTtcbiAgfVxuIFxuICBuZ09uSW5pdCgpIHtcbiAgICB2YXIgZGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcbiAgICB0aGlzLmxvZ2luU3RhZmYgPSBkYXRhLmxvZ2luU3RhZmY7XG4gICAgdGhpcy5zdGFmZklkID0gIHRoaXMubG9naW5TdGFmZi5zdGFmZklkO1xuXG5cbiAgICB0aGlzLnN1YiA9IHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy52aWN0aW1JZCA9IHBhcmFtc1sndmljdGltSWQnXTtcbiAgICAgIHRoaXMub2ZmZW5kZXJJZCA9IHBhcmFtc1snb2ZmZW5kZXJJZCddO1xuIFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGREaXNhYmxlRmxhZz0gZmFsc2U7XG4gICAgdGhpcy5oaWRkZW5EZXRhaWxGbGFnID0gdHJ1ZTtcbiAgICB0aGlzLmhpZGRlbkFkZE5ld0ZsYWcgPSBmYWxzZTtcblxuXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcbiAgICAgIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudmljdGltTmFtZSA9IGl0ZW1zLmZpcnN0TmFtZSArICcsICcgKyBpdGVtcy5sYXN0TmFtZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0Q29udGFjdFR5cGVzKCkuc3Vic2NyaWJlKFxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jb250YWN0VHlwZXMgPSBpdGVtcztcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltQ29udGFjdFB1cnBvc2VzKCkuc3Vic2NyaWJlKFxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jb250YWN0UHVycG9zZXMgPSBpdGVtcztcbiAgICAgIH1cbiAgICApO1xuXG4gICAgXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0Q2FzZXROb3Rlcyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXG4gICAgICBjYXNlTm90ZUxpc3QgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnY2FzZU5vdGVMaXN0Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNhc2VOb3RlTGlzdCk7XG4gICAgICAgIHRoaXMuY2FzZU5vdGVMaXN0ID0gY2FzZU5vdGVMaXN0OyBcbiAgICAgICAgdGhpcy5jYXNlTm90ZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMuY2FzZU5vdGVMaXN0O1xuICAgICAgfVxuICAgICk7XG5cblxuICAgIFxuXG4gICAgLy8gdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0Q2FzZXROb3Rlcyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXG4gICAgLy8gICAoaXRtczogYW55KSA9PiB7XG4gICAgLy8gICBjb25zdCBFTEVNRU5UX0RBVEE6IEVsZW1lbnRbXSA9IGl0bXM7XG4gICAgLy8gICB0aGlzLmNhc2VOb3RlRGF0YVNvdXJjZS5kYXRhID0gIEVMRU1FTlRfREFUQTtcbiAgICAvLyAgIH0pXG4gIH1cbiAgb25FZGl0Q2FzZU5vdGUodmljdGltQ2FzZU5vdGVJZDogbnVtYmVyKXtcbiAgXG4gICAgdGhpcy5oaWRkZW5EZXRhaWxGbGFnID1mYWxzZTtcbiAgICB0aGlzLmhpZGRlbkFkZE5ld0ZsYWcgPSB0cnVlO1xuXG4gICAgdGhpcy5hZGREaXNhYmxlRmxhZyA9IHRydWU7XG4gICAgdGhpcy5lZGl0Q2FzZU5vdGUgPSB0aGlzLmNhc2VOb3RlTGlzdC5maW5kKHggPT4geC52aWN0aW1DYXNlTm90ZUlkID09PSB2aWN0aW1DYXNlTm90ZUlkKTtcblxuICB9XG4gXG4gIG9uRGVsZXRlQ2FzZU5vdGUodmljdGltQ2FzZU5vdGVJZDogbnVtYmVyKXtcbiAgICAgdGhpcy5jb21tb25EaWFsb2dTZXJ2aWNlXG4gICAgLmNvbmZpcm0oJycsICdEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBjYXNlIG5vdGU/JywgJ1llcycsICdObycpXG4gICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5kZWxldGVDYXNlTm90ZSh2aWN0aW1DYXNlTm90ZUlkLCB0aGlzLnN0YWZmSWQpXG4gICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignZGVsZXRlIFN1Y2Nlc3NmdWxseSAhJywgJycsIHsgZHVyYXRpb246IDMwMDAsfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldENhc2V0Tm90ZXModGhpcy52aWN0aW1JZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBjYXNlTm90ZUxpc3QgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FzZU5vdGVMaXN0ID0gY2FzZU5vdGVMaXN0OyBcbiAgICAgICAgICAgICAgICB0aGlzLmNhc2VOb3RlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5jYXNlTm90ZUxpc3Q7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgIH0pO1xuICB9XG4gIG9uQWRkTmV3KCl7XG5cbiAgICB0aGlzLmhpZGRlbkRldGFpbEZsYWcgPSBmYWxzZTtcbiAgICB0aGlzLmVkaXRDYXNlTm90ZS52aWN0aW1DYXNlTm90ZUlkID0gMDtcblxuICAgIGNvbnN0IGNhc2VOb3RlRGF0ZUNvbnRyb2wgPSB0aGlzLmNhc2VOb3RlRm9ybS5nZXQoJ2Nhc2VOb3RlRGF0ZScpO1xuICAgIGNhc2VOb3RlRGF0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgY2FzZU5vdGVEYXRlQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgY2FzZU5vdGVEYXRlQ29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgIGNhc2VOb3RlRGF0ZUNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcblxuXG4gICAgY29uc3QgY29udGFjdFR5cGVDb250cm9sID0gdGhpcy5jYXNlTm90ZUZvcm0uZ2V0KCdjb250YWN0VHlwZScpO1xuICAgIGNvbnRhY3RUeXBlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICBjb250YWN0VHlwZUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgIGNvbnRhY3RUeXBlQ29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgIGNvbnRhY3RUeXBlQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcblxuXG4gICAgY29uc3QgY29udGFjdFB1cnBvc2VDb250cm9sID0gdGhpcy5jYXNlTm90ZUZvcm0uZ2V0KCdjb250YWN0UHVycG9zZScpO1xuICAgIGNvbnRhY3RQdXJwb3NlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICBjb250YWN0UHVycG9zZUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgIGNvbnRhY3RQdXJwb3NlQ29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgIGNvbnRhY3RQdXJwb3NlQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcblxuXG4gICAgY29uc3QgY29tbWVudENvbnRyb2wgPSB0aGlzLmNhc2VOb3RlRm9ybS5nZXQoJ2NvbW1lbnQnKTtcbiAgICBjb21tZW50Q29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICBjb21tZW50Q29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgY29tbWVudENvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICBjb21tZW50Q29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgIFxuICB9XG4gIGJhY2soKXtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbUhvbWUnXSk7XG4gIH1cbiBcbiAgc2F2ZUNhc2VOb3RlKCl7XG4gICAgdGhpcy5lbWFpbFNlcnZpY2VcbiAgICAuY3JlYXRlQ2FzZU5vdGVFbWFpbChcbiAgICAgIFwiVmljdGltQ2FzZU5vdGVSZW1pbmRlcnNcIixcbiAgICB0aGlzLm9mZmVuZGVySWQsXG4gICAgdGhpcy5zdGFmZklkXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLmVkaXRDYXNlTm90ZS52aWN0aW1DYXNlTm90ZUlkID09PSB1bmRlZmluZWQgfHwgdGhpcy5lZGl0Q2FzZU5vdGUudmljdGltQ2FzZU5vdGVJZCA9PT0gMCkge1xuXG4gICAgICBjb25zdCBjYXN0Tm90ZTogQ2FzZU5vdGUgPSB7XG4gICAgICAgIHZpY3RpbUlkOnRoaXMudmljdGltSWQsXG4gICAgICAgIHZpY3RpbUNhc2VOb3RlSWQ6IDAsXG4gICAgICAgIGNhc2VOb3RlRGF0ZTogdGhpcy5lZGl0Q2FzZU5vdGUuY2FzZU5vdGVEYXRlLFxuICAgICAgICBjb250YWN0VHlwZUlkOiB0aGlzLmVkaXRDYXNlTm90ZS5jb250YWN0VHlwZUlkLFxuICAgICAgICBjb250YWN0VHlwZTogbnVsbCxcbiAgICAgICAgdmljdGltQ29udGFjdFB1cnBvc2VJZDogdGhpcy5lZGl0Q2FzZU5vdGUudmljdGltQ29udGFjdFB1cnBvc2VJZCxcbiAgICAgICAgdmljdGltQ29udGFjdFB1cnBvc2U6IG51bGwsXG4gICAgICAgIGNvbW1lbnQ6IHRoaXMuZWRpdENhc2VOb3RlLmNvbW1lbnQsXG4gICAgICAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZCxcbiAgICAgICAgdmljdGltRmlyc3ROYW1lOiBudWxsLFxuICAgICAgICB2aWN0aW1MYXN0TmFtZTogbnVsbFxuXG4gICAgfTtcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRDYXNlTm90ZShjYXN0Tm90ZSkuc3Vic2NyaWJlKFxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdTYXZlZCBTdWNjZXNzZnVsbHkgIScsICcnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB9KTtcblxuICAgICAvLyB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5zZW5kRW1haWwoJycsIHtyZWZlcnJhbElkOiAgMCwgb2ZmZW5kZXJJZDogdGhpcy5vZmZlbmRlcklkIH0sIHRoaXMubG9naW5TdGFmZi5zdGFmZklkKTtcblxuXG5cbiAgICAgIHRoaXMuaGlkZGVuRGV0YWlsRmxhZyA9IHRydWU7XG4gICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRDYXNldE5vdGVzKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcbiAgICAgICAgY2FzZU5vdGVMaXN0ID0+IHtcbiAgICAgICAgICB0aGlzLmNhc2VOb3RlTGlzdCA9IGNhc2VOb3RlTGlzdDsgXG4gICAgICAgICAgdGhpcy5jYXNlTm90ZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMuY2FzZU5vdGVMaXN0O1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgICB9XG4gICAgKTtcbiB9IGVsc2Uge1xuICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC51cGRhdGVDYXNlTm90ZSh0aGlzLmVkaXRDYXNlTm90ZSkuc3Vic2NyaWJlKFxuICAgIHJlc3VsdCA9PiB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1VwZGF0ZSBTdWNjZXNzZnVsbHkgIScsICcnLCB7XG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgIH0pO1xuICAgIHRoaXMuaGlkZGVuRGV0YWlsRmxhZyA9IHRydWU7XG4gICAgdGhpcy5oaWRkZW5BZGROZXdGbGFnID0gIGZhbHNlO1xuICAgIHRoaXMuYWRkRGlzYWJsZUZsYWcgPSBmYWxzZTtcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRDYXNldE5vdGVzKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcbiAgICAgIGNhc2VOb3RlTGlzdCA9PiB7XG4gICAgICAgIHRoaXMuY2FzZU5vdGVMaXN0ID0gY2FzZU5vdGVMaXN0OyBcbiAgICAgICAgdGhpcy5jYXNlTm90ZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMuY2FzZU5vdGVMaXN0O1xuICAgICAgfVxuICAgICk7XG4gICAgICB9XG4gICk7XG4gICAgfSBcblxuLy9lbWFpbFxuXG4gIH1cblxufVxuIiwiXG4gPG1hdC1jYXJkPlxuICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxuXG4gICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRvb2xiYXIgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImNhcmQtaGVhZGVyXCIgPkNhc2UgTm90ZTwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cImhpZGRlbkFkZE5ld0ZsYWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25BZGROZXcoKVwiIFtkaXNhYmxlZF09XCJhZGREaXNhYmxlRmxhZ1wiPkFkZCBDYXNlIE5vdGU8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDs8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICAoY2xpY2spPVwiYmFjaygpXCI+QmFjazwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJoaWRkZW5EZXRhaWxGbGFnXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZCA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyJz4gICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjYXNlTm90ZUZvcm1cIiAjY2FzZU5vdGVEZXRhaWxGb3JtPVwibmdGb3JtXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gTmFtZTo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3ZpY3RpbU5hbWV9fSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+ICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkRhdGUgb2YgQ2FzZSBOb3RlOiA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImNhc2VOb3RlRGF0ZVwiICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYXNlTm90ZURhdGUub3BlbigpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImNhc2VOb3RlRGF0ZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNob29zZSBhIHN0YXJ0IGRhdGVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0Q2FzZU5vdGUuY2FzZU5vdGVEYXRlXCIgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJjYXNlTm90ZURhdGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2Nhc2VOb3RlRGF0ZT48L21hdC1kYXRlcGlja2VyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cImNhc2VOb3RlRm9ybS5nZXQoJ2Nhc2VOb3RlRGF0ZScpLmVycm9ycyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FzZU5vdGVGb3JtLmdldCgnY2FzZU5vdGVEYXRlJykuZGlydHkgfHwgY2FzZU5vdGVGb3JtLmdldCgnY2FzZU5vdGVEYXRlJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPmNhc2Ugbm90ZSBkYXRlIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FzZU5vdGVGb3JtLmdldCgnY2FzZU5vdGVEYXRlJykuaGFzRXJyb3IoJ2RhdGUnKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FzZU5vdGVGb3JtLmdldCgnY2FzZU5vdGVEYXRlJykuZGlydHkgfHwgY2FzZU5vdGVGb3JtLmdldCgnY2FzZU5vdGVEYXRlJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPmZ1dHVyZSBjYXNlIG5vdGUgRGF0ZSBpcyA8c3Ryb25nPm5vdCBhbGxvd2VkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q29udGFjdCBUeXBlOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBwbGFjZWhvbGRlcj1cImNvbnRhY3RUeXBlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29udGFjdFR5cGVcIiAgcmVxdWlyZWQgICBbKG5nTW9kZWwpXT1cImVkaXRDYXNlTm90ZS5jb250YWN0VHlwZUlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCIgbGV0IGNvbnRhY3RUeXBlIG9mIGNvbnRhY3RUeXBlc1wiIFt2YWx1ZV09XCJjb250YWN0VHlwZS5jb250YWN0VHlwZUlkXCIgPnt7Y29udGFjdFR5cGUubmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJjYXNlTm90ZUZvcm0uZ2V0KCdjb250YWN0VHlwZScpLmVycm9ycyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2FzZU5vdGVGb3JtLmdldCgnY29udGFjdFR5cGUnKS5kaXJ0eSB8fCBjYXNlTm90ZUZvcm0uZ2V0KCdjb250YWN0VHlwZScpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5jb21tZW50IGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1zZWxlY3QtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q29udGFjdCBQdXJwb3NlOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJjb250YWN0UHVycG9zZVwiICAgcmVxdWlyZWQgWyhuZ01vZGVsKV09XCJlZGl0Q2FzZU5vdGUudmljdGltQ29udGFjdFB1cnBvc2VJZFwiIGNsYXNzPVwibWF0LXNlbGVjdC1pbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwiIGxldCBjb250YWN0UHVycG9zZSBvZiBjb250YWN0UHVycG9zZXNcIiBbdmFsdWVdPVwiY29udGFjdFB1cnBvc2UudmljdGltQ29udGFjdFB1cnBvc2VJZFwiID57e2NvbnRhY3RQdXJwb3NlLm5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwiY2FzZU5vdGVGb3JtLmdldCgnY29udGFjdFB1cnBvc2UnKS5lcnJvcnMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhc2VOb3RlRm9ybS5nZXQoJ2NvbnRhY3RQdXJwb3NlJykuZGlydHkgfHwgY2FzZU5vdGVGb3JtLmdldCgnY29udGFjdFB1cnBvc2UnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+Y29tbWVudCBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogNDAwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Db21tZW50OjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHRhcmVhLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdENhc2VOb3RlLmNvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka1RleHRhcmVhQXV0b3NpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXV0b3NpemU9XCJjZGtUZXh0YXJlYUF1dG9zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1pblJvd3M9XCI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1heFJvd3M9XCIxMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+IFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cImNhc2VOb3RlRm9ybS5nZXQoJ2NvbW1lbnQnKS5lcnJvcnMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhc2VOb3RlRm9ybS5nZXQoJ2NvbW1lbnQnKS5kaXJ0eSB8fCBjYXNlTm90ZUZvcm0uZ2V0KCdjb21tZW50JykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPmNvbW1lbnQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZUNhc2VOb3RlKClcIiAgW2Rpc2FibGVkXT1cIiFjYXNlTm90ZURldGFpbEZvcm0uZm9ybS52YWxpZFwiID5TYXZlPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PGJ1dHRvbiAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJoaWRkZW5EZXRhaWxGbGFnID0gdHJ1ZTthZGREaXNhYmxlRmxhZyA9IGZhbHNlOyB0aGlzLmhpZGRlbkFkZE5ld0ZsYWcgPSBmYWxzZTtcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtdGFibGUgI3RhYmxlIFtkYXRhU291cmNlXT1cImNhc2VOb3RlRGF0YVNvdXJjZVwiIGNsYXNzPVwiZXhhbXBsZS10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY2FzZU5vdGVEYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q2FzZSBOb3RlIERhdGU8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+IHt7cm93LmNhc2VOb3RlRGF0ZSB8IGRhdGV9fSA8L21hdC1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvbnRhY3RUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNvbnRhY3QgVHlwZTwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+IHt7cm93LmNvbnRhY3RUeXBlfX0gPC9tYXQtY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29udGFjdFB1cnBvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q29udGFjdCBQdXJwb3NlPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuY29udGFjdFB1cnBvc2V9fSA8L21hdC1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29tbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNvbW1lbnQ8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+IHt7cm93LmNvbW1lbnR9fSA8L21hdC1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInZpY3RpbUNhc2VOb3RlSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+PC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FjLWNzby1yZWFkIHNhYy12c3AtcmVhZFwiICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFZGl0IENhc2UgTm90ZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdENhc2VOb3RlKHJvdy52aWN0aW1DYXNlTm90ZUlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+bW9kZV9lZGl0PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYWMtdnNwLXJlYWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEZWxldGUgQ2FzZSBOb3RlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVDYXNlTm90ZShyb3cudmljdGltQ2FzZU5vdGVJZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+ZGVsZXRlPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydjYXNlTm90ZURhdGUnLCAnY29udGFjdFR5cGUnLCAnY29udGFjdFB1cnBvc2UnLCAnY29tbWVudCcsICd2aWN0aW1DYXNlTm90ZUlkJ11cIiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLXJvd1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6WydjYXNlTm90ZURhdGUnLCAnY29udGFjdFR5cGUnLCAnY29udGFjdFB1cnBvc2UnLCAnY29tbWVudCcsICd2aWN0aW1DYXNlTm90ZUlkJ107XCIgY2xhc3M9XCJleGFtcGxlLXJvd1wiPjwvbWF0LXJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWJsZT5cblxuXG5cblxuXG5cblxuPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD4iXX0=