@csmart/ngc-smart-victim 1.14.43 → 1.18.0
Sign up to get free protection for your applications and to get access to all the features.
- package/{esm2020 → esm2022}/csmart-ngc-smart-victim.mjs +4 -4
- package/esm2022/lib/caseNote/caseNote.component.mjs +194 -0
- package/esm2022/lib/common-dialog/common-dialog.component.mjs +23 -0
- package/{esm2020 → esm2022}/lib/common-dialog/common-dialog.module.mjs +34 -34
- package/{esm2020 → esm2022}/lib/common-dialog/common-dialog.service.mjs +33 -33
- package/esm2022/lib/contact/contact.component.mjs +140 -0
- package/{esm2020 → esm2022}/lib/email.services.mjs +29 -29
- package/esm2022/lib/intake.service.mjs +57 -0
- package/{esm2020 → esm2022}/lib/safetyPlan/serviceProvider.component.mjs +62 -62
- package/esm2022/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -0
- package/esm2022/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -0
- package/{esm2020 → esm2022}/lib/shared/app.shared.module.mjs +215 -215
- package/esm2022/lib/shared/validators/date.validator.mjs +59 -0
- package/{esm2020 → esm2022}/lib/shared/validators/index.mjs +1 -1
- package/esm2022/lib/smart-victim-delete-confirm.component.mjs +44 -0
- package/esm2022/lib/smart-victim-detail/smart-victim-detail.component.mjs +1104 -0
- package/esm2022/lib/smart-victim.component.mjs +314 -0
- package/{esm2020 → esm2022}/lib/smart-victim.model.mjs +132 -132
- package/{esm2020 → esm2022}/lib/smart-victim.module.mjs +128 -128
- package/esm2022/lib/smart-victim.service.mjs +352 -0
- package/{esm2020 → esm2022}/lib/victim-routing.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/victimSearch/VictimSearchFilter.mjs +2 -2
- package/esm2022/lib/victimSearch/victimSearchForm.component.mjs +38 -0
- package/{esm2020 → esm2022}/public-api.mjs +10 -10
- package/fesm2022/csmart-ngc-smart-victim.mjs +3261 -0
- package/fesm2022/csmart-ngc-smart-victim.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/caseNote/caseNote.component.d.ts +51 -51
- package/lib/common-dialog/common-dialog.component.d.ts +14 -14
- package/lib/common-dialog/common-dialog.module.d.ts +8 -8
- package/lib/common-dialog/common-dialog.service.d.ts +11 -11
- package/lib/contact/contact.component.d.ts +40 -40
- package/lib/email.services.d.ts +11 -11
- package/lib/intake.service.d.ts +57 -57
- package/lib/safetyPlan/serviceProvider.component.d.ts +19 -19
- package/lib/safetyPlan/victimSafetyPlan.component.d.ts +54 -54
- package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +62 -62
- package/lib/shared/app.shared.module.d.ts +33 -33
- package/lib/shared/validators/date.validator.d.ts +9 -9
- package/lib/shared/validators/index.d.ts +1 -1
- package/lib/smart-victim-delete-confirm.component.d.ts +12 -12
- package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +129 -129
- package/lib/smart-victim.component.d.ts +68 -68
- package/lib/smart-victim.model.d.ts +205 -205
- package/lib/smart-victim.module.d.ts +49 -49
- package/lib/smart-victim.service.d.ts +71 -71
- package/lib/victim-routing.module.d.ts +7 -7
- package/lib/victimSearch/VictimSearchFilter.d.ts +7 -7
- package/lib/victimSearch/victimSearchForm.component.d.ts +14 -14
- package/package.json +5 -11
- package/public-api.d.ts +7 -7
- package/esm2020/lib/caseNote/caseNote.component.mjs +0 -194
- package/esm2020/lib/common-dialog/common-dialog.component.mjs +0 -23
- package/esm2020/lib/contact/contact.component.mjs +0 -140
- package/esm2020/lib/intake.service.mjs +0 -57
- package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +0 -116
- package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +0 -340
- package/esm2020/lib/shared/validators/date.validator.mjs +0 -59
- package/esm2020/lib/smart-victim-delete-confirm.component.mjs +0 -44
- package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +0 -1104
- package/esm2020/lib/smart-victim.component.mjs +0 -314
- package/esm2020/lib/smart-victim.service.mjs +0 -352
- package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +0 -38
- package/fesm2015/csmart-ngc-smart-victim.mjs +0 -3273
- package/fesm2015/csmart-ngc-smart-victim.mjs.map +0 -1
- package/fesm2020/csmart-ngc-smart-victim.mjs +0 -3261
- package/fesm2020/csmart-ngc-smart-victim.mjs.map +0 -1
@@ -1,340 +0,0 @@
|
|
1
|
-
import { Component } from '@angular/core';
|
2
|
-
import { NgcSmartVictimService } from '../smart-victim.service';
|
3
|
-
import { UntypedFormControl, UntypedFormBuilder, Validators } from '@angular/forms';
|
4
|
-
import { MatDialog } from '@angular/material/dialog';
|
5
|
-
import { CommonDialogService } from '.././common-dialog/common-dialog.service';
|
6
|
-
import { HttpClient } from '@angular/common/http';
|
7
|
-
import { Router, ActivatedRoute } from '@angular/router';
|
8
|
-
import { dateValidator } from '../shared/validators';
|
9
|
-
import { SeriveProviderComponent } from '../safetyPlan/serviceProvider.component';
|
10
|
-
import { MatSnackBar } from '@angular/material/snack-bar';
|
11
|
-
import { MatTableDataSource } from '@angular/material/table';
|
12
|
-
import * as i0 from "@angular/core";
|
13
|
-
import * as i1 from "@angular/material/dialog";
|
14
|
-
import * as i2 from "../smart-victim.service";
|
15
|
-
import * as i3 from "@angular/common/http";
|
16
|
-
import * as i4 from "@angular/material/snack-bar";
|
17
|
-
import * as i5 from "@angular/router";
|
18
|
-
import * as i6 from ".././common-dialog/common-dialog.service";
|
19
|
-
import * as i7 from "@angular/forms";
|
20
|
-
import * as i8 from "@angular/common";
|
21
|
-
import * as i9 from "@angular/material/button";
|
22
|
-
import * as i10 from "@angular/material/checkbox";
|
23
|
-
import * as i11 from "@angular/material/card";
|
24
|
-
import * as i12 from "@angular/material/list";
|
25
|
-
import * as i13 from "@angular/material/toolbar";
|
26
|
-
import * as i14 from "@angular/cdk/text-field";
|
27
|
-
import * as i15 from "@angular/material/form-field";
|
28
|
-
import * as i16 from "@angular/material/input";
|
29
|
-
import * as i17 from "@angular/material/datepicker";
|
30
|
-
import * as i18 from "@angular/material/select";
|
31
|
-
import * as i19 from "@angular/material/core";
|
32
|
-
import * as i20 from "@angular/material/table";
|
33
|
-
export class VictimSafetyPlanDetailComponent {
|
34
|
-
constructor(dialog, _victimServicesComponent, http, snackBar, route, router, commonDialogService, formBuilder) {
|
35
|
-
this.dialog = dialog;
|
36
|
-
this._victimServicesComponent = _victimServicesComponent;
|
37
|
-
this.http = http;
|
38
|
-
this.snackBar = snackBar;
|
39
|
-
this.route = route;
|
40
|
-
this.router = router;
|
41
|
-
this.commonDialogService = commonDialogService;
|
42
|
-
this.formBuilder = formBuilder;
|
43
|
-
this.editSafetyPlan = {};
|
44
|
-
this.providerListCollection = [];
|
45
|
-
this.serviceCheck = [];
|
46
|
-
this.victimServiceStatusHistoriesDataSource = new MatTableDataSource();
|
47
|
-
this.initForm();
|
48
|
-
}
|
49
|
-
initForm() {
|
50
|
-
this.spForm = this.formBuilder.group({
|
51
|
-
serviceGoal: new UntypedFormControl('', Validators.compose([
|
52
|
-
Validators.required
|
53
|
-
])),
|
54
|
-
goalStatus: new UntypedFormControl('', Validators.compose([
|
55
|
-
Validators.required
|
56
|
-
])),
|
57
|
-
goalStatusDate: new UntypedFormControl('', Validators.compose([
|
58
|
-
Validators.required, dateValidator()
|
59
|
-
])),
|
60
|
-
comment: new UntypedFormControl('', Validators.required)
|
61
|
-
});
|
62
|
-
this.spForm.markAsPristine();
|
63
|
-
this.spForm.markAsUntouched();
|
64
|
-
}
|
65
|
-
ngOnInit() {
|
66
|
-
var data = this.route.snapshot.data;
|
67
|
-
this.loginStaff = data.loginStaff;
|
68
|
-
this.staffId = this.loginStaff.staffId;
|
69
|
-
this.sub = this.route.params.subscribe(params => {
|
70
|
-
this.victimServiceId = params['victimServiceId'];
|
71
|
-
this.victimId = params['victimId'];
|
72
|
-
});
|
73
|
-
this.hiddenAddNewFlag = false;
|
74
|
-
this.isDisplay = false;
|
75
|
-
this._victimServicesComponent.getVictimServiceTypes().subscribe((items) => {
|
76
|
-
this.victimServiceTypes = items;
|
77
|
-
});
|
78
|
-
this._victimServicesComponent.getVictimServiceStatus().subscribe((items) => {
|
79
|
-
this.victimServiceStatus = items;
|
80
|
-
});
|
81
|
-
this._victimServicesComponent.getVictim(this.victimId).subscribe((items) => {
|
82
|
-
this.victimName = items.firstName + ', ' + items.lastName;
|
83
|
-
});
|
84
|
-
//---------------graphQL--------------------------------------
|
85
|
-
// this.getVictimServiceTypeProgramProviders().subscribe(result => {
|
86
|
-
// this.providerList = result;
|
87
|
-
// });
|
88
|
-
// console.log('this.victimServiceId');
|
89
|
-
// console.log(this.victimServiceId);
|
90
|
-
if (this.victimServiceId != 0) {
|
91
|
-
this._victimServicesComponent.getVictimServices(this.victimServiceId).subscribe(victimSafetyPlans => {
|
92
|
-
console.log('victimSafetyPlans');
|
93
|
-
console.log(victimSafetyPlans);
|
94
|
-
this.editSafetyPlan = victimSafetyPlans[0];
|
95
|
-
this.victimId = victimSafetyPlans[0].victimId;
|
96
|
-
console.log('this.editSafetyPlan');
|
97
|
-
console.log(this.editSafetyPlan);
|
98
|
-
// console.log('this.editSafetyPlan.goal');
|
99
|
-
// console.log(this.editSafetyPlan.goal);
|
100
|
-
// console.log('this.editSafetyPlan[0].goal');
|
101
|
-
// console.log(this.editSafetyPlan[0].goal);
|
102
|
-
});
|
103
|
-
this._victimServicesComponent.getServiceStatusHistories(this.victimServiceId).subscribe(victimServiceStatusHistories => {
|
104
|
-
// this.victimServiceStatusHistories = victimServiceStatusHistories;
|
105
|
-
this.victimServiceStatusHistoriesDataSource.data = victimServiceStatusHistories;
|
106
|
-
});
|
107
|
-
}
|
108
|
-
this.loadProvider();
|
109
|
-
}
|
110
|
-
//pass in id
|
111
|
-
isInArray(providerListCollectionKey, serviceTypeName, event) {
|
112
|
-
console.log('providerListCollectionKey');
|
113
|
-
console.log(providerListCollectionKey);
|
114
|
-
console.log('serviceTypeName');
|
115
|
-
console.log(serviceTypeName);
|
116
|
-
console.log('event.source.value');
|
117
|
-
console.log(event.checked);
|
118
|
-
if (event.checked == true) {
|
119
|
-
for (let j = 0; j < this.providerListCollection.length; j++) {
|
120
|
-
if (providerListCollectionKey == this.providerListCollection[j].groupId) {
|
121
|
-
this.providerListCollection[j].isDisplay = !this.providerListCollection[j].isDisplay;
|
122
|
-
const dialogRef = this.dialog.open(SeriveProviderComponent, {
|
123
|
-
width: '500px',
|
124
|
-
data: {
|
125
|
-
serviceType: serviceTypeName,
|
126
|
-
serviceTypeId: providerListCollectionKey,
|
127
|
-
providerCollections: [...this.providerListCollection],
|
128
|
-
},
|
129
|
-
panelClass: 'formFieldWidth480',
|
130
|
-
});
|
131
|
-
dialogRef.afterClosed().subscribe((result) => {
|
132
|
-
console.log('The dialog was closed');
|
133
|
-
console.log(result);
|
134
|
-
if (result) {
|
135
|
-
console.log('The dialog was closed, inside result');
|
136
|
-
this.savePlanProvider(providerListCollectionKey, result.voteeProviderId);
|
137
|
-
}
|
138
|
-
});
|
139
|
-
// return;
|
140
|
-
}
|
141
|
-
}
|
142
|
-
} //if event.checked == true
|
143
|
-
//this.router.navigate(['saftyPlanDetail', this.victimServiceId, this.victimId ]);
|
144
|
-
}
|
145
|
-
loadProvider() {
|
146
|
-
this.providerListCollection = [];
|
147
|
-
this._victimServicesComponent.getvVictimServiceTypeProgramProviders()
|
148
|
-
.subscribe((providerList) => {
|
149
|
-
if (providerList) {
|
150
|
-
let providers = Object.create(null);
|
151
|
-
for (let i = 0; i < providerList.length; i++) {
|
152
|
-
if (!providers[providerList[i].victimServiceTypeId]) {
|
153
|
-
providers[providerList[i].victimServiceTypeId] = [];
|
154
|
-
if (this.editSafetyPlan.vVictimServiceDetails != null) {
|
155
|
-
for (let j = 0; j < this.editSafetyPlan.vVictimServiceDetails.length; j++) {
|
156
|
-
if (providerList[i].victimServiceTypeId == this.editSafetyPlan.vVictimServiceDetails[j].victimServiceId.toString()) {
|
157
|
-
this.isDisplay = true;
|
158
|
-
}
|
159
|
-
}
|
160
|
-
}
|
161
|
-
this.providerListCollection.push({ groupId: providerList[i].victimServiceTypeId, isDisplay: this.isDisplay, collection: providers[providerList[i].victimServiceTypeId] });
|
162
|
-
}
|
163
|
-
providers[providerList[i].victimServiceTypeId].push(providerList[i]);
|
164
|
-
}
|
165
|
-
}
|
166
|
-
});
|
167
|
-
}
|
168
|
-
//---------------graphQL--------------------------------------
|
169
|
-
// getVictimServiceTypeProgramProviders(): Observable<VictimServiceTypeProgramProviderModel[]> {
|
170
|
-
// const queryString = `
|
171
|
-
// {
|
172
|
-
// findVictimServiceTypeProgramProviders {
|
173
|
-
// data {
|
174
|
-
// victimServiceTypeProgramProviderId
|
175
|
-
// victimServiceType
|
176
|
-
// victimProgramProvider
|
177
|
-
// }
|
178
|
-
// }
|
179
|
-
// }`;
|
180
|
-
// return this.http.post<any>(environment.smartApiUrl, { query: queryString })
|
181
|
-
// .map(result => {
|
182
|
-
// return result.data.findVictimServiceTypeProgramProviders.data;
|
183
|
-
// });
|
184
|
-
// }
|
185
|
-
evaluateSelection(victimServiceTypeId) {
|
186
|
-
if (this.editSafetyPlan.vVictimServiceDetails) {
|
187
|
-
return this.editSafetyPlan.vVictimServiceDetails.findIndex(r => r.victimServiceTypeId === victimServiceTypeId) >= 0;
|
188
|
-
}
|
189
|
-
}
|
190
|
-
savePlanProvider(victimServiceTypeId, victimProgramProviderId) {
|
191
|
-
console.log('savePlanProvider');
|
192
|
-
console.log(victimServiceTypeId);
|
193
|
-
console.log(victimProgramProviderId);
|
194
|
-
if (victimProgramProviderId === "" || victimProgramProviderId === null || victimProgramProviderId === undefined) {
|
195
|
-
this.snackBar.open('Please pick a program on the drop down list !', '', { duration: 120, });
|
196
|
-
// alert('Please pick a program on the drop down list !');
|
197
|
-
}
|
198
|
-
else {
|
199
|
-
if (this.victimServiceId == 0) {
|
200
|
-
//insert
|
201
|
-
console.log('insert new plan');
|
202
|
-
const safetyPlan = {
|
203
|
-
victimId: this.victimId,
|
204
|
-
fullName: null,
|
205
|
-
victimServiceId: 0,
|
206
|
-
goal: this.editSafetyPlan.goal,
|
207
|
-
comment: this.editSafetyPlan.comment,
|
208
|
-
modifiedBy: this.staffId,
|
209
|
-
victimServiceStatusId: null,
|
210
|
-
status: null,
|
211
|
-
startDate: null,
|
212
|
-
vVictimServiceDetails: null,
|
213
|
-
victimName: null
|
214
|
-
};
|
215
|
-
this._victimServicesComponent.addSafetyPlan(safetyPlan).subscribe((itms) => {
|
216
|
-
const victimServiceStatus = {
|
217
|
-
victimServiceStatusHistoryId: 0,
|
218
|
-
victimServiceId: itms.victimServiceId,
|
219
|
-
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
220
|
-
startDate: this.editSafetyPlan.startDate,
|
221
|
-
modifiedBy: this.staffId,
|
222
|
-
comment: 'test add safety plan'
|
223
|
-
};
|
224
|
-
this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe(() => {
|
225
|
-
console.log('check itms.victimServiceId iniside add victim serive status');
|
226
|
-
console.log(itms.victimServiceId);
|
227
|
-
const victimServiceDetail = {
|
228
|
-
victimServiceId: itms.victimServiceId,
|
229
|
-
victimServiceDetailId: 0,
|
230
|
-
victimServiceTypeId: victimServiceTypeId,
|
231
|
-
victimProgramProviderId: victimProgramProviderId,
|
232
|
-
modifiedBy: this.staffId,
|
233
|
-
victimProgramProvider: null
|
234
|
-
};
|
235
|
-
console.log('add plan provider here at insert');
|
236
|
-
this._victimServicesComponent.addPlanProvider(victimServiceDetail).subscribe(() => {
|
237
|
-
this.router.navigate(['saftyPlanDetail', itms.victimServiceId, this.victimId]);
|
238
|
-
});
|
239
|
-
});
|
240
|
-
});
|
241
|
-
}
|
242
|
-
else //update
|
243
|
-
{
|
244
|
-
const victimServiceDetail = {
|
245
|
-
victimServiceId: this.victimServiceId,
|
246
|
-
victimServiceDetailId: 0,
|
247
|
-
victimServiceTypeId: victimServiceTypeId,
|
248
|
-
victimProgramProviderId: victimProgramProviderId,
|
249
|
-
modifiedBy: this.staffId,
|
250
|
-
victimProgramProvider: null
|
251
|
-
};
|
252
|
-
console.log('add plan provider here at update');
|
253
|
-
this._victimServicesComponent.addPlanProvider(victimServiceDetail).subscribe(() => {
|
254
|
-
this.router.navigate(['saftyPlanDetail', this.victimServiceId, this.victimId]);
|
255
|
-
});
|
256
|
-
}
|
257
|
-
}
|
258
|
-
}
|
259
|
-
deleteProvider(victimProgramProviderId) {
|
260
|
-
this.commonDialogService
|
261
|
-
.confirm('', 'Do you want to delete this provider?', 'Yes', 'No')
|
262
|
-
.subscribe(res => {
|
263
|
-
this.result = res;
|
264
|
-
if (this.result) {
|
265
|
-
this._victimServicesComponent.deleteProvider(victimProgramProviderId, this.staffId)
|
266
|
-
.subscribe(result => {
|
267
|
-
this.snackBar.open('delete provider Successfully !', '', {
|
268
|
-
duration: 3000,
|
269
|
-
});
|
270
|
-
location.reload();
|
271
|
-
});
|
272
|
-
}
|
273
|
-
});
|
274
|
-
// location.reload();
|
275
|
-
}
|
276
|
-
saveSafetyPlan() {
|
277
|
-
if (this.editSafetyPlan.victimServiceId === undefined) {
|
278
|
-
const safetyPlan = {
|
279
|
-
victimId: this.victimId,
|
280
|
-
fullName: null,
|
281
|
-
victimServiceId: 0,
|
282
|
-
goal: this.editSafetyPlan.goal,
|
283
|
-
comment: this.editSafetyPlan.comment,
|
284
|
-
modifiedBy: this.staffId,
|
285
|
-
victimServiceStatusId: null,
|
286
|
-
status: null,
|
287
|
-
startDate: null,
|
288
|
-
vVictimServiceDetails: null,
|
289
|
-
victimName: null
|
290
|
-
};
|
291
|
-
this._victimServicesComponent.addSafetyPlan(safetyPlan).subscribe((itms) => {
|
292
|
-
const victimServiceStatus = {
|
293
|
-
victimServiceStatusHistoryId: 0,
|
294
|
-
victimServiceId: itms.victimServiceId,
|
295
|
-
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
296
|
-
startDate: this.editSafetyPlan.startDate,
|
297
|
-
modifiedBy: this.staffId,
|
298
|
-
comment: 'test add safety Plan'
|
299
|
-
};
|
300
|
-
this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe(resp => {
|
301
|
-
this.snackBar.open('Insert status successfully!', '', {
|
302
|
-
duration: 3000,
|
303
|
-
});
|
304
|
-
});
|
305
|
-
this.router.navigate(['saftyPlanDetail', itms.victimServiceId, this.victimId]);
|
306
|
-
});
|
307
|
-
}
|
308
|
-
else {
|
309
|
-
// this.editSafetyPlan.modifiedBy=this.loginStaff.staffId;
|
310
|
-
this.editSafetyPlan.modifiedBy = this.staffId;
|
311
|
-
this._victimServicesComponent.updateSafetyPlan(this.editSafetyPlan).subscribe(resp => {
|
312
|
-
// this.snackBar.open('update Successfully!', '', {
|
313
|
-
// duration: 3000,
|
314
|
-
// });
|
315
|
-
const victimServiceStatus = {
|
316
|
-
victimServiceStatusHistoryId: 0,
|
317
|
-
victimServiceId: this.editSafetyPlan.victimServiceId.toString(),
|
318
|
-
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
319
|
-
startDate: this.editSafetyPlan.startDate,
|
320
|
-
modifiedBy: this.staffId,
|
321
|
-
comment: 'test update safety Plan'
|
322
|
-
};
|
323
|
-
this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe();
|
324
|
-
this.router.navigate(['saftyPlanDetail', this.editSafetyPlan.victimServiceId, this.victimId]);
|
325
|
-
});
|
326
|
-
}
|
327
|
-
}
|
328
|
-
back() {
|
329
|
-
console.log('this.victimId');
|
330
|
-
console.log(this.victimId);
|
331
|
-
this.router.navigate(['saftyPlan', this.victimId]);
|
332
|
-
}
|
333
|
-
}
|
334
|
-
/** @nocollapse */ VictimSafetyPlanDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: VictimSafetyPlanDetailComponent, deps: [{ token: i1.MatDialog }, { token: i2.NgcSmartVictimService }, { token: i3.HttpClient }, { token: i4.MatSnackBar }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i6.CommonDialogService }, { token: i7.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
335
|
-
/** @nocollapse */ VictimSafetyPlanDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: VictimSafetyPlanDetailComponent, selector: "ng-component", providers: [CommonDialogService], ngImport: i0, template: "<mat-card>\r\n <mat-card-header>\r\n \r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-toolbar color=\"primary\">\r\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\r\n </mat-toolbar>\r\n \r\n \r\n <div class='container'>\r\n <form [formGroup]=\"spForm\" #spDetailForm=\"ngForm\" >\r\n \r\n \r\n <div class=\"row\" ><b>Victim Name:</b> {{victimName}} </div>\r\n \r\n\r\n <div class=\"row\" > \r\n <mat-form-field >\r\n <mat-label>Goal:</mat-label>\r\n <input matInput formControlName=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" >\r\n </mat-form-field>\r\n \r\n </div>\r\n \r\n <div class=\"row\"> \r\n <mat-form-field>\r\n <mat-label>Goal Status:</mat-label>\r\n <mat-select formControlName=\"goalStatus\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" >\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select> \r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"row\"> \r\n \r\n <mat-form-field>\r\n <mat-label>Goal Status Date:</mat-label>\r\n <input matInput \r\n formControlName=\"goalStatusDate\" \r\n [matDatepicker]=\"goalStatusDate\" \r\n placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\" \r\n (click)=\"goalStatusDate.open()\" \r\n >\r\n \r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker> \r\n </mat-form-field> \r\n\r\n\r\n <div class=\"help-block\" \r\n *ngIf=\"spForm.get('goalStatusDate').hasError('date') \r\n && (spForm.get('goalStatusDate').dirty || spForm.get('goalStatusDate').touched)\">\r\n <mat-error>Future Date is <strong>not allowed</strong> for goal status date</mat-error>\r\n </div>\r\n </div>\r\n\r\n \r\n <div class=\"row\" > \r\n <!-- <mat-form-field style=\"width: 200px;\"> -->\r\n <!-- <mat-label>Comment:</mat-label> \r\n <textarea mdInput \r\n class=\"textarea-content\"\r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n formControlName=\"comment\" \r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\"\r\n >\r\n </textarea> -->\r\n <!-- </mat-form-field> -->\r\n\r\n\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 formControlName=\"comment\" \r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\">\r\n </textarea> \r\n\r\n \r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n </form>\r\n </div><!--end form-->\r\n \r\n \r\n <br>\r\n\r\n <div class=\"row\"><b>Need and provider:</b><br> (click on a check box to select provider information)\r\n \r\n <mat-list>\r\n <mat-list-item *ngFor=\"let serviceType of victimServiceTypes; let i=index\" >\r\n <mat-checkbox class=\"example-margin\" name=\"victimService\" color =\"primary\" [checked]=\"evaluateSelection(serviceType.victimServiceTypeId)\" (change)=\"isInArray(serviceType.victimServiceTypeId,serviceType.name, $event);\" > {{serviceType.name}}</mat-checkbox>\r\n <div> </div>\r\n <div *ngFor=\"let provider of providerListCollection; let pi = index\" >\r\n <!-- <div *ngIf=\"provider.isDisplay && serviceType.victimServiceTypeId == provider.groupId \" class=\"Row\">\r\n \r\n <div class=\"serviceSelect\"> -->\r\n <!-- <mat-form-field> -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(ngModel)]=\"providerId\" > -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(value)]=\"providerId\" > \r\n <mat-option *ngFor=\" let providerOption of provider.collection\" [value]=\"providerOption.victimProgramProviderId\" >{{providerOption.victimProgramProvider}}</mat-option>\r\n </mat-select> -->\r\n <!-- </mat-form-field> -->\r\n \r\n <!-- </div>\r\n\r\n <div class=\"serviceButton\">\r\n <button mat-raised-button color=\"primary\" (click)=\"savePlanProvider(serviceType.victimServiceTypeId ,providerId)\">Add Provider</button>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div *ngFor=\" let serviceprovider of editSafetyPlan.vVictimServiceDetails\" >\r\n \r\n <div *ngIf=\"serviceType.victimServiceTypeId===serviceprovider.victimServiceTypeId\" class=\"Row\" >\r\n <!-- . {{ serviceprovider.victimProgramProvider}}<button mat-raised-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button> <br> -->\r\n <div class=\"serviceSelect\" >\r\n . {{ serviceprovider.victimProgramProvider}}\r\n </div>\r\n <div class=\"serviceButton\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button> \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </mat-list-item> \r\n \r\n </mat-list>\r\n </div>\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Victim Name:</b> {{victimName}} </div>\r\n <div class='col-md-7'> \r\n \r\n </div> \r\n </div> -->\r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <mat-form-field >\r\n <input matInput name=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" required placeholder=\"\">\r\n </mat-form-field>\r\n </div> \r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <mat-select name=\"goalStatus\" [style.width]=\"'50%'\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" required>\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select>\r\n </div> \r\n </div>\r\n \r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status Date:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <input matInput name=\"goalStatusDate\" [matDatepicker]=\"goalStatusDate\" placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker> \r\n </div> \r\n </div>\r\n \r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Comment:</b></div>\r\n <div class='col-md-7'> \r\n <textarea mdInput placeholder=\"\" rows=\"10\" cols=\"50\" name=\"comment\" [(ngModel)]=\"editSafetyPlan.comment\"></textarea> \r\n </div> \r\n </div> -->\r\n\r\n \r\n <div class='row' >\r\n <div class='col-md-12 text-center'>\r\n <!-- <button type=\"button\" class=\"btn btn-default btn-small\" (click)=\"print()\">Print</button> -->\r\n <button mat-raised-button color=\"primary\" (click)=\"saveSafetyPlan()\" [disabled]=\"!spForm.valid\">Save</button>\r\n <!-- <button mat-raised-button color=\"primary\" (click)=\"commondialogRef.close()\">Cancel</button> -->\r\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n </div> \r\n </div> \r\n\r\n <!--status hisotry-->\r\n \r\n <mat-table #table [dataSource]=\"victimServiceStatusHistoriesDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"startDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimServiceStatusId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatusId}} </mat-cell>\r\n </ng-container>\r\n \r\n \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 <mat-header-row *matHeaderRowDef=\"[ 'startDate', 'victimServiceStatusId', 'comment']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:[ 'startDate', 'victimServiceStatusId', 'comment'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n \r\n \r\n\r\n</mat-card-content>\r\n</mat-card>", styles: ["div.serviceSelect{width:500px}div.serviceButton{width:20%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.app-class .mat-list-item{height:auto}.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: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.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.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i11.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i11.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i12.MatList, selector: "mat-list, mat-action-list", inputs: ["disableRipple", "disabled"], exportAs: ["matList"] }, { kind: "component", type: i12.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { kind: "component", type: i13.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i14.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i15.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i15.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i15.MatLabel, selector: "mat-label" }, { kind: "directive", type: i15.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i16.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: i17.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i17.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i17.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i18.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i19.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i20.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i20.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i20.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i20.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i20.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i20.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i20.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i20.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i20.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i20.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: i8.DatePipe, name: "date" }] });
|
336
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: VictimSafetyPlanDetailComponent, decorators: [{
|
337
|
-
type: Component,
|
338
|
-
args: [{ providers: [CommonDialogService], template: "<mat-card>\r\n <mat-card-header>\r\n \r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-toolbar color=\"primary\">\r\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\r\n </mat-toolbar>\r\n \r\n \r\n <div class='container'>\r\n <form [formGroup]=\"spForm\" #spDetailForm=\"ngForm\" >\r\n \r\n \r\n <div class=\"row\" ><b>Victim Name:</b> {{victimName}} </div>\r\n \r\n\r\n <div class=\"row\" > \r\n <mat-form-field >\r\n <mat-label>Goal:</mat-label>\r\n <input matInput formControlName=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" >\r\n </mat-form-field>\r\n \r\n </div>\r\n \r\n <div class=\"row\"> \r\n <mat-form-field>\r\n <mat-label>Goal Status:</mat-label>\r\n <mat-select formControlName=\"goalStatus\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" >\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select> \r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"row\"> \r\n \r\n <mat-form-field>\r\n <mat-label>Goal Status Date:</mat-label>\r\n <input matInput \r\n formControlName=\"goalStatusDate\" \r\n [matDatepicker]=\"goalStatusDate\" \r\n placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\" \r\n (click)=\"goalStatusDate.open()\" \r\n >\r\n \r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker> \r\n </mat-form-field> \r\n\r\n\r\n <div class=\"help-block\" \r\n *ngIf=\"spForm.get('goalStatusDate').hasError('date') \r\n && (spForm.get('goalStatusDate').dirty || spForm.get('goalStatusDate').touched)\">\r\n <mat-error>Future Date is <strong>not allowed</strong> for goal status date</mat-error>\r\n </div>\r\n </div>\r\n\r\n \r\n <div class=\"row\" > \r\n <!-- <mat-form-field style=\"width: 200px;\"> -->\r\n <!-- <mat-label>Comment:</mat-label> \r\n <textarea mdInput \r\n class=\"textarea-content\"\r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n formControlName=\"comment\" \r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\"\r\n >\r\n </textarea> -->\r\n <!-- </mat-form-field> -->\r\n\r\n\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 formControlName=\"comment\" \r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\">\r\n </textarea> \r\n\r\n \r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n </form>\r\n </div><!--end form-->\r\n \r\n \r\n <br>\r\n\r\n <div class=\"row\"><b>Need and provider:</b><br> (click on a check box to select provider information)\r\n \r\n <mat-list>\r\n <mat-list-item *ngFor=\"let serviceType of victimServiceTypes; let i=index\" >\r\n <mat-checkbox class=\"example-margin\" name=\"victimService\" color =\"primary\" [checked]=\"evaluateSelection(serviceType.victimServiceTypeId)\" (change)=\"isInArray(serviceType.victimServiceTypeId,serviceType.name, $event);\" > {{serviceType.name}}</mat-checkbox>\r\n <div> </div>\r\n <div *ngFor=\"let provider of providerListCollection; let pi = index\" >\r\n <!-- <div *ngIf=\"provider.isDisplay && serviceType.victimServiceTypeId == provider.groupId \" class=\"Row\">\r\n \r\n <div class=\"serviceSelect\"> -->\r\n <!-- <mat-form-field> -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(ngModel)]=\"providerId\" > -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(value)]=\"providerId\" > \r\n <mat-option *ngFor=\" let providerOption of provider.collection\" [value]=\"providerOption.victimProgramProviderId\" >{{providerOption.victimProgramProvider}}</mat-option>\r\n </mat-select> -->\r\n <!-- </mat-form-field> -->\r\n \r\n <!-- </div>\r\n\r\n <div class=\"serviceButton\">\r\n <button mat-raised-button color=\"primary\" (click)=\"savePlanProvider(serviceType.victimServiceTypeId ,providerId)\">Add Provider</button>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div *ngFor=\" let serviceprovider of editSafetyPlan.vVictimServiceDetails\" >\r\n \r\n <div *ngIf=\"serviceType.victimServiceTypeId===serviceprovider.victimServiceTypeId\" class=\"Row\" >\r\n <!-- . {{ serviceprovider.victimProgramProvider}}<button mat-raised-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button> <br> -->\r\n <div class=\"serviceSelect\" >\r\n . {{ serviceprovider.victimProgramProvider}}\r\n </div>\r\n <div class=\"serviceButton\">\r\n <button mat-raised-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button> \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </mat-list-item> \r\n \r\n </mat-list>\r\n </div>\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Victim Name:</b> {{victimName}} </div>\r\n <div class='col-md-7'> \r\n \r\n </div> \r\n </div> -->\r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <mat-form-field >\r\n <input matInput name=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" required placeholder=\"\">\r\n </mat-form-field>\r\n </div> \r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <mat-select name=\"goalStatus\" [style.width]=\"'50%'\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" required>\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select>\r\n </div> \r\n </div>\r\n \r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status Date:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'> \r\n <input matInput name=\"goalStatusDate\" [matDatepicker]=\"goalStatusDate\" placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker> \r\n </div> \r\n </div>\r\n \r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Comment:</b></div>\r\n <div class='col-md-7'> \r\n <textarea mdInput placeholder=\"\" rows=\"10\" cols=\"50\" name=\"comment\" [(ngModel)]=\"editSafetyPlan.comment\"></textarea> \r\n </div> \r\n </div> -->\r\n\r\n \r\n <div class='row' >\r\n <div class='col-md-12 text-center'>\r\n <!-- <button type=\"button\" class=\"btn btn-default btn-small\" (click)=\"print()\">Print</button> -->\r\n <button mat-raised-button color=\"primary\" (click)=\"saveSafetyPlan()\" [disabled]=\"!spForm.valid\">Save</button>\r\n <!-- <button mat-raised-button color=\"primary\" (click)=\"commondialogRef.close()\">Cancel</button> -->\r\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\r\n </div> \r\n </div> \r\n\r\n <!--status hisotry-->\r\n \r\n <mat-table #table [dataSource]=\"victimServiceStatusHistoriesDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"startDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimServiceStatusId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatusId}} </mat-cell>\r\n </ng-container>\r\n \r\n \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 <mat-header-row *matHeaderRowDef=\"[ 'startDate', 'victimServiceStatusId', 'comment']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:[ 'startDate', 'victimServiceStatusId', 'comment'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n \r\n \r\n\r\n</mat-card-content>\r\n</mat-card>", styles: ["div.serviceSelect{width:500px}div.serviceButton{width:20%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.app-class .mat-list-item{height:auto}.textarea-content{width:500px}\n"] }]
|
339
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.NgcSmartVictimService }, { type: i3.HttpClient }, { type: i4.MatSnackBar }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.CommonDialogService }, { type: i7.UntypedFormBuilder }]; } });
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc2FmZXR5UGxhbi92aWN0aW1TYWZldHlQbGFuRGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zYWZldHlQbGFuL3ZpY3RpbVNhZmV0eVBsYW5EZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFvQixrQkFBa0IsRUFBQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQTtBQUVoRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTN0QsTUFBTSxPQUFPLCtCQUErQjtJQWtDMUMsWUFDUyxNQUFpQixFQUNoQix3QkFBK0MsRUFD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RUFBRyxJQUFJLENBQUMsUUFBUSxDQUFFLENBQUMsQ0FBQztZQUU1RixDQUFDLENBQ1YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7OytJQTljVSwrQkFBK0I7bUlBQS9CLCtCQUErQix1Q0FML0IsQ0FBQyxtQkFBbUIsQ0FBQywwQkNwQmxDLGtsaUJBeU9XOzJGRGhORSwrQkFBK0I7a0JBUDNDLFNBQVM7Z0NBRUcsQ0FBQyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2NTbWFydFZpY3RpbVNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC12aWN0aW0uc2VydmljZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1CdWlsZGVyLFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFZpY3RpbVNhZmV0eVBsYW4sVmljdGltU2VydmljZURldGFpbCxcclxuICBWaWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeSxWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlck1vZGVsLFxyXG4gIFByb3ZpZGVyTGlzdENvbGxlY3Rpb25Nb2RlbCB9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IENvbW1vbkRpYWxvZ1NlcnZpY2V9IGZyb20gJy4uLy4vY29tbW9uLWRpYWxvZy9jb21tb24tZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRPZmZlbmRlciwgTG9naW5TdGFmZiB9IGZyb20gJ0Bjc21hcnQvbmdjLXNtYXJ0LWNvcmUnO1xyXG5pbXBvcnQgeyBkYXRlVmFsaWRhdG9yLCBwYXNzRGF0ZVZhbGlkYXRvciB9IGZyb20gJy4uL3NoYXJlZC92YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgU2VyaXZlUHJvdmlkZXJDb21wb25lbnR9IGZyb20gJy4uL3NhZmV0eVBsYW4vc2VydmljZVByb3ZpZGVyLmNvbXBvbmVudCdcclxuaW1wb3J0IHsgUHJvdmlkZXJzRGlhbG9nRGF0YX0gZnJvbSAnLi4vc21hcnQtdmljdGltLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJy4vdmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbQ29tbW9uRGlhbG9nU2VydmljZV0sXHJcbiAgc3R5bGVVcmxzOiBbJy4vdmljdGltU2FmZXR5UGxhbi5jb21wb25lbnQuY3NzJ11cclxuIFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFZpY3RpbVNhZmV0eVBsYW5EZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbiAgaGlkZGVuQWRkTmV3RmxhZzogYm9vbGVhbjtcclxuICBzYWZldHlQbGFuczogVmljdGltU2FmZXR5UGxhbltdO1xyXG4gIHNhZmV0eVBsYW46IFZpY3RpbVNhZmV0eVBsYW47XHJcbiAgZWRpdFNhZmV0eVBsYW46IFZpY3RpbVNhZmV0eVBsYW4gPSA8VmljdGltU2FmZXR5UGxhbj57fTtcclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBjb250YWN0VHlwZXM6IGFueVtdO1xyXG4gIGNvbnRhY3RQdXJwb3NlczogYW55W107XHJcbiAgdmljdGltU2VydmljZVR5cGVzOiBhbnlbXTtcclxuICB2aWN0aW1TYWZldHlQbGFuczogVmljdGltU2FmZXR5UGxhbltdO1xyXG4gIHZpY3RpbVNlcnZpY2VTdGF0dXM6IGFueVtdO1xyXG4gIHByb3ZpZGVyTGlzdDogVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbFtdO1xyXG4gIHByb3ZpZGVyTGlzdENvbGxlY3Rpb246UHJvdmlkZXJMaXN0Q29sbGVjdGlvbk1vZGVsW109W107XHJcbiAgdmljdGltU2VydmljZURldGFpbDogVmljdGltU2VydmljZURldGFpbFtdO1xyXG4gIGluZHg6YW55O1xyXG4gIHNlcnZpY2VDaGVjayA9IFtdO1xyXG4gIHZpY3RpbU5hbWU6IHN0cmluZztcclxuICBpc0Rpc3BsYXk6IGJvb2xlYW47XHJcbiAgc3RhZmZJZDogbnVtYmVyO1xyXG4gIHZpY3RpbUlkOiBudW1iZXI7XHJcbiAgdmljdGltU2VydmljZUlkOiBudW1iZXI7XHJcbiAgb2ZmZW5kZXJJZDogbnVtYmVyO1xyXG4gIGxvZ2luU3RhZmY6IExvZ2luU3RhZmY7XHJcbiAgcHJpdmF0ZSBzdWI6IGFueTtcclxuICByZXN1bHQ6IGFueTtcclxuICB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzRGF0YVNvdXJjZT0gbmV3ICBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICBwcm92aWRlcklkOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWQ6IHN0cmluZztcclxuXHJcblxyXG4gIHNwRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudDogTmdjU21hcnRWaWN0aW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHVibGljIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgY29tbW9uRGlhbG9nU2VydmljZTogQ29tbW9uRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgICBcclxuICApIHtcclxuXHJcbiAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgaW5pdEZvcm0oKSB7XHJcblxyXG5cdFxyXG5cdFx0XHR0aGlzLnNwRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIHNlcnZpY2VHb2FsOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFx0XHQgIF0pKSxcclxuICAgICAgICAgIGdvYWxTdGF0dXM6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcdFx0ICBdKSksXHJcbiAgICAgICAgICBnb2FsU3RhdHVzRGF0ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxkYXRlVmFsaWRhdG9yKClcdFx0ICBdKSksXHJcbiAgICAgICAgICBjb21tZW50OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNwRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICB0aGlzLnNwRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgXHJcbiAgICB9XHJcbiBcclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBcclxuXHJcbiAgICB2YXIgZGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcclxuICAgIHRoaXMubG9naW5TdGFmZiA9IGRhdGEubG9naW5TdGFmZjtcclxuICAgIHRoaXMuc3RhZmZJZCA9ICB0aGlzLmxvZ2luU3RhZmYuc3RhZmZJZDtcclxuXHJcbiAgICB0aGlzLnN1YiA9IHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLnZpY3RpbVNlcnZpY2VJZCA9IHBhcmFtc1sndmljdGltU2VydmljZUlkJ107XHJcbiAgICAgIHRoaXMudmljdGltSWQgPSBwYXJhbXNbJ3ZpY3RpbUlkJ107XHJcbiBcclxuICAgIH0pO1xyXG4gICBcclxuICAgIHRoaXMuaGlkZGVuQWRkTmV3RmxhZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0Rpc3BsYXkgPSBmYWxzZTtcclxuICAgXHJcbiBcclxuXHJcbiAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltU2VydmljZVR5cGVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZVR5cGVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltU2VydmljZVN0YXR1cygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2VTdGF0dXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRWaWN0aW0odGhpcy52aWN0aW1JZCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltTmFtZSA9IGl0ZW1zLmZpcnN0TmFtZSArICcsICcgKyBpdGVtcy5sYXN0TmFtZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiBcclxuICAgICBcclxuICAvLy0tLS0tLS0tLS0tLS0tLWdyYXBoUUwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAvLyB0aGlzLmdldFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycygpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAvLyB0aGlzLnByb3ZpZGVyTGlzdCA9IHJlc3VsdDtcclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbVNlcnZpY2VJZCcpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbVNlcnZpY2VJZCk7XHJcbiAgICAgXHJcbiAgICBpZiAodGhpcy52aWN0aW1TZXJ2aWNlSWQhPTApe1xyXG4gICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRWaWN0aW1TZXJ2aWNlcyh0aGlzLnZpY3RpbVNlcnZpY2VJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIHZpY3RpbVNhZmV0eVBsYW5zID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd2aWN0aW1TYWZldHlQbGFucycpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codmljdGltU2FmZXR5UGxhbnMpO1xyXG5cclxuICAgICAgICAgIHRoaXMuZWRpdFNhZmV0eVBsYW4gPSB2aWN0aW1TYWZldHlQbGFuc1swXTtcclxuICAgICAgICAgIHRoaXMudmljdGltSWQgPSAgdmljdGltU2FmZXR5UGxhbnNbMF0udmljdGltSWQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0U2FmZXR5UGxhbicpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy5lZGl0U2FmZXR5UGxhbik7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5lZGl0U2FmZXR5UGxhbi5nb2FsJyk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmVkaXRTYWZldHlQbGFuLmdvYWwpO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuZWRpdFNhZmV0eVBsYW5bMF0uZ29hbCcpO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5lZGl0U2FmZXR5UGxhblswXS5nb2FsKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0U2VydmljZVN0YXR1c0hpc3Rvcmllcyh0aGlzLnZpY3RpbVNlcnZpY2VJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXMgPT4ge1xyXG4gICAgICAgIC8vIHRoaXMudmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllcyA9IHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXM7XHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzRGF0YVNvdXJjZS5kYXRhID0gdmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllcztcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZFByb3ZpZGVyKCk7XHJcbiBcclxuICB9XHJcbiAgLy9wYXNzIGluIGlkXHJcbmlzSW5BcnJheShwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5OnN0cmluZywgc2VydmljZVR5cGVOYW1lOiBzdHJpbmcsIGV2ZW50KXtcclxuXHJcbiAgICBjb25zb2xlLmxvZygncHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleScpO1xyXG4gICAgY29uc29sZS5sb2cocHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleSk7XHJcblxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdzZXJ2aWNlVHlwZU5hbWUnKTtcclxuICAgIGNvbnNvbGUubG9nKHNlcnZpY2VUeXBlTmFtZSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ2V2ZW50LnNvdXJjZS52YWx1ZScpO1xyXG4gICAgY29uc29sZS5sb2coZXZlbnQuY2hlY2tlZCk7XHJcblxyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQgPT0gdHJ1ZSl7XHJcblxyXG4gICAgICBmb3IobGV0IGo9MDtqPHRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbi5sZW5ndGg7aisrKXtcclxuICAgICAgICBpZihwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5PT10aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb25bal0uZ3JvdXBJZCl7XHJcbiAgICAgICAgICB0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb25bal0uaXNEaXNwbGF5PSF0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb25bal0uaXNEaXNwbGF5O1xyXG5cclxuICAgICBcclxuXHJcbiAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VyaXZlUHJvdmlkZXJDb21wb25lbnQsIHtcclxuICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICAgICAgZGF0YTogPFByb3ZpZGVyc0RpYWxvZ0RhdGE+e1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgc2VydmljZVR5cGU6c2VydmljZVR5cGVOYW1lLFxyXG4gICAgICAgICAgIHNlcnZpY2VUeXBlSWQ6IHByb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXksXHJcbiAgICAgICAgICAgcHJvdmlkZXJDb2xsZWN0aW9uczogWy4uLnRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2Zvcm1GaWVsZFdpZHRoNDgwJyxcclxuICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGRpYWxvZyB3YXMgY2xvc2VkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGRpYWxvZyB3YXMgY2xvc2VkLCBpbnNpZGUgcmVzdWx0Jyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVBsYW5Qcm92aWRlcihwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5LHJlc3VsdC52b3RlZVByb3ZpZGVySWQpO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgXHJcbiAgICAgICAgIC8vIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9Ly9pZiBldmVudC5jaGVja2VkID09IHRydWVcclxuICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgdGhpcy52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuICAgICAgXHJcbiAgfVxyXG5cclxubG9hZFByb3ZpZGVyKCl7IFxyXG5cclxuIHRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbj1bXTtcclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldHZWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMoKVxyXG4gICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgIChwcm92aWRlckxpc3Q6VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbFtdICk9PnsgXHJcbiAgICAgICAgaWYocHJvdmlkZXJMaXN0KXtcclxuICAgXHJcbiAgICAgICAgICBsZXQgcHJvdmlkZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICAgIGZvcihsZXQgaT0wO2k8cHJvdmlkZXJMaXN0Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFwcm92aWRlcnNbcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWRdKSB7XHJcbiAgICAgICAgICAgICAgcHJvdmlkZXJzW3Byb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkXSA9IFtdO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgaWYgKCB0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlscyAhPSBudWxsICl7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzLmxlbmd0aDsgaisrKXtcclxuICAgICAgICAgICAgICAgIGlmICggcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWQgPT0gdGhpcy5lZGl0U2FmZXR5UGxhbi52VmljdGltU2VydmljZURldGFpbHNbal0udmljdGltU2VydmljZUlkLnRvU3RyaW5nKCkgKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc0Rpc3BsYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbi5wdXNoKHsgZ3JvdXBJZDogcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWQsaXNEaXNwbGF5OnRoaXMuaXNEaXNwbGF5LCBjb2xsZWN0aW9uOiBwcm92aWRlcnNbcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWRdIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwcm92aWRlcnNbcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWRdLnB1c2gocHJvdmlkZXJMaXN0W2ldKTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICB9XHJcbi8vLS0tLS0tLS0tLS0tLS0tZ3JhcGhRTC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vICAgZ2V0VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzKCk6IE9ic2VydmFibGU8VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbFtdPiB7XHJcbi8vICAgICBjb25zdCBxdWVyeVN0cmluZyA9IGBcclxuLy8gICAgICAgICB7XHJcbi8vICAgICAgICAgICBmaW5kVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzIHtcclxuLy8gICAgICAgICAgICAgICAgIGRhdGEge1xyXG4vLyAgICAgICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcklkXHJcbi8vICAgICAgICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VUeXBlXHJcbi8vICAgICAgICAgICAgICAgICAgIHZpY3RpbVByb2dyYW1Qcm92aWRlclxyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICB9YDtcclxuIFxyXG4vLyAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oZW52aXJvbm1lbnQuc21hcnRBcGlVcmwsIHsgcXVlcnk6IHF1ZXJ5U3RyaW5nIH0pXHJcbi8vICAgICAgICAgLm1hcChyZXN1bHQgPT4ge1xyXG4vLyAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YS5maW5kVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzLmRhdGE7XHJcbi8vICAgICB9KTtcclxuLy8gfVxyXG5cclxuICBldmFsdWF0ZVNlbGVjdGlvbih2aWN0aW1TZXJ2aWNlVHlwZUlkOiBzdHJpbmcpIHtcclxuICAgaWYgKHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0U2FmZXR5UGxhbi52VmljdGltU2VydmljZURldGFpbHMuZmluZEluZGV4KHIgPT4gci52aWN0aW1TZXJ2aWNlVHlwZUlkID09PSB2aWN0aW1TZXJ2aWNlVHlwZUlkKSA+PSAwO1xyXG4gICB9XHJcbiAgfVxyXG5cclxuXHJcbnNhdmVQbGFuUHJvdmlkZXIodmljdGltU2VydmljZVR5cGVJZDogc3RyaW5nLHZpY3RpbVByb2dyYW1Qcm92aWRlcklkOiBzdHJpbmcpe1xyXG5cclxuICBjb25zb2xlLmxvZygnc2F2ZVBsYW5Qcm92aWRlcicpO1xyXG4gIGNvbnNvbGUubG9nKHZpY3RpbVNlcnZpY2VUeXBlSWQpO1xyXG4gIGNvbnNvbGUubG9nKHZpY3RpbVByb2dyYW1Qcm92aWRlcklkKTtcclxuXHJcbiAgaWYgKHZpY3RpbVByb2dyYW1Qcm92aWRlcklkID09PSBcIlwiIHx8IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkPT09IG51bGwgfHwgdmljdGltUHJvZ3JhbVByb3ZpZGVySWQgPT09IHVuZGVmaW5lZCl7XHJcbiAgXHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1BsZWFzZSBwaWNrIGEgcHJvZ3JhbSBvbiB0aGUgZHJvcCBkb3duIGxpc3QgIScsICcnLCB7IGR1cmF0aW9uOiAxMjAsfSk7XHJcbiAgIC8vIGFsZXJ0KCdQbGVhc2UgcGljayBhIHByb2dyYW0gb24gdGhlIGRyb3AgZG93biBsaXN0ICEnKTtcclxuXHJcbiAgfWVsc2VcclxuICB7XHJcbiAgICBcclxuICBpZiAoIHRoaXMudmljdGltU2VydmljZUlkID09IDApe1xyXG4gICAvL2luc2VydFxyXG4gICBjb25zb2xlLmxvZygnaW5zZXJ0IG5ldyBwbGFuJyk7XHJcbiAgIGNvbnN0IHNhZmV0eVBsYW46IFZpY3RpbVNhZmV0eVBsYW4gPSB7XHJcbiAgICB2aWN0aW1JZDp0aGlzLnZpY3RpbUlkLFxyXG4gICAgZnVsbE5hbWU6IG51bGwsXHJcbiAgICB2aWN0aW1TZXJ2aWNlSWQ6IDAsXHJcbiAgICBnb2FsOnRoaXMuZWRpdFNhZmV0eVBsYW4uZ29hbCxcclxuICAgIGNvbW1lbnQ6IHRoaXMuZWRpdFNhZmV0eVBsYW4uY29tbWVudCxcclxuICAgIG1vZGlmaWVkQnk6dGhpcy5zdGFmZklkLFxyXG4gICAgdmljdGltU2VydmljZVN0YXR1c0lkOiBudWxsLFxyXG4gICAgc3RhdHVzOiBudWxsLFxyXG4gICAgc3RhcnREYXRlOiBudWxsLFxyXG4gICAgdlZpY3RpbVNlcnZpY2VEZXRhaWxzOiBudWxsLFxyXG4gICAgdmljdGltTmFtZTogbnVsbFxyXG59O1xyXG50aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRTYWZldHlQbGFuKHNhZmV0eVBsYW4pLnN1YnNjcmliZShcclxuICAoaXRtczphbnkpPT57XHJcbiAgICBjb25zdCB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBWaWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeT0ge1xyXG4gICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeUlkOjAsXHJcbiAgICAgIHZpY3RpbVNlcnZpY2VJZDogaXRtcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWQgLFxyXG4gICAgICBzdGFydERhdGU6IHRoaXMuZWRpdFNhZmV0eVBsYW4uc3RhcnREYXRlLFxyXG4gICAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgICAgY29tbWVudDondGVzdCBhZGQgc2FmZXR5IHBsYW4nXHJcbiAgICAgIH07XHJcblxyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkVmljdGltU2VydmljZVN0YXR1cyh2aWN0aW1TZXJ2aWNlU3RhdHVzKS5zdWJzY3JpYmUoXHJcbiBcclxuICAgICAgKCkgPT57XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIGl0bXMudmljdGltU2VydmljZUlkIGluaXNpZGUgYWRkIHZpY3RpbSBzZXJpdmUgc3RhdHVzJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaXRtcy52aWN0aW1TZXJ2aWNlSWQpO1xyXG5cclxuICAgICAgICBjb25zdCB2aWN0aW1TZXJ2aWNlRGV0YWlsOiBWaWN0aW1TZXJ2aWNlRGV0YWlsID0ge1xyXG4gICAgICAgICAgdmljdGltU2VydmljZUlkOiBpdG1zLnZpY3RpbVNlcnZpY2VJZCxcclxuICAgICAgICAgIHZpY3RpbVNlcnZpY2VEZXRhaWxJZDogMCxcclxuICAgICAgICAgIHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHZpY3RpbVNlcnZpY2VUeXBlSWQsXHJcbiAgICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogdmljdGltUHJvZ3JhbVByb3ZpZGVySWQsXHJcbiAgICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXI6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FkZCBwbGFuIHByb3ZpZGVyIGhlcmUgYXQgaW5zZXJ0Jyk7XHJcbiAgICBcclxuICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRQbGFuUHJvdmlkZXIodmljdGltU2VydmljZURldGFpbCkuc3Vic2NyaWJlKFxyXG5cclxuICAgICAgICAgICgpID0+e1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsICBpdG1zLnZpY3RpbVNlcnZpY2VJZCwgIHRoaXMudmljdGltSWQgXSk7IFxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgKTtcclxuXHJcbiAgICAgIH1cclxuICAgICApO1xyXG4gICBcclxuICBcclxuICBcclxuICB9XHJcblxyXG5cclxuKTtcclxuICB9XHJcbiAgZWxzZS8vdXBkYXRlXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHZpY3RpbVNlcnZpY2VEZXRhaWw6IFZpY3RpbVNlcnZpY2VEZXRhaWwgPSB7XHJcbiAgICAgICAgdmljdGltU2VydmljZUlkOiB0aGlzLnZpY3RpbVNlcnZpY2VJZCxcclxuICAgICAgICB2aWN0aW1TZXJ2aWNlRGV0YWlsSWQ6IDAsXHJcbiAgICAgICAgdmljdGltU2VydmljZVR5cGVJZDogdmljdGltU2VydmljZVR5cGVJZCxcclxuICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogdmljdGltUHJvZ3JhbVByb3ZpZGVySWQsXHJcbiAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkLFxyXG4gICAgICAgIHZpY3RpbVByb2dyYW1Qcm92aWRlcjogbnVsbFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zb2xlLmxvZygnYWRkIHBsYW4gcHJvdmlkZXIgaGVyZSBhdCB1cGRhdGUnKTtcclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkUGxhblByb3ZpZGVyKHZpY3RpbVNlcnZpY2VEZXRhaWwpLnN1YnNjcmliZShcclxuXHJcbiAgICAgICAgKCkgPT57XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgIHRoaXMudmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG5cclxuICBkZWxldGVQcm92aWRlcih2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcclxuICAgIC5jb25maXJtKCcnLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcHJvdmlkZXI/JywgJ1llcycsICdObycpXHJcbiAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZGVsZXRlUHJvdmlkZXIodmljdGltUHJvZ3JhbVByb3ZpZGVySWQsIHRoaXMuc3RhZmZJZClcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdkZWxldGUgcHJvdmlkZXIgU3VjY2Vzc2Z1bGx5ICEnLCAnJywge1xyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgfSk7XHJcbiBcclxuICAgIC8vIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG5cclxuICB9XHJcbnNhdmVTYWZldHlQbGFuKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlSWQgPT09IHVuZGVmaW5lZCApIHtcclxuXHJcbiAgICAgICAgICBjb25zdCBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0ge1xyXG4gICAgICAgICAgICB2aWN0aW1JZDogdGhpcy52aWN0aW1JZCxcclxuICAgICAgICAgICAgZnVsbE5hbWU6IG51bGwsXHJcbiAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogMCxcclxuICAgICAgICAgICAgZ29hbDp0aGlzLmVkaXRTYWZldHlQbGFuLmdvYWwsXHJcbiAgICAgICAgICAgIGNvbW1lbnQ6IHRoaXMuZWRpdFNhZmV0eVBsYW4uY29tbWVudCxcclxuICAgICAgICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogbnVsbCxcclxuICAgICAgICAgICAgc3RhdHVzOiBudWxsLFxyXG4gICAgICAgICAgICBzdGFydERhdGU6IG51bGwsXHJcbiAgICAgICAgICAgIHZWaWN0aW1TZXJ2aWNlRGV0YWlsczogbnVsbCxcclxuICAgICAgICAgICAgdmljdGltTmFtZTogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkU2FmZXR5UGxhbihzYWZldHlQbGFuKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoaXRtczphbnkpPT57XHJcbiAgICAgICAgICAgIGNvbnN0IHZpY3RpbVNlcnZpY2VTdGF0dXM6IFZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3J5PSB7XHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlJZDowLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogaXRtcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0lkOiB0aGlzLmVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VTdGF0dXNJZCAsXHJcbiAgICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmVkaXRTYWZldHlQbGFuLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgICAgICAgICAgICBjb21tZW50Oid0ZXN0IGFkZCBzYWZldHkgUGxhbidcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkVmljdGltU2VydmljZVN0YXR1cyh2aWN0aW1TZXJ2aWNlU3RhdHVzKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgcmVzcD0+e1xyXG4gICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdJbnNlcnQgc3RhdHVzIHN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW5EZXRhaWwnLCAgaXRtcy52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmVkaXRTYWZldHlQbGFuLm1vZGlmaWVkQnk9dGhpcy5sb2dpblN0YWZmLnN0YWZmSWQ7XHJcbiAgICAgIHRoaXMuZWRpdFNhZmV0eVBsYW4ubW9kaWZpZWRCeSA9dGhpcy5zdGFmZklkO1xyXG4gICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC51cGRhdGVTYWZldHlQbGFuKHRoaXMuZWRpdFNhZmV0eVBsYW4pLnN1YnNjcmliZShcclxuICAgICAgICByZXNwPT57XHJcbiAgICAgICAgICAgIC8vICB0aGlzLnNuYWNrQmFyLm9wZW4oJ3VwZGF0ZSBTdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgICAgLy8gIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgICAvLyAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmljdGltU2VydmljZVN0YXR1czogVmljdGltU2VydmljZVN0YXR1c0hpc3Rvcnk9IHtcclxuICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeUlkOjAsXHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZUlkOiB0aGlzLmVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWQgLFxyXG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5lZGl0U2FmZXR5UGxhbi5zdGFydERhdGUsXHJcbiAgICAgICAgICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICAgICAgY29tbWVudDondGVzdCB1cGRhdGUgc2FmZXR5IFBsYW4nXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFZpY3RpbVNlcnZpY2VTdGF0dXModmljdGltU2VydmljZVN0YXR1cykuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgICBcclxuICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsICB0aGlzLmVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VJZCwgIHRoaXMudmljdGltSWQgXSk7IFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IFxyXG4gIH1cclxuXHJcbiAgYmFjaygpe1xyXG4gICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltSWQnKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltSWQpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW4nLCB0aGlzLnZpY3RpbUlkXSk7IFxyXG4gIH1cclxuIFxyXG5cclxufVxyXG5cclxuIiwiPG1hdC1jYXJkPlxyXG4gICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8bWF0LXRvb2xiYXIgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJjYXJkLWhlYWRlclwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiPlNhZmV0eSBQbGFuPC9oND5cclxuICAgICAgICA8L21hdC10b29sYmFyPlxyXG4gXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbnRhaW5lcic+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzcEZvcm1cIiAjc3BEZXRhaWxGb3JtPVwibmdGb3JtXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiA+PGI+VmljdGltIE5hbWU6PC9iPiB7e3ZpY3RpbU5hbWV9fSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiID4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R29hbDo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwic2VydmljZUdvYWxcIiBbKG5nTW9kZWwpXT1cImVkaXRTYWZldHlQbGFuLmdvYWxcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R29hbCBTdGF0dXM6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cImdvYWxTdGF0dXNcIiAgWyhuZ01vZGVsKV09XCJlZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWRcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwiIGxldCB2aWN0aW1TZXJ2aWNlU3RhdHUgb2YgdmljdGltU2VydmljZVN0YXR1c1wiIFt2YWx1ZV09XCJ2aWN0aW1TZXJ2aWNlU3RhdHUudmljdGltU2VydmljZVN0YXR1c0lkXCIgPnt7dmljdGltU2VydmljZVN0YXR1Lm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkdvYWwgU3RhdHVzIERhdGU6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ29hbFN0YXR1c0RhdGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZ29hbFN0YXR1c0RhdGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDaG9vc2UgYSBkYXRlXCIgWyhuZ01vZGVsKV09XCJlZGl0U2FmZXR5UGxhbi5zdGFydERhdGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvYWxTdGF0dXNEYXRlLm9wZW4oKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImdvYWxTdGF0dXNEYXRlXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZ29hbFN0YXR1c0RhdGU+PC9tYXQtZGF0ZXBpY2tlcj4gICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzcEZvcm0uZ2V0KCdnb2FsU3RhdHVzRGF0ZScpLmhhc0Vycm9yKCdkYXRlJykgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChzcEZvcm0uZ2V0KCdnb2FsU3RhdHVzRGF0ZScpLmRpcnR5IHx8IHNwRm9ybS5nZXQoJ2dvYWxTdGF0dXNEYXRlJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5GdXR1cmUgRGF0ZSBpcyA8c3Ryb25nPm5vdCBhbGxvd2VkPC9zdHJvbmc+IGZvciBnb2FsIHN0YXR1cyBkYXRlPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiA+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtbGFiZWw+Q29tbWVudDo8L21hdC1sYWJlbD4gICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG1kSW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dGFyZWEtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFNhZmV0eVBsYW4uY29tbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrVGV4dGFyZWFBdXRvc2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXV0b3NpemU9XCJjZGtUZXh0YXJlYUF1dG9zaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNaW5Sb3dzPVwiOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWF4Um93cz1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPiAgIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogNDAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Db21tZW50OjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHRhcmVhLWNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFNhZmV0eVBsYW4uY29tbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrVGV4dGFyZWFBdXRvc2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdXRvc2l6ZT1cImNka1RleHRhcmVhQXV0b3NpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWluUm93cz1cIjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWF4Um93cz1cIjEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT4gXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PCEtLWVuZCBmb3JtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPjxiPk5lZWQgYW5kIHByb3ZpZGVyOjwvYj48YnI+IChjbGljayBvbiBhIGNoZWNrIGJveCB0byBzZWxlY3QgcHJvdmlkZXIgaW5mb3JtYXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKm5nRm9yPVwibGV0IHNlcnZpY2VUeXBlIG9mIHZpY3RpbVNlcnZpY2VUeXBlczsgbGV0IGk9aW5kZXhcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImV4YW1wbGUtbWFyZ2luXCIgbmFtZT1cInZpY3RpbVNlcnZpY2VcIiAgY29sb3IgPVwicHJpbWFyeVwiIFtjaGVja2VkXT1cImV2YWx1YXRlU2VsZWN0aW9uKHNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQpXCIgIChjaGFuZ2UpPVwiaXNJbkFycmF5KHNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQsc2VydmljZVR5cGUubmFtZSwgJGV2ZW50KTtcIiA+IHt7c2VydmljZVR5cGUubmFtZX19PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4gJm5ic3A7Jm5ic3A7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb3ZpZGVyIG9mIHByb3ZpZGVyTGlzdENvbGxlY3Rpb247IGxldCBwaSA9IGluZGV4XCIgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInByb3ZpZGVyLmlzRGlzcGxheSAmJiBzZXJ2aWNlVHlwZS52aWN0aW1TZXJ2aWNlVHlwZUlkID09IHByb3ZpZGVyLmdyb3VwSWQgXCIgY2xhc3M9XCJSb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZpY2VTZWxlY3RcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LXNlbGVjdCAgbmFtZT1cInByb3ZpZGVyXCIgaWQ9XCJwcm92aWRlci5ncm91cElkXCIgWyhuZ01vZGVsKV09XCJwcm92aWRlcklkXCIgPiAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtc2VsZWN0ICBuYW1lPVwicHJvdmlkZXJcIiBpZD1cInByb3ZpZGVyLmdyb3VwSWRcIiBbKHZhbHVlKV09XCJwcm92aWRlcklkXCIgPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwiIGxldCBwcm92aWRlck9wdGlvbiBvZiBwcm92aWRlci5jb2xsZWN0aW9uXCIgW3ZhbHVlXT1cInByb3ZpZGVyT3B0aW9uLnZpY3RpbVByb2dyYW1Qcm92aWRlcklkXCIgPnt7cHJvdmlkZXJPcHRpb24udmljdGltUHJvZ3JhbVByb3ZpZGVyfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9tYXQtZm9ybS1maWVsZD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZpY2VCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZVBsYW5Qcm92aWRlcihzZXJ2aWNlVHlwZS52aWN0aW1TZXJ2aWNlVHlwZUlkICxwcm92aWRlcklkKVwiPkFkZCBQcm92aWRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCIgbGV0IHNlcnZpY2Vwcm92aWRlciBvZiBlZGl0U2FmZXR5UGxhbi52VmljdGltU2VydmljZURldGFpbHNcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQ9PT1zZXJ2aWNlcHJvdmlkZXIudmljdGltU2VydmljZVR5cGVJZFwiICBjbGFzcz1cIlJvd1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC4ge3sgc2VydmljZXByb3ZpZGVyLnZpY3RpbVByb2dyYW1Qcm92aWRlcn19PGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZGVsZXRlUHJvdmlkZXIoc2VydmljZXByb3ZpZGVyLnZpY3RpbVNlcnZpY2VEZXRhaWxJZClcIj5EZWxldGU8L2J1dHRvbj4gPGJyPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VydmljZVNlbGVjdFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIHt7IHNlcnZpY2Vwcm92aWRlci52aWN0aW1Qcm9ncmFtUHJvdmlkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXJ2aWNlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJkZWxldGVQcm92aWRlcihzZXJ2aWNlcHJvdmlkZXIudmljdGltU2VydmljZURldGFpbElkKVwiPkRlbGV0ZTwvYnV0dG9uPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT4gICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICBcclxuICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPSdyb3cnID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNSBkZXNjLWxhYmVsJz48Yj5WaWN0aW0gTmFtZTo8L2I+IHt7dmljdGltTmFtZX19IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC03Jz4gICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9J3JvdycgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC01IGRlc2MtbGFiZWwnPjxiPkdvYWw6PGZvbnQgY29sb3I9XCJyZWRcIj4qPC9mb250PjwvYj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNyc+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9XCJzZXJ2aWNlR29hbFwiIFsobmdNb2RlbCldPVwiZWRpdFNhZmV0eVBsYW4uZ29hbFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ncm93JyA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTUgZGVzYy1sYWJlbCc+PGI+R29hbCBTdGF0dXM6PGZvbnQgY29sb3I9XCJyZWRcIj4qPC9mb250PjwvYj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNyc+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIG5hbWU9XCJnb2FsU3RhdHVzXCIgIFtzdHlsZS53aWR0aF09XCInNTAlJ1wiICBbKG5nTW9kZWwpXT1cImVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VTdGF0dXNJZFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCIgbGV0IHZpY3RpbVNlcnZpY2VTdGF0dSBvZiB2aWN0aW1TZXJ2aWNlU3RhdHVzXCIgW3ZhbHVlXT1cInZpY3RpbVNlcnZpY2VTdGF0dS52aWN0aW1TZXJ2aWNlU3RhdHVzSWRcIiA+e3t2aWN0aW1TZXJ2aWNlU3RhdHUubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3JvdycgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC01IGRlc2MtbGFiZWwnPjxiPkdvYWwgU3RhdHVzIERhdGU6PGZvbnQgY29sb3I9XCJyZWRcIj4qPC9mb250PjwvYj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNyc+ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPVwiZ29hbFN0YXR1c0RhdGVcIiBbbWF0RGF0ZXBpY2tlcl09XCJnb2FsU3RhdHVzRGF0ZVwiIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIGEgZGF0ZVwiIFsobmdNb2RlbCldPVwiZWRpdFNhZmV0eVBsYW4uc3RhcnREYXRlXCIgIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJnb2FsU3RhdHVzRGF0ZVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNnb2FsU3RhdHVzRGF0ZT48L21hdC1kYXRlcGlja2VyPiAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdyb3cnID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNSBkZXNjLWxhYmVsJz48Yj5Db21tZW50OjwvYj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNyc+ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBtZElucHV0IHBsYWNlaG9sZGVyPVwiXCIgIHJvd3M9XCIxMFwiIGNvbHM9XCI1MFwiIG5hbWU9XCJjb21tZW50XCIgWyhuZ01vZGVsKV09XCJlZGl0U2FmZXR5UGxhbi5jb21tZW50XCI+PC90ZXh0YXJlYT4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ncm93JyA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTEyIHRleHQtY2VudGVyJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbWFsbFwiIChjbGljayk9XCJwcmludCgpXCI+UHJpbnQ8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2F2ZVNhZmV0eVBsYW4oKVwiIFtkaXNhYmxlZF09XCIhc3BGb3JtLnZhbGlkXCI+U2F2ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gJm5ic3A7Jm5ic3A7PGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAgKGNsaWNrKT1cImNvbW1vbmRpYWxvZ1JlZi5jbG9zZSgpXCI+Q2FuY2VsPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOzxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJiYWNrKClcIj5CYWNrPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLXN0YXR1cyBoaXNvdHJ5LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYmxlICN0YWJsZSBbZGF0YVNvdXJjZV09XCJ2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzRGF0YVNvdXJjZVwiIGNsYXNzPVwiZXhhbXBsZS10YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhcnREYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+U3RhcnQgRGF0ZTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuc3RhcnREYXRlIHwgZGF0ZX19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInZpY3RpbVNlcnZpY2VTdGF0dXNJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5TdGF0dXM8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy52aWN0aW1TZXJ2aWNlU3RhdHVzSWR9fSA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb21tZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNvbW1lbnQ8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5jb21tZW50fX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJbICdzdGFydERhdGUnLCAndmljdGltU2VydmljZVN0YXR1c0lkJywgJ2NvbW1lbnQnXVwiIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItcm93XCI+PC9tYXQtaGVhZGVyLXJvdz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczpbICdzdGFydERhdGUnLCAndmljdGltU2VydmljZVN0YXR1c0lkJywgJ2NvbW1lbnQnXTtcIiBjbGFzcz1cImV4YW1wbGUtcm93XCI+PC9tYXQtcm93PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFibGU+XHJcblxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuPC9tYXQtY2FyZC1jb250ZW50PlxyXG48L21hdC1jYXJkPiJdfQ==
|