vcomply-workflow-engine 2.6.101 → 2.6.102
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/vcomply-workflow-engine.umd.js +7132 -5056
- package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.js +248 -109
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.ngfactory.js +3 -2
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.ngsummary.json +1 -1
- package/esm2015/lib/formgroup/select/cs-select/cs-select.component.js +2 -2
- package/esm2015/lib/formgroup/select/cs-select/cs-select.component.ngfactory.js +3 -3
- package/esm2015/lib/log-an-issue/log-an-issue.component.ngfactory.js +6 -6
- package/esm2015/lib/more-option/more-option.component.js +11 -2
- package/esm2015/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.ngfactory.js +4 -4
- package/esm2015/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.ngfactory.js +4 -4
- package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview.module.ngfactory.js +3 -3
- package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview.module.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.ngfactory.js +4 -4
- package/esm2015/lib/sharedComponents/assessment-editor/create-assessment.module.ngfactory.js +3 -3
- package/esm2015/lib/sharedComponents/assessment-editor/create-assessment.module.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.js +1 -1
- package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.ngfactory.js +3 -3
- package/esm2015/lib/sharedComponents/bulk-view/bulk-view.component.js +9 -7
- package/esm2015/lib/sharedComponents/bulk-view/bulk-view.component.ngfactory.js +24 -19
- package/esm2015/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.ngfactory.js +4 -4
- package/esm2015/lib/sharedComponents/frequency/frequency.service.js +11 -1
- package/esm2015/lib/sharedComponents/frequency/frequency.service.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.js +212 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngfactory.js +39 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.js +187 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngfactory.js +36 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.js +26 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngfactory.js +25 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.js +287 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngfactory.js +80 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.js +57 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngfactory.js +42 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.js +197 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngfactory.js +36 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.js +137 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngfactory.js +79 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.js +181 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngfactory.js +36 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.js +31 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngfactory.js +24 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.js +102 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngfactory.js +99 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.js +165 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngfactory.js +36 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngsummary.json +1 -0
- package/esm2015/lib/workflow-assessment/workflow-assessment.component.ngfactory.js +4 -4
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +5 -5
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +10 -2
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +38 -37
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine.module.js +23 -1
- package/esm2015/lib/workflow-engine.module.ngfactory.js +3 -3
- package/esm2015/lib/workflow-engine.module.ngsummary.json +1 -1
- package/esm2015/lib/workflow-interfaces/create-policy-form.js +1 -1
- package/esm2015/lib/workflow-policy/workflow-policy.component.js +12 -45
- package/esm2015/lib/workflow-policy/workflow-policy.component.ngfactory.js +107 -159
- package/esm2015/lib/workflow-policy/workflow-policy.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-program/workflow-program.component.ngfactory.js +5 -5
- package/esm2015/lib/workflow-risk/workflow-risk.component.js +353 -17
- package/esm2015/lib/workflow-risk/workflow-risk.component.ngfactory.js +173 -115
- package/esm2015/lib/workflow-risk/workflow-risk.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-services/add-risk.service.js +3 -3
- package/esm2015/lib/workflow-services/auth.service.js +1 -1
- package/esm2015/lib/workflow-services/frequency.service.js +3 -3
- package/esm2015/lib/workflow-services/responsibility.service.js +2 -2
- package/esm2015/lib/workflow-survey-form/workflow-survey-form.component.ngfactory.js +4 -4
- package/esm2015/vcomply-workflow-engine.js +230 -219
- package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
- package/fesm2015/vcomply-workflow-engine.js +11235 -9202
- package/fesm2015/vcomply-workflow-engine.js.map +1 -1
- package/lib/add-multiple-risk/add-multiple-risk.component.d.ts +44 -1
- package/lib/sharedComponents/frequency/frequency.service.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.d.ts +37 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.d.ts +35 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.d.ts +9 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.d.ts +31 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.d.ts +16 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.d.ts +33 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.d.ts +32 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.d.ts +32 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.d.ts +10 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.d.ts +22 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.d.ts +30 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngfactory.d.ts +1 -0
- package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +2 -0
- package/lib/workflow-interfaces/create-policy-form.d.ts +0 -1
- package/lib/workflow-policy/workflow-policy.component.d.ts +0 -3
- package/lib/workflow-risk/workflow-risk.component.d.ts +77 -1
- package/lib/workflow-services/auth.service.d.ts +1 -0
- package/lib/workflow-services/frequency.service.d.ts +1 -1
- package/package.json +2 -2
- package/vcomply-workflow-engine.d.ts +229 -218
- package/vcomply-workflow-engine.metadata.json +1 -1
|
@@ -4,11 +4,14 @@ import * as XLSX from 'xlsx';
|
|
|
4
4
|
import { SnackBarService } from '../ui-kit/snack-bar/snack-bar.service';
|
|
5
5
|
import { AddRiskService } from '../workflow-services/add-risk.service';
|
|
6
6
|
import { AuthService } from '../workflow-services/auth.service';
|
|
7
|
+
import { FrequencyBulkService } from '../workflow-services/frequency.service';
|
|
8
|
+
import * as moment from 'moment';
|
|
7
9
|
export class AddMultipleRiskComponent {
|
|
8
|
-
constructor(riskService, authService, snackBar) {
|
|
10
|
+
constructor(riskService, authService, snackBar, frequencyService) {
|
|
9
11
|
this.riskService = riskService;
|
|
10
12
|
this.authService = authService;
|
|
11
13
|
this.snackBar = snackBar;
|
|
14
|
+
this.frequencyService = frequencyService;
|
|
12
15
|
this.pickerChanged = new EventEmitter();
|
|
13
16
|
this.populateOption = new EventEmitter();
|
|
14
17
|
this.closeWorkflow = new EventEmitter();
|
|
@@ -73,6 +76,7 @@ export class AddMultipleRiskComponent {
|
|
|
73
76
|
this.showSmiley = false;
|
|
74
77
|
this.member_obj_id = '';
|
|
75
78
|
this.defaultOwner = '';
|
|
79
|
+
this.frequencyType = ['weekly', 'monthly', 'quarterly', 'biannual', 'annual', 'one time'];
|
|
76
80
|
}
|
|
77
81
|
ngOnChanges(changes) {
|
|
78
82
|
}
|
|
@@ -162,6 +166,7 @@ export class AddMultipleRiskComponent {
|
|
|
162
166
|
throw new Error('Cannot use multiple files');
|
|
163
167
|
const reader = new FileReader();
|
|
164
168
|
reader.onload = (e) => {
|
|
169
|
+
var _a, _b, _c;
|
|
165
170
|
const bstr = e.target.result;
|
|
166
171
|
const wb = XLSX.read(bstr, { type: 'binary' });
|
|
167
172
|
const wsname = wb.SheetNames[0];
|
|
@@ -178,6 +183,7 @@ export class AddMultipleRiskComponent {
|
|
|
178
183
|
this.riskBulkUpload.header = cloneDeep(this.data[4].filter((dataElement) => dataElement.length > 0));
|
|
179
184
|
this.riskBulkUpload.weightFactors = cloneDeep(this.data[5].filter((weightFactor) => weightFactor.length > 0));
|
|
180
185
|
tempList.forEach((element) => {
|
|
186
|
+
var _a, _b, _c, _d, _e, _f;
|
|
181
187
|
if (element[8]) {
|
|
182
188
|
const member = {
|
|
183
189
|
name: element[8],
|
|
@@ -201,15 +207,15 @@ export class AddMultipleRiskComponent {
|
|
|
201
207
|
this.templateInfo.rcList.push(rc);
|
|
202
208
|
}
|
|
203
209
|
if (element[12]) {
|
|
204
|
-
this.templateInfo.likelihood.push(element[12]);
|
|
210
|
+
(_a = this.templateInfo) === null || _a === void 0 ? void 0 : _a.likelihood.push(element[12]);
|
|
205
211
|
}
|
|
206
212
|
if (element[13]) {
|
|
207
|
-
this.templateInfo.impact.push(element[13]);
|
|
213
|
+
(_b = this.templateInfo) === null || _b === void 0 ? void 0 : _b.impact.push(element[13]);
|
|
208
214
|
}
|
|
209
|
-
if (this.riskBulkUpload.weightFactors
|
|
215
|
+
if (((_d = (_c = this.riskBulkUpload) === null || _c === void 0 ? void 0 : _c.weightFactors) === null || _d === void 0 ? void 0 : _d.includes('Velocity')) && element[14]) {
|
|
210
216
|
this.templateInfo.velocity.push(element[14]);
|
|
211
217
|
}
|
|
212
|
-
if (this.riskBulkUpload.weightFactors
|
|
218
|
+
if (((_f = (_e = this.riskBulkUpload) === null || _e === void 0 ? void 0 : _e.weightFactors) === null || _f === void 0 ? void 0 : _f.includes('Vulnerability')) && element[15]) {
|
|
213
219
|
this.templateInfo.vulnerability.push(element[15]);
|
|
214
220
|
}
|
|
215
221
|
});
|
|
@@ -218,14 +224,14 @@ export class AddMultipleRiskComponent {
|
|
|
218
224
|
this.isWrongFile = true;
|
|
219
225
|
return;
|
|
220
226
|
}
|
|
221
|
-
if (this.riskBulkUpload.header[0] !== '
|
|
227
|
+
if (this.riskBulkUpload.header[0] !== 'What risk would you like to manage?*') {
|
|
222
228
|
this.errorMessage = 'The incorrect file has been uploaded. Please upload the template file for Risk Category:' + this.category.selectedCategory.category_name + ' RETRY';
|
|
223
229
|
this.isWrongFile = false;
|
|
224
230
|
this.isWrongFormat = true;
|
|
225
231
|
return;
|
|
226
232
|
}
|
|
227
|
-
this.data = this.data.slice(7);
|
|
228
|
-
const defaultOwner = this.templateInfo.ownerList.findIndex((ele) => ele.member_id == this.memberId);
|
|
233
|
+
this.data = (_a = this.data) === null || _a === void 0 ? void 0 : _a.slice(7);
|
|
234
|
+
const defaultOwner = (_c = (_b = this.templateInfo) === null || _b === void 0 ? void 0 : _b.ownerList) === null || _c === void 0 ? void 0 : _c.findIndex((ele) => (ele === null || ele === void 0 ? void 0 : ele.member_id) == this.memberId);
|
|
229
235
|
if (defaultOwner != -1) {
|
|
230
236
|
this.defaultOwner = this.templateInfo.ownerList[defaultOwner].name;
|
|
231
237
|
}
|
|
@@ -261,73 +267,71 @@ export class AddMultipleRiskComponent {
|
|
|
261
267
|
}
|
|
262
268
|
const riskData = this.data.filter((dataElement) => dataElement.length > 0);
|
|
263
269
|
riskData.forEach((risk, index) => {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if (this.assessmentDeadLine) {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}
|
|
321
|
-
if (obj.likelihood && !this.templateInfo.likelihood.includes(obj.likelihood)) {
|
|
270
|
+
// const obj: any = {
|
|
271
|
+
// riskName: risk[0] ?? '',
|
|
272
|
+
// description: risk[1] ?? '',
|
|
273
|
+
// rcName: risk[2] ?? '',
|
|
274
|
+
// owner: risk[3] ?? '',
|
|
275
|
+
// mitigationPriority: risk[4] ?? '',
|
|
276
|
+
// overseer: risk[5] ?? '',
|
|
277
|
+
// isValid: this.checkValidity(risk),
|
|
278
|
+
// }
|
|
279
|
+
var _a, _b, _c, _d;
|
|
280
|
+
// if (this.assessmentDeadLine) {
|
|
281
|
+
// obj.assessmentDeadLine = risk[6] ?? '';
|
|
282
|
+
// obj.likelihood = risk[7] ?? '';
|
|
283
|
+
// obj.impact = risk[8] ?? '';
|
|
284
|
+
// if (this.riskBulkUpload.weightFactors.length == 3) {
|
|
285
|
+
// obj.velocity = risk[9] ?? '';
|
|
286
|
+
// }
|
|
287
|
+
// if (this.riskBulkUpload.weightFactors.length == 4) {
|
|
288
|
+
// obj.velocity = risk[9] ?? '';
|
|
289
|
+
// obj.vulnerability = risk[10] ?? '';
|
|
290
|
+
// }
|
|
291
|
+
// const customTags: any = [];
|
|
292
|
+
// this.category.selectedCategory.custom_tag.forEach((tag: any, index: any) => {
|
|
293
|
+
// if (tag) {
|
|
294
|
+
// const cTag = {
|
|
295
|
+
// custom_tag_value: risk[7 + this.riskBulkUpload.weightFactors.length + index] ?? '',
|
|
296
|
+
// custom_tag_name: tag.tagName
|
|
297
|
+
// };
|
|
298
|
+
// customTags.push(cTag);
|
|
299
|
+
// }
|
|
300
|
+
// });
|
|
301
|
+
// obj.customTag = customTags;
|
|
302
|
+
// } else {
|
|
303
|
+
// obj.likelihood = risk[6] ?? '';
|
|
304
|
+
// obj.impact = risk[7] ?? '';
|
|
305
|
+
// if (this.riskBulkUpload.weightFactors.length == 3) {
|
|
306
|
+
// obj.velocity = risk[8] ?? '';
|
|
307
|
+
// }
|
|
308
|
+
// if (this.riskBulkUpload.weightFactors.length == 4) {
|
|
309
|
+
// obj.velocity = risk[8] ?? '';
|
|
310
|
+
// obj.vulnerability = risk[9] ?? '';
|
|
311
|
+
// }
|
|
312
|
+
// const customTags: any = [];
|
|
313
|
+
// this.category.selectedCategory.custom_tag.forEach((tag: any, index: any) => {
|
|
314
|
+
// if (tag) {
|
|
315
|
+
// const cTag = {
|
|
316
|
+
// custom_tag_value: risk[6 + this.riskBulkUpload.weightFactors.length + index] ?? '',
|
|
317
|
+
// custom_tag_name: tag.tagName
|
|
318
|
+
// };
|
|
319
|
+
// customTags.push(cTag);
|
|
320
|
+
// }
|
|
321
|
+
// });
|
|
322
|
+
// obj.customTag = customTags;
|
|
323
|
+
// }
|
|
324
|
+
let obj = this.setRiskDetails(risk);
|
|
325
|
+
if ((obj === null || obj === void 0 ? void 0 : obj.likelihood) && !((_a = this.templateInfo) === null || _a === void 0 ? void 0 : _a.likelihood.includes(obj === null || obj === void 0 ? void 0 : obj.likelihood))) {
|
|
322
326
|
obj.isValid = false;
|
|
323
327
|
}
|
|
324
|
-
if (obj.impact && !this.templateInfo.impact.includes(obj.impact)) {
|
|
328
|
+
if ((obj === null || obj === void 0 ? void 0 : obj.impact) && !((_b = this.templateInfo) === null || _b === void 0 ? void 0 : _b.impact.includes(obj === null || obj === void 0 ? void 0 : obj.impact))) {
|
|
325
329
|
obj.isValid = false;
|
|
326
330
|
}
|
|
327
|
-
if (obj.velocity && !this.templateInfo.velocity.includes(obj.velocity)) {
|
|
331
|
+
if ((obj === null || obj === void 0 ? void 0 : obj.velocity) && !((_c = this.templateInfo) === null || _c === void 0 ? void 0 : _c.velocity.includes(obj === null || obj === void 0 ? void 0 : obj.velocity))) {
|
|
328
332
|
obj.isValid = false;
|
|
329
333
|
}
|
|
330
|
-
if (obj.vulnerability && !this.templateInfo.vulnerability.includes(obj.vulnerability)) {
|
|
334
|
+
if ((obj === null || obj === void 0 ? void 0 : obj.vulnerability) && !((_d = this.templateInfo) === null || _d === void 0 ? void 0 : _d.vulnerability.includes(obj === null || obj === void 0 ? void 0 : obj.vulnerability))) {
|
|
331
335
|
obj.isValid = false;
|
|
332
336
|
}
|
|
333
337
|
this.riskBulkUpload.risks.push(obj);
|
|
@@ -337,7 +341,7 @@ export class AddMultipleRiskComponent {
|
|
|
337
341
|
this.isWrongFormat = false;
|
|
338
342
|
this.showExcel = true;
|
|
339
343
|
};
|
|
340
|
-
reader.readAsBinaryString(target.files[0]);
|
|
344
|
+
reader.readAsBinaryString(target === null || target === void 0 ? void 0 : target.files[0]);
|
|
341
345
|
}
|
|
342
346
|
catch (e) {
|
|
343
347
|
console.error(e);
|
|
@@ -352,11 +356,13 @@ export class AddMultipleRiskComponent {
|
|
|
352
356
|
return isEmpty;
|
|
353
357
|
}
|
|
354
358
|
checkValidity(risk) {
|
|
359
|
+
var _a, _b;
|
|
355
360
|
const re = / |<br>/g;
|
|
356
361
|
let trimmedName = (risk[0]) ? risk[0].toString().replace(re, '').trim() : '';
|
|
357
362
|
trimmedName = trimmedName.replace(/ +/g, ' ');
|
|
358
|
-
|
|
359
|
-
|
|
363
|
+
// || (this.assessmentDeadLine && (!risk[6]))
|
|
364
|
+
if ((!trimmedName) || (risk[3] && (risk[3] == risk[6])) || ((!risk[3]) && (this.defaultOwner == risk[6]))
|
|
365
|
+
|| (!risk[2]) || (!((_a = this.frequencyType) === null || _a === void 0 ? void 0 : _a.includes((_b = risk[4]) === null || _b === void 0 ? void 0 : _b.toLowerCase())))) {
|
|
360
366
|
return false;
|
|
361
367
|
}
|
|
362
368
|
else {
|
|
@@ -388,22 +394,24 @@ export class AddMultipleRiskComponent {
|
|
|
388
394
|
this.loader = true;
|
|
389
395
|
const payload = [];
|
|
390
396
|
this.riskBulkUpload.risks.forEach((risk) => {
|
|
397
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
|
|
398
|
+
const frequencyValue = this.frequencyService.shortHand_freqCal(risk === null || risk === void 0 ? void 0 : risk.frequency);
|
|
391
399
|
if (risk.isValid) {
|
|
392
400
|
const obj = {
|
|
393
|
-
title: risk.riskName,
|
|
394
|
-
description: risk.description,
|
|
395
|
-
category_custom_tag: risk.customTag,
|
|
396
|
-
assessment_deadline_enable: this.settingsInfo.assessment_deadline_enable,
|
|
397
|
-
owner: (risk.owner) ? this.returnIds(risk.owner, 'owner') : this.returnIds(this.defaultOwner, 'owner'),
|
|
398
|
-
category: (this.category.selectedCategory.category_id) ? [this.category.selectedCategory.category_id] : [],
|
|
399
|
-
manage_oversight: this.returnIds(risk.overseer, 'overseer'),
|
|
400
|
-
rc_id: this.returnIds(risk.rcName, 'rc_id'),
|
|
401
|
-
head_ids: this.returnIds(risk.rcName, 'rc_owner_ids'),
|
|
401
|
+
title: risk === null || risk === void 0 ? void 0 : risk.riskName,
|
|
402
|
+
description: risk === null || risk === void 0 ? void 0 : risk.description,
|
|
403
|
+
category_custom_tag: risk === null || risk === void 0 ? void 0 : risk.customTag,
|
|
404
|
+
assessment_deadline_enable: (_a = this.settingsInfo) === null || _a === void 0 ? void 0 : _a.assessment_deadline_enable,
|
|
405
|
+
owner: (risk === null || risk === void 0 ? void 0 : risk.owner) ? this.returnIds(risk === null || risk === void 0 ? void 0 : risk.owner, 'owner') : this.returnIds(this.defaultOwner, 'owner'),
|
|
406
|
+
category: ((_c = (_b = this.category) === null || _b === void 0 ? void 0 : _b.selectedCategory) === null || _c === void 0 ? void 0 : _c.category_id) ? [(_e = (_d = this.category) === null || _d === void 0 ? void 0 : _d.selectedCategory) === null || _e === void 0 ? void 0 : _e.category_id] : [],
|
|
407
|
+
manage_oversight: this.returnIds(risk === null || risk === void 0 ? void 0 : risk.overseer, 'overseer'),
|
|
408
|
+
rc_id: this.returnIds(risk === null || risk === void 0 ? void 0 : risk.rcName, 'rc_id'),
|
|
409
|
+
head_ids: this.returnIds(risk === null || risk === void 0 ? void 0 : risk.rcName, 'rc_owner_ids'),
|
|
402
410
|
rating_arr: [
|
|
403
|
-
risk.likelihood ? risk.likelihood.split(' - ')[1] : 0,
|
|
404
|
-
risk.impact ? risk.impact.split(' - ')[1] : 0,
|
|
405
|
-
risk.velocity ? risk.velocity.split(' - ')[1] : 0,
|
|
406
|
-
risk.vulnerability ? risk.vulnerability.split(' - ')[1] : 0,
|
|
411
|
+
(risk === null || risk === void 0 ? void 0 : risk.likelihood) ? risk === null || risk === void 0 ? void 0 : risk.likelihood.split(' - ')[1] : 0,
|
|
412
|
+
(risk === null || risk === void 0 ? void 0 : risk.impact) ? risk === null || risk === void 0 ? void 0 : risk.impact.split(' - ')[1] : 0,
|
|
413
|
+
(risk === null || risk === void 0 ? void 0 : risk.velocity) ? risk === null || risk === void 0 ? void 0 : risk.velocity.split(' - ')[1] : 0,
|
|
414
|
+
(risk === null || risk === void 0 ? void 0 : risk.vulnerability) ? risk === null || risk === void 0 ? void 0 : risk.vulnerability.split(' - ')[1] : 0,
|
|
407
415
|
],
|
|
408
416
|
member_id: this.memberId,
|
|
409
417
|
organisation_id: this.organizationId,
|
|
@@ -411,34 +419,47 @@ export class AddMultipleRiskComponent {
|
|
|
411
419
|
IfAssessmentDone: 0,
|
|
412
420
|
workshop_id: '',
|
|
413
421
|
complete_assessment: (completeAssessment) ? 1 : 0,
|
|
414
|
-
mitigation: this.returnIds(risk.mitigationPriority, 'mitigation'),
|
|
415
|
-
weightage_enable: this.settingsInfo.weightage_enable,
|
|
416
|
-
treatment_type: this.settingsInfo.treatment_criteria,
|
|
417
|
-
weightage_details: this.settingsInfo.weightage_details,
|
|
418
|
-
weightage_set_by: this.settingsInfo.weightage_set_by,
|
|
422
|
+
mitigation: this.returnIds(risk === null || risk === void 0 ? void 0 : risk.mitigationPriority, 'mitigation'),
|
|
423
|
+
weightage_enable: (_f = this.settingsInfo) === null || _f === void 0 ? void 0 : _f.weightage_enable,
|
|
424
|
+
treatment_type: (_g = this.settingsInfo) === null || _g === void 0 ? void 0 : _g.treatment_criteria,
|
|
425
|
+
weightage_details: (_h = this.settingsInfo) === null || _h === void 0 ? void 0 : _h.weightage_details,
|
|
426
|
+
weightage_set_by: (_j = this.settingsInfo) === null || _j === void 0 ? void 0 : _j.weightage_set_by,
|
|
419
427
|
weightage_str: [
|
|
420
|
-
this.settingsInfo.weightage_details.impact.value,
|
|
421
|
-
this.settingsInfo.weightage_details.likelihood.value,
|
|
422
|
-
this.settingsInfo.weightage_details.velocity.value,
|
|
423
|
-
this.settingsInfo.weightage_details.vulnerability.value,
|
|
428
|
+
(_l = (_k = this.settingsInfo) === null || _k === void 0 ? void 0 : _k.weightage_details) === null || _l === void 0 ? void 0 : _l.impact.value,
|
|
429
|
+
(_o = (_m = this.settingsInfo) === null || _m === void 0 ? void 0 : _m.weightage_details) === null || _o === void 0 ? void 0 : _o.likelihood.value,
|
|
430
|
+
(_q = (_p = this.settingsInfo) === null || _p === void 0 ? void 0 : _p.weightage_details) === null || _q === void 0 ? void 0 : _q.velocity.value,
|
|
431
|
+
(_s = (_r = this.settingsInfo) === null || _r === void 0 ? void 0 : _r.weightage_details) === null || _s === void 0 ? void 0 : _s.vulnerability.value,
|
|
424
432
|
],
|
|
425
|
-
assessment_deadline_set_by: this.settingsInfo
|
|
426
|
-
|
|
433
|
+
// assessment_deadline_set_by: this.settingsInfo?.assessment_deadline_set_by, //check1 not appearing
|
|
434
|
+
assessment_deadline_set_by: (_u = (_t = this.settingsInfo) === null || _t === void 0 ? void 0 : _t.assessment_deadline_set_by) !== null && _u !== void 0 ? _u : this.memberId,
|
|
435
|
+
assessment_deadline_days: ((_v = this.settingsInfo) === null || _v === void 0 ? void 0 : _v.assessment_deadline_enable) ? (_w = this.settingsInfo) === null || _w === void 0 ? void 0 : _w.assessment_deadline_days : risk === null || risk === void 0 ? void 0 : risk.assessmentDeadLine,
|
|
436
|
+
frequency_details: {
|
|
437
|
+
frequency: frequencyValue,
|
|
438
|
+
started_at: (_x = this.changeTimeZone(new Date)) !== null && _x !== void 0 ? _x : moment().format("YYYY-MM-DD"),
|
|
439
|
+
frequency_time: "11:59 pm",
|
|
440
|
+
remind_before_days: (risk === null || risk === void 0 ? void 0 : risk.emailReminder) ? risk === null || risk === void 0 ? void 0 : risk.emailReminder : this.setDefaultEmailReminderValue(risk === null || risk === void 0 ? void 0 : risk.frequency),
|
|
441
|
+
},
|
|
442
|
+
risk_label: this.setRiskLabel(risk === null || risk === void 0 ? void 0 : risk.riskLabel),
|
|
443
|
+
mitigation_plan_recommendation: (_y = risk === null || risk === void 0 ? void 0 : risk.mitigationPlans) !== null && _y !== void 0 ? _y : '',
|
|
444
|
+
sameRiskRatingsForAllRC: (_z = risk === null || risk === void 0 ? void 0 : risk.applySameRiskRating) !== null && _z !== void 0 ? _z : 'No',
|
|
427
445
|
};
|
|
428
446
|
payload.push(obj);
|
|
429
447
|
}
|
|
430
448
|
});
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
449
|
+
console.log("payloadpayloadpayloadpayloadpayloadpayload ====>", payload);
|
|
450
|
+
// this.riskService.addBulkRisk(payload).subscribe((res: any) => {
|
|
451
|
+
// this.loader = false;
|
|
452
|
+
// this.showExcel = false;
|
|
453
|
+
// this.showSmiley = true;
|
|
454
|
+
// this.riskData = res;
|
|
455
|
+
// },
|
|
456
|
+
// err => {
|
|
457
|
+
// console.log(err);
|
|
458
|
+
// this.loader = false;
|
|
459
|
+
// this.showExcel = false;
|
|
460
|
+
// this.snackBar.show('OOPS! Something went wrong and the page could not be loaded. Could you please try one more time?', 'alert');
|
|
461
|
+
// }
|
|
462
|
+
// );
|
|
442
463
|
}
|
|
443
464
|
returnIds(item, key) {
|
|
444
465
|
switch (key) {
|
|
@@ -547,6 +568,123 @@ export class AddMultipleRiskComponent {
|
|
|
547
568
|
}
|
|
548
569
|
window.location.href = url;
|
|
549
570
|
}
|
|
571
|
+
/**
|
|
572
|
+
* It takes an array of strings and returns an object with the array values as properties.
|
|
573
|
+
* </code>
|
|
574
|
+
* @param {any} risk - any = [
|
|
575
|
+
* @returns [
|
|
576
|
+
* {
|
|
577
|
+
* "riskName": "",
|
|
578
|
+
* "description": "",
|
|
579
|
+
* "rcName": "",
|
|
580
|
+
* "owner": "",
|
|
581
|
+
* "frequency": "",
|
|
582
|
+
* "emailReminder": "",
|
|
583
|
+
* "overseer": "",
|
|
584
|
+
* "isValid": false,
|
|
585
|
+
* "mitigationPriority": "",
|
|
586
|
+
*/
|
|
587
|
+
setRiskDetails(risk) {
|
|
588
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
|
|
589
|
+
let obj;
|
|
590
|
+
obj = {
|
|
591
|
+
riskName: (_a = risk[0]) !== null && _a !== void 0 ? _a : '',
|
|
592
|
+
description: (_b = risk[1]) !== null && _b !== void 0 ? _b : '',
|
|
593
|
+
rcName: (_c = risk[2]) !== null && _c !== void 0 ? _c : '',
|
|
594
|
+
owner: (_d = risk[3]) !== null && _d !== void 0 ? _d : '',
|
|
595
|
+
frequency: (_e = risk[4]) !== null && _e !== void 0 ? _e : '',
|
|
596
|
+
emailReminder: risk[5],
|
|
597
|
+
overseer: (_f = risk[6]) !== null && _f !== void 0 ? _f : '',
|
|
598
|
+
isValid: this.checkValidity(risk),
|
|
599
|
+
};
|
|
600
|
+
let index = 7;
|
|
601
|
+
if ((_h = (_g = this.riskBulkUpload) === null || _g === void 0 ? void 0 : _g.header) === null || _h === void 0 ? void 0 : _h.includes('Recommended Mitigation Priority')) {
|
|
602
|
+
obj['mitigationPriority'] = (_j = risk[index]) !== null && _j !== void 0 ? _j : '';
|
|
603
|
+
index++;
|
|
604
|
+
}
|
|
605
|
+
obj['mitigationPlans'] = (_k = risk[index]) !== null && _k !== void 0 ? _k : '';
|
|
606
|
+
index++;
|
|
607
|
+
obj['riskLabel'] = (_l = risk[index]) !== null && _l !== void 0 ? _l : '';
|
|
608
|
+
index++;
|
|
609
|
+
obj['likelihood'] = (_m = risk[index]) !== null && _m !== void 0 ? _m : '';
|
|
610
|
+
index++;
|
|
611
|
+
obj['impact'] = (_o = risk[index]) !== null && _o !== void 0 ? _o : '';
|
|
612
|
+
index++;
|
|
613
|
+
if ((_q = (_p = this.riskBulkUpload) === null || _p === void 0 ? void 0 : _p.weightFactors) === null || _q === void 0 ? void 0 : _q.includes('Velocity')) {
|
|
614
|
+
obj['velocity'] = (_r = risk[index]) !== null && _r !== void 0 ? _r : '';
|
|
615
|
+
index++;
|
|
616
|
+
}
|
|
617
|
+
if ((_t = (_s = this.riskBulkUpload) === null || _s === void 0 ? void 0 : _s.weightFactors) === null || _t === void 0 ? void 0 : _t.includes('Vulnerability')) {
|
|
618
|
+
obj['vulnerability'] = (_u = risk[index]) !== null && _u !== void 0 ? _u : '';
|
|
619
|
+
index++;
|
|
620
|
+
}
|
|
621
|
+
if ((_w = (_v = this.riskBulkUpload) === null || _v === void 0 ? void 0 : _v.header) === null || _w === void 0 ? void 0 : _w.includes('Do you want to apply the same risk ratings for all Responsibility Centers?')) {
|
|
622
|
+
obj['applySameRiskRating'] = (_x = risk[index]) !== null && _x !== void 0 ? _x : '';
|
|
623
|
+
index++;
|
|
624
|
+
}
|
|
625
|
+
const customTags = [];
|
|
626
|
+
(_0 = (_z = (_y = this.category) === null || _y === void 0 ? void 0 : _y.selectedCategory) === null || _z === void 0 ? void 0 : _z.custom_tag) === null || _0 === void 0 ? void 0 : _0.forEach((tag, i) => {
|
|
627
|
+
var _a;
|
|
628
|
+
if (tag) {
|
|
629
|
+
const cTag = {
|
|
630
|
+
custom_tag_value: (_a = risk[index + i]) !== null && _a !== void 0 ? _a : '',
|
|
631
|
+
custom_tag_name: tag.tagName
|
|
632
|
+
};
|
|
633
|
+
customTags.push(cTag);
|
|
634
|
+
}
|
|
635
|
+
});
|
|
636
|
+
obj['customTag'] = customTags;
|
|
637
|
+
obj['isValidFrequency'] = (_1 = this.frequencyType) === null || _1 === void 0 ? void 0 : _1.includes((_2 = obj === null || obj === void 0 ? void 0 : obj.frequency) === null || _2 === void 0 ? void 0 : _2.toLowerCase());
|
|
638
|
+
return obj;
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* If the frequencyType is weekly, return 2, if it's monthly, return 7, if it's quarterly, return 7,
|
|
642
|
+
* if it's biannual, return 30, if it's annual, return 30, if it's one time, return 15, otherwise
|
|
643
|
+
* return 0.
|
|
644
|
+
* @param {string} [frequencyType] - string - the frequency type of the reminder
|
|
645
|
+
* @returns The return value is the number of days before the event that the reminder should be sent.
|
|
646
|
+
*/
|
|
647
|
+
setDefaultEmailReminderValue(frequencyType) {
|
|
648
|
+
switch (frequencyType === null || frequencyType === void 0 ? void 0 : frequencyType.toLowerCase()) {
|
|
649
|
+
case 'weekly': return 2;
|
|
650
|
+
case 'monthly': return 7;
|
|
651
|
+
case 'quarterly': return 7;
|
|
652
|
+
case 'biannual': return 30;
|
|
653
|
+
case 'annual': return 30;
|
|
654
|
+
case 'one time': return 15;
|
|
655
|
+
default: return 0;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* If the label is 'new risk', return 1, if the label is 'emerging/rapidly changing risks', return 2,
|
|
660
|
+
* otherwise return 1
|
|
661
|
+
* @param {string} [label] - the label of the risk
|
|
662
|
+
* @returns The return value is the value of the last expression in the function.
|
|
663
|
+
*/
|
|
664
|
+
setRiskLabel(label) {
|
|
665
|
+
switch (label === null || label === void 0 ? void 0 : label.toLowerCase()) {
|
|
666
|
+
case 'new risk': return 1;
|
|
667
|
+
case 'emerging/rapidly changing risks': return 2;
|
|
668
|
+
default: return 1;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* "If the date is a number, convert it to a date object, then create a new date object with the
|
|
673
|
+
* timezone set to the user's timezone, then return the date in the format YYYY-MM-DD."
|
|
674
|
+
* </code>
|
|
675
|
+
* @param {any} date - any - the date you want to change the timezone of
|
|
676
|
+
* @returns The date is being returned in the timezone of the user.
|
|
677
|
+
*/
|
|
678
|
+
changeTimeZone(date) {
|
|
679
|
+
var _a;
|
|
680
|
+
if (typeof date === 'number') {
|
|
681
|
+
date = new Date(date);
|
|
682
|
+
}
|
|
683
|
+
const invDate = new Date(date.toLocaleString('en-US', {
|
|
684
|
+
timeZone: (_a = this.authService.userDetails) === null || _a === void 0 ? void 0 : _a.timezone,
|
|
685
|
+
}));
|
|
686
|
+
return moment(invDate).format("YYYY-MM-DD");
|
|
687
|
+
}
|
|
550
688
|
}
|
|
551
689
|
AddMultipleRiskComponent.decorators = [
|
|
552
690
|
{ type: Component, args: [{
|
|
@@ -558,7 +696,8 @@ AddMultipleRiskComponent.decorators = [
|
|
|
558
696
|
AddMultipleRiskComponent.ctorParameters = () => [
|
|
559
697
|
{ type: AddRiskService },
|
|
560
698
|
{ type: AuthService },
|
|
561
|
-
{ type: SnackBarService }
|
|
699
|
+
{ type: SnackBarService },
|
|
700
|
+
{ type: FrequencyBulkService }
|
|
562
701
|
];
|
|
563
702
|
AddMultipleRiskComponent.propDecorators = {
|
|
564
703
|
pickerChanged: [{ type: Output }],
|
|
@@ -566,4 +705,4 @@ AddMultipleRiskComponent.propDecorators = {
|
|
|
566
705
|
closeWorkflow: [{ type: Output }],
|
|
567
706
|
disconnectRefresh: [{ type: Output }]
|
|
568
707
|
};
|
|
569
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJpc2svYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVMsTUFBTSxFQUFFLFlBQVksRUFBNkQsTUFBTSxlQUFlLENBQUM7QUFDbEksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQVNoRSxNQUFNLE9BQU8sd0JBQXdCO0lBNEVuQyxZQUFvQixXQUEyQixFQUNyQyxXQUF3QixFQUFVLFFBQXdCO1FBRGhELGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUNyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBNUUxRCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELGlCQUFZLEdBQWlCO1lBQzNCLFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsV0FBVztnQkFDakIsSUFBSSxFQUFFLEVBQUU7YUFDVDtZQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsSUFBSSxF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QyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoRCxHQUFHLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3hDO2FBQU07WUFDTCxHQUFHLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEQsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1NBQ3pCO2FBQU07WUFDTCxHQUFHLElBQUkscUJBQXFCLENBQUM7U0FDOUI7UUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDN0IsQ0FBQzs7O1lBM2xCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsZ2pJQUFpRDs7YUFHbEQ7OztZQVRRLGNBQWM7WUFDZCxXQUFXO1lBRlgsZUFBZTs7OzRCQVlyQixNQUFNOzZCQUNOLE1BQU07NEJBQ04sTUFBTTtnQ0FDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeUxpc3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhdGVnb3J5TGlzdCc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGRSaXNrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2FkZC1yaXNrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcblxyXG50eXBlIEFPQSA9IGFueVtdW107XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWFkZC1tdWx0aXBsZS1yaXNrJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkZC1tdWx0aXBsZS1yaXNrLmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXSxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRNdWx0aXBsZVJpc2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQE91dHB1dCgpIHBpY2tlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHBvcHVsYXRlT3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjYXRlZ29yeUxpc3Q6IENhdGVnb3J5TGlzdCA9IHtcclxuICAgIHN0cmF0ZWdpYzoge1xyXG4gICAgICBuYW1lOiAnU1RSQVRFR0lDJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgICBvcGVyYXRpb25hbDoge1xyXG4gICAgICBuYW1lOiAnT1BFUkFUSU9OQUwnLFxyXG4gICAgICBkYXRhOiBbXVxyXG4gICAgfSxcclxuICAgIGNvbXBsaWFuY2U6IHtcclxuICAgICAgbmFtZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICBkYXRhOiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBuYW1lOiAnT1RIRVJTJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY2F0ZWdvcnk6IGFueSA9IHtcclxuICAgIHR5cGU6ICdzdHJhdGVnaWMnLFxyXG4gICAgc2VsZWN0ZWRDYXRlZ29yeTogJycsXHJcbiAgfVxyXG5cclxuICByaXNrQnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgaGVhZGVyOiBbXSxcclxuICAgIHdlaWdodEZhY3RvcnM6IFtdLFxyXG4gICAgcmlza3M6IFtdLFxyXG4gIH1cclxuXHJcbiAgdGVtcGxhdGVJbmZvOiBhbnkgPSB7XHJcbiAgICBtZW1iZXJJZDogJycsXHJcbiAgICBjYXRlZ29yeUlkOiAnJyxcclxuICAgIG93bmVyTGlzdDogW10sXHJcbiAgICByY0xpc3Q6IFtdLFxyXG4gICAgbWl0aWdhdGlvbkxpc3Q6IFtdLFxyXG4gICAgbGlrZWxpaG9vZDpbXSxcclxuICAgIGltcGFjdDpbXSxcclxuICAgIHZlbG9jaXR5OltdLFxyXG4gICAgdnVsbmVyYWJpbGl0eTpbXVxyXG4gIH1cclxuXHJcbiAgaXNMb2FkZXIgPSBmYWxzZTtcclxuICBzaG93Q2F0ZWdvcnlMaXN0ID0gZmFsc2U7XHJcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XHJcbiAgZG93bmxvYWRJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgc2V0dGluZ3NJbmZvICE6IGFueTtcclxuICBpc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gIGZpbGVOYW1lOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG4gIGFzc2Vzc21lbnREZWFkTGluZTogYW55O1xyXG4gIHNob3dFeGNlbCA9IGZhbHNlO1xyXG4gIGZpbGVWYWx1ZTphbnk7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIG9yZ2FuaXphdGlvbklkID0gMDtcclxuICBlcnJvck1lc3NhZ2UgPSBcIiBpbnZhbGlkIGZpbGUgZXJyb3JcIlxyXG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICBkb3dubG9hZFBlcmNlbnQgPSAwO1xyXG5cclxuICBzbWlsZXlNZXNzYWdlID0gYFlvdSdyZSBBbGwgU2V0ISBXZSdyZSB1cGxvYWRpbmcgdGhlIHJpc2tzLiBUaGUgcmlzayBvd25lcnMgd2lsbCBiZSBub3RpZmllZCBvbmNlIHRoZSByaXNrcyBoYXZlIGJlZW4gdXBsb2FkZWQuYDtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAgeyBidXR0b25UZXh0OiAnQWRkIE1vcmUgUmlza3MnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgIHsgYnV0dG9uVGV4dDogJ1ZpZXcgUmlzaycsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXdSaXNrcycgfSxcclxuICBdO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBtZW1iZXJfb2JqX2lkID0gJyc7XHJcbiAgZGVmYXVsdE93bmVyID0gJydcclxuICByaXNrRGF0YSAhOmFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJpc2tTZXJ2aWNlOiBBZGRSaXNrU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLHByaXZhdGUgIHNuYWNrQmFyOlNuYWNrQmFyU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG5cclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLmdldENhdGVnb3J5TGlzdCgpO1xyXG4gICAgdGhpcy5nZXRTZXR0aW5nc0luZm8oKTtcclxuXHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xyXG4gICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKTtcclxuICAgIHRoaXMubWVtYmVyX29ial9pZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS5faWQ7XHJcbiAgfVxyXG4gIGdldENhdGVnb3J5TGlzdCgpIHtcclxuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRDYXRlZ29yeUxpc3QoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3Quc3RyYXRlZ2ljLmRhdGEgPSByZXMuc3RyYXRlZ2ljX2FycjtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3Qub3BlcmF0aW9uYWwuZGF0YSA9IHJlcy5vcGVyYXRpb25hbF9hcnI7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LmNvbXBsaWFuY2UuZGF0YSA9IHJlcy5jb21wbGlhbmNlX2FycjtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3Qub3RoZXJzLmRhdGEgPSByZXMub3RoZXJzX2FycjtcclxuXHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgc2F2ZVNlbGVjdGVkQ2F0ZWdvcnkoY2F0ZWdvcnk6IGFueSkge1xyXG4gICAgaWYodGhpcy5jYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfaWQgIT1jYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfaWQpe1xyXG4gICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yeUxpc3QgPSBmYWxzZTtcclxuICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcclxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzY3JvbGxSZWZlcmVuY2UnKTtcclxuICAgIGlmIChyZWZlcmVuY2UpIHtcclxuICAgICAgcmVmZXJlbmNlLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcblxyXG4gIH1cclxuICByZW1vdmVDYXRlZ29yeSgpIHtcclxuICAgIHRoaXMuY2F0ZWdvcnkgPSB7XHJcbiAgICAgIHR5cGU6ICdzdHJhdGVnaWMnLFxyXG4gICAgICBzZWxlY3RlZENhdGVnb3J5OiAnJ1xyXG4gICAgfTtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcbiAgZ2V0U2V0dGluZ3NJbmZvKCkge1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZ2V0Umlza1NldHRpbmdEZXRhaWxzKCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3NJbmZvID0gcmVzO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICB0cmlnZ2VyQnJvd3NlRmlsZSgpIHtcclxuICAgIGNvbnN0IGdldEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZUlucHV0Jyk7XHJcbiAgICBpZiAoZ2V0RmlsZSkge1xyXG4gICAgICBnZXRGaWxlLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWRlZEZpbGUoZXZlbnQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5yaXNrQnVsa1VwbG9hZCA9IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHdlaWdodEZhY3RvcnM6IFtdLFxyXG4gICAgICAgIHJpc2tzOiBbXVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvID0ge1xyXG4gICAgICAgIG1lbWJlcklkOiAnJyxcclxuICAgICAgICBjYXRlZ29yeUlkOiAnJyxcclxuICAgICAgICBvd25lckxpc3Q6IFtdLFxyXG4gICAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgICAgbWl0aWdhdGlvbkxpc3Q6IFtdLFxyXG4gICAgICAgIGxpa2VsaWhvb2Q6W10sXHJcbiAgICAgICAgaW1wYWN0OltdLFxyXG4gICAgICAgIHZlbG9jaXR5OltdLFxyXG4gICAgICAgIHZ1bG5lcmFiaWxpdHk6W11cclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2Nyb2xsUmVmZXJlbmNlJyk7XHJcbiAgICAgIGlmIChyZWZlcmVuY2UpIHtcclxuICAgICAgICByZWZlcmVuY2Uuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBldmVudC50YXJnZXQuZmlsZXNbMF0ubmFtZTtcclxuXHJcbiAgICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gZXZlbnQudGFyZ2V0IGFzIERhdGFUcmFuc2ZlcjtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjdXJseVxyXG4gICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIG11bHRpcGxlIGZpbGVzJyk7XHJcbiAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTE6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMV07XHJcblxyXG4gICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGNvbnN0IHRlbXBEYXRhOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWUxXTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7XHJcbiAgICAgICAgICBoZWFkZXI6IDEsXHJcbiAgICAgICAgfSkgYXMgQU9BO1xyXG5cclxuICAgICAgICBjb25zdCB0RGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih0ZW1wRGF0YSwgeyBoZWFkZXI6IDEgfSkgYXMgQU9BO1xyXG4gICAgICAgIGNvbnN0IHRlbXBMaXN0ID0gdERhdGEuZmlsdGVyKChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwKTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCA9IHRlbXBMaXN0WzBdWzU2XVxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5SWQgPSB0ZW1wTGlzdFswXVs1NV1cclxuICAgICAgICB0aGlzLnJpc2tCdWxrVXBsb2FkLmhlYWRlciA9IGNsb25lRGVlcCh0aGlzLmRhdGFbNF0uZmlsdGVyKChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwKSk7XHJcbiAgICAgICAgdGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzID0gY2xvbmVEZWVwKHRoaXMuZGF0YVs1XS5maWx0ZXIoKHdlaWdodEZhY3RvcjogYW55KSA9PiB3ZWlnaHRGYWN0b3IubGVuZ3RoID4gMCkpO1xyXG4gICAgICAgIHRlbXBMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIGlmIChlbGVtZW50WzhdKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBtZW1iZXIgPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogZWxlbWVudFs4XSxcclxuICAgICAgICAgICAgICBtZW1iZXJfaWQ6IGVsZW1lbnRbOV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5vd25lckxpc3QucHVzaChtZW1iZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnRbMl0pIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG1pdGlnYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgbWl0aWdhdGlvbk5hbWU6IGVsZW1lbnRbMl0sXHJcbiAgICAgICAgICAgICAgbWl0aWdhdGlvbl9pZDogZWxlbWVudFszXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1pdGlnYXRpb25MaXN0LnB1c2gobWl0aWdhdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudFs2XSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmMgPSB7XHJcbiAgICAgICAgICAgICAgcmNOYW1lOiBlbGVtZW50WzZdLFxyXG4gICAgICAgICAgICAgIHJjX2lkOiBlbGVtZW50WzddLFxyXG4gICAgICAgICAgICAgIG93bmVyX2lkczogZWxlbWVudFsxMV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QucHVzaChyYyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGVsZW1lbnRbMTJdKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ubGlrZWxpaG9vZC5wdXNoKGVsZW1lbnRbMTJdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50WzEzXSkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmltcGFjdC5wdXNoKGVsZW1lbnRbMTNdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoID49IDMgJiYgZWxlbWVudFsxNF0pIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8udmVsb2NpdHkucHVzaChlbGVtZW50WzE0XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCA9PSA0ICYmIGVsZW1lbnRbMTVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnZ1bG5lcmFiaWxpdHkucHVzaChlbGVtZW50WzE1XSk7XHJcblxyXG4gICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZpbGVOYW1lLnN1YnN0cigtNSkgIT09ICcueGxzeCcpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgZmlsZSBmb3IgUmlzayBDYXRlZ29yeTonICsgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmNhdGVnb3J5X25hbWUgKyAnIFJFVFJZJztcclxuXHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLmhlYWRlclswXSAhPT0gJ1Jpc2sgTmFtZSonKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIGZpbGUgZm9yIFJpc2sgQ2F0ZWdvcnk6JyArIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9uYW1lICsgJyBSRVRSWSc7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoNyk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE93bmVyID0gdGhpcy50ZW1wbGF0ZUluZm8ub3duZXJMaXN0LmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5tZW1iZXJfaWQgPT0gdGhpcy5tZW1iZXJJZCk7XHJcbiAgICAgICAgaWYoZGVmYXVsdE93bmVyICE9LTEpe1xyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPSB0aGlzLnRlbXBsYXRlSW5mby5vd25lckxpc3RbZGVmYXVsdE93bmVyXS5uYW1lXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIGZpbGUgZm9yIFJpc2sgQ2F0ZWdvcnk6JyArIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9uYW1lICsgJyBSRVRSWSc7XHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5tZW1iZXJfb2JqX2lkICE9IHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkKSB8fCAodGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5Ll9pZCAhPSB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUlkKSkge1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSBmaWxlIGZvciBSaXNrIENhdGVnb3J5OicgKyB0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZSArICcgUkVUUlknO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuY2hlY2tFbXB0eUZpbGUoKTtcclxuICAgICAgICBpZiAoaXNFbXB0eSkge1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnWW91IGhhdmUgdXBsb2FkZWQgYSBibGFuayB0ZW1wbGF0ZS4gUGxlYXNlIGFkZCBkZXRhaWxzIGZvciBhbGwgbWFuZGF0b3J5IGZpZWxkcy4gUkVUUlknO1xyXG4gICAgICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLmhlYWRlcls2XSA9PT0gJ1Jpc2sgQXNzZXNzbWVudCBEZWFkbGluZSonKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudERlYWRMaW5lID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudERlYWRMaW5lID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZmlsZVZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByaXNrRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgICByaXNrRGF0YS5mb3JFYWNoKChyaXNrOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICBjb25zdCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgcmlza05hbWU6IHJpc2tbMF0gPz8gJycsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByaXNrWzFdID8/ICcnLFxyXG4gICAgICAgICAgICByY05hbWU6IHJpc2tbMl0gPz8gJycsXHJcbiAgICAgICAgICAgIG93bmVyOiByaXNrWzNdID8/ICcnLFxyXG4gICAgICAgICAgICBtaXRpZ2F0aW9uUHJpb3JpdHk6IHJpc2tbNF0gPz8gJycsXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByaXNrWzVdID8/ICcnLFxyXG4gICAgICAgICAgICBpc1ZhbGlkOiB0aGlzLmNoZWNrVmFsaWRpdHkocmlzayksXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuYXNzZXNzbWVudERlYWRMaW5lKSB7XHJcbiAgICAgICAgICAgIG9iai5hc3Nlc3NtZW50RGVhZExpbmUgPSByaXNrWzZdID8/ICcnO1xyXG4gICAgICAgICAgICBvYmoubGlrZWxpaG9vZCA9IHJpc2tbN10gPz8gJyc7XHJcbiAgICAgICAgICAgIG9iai5pbXBhY3QgPSByaXNrWzhdID8/ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCA9PSAzKSB7XHJcbiAgICAgICAgICAgICAgb2JqLnZlbG9jaXR5ID0gcmlza1s5XSA/PyAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCA9PSA0KSB7XHJcbiAgICAgICAgICAgICAgb2JqLnZlbG9jaXR5ID0gcmlza1s5XSA/PyAnJztcclxuICAgICAgICAgICAgICBvYmoudnVsbmVyYWJpbGl0eSA9IHJpc2tbMTBdID8/ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbVRhZ3M6IGFueSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmN1c3RvbV90YWcuZm9yRWFjaCgodGFnOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGFnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjVGFnID0ge1xyXG4gICAgICAgICAgICAgICAgICBjdXN0b21fdGFnX3ZhbHVlOiByaXNrWzcgKyB0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoICsgaW5kZXhdID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgICBjdXN0b21fdGFnX25hbWU6IHRhZy50YWdOYW1lXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tVGFncy5wdXNoKGNUYWcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG9iai5jdXN0b21UYWcgPSBjdXN0b21UYWdzO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb2JqLmxpa2VsaWhvb2QgPSByaXNrWzZdID8/ICcnO1xyXG4gICAgICAgICAgICBvYmouaW1wYWN0ID0gcmlza1s3XSA/PyAnJztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgICAgICBvYmoudmVsb2NpdHkgPSByaXNrWzhdID8/ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoID09IDQpIHtcclxuICAgICAgICAgICAgICBvYmoudmVsb2NpdHkgPSByaXNrWzhdID8/ICcnO1xyXG4gICAgICAgICAgICAgIG9iai52dWxuZXJhYmlsaXR5ID0gcmlza1s5XSA/PyAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBjdXN0b21UYWdzOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmN1c3RvbV90YWcuZm9yRWFjaCgodGFnOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGFnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjVGFnID0ge1xyXG4gICAgICAgICAgICAgICAgICBjdXN0b21fdGFnX3ZhbHVlOiByaXNrWzYgKyB0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMubGVuZ3RoICsgaW5kZXhdID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgICBjdXN0b21fdGFnX25hbWU6IHRhZy50YWdOYW1lXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tVGFncy5wdXNoKGNUYWcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG9iai5jdXN0b21UYWcgPSBjdXN0b21UYWdzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9iai5saWtlbGlob29kICYmICF0aGlzLnRlbXBsYXRlSW5mby5saWtlbGlob29kLmluY2x1ZGVzKG9iai5saWtlbGlob29kKSkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkPWZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9iai5pbXBhY3QgJiYgIXRoaXMudGVtcGxhdGVJbmZvLmltcGFjdC5pbmNsdWRlcyhvYmouaW1wYWN0KSkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkPWZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9iai52ZWxvY2l0eSAmJiAhdGhpcy50ZW1wbGF0ZUluZm8udmVsb2NpdHkuaW5jbHVkZXMob2JqLnZlbG9jaXR5KSkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkPWZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9iai52dWxuZXJhYmlsaXR5ICYmICF0aGlzLnRlbXBsYXRlSW5mby52dWxuZXJhYmlsaXR5LmluY2x1ZGVzKG9iai52dWxuZXJhYmlsaXR5KSkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9iai5pc1ZhbGlkPWZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICBcclxuXHJcbiAgICAgICAgICB0aGlzLnJpc2tCdWxrVXBsb2FkLnJpc2tzLnB1c2gob2JqKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0V4Y2VsID0gdHJ1ZTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tFbXB0eUZpbGUoKSB7XHJcbiAgICBsZXQgaXNFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmZpbHRlcigoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA8IDEpIHtcclxuICAgICAgaXNFbXB0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNFbXB0eTtcclxuICB9XHJcblxyXG4gIGNoZWNrVmFsaWRpdHkocmlzazogYW55KSB7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgbGV0IHRyaW1tZWROYW1lID0gKHJpc2tbMF0pID8gcmlza1swXS50b1N0cmluZygpLnJlcGxhY2UocmUsICcnKS50cmltKCkgOiAnJztcclxuICAgIHRyaW1tZWROYW1lID0gdHJpbW1lZE5hbWUucmVwbGFjZSgvICArL2csICcgJyk7XHJcbiAgICBpZiAoKCF0cmltbWVkTmFtZSkgfHwgKHJpc2tbM10gJiYgKHJpc2tbM10gPT0gcmlza1s1XSkpIHx8ICgoIXJpc2tbM10pICYmICh0aGlzLmRlZmF1bHRPd25lciA9PSByaXNrWzVdKSlcclxuICAgICAgfHwgKCFyaXNrWzJdKSB8fCAodGhpcy5hc3Nlc3NtZW50RGVhZExpbmUgJiYgKCFyaXNrWzZdKSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHsgcmV0dXJuIHRydWUgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKTtcclxuICAgIGNvbnN0IGRvd25sb2FkRGF0ZSA9IHRvZGF5WzBdO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnVkNvbXBseSAtIFJpc2sgTW9kdWxlIC0gQWRkIE11bHRpcGxlIFJpc2tzIC0gJysgdGhpcy5jYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfbmFtZSArJyAtICcgKyBkb3dubG9hZERhdGUgKyAnLnhsc3gnO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZG93bmxvYWRUZW1wbGF0ZSh0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuX2lkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5sb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuZG93bmxvYWRQZXJjZW50ID0gMTAwICogKGRhdGEubG9hZGVkIC8gZGF0YS50b3RhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLmJvZHkpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gdGhpcy5yaXNrU2VydmljZS5kb3duTG9hZEZpbGUoZGF0YS5ib2R5LCAnYXBwbGljYXRpb24veGxzeCcsIGZpbGVOYW1lKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURFRCc7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRSaXNrQnVsa1VwbG9hZChjb21wbGV0ZUFzc2Vzc21lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0gW107XHJcbiAgICB0aGlzLnJpc2tCdWxrVXBsb2FkLnJpc2tzLmZvckVhY2goKHJpc2s6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmlzay5pc1ZhbGlkKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgdGl0bGU6IHJpc2sucmlza05hbWUsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcmlzay5kZXNjcmlwdGlvbixcclxuICAgICAgICAgIGNhdGVnb3J5X2N1c3RvbV90YWc6IHJpc2suY3VzdG9tVGFnLFxyXG4gICAgICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9lbmFibGU6IHRoaXMuc2V0dGluZ3NJbmZvLmFzc2Vzc21lbnRfZGVhZGxpbmVfZW5hYmxlLFxyXG4gICAgICAgICAgb3duZXI6IChyaXNrLm93bmVyKSA/IHRoaXMucmV0dXJuSWRzKHJpc2sub3duZXIsICdvd25lcicpIDogdGhpcy5yZXR1cm5JZHModGhpcy5kZWZhdWx0T3duZXIsICdvd25lcicpLFxyXG4gICAgICAgICAgY2F0ZWdvcnk6ICh0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuY2F0ZWdvcnlfaWQpID8gW3RoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9pZF0gOiBbXSxcclxuICAgICAgICAgIG1hbmFnZV9vdmVyc2lnaHQ6IHRoaXMucmV0dXJuSWRzKHJpc2sub3ZlcnNlZXIsICdvdmVyc2VlcicpLFxyXG4gICAgICAgICAgcmNfaWQ6IHRoaXMucmV0dXJuSWRzKHJpc2sucmNOYW1lLCAncmNfaWQnKSxcclxuICAgICAgICAgIGhlYWRfaWRzOiB0aGlzLnJldHVybklkcyhyaXNrLnJjTmFtZSwgJ3JjX293bmVyX2lkcycpLCAvLzIgdG8gYmUgYXJheVxyXG4gICAgICAgICAgcmF0aW5nX2FycjogW1xyXG4gICAgICAgICAgICByaXNrLmxpa2VsaWhvb2QgPyByaXNrLmxpa2VsaWhvb2Quc3BsaXQoJyAtICcpWzFdIDogMCxcclxuICAgICAgICAgICAgcmlzay5pbXBhY3QgPyByaXNrLmltcGFjdC5zcGxpdCgnIC0gJylbMV0gOiAwLFxyXG4gICAgICAgICAgICByaXNrLnZlbG9jaXR5ID8gcmlzay52ZWxvY2l0eS5zcGxpdCgnIC0gJylbMV0gOiAwLFxyXG4gICAgICAgICAgICByaXNrLnZ1bG5lcmFiaWxpdHkgPyByaXNrLnZ1bG5lcmFiaWxpdHkuc3BsaXQoJyAtICcpWzFdIDogMCxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgICAgICBvcmdhbmlzYXRpb25faWQ6IHRoaXMub3JnYW5pemF0aW9uSWQsXHJcbiAgICAgICAgICByaXNrX3Byb2dyZXNzX2ZsYWc6IDEsXHJcbiAgICAgICAgICBJZkFzc2Vzc21lbnREb25lOiAwLFxyXG4gICAgICAgICAgd29ya3Nob3BfaWQ6ICcnLFxyXG4gICAgICAgICAgY29tcGxldGVfYXNzZXNzbWVudDogKGNvbXBsZXRlQXNzZXNzbWVudCkgPyAxIDogMCxcclxuICAgICAgICAgIG1pdGlnYXRpb246IHRoaXMucmV0dXJuSWRzKHJpc2subWl0aWdhdGlvblByaW9yaXR5LCAnbWl0aWdhdGlvbicpLCAvLzMgd3JvbmdcclxuICAgICAgICAgIHdlaWdodGFnZV9lbmFibGU6IHRoaXMuc2V0dGluZ3NJbmZvLndlaWdodGFnZV9lbmFibGUsXHJcbiAgICAgICAgICB0cmVhdG1lbnRfdHlwZTogdGhpcy5zZXR0aW5nc0luZm8udHJlYXRtZW50X2NyaXRlcmlhLFxyXG4gICAgICAgICAgd2VpZ2h0YWdlX2RldGFpbHM6IHRoaXMuc2V0dGluZ3NJbmZvLndlaWdodGFnZV9kZXRhaWxzLFxyXG4gICAgICAgICAgd2VpZ2h0YWdlX3NldF9ieTogdGhpcy5zZXR0aW5nc0luZm8ud2VpZ2h0YWdlX3NldF9ieSxcclxuICAgICAgICAgIHdlaWdodGFnZV9zdHI6IFtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0luZm8ud2VpZ2h0YWdlX2RldGFpbHMuaW1wYWN0LnZhbHVlLFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mby53ZWlnaHRhZ2VfZGV0YWlscy5saWtlbGlob29kLnZhbHVlLFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mby53ZWlnaHRhZ2VfZGV0YWlscy52ZWxvY2l0eS52YWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0luZm8ud2VpZ2h0YWdlX2RldGFpbHMudnVsbmVyYWJpbGl0eS52YWx1ZSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBhc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieTogdGhpcy5zZXR0aW5nc0luZm8uYXNzZXNzbWVudF9kZWFkbGluZV9zZXRfYnksIC8vY2hlY2sxIG5vdCBhcHBlYXJpbmdcclxuICAgICAgICAgIGFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5czogKHRoaXMuc2V0dGluZ3NJbmZvLmFzc2Vzc21lbnRfZGVhZGxpbmVfZW5hYmxlKSA/IHRoaXMuc2V0dGluZ3NJbmZvLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyA6IHJpc2suYXNzZXNzbWVudERlYWRMaW5lLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcGF5bG9hZC5wdXNoKG9iaik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuYWRkQnVsa1Jpc2socGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJpc2tEYXRhID0gcmVzO1xyXG4gICAgfSxcclxuICAgICAgZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsICdhbGVydCcpO1xyXG5cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAncmNfaWQnOlxyXG4gICAgICAgIGNvbnN0IHJjSWQ6IGFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5mb3JFYWNoKChyY19lbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyY19lbGVtZW50LnJjTmFtZSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHJjSWQucHVzaChyY19lbGVtZW50LnJjX2lkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByY0lkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyY19vd25lcl9pZHMnOlxyXG4gICAgICAgIGxldCBvd25lcl9pZHM6IGFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5mb3JFYWNoKChoZWFkZXJJZHM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGhlYWRlcklkcy5yY05hbWUgPT0gaXRlbSAmJiBoZWFkZXJJZHMub3duZXJfaWRzKSB7XHJcbiAgICAgICAgICAgIG93bmVyX2lkcz0gaGVhZGVySWRzLm93bmVyX2lkcy5pbmNsdWRlcygnLCcpPyBoZWFkZXJJZHMub3duZXJfaWRzLnNwbGl0KCcsJykubWFwKE51bWJlcikgOltOdW1iZXIoaGVhZGVySWRzLm93bmVyX2lkcyldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvd25lcl9pZHM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ293bmVyJzpcclxuICAgICAgICBjb25zdCBvd25lcklkOiBhbnkgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5vd25lckxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgb3duZXJJZC5wdXNoKGVsZW1lbnQubWVtYmVyX2lkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvd25lcklkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlcic6XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJJZDogYW55ID0gW107XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ub3duZXJMaXN0LmZvckVhY2goKG9zX2VsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9zX2VsZW1lbnQubmFtZSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIG92ZXJzZWVySWQucHVzaChvc19lbGVtZW50Lm1lbWJlcl9pZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb3ZlcnNlZXJJZDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ21pdGlnYXRpb24nOlxyXG4gICAgICAgIGxldCBtaXRpZ2F0aW9uSWQ6IGFueT0wO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1pdGlnYXRpb25MaXN0LmZvckVhY2goKG1pdGlnYXRpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG1pdGlnYXRpb24ubWl0aWdhdGlvbk5hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBtaXRpZ2F0aW9uSWQgPSBtaXRpZ2F0aW9uLm1pdGlnYXRpb25faWRcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbWl0aWdhdGlvbklkO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5yaXNrQnVsa1VwbG9hZCA9IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgd2VpZ2h0RmFjdG9yczogW10sXHJcbiAgICAgIHJpc2tzOiBbXVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGVtcGxhdGVJbmZvID0ge1xyXG4gICAgICBtZW1iZXJJZDogJycsXHJcbiAgICAgIGNhdGVnb3J5SWQ6ICcnLFxyXG4gICAgICBvd25lckxpc3Q6IFtdLFxyXG4gICAgICByY0xpc3Q6IFtdLFxyXG4gICAgICBtaXRpZ2F0aW9uTGlzdDogW11cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50RGVhZExpbmUgPSB1bmRlZmluZWRcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuXHJcbiAgfVxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWV3Umlza3MnOlxyXG4gICAgICAgIHRoaXMudmlld1Jpc2tzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVNtaWxleShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHtldnQ6dGhpcy5yaXNrRGF0YSwgY29uZmlybSA6IGZhbHNlfSk7XHJcbiAgfVxyXG5cclxuICB2aWV3Umlza3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCArPSAnL3Jpc2stcmVnaXN0ZXInO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsICs9ICcvcmlzay9yaXNrLXJlZ2lzdGVyJztcclxuICAgIH1cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
708
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJpc2svYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVMsTUFBTSxFQUFFLFlBQVksRUFBNkQsTUFBTSxlQUFlLENBQUM7QUFDbEksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVNqQyxNQUFNLE9BQU8sd0JBQXdCO0lBOEVuQyxZQUFvQixXQUEyQixFQUNyQyxXQUF3QixFQUN2QixRQUF3QixFQUN6QixnQkFBc0M7UUFINUIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3ZCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7UUFoRnRDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFD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QUFDO1FBQ0YsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7OztZQXB1QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLGdqSUFBaUQ7O2FBR2xEOzs7WUFYUSxjQUFjO1lBQ2QsV0FBVztZQUZYLGVBQWU7WUFHZixvQkFBb0I7Ozs0QkFXMUIsTUFBTTs2QkFDTixNQUFNOzRCQUNOLE1BQU07Z0NBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgQ2F0ZWdvcnlMaXN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXRlZ29yeUxpc3QnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRkUmlza1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hZGQtcmlzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVxdWVuY3lCdWxrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG50eXBlIEFPQSA9IGFueVtdW107XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWFkZC1tdWx0aXBsZS1yaXNrJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLW11bHRpcGxlLXJpc2suY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkZC1tdWx0aXBsZS1yaXNrLmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXSxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRNdWx0aXBsZVJpc2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQE91dHB1dCgpIHBpY2tlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHBvcHVsYXRlT3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjYXRlZ29yeUxpc3Q6IENhdGVnb3J5TGlzdCA9IHtcclxuICAgIHN0cmF0ZWdpYzoge1xyXG4gICAgICBuYW1lOiAnU1RSQVRFR0lDJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgICBvcGVyYXRpb25hbDoge1xyXG4gICAgICBuYW1lOiAnT1BFUkFUSU9OQUwnLFxyXG4gICAgICBkYXRhOiBbXVxyXG4gICAgfSxcclxuICAgIGNvbXBsaWFuY2U6IHtcclxuICAgICAgbmFtZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICBkYXRhOiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBuYW1lOiAnT1RIRVJTJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY2F0ZWdvcnk6IGFueSA9IHtcclxuICAgIHR5cGU6ICdzdHJhdGVnaWMnLFxyXG4gICAgc2VsZWN0ZWRDYXRlZ29yeTogJycsXHJcbiAgfVxyXG5cclxuICByaXNrQnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgaGVhZGVyOiBbXSxcclxuICAgIHdlaWdodEZhY3RvcnM6IFtdLFxyXG4gICAgcmlza3M6IFtdLFxyXG4gIH1cclxuXHJcbiAgdGVtcGxhdGVJbmZvOiBhbnkgPSB7XHJcbiAgICBtZW1iZXJJZDogJycsXHJcbiAgICBjYXRlZ29yeUlkOiAnJyxcclxuICAgIG93bmVyTGlzdDogW10sXHJcbiAgICByY0xpc3Q6IFtdLFxyXG4gICAgbWl0aWdhdGlvbkxpc3Q6IFtdLFxyXG4gICAgbGlrZWxpaG9vZDpbXSxcclxuICAgIGltcGFjdDpbXSxcclxuICAgIHZlbG9jaXR5OltdLFxyXG4gICAgdnVsbmVyYWJpbGl0eTpbXVxyXG4gIH1cclxuXHJcbiAgaXNMb2FkZXIgPSBmYWxzZTtcclxuICBzaG93Q2F0ZWdvcnlMaXN0ID0gZmFsc2U7XHJcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XHJcbiAgZG93bmxvYWRJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgc2V0dGluZ3NJbmZvICE6IGFueTtcclxuICBpc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gIGZpbGVOYW1lOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG4gIGFzc2Vzc21lbnREZWFkTGluZTogYW55O1xyXG4gIHNob3dFeGNlbCA9IGZhbHNlO1xyXG4gIGZpbGVWYWx1ZTphbnk7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIG9yZ2FuaXphdGlvbklkID0gMDtcclxuICBlcnJvck1lc3NhZ2UgPSBcIiBpbnZhbGlkIGZpbGUgZXJyb3JcIlxyXG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICBkb3dubG9hZFBlcmNlbnQgPSAwO1xyXG5cclxuICBzbWlsZXlNZXNzYWdlID0gYFlvdSdyZSBBbGwgU2V0ISBXZSdyZSB1cGxvYWRpbmcgdGhlIHJpc2tzLiBUaGUgcmlzayBvd25lcnMgd2lsbCBiZSBub3RpZmllZCBvbmNlIHRoZSByaXNrcyBoYXZlIGJlZW4gdXBsb2FkZWQuYDtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAgeyBidXR0b25UZXh0OiAnQWRkIE1vcmUgUmlza3MnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgIHsgYnV0dG9uVGV4dDogJ1ZpZXcgUmlzaycsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXdSaXNrcycgfSxcclxuICBdO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBtZW1iZXJfb2JqX2lkID0gJyc7XHJcbiAgZGVmYXVsdE93bmVyID0gJydcclxuICByaXNrRGF0YSAhOmFueTsgIFxyXG4gIGZyZXF1ZW5jeVR5cGUgPSBbJ3dlZWtseScsICdtb250aGx5JywgJ3F1YXJ0ZXJseScsICdiaWFubnVhbCcsICdhbm51YWwnLCAnb25lIHRpbWUnXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByaXNrU2VydmljZTogQWRkUmlza1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgIHNuYWNrQmFyOlNuYWNrQmFyU2VydmljZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5QnVsa1NlcnZpY2UsKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcblxyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB0aGlzLmdldFNldHRpbmdzSW5mbygpO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgdGhpcy5tZW1iZXJfb2JqX2lkID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLl9pZDtcclxuICB9XHJcbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmdldENhdGVnb3J5TGlzdCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdC5zdHJhdGVnaWMuZGF0YSA9IHJlcy5zdHJhdGVnaWNfYXJyO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdC5vcGVyYXRpb25hbC5kYXRhID0gcmVzLm9wZXJhdGlvbmFsX2FycjtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QuY29tcGxpYW5jZS5kYXRhID0gcmVzLmNvbXBsaWFuY2VfYXJyO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdC5vdGhlcnMuZGF0YSA9IHJlcy5vdGhlcnNfYXJyO1xyXG5cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICBzYXZlU2VsZWN0ZWRDYXRlZ29yeShjYXRlZ29yeTogYW55KSB7XHJcbiAgICBpZih0aGlzLmNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9pZCAhPWNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9pZCl7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0NhdGVnb3J5TGlzdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xyXG4gICAgY29uc3QgcmVmZXJlbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Njcm9sbFJlZmVyZW5jZScpO1xyXG4gICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICByZWZlcmVuY2Uuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzZXQoKTtcclxuXHJcbiAgfVxyXG4gIHJlbW92ZUNhdGVnb3J5KCkge1xyXG4gICAgdGhpcy5jYXRlZ29yeSA9IHtcclxuICAgICAgdHlwZTogJ3N0cmF0ZWdpYycsXHJcbiAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuICBnZXRTZXR0aW5nc0luZm8oKSB7XHJcblxyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRSaXNrU2V0dGluZ0RldGFpbHMoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5zZXR0aW5nc0luZm8gPSByZXM7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIHRyaWdnZXJCcm93c2VGaWxlKCkge1xyXG4gICAgY29uc3QgZ2V0RmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlSW5wdXQnKTtcclxuICAgIGlmIChnZXRGaWxlKSB7XHJcbiAgICAgIGdldEZpbGUuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwbG9hZGVkRmlsZShldmVudDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnJpc2tCdWxrVXBsb2FkID0ge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgd2VpZ2h0RmFjdG9yczogW10sXHJcbiAgICAgICAgcmlza3M6IFtdXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgICAgIGNhdGVnb3J5SWQ6ICcnLFxyXG4gICAgICAgIG93bmVyTGlzdDogW10sXHJcbiAgICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgICBtaXRpZ2F0aW9uTGlzdDogW10sXHJcbiAgICAgICAgbGlrZWxpaG9vZDpbXSxcclxuICAgICAgICBpbXBhY3Q6W10sXHJcbiAgICAgICAgdmVsb2NpdHk6W10sXHJcbiAgICAgICAgdnVsbmVyYWJpbGl0eTpbXVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzY3JvbGxSZWZlcmVuY2UnKTtcclxuICAgICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWxlTmFtZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXS5uYW1lO1xyXG5cclxuICAgICAgY29uc3QgdGFyZ2V0OiBEYXRhVHJhbnNmZXIgPSBldmVudC50YXJnZXQgYXMgRGF0YVRyYW5zZmVyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGN1cmx5XHJcbiAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgbXVsdGlwbGUgZmlsZXMnKTtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3Qgd2I6IFhMU1guV29ya0Jvb2sgPSBYTFNYLnJlYWQoYnN0ciwgeyB0eXBlOiAnYmluYXJ5JyB9KTtcclxuICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lMTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1sxXTtcclxuXHJcbiAgICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgICAgY29uc3QgdGVtcERhdGE6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZTFdO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcclxuICAgICAgICAgIGhlYWRlcjogMSxcclxuICAgICAgICB9KSBhcyBBT0E7XHJcblxyXG4gICAgICAgIGNvbnN0IHREYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHRlbXBEYXRhLCB7IGhlYWRlcjogMSB9KSBhcyBBT0E7XHJcbiAgICAgICAgY29uc3QgdGVtcExpc3QgPSB0RGF0YS5maWx0ZXIoKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDApO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkID0gdGVtcExpc3RbMF1bNTZdXHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlJZCA9IHRlbXBMaXN0WzBdWzU1XVxyXG4gICAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQuaGVhZGVyID0gY2xvbmVEZWVwKHRoaXMuZGF0YVs0XS5maWx0ZXIoKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDApKTtcclxuICAgICAgICB0aGlzLnJpc2tCdWxrVXBsb2FkLndlaWdodEZhY3RvcnMgPSBjbG9uZURlZXAodGhpcy5kYXRhWzVdLmZpbHRlcigod2VpZ2h0RmFjdG9yOiBhbnkpID0+IHdlaWdodEZhY3Rvci5sZW5ndGggPiAwKSk7XHJcbiAgICAgICAgdGVtcExpc3QuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnRbOF0pIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50WzhdLFxyXG4gICAgICAgICAgICAgIG1lbWJlcl9pZDogZWxlbWVudFs5XVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm93bmVyTGlzdC5wdXNoKG1lbWJlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudFsyXSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbWl0aWdhdGlvbiA9IHtcclxuICAgICAgICAgICAgICBtaXRpZ2F0aW9uTmFtZTogZWxlbWVudFsyXSxcclxuICAgICAgICAgICAgICBtaXRpZ2F0aW9uX2lkOiBlbGVtZW50WzNdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ubWl0aWdhdGlvbkxpc3QucHVzaChtaXRpZ2F0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50WzZdKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYyA9IHtcclxuICAgICAgICAgICAgICByY05hbWU6IGVsZW1lbnRbNl0sXHJcbiAgICAgICAgICAgICAgcmNfaWQ6IGVsZW1lbnRbN10sXHJcbiAgICAgICAgICAgICAgb3duZXJfaWRzOiBlbGVtZW50WzExXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5wdXNoKHJjKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZWxlbWVudFsxMl0pIHsgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ubGlrZWxpaG9vZC5wdXNoKGVsZW1lbnRbMTJdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50WzEzXSkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5pbXBhY3QucHVzaChlbGVtZW50WzEzXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8uaW5jbHVkZXMoJ1ZlbG9jaXR5JykgJiYgZWxlbWVudFsxNF0pIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8udmVsb2NpdHkucHVzaChlbGVtZW50WzE0XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8uaW5jbHVkZXMoJ1Z1bG5lcmFiaWxpdHknKSAmJiBlbGVtZW50WzE1XSkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby52dWxuZXJhYmlsaXR5LnB1c2goZWxlbWVudFsxNV0pO1xyXG5cclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5maWxlTmFtZS5zdWJzdHIoLTUpICE9PSAnLnhsc3gnKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIGZpbGUgZm9yIFJpc2sgQ2F0ZWdvcnk6JyArIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9uYW1lICsgJyBSRVRSWSc7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC5oZWFkZXJbMF0gIT09ICdXaGF0IHJpc2sgd291bGQgeW91IGxpa2UgdG8gbWFuYWdlPyonKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIGZpbGUgZm9yIFJpc2sgQ2F0ZWdvcnk6JyArIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9uYW1lICsgJyBSRVRSWSc7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKDcpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRPd25lciA9IHRoaXMudGVtcGxhdGVJbmZvPy5vd25lckxpc3Q/LmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkID09IHRoaXMubWVtYmVySWQpO1xyXG4gICAgICAgIGlmKGRlZmF1bHRPd25lciAhPS0xKXtcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdE93bmVyID0gdGhpcy50ZW1wbGF0ZUluZm8ub3duZXJMaXN0W2RlZmF1bHRPd25lcl0ubmFtZVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSBmaWxlIGZvciBSaXNrIENhdGVnb3J5OicgKyB0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuY2F0ZWdvcnlfbmFtZSArICcgUkVUUlknO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHRoaXMubWVtYmVyX29ial9pZCAhPSB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCkgfHwgKHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5faWQgIT0gdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlJZCkpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgZmlsZSBmb3IgUmlzayBDYXRlZ29yeTonICsgdGhpcy5jYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmNhdGVnb3J5X25hbWUgKyAnIFJFVFJZJztcclxuXHJcbiAgICAgICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLmNoZWNrRW1wdHlGaWxlKCk7XHJcbiAgICAgICAgaWYgKGlzRW1wdHkpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1lvdSBoYXZlIHVwbG9hZGVkIGEgYmxhbmsgdGVtcGxhdGUuIFBsZWFzZSBhZGQgZGV0YWlscyBmb3IgYWxsIG1hbmRhdG9yeSBmaWVsZHMuIFJFVFJZJztcclxuICAgICAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC5oZWFkZXJbNl0gPT09ICdSaXNrIEFzc2Vzc21lbnQgRGVhZGxpbmUqJykge1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnREZWFkTGluZSA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnREZWFkTGluZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmZpbGVWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgcmlza0RhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwKTtcclxuXHJcbiAgICAgICAgcmlza0RhdGEuZm9yRWFjaCgocmlzazogYW55LCBpbmRleDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gY29uc3Qgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAvLyAgIHJpc2tOYW1lOiByaXNrWzBdID8/ICcnLFxyXG4gICAgICAgICAgLy8gICBkZXNjcmlwdGlvbjogcmlza1sxXSA/PyAnJyxcclxuICAgICAgICAgIC8vICAgcmNOYW1lOiByaXNrWzJdID8/ICcnLFxyXG4gICAgICAgICAgLy8gICBvd25lcjogcmlza1szXSA/PyAnJyxcclxuICAgICAgICAgIC8vICAgbWl0aWdhdGlvblByaW9yaXR5OiByaXNrWzRdID8/ICcnLFxyXG4gICAgICAgICAgLy8gICBvdmVyc2Vlcjogcmlza1s1XSA/PyAnJyxcclxuICAgICAgICAgIC8vICAgaXNWYWxpZDogdGhpcy5jaGVja1ZhbGlkaXR5KHJpc2spLFxyXG4gICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgIC8vIGlmICh0aGlzLmFzc2Vzc21lbnREZWFkTGluZSkge1xyXG4gICAgICAgICAgLy8gICBvYmouYXNzZXNzbWVudERlYWRMaW5lID0gcmlza1s2XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgb2JqLmxpa2VsaWhvb2QgPSByaXNrWzddID8/ICcnO1xyXG4gICAgICAgICAgLy8gICBvYmouaW1wYWN0ID0gcmlza1s4XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgaWYgKHRoaXMucmlza0J1bGtVcGxvYWQud2VpZ2h0RmFjdG9ycy5sZW5ndGggPT0gMykge1xyXG4gICAgICAgICAgLy8gICAgIG9iai52ZWxvY2l0eSA9IHJpc2tbOV0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vICAgaWYgKHRoaXMucmlza0J1bGtVcGxvYWQud2VpZ2h0RmFjdG9ycy5sZW5ndGggPT0gNCkge1xyXG4gICAgICAgICAgLy8gICAgIG9iai52ZWxvY2l0eSA9IHJpc2tbOV0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgICAgb2JqLnZ1bG5lcmFiaWxpdHkgPSByaXNrWzEwXSA/PyAnJztcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gICBjb25zdCBjdXN0b21UYWdzOiBhbnkgPSBbXTtcclxuXHJcbiAgICAgICAgICAvLyAgIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jdXN0b21fdGFnLmZvckVhY2goKHRhZzogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgaWYgKHRhZykge1xyXG4gICAgICAgICAgLy8gICAgICAgY29uc3QgY1RhZyA9IHtcclxuICAgICAgICAgIC8vICAgICAgICAgY3VzdG9tX3RhZ192YWx1ZTogcmlza1s3ICsgdGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCArIGluZGV4XSA/PyAnJyxcclxuICAgICAgICAgIC8vICAgICAgICAgY3VzdG9tX3RhZ19uYW1lOiB0YWcudGFnTmFtZVxyXG4gICAgICAgICAgLy8gICAgICAgfTtcclxuICAgICAgICAgIC8vICAgICAgIGN1c3RvbVRhZ3MucHVzaChjVGFnKTtcclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gICBvYmouY3VzdG9tVGFnID0gY3VzdG9tVGFncztcclxuICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyAgIG9iai5saWtlbGlob29kID0gcmlza1s2XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgb2JqLmltcGFjdCA9IHJpc2tbN10gPz8gJyc7XHJcblxyXG4gICAgICAgICAgLy8gICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCA9PSAzKSB7XHJcbiAgICAgICAgICAvLyAgICAgb2JqLnZlbG9jaXR5ID0gcmlza1s4XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gICBpZiAodGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCA9PSA0KSB7XHJcbiAgICAgICAgICAvLyAgICAgb2JqLnZlbG9jaXR5ID0gcmlza1s4XSA/PyAnJztcclxuICAgICAgICAgIC8vICAgICBvYmoudnVsbmVyYWJpbGl0eSA9IHJpc2tbOV0gPz8gJyc7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vICAgY29uc3QgY3VzdG9tVGFnczogYW55ID0gW107XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jdXN0b21fdGFnLmZvckVhY2goKHRhZzogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgaWYgKHRhZykge1xyXG4gICAgICAgICAgLy8gICAgICAgY29uc3QgY1RhZyA9IHtcclxuICAgICAgICAgIC8vICAgICAgICAgY3VzdG9tX3RhZ192YWx1ZTogcmlza1s2ICsgdGhpcy5yaXNrQnVsa1VwbG9hZC53ZWlnaHRGYWN0b3JzLmxlbmd0aCArIGluZGV4XSA/PyAnJyxcclxuICAgICAgICAgIC8vICAgICAgICAgY3VzdG9tX3RhZ19uYW1lOiB0YWcudGFnTmFtZVxyXG4gICAgICAgICAgLy8gICAgICAgfTtcclxuICAgICAgICAgIC8vICAgICAgIGN1c3RvbVRhZ3MucHVzaChjVGFnKTtcclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gICBvYmouY3VzdG9tVGFnID0gY3VzdG9tVGFncztcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIGxldCBvYmogPSB0aGlzLnNldFJpc2tEZXRhaWxzKHJpc2spXHJcbiAgICAgICAgICBpZiAob2JqPy5saWtlbGlob29kICYmICF0aGlzLnRlbXBsYXRlSW5mbz8ubGlrZWxpaG9vZC5pbmNsdWRlcyhvYmo/Lmxpa2VsaWhvb2QpKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgb2JqLmlzVmFsaWQ9ZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob2JqPy5pbXBhY3QgJiYgIXRoaXMudGVtcGxhdGVJbmZvPy5pbXBhY3QuaW5jbHVkZXMob2JqPy5pbXBhY3QpKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgb2JqLmlzVmFsaWQ9ZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob2JqPy52ZWxvY2l0eSAmJiAhdGhpcy50ZW1wbGF0ZUluZm8/LnZlbG9jaXR5LmluY2x1ZGVzKG9iaj8udmVsb2NpdHkpKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgb2JqLmlzVmFsaWQ9ZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob2JqPy52dWxuZXJhYmlsaXR5ICYmICF0aGlzLnRlbXBsYXRlSW5mbz8udnVsbmVyYWJpbGl0eS5pbmNsdWRlcyhvYmo/LnZ1bG5lcmFiaWxpdHkpKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgb2JqLmlzVmFsaWQ9ZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgIHRoaXMucmlza0J1bGtVcGxvYWQucmlza3MucHVzaChvYmopO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSB0cnVlO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRhcmdldD8uZmlsZXNbMF0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tFbXB0eUZpbGUoKSB7XHJcbiAgICBsZXQgaXNFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmZpbHRlcigoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA8IDEpIHtcclxuICAgICAgaXNFbXB0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNFbXB0eTtcclxuICB9XHJcblxyXG4gIGNoZWNrVmFsaWRpdHkocmlzazogYW55KSB7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgbGV0IHRyaW1tZWROYW1lID0gKHJpc2tbMF0pID8gcmlza1swXS50b1N0cmluZygpLnJlcGxhY2UocmUsICcnKS50cmltKCkgOiAnJztcclxuICAgIHRyaW1tZWROYW1lID0gdHJpbW1lZE5hbWUucmVwbGFjZSgvICArL2csICcgJyk7XHJcbiAgICAvLyB8fCAodGhpcy5hc3Nlc3NtZW50RGVhZExpbmUgJiYgKCFyaXNrWzZdKSlcclxuICAgIGlmICgoIXRyaW1tZWROYW1lKSB8fCAocmlza1szXSAmJiAocmlza1szXSA9PSByaXNrWzZdKSkgfHwgKCghcmlza1szXSkgJiYgKHRoaXMuZGVmYXVsdE93bmVyID09IHJpc2tbNl0pKVxyXG4gICAgICB8fCAoIXJpc2tbMl0pIHx8ICghdGhpcy5mcmVxdWVuY3lUeXBlPy5pbmNsdWRlcyhyaXNrWzRdPy50b0xvd2VyQ2FzZSgpKSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHsgcmV0dXJuIHRydWUgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKTtcclxuICAgIGNvbnN0IGRvd25sb2FkRGF0ZSA9IHRvZGF5WzBdO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnVkNvbXBseSAtIFJpc2sgTW9kdWxlIC0gQWRkIE11bHRpcGxlIFJpc2tzIC0gJysgdGhpcy5jYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfbmFtZSArJyAtICcgKyBkb3dubG9hZERhdGUgKyAnLnhsc3gnO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZG93bmxvYWRUZW1wbGF0ZSh0aGlzLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuX2lkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5sb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuZG93bmxvYWRQZXJjZW50ID0gMTAwICogKGRhdGEubG9hZGVkIC8gZGF0YS50b3RhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLmJvZHkpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gdGhpcy5yaXNrU2VydmljZS5kb3duTG9hZEZpbGUoZGF0YS5ib2R5LCAnYXBwbGljYXRpb24veGxzeCcsIGZpbGVOYW1lKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURFRCc7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRSaXNrQnVsa1VwbG9hZChjb21wbGV0ZUFzc2Vzc21lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0gW107XHJcbiAgICB0aGlzLnJpc2tCdWxrVXBsb2FkLnJpc2tzLmZvckVhY2goKHJpc2s6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBmcmVxdWVuY3lWYWx1ZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChyaXNrPy5mcmVxdWVuY3kpO1xyXG4gICAgICBpZiAocmlzay5pc1ZhbGlkKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgdGl0bGU6IHJpc2s/LnJpc2tOYW1lLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IHJpc2s/LmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgY2F0ZWdvcnlfY3VzdG9tX3RhZzogcmlzaz8uY3VzdG9tVGFnLFxyXG4gICAgICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9lbmFibGU6IHRoaXMuc2V0dGluZ3NJbmZvPy5hc3Nlc3NtZW50X2RlYWRsaW5lX2VuYWJsZSxcclxuICAgICAgICAgIG93bmVyOiAocmlzaz8ub3duZXIpID8gdGhpcy5yZXR1cm5JZHMocmlzaz8ub3duZXIsICdvd25lcicpIDogdGhpcy5yZXR1cm5JZHModGhpcy5kZWZhdWx0T3duZXIsICdvd25lcicpLFxyXG4gICAgICAgICAgY2F0ZWdvcnk6ICh0aGlzLmNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9pZCkgPyBbdGhpcy5jYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfaWRdIDogW10sXHJcbiAgICAgICAgICBtYW5hZ2Vfb3ZlcnNpZ2h0OiB0aGlzLnJldHVybklkcyhyaXNrPy5vdmVyc2VlciwgJ292ZXJzZWVyJyksXHJcbiAgICAgICAgICByY19pZDogdGhpcy5yZXR1cm5JZHMocmlzaz8ucmNOYW1lLCAncmNfaWQnKSxcclxuICAgICAgICAgIGhlYWRfaWRzOiB0aGlzLnJldHVybklkcyhyaXNrPy5yY05hbWUsICdyY19vd25lcl9pZHMnKSwgLy8yIHRvIGJlIGFyYXlcclxuICAgICAgICAgIHJhdGluZ19hcnI6IFtcclxuICAgICAgICAgICAgcmlzaz8ubGlrZWxpaG9vZCA/IHJpc2s/Lmxpa2VsaWhvb2Quc3BsaXQoJyAtICcpWzFdIDogMCxcclxuICAgICAgICAgICAgcmlzaz8uaW1wYWN0ID8gcmlzaz8uaW1wYWN0LnNwbGl0KCcgLSAnKVsxXSA6IDAsXHJcbiAgICAgICAgICAgIHJpc2s/LnZlbG9jaXR5ID8gcmlzaz8udmVsb2NpdHkuc3BsaXQoJyAtICcpWzFdIDogMCxcclxuICAgICAgICAgICAgcmlzaz8udnVsbmVyYWJpbGl0eSA/IHJpc2s/LnZ1bG5lcmFiaWxpdHkuc3BsaXQoJyAtICcpWzFdIDogMCxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgICAgICBvcmdhbmlzYXRpb25faWQ6IHRoaXMub3JnYW5pemF0aW9uSWQsXHJcbiAgICAgICAgICByaXNrX3Byb2dyZXNzX2ZsYWc6IDEsXHJcbiAgICAgICAgICBJZkFzc2Vzc21lbnREb25lOiAwLFxyXG4gICAgICAgICAgd29ya3Nob3BfaWQ6ICcnLFxyXG4gICAgICAgICAgY29tcGxldGVfYXNzZXNzbWVudDogKGNvbXBsZXRlQXNzZXNzbWVudCkgPyAxIDogMCxcclxuICAgICAgICAgIG1pdGlnYXRpb246IHRoaXMucmV0dXJuSWRzKHJpc2s/Lm1pdGlnYXRpb25Qcmlvcml0eSwgJ21pdGlnYXRpb24nKSwgLy8zIHdyb25nXHJcbiAgICAgICAgICB3ZWlnaHRhZ2VfZW5hYmxlOiB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2VuYWJsZSxcclxuICAgICAgICAgIHRyZWF0bWVudF90eXBlOiB0aGlzLnNldHRpbmdzSW5mbz8udHJlYXRtZW50X2NyaXRlcmlhLFxyXG4gICAgICAgICAgd2VpZ2h0YWdlX2RldGFpbHM6IHRoaXMuc2V0dGluZ3NJbmZvPy53ZWlnaHRhZ2VfZGV0YWlscyxcclxuICAgICAgICAgIHdlaWdodGFnZV9zZXRfYnk6IHRoaXMuc2V0dGluZ3NJbmZvPy53ZWlnaHRhZ2Vfc2V0X2J5LFxyXG4gICAgICAgICAgd2VpZ2h0YWdlX3N0cjogW1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2RldGFpbHM/LmltcGFjdC52YWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0luZm8/LndlaWdodGFnZV9kZXRhaWxzPy5saWtlbGlob29kLnZhbHVlLFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2RldGFpbHM/LnZlbG9jaXR5LnZhbHVlLFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzSW5mbz8ud2VpZ2h0YWdlX2RldGFpbHM/LnZ1bG5lcmFiaWxpdHkudmFsdWUsXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgLy8gYXNzZXNzbWVudF9kZWFkbGluZV9zZXRfYnk6IHRoaXMuc2V0dGluZ3NJbmZvPy5hc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieSwgLy9jaGVjazEgbm90IGFwcGVhcmluZ1xyXG4gICAgICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9zZXRfYnk6IHRoaXMuc2V0dGluZ3NJbmZvPy5hc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieSA/PyB0aGlzLm1lbWJlcklkLCAvL2NoZWNrMSBub3QgYXBwZWFyaW5nXHJcbiAgICAgICAgICBhc3Nlc3NtZW50X2RlYWRsaW5lX2RheXM6ICh0aGlzLnNldHRpbmdzSW5mbz8uYXNzZXNzbWVudF9kZWFkbGluZV9lbmFibGUpID8gdGhpcy5zZXR0aW5nc0luZm8/LmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyA6IHJpc2s/LmFzc2Vzc21lbnREZWFkTGluZSxcclxuICAgICAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiB7XHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogZnJlcXVlbmN5VmFsdWUsXHJcbiAgICAgICAgICAgIHN0YXJ0ZWRfYXQ6IHRoaXMuY2hhbmdlVGltZVpvbmUobmV3IERhdGUpID8/IG1vbWVudCgpLmZvcm1hdChcIllZWVktTU0tRERcIiksXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeV90aW1lOiBcIjExOjU5IHBtXCIsXHJcbiAgICAgICAgICAgIHJlbWluZF9iZWZvcmVfZGF5czogcmlzaz8uZW1haWxSZW1pbmRlciA/IHJpc2s/LmVtYWlsUmVtaW5kZXIgOiB0aGlzLnNldERlZmF1bHRFbWFpbFJlbWluZGVyVmFsdWUocmlzaz8uZnJlcXVlbmN5KSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByaXNrX2xhYmVsOiB0aGlzLnNldFJpc2tMYWJlbChyaXNrPy5yaXNrTGFiZWwpLFxyXG4gICAgICAgICAgbWl0aWdhdGlvbl9wbGFuX3JlY29tbWVuZGF0aW9uOiByaXNrPy5taXRpZ2F0aW9uUGxhbnMgPz8gJycsXHJcbiAgICAgICAgICBzYW1lUmlza1JhdGluZ3NGb3JBbGxSQzogcmlzaz8uYXBwbHlTYW1lUmlza1JhdGluZyA/PyAnTm8nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcGF5bG9hZC5wdXNoKG9iaik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coXCJwYXlsb2FkcGF5bG9hZHBheWxvYWRwYXlsb2FkcGF5bG9hZHBheWxvYWQgID09PT0+XCIscGF5bG9hZClcclxuXHJcbiAgICAvLyB0aGlzLnJpc2tTZXJ2aWNlLmFkZEJ1bGtSaXNrKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgIC8vICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgIC8vICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgIC8vICAgdGhpcy5yaXNrRGF0YSA9IHJlcztcclxuICAgIC8vIH0sXHJcbiAgICAvLyAgIGVyciA9PiB7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgIC8vICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICAvLyAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCAnYWxlcnQnKTtcclxuXHJcbiAgICAvLyAgIH1cclxuICAgIC8vICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcmV0dXJuSWRzKGl0ZW06IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2UgJ3JjX2lkJzpcclxuICAgICAgICBjb25zdCByY0lkOiBhbnkgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgocmNfZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmNfZWxlbWVudC5yY05hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICByY0lkLnB1c2gocmNfZWxlbWVudC5yY19pZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmNJZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmNfb3duZXJfaWRzJzpcclxuICAgICAgICBsZXQgb3duZXJfaWRzOiBhbnkgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgoaGVhZGVySWRzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChoZWFkZXJJZHMucmNOYW1lID09IGl0ZW0gJiYgaGVhZGVySWRzLm93bmVyX2lkcykge1xyXG4gICAgICAgICAgICBvd25lcl9pZHM9IGhlYWRlcklkcy5vd25lcl9pZHMuaW5jbHVkZXMoJywnKT8gaGVhZGVySWRzLm93bmVyX2lkcy5zcGxpdCgnLCcpLm1hcChOdW1iZXIpIDpbTnVtYmVyKGhlYWRlcklkcy5vd25lcl9pZHMpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb3duZXJfaWRzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvd25lcic6XHJcbiAgICAgICAgY29uc3Qgb3duZXJJZDogYW55ID0gW107XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ub3duZXJMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQubmFtZSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIG93bmVySWQucHVzaChlbGVtZW50Lm1lbWJlcl9pZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb3duZXJJZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXInOlxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVySWQ6IGFueSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm93bmVyTGlzdC5mb3JFYWNoKChvc19lbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChvc19lbGVtZW50Lm5hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBvdmVyc2VlcklkLnB1c2gob3NfZWxlbWVudC5tZW1iZXJfaWQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG92ZXJzZWVySWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdtaXRpZ2F0aW9uJzpcclxuICAgICAgICBsZXQgbWl0aWdhdGlvbklkOiBhbnk9MDtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5taXRpZ2F0aW9uTGlzdC5mb3JFYWNoKChtaXRpZ2F0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChtaXRpZ2F0aW9uLm1pdGlnYXRpb25OYW1lID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgbWl0aWdhdGlvbklkID0gbWl0aWdhdGlvbi5taXRpZ2F0aW9uX2lkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1pdGlnYXRpb25JZDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmlza0J1bGtVcGxvYWQgPSB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHdlaWdodEZhY3RvcnM6IFtdLFxyXG4gICAgICByaXNrczogW11cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgICBjYXRlZ29yeUlkOiAnJyxcclxuICAgICAgb3duZXJMaXN0OiBbXSxcclxuICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgbWl0aWdhdGlvbkxpc3Q6IFtdXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYXNzZXNzbWVudERlYWRMaW5lID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcblxyXG4gIH1cclxuICBhY3Rpb24oZXZlbnQ6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdhZGRNb3JlJzpcclxuICAgICAgICB0aGlzLmNhdGVnb3J5ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3N0cmF0ZWdpYycsXHJcbiAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAnJyxcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdOT1RfRE9XTkxPQURJTkcnO1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlld1Jpc2tzJzpcclxuICAgICAgICB0aGlzLnZpZXdSaXNrcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7ZXZ0OnRoaXMucmlza0RhdGEsIGNvbmZpcm0gOiBmYWxzZX0pO1xyXG4gIH1cclxuXHJcbiAgdmlld1Jpc2tzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgKz0gJy9yaXNrLXJlZ2lzdGVyJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCArPSAnL3Jpc2svcmlzay1yZWdpc3Rlcic7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIGFycmF5IHZhbHVlcyBhcyBwcm9wZXJ0aWVzLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gcmlzayAtIGFueSA9IFtcclxuICAgKiBAcmV0dXJucyBbXHJcbiAgICogICB7XHJcbiAgICogICAgIFwicmlza05hbWVcIjogXCJcIixcclxuICAgKiAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAqICAgICBcInJjTmFtZVwiOiBcIlwiLFxyXG4gICAqICAgICBcIm93bmVyXCI6IFwiXCIsXHJcbiAgICogICAgIFwiZnJlcXVlbmN5XCI6IFwiXCIsXHJcbiAgICogICAgIFwiZW1haWxSZW1pbmRlclwiOiBcIlwiLFxyXG4gICAqICAgICBcIm92ZXJzZWVyXCI6IFwiXCIsXHJcbiAgICogICAgIFwiaXNWYWxpZFwiOiBmYWxzZSxcclxuICAgKiAgICAgXCJtaXRpZ2F0aW9uUHJpb3JpdHlcIjogXCJcIixcclxuICAgKi9cclxuICBzZXRSaXNrRGV0YWlscyhyaXNrOiBhbnkpIHtcclxuICAgIGxldCBvYmo6IGFueTtcclxuICAgIG9iaiA9IHtcclxuICAgICAgcmlza05hbWU6IHJpc2tbMF0gPz8gJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiByaXNrWzFdID8/ICcnLFxyXG4gICAgICByY05hbWU6IHJpc2tbMl0gPz8gJycsXHJcbiAgICAgIG93bmVyOiByaXNrWzNdID8/ICcnLFxyXG4gICAgICBmcmVxdWVuY3k6IHJpc2tbNF0gPz8gJycsXHJcbiAgICAgIGVtYWlsUmVtaW5kZXI6IHJpc2tbNV0sXHJcbiAgICAgIG92ZXJzZWVyOiByaXNrWzZdID8/ICcnLFxyXG4gICAgICBpc1ZhbGlkOiB0aGlzLmNoZWNrVmFsaWRpdHkocmlzayksXHJcbiAgICB9XHJcbiAgICBsZXQgaW5kZXggPSA3O1xyXG4gICAgaWYodGhpcy5yaXNrQnVsa1VwbG9hZD8uaGVhZGVyPy5pbmNsdWRlcygnUmVjb21tZW5kZWQgTWl0aWdhdGlvbiBQcmlvcml0eScpKSB7IFxyXG4gICAgICBvYmpbJ21pdGlnYXRpb25Qcmlvcml0eSddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICAgIGluZGV4ICsrO1xyXG4gICAgfVxyXG4gICAgb2JqWydtaXRpZ2F0aW9uUGxhbnMnXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgaW5kZXggKys7XHJcbiAgICBvYmpbJ3Jpc2tMYWJlbCddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICBpbmRleCArKztcclxuICAgIG9ialsnbGlrZWxpaG9vZCddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICBpbmRleCArKztcclxuICAgIG9ialsnaW1wYWN0J10gPSByaXNrW2luZGV4XSA/PyAnJztcclxuICAgIGluZGV4ICsrO1xyXG4gICAgaWYodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8uaW5jbHVkZXMoJ1ZlbG9jaXR5JykpIHtcclxuICAgICAgb2JqWyd2ZWxvY2l0eSddID0gcmlza1tpbmRleF0gPz8gJyc7XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9IFxyXG4gICAgaWYodGhpcy5yaXNrQnVsa1VwbG9hZD8ud2VpZ2h0RmFjdG9ycz8uaW5jbHVkZXMoJ1Z1bG5lcmFiaWxpdHknKSkge1xyXG4gICAgICBvYmpbJ3Z1bG5lcmFiaWxpdHknXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5yaXNrQnVsa1VwbG9hZD8uaGVhZGVyPy5pbmNsdWRlcygnRG8geW91IHdhbnQgdG8gYXBwbHkgdGhlIHNhbWUgcmlzayByYXRpbmdzIGZvciBhbGwgUmVzcG9uc2liaWxpdHkgQ2VudGVycz8nKSkge1xyXG4gICAgICBvYmpbJ2FwcGx5U2FtZVJpc2tSYXRpbmcnXSA9IHJpc2tbaW5kZXhdID8/ICcnO1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VzdG9tVGFnczogYW55ID0gW107XHJcbiAgICB0aGlzLmNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jdXN0b21fdGFnPy5mb3JFYWNoKCh0YWc6IGFueSwgaTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0YWcpIHtcclxuICAgICAgICBjb25zdCBjVGFnID0ge1xyXG4gICAgICAgICAgY3VzdG9tX3RhZ192YWx1ZTogcmlza1tpbmRleCArIGldID8/ICcnLFxyXG4gICAgICAgICAgY3VzdG9tX3RhZ19uYW1lOiB0YWcudGFnTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY3VzdG9tVGFncy5wdXNoKGNUYWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIG9ialsnY3VzdG9tVGFnJ10gPSBjdXN0b21UYWdzO1xyXG4gICAgb2JqWydpc1ZhbGlkRnJlcXVlbmN5J10gPSB0aGlzLmZyZXF1ZW5jeVR5cGU/LmluY2x1ZGVzKG9iaj8uZnJlcXVlbmN5Py50b0xvd2VyQ2FzZSgpKTtcclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgZnJlcXVlbmN5VHlwZSBpcyB3ZWVrbHksIHJldHVybiAyLCBpZiBpdCdzIG1vbnRobHksIHJldHVybiA3LCBpZiBpdCdzIHF1YXJ0ZXJseSwgcmV0dXJuIDcsXHJcbiAgICogaWYgaXQncyBiaWFubnVhbCwgcmV0dXJuIDMwLCBpZiBpdCdzIGFubnVhbCwgcmV0dXJuIDMwLCBpZiBpdCdzIG9uZSB0aW1lLCByZXR1cm4gMTUsIG90aGVyd2lzZVxyXG4gICAqIHJldHVybiAwLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZnJlcXVlbmN5VHlwZV0gLSBzdHJpbmcgLSB0aGUgZnJlcXVlbmN5IHR5cGUgb2YgdGhlIHJlbWluZGVyXHJcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGRheXMgYmVmb3JlIHRoZSBldmVudCB0aGF0IHRoZSByZW1pbmRlciBzaG91bGQgYmUgc2VudC5cclxuICAgKi9cclxuICBzZXREZWZhdWx0RW1haWxSZW1pbmRlclZhbHVlKGZyZXF1ZW5jeVR5cGU/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoKGZyZXF1ZW5jeVR5cGU/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSAnd2Vla2x5JyA6IHJldHVybiAyO1xyXG4gICAgICBjYXNlICdtb250aGx5JyA6IHJldHVybiA3O1xyXG4gICAgICBjYXNlICdxdWFydGVybHknIDogcmV0dXJuIDc7XHJcbiAgICAgIGNhc2UgJ2JpYW5udWFsJyA6IHJldHVybiAzMDtcclxuICAgICAgY2FzZSAnYW5udWFsJyA6IHJldHVybiAzMDtcclxuICAgICAgY2FzZSAnb25lIHRpbWUnIDogcmV0dXJuIDE1O1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBsYWJlbCBpcyAnbmV3IHJpc2snLCByZXR1cm4gMSwgaWYgdGhlIGxhYmVsIGlzICdlbWVyZ2luZy9yYXBpZGx5IGNoYW5naW5nIHJpc2tzJywgcmV0dXJuIDIsXHJcbiAgICogb3RoZXJ3aXNlIHJldHVybiAxXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsYWJlbF0gLSB0aGUgbGFiZWwgb2YgdGhlIHJpc2tcclxuICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBleHByZXNzaW9uIGluIHRoZSBmdW5jdGlvbi5cclxuICAgKi9cclxuICBzZXRSaXNrTGFiZWwobGFiZWw/OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaChsYWJlbD8udG9Mb3dlckNhc2UoKSl7XHJcbiAgICAgIGNhc2UgJ25ldyByaXNrJzogcmV0dXJuIDE7XHJcbiAgICAgIGNhc2UgJ2VtZXJnaW5nL3JhcGlkbHkgY2hhbmdpbmcgcmlza3MnOiByZXR1cm4gMjtcclxuICAgICAgZGVmYXVsdDogcmV0dXJuIDFcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFwiSWYgdGhlIGRhdGUgaXMgYSBudW1iZXIsIGNvbnZlcnQgaXQgdG8gYSBkYXRlIG9iamVjdCwgdGhlbiBjcmVhdGUgYSBuZXcgZGF0ZSBvYmplY3Qgd2l0aCB0aGVcclxuICAgKiB0aW1lem9uZSBzZXQgdG8gdGhlIHVzZXIncyB0aW1lem9uZSwgdGhlbiByZXR1cm4gdGhlIGRhdGUgaW4gdGhlIGZvcm1hdCBZWVlZLU1NLURELlwiXHJcbiAgICogPC9jb2RlPlxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRlIC0gYW55IC0gdGhlIGRhdGUgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB0aW1lem9uZSBvZlxyXG4gICAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIGJlaW5nIHJldHVybmVkIGluIHRoZSB0aW1lem9uZSBvZiB0aGUgdXNlci5cclxuICAgKi9cclxuICBjaGFuZ2VUaW1lWm9uZShkYXRlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW52RGF0ZSA9IG5ldyBEYXRlKFxyXG4gICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcclxuICAgICAgICB0aW1lWm9uZTogdGhpcy5hdXRoU2VydmljZS51c2VyRGV0YWlscz8udGltZXpvbmUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIG1vbWVudChpbnZEYXRlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG4gIH1cclxufVxyXG4iXX0=
|