vcomply-workflow-engine 3.4.23 → 3.4.25
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/esm2020/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +2 -4
- package/esm2020/lib/add-multiple-risk/add-multiple-risk.component.mjs +2 -3
- package/esm2020/lib/formgroup/cs-select/cs-select.component.mjs +5 -5
- package/esm2020/lib/formgroup/cs-switch/cs-switch.component.mjs +1 -4
- package/esm2020/lib/log-an-issue/log-an-issue.component.mjs +1 -11
- package/esm2020/lib/more-option/more-option.component.mjs +5 -6
- package/esm2020/lib/pipes/filter.pipe.mjs +1 -2
- package/esm2020/lib/pipes/search.pipe.mjs +3 -5
- package/esm2020/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.mjs +3 -7
- package/esm2020/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.mjs +1 -5
- package/esm2020/lib/sharedComponents/approval-workflow/approval-workflow.component.mjs +1 -7
- package/esm2020/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.mjs +80 -36
- package/esm2020/lib/sharedComponents/assessment-list/assessment-list.component.mjs +27 -21
- package/esm2020/lib/sharedComponents/assessment-preview/preview/preview.component.mjs +7 -4
- package/esm2020/lib/sharedComponents/audit-category-list/audit-category-list.component.mjs +3 -4
- package/esm2020/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +3 -9
- package/esm2020/lib/sharedComponents/bulk-view/bulk-view.component.mjs +9 -7
- package/esm2020/lib/sharedComponents/category-multiselect/category-multi-select.component.mjs +7 -9
- package/esm2020/lib/sharedComponents/checkpoint/checkpoints/checkpoints.component.mjs +93 -27
- package/esm2020/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.mjs +11 -9
- package/esm2020/lib/sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component.mjs +13 -12
- package/esm2020/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.mjs +28 -19
- package/esm2020/lib/sharedComponents/floating-bar/floating-bar.component.mjs +8 -8
- package/esm2020/lib/sharedComponents/format-and-evidence/format-and-evidence.component.mjs +35 -37
- package/esm2020/lib/sharedComponents/framework-list/parent-table/parent-table.component.mjs +7 -7
- package/esm2020/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +1 -12
- package/esm2020/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +1 -3
- package/esm2020/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +1 -13
- package/esm2020/lib/sharedComponents/frequency/frequency-due-date/frequency-due-date.component.mjs +1 -7
- package/esm2020/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.mjs +1 -26
- package/esm2020/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +1 -15
- package/esm2020/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +1 -14
- package/esm2020/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.mjs +14 -8
- package/esm2020/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +1 -13
- package/esm2020/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.mjs +1 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-random/frequency-random.component.mjs +1 -18
- package/esm2020/lib/sharedComponents/frequency/frequency-top/frequency-top.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +1 -12
- package/esm2020/lib/sharedComponents/frequency/frequency.service.mjs +2 -11
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.mjs +1 -2
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.mjs +1 -2
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.mjs +1 -2
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.mjs +1 -2
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.mjs +1 -2
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.mjs +1 -2
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/group-users-list/group-users-list.component.mjs +1 -3
- package/esm2020/lib/sharedComponents/link-program/link-program/link-program.component.mjs +48 -38
- package/esm2020/lib/sharedComponents/link-program/restapi.service.mjs +31 -16
- package/esm2020/lib/sharedComponents/no-data/no-data.component.mjs +2 -4
- package/esm2020/lib/sharedComponents/owner-list/owner-list.component.mjs +12 -10
- package/esm2020/lib/sharedComponents/program-listing/program-listing.component.mjs +127 -58
- package/esm2020/lib/sharedComponents/radio-list-with-pagination/radio-list.component.mjs +4 -7
- package/esm2020/lib/sharedComponents/responsibility-centers-list/responsibility-centers-list.component.mjs +9 -7
- package/esm2020/lib/sharedComponents/risk-classification/risk-classification.component.mjs +11 -6
- package/esm2020/lib/sharedComponents/select-approvers/select-approvers.component.mjs +1 -2
- package/esm2020/lib/sharedComponents/users-radio-list/users-radio-list.component.mjs +2 -3
- package/esm2020/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +1 -4
- package/esm2020/lib/ui-kit/popover/popover-longpress.directive.mjs +1 -3
- package/esm2020/lib/ui-kit/popover/popover.component.mjs +26 -12
- package/esm2020/lib/ui-kit/tooltip/tooltip.directive.mjs +8 -5
- package/esm2020/lib/workflow/shared/components/attributes/attributes.component.mjs +1 -2
- package/esm2020/lib/workflow/shared/components/edit-mode/edit-mode.component.mjs +1 -4
- package/esm2020/lib/workflow/shared/components/grc-object-list/grc-object-list.component.mjs +1 -2
- package/esm2020/lib/workflow/shared/components/list-popup/list-popup.component.mjs +1 -4
- package/esm2020/lib/workflow/shared/components/table-card/table-card.component.mjs +4 -8
- package/esm2020/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.mjs +245 -108
- package/esm2020/lib/workflow-assessment/workflow-assessment.component.mjs +2 -4
- package/esm2020/lib/workflow-compliance/workflow-compliance.component.mjs +10 -8
- package/esm2020/lib/workflow-engine-container/workflow-engine-container.component.mjs +1 -5
- package/esm2020/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.mjs +45 -45
- package/esm2020/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.mjs +43 -25
- package/esm2020/lib/workflow-program/create-program-ui/define-framework-listing/pipes/sub-cat-indeter.pipe.mjs +4 -4
- package/esm2020/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.mjs +1 -2
- package/esm2020/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.mjs +25 -14
- package/esm2020/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.mjs +6 -3
- package/esm2020/lib/workflow-program/create-program-ui/role-list/role-list.component.mjs +25 -19
- package/esm2020/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.mjs +1 -4
- package/esm2020/lib/workflow-program/workflow-program.component.mjs +232 -110
- package/esm2020/lib/workflow-services/add-risk.service.mjs +1 -2
- package/esm2020/lib/workflow-services/assessment.service.mjs +1 -5
- package/esm2020/lib/workflow-services/programs.service.mjs +173 -57
- package/fesm2015/vcomply-workflow-engine.mjs +1381 -937
- package/fesm2015/vcomply-workflow-engine.mjs.map +1 -1
- package/fesm2020/vcomply-workflow-engine.mjs +1394 -945
- package/fesm2020/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/formgroup/cs-switch/cs-switch.component.d.ts +2 -3
- package/lib/sharedComponents/assessment-list/assessment-list.component.d.ts +4 -5
- package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +2 -3
- package/lib/sharedComponents/bulk-view/bulk-view.component.d.ts +2 -3
- package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts +2 -4
- package/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.d.ts +1 -1
- package/lib/sharedComponents/link-program/restapi.service.d.ts +3 -3
- package/lib/sharedComponents/no-data/no-data.component.d.ts +2 -4
- package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +2 -3
- package/lib/workflow/shared/components/edit-mode/edit-mode.component.d.ts +2 -3
- package/lib/workflow/shared/components/list-popup/list-popup.component.d.ts +2 -3
- package/lib/workflow/shared/components/table-card/table-card.component.d.ts +2 -5
- package/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.d.ts +8 -9
- package/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.d.ts +2 -4
- package/package.json +1 -1
package/esm2020/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.mjs
CHANGED
|
@@ -9,7 +9,10 @@ import * as i5 from "@angular/common";
|
|
|
9
9
|
import * as i6 from "../../ui-kit/line-loader/line-loader.component";
|
|
10
10
|
import * as i7 from "../../sharedComponents/v-loader/loader-inline/loader-inline.component";
|
|
11
11
|
import * as i8 from "../../ui-kit/smiley-dialog-inline/smiley-dialog-inline.component";
|
|
12
|
-
const smileyActions = {
|
|
12
|
+
const smileyActions = {
|
|
13
|
+
IMPORT_MORE: 'IMPORT_MORE',
|
|
14
|
+
VIEW_ASSESSMENTS: 'VIEW_ASSESSMENTS',
|
|
15
|
+
};
|
|
13
16
|
export class ImportAnAssessmentComponent {
|
|
14
17
|
constructor(auth, assessmentService) {
|
|
15
18
|
this.auth = auth;
|
|
@@ -21,13 +24,21 @@ export class ImportAnAssessmentComponent {
|
|
|
21
24
|
this.uploadedFiles = [];
|
|
22
25
|
this.fileResponse = [];
|
|
23
26
|
this.organizationId = 0;
|
|
24
|
-
this.errorMessage =
|
|
27
|
+
this.errorMessage = 'invalid file error';
|
|
25
28
|
this.downloadStatus = 'NOT_DOWNLOADING';
|
|
26
29
|
this.downloadPercent = 0;
|
|
27
30
|
this.smileyMessageAction = `You're All Set!`;
|
|
28
31
|
this.actionButtons = [
|
|
29
|
-
{
|
|
30
|
-
|
|
32
|
+
{
|
|
33
|
+
buttonText: 'Import More Assessments',
|
|
34
|
+
class: 'white-btn',
|
|
35
|
+
id: smileyActions.IMPORT_MORE,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
buttonText: 'View Assessments',
|
|
39
|
+
class: 'blue-btn',
|
|
40
|
+
id: smileyActions.VIEW_ASSESSMENTS,
|
|
41
|
+
},
|
|
31
42
|
];
|
|
32
43
|
this.showSmiley = false;
|
|
33
44
|
this.isUploaded = false;
|
|
@@ -50,7 +61,7 @@ export class ImportAnAssessmentComponent {
|
|
|
50
61
|
randomize: 15,
|
|
51
62
|
alignment: 16,
|
|
52
63
|
userattachment: 17,
|
|
53
|
-
usercomment: 18
|
|
64
|
+
usercomment: 18,
|
|
54
65
|
};
|
|
55
66
|
this.settings = {
|
|
56
67
|
assessmentMode: false,
|
|
@@ -58,7 +69,7 @@ export class ImportAnAssessmentComponent {
|
|
|
58
69
|
negativeScoreCriteria: 'FAILED',
|
|
59
70
|
negativeScore: 0,
|
|
60
71
|
weightageEnabled: false,
|
|
61
|
-
settingsEnabled: false
|
|
72
|
+
settingsEnabled: false,
|
|
62
73
|
};
|
|
63
74
|
this.organizationId = this.auth.getOrganizationId();
|
|
64
75
|
}
|
|
@@ -66,9 +77,9 @@ export class ImportAnAssessmentComponent {
|
|
|
66
77
|
this.isUploaded = isUploaded;
|
|
67
78
|
this.auth.previewPanel.next(isUploaded);
|
|
68
79
|
if (!isUploaded) {
|
|
69
|
-
const closeBtn = document.getElementById(
|
|
80
|
+
const closeBtn = document.getElementById('close-workflow-engine-btn');
|
|
70
81
|
if (closeBtn)
|
|
71
|
-
closeBtn.style.display =
|
|
82
|
+
closeBtn.style.display = 'block';
|
|
72
83
|
this.convertedData = {};
|
|
73
84
|
}
|
|
74
85
|
}
|
|
@@ -87,7 +98,9 @@ export class ImportAnAssessmentComponent {
|
|
|
87
98
|
this.downloadStatus = this.assessmentService.downLoadFile(data, 'application/xlsx', fileName);
|
|
88
99
|
}, 1500);
|
|
89
100
|
},
|
|
90
|
-
error: () => {
|
|
101
|
+
error: () => {
|
|
102
|
+
this.downloadStatus = 'DOWNLOADED';
|
|
103
|
+
},
|
|
91
104
|
});
|
|
92
105
|
}
|
|
93
106
|
triggerBrowseFile() {
|
|
@@ -110,7 +123,6 @@ export class ImportAnAssessmentComponent {
|
|
|
110
123
|
this.categoryData = XLSX.utils.sheet_to_json(tempData, {
|
|
111
124
|
header: 1,
|
|
112
125
|
});
|
|
113
|
-
console.log("data", this.categoryData);
|
|
114
126
|
this.sheetData = XLSX.utils.sheet_to_json(ws, {
|
|
115
127
|
header: 1,
|
|
116
128
|
});
|
|
@@ -118,15 +130,16 @@ export class ImportAnAssessmentComponent {
|
|
|
118
130
|
this.assessmentData = this.sheetData.filter((dataElement) => dataElement.length > 0);
|
|
119
131
|
this.isWrongFormat = false;
|
|
120
132
|
this.errorMessage = '';
|
|
121
|
-
console.log("Imp", this.checkFormat(this.assessmentData));
|
|
122
133
|
if (!this.checkFormat(this.assessmentData)) {
|
|
123
|
-
const closeBtn = document.getElementById(
|
|
134
|
+
const closeBtn = document.getElementById('close-workflow-engine-btn');
|
|
124
135
|
if (closeBtn)
|
|
125
|
-
closeBtn.style.display =
|
|
136
|
+
closeBtn.style.display = 'none';
|
|
126
137
|
this.generateEditorPayload(this.assessmentData);
|
|
127
138
|
this.auth.previewPanel.next(true);
|
|
128
139
|
this.isUploaded = true;
|
|
129
|
-
setTimeout(() => {
|
|
140
|
+
setTimeout(() => {
|
|
141
|
+
this.editorCont.triggerPreviewWithValidation();
|
|
142
|
+
}, 100);
|
|
130
143
|
}
|
|
131
144
|
};
|
|
132
145
|
reader.readAsBinaryString(target.files[0]);
|
|
@@ -152,15 +165,15 @@ export class ImportAnAssessmentComponent {
|
|
|
152
165
|
//check format
|
|
153
166
|
const payload = {
|
|
154
167
|
metadata: {
|
|
155
|
-
assessment_name:
|
|
156
|
-
description:
|
|
157
|
-
assessment_type:
|
|
168
|
+
assessment_name: '',
|
|
169
|
+
description: '',
|
|
170
|
+
assessment_type: 'compliance',
|
|
158
171
|
category_arr: [],
|
|
159
172
|
approval_workflow_arr: {
|
|
160
|
-
|
|
173
|
+
test: 'test',
|
|
161
174
|
},
|
|
162
175
|
approval_required: true,
|
|
163
|
-
source_page:
|
|
176
|
+
source_page: 'compliance',
|
|
164
177
|
},
|
|
165
178
|
assessmentData: {
|
|
166
179
|
version: 2,
|
|
@@ -182,14 +195,16 @@ export class ImportAnAssessmentComponent {
|
|
|
182
195
|
pageDetailsList: [],
|
|
183
196
|
customResponseSet: [],
|
|
184
197
|
settings: this.settings,
|
|
185
|
-
responseSegment: this.initializeEmptyResponseSegment()
|
|
186
|
-
}
|
|
198
|
+
responseSegment: this.initializeEmptyResponseSegment(),
|
|
199
|
+
},
|
|
187
200
|
};
|
|
188
201
|
this.convertedData = payload;
|
|
189
202
|
this.convertedData.metadata.assessment_name = this.assessmentData[2][1];
|
|
190
203
|
this.convertedData.metadata.description = this.assessmentData[3][1];
|
|
191
204
|
// this.convertedData.metadata.category_arr[0] = this.assessmentData[4][1];
|
|
192
|
-
this.convertedData.metadata.category_arr = [
|
|
205
|
+
this.convertedData.metadata.category_arr = [
|
|
206
|
+
this.categoryNametoId(this.assessmentData[4][1]),
|
|
207
|
+
];
|
|
193
208
|
//TODO: create a function to convert from categories names to categories id.
|
|
194
209
|
//TODO: check the api for sub-flow like assessment-setting.
|
|
195
210
|
// this.convertedData.metadata.category_arr[0] = "61cc27c5b3e8642b333f3591";
|
|
@@ -199,7 +214,6 @@ export class ImportAnAssessmentComponent {
|
|
|
199
214
|
questionsArray = [];
|
|
200
215
|
if (questionsList?.length) {
|
|
201
216
|
questionsList.forEach((question, index) => {
|
|
202
|
-
console.log("question list", question);
|
|
203
217
|
questionsArray.push();
|
|
204
218
|
switch (question[0]) {
|
|
205
219
|
case 'Single Textbox':
|
|
@@ -225,117 +239,226 @@ export class ImportAnAssessmentComponent {
|
|
|
225
239
|
}
|
|
226
240
|
});
|
|
227
241
|
}
|
|
228
|
-
console.log("questions", questionsArray);
|
|
229
242
|
this.convertedData.assessmentData.elements = questionsArray;
|
|
230
243
|
}
|
|
231
244
|
generateSingleTextbox(type, question, index) {
|
|
232
245
|
return {
|
|
233
|
-
type: 'single-textbox',
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
246
|
+
type: 'single-textbox',
|
|
247
|
+
name: `Question_${index}`,
|
|
248
|
+
page: 1,
|
|
249
|
+
hasValidation: false,
|
|
250
|
+
validationType: '',
|
|
251
|
+
isRequired: question[this.colMap?.required] === 'Yes' ? true : false,
|
|
252
|
+
hasCharacterLength: false,
|
|
253
|
+
minCharacterLength: 0,
|
|
254
|
+
maxCharacterLength: 100,
|
|
255
|
+
title: question[this.colMap?.title]?.toString()?.trim() ?? '',
|
|
256
|
+
hasDescription: question[this.colMap?.description]?.toString()?.trim()
|
|
257
|
+
?.length
|
|
258
|
+
? true
|
|
259
|
+
: false,
|
|
260
|
+
description: question[this.colMap?.description]?.toString()?.trim() ?? '',
|
|
261
|
+
hasComments: question[this.colMap?.usercomment]?.toString()?.trim()
|
|
262
|
+
?.length
|
|
263
|
+
? true
|
|
264
|
+
: false,
|
|
265
|
+
comments: question[this.colMap?.comment]?.toString()?.trim(),
|
|
266
|
+
randomize: question[this.colMap?.randomize] === 'Yes' ? true : false,
|
|
267
|
+
hasOther: question[this.colMap?.other] === 'Yes' ? true : false,
|
|
268
|
+
otherValue: 'Other',
|
|
269
|
+
alignment: question[this.colMap?.alignment] === 'Yes' ? true : false,
|
|
270
|
+
reverse: false,
|
|
271
|
+
isRespondentAttachment: question[this.colMap?.userattachment] === 'Yes' ? true : false,
|
|
272
|
+
userAttachedFiles: [],
|
|
273
|
+
isRespondentComment: question[this.colMap?.usercomment] === 'Yes' ? true : false,
|
|
240
274
|
visibilityLogic: [],
|
|
241
|
-
otherConfig: {
|
|
242
|
-
|
|
275
|
+
otherConfig: {
|
|
276
|
+
color: '#000000',
|
|
277
|
+
isFailed: false,
|
|
278
|
+
score: question[this.colMap?.score] ?? 1,
|
|
279
|
+
},
|
|
280
|
+
choices: [
|
|
281
|
+
{
|
|
243
282
|
title: '',
|
|
244
283
|
value: 1,
|
|
245
284
|
isSelected: false,
|
|
246
285
|
required: 0,
|
|
247
286
|
hasHelpingLabel: false,
|
|
248
|
-
helpingLabel:
|
|
287
|
+
helpingLabel: '',
|
|
249
288
|
isFailed: false,
|
|
250
289
|
score: question[this.colMap?.score] ?? 1,
|
|
251
|
-
color:
|
|
252
|
-
}
|
|
290
|
+
color: '#000000',
|
|
291
|
+
},
|
|
292
|
+
],
|
|
253
293
|
};
|
|
254
294
|
}
|
|
255
295
|
generateMultipleChoice(type, question, index) {
|
|
256
|
-
console.log("Yo Man", question);
|
|
257
296
|
return {
|
|
258
|
-
type: type,
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
297
|
+
type: type,
|
|
298
|
+
name: `Question_${index}`,
|
|
299
|
+
page: 1,
|
|
300
|
+
hasValidation: false,
|
|
301
|
+
validationType: '',
|
|
302
|
+
isRequired: question[this.colMap?.required] === 'Yes' ? true : false,
|
|
303
|
+
hasCharacterLength: false,
|
|
304
|
+
minCharacterLength: 0,
|
|
305
|
+
maxCharacterLength: 100,
|
|
306
|
+
title: question[this.colMap?.title]?.toString()?.trim() ?? '',
|
|
307
|
+
hasDescription: question[this.colMap?.description]?.toString()?.trim()
|
|
308
|
+
?.length
|
|
309
|
+
? true
|
|
310
|
+
: false,
|
|
311
|
+
description: question[this.colMap?.description]?.toString().trim() ?? '',
|
|
312
|
+
hasComments: question[this.colMap?.comment]?.toString()?.trim()?.length
|
|
313
|
+
? true
|
|
314
|
+
: false,
|
|
315
|
+
comments: question[this.colMap?.comment]?.toString().trim(),
|
|
316
|
+
randomize: question[this.colMap?.randomize] === 'Yes' ? true : false,
|
|
317
|
+
hasOther: question[this.colMap?.other] === 'Yes' ? true : false,
|
|
318
|
+
otherValue: 'Other',
|
|
319
|
+
alignment: question[this.colMap?.alignment] === 'Yes' ? true : false,
|
|
320
|
+
reverse: false,
|
|
321
|
+
isRespondentAttachment: question[this.colMap?.userattachment] === 'Yes' ? true : false,
|
|
322
|
+
userAttachedFiles: [],
|
|
323
|
+
visibilityLogic: [],
|
|
324
|
+
isRespondentComment: question[this.colMap?.usercomment] === 'Yes' ? true : false,
|
|
325
|
+
otherConfig: {
|
|
326
|
+
color: '#000000',
|
|
327
|
+
isFailed: false,
|
|
328
|
+
score: question[this.colMap?.score] ?? 1,
|
|
329
|
+
},
|
|
330
|
+
choices: this.generateChoices(question),
|
|
268
331
|
};
|
|
269
332
|
}
|
|
270
333
|
generateDateTime(type, question, index) {
|
|
271
334
|
return {
|
|
272
|
-
type: type,
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
335
|
+
type: type,
|
|
336
|
+
name: `Question_${index}`,
|
|
337
|
+
page: 1,
|
|
338
|
+
hasValidation: false,
|
|
339
|
+
validationType: '',
|
|
340
|
+
isRequired: question[this.colMap?.required] === 'Yes' ? true : false,
|
|
341
|
+
hasCharacterLength: false,
|
|
342
|
+
minCharacterLength: 0,
|
|
343
|
+
maxCharacterLength: 100,
|
|
344
|
+
title: question[this.colMap?.title]?.toString()?.trim() ?? '',
|
|
345
|
+
hasDescription: question[this.colMap?.description]?.toString()?.trim()
|
|
346
|
+
?.length
|
|
347
|
+
? true
|
|
348
|
+
: false,
|
|
349
|
+
description: question[this.colMap?.description]?.toString()?.trim() ?? '',
|
|
350
|
+
hasComments: question[this.colMap?.comment]?.toString()?.trim()?.length
|
|
351
|
+
? true
|
|
352
|
+
: false,
|
|
353
|
+
comments: question[this.colMap?.comment]?.toString().trim(),
|
|
354
|
+
randomize: question[this.colMap?.randomize] === 'Yes' ? true : false,
|
|
355
|
+
hasOther: question[this.colMap?.other] === 'Yes' ? true : false,
|
|
356
|
+
otherValue: 'Other',
|
|
357
|
+
alignment: question[this.colMap?.alignment] === 'Yes' ? true : false,
|
|
358
|
+
reverse: false,
|
|
359
|
+
isRespondentAttachment: question[this.colMap?.userattachment] === 'Yes' ? true : false,
|
|
360
|
+
userAttachedFiles: [],
|
|
361
|
+
visibilityLogic: [],
|
|
362
|
+
isRespondentComment: question[this.colMap?.usercomment] === 'Yes' ? true : false,
|
|
363
|
+
otherConfig: {
|
|
364
|
+
color: '#000000',
|
|
365
|
+
isFailed: false,
|
|
366
|
+
score: question[this.colMap?.score] ?? 1,
|
|
367
|
+
},
|
|
368
|
+
choices: [
|
|
369
|
+
{
|
|
282
370
|
title: '',
|
|
283
371
|
value: 1,
|
|
284
372
|
isSelected: false,
|
|
285
373
|
required: 0,
|
|
286
374
|
hasHelpingLabel: false,
|
|
287
|
-
helpingLabel:
|
|
375
|
+
helpingLabel: '',
|
|
288
376
|
isFailed: false,
|
|
289
377
|
score: question[this.colMap?.score] ?? 1,
|
|
290
|
-
color:
|
|
291
|
-
}
|
|
378
|
+
color: '#000000',
|
|
379
|
+
},
|
|
380
|
+
],
|
|
292
381
|
hasDate: true,
|
|
293
382
|
hasTime: false,
|
|
294
|
-
dateFormat:
|
|
383
|
+
dateFormat: 'DD/MM/YYYY',
|
|
295
384
|
timeFormat: 24,
|
|
296
385
|
date: {
|
|
297
386
|
title: question[this.colMap?.placeholder] ?? 'Select Date',
|
|
298
|
-
value:
|
|
387
|
+
value: '',
|
|
299
388
|
},
|
|
300
389
|
time: {
|
|
301
390
|
title: question[this.colMap?.placeholder] ?? 'Select Time',
|
|
302
|
-
value:
|
|
391
|
+
value: '',
|
|
303
392
|
},
|
|
304
393
|
};
|
|
305
394
|
}
|
|
306
395
|
generateFileUpload(question, index) {
|
|
307
396
|
return {
|
|
308
|
-
type: 'file-upload',
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
397
|
+
type: 'file-upload',
|
|
398
|
+
name: `Question_${index}`,
|
|
399
|
+
page: 1,
|
|
400
|
+
hasValidation: false,
|
|
401
|
+
validationType: '',
|
|
402
|
+
isRequired: question[this.colMap?.required] === 'Yes' ? true : false,
|
|
403
|
+
hasCharacterLength: false,
|
|
404
|
+
minCharacterLength: 0,
|
|
405
|
+
maxCharacterLength: 100,
|
|
406
|
+
title: question[this.colMap?.title]?.toString()?.trim() ?? '',
|
|
407
|
+
hasDescription: question[this.colMap?.description]?.toString()?.trim()
|
|
408
|
+
?.length
|
|
409
|
+
? true
|
|
410
|
+
: false,
|
|
411
|
+
description: question[this.colMap?.description]?.toString()?.trim() ?? '',
|
|
412
|
+
hasComments: question[this.colMap?.usercomment]?.toString()?.trim()
|
|
413
|
+
?.length
|
|
414
|
+
? true
|
|
415
|
+
: false,
|
|
416
|
+
comments: question[this.colMap?.comment]?.toString()?.trim(),
|
|
417
|
+
randomize: question[this.colMap?.randomize] === 'Yes' ? true : false,
|
|
418
|
+
hasOther: question[this.colMap?.other] === 'Yes' ? true : false,
|
|
419
|
+
otherValue: 'Other',
|
|
420
|
+
alignment: question[this.colMap?.alignment] === 'Yes' ? true : false,
|
|
421
|
+
reverse: false,
|
|
422
|
+
isRespondentAttachment: question[this.colMap?.userattachment] === 'Yes' ? true : false,
|
|
423
|
+
userAttachedFiles: [],
|
|
424
|
+
visibilityLogic: [],
|
|
425
|
+
isRespondentComment: question[this.colMap?.usercomment] === 'Yes' ? true : false,
|
|
426
|
+
otherConfig: {
|
|
427
|
+
color: '#000000',
|
|
428
|
+
isFailed: false,
|
|
429
|
+
score: question[this.colMap?.score] ?? 1,
|
|
430
|
+
},
|
|
431
|
+
choices: [
|
|
432
|
+
{
|
|
318
433
|
title: '',
|
|
319
434
|
value: 1,
|
|
320
435
|
isSelected: false,
|
|
321
436
|
required: 0,
|
|
322
437
|
hasHelpingLabel: false,
|
|
323
|
-
helpingLabel:
|
|
438
|
+
helpingLabel: '',
|
|
324
439
|
isFailed: false,
|
|
325
440
|
score: question[this.colMap?.score] ?? 1,
|
|
326
|
-
color:
|
|
327
|
-
}
|
|
441
|
+
color: '#000000',
|
|
442
|
+
},
|
|
443
|
+
],
|
|
328
444
|
allowedFileTypes: {
|
|
329
445
|
pdf: true,
|
|
330
446
|
doc: true,
|
|
331
447
|
png: true,
|
|
332
448
|
jpg: true,
|
|
333
|
-
gif: true
|
|
449
|
+
gif: true,
|
|
334
450
|
},
|
|
335
451
|
};
|
|
336
452
|
}
|
|
337
453
|
generateChoices(question) {
|
|
338
|
-
const options = [
|
|
454
|
+
const options = [
|
|
455
|
+
question[this.colMap?.opt1],
|
|
456
|
+
question[this.colMap?.opt2],
|
|
457
|
+
question[this.colMap?.opt3],
|
|
458
|
+
question[this.colMap?.opt4],
|
|
459
|
+
question[this.colMap?.opt5],
|
|
460
|
+
question[this.colMap?.opt6],
|
|
461
|
+
].filter((ele) => ele);
|
|
339
462
|
options.forEach((ele) => {
|
|
340
463
|
if (ele) {
|
|
341
464
|
ele.toString()?.trim();
|
|
@@ -354,47 +477,56 @@ export class ImportAnAssessmentComponent {
|
|
|
354
477
|
};
|
|
355
478
|
options.forEach((choice, index) => {
|
|
356
479
|
options[index] = {
|
|
357
|
-
title:
|
|
480
|
+
title: choice && typeof choice == 'string'
|
|
481
|
+
? choice
|
|
482
|
+
: choice.toString() ?? '',
|
|
358
483
|
value: 1,
|
|
359
484
|
isSelected: false,
|
|
360
485
|
required: 0,
|
|
361
486
|
hasHelpingLabel: false,
|
|
362
|
-
helpingLabel:
|
|
363
|
-
isFailed:
|
|
487
|
+
helpingLabel: '',
|
|
488
|
+
isFailed: choice?.toString()?.trim() ==
|
|
489
|
+
question[optionMap[question[this.colMap?.failed]]]
|
|
490
|
+
? true
|
|
491
|
+
: false,
|
|
364
492
|
score: question[this.colMap?.score] ?? 1,
|
|
365
|
-
color:
|
|
493
|
+
color: '#000000',
|
|
366
494
|
};
|
|
367
495
|
});
|
|
368
496
|
return options;
|
|
369
497
|
}
|
|
370
498
|
checkFormat(assessmentData) {
|
|
371
499
|
const orgInTemplate = this.categoryData[0][5];
|
|
372
|
-
console.log("temp", orgInTemplate, this.organizationId);
|
|
373
500
|
//Completly blank excel sheet
|
|
374
501
|
if (assessmentData.length === 0 || orgInTemplate !== this.organizationId) {
|
|
375
|
-
this.errorMessage =
|
|
502
|
+
this.errorMessage =
|
|
503
|
+
'You have uploaded the wrong template. Please download the template again to proceed.';
|
|
376
504
|
this.isWrongFormat = true;
|
|
377
505
|
return true;
|
|
378
506
|
}
|
|
379
507
|
//Invalid Tempalte
|
|
380
508
|
try {
|
|
381
|
-
if (assessmentData[2][0] !==
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
this.errorMessage =
|
|
509
|
+
if (assessmentData[2][0] !== 'Assessment Name*' ||
|
|
510
|
+
assessmentData[3][0] !== 'Description' ||
|
|
511
|
+
assessmentData[4][0] !== 'Assessment Category*' ||
|
|
512
|
+
assessmentData[5][0] !== 'Question Type*') {
|
|
513
|
+
this.errorMessage =
|
|
514
|
+
'You have uploaded the wrong template. Please download the template again to proceed.';
|
|
386
515
|
this.isWrongFormat = true;
|
|
387
516
|
return true;
|
|
388
517
|
}
|
|
389
518
|
}
|
|
390
519
|
catch {
|
|
391
|
-
this.errorMessage =
|
|
520
|
+
this.errorMessage =
|
|
521
|
+
'You have uploaded the wrong template. Please download the template again to proceed.';
|
|
392
522
|
this.isWrongFormat = true;
|
|
393
523
|
return true;
|
|
394
524
|
}
|
|
395
525
|
//Check Assessment name
|
|
396
526
|
try {
|
|
397
|
-
if (!assessmentData[2][1] ||
|
|
527
|
+
if (!assessmentData[2][1] ||
|
|
528
|
+
assessmentData[2][1] === '' ||
|
|
529
|
+
assessmentData[2][1] === undefined) {
|
|
398
530
|
this.errorMessage = 'Enter a name for this Assessment.';
|
|
399
531
|
this.isWrongFormat = true;
|
|
400
532
|
return true;
|
|
@@ -407,7 +539,9 @@ export class ImportAnAssessmentComponent {
|
|
|
407
539
|
}
|
|
408
540
|
//category not selected
|
|
409
541
|
try {
|
|
410
|
-
if (!assessmentData[4][1] ||
|
|
542
|
+
if (!assessmentData[4][1] ||
|
|
543
|
+
assessmentData[4][1] === '' ||
|
|
544
|
+
assessmentData[4][1] === undefined) {
|
|
411
545
|
this.errorMessage = 'Select the Assessment Category.';
|
|
412
546
|
this.isWrongFormat = true;
|
|
413
547
|
return true;
|
|
@@ -421,13 +555,15 @@ export class ImportAnAssessmentComponent {
|
|
|
421
555
|
//Does not contains any questions
|
|
422
556
|
try {
|
|
423
557
|
if (assessmentData.slice(7)?.length === 0) {
|
|
424
|
-
this.errorMessage =
|
|
558
|
+
this.errorMessage =
|
|
559
|
+
'You have uploaded a blank template. Please add questions to this template and upload it again.';
|
|
425
560
|
this.isWrongFormat = true;
|
|
426
561
|
return true;
|
|
427
562
|
}
|
|
428
563
|
}
|
|
429
564
|
catch {
|
|
430
|
-
this.errorMessage =
|
|
565
|
+
this.errorMessage =
|
|
566
|
+
'You have uploaded a blank template. Please add questions to this template and upload it again.';
|
|
431
567
|
this.isWrongFormat = true;
|
|
432
568
|
return true;
|
|
433
569
|
}
|
|
@@ -439,7 +575,8 @@ export class ImportAnAssessmentComponent {
|
|
|
439
575
|
assessmentData[i][0] !== 'Single Textbox' &&
|
|
440
576
|
assessmentData[i][0] !== 'Date & Time' &&
|
|
441
577
|
assessmentData[i][0] !== 'File Upload') {
|
|
442
|
-
this.errorMessage =
|
|
578
|
+
this.errorMessage =
|
|
579
|
+
'You have uploaded the wrong template. Please download the template again to proceed.';
|
|
443
580
|
this.isWrongFormat = true;
|
|
444
581
|
return true;
|
|
445
582
|
}
|
|
@@ -457,28 +594,29 @@ export class ImportAnAssessmentComponent {
|
|
|
457
594
|
title: '',
|
|
458
595
|
description: '',
|
|
459
596
|
maxScore: 10,
|
|
460
|
-
segments: []
|
|
597
|
+
segments: [],
|
|
461
598
|
};
|
|
462
599
|
}
|
|
463
600
|
postAssessment(data) {
|
|
464
601
|
this.isShowLoader = true;
|
|
465
|
-
this.assessmentService
|
|
602
|
+
this.assessmentService
|
|
603
|
+
.createAssessment(this.convertedData.metadata)
|
|
604
|
+
.subscribe({
|
|
466
605
|
next: (response) => {
|
|
467
606
|
this.postAssessmentDetails(response._id, data.mode, data.assessmentDetails);
|
|
468
607
|
},
|
|
469
608
|
error: (err) => {
|
|
470
609
|
this.isShowLoader = false;
|
|
471
|
-
}
|
|
610
|
+
},
|
|
472
611
|
});
|
|
473
612
|
}
|
|
474
613
|
postAssessmentDetails(id, mode, assessmentDetails) {
|
|
475
614
|
this.isUploaded = false;
|
|
476
615
|
this.auth.previewPanel.next(false);
|
|
477
|
-
console.log('this.isUploaded', this.isUploaded);
|
|
478
616
|
const payload = {
|
|
479
617
|
question: assessmentDetails,
|
|
480
|
-
action:
|
|
481
|
-
state: mode
|
|
618
|
+
action: 'questions_save',
|
|
619
|
+
state: mode,
|
|
482
620
|
};
|
|
483
621
|
this.assessmentService.saveAssessmentDetails(id, payload).subscribe({
|
|
484
622
|
next: (response) => {
|
|
@@ -488,11 +626,10 @@ export class ImportAnAssessmentComponent {
|
|
|
488
626
|
},
|
|
489
627
|
error: (err) => {
|
|
490
628
|
this.isShowLoader = false;
|
|
491
|
-
}
|
|
629
|
+
},
|
|
492
630
|
});
|
|
493
631
|
}
|
|
494
632
|
smileyAction(id) {
|
|
495
|
-
console.log(id);
|
|
496
633
|
if (id === smileyActions.VIEW_ASSESSMENTS) {
|
|
497
634
|
this.disconnectRefresh.emit(false);
|
|
498
635
|
// TODO: Navigate to '/manage-assessment'
|
|
@@ -501,17 +638,17 @@ export class ImportAnAssessmentComponent {
|
|
|
501
638
|
url = 'http://' + window.location.host + '/manage-assessment';
|
|
502
639
|
}
|
|
503
640
|
else {
|
|
504
|
-
url =
|
|
641
|
+
url =
|
|
642
|
+
'https://' + window.location.host + '/assessment/manage-assessment';
|
|
505
643
|
}
|
|
506
|
-
console.log(url);
|
|
507
644
|
window.location.href = url;
|
|
508
645
|
}
|
|
509
646
|
else {
|
|
510
647
|
this.showSmiley = false;
|
|
511
648
|
this.auth.previewPanel.next(false);
|
|
512
|
-
const closeBtn = document.getElementById(
|
|
649
|
+
const closeBtn = document.getElementById('close-workflow-engine-btn');
|
|
513
650
|
if (closeBtn)
|
|
514
|
-
closeBtn.style.display =
|
|
651
|
+
closeBtn.style.display = 'block';
|
|
515
652
|
}
|
|
516
653
|
}
|
|
517
654
|
}
|
|
@@ -528,4 +665,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
528
665
|
}], disconnectRefresh: [{
|
|
529
666
|
type: Output
|
|
530
667
|
}] } });
|
|
531
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWFuLWFzc2Vzc21lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctYXNzZXNzbWVudC9pbXBvcnQtYW4tYXNzZXNzbWVudC9pbXBvcnQtYW4tYXNzZXNzbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1hc3Nlc3NtZW50L2ltcG9ydC1hbi1hc3Nlc3NtZW50L2ltcG9ydC1hbi1hc3Nlc3NtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFPN0IsTUFBTSxhQUFhLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLENBQUE7QUFRMUYsTUFBTSxPQUFPLDJCQUEyQjtJQXFDdEMsWUFDVSxJQUFpQixFQUNsQixpQkFBb0M7UUFEbkMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBckNuQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUd0QixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUV2QixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixpQkFBWSxHQUFH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QUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4SyxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFO1lBQ3hKLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUs7WUFDaFAsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDL0wsZUFBZSxFQUFFLEVBQUU7WUFDbkIsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUYsT0FBTyxFQUFFLENBQUM7b0JBQ1IsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsS0FBSyxFQUFFLENBQUM7b0JBQ1IsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFFBQVEsRUFBRSxDQUFDO29CQUNYLGVBQWUsRUFBRSxLQUFLO29CQUN0QixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ3hDLEtBQUssRUFBRSxTQUFTO2lCQUNqQixDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFXLEVBQUMsUUFBYSxFQUFFLEtBQVU7UUFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDL0IsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUMsYUFBYSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztZQUM5RyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN4SSxjQUFjLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUN2SyxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO1lBQ25KLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFD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ZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvYXNzZXNzbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3JlYXRlQXNzZXNzbWVudENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZENvbXBvbmVudHMvYXNzZXNzbWVudC1lZGl0b3IvY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyL2NyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi8uLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XHJcblxyXG50eXBlIEFPQSA9IGFueVtdW107XHJcbmNvbnN0IHNtaWxleUFjdGlvbnMgPSB7IElNUE9SVF9NT1JFOiBcIklNUE9SVF9NT1JFXCIsIFZJRVdfQVNTRVNTTUVOVFM6IFwiVklFV19BU1NFU1NNRU5UU1wiIH1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWltcG9ydC1hbi1hc3Nlc3NtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1wb3J0LWFuLWFzc2Vzc21lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ltcG9ydC1hbi1hc3Nlc3NtZW50LmNvbXBvbmVudC5sZXNzJywgJy4uLy4uL2Zvcm1zLmxlc3MnXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBJbXBvcnRBbkFzc2Vzc21lbnRDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0b3JDb250ITogQ3JlYXRlQXNzZXNzbWVudENvbnRhaW5lckNvbXBvbmVudDtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgaXNTaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gIGZpbGVOYW1lOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG4gIHVwbG9hZGVkRmlsZXM6IGFueSA9IFtdO1xyXG4gIGZpbGVSZXNwb25zZTogYW55ID0gW107XHJcbiAgZmlsZVZhbHVlOiBhbnk7XHJcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xyXG4gIGVycm9yTWVzc2FnZSA9IFwiaW52YWxpZCBmaWxlIGVycm9yXCJcclxuICBkb3dubG9hZFN0YXR1czogc3RyaW5nID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgZG93bmxvYWRQZXJjZW50ID0gMDtcclxuICBzbWlsZXlNZXNzYWdlQWN0aW9uID0gYFlvdSdyZSBBbGwgU2V0IWA7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHsgYnV0dG9uVGV4dDogJ0ltcG9ydCBNb3JlIEFzc2Vzc21lbnRzJywgY2xhc3M6ICd3aGl0ZS1idG4nLCBpZDogc21pbGV5QWN0aW9ucy5JTVBPUlRfTU9SRSB9LFxyXG4gICAgeyBidXR0b25UZXh0OiAnVmlldyBBc3Nlc3NtZW50cycsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogc21pbGV5QWN0aW9ucy5WSUVXX0FTU0VTU01FTlRTIH0sXHJcbiAgXTtcclxuICBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgYXNzZXNzbWVudERhdGEgITogYW55O1xyXG4gIHNoZWV0RGF0YSAhOiBhbnk7XHJcbiAgY29udmVydGVkRGF0YTogYW55O1xyXG4gIGlzVXBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYXRlZ29yeURhdGEgITogYW55O1xyXG5cclxuICBzZXRJc1VwbG9hZGVkKGlzVXBsb2FkZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNVcGxvYWRlZCA9IGlzVXBsb2FkZWQ7XHJcbiAgICB0aGlzLmF1dGgucHJldmlld1BhbmVsLm5leHQoaXNVcGxvYWRlZCk7XHJcbiAgICBpZiAoIWlzVXBsb2FkZWQpIHtcclxuICAgICAgY29uc3QgY2xvc2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNsb3NlLXdvcmtmbG93LWVuZ2luZS1idG5cIilcclxuICAgICAgaWYgKGNsb3NlQnRuKSBjbG9zZUJ0bi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgICB0aGlzLmNvbnZlcnRlZERhdGEgPSB7fTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoU2VydmljZSxcclxuICAgIHB1YmxpYyBhc3Nlc3NtZW50U2VydmljZTogQXNzZXNzbWVudFNlcnZpY2VcclxuICApIHsgXHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gIHRoaXMuYXV0aC5nZXRPcmdhbml6YXRpb25JZCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5hc3Nlc3NtZW50RGF0YSwgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlKCkge1xyXG4gICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BRElORyc7XHJcbiAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDA7XHJcbiAgICBjb25zdCBkb3dubG9hZERhdGUgPSBuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpLnNwbGl0KCcgJyk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IGBJbXBvcnQgYW4gQXNzZXNzbWVudC0ke2Rvd25sb2FkRGF0ZVsyXX0tJHtkb3dubG9hZERhdGVbMV19LSR7ZG93bmxvYWREYXRlWzNdfS54bHN4YDtcclxuXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRTZXJ2aWNlLmRvd25sb2FkVGVtcGxhdGUoKS5zdWJzY3JpYmUoXHJcbiAgICAgIHtcclxuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMuYXNzZXNzbWVudFNlcnZpY2UuZG93bkxvYWRGaWxlKGRhdGEsICdhcHBsaWNhdGlvbi94bHN4JywgZmlsZU5hbWUpO1xyXG4gICAgICAgICAgfSwgMTUwMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4geyB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ0RPV05MT0FERUQnOyB9XHJcbiAgICAgIH1cclxuXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlckJyb3dzZUZpbGUoKSB7XHJcbiAgICBjb25zdCBnZXRGaWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lhYS1maWxlLWlucHV0Jyk7XHJcbiAgICBpZiAoZ2V0RmlsZSkge1xyXG4gICAgICBnZXRGaWxlLmNsaWNrKCk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gIGhhbmRsZSB1cGxvYWQgZmlsZSBhcmVhXHJcbiAgdXBsb2FkRmlsZShldnQ6IGFueSkge1xyXG4gICAgY29uc3QgdGFyZ2V0OiBEYXRhVHJhbnNmZXIgPSBldnQudGFyZ2V0IGFzIERhdGFUcmFuc2ZlcjtcclxuICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1swXTtcclxuICAgICAgY29uc3Qgd3NuYW1lMTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1sxXTtcclxuICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgIGNvbnN0IHRlbXBEYXRhOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWUxXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHtcclxuICAgICAgICBoZWFkZXI6IDEsXHJcbiAgICAgIH0pIGFzIEFPQTtcclxuICAgICAgY29uc29sZS5sb2coXCJkYXRhXCIsdGhpcy5jYXRlZ29yeURhdGEpXHJcbiAgICAgIHRoaXMuc2hlZXREYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7XHJcbiAgICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICB9KSBhcyBBT0E7XHJcblxyXG4gICAgICB0aGlzLmdlbmVyYXRlQ2F0ZWdvcnlMaXN0KHRoaXMuY2F0ZWdvcnlEYXRhKTtcclxuXHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudERhdGEgPSB0aGlzLnNoZWV0RGF0YS5maWx0ZXIoKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiSW1wXCIsIHRoaXMuY2hlY2tGb3JtYXQodGhpcy5hc3Nlc3NtZW50RGF0YSkpXHJcbiAgICAgIGlmICghdGhpcy5jaGVja0Zvcm1hdCh0aGlzLmFzc2Vzc21lbnREYXRhKSkge1xyXG4gICAgICAgIGNvbnN0IGNsb3NlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjbG9zZS13b3JrZmxvdy1lbmdpbmUtYnRuXCIpO1xyXG4gICAgICAgICBpZiAoY2xvc2VCdG4pIGNsb3NlQnRuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvclBheWxvYWQodGhpcy5hc3Nlc3NtZW50RGF0YSk7XHJcbiAgICAgICAgdGhpcy5hdXRoLnByZXZpZXdQYW5lbC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuaXNVcGxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+e3RoaXMuZWRpdG9yQ29udC50cmlnZ2VyUHJldmlld1dpdGhWYWxpZGF0aW9uKCl9LDEwMClcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRhcmdldC5maWxlc1swXSk7XHJcbiAgfVxyXG5cclxuICBjYXRlZ29yeUxpc3QgITogYW55O1xyXG4gIGdlbmVyYXRlQ2F0ZWdvcnlMaXN0KGNhdGVnb3J5RGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjYXRMaXN0OiBhbnkgPSB7fVxyXG4gICAgaWYgKGNhdGVnb3J5RGF0YSkge1xyXG4gICAgICBjYXRlZ29yeURhdGEuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICBjYXRMaXN0W2VsZVswXV0gPSBlbGVbMV07XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0ID0gY2F0TGlzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhdGVnb3J5TmFtZXRvSWQoY2F0ZWdvcnlOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmNhdGVnb3J5TGlzdFtjYXRlZ29yeU5hbWVdKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNhdGVnb3J5TGlzdFtjYXRlZ29yeU5hbWVdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBnZW5lcmF0ZUVkaXRvclBheWxvYWQoZGF0YTogYW55KSB7XHJcbiAgICAvL2NoZWNrIGZvcm1hdFxyXG5cclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuXHJcbiAgICAgIG1ldGFkYXRhOlxyXG4gICAgICB7XHJcbiAgICAgICAgYXNzZXNzbWVudF9uYW1lOiBcIlwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxyXG4gICAgICAgIGFzc2Vzc21lbnRfdHlwZTogXCJjb21wbGlhbmNlXCIsXHJcbiAgICAgICAgY2F0ZWdvcnlfYXJyOiBbXHJcblxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXBwcm92YWxfd29ya2Zsb3dfYXJyOiB7XHJcbiAgICAgICAgICBcInRlc3RcIjogXCJ0ZXN0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFwcHJvdmFsX3JlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIHNvdXJjZV9wYWdlOiBcImNvbXBsaWFuY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBhc3Nlc3NtZW50RGF0YToge1xyXG4gICAgICAgIHZlcnNpb246IDIsXHJcbiAgICAgICAgcXVlc3Rpb25SYW5kb21pemU6IGZhbHNlLFxyXG4gICAgICAgIGFub255bW91c1Jlc3BvbnNlOiBmYWxzZSxcclxuICAgICAgICBoYXNXZWxjb21lOiBmYWxzZSxcclxuICAgICAgICBoYXNXZWxjb21lRGVzY3JpcHRpb246IGZhbHNlLFxyXG4gICAgICAgIHdlbGNvbWVUZXh0OiAnJyxcclxuICAgICAgICBoYXNXZWxjb21lSW1hZ2U6IGZhbHNlLFxyXG4gICAgICAgIHdlbGNvbWVJbWFnZTogJycsXHJcbiAgICAgICAgd2VsY29tZURlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICBoYXNUaGFua3M6IGZhbHNlLFxyXG4gICAgICAgIGhhc1RoYW5reW91SW1hZ2U6IGZhbHNlLFxyXG4gICAgICAgIHRoYW5reW91VGV4dDogJycsXHJcbiAgICAgICAgdGhhbmt5b3VJbWFnZTogJycsXHJcbiAgICAgICAgaGFzVGhhbmt5b3VEZXNjcmlwdGlvbjogZmFsc2UsXHJcbiAgICAgICAgdGhhbmt5b3VEZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgZWxlbWVudHM6IFtdLFxyXG4gICAgICAgIHBhZ2VEZXRhaWxzTGlzdDogW10sXHJcbiAgICAgICAgY3VzdG9tUmVzcG9uc2VTZXQ6IFtdLFxyXG4gICAgICAgIHNldHRpbmdzOiB0aGlzLnNldHRpbmdzLFxyXG4gICAgICAgIHJlc3BvbnNlU2VnbWVudDogdGhpcy5pbml0aWFsaXplRW1wdHlSZXNwb25zZVNlZ21lbnQoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb252ZXJ0ZWREYXRhID0gcGF5bG9hZDtcclxuICAgIHRoaXMuY29udmVydGVkRGF0YS5tZXRhZGF0YS5hc3Nlc3NtZW50X25hbWUgPSB0aGlzLmFzc2Vzc21lbnREYXRhWzJdWzFdO1xyXG4gICAgdGhpcy5jb252ZXJ0ZWREYXRhLm1ldGFkYXRhLmRlc2NyaXB0aW9uID0gdGhpcy5hc3Nlc3NtZW50RGF0YVszXVsxXTtcclxuICAgIC8vIHRoaXMuY29udmVydGVkRGF0YS5tZXRhZGF0YS5jYXRlZ29yeV9hcnJbMF0gPSB0aGlzLmFzc2Vzc21lbnREYXRhWzRdWzFdO1xyXG4gICAgdGhpcy5jb252ZXJ0ZWREYXRhLm1ldGFkYXRhLmNhdGVnb3J5X2FyciA9IFt0aGlzLmNhdGVnb3J5TmFtZXRvSWQodGhpcy5hc3Nlc3NtZW50RGF0YVs0XVsxXSldO1xyXG5cclxuICAgIC8vVE9ETzogY3JlYXRlIGEgZnVuY3Rpb24gdG8gY29udmVydCBmcm9tIGNhdGVnb3JpZXMgbmFtZXMgdG8gY2F0ZWdvcmllcyBpZC5cclxuICAgIC8vVE9ETzogY2hlY2sgdGhlIGFwaSBmb3Igc3ViLWZsb3cgbGlrZSBhc3Nlc3NtZW50LXNldHRpbmcuXHJcbiAgICAvLyB0aGlzLmNvbnZlcnRlZERhdGEubWV0YWRhdGEuY2F0ZWdvcnlfYXJyWzBdID0gXCI2MWNjMjdjNWIzZTg2NDJiMzMzZjM1OTFcIjtcclxuICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbnNMaXN0KGRhdGEuc2xpY2UoNiksIHBheWxvYWQuYXNzZXNzbWVudERhdGEuZWxlbWVudHMpXHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVF1ZXN0aW9uc0xpc3QocXVlc3Rpb25zTGlzdDogYW55LCBxdWVzdGlvbnNBcnJheTogYW55KSB7XHJcbiAgICBxdWVzdGlvbnNBcnJheSA9IFtdO1xyXG4gICAgaWYgKHF1ZXN0aW9uc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICBxdWVzdGlvbnNMaXN0LmZvckVhY2goKHF1ZXN0aW9uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInF1ZXN0aW9uIGxpc3RcIiwgcXVlc3Rpb24pXHJcbiAgICAgICAgcXVlc3Rpb25zQXJyYXkucHVzaCgpO1xyXG4gICAgICAgIHN3aXRjaCAocXVlc3Rpb25bMF0pIHtcclxuICAgICAgICAgIGNhc2UgJ1NpbmdsZSBUZXh0Ym94JzpcclxuICAgICAgICAgICAgcXVlc3Rpb25zQXJyYXkucHVzaCh0aGlzLmdlbmVyYXRlU2luZ2xlVGV4dGJveCgnc2luZ2xlLXRleHRib3gnLHF1ZXN0aW9uLCBpbmRleCkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnTXVsdGlwbGUgQ2hvaWNlJzpcclxuICAgICAgICAgICAgcXVlc3Rpb25zQXJyYXkucHVzaCh0aGlzLmdlbmVyYXRlTXVsdGlwbGVDaG9pY2UoJ211bHRpcGxlLWNob2ljZScscXVlc3Rpb24sIGluZGV4KSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdDaGVja2JveCc6XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc0FycmF5LnB1c2godGhpcy5nZW5lcmF0ZU11bHRpcGxlQ2hvaWNlKCdjaGVja2JveCcscXVlc3Rpb24sIGluZGV4KSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdEcm9wZG93bic6XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc0FycmF5LnB1c2godGhpcy5nZW5lcmF0ZU11bHRpcGxlQ2hvaWNlKCdkcm9wZG93bicscXVlc3Rpb24sIGluZGV4KSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdEYXRlICYgVGltZSc6XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc0FycmF5LnB1c2godGhpcy5nZW5lcmF0ZURhdGVUaW1lKCdkYXRlLXRpbWUnLHF1ZXN0aW9uLCBpbmRleCkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnRmlsZSBVcGxvYWQnOlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNBcnJheS5wdXNoKHRoaXMuZ2VuZXJhdGVGaWxlVXBsb2FkKHF1ZXN0aW9uLCBpbmRleCkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGRlZmF1bHRcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcInF1ZXN0aW9uc1wiLCBxdWVzdGlvbnNBcnJheSlcclxuICAgIHRoaXMuY29udmVydGVkRGF0YS5hc3Nlc3NtZW50RGF0YS5lbGVtZW50cyA9IHF1ZXN0aW9uc0FycmF5O1xyXG4gIH1cclxuICBjb2xNYXA6IGFueSA9IHtcclxuICAgIHR5cGU6IDAsXHJcbiAgICB0aXRsZTogMSxcclxuICAgIHNjb3JlOiAyLFxyXG4gICAgb3B0MTogMyxcclxuICAgIG9wdDI6IDQsXHJcbiAgICBvcHQzOiA1LFxyXG4gICAgb3B0NDogNixcclxuICAgIG9wdDU6IDcsXHJcbiAgICBvcHQ2OiA4LFxyXG4gICAgcmVxdWlyZWQ6IDksXHJcbiAgICBmYWlsZWQ6IDEwLFxyXG4gICAgZGVzY3JpcHRpb246IDExLFxyXG4gICAgcGxhY2Vob2xkZXI6IDEyLFxyXG4gICAgY29tbWVudDogMTMsXHJcbiAgICBvdGhlcjogMTQsXHJcbiAgICByYW5kb21pemU6IDE1LFxyXG4gICAgYWxpZ25tZW50OiAxNixcclxuICAgIHVzZXJhdHRhY2htZW50OiAxNyxcclxuICAgIHVzZXJjb21tZW50OiAxOFxyXG4gIH1cclxuICBnZW5lcmF0ZVNpbmdsZVRleHRib3godHlwZTpzdHJpbmcscXVlc3Rpb246IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdHlwZTogJ3NpbmdsZS10ZXh0Ym94JywgbmFtZTogYFF1ZXN0aW9uXyR7aW5kZXh9YCwgcGFnZTogMSxcclxuICAgICAgaGFzVmFsaWRhdGlvbjogZmFsc2UsIHZhbGlkYXRpb25UeXBlOiAnJywgaXNSZXF1aXJlZDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJlcXVpcmVkXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIGhhc0NoYXJhY3Rlckxlbmd0aDogZmFsc2UsIG1pbkNoYXJhY3Rlckxlbmd0aDogMCxcclxuICAgICAgbWF4Q2hhcmFjdGVyTGVuZ3RoOiAxMDAsIHRpdGxlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8udGl0bGVdPy50b1N0cmluZygpPy50cmltKCkgPz8gJycsXHJcbiAgICAgIGhhc0Rlc2NyaXB0aW9uOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uZGVzY3JpcHRpb25dPy50b1N0cmluZygpPy50cmltKCk/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZSwgZGVzY3JpcHRpb246IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5kZXNjcmlwdGlvbl0/LnRvU3RyaW5nKCk/LnRyaW0oKSA/PyAnJyxcclxuICAgICAgaGFzQ29tbWVudHM6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy51c2VyY29tbWVudF0/LnRvU3RyaW5nKCk/LnRyaW0oKT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlLCBjb21tZW50czogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmNvbW1lbnRdPy50b1N0cmluZygpPy50cmltKCksXHJcbiAgICAgIHJhbmRvbWl6ZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJhbmRvbWl6ZV0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLCBoYXNPdGhlcjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm90aGVyXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIG90aGVyVmFsdWU6ICdPdGhlcicsIGFsaWdubWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmFsaWdubWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLCByZXZlcnNlOiBmYWxzZSxcclxuICAgICAgaXNSZXNwb25kZW50QXR0YWNobWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnVzZXJhdHRhY2htZW50XSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIHVzZXJBdHRhY2hlZEZpbGVzOiBbXSwgaXNSZXNwb25kZW50Q29tbWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnVzZXJjb21tZW50XSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIHZpc2liaWxpdHlMb2dpYzogW10sXHJcbiAgICAgIG90aGVyQ29uZmlnOiB7IGNvbG9yOiBcIiMwMDAwMDBcIiwgaXNGYWlsZWQ6IGZhbHNlLCBzY29yZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnNjb3JlXSA/PyAxIH0sXHJcbiAgICAgIGNob2ljZXM6IFt7XHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHZhbHVlOiAxLFxyXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVkOiAwLFxyXG4gICAgICAgIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsXHJcbiAgICAgICAgaGVscGluZ0xhYmVsOiBcIlwiLFxyXG4gICAgICAgIGlzRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBzY29yZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnNjb3JlXSA/PyAxLFxyXG4gICAgICAgIGNvbG9yOiBcIiMwMDAwMDBcIlxyXG4gICAgICB9XVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlTXVsdGlwbGVDaG9pY2UodHlwZTpzdHJpbmcscXVlc3Rpb246IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJZbyBNYW5cIiwgcXVlc3Rpb24pXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiB0eXBlLCBuYW1lOiBgUXVlc3Rpb25fJHtpbmRleH1gLCBwYWdlOiAxLFxyXG4gICAgICBoYXNWYWxpZGF0aW9uOiBmYWxzZSwgdmFsaWRhdGlvblR5cGU6ICcnLCBpc1JlcXVpcmVkOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8ucmVxdWlyZWRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgaGFzQ2hhcmFjdGVyTGVuZ3RoOiBmYWxzZSwgbWluQ2hhcmFjdGVyTGVuZ3RoOiAwLCBtYXhDaGFyYWN0ZXJMZW5ndGg6IDEwMCwgdGl0bGU6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy50aXRsZV0/LnRvU3RyaW5nKCk/LnRyaW0oKSA/PyAnJyxcclxuICAgICAgaGFzRGVzY3JpcHRpb246IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5kZXNjcmlwdGlvbl0/LnRvU3RyaW5nKCk/LnRyaW0oKT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlLCBkZXNjcmlwdGlvbjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmRlc2NyaXB0aW9uXT8udG9TdHJpbmcoKS50cmltKCkgPz8gJycsXHJcbiAgICAgIGhhc0NvbW1lbnRzOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uY29tbWVudF0/LnRvU3RyaW5nKCk/LnRyaW0oKT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlLCBjb21tZW50czogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmNvbW1lbnRdPy50b1N0cmluZygpLnRyaW0oKSxcclxuICAgICAgcmFuZG9taXplOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8ucmFuZG9taXplXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIGhhc090aGVyOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8ub3RoZXJdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSwgb3RoZXJWYWx1ZTogJ090aGVyJywgYWxpZ25tZW50OiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uYWxpZ25tZW50XSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIHJldmVyc2U6IGZhbHNlLFxyXG4gICAgICBpc1Jlc3BvbmRlbnRBdHRhY2htZW50OiBxdWVzdGlvblt0aGlzLmNvbE1hcD8udXNlcmF0dGFjaG1lbnRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSwgdXNlckF0dGFjaGVkRmlsZXM6IFtdLFxyXG4gICAgICB2aXNpYmlsaXR5TG9naWM6IFtdLCBpc1Jlc3BvbmRlbnRDb21tZW50OiBxdWVzdGlvblt0aGlzLmNvbE1hcD8udXNlcmNvbW1lbnRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgb3RoZXJDb25maWc6IHsgY29sb3I6IFwiIzAwMDAwMFwiLCBpc0ZhaWxlZDogZmFsc2UsIHNjb3JlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uc2NvcmVdID8/IDEgfSxcclxuICAgICAgY2hvaWNlczogdGhpcy5nZW5lcmF0ZUNob2ljZXMocXVlc3Rpb24pXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVEYXRlVGltZSh0eXBlOnN0cmluZyxxdWVzdGlvbjogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiB0eXBlLCBuYW1lOiBgUXVlc3Rpb25fJHtpbmRleH1gLCBwYWdlOiAxLFxyXG4gICAgICBoYXNWYWxpZGF0aW9uOiBmYWxzZSwgdmFsaWRhdGlvblR5cGU6ICcnLCBpc1JlcXVpcmVkOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8ucmVxdWlyZWRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgaGFzQ2hhcmFjdGVyTGVuZ3RoOiBmYWxzZSwgbWluQ2hhcmFjdGVyTGVuZ3RoOiAwLCBtYXhDaGFyYWN0ZXJMZW5ndGg6IDEwMCwgdGl0bGU6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy50aXRsZV0/LnRvU3RyaW5nKCk/LnRyaW0oKSA/PyAnJyxcclxuICAgICAgaGFzRGVzY3JpcHRpb246IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5kZXNjcmlwdGlvbl0/LnRvU3RyaW5nKCk/LnRyaW0oKT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlLCBkZXNjcmlwdGlvbjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmRlc2NyaXB0aW9uXT8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnLFxyXG4gICAgICBoYXNDb21tZW50czogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmNvbW1lbnRdPy50b1N0cmluZygpPy50cmltKCk/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZSwgY29tbWVudHM6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5jb21tZW50XT8udG9TdHJpbmcoKS50cmltKCksXHJcbiAgICAgIHJhbmRvbWl6ZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJhbmRvbWl6ZV0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLCBoYXNPdGhlcjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm90aGVyXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIG90aGVyVmFsdWU6ICdPdGhlcicsIGFsaWdubWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmFsaWdubWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLCByZXZlcnNlOiBmYWxzZSxcclxuICAgICAgaXNSZXNwb25kZW50QXR0YWNobWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnVzZXJhdHRhY2htZW50XSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIHVzZXJBdHRhY2hlZEZpbGVzOiBbXSxcclxuICAgICAgdmlzaWJpbGl0eUxvZ2ljOiBbXSwgaXNSZXNwb25kZW50Q29tbWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnVzZXJjb21tZW50XSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIG90aGVyQ29uZmlnOiB7IGNvbG9yOiBcIiMwMDAwMDBcIiwgaXNGYWlsZWQ6IGZhbHNlLCBzY29yZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnNjb3JlXSA/PyAxIH0sXHJcbiAgICAgIGNob2ljZXM6IFt7XHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHZhbHVlOiAxLFxyXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVkOiAwLFxyXG4gICAgICAgIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsXHJcbiAgICAgICAgaGVscGluZ0xhYmVsOiBcIlwiLFxyXG4gICAgICAgIGlzRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBzY29yZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnNjb3JlXSA/PyAxLFxyXG4gICAgICAgIGNvbG9yOiBcIiMwMDAwMDBcIlxyXG4gICAgICB9XSxcclxuICAgICAgaGFzRGF0ZTogdHJ1ZSxcclxuICAgICAgaGFzVGltZTogZmFsc2UsXHJcbiAgICAgIGRhdGVGb3JtYXQ6IFwiREQvTU0vWVlZWVwiLFxyXG4gICAgICB0aW1lRm9ybWF0OiAyNCxcclxuICAgICAgZGF0ZToge1xyXG4gICAgICAgIHRpdGxlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8ucGxhY2Vob2xkZXJdID8/ICdTZWxlY3QgRGF0ZScsXHJcbiAgICAgICAgdmFsdWU6IFwiXCJcclxuICAgICAgfSxcclxuICAgICAgdGltZToge1xyXG4gICAgICAgIHRpdGxlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8ucGxhY2Vob2xkZXJdID8/ICdTZWxlY3QgVGltZScsXHJcbiAgICAgICAgdmFsdWU6IFwiXCJcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdlbmVyYXRlRmlsZVVwbG9hZChxdWVzdGlvbjogYW55LCBpbmRleDogYW55KSB7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdHlwZTogJ2ZpbGUtdXBsb2FkJywgbmFtZTogYFF1ZXN0aW9uXyR7aW5kZXh9YCwgcGFnZTogMSxcclxuICAgICAgaGFzVmFsaWRhdGlvbjogZmFsc2UsIHZhbGlkYXRpb25UeXBlOiAnJywgaXNSZXF1aXJlZDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJlcXVpcmVkXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIGhhc0NoYXJhY3Rlckxlbmd0aDogZmFsc2UsIG1pbkNoYXJhY3Rlckxlbmd0aDogMCxcclxuICAgICAgbWF4Q2hhcmFjdGVyTGVuZ3RoOiAxMDAsIHRpdGxlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8udGl0bGVdPy50b1N0cmluZygpPy50cmltKCkgPz8gJycsXHJcbiAgICAgIGhhc0Rlc2NyaXB0aW9uOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uZGVzY3JpcHRpb25dPy50b1N0cmluZygpPy50cmltKCk/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZSwgZGVzY3JpcHRpb246IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5kZXNjcmlwdGlvbl0/LnRvU3RyaW5nKCk/LnRyaW0oKSA/PyAnJyxcclxuICAgICAgaGFzQ29tbWVudHM6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy51c2VyY29tbWVudF0/LnRvU3RyaW5nKCk/LnRyaW0oKT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlLCBjb21tZW50czogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmNvbW1lbnRdPy50b1N0cmluZygpPy50cmltKCksXHJcbiAgICAgIHJhbmRvbWl6ZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJhbmRvbWl6ZV0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLCBoYXNPdGhlcjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm90aGVyXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIG90aGVyVmFsdWU6ICdPdGhlcicsIGFsaWdubWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmFsaWdubWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLCByZXZlcnNlOiBmYWxzZSxcclxuICAgICAgaXNSZXNwb25kZW50QXR0YWNobWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnVzZXJhdHRhY2htZW50XSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsIHVzZXJBdHRhY2hlZEZpbGVzOiBbXSxcclxuICAgICAgdmlzaWJpbGl0eUxvZ2ljOiBbXSwgaXNSZXNwb25kZW50Q29tbWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnVzZXJjb21tZW50XSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIG90aGVyQ29uZmlnOiB7IGNvbG9yOiBcIiMwMDAwMDBcIiwgaXNGYWlsZWQ6IGZhbHNlLCBzY29yZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnNjb3JlXSA/PyAxIH0sXHJcbiAgICAgIGNob2ljZXM6IFt7XHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHZhbHVlOiAxLFxyXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVkOiAwLFxyXG4gICAgICAgIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsXHJcbiAgICAgICAgaGVscGluZ0xhYmVsOiBcIlwiLFxyXG4gICAgICAgIGlzRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBzY29yZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnNjb3JlXSA/PyAxLFxyXG4gICAgICAgIGNvbG9yOiBcIiMwMDAwMDBcIlxyXG4gICAgICB9XSxcclxuICAgICAgYWxsb3dlZEZpbGVUeXBlczoge1xyXG4gICAgICAgIHBkZjogdHJ1ZSxcclxuICAgICAgICBkb2M6IHRydWUsXHJcbiAgICAgICAgcG5nOiB0cnVlLFxyXG4gICAgICAgIGpwZzogdHJ1ZSxcclxuICAgICAgICBnaWY6IHRydWVcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUNob2ljZXMocXVlc3Rpb246IGFueSkge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IFtxdWVzdGlvblt0aGlzLmNvbE1hcD8ub3B0MV0sIHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5vcHQyXSwgcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm9wdDNdLCBxdWVzdGlvblt0aGlzLmNvbE1hcD8ub3B0NF0sIHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5vcHQ1XSwgcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm9wdDZdXS5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUpO1xyXG4gICAgb3B0aW9ucy5mb3JFYWNoKChlbGU6YW55KSA9PntcclxuICAgICAgaWYoZWxlKXtcclxuICAgICAgICBlbGUudG9TdHJpbmcoKT8udHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgaWYgKG9wdGlvbnM/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBvcHRpb25zLnB1c2goJycpXHJcbiAgICB9XHJcbiAgICBjb25zdCBvcHRpb25NYXA6IGFueSA9IHtcclxuICAgICAgJ09wdGlvbiAxJzogMyxcclxuICAgICAgJ09wdGlvbiAyJzogNCxcclxuICAgICAgJ09wdGlvbiAzJzogNSxcclxuICAgICAgJ09wdGlvbiA0JzogNixcclxuICAgICAgJ09wdGlvbiA1JzogNyxcclxuICAgICAgJ09wdGlvbiA2JzogOCxcclxuICAgIH1cclxuICAgIG9wdGlvbnMuZm9yRWFjaCgoY2hvaWNlOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgb3B0aW9uc1tpbmRleF0gPSB7XHJcbiAgICAgICAgdGl0bGU6IChjaG9pY2UgJiYgdHlwZW9mIChjaG9pY2UpID09ICdzdHJpbmcnKT8gY2hvaWNlIDogY2hvaWNlLnRvU3RyaW5nKCkgPz8gJycsXHJcbiAgICAgICAgdmFsdWU6IDEsXHJcbiAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgcmVxdWlyZWQ6IDAsXHJcbiAgICAgICAgaGFzSGVscGluZ0xhYmVsOiBmYWxzZSxcclxuICAgICAgICBoZWxwaW5nTGFiZWw6IFwiXCIsXHJcbiAgICAgICAgaXNGYWlsZWQ6IChjaG9pY2U/LnRvU3RyaW5nKCk/LnRyaW0oKSA9PSBxdWVzdGlvbltvcHRpb25NYXBbcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmZhaWxlZF1dXSkgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgc2NvcmU6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5zY29yZV0gPz8gMSxcclxuICAgICAgICBjb2xvcjogXCIjMDAwMDAwXCJcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXR0aW5nczogYW55ID0ge1xyXG4gICAgYXNzZXNzbWVudE1vZGU6IGZhbHNlLFxyXG4gICAgZGVmYXVsdFNjb3JlOiAxLFxyXG4gICAgbmVnYXRpdmVTY29yZUNyaXRlcmlhOiAnRkFJTEVEJyxcclxuICAgIG5lZ2F0aXZlU2NvcmU6IDAsXHJcbiAgICB3ZWlnaHRhZ2VFbmFibGVkOiBmYWxzZSxcclxuICAgIHNldHRpbmdzRW5hYmxlZDogZmFsc2VcclxuICB9XHJcblxyXG4gIGNoZWNrRm9ybWF0KGFzc2Vzc21lbnREYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yZ0luVGVtcGxhdGUgPSAgdGhpcy5jYXRlZ29yeURhdGFbMF1bNV07XHJcbiAgIGNvbnNvbGUubG9nKFwidGVtcFwiLG9yZ0luVGVtcGxhdGUsdGhpcy5vcmdhbml6YXRpb25JZClcclxuICAgIC8vQ29tcGxldGx5IGJsYW5rIGV4Y2VsIHNoZWV0XHJcbiAgICBpZiAoYXNzZXNzbWVudERhdGEubGVuZ3RoID09PSAwIHx8IG9yZ0luVGVtcGxhdGUgIT09IHRoaXMub3JnYW5pemF0aW9uSWQpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnWW91IGhhdmUgdXBsb2FkZWQgdGhlIHdyb25nIHRlbXBsYXRlLiBQbGVhc2UgZG93bmxvYWQgdGhlIHRlbXBsYXRlIGFnYWluIHRvIHByb2NlZWQuJztcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vSW52YWxpZCBUZW1wYWx0ZVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGFzc2Vzc21lbnREYXRhWzJdWzBdICE9PSBcIkFzc2Vzc21lbnQgTmFtZVxcKlwiXHJcbiAgICAgICAgfHwgYXNzZXNzbWVudERhdGFbM11bMF0gIT09IFwiRGVzY3JpcHRpb25cIlxyXG4gICAgICAgIHx8IGFzc2Vzc21lbnREYXRhWzRdWzBdICE9PSBcIkFzc2Vzc21lbnQgQ2F0ZWdvcnlcXCpcIlxyXG4gICAgICAgIHx8IGFzc2Vzc21lbnREYXRhWzVdWzBdICE9PSBcIlF1ZXN0aW9uIFR5cGVcXCpcIlxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdZb3UgaGF2ZSB1cGxvYWRlZCB0aGUgd3JvbmcgdGVtcGxhdGUuIFBsZWFzZSBkb3dubG9hZCB0aGUgdGVtcGxhdGUgYWdhaW4gdG8gcHJvY2VlZC4nO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdZb3UgaGF2ZSB1cGxvYWRlZCB0aGUgd3JvbmcgdGVtcGxhdGUuIFBsZWFzZSBkb3dubG9hZCB0aGUgdGVtcGxhdGUgYWdhaW4gdG8gcHJvY2VlZC4nO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvL0NoZWNrIEFzc2Vzc21lbnQgbmFtZVxyXG4gICAgdHJ5e1xyXG4gICAgICBpZiAoIWFzc2Vzc21lbnREYXRhWzJdWzFdIHx8IGFzc2Vzc21lbnREYXRhWzJdWzFdID09PSBcIlwiIHx8IGFzc2Vzc21lbnREYXRhWzJdWzFdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdFbnRlciBhIG5hbWUgZm9yIHRoaXMgQXNzZXNzbWVudC4nO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1jYXRjaHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRW50ZXIgYSBuYW1lIGZvciB0aGlzIEFzc2Vzc21lbnQuJztcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy9jYXRlZ29yeSBub3Qgc2VsZWN0ZWRcclxuICAgdHJ5e1xyXG4gICAgaWYgKCFhc3Nlc3NtZW50RGF0YVs0XVsxXSB8fCBhc3Nlc3NtZW50RGF0YVs0XVsxXSA9PT0gXCJcIiB8fCBhc3Nlc3NtZW50RGF0YVs0XVsxXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1NlbGVjdCB0aGUgQXNzZXNzbWVudCBDYXRlZ29yeS4nO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgfWNhdGNoe1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnU2VsZWN0IHRoZSBBc3Nlc3NtZW50IENhdGVnb3J5Lic7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgIH1cclxuXHJcbiAgICAvL0RvZXMgbm90IGNvbnRhaW5zIGFueSBxdWVzdGlvbnNcclxuICAgIHRyeXtcclxuICAgICAgaWYgKGFzc2Vzc21lbnREYXRhLnNsaWNlKDcpPy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIHF1ZXN0aW9ucyB0byB0aGlzIHRlbXBsYXRlIGFuZCB1cGxvYWQgaXQgYWdhaW4uJztcclxuICAgICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9Y2F0Y2h7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1lvdSBoYXZlIHVwbG9hZGVkIGEgYmxhbmsgdGVtcGxhdGUuIFBsZWFzZSBhZGQgcXVlc3Rpb25zIHRvIHRoaXMgdGVtcGxhdGUgYW5kIHVwbG9hZCBpdCBhZ2Fpbi4nO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vaGFuZGxlIHR5cGUgb2YgcXVlc3Rpb24gYW5kIG9wdGlvbnMgY291bnRcclxuICAgIGZvciAobGV0IGkgPSA3OyBpIDw9IGFzc2Vzc21lbnREYXRhLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICBpZiAoYXNzZXNzbWVudERhdGFbaV1bMF0gIT09ICdNdWx0aXBsZSBDaG9pY2UnICYmXHJcbiAgICAgICAgYXNzZXNzbWVudERhdGFbaV1bMF0gIT09ICdDaGVja2JveCcgJiZcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YVtpXVswXSAhPT0gJ0Ryb3Bkb3duJyAmJlxyXG4gICAgICAgIGFzc2Vzc21lbnREYXRhW2ldWzBdICE9PSAnU2luZ2xlIFRleHRib3gnICYmXHJcbiAgICAgICAgYXNzZXNzbWVudERhdGFbaV1bMF0gIT09ICdEYXRlICYgVGltZScgJiZcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YVtpXVswXSAhPT0gJ0ZpbGUgVXBsb2FkJ1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdZb3UgaGF2ZSB1cGxvYWRlZCB0aGUgd3JvbmcgdGVtcGxhdGUuIFBsZWFzZSBkb3dubG9hZCB0aGUgdGVtcGxhdGUgYWdhaW4gdG8gcHJvY2VlZC4nO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgKGFzc2Vzc21lbnREYXRhW2ldWzFdID09PSAnJykge1xyXG4gICAgICAvLyAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1lvdSBoYXZlIHVwbG9hZGVkIHRoZSB3cm9uZyB0ZW1wbGF0ZS4gUGxlYXNlIGRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBhZ2FpbiB0byBwcm9jZWVkLic7XHJcbiAgICAgIC8vICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUVtcHR5UmVzcG9uc2VTZWdtZW50KCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgIG1heFNjb3JlOiAxMCxcclxuICAgICAgc2VnbWVudHM6IFtdXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3N0QXNzZXNzbWVudChkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuaXNTaG93TG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuYXNzZXNzbWVudFNlcnZpY2UuY3JlYXRlQXNzZXNzbWVudCh0aGlzLmNvbnZlcnRlZERhdGEubWV0YWRhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb3N0QXNzZXNzbWVudERldGFpbHMocmVzcG9uc2UuX2lkLCBkYXRhLm1vZGUsIGRhdGEuYXNzZXNzbWVudERldGFpbHMpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHBvc3RBc3Nlc3NtZW50RGV0YWlscyhpZDogYW55LCBtb2RlOiBhbnksIGFzc2Vzc21lbnREZXRhaWxzOiBhbnkpIHtcclxuXHJcbiAgICB0aGlzLmlzVXBsb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0aC5wcmV2aWV3UGFuZWwubmV4dChmYWxzZSk7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5pc1VwbG9hZGVkJywgdGhpcy5pc1VwbG9hZGVkKVxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgcXVlc3Rpb246IGFzc2Vzc21lbnREZXRhaWxzLFxyXG4gICAgICBhY3Rpb246IFwicXVlc3Rpb25zX3NhdmVcIixcclxuICAgICAgc3RhdGU6IG1vZGVcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRTZXJ2aWNlLnNhdmVBc3Nlc3NtZW50RGV0YWlscyhpZCwgcGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnREYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5pc1Nob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNtaWxleUFjdGlvbihpZDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhpZClcclxuICAgIGlmIChpZCA9PT0gc21pbGV5QWN0aW9ucy5WSUVXX0FTU0VTU01FTlRTKSB7XHJcbiAgICAgIHRoaXMuZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSk7XHJcbiAgICAgIC8vIFRPRE86IE5hdmlnYXRlIHRvICcvbWFuYWdlLWFzc2Vzc21lbnQnXHJcbiAgICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL21hbmFnZS1hc3Nlc3NtZW50JztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL2Fzc2Vzc21lbnQvbWFuYWdlLWFzc2Vzc21lbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKHVybCk7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmF1dGgucHJldmlld1BhbmVsLm5leHQoZmFsc2UpO1xyXG4gICAgICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2xvc2Utd29ya2Zsb3ctZW5naW5lLWJ0blwiKTtcclxuICAgICAgaWYgKGNsb3NlQnRuKSBjbG9zZUJ0bi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpbXBvcnQtYW4tYXNzZXNzbWVudFwiIFthdHRyLmlkXT1cIidzY3JvbGxSZWZlcmVuY2UnXCI+XHJcbiAgPCEtLSBtYWluIGNvbnRhaW5lciBzdGFydHMgaGVyZSAtLT5cclxuICA8ZGl2IGNsYXNzPVwiaW1wb3J0LWFuLWFzc2Vzc21lbnQtYm9keVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImltcG9ydC1hbi1hc3Nlc3NtZW50LWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9zcHJlYWRzaGVldC1tdWx0aXBsZS1jYXRlZ29yeS5zdmdcIlxyXG4gICAgICAgICAgYWx0PVwiXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8aDQ+WW91IGNhbiBpbXBvcnQgYW4gYXNzZXNzbWVudCBpbiBqdXN0IHR3byBlYXN5IHN0ZXBzOjwvaDQ+XHJcbiAgICAgIDx1bCBjbGFzcz1cImxpc3RcIj5cclxuICAgICAgICA8bGk+RG93bmxvYWQgdGhlIHRlbXBsYXRlIGFuZCBmaWxsIGluIHRoZSBkZXRhaWxzLjwvbGk+XHJcbiAgICAgICAgPGxpPlVwbG9hZCB0aGUgLnhsc3ggZmlsZSBhbmQgeW914oCZcmUgZ29vZCB0byBnbyE8L2xpPlxyXG4gICAgICA8L3VsPlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImRvd25sb2FkXCIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ05PVF9ET1dOTE9BRElORydcIiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWI7PC9pPiBEb3dubG9hZCBUZW1wbGF0ZTwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURJTkcnXCI+XHJcbiAgICAgICAgRG93bmxvYWQgaW4gUHJvZ3Jlc3NcclxuICAgICAgICA8YXBwLWxpbmUtbG9hZGVyIFtsb2FkZXJIZWlnaHRdPVwiJzInXCI+PC9hcHAtbGluZS1sb2FkZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZG93bmxvYWRTdGF0dXMgPT09ICdET1dOTE9BREVEJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFjOzwvaT5Eb3dubG9hZCBDb21wbGV0ZTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1hZ2FpblwiPlxyXG4gICAgICAgICAgSXMgdGhlIGZpbGUgbm90IGRvd25sb2FkZWQ/XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIj5SZXRyeSBEb3dubG9hZDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1dyb25nRm9ybWF0XCI+e3tlcnJvck1lc3NhZ2V9fTwvcD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImlzU2hvd0xvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcblxyXG48aW5wdXQgdHlwZT1cImZpbGVcIiBbKG5nTW9kZWwpXT1cImZpbGVWYWx1ZVwiIGlkPVwiaWFhLWZpbGUtaW5wdXRcIiBhY2NlcHQ9XCIueGxzeFwiIGNsYXNzPVwiaGlkZGVuLWlucHV0XCIgb25jbGljaz1cInRoaXMudmFsdWUgPSBudWxsXCJcclxuICAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiIC8+XHJcblxyXG48YXBwLXNtaWxleS1kaWFsb2ctaW5saW5lICpuZ0lmPVwic2hvd1NtaWxleVwiIFttZXNzYWdlXT1cInNtaWxleU1lc3NhZ2VBY3Rpb25cIiBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcclxuICAoYWN0aW9uKT1cInNtaWxleUFjdGlvbigkZXZlbnQpXCIgKGNsb3NlU21pbGV5KT1cImNsb3NlU21pbGV5KCRldmVudClcIj48L2FwcC1zbWlsZXktZGlhbG9nLWlubGluZT5cclxuXHJcbjxkaXYgY2xhc3M9XCJpbXBvcnRcIiAqbmdJZj1cImlzVXBsb2FkZWRcIj5cclxuICA8YXBwLWNyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lciAjZWRpdG9yIFtvcGVuUG9ydGFsXT1cIidBU1NFU1NNRU5UX0lNUE9SVCdcIiAocG9zdEFzc2Vzc21lbnQpPVwicG9zdEFzc2Vzc21lbnQoJGV2ZW50KVwiIChzZXRJc1VwbG9hZGVkKT1cInNldElzVXBsb2FkZWQoJGV2ZW50KVwiXHJcbiAgICBbYXNzZXNzbWVudEpTT05dPVwiY29udmVydGVkRGF0YVwiPlxyXG4gIDwvYXBwLWNyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
668
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWFuLWFzc2Vzc21lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctYXNzZXNzbWVudC9pbXBvcnQtYW4tYXNzZXNzbWVudC9pbXBvcnQtYW4tYXNzZXNzbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1hc3Nlc3NtZW50L2ltcG9ydC1hbi1hc3Nlc3NtZW50L2ltcG9ydC1hbi1hc3Nlc3NtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFPN0IsTUFBTSxhQUFhLEdBQUc7SUFDcEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsZ0JBQWdCLEVBQUUsa0JBQWtCO0NBQ3JDLENBQUM7QUFPRixNQUFNLE9BQU8sMkJBQTJCO0lBOEN0QyxZQUNVLElBQWlCLEVBQ2xCLGlCQUFvQztRQURuQyxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2xCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUE3Q25DLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBR3RCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBRXZCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLGlCQUFZLEdB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LENBQUMsUUFBUSxDQUFDLElBQUksR0FBRywrQkFBK0IsQ0FBQzthQUN2RTtZQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUN0RSxJQUFJLFFBQVE7Z0JBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQzs7d0hBdHNCVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiwyUENsQnhDLHF6RUE4Q0E7MkZENUJhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSwwQkFBMEI7a0lBTXBDLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUU1QixhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd29ya2Zsb3ctc2VydmljZXMvYXNzZXNzbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3JlYXRlQXNzZXNzbWVudENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZENvbXBvbmVudHMvYXNzZXNzbWVudC1lZGl0b3IvY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyL2NyZWF0ZS1hc3Nlc3NtZW50LWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi8uLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XHJcblxyXG50eXBlIEFPQSA9IGFueVtdW107XHJcbmNvbnN0IHNtaWxleUFjdGlvbnMgPSB7XHJcbiAgSU1QT1JUX01PUkU6ICdJTVBPUlRfTU9SRScsXHJcbiAgVklFV19BU1NFU1NNRU5UUzogJ1ZJRVdfQVNTRVNTTUVOVFMnLFxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtaW1wb3J0LWFuLWFzc2Vzc21lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtYW4tYXNzZXNzbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWFuLWFzc2Vzc21lbnQuY29tcG9uZW50Lmxlc3MnLCAnLi4vLi4vZm9ybXMubGVzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1wb3J0QW5Bc3Nlc3NtZW50Q29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBlZGl0b3JDb250ITogQ3JlYXRlQXNzZXNzbWVudENvbnRhaW5lckNvbXBvbmVudDtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgaXNTaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gIGZpbGVOYW1lOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG4gIHVwbG9hZGVkRmlsZXM6IGFueSA9IFtdO1xyXG4gIGZpbGVSZXNwb25zZTogYW55ID0gW107XHJcbiAgZmlsZVZhbHVlOiBhbnk7XHJcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xyXG4gIGVycm9yTWVzc2FnZSA9ICdpbnZhbGlkIGZpbGUgZXJyb3InO1xyXG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICBkb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gIHNtaWxleU1lc3NhZ2VBY3Rpb24gPSBgWW91J3JlIEFsbCBTZXQhYDtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAge1xyXG4gICAgICBidXR0b25UZXh0OiAnSW1wb3J0IE1vcmUgQXNzZXNzbWVudHMnLFxyXG4gICAgICBjbGFzczogJ3doaXRlLWJ0bicsXHJcbiAgICAgIGlkOiBzbWlsZXlBY3Rpb25zLklNUE9SVF9NT1JFLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgYnV0dG9uVGV4dDogJ1ZpZXcgQXNzZXNzbWVudHMnLFxyXG4gICAgICBjbGFzczogJ2JsdWUtYnRuJyxcclxuICAgICAgaWQ6IHNtaWxleUFjdGlvbnMuVklFV19BU1NFU1NNRU5UUyxcclxuICAgIH0sXHJcbiAgXTtcclxuICBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgYXNzZXNzbWVudERhdGEhOiBhbnk7XHJcbiAgc2hlZXREYXRhITogYW55O1xyXG4gIGNvbnZlcnRlZERhdGE6IGFueTtcclxuICBpc1VwbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2F0ZWdvcnlEYXRhITogYW55O1xyXG5cclxuICBzZXRJc1VwbG9hZGVkKGlzVXBsb2FkZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNVcGxvYWRlZCA9IGlzVXBsb2FkZWQ7XHJcbiAgICB0aGlzLmF1dGgucHJldmlld1BhbmVsLm5leHQoaXNVcGxvYWRlZCk7XHJcbiAgICBpZiAoIWlzVXBsb2FkZWQpIHtcclxuICAgICAgY29uc3QgY2xvc2VCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xvc2Utd29ya2Zsb3ctZW5naW5lLWJ0bicpO1xyXG4gICAgICBpZiAoY2xvc2VCdG4pIGNsb3NlQnRuLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICB0aGlzLmNvbnZlcnRlZERhdGEgPSB7fTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoU2VydmljZSxcclxuICAgIHB1YmxpYyBhc3Nlc3NtZW50U2VydmljZTogQXNzZXNzbWVudFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGguZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlU21pbGV5KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQoeyBldnQ6IHRoaXMuYXNzZXNzbWVudERhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgZG93bmxvYWREYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKS5zcGxpdCgnICcpO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgSW1wb3J0IGFuIEFzc2Vzc21lbnQtJHtkb3dubG9hZERhdGVbMl19LSR7ZG93bmxvYWREYXRlWzFdfS0ke2Rvd25sb2FkRGF0ZVszXX0ueGxzeGA7XHJcblxyXG4gICAgdGhpcy5hc3Nlc3NtZW50U2VydmljZS5kb3dubG9hZFRlbXBsYXRlKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMuYXNzZXNzbWVudFNlcnZpY2UuZG93bkxvYWRGaWxlKFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24veGxzeCcsXHJcbiAgICAgICAgICAgIGZpbGVOYW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sIDE1MDApO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURFRCc7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJCcm93c2VGaWxlKCkge1xyXG4gICAgY29uc3QgZ2V0RmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpYWEtZmlsZS1pbnB1dCcpO1xyXG4gICAgaWYgKGdldEZpbGUpIHtcclxuICAgICAgZ2V0RmlsZS5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gIGhhbmRsZSB1cGxvYWQgZmlsZSBhcmVhXHJcbiAgdXBsb2FkRmlsZShldnQ6IGFueSkge1xyXG4gICAgY29uc3QgdGFyZ2V0OiBEYXRhVHJhbnNmZXIgPSBldnQudGFyZ2V0IGFzIERhdGFUcmFuc2ZlcjtcclxuICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1swXTtcclxuICAgICAgY29uc3Qgd3NuYW1lMTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1sxXTtcclxuICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgIGNvbnN0IHRlbXBEYXRhOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWUxXTtcclxuICAgICAgdGhpcy5jYXRlZ29yeURhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHtcclxuICAgICAgICBoZWFkZXI6IDEsXHJcbiAgICAgIH0pIGFzIEFPQTtcclxuICAgICAgdGhpcy5zaGVldERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcclxuICAgICAgICBoZWFkZXI6IDEsXHJcbiAgICAgIH0pIGFzIEFPQTtcclxuXHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYXRlZ29yeUxpc3QodGhpcy5jYXRlZ29yeURhdGEpO1xyXG5cclxuICAgICAgdGhpcy5hc3Nlc3NtZW50RGF0YSA9IHRoaXMuc2hlZXREYXRhLmZpbHRlcihcclxuICAgICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0Zvcm1hdCh0aGlzLmFzc2Vzc21lbnREYXRhKSkge1xyXG4gICAgICAgIGNvbnN0IGNsb3NlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb3NlLXdvcmtmbG93LWVuZ2luZS1idG4nKTtcclxuICAgICAgICBpZiAoY2xvc2VCdG4pIGNsb3NlQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JQYXlsb2FkKHRoaXMuYXNzZXNzbWVudERhdGEpO1xyXG4gICAgICAgIHRoaXMuYXV0aC5wcmV2aWV3UGFuZWwubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmlzVXBsb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lZGl0b3JDb250LnRyaWdnZXJQcmV2aWV3V2l0aFZhbGlkYXRpb24oKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgY2F0ZWdvcnlMaXN0ITogYW55O1xyXG4gIGdlbmVyYXRlQ2F0ZWdvcnlMaXN0KGNhdGVnb3J5RGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjYXRMaXN0OiBhbnkgPSB7fTtcclxuICAgIGlmIChjYXRlZ29yeURhdGEpIHtcclxuICAgICAgY2F0ZWdvcnlEYXRhLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgY2F0TGlzdFtlbGVbMF1dID0gZWxlWzFdO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSBjYXRMaXN0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2F0ZWdvcnlOYW1ldG9JZChjYXRlZ29yeU5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlMaXN0W2NhdGVnb3J5TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlMaXN0W2NhdGVnb3J5TmFtZV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgZ2VuZXJhdGVFZGl0b3JQYXlsb2FkKGRhdGE6IGFueSkge1xyXG4gICAgLy9jaGVjayBmb3JtYXRcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgYXNzZXNzbWVudF9uYW1lOiAnJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgYXNzZXNzbWVudF90eXBlOiAnY29tcGxpYW5jZScsXHJcbiAgICAgICAgY2F0ZWdvcnlfYXJyOiBbXSxcclxuICAgICAgICBhcHByb3ZhbF93b3JrZmxvd19hcnI6IHtcclxuICAgICAgICAgIHRlc3Q6ICd0ZXN0JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFwcHJvdmFsX3JlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIHNvdXJjZV9wYWdlOiAnY29tcGxpYW5jZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2Vzc21lbnREYXRhOiB7XHJcbiAgICAgICAgdmVyc2lvbjogMixcclxuICAgICAgICBxdWVzdGlvblJhbmRvbWl6ZTogZmFsc2UsXHJcbiAgICAgICAgYW5vbnltb3VzUmVzcG9uc2U6IGZhbHNlLFxyXG4gICAgICAgIGhhc1dlbGNvbWU6IGZhbHNlLFxyXG4gICAgICAgIGhhc1dlbGNvbWVEZXNjcmlwdGlvbjogZmFsc2UsXHJcbiAgICAgICAgd2VsY29tZVRleHQ6ICcnLFxyXG4gICAgICAgIGhhc1dlbGNvbWVJbWFnZTogZmFsc2UsXHJcbiAgICAgICAgd2VsY29tZUltYWdlOiAnJyxcclxuICAgICAgICB3ZWxjb21lRGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIGhhc1RoYW5rczogZmFsc2UsXHJcbiAgICAgICAgaGFzVGhhbmt5b3VJbWFnZTogZmFsc2UsXHJcbiAgICAgICAgdGhhbmt5b3VUZXh0OiAnJyxcclxuICAgICAgICB0aGFua3lvdUltYWdlOiAnJyxcclxuICAgICAgICBoYXNUaGFua3lvdURlc2NyaXB0aW9uOiBmYWxzZSxcclxuICAgICAgICB0aGFua3lvdURlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICBlbGVtZW50czogW10sXHJcbiAgICAgICAgcGFnZURldGFpbHNMaXN0OiBbXSxcclxuICAgICAgICBjdXN0b21SZXNwb25zZVNldDogW10sXHJcbiAgICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXHJcbiAgICAgICAgcmVzcG9uc2VTZWdtZW50OiB0aGlzLmluaXRpYWxpemVFbXB0eVJlc3BvbnNlU2VnbWVudCgpLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbnZlcnRlZERhdGEgPSBwYXlsb2FkO1xyXG4gICAgdGhpcy5jb252ZXJ0ZWREYXRhLm1ldGFkYXRhLmFzc2Vzc21lbnRfbmFtZSA9IHRoaXMuYXNzZXNzbWVudERhdGFbMl1bMV07XHJcbiAgICB0aGlzLmNvbnZlcnRlZERhdGEubWV0YWRhdGEuZGVzY3JpcHRpb24gPSB0aGlzLmFzc2Vzc21lbnREYXRhWzNdWzFdO1xyXG4gICAgLy8gdGhpcy5jb252ZXJ0ZWREYXRhLm1ldGFkYXRhLmNhdGVnb3J5X2FyclswXSA9IHRoaXMuYXNzZXNzbWVudERhdGFbNF1bMV07XHJcbiAgICB0aGlzLmNvbnZlcnRlZERhdGEubWV0YWRhdGEuY2F0ZWdvcnlfYXJyID0gW1xyXG4gICAgICB0aGlzLmNhdGVnb3J5TmFtZXRvSWQodGhpcy5hc3Nlc3NtZW50RGF0YVs0XVsxXSksXHJcbiAgICBdO1xyXG5cclxuICAgIC8vVE9ETzogY3JlYXRlIGEgZnVuY3Rpb24gdG8gY29udmVydCBmcm9tIGNhdGVnb3JpZXMgbmFtZXMgdG8gY2F0ZWdvcmllcyBpZC5cclxuICAgIC8vVE9ETzogY2hlY2sgdGhlIGFwaSBmb3Igc3ViLWZsb3cgbGlrZSBhc3Nlc3NtZW50LXNldHRpbmcuXHJcbiAgICAvLyB0aGlzLmNvbnZlcnRlZERhdGEubWV0YWRhdGEuY2F0ZWdvcnlfYXJyWzBdID0gXCI2MWNjMjdjNWIzZTg2NDJiMzMzZjM1OTFcIjtcclxuICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbnNMaXN0KGRhdGEuc2xpY2UoNiksIHBheWxvYWQuYXNzZXNzbWVudERhdGEuZWxlbWVudHMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVRdWVzdGlvbnNMaXN0KHF1ZXN0aW9uc0xpc3Q6IGFueSwgcXVlc3Rpb25zQXJyYXk6IGFueSkge1xyXG4gICAgcXVlc3Rpb25zQXJyYXkgPSBbXTtcclxuICAgIGlmIChxdWVzdGlvbnNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgcXVlc3Rpb25zTGlzdC5mb3JFYWNoKChxdWVzdGlvbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcXVlc3Rpb25zQXJyYXkucHVzaCgpO1xyXG4gICAgICAgIHN3aXRjaCAocXVlc3Rpb25bMF0pIHtcclxuICAgICAgICAgIGNhc2UgJ1NpbmdsZSBUZXh0Ym94JzpcclxuICAgICAgICAgICAgcXVlc3Rpb25zQXJyYXkucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlU2luZ2xlVGV4dGJveCgnc2luZ2xlLXRleHRib3gnLCBxdWVzdGlvbiwgaW5kZXgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnTXVsdGlwbGUgQ2hvaWNlJzpcclxuICAgICAgICAgICAgcXVlc3Rpb25zQXJyYXkucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlTXVsdGlwbGVDaG9pY2UoJ211bHRpcGxlLWNob2ljZScsIHF1ZXN0aW9uLCBpbmRleClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdDaGVja2JveCc6XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc0FycmF5LnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU11bHRpcGxlQ2hvaWNlKCdjaGVja2JveCcsIHF1ZXN0aW9uLCBpbmRleClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdEcm9wZG93bic6XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc0FycmF5LnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU11bHRpcGxlQ2hvaWNlKCdkcm9wZG93bicsIHF1ZXN0aW9uLCBpbmRleClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdEYXRlICYgVGltZSc6XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc0FycmF5LnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZURhdGVUaW1lKCdkYXRlLXRpbWUnLCBxdWVzdGlvbiwgaW5kZXgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnRmlsZSBVcGxvYWQnOlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNBcnJheS5wdXNoKHRoaXMuZ2VuZXJhdGVGaWxlVXBsb2FkKHF1ZXN0aW9uLCBpbmRleCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAvLyBObyBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBkZWZhdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY29udmVydGVkRGF0YS5hc3Nlc3NtZW50RGF0YS5lbGVtZW50cyA9IHF1ZXN0aW9uc0FycmF5O1xyXG4gIH1cclxuICBjb2xNYXA6IGFueSA9IHtcclxuICAgIHR5cGU6IDAsXHJcbiAgICB0aXRsZTogMSxcclxuICAgIHNjb3JlOiAyLFxyXG4gICAgb3B0MTogMyxcclxuICAgIG9wdDI6IDQsXHJcbiAgICBvcHQzOiA1LFxyXG4gICAgb3B0NDogNixcclxuICAgIG9wdDU6IDcsXHJcbiAgICBvcHQ2OiA4LFxyXG4gICAgcmVxdWlyZWQ6IDksXHJcbiAgICBmYWlsZWQ6IDEwLFxyXG4gICAgZGVzY3JpcHRpb246IDExLFxyXG4gICAgcGxhY2Vob2xkZXI6IDEyLFxyXG4gICAgY29tbWVudDogMTMsXHJcbiAgICBvdGhlcjogMTQsXHJcbiAgICByYW5kb21pemU6IDE1LFxyXG4gICAgYWxpZ25tZW50OiAxNixcclxuICAgIHVzZXJhdHRhY2htZW50OiAxNyxcclxuICAgIHVzZXJjb21tZW50OiAxOCxcclxuICB9O1xyXG4gIGdlbmVyYXRlU2luZ2xlVGV4dGJveCh0eXBlOiBzdHJpbmcsIHF1ZXN0aW9uOiBhbnksIGluZGV4OiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6ICdzaW5nbGUtdGV4dGJveCcsXHJcbiAgICAgIG5hbWU6IGBRdWVzdGlvbl8ke2luZGV4fWAsXHJcbiAgICAgIHBhZ2U6IDEsXHJcbiAgICAgIGhhc1ZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICB2YWxpZGF0aW9uVHlwZTogJycsXHJcbiAgICAgIGlzUmVxdWlyZWQ6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5yZXF1aXJlZF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBoYXNDaGFyYWN0ZXJMZW5ndGg6IGZhbHNlLFxyXG4gICAgICBtaW5DaGFyYWN0ZXJMZW5ndGg6IDAsXHJcbiAgICAgIG1heENoYXJhY3Rlckxlbmd0aDogMTAwLFxyXG4gICAgICB0aXRsZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnRpdGxlXT8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnLFxyXG4gICAgICBoYXNEZXNjcmlwdGlvbjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmRlc2NyaXB0aW9uXT8udG9TdHJpbmcoKT8udHJpbSgpXHJcbiAgICAgICAgPy5sZW5ndGhcclxuICAgICAgICA/IHRydWVcclxuICAgICAgICA6IGZhbHNlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmRlc2NyaXB0aW9uXT8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnLFxyXG4gICAgICBoYXNDb21tZW50czogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnVzZXJjb21tZW50XT8udG9TdHJpbmcoKT8udHJpbSgpXHJcbiAgICAgICAgPy5sZW5ndGhcclxuICAgICAgICA/IHRydWVcclxuICAgICAgICA6IGZhbHNlLFxyXG4gICAgICBjb21tZW50czogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmNvbW1lbnRdPy50b1N0cmluZygpPy50cmltKCksXHJcbiAgICAgIHJhbmRvbWl6ZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJhbmRvbWl6ZV0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBoYXNPdGhlcjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm90aGVyXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIG90aGVyVmFsdWU6ICdPdGhlcicsXHJcbiAgICAgIGFsaWdubWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmFsaWdubWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICByZXZlcnNlOiBmYWxzZSxcclxuICAgICAgaXNSZXNwb25kZW50QXR0YWNobWVudDpcclxuICAgICAgICBxdWVzdGlvblt0aGlzLmNvbE1hcD8udXNlcmF0dGFjaG1lbnRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgdXNlckF0dGFjaGVkRmlsZXM6IFtdLFxyXG4gICAgICBpc1Jlc3BvbmRlbnRDb21tZW50OlxyXG4gICAgICAgIHF1ZXN0aW9uW3RoaXMuY29sTWFwPy51c2VyY29tbWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICB2aXNpYmlsaXR5TG9naWM6IFtdLFxyXG4gICAgICBvdGhlckNvbmZpZzoge1xyXG4gICAgICAgIGNvbG9yOiAnIzAwMDAwMCcsXHJcbiAgICAgICAgaXNGYWlsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHNjb3JlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uc2NvcmVdID8/IDEsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNob2ljZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgICB2YWx1ZTogMSxcclxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgcmVxdWlyZWQ6IDAsXHJcbiAgICAgICAgICBoYXNIZWxwaW5nTGFiZWw6IGZhbHNlLFxyXG4gICAgICAgICAgaGVscGluZ0xhYmVsOiAnJyxcclxuICAgICAgICAgIGlzRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICAgIHNjb3JlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uc2NvcmVdID8/IDEsXHJcbiAgICAgICAgICBjb2xvcjogJyMwMDAwMDAnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVNdWx0aXBsZUNob2ljZSh0eXBlOiBzdHJpbmcsIHF1ZXN0aW9uOiBhbnksIGluZGV4OiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgIG5hbWU6IGBRdWVzdGlvbl8ke2luZGV4fWAsXHJcbiAgICAgIHBhZ2U6IDEsXHJcbiAgICAgIGhhc1ZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICB2YWxpZGF0aW9uVHlwZTogJycsXHJcbiAgICAgIGlzUmVxdWlyZWQ6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5yZXF1aXJlZF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBoYXNDaGFyYWN0ZXJMZW5ndGg6IGZhbHNlLFxyXG4gICAgICBtaW5DaGFyYWN0ZXJMZW5ndGg6IDAsXHJcbiAgICAgIG1heENoYXJhY3Rlckxlbmd0aDogMTAwLFxyXG4gICAgICB0aXRsZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnRpdGxlXT8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnLFxyXG4gICAgICBoYXNEZXNjcmlwdGlvbjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmRlc2NyaXB0aW9uXT8udG9TdHJpbmcoKT8udHJpbSgpXHJcbiAgICAgICAgPy5sZW5ndGhcclxuICAgICAgICA/IHRydWVcclxuICAgICAgICA6IGZhbHNlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmRlc2NyaXB0aW9uXT8udG9TdHJpbmcoKS50cmltKCkgPz8gJycsXHJcbiAgICAgIGhhc0NvbW1lbnRzOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uY29tbWVudF0/LnRvU3RyaW5nKCk/LnRyaW0oKT8ubGVuZ3RoXHJcbiAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgOiBmYWxzZSxcclxuICAgICAgY29tbWVudHM6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5jb21tZW50XT8udG9TdHJpbmcoKS50cmltKCksXHJcbiAgICAgIHJhbmRvbWl6ZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJhbmRvbWl6ZV0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBoYXNPdGhlcjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm90aGVyXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIG90aGVyVmFsdWU6ICdPdGhlcicsXHJcbiAgICAgIGFsaWdubWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmFsaWdubWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICByZXZlcnNlOiBmYWxzZSxcclxuICAgICAgaXNSZXNwb25kZW50QXR0YWNobWVudDpcclxuICAgICAgICBxdWVzdGlvblt0aGlzLmNvbE1hcD8udXNlcmF0dGFjaG1lbnRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgdXNlckF0dGFjaGVkRmlsZXM6IFtdLFxyXG4gICAgICB2aXNpYmlsaXR5TG9naWM6IFtdLFxyXG4gICAgICBpc1Jlc3BvbmRlbnRDb21tZW50OlxyXG4gICAgICAgIHF1ZXN0aW9uW3RoaXMuY29sTWFwPy51c2VyY29tbWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBvdGhlckNvbmZpZzoge1xyXG4gICAgICAgIGNvbG9yOiAnIzAwMDAwMCcsXHJcbiAgICAgICAgaXNGYWlsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHNjb3JlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uc2NvcmVdID8/IDEsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNob2ljZXM6IHRoaXMuZ2VuZXJhdGVDaG9pY2VzKHF1ZXN0aW9uKSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZURhdGVUaW1lKHR5cGU6IHN0cmluZywgcXVlc3Rpb246IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgbmFtZTogYFF1ZXN0aW9uXyR7aW5kZXh9YCxcclxuICAgICAgcGFnZTogMSxcclxuICAgICAgaGFzVmFsaWRhdGlvbjogZmFsc2UsXHJcbiAgICAgIHZhbGlkYXRpb25UeXBlOiAnJyxcclxuICAgICAgaXNSZXF1aXJlZDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJlcXVpcmVkXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIGhhc0NoYXJhY3Rlckxlbmd0aDogZmFsc2UsXHJcbiAgICAgIG1pbkNoYXJhY3Rlckxlbmd0aDogMCxcclxuICAgICAgbWF4Q2hhcmFjdGVyTGVuZ3RoOiAxMDAsXHJcbiAgICAgIHRpdGxlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8udGl0bGVdPy50b1N0cmluZygpPy50cmltKCkgPz8gJycsXHJcbiAgICAgIGhhc0Rlc2NyaXB0aW9uOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uZGVzY3JpcHRpb25dPy50b1N0cmluZygpPy50cmltKClcclxuICAgICAgICA/Lmxlbmd0aFxyXG4gICAgICAgID8gdHJ1ZVxyXG4gICAgICAgIDogZmFsc2UsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uZGVzY3JpcHRpb25dPy50b1N0cmluZygpPy50cmltKCkgPz8gJycsXHJcbiAgICAgIGhhc0NvbW1lbnRzOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uY29tbWVudF0/LnRvU3RyaW5nKCk/LnRyaW0oKT8ubGVuZ3RoXHJcbiAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgOiBmYWxzZSxcclxuICAgICAgY29tbWVudHM6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5jb21tZW50XT8udG9TdHJpbmcoKS50cmltKCksXHJcbiAgICAgIHJhbmRvbWl6ZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnJhbmRvbWl6ZV0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBoYXNPdGhlcjogcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm90aGVyXSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIG90aGVyVmFsdWU6ICdPdGhlcicsXHJcbiAgICAgIGFsaWdubWVudDogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LmFsaWdubWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICByZXZlcnNlOiBmYWxzZSxcclxuICAgICAgaXNSZXNwb25kZW50QXR0YWNobWVudDpcclxuICAgICAgICBxdWVzdGlvblt0aGlzLmNvbE1hcD8udXNlcmF0dGFjaG1lbnRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgdXNlckF0dGFjaGVkRmlsZXM6IFtdLFxyXG4gICAgICB2aXNpYmlsaXR5TG9naWM6IFtdLFxyXG4gICAgICBpc1Jlc3BvbmRlbnRDb21tZW50OlxyXG4gICAgICAgIHF1ZXN0aW9uW3RoaXMuY29sTWFwPy51c2VyY29tbWVudF0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBvdGhlckNvbmZpZzoge1xyXG4gICAgICAgIGNvbG9yOiAnIzAwMDAwMCcsXHJcbiAgICAgICAgaXNGYWlsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHNjb3JlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uc2NvcmVdID8/IDEsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNob2ljZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgICB2YWx1ZTogMSxcclxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgcmVxdWlyZWQ6IDAsXHJcbiAgICAgICAgICBoYXNIZWxwaW5nTGFiZWw6IGZhbHNlLFxyXG4gICAgICAgICAgaGVscGluZ0xhYmVsOiAnJyxcclxuICAgICAgICAgIGlzRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICAgIHNjb3JlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uc2NvcmVdID8/IDEsXHJcbiAgICAgICAgICBjb2xvcjogJyMwMDAwMDAnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIGhhc0RhdGU6IHRydWUsXHJcbiAgICAgIGhhc1RpbWU6IGZhbHNlLFxyXG4gICAgICBkYXRlRm9ybWF0OiAnREQvTU0vWVlZWScsXHJcbiAgICAgIHRpbWVGb3JtYXQ6IDI0LFxyXG4gICAgICBkYXRlOiB7XHJcbiAgICAgICAgdGl0bGU6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5wbGFjZWhvbGRlcl0gPz8gJ1NlbGVjdCBEYXRlJyxcclxuICAgICAgICB2YWx1ZTogJycsXHJcbiAgICAgIH0sXHJcbiAgICAgIHRpbWU6IHtcclxuICAgICAgICB0aXRsZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnBsYWNlaG9sZGVyXSA/PyAnU2VsZWN0IFRpbWUnLFxyXG4gICAgICAgIHZhbHVlOiAnJyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdlbmVyYXRlRmlsZVVwbG9hZChxdWVzdGlvbjogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiAnZmlsZS11cGxvYWQnLFxyXG4gICAgICBuYW1lOiBgUXVlc3Rpb25fJHtpbmRleH1gLFxyXG4gICAgICBwYWdlOiAxLFxyXG4gICAgICBoYXNWYWxpZGF0aW9uOiBmYWxzZSxcclxuICAgICAgdmFsaWRhdGlvblR5cGU6ICcnLFxyXG4gICAgICBpc1JlcXVpcmVkOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8ucmVxdWlyZWRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgaGFzQ2hhcmFjdGVyTGVuZ3RoOiBmYWxzZSxcclxuICAgICAgbWluQ2hhcmFjdGVyTGVuZ3RoOiAwLFxyXG4gICAgICBtYXhDaGFyYWN0ZXJMZW5ndGg6IDEwMCxcclxuICAgICAgdGl0bGU6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy50aXRsZV0/LnRvU3RyaW5nKCk/LnRyaW0oKSA/PyAnJyxcclxuICAgICAgaGFzRGVzY3JpcHRpb246IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5kZXNjcmlwdGlvbl0/LnRvU3RyaW5nKCk/LnRyaW0oKVxyXG4gICAgICAgID8ubGVuZ3RoXHJcbiAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgOiBmYWxzZSxcclxuICAgICAgZGVzY3JpcHRpb246IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5kZXNjcmlwdGlvbl0/LnRvU3RyaW5nKCk/LnRyaW0oKSA/PyAnJyxcclxuICAgICAgaGFzQ29tbWVudHM6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy51c2VyY29tbWVudF0/LnRvU3RyaW5nKCk/LnRyaW0oKVxyXG4gICAgICAgID8ubGVuZ3RoXHJcbiAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgOiBmYWxzZSxcclxuICAgICAgY29tbWVudHM6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5jb21tZW50XT8udG9TdHJpbmcoKT8udHJpbSgpLFxyXG4gICAgICByYW5kb21pemU6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5yYW5kb21pemVdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgaGFzT3RoZXI6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5vdGhlcl0gPT09ICdZZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBvdGhlclZhbHVlOiAnT3RoZXInLFxyXG4gICAgICBhbGlnbm1lbnQ6IHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5hbGlnbm1lbnRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgcmV2ZXJzZTogZmFsc2UsXHJcbiAgICAgIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6XHJcbiAgICAgICAgcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnVzZXJhdHRhY2htZW50XSA9PT0gJ1llcycgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIHVzZXJBdHRhY2hlZEZpbGVzOiBbXSxcclxuICAgICAgdmlzaWJpbGl0eUxvZ2ljOiBbXSxcclxuICAgICAgaXNSZXNwb25kZW50Q29tbWVudDpcclxuICAgICAgICBxdWVzdGlvblt0aGlzLmNvbE1hcD8udXNlcmNvbW1lbnRdID09PSAnWWVzJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgb3RoZXJDb25maWc6IHtcclxuICAgICAgICBjb2xvcjogJyMwMDAwMDAnLFxyXG4gICAgICAgIGlzRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBzY29yZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnNjb3JlXSA/PyAxLFxyXG4gICAgICB9LFxyXG4gICAgICBjaG9pY2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgICAgdmFsdWU6IDEsXHJcbiAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcclxuICAgICAgICAgIHJlcXVpcmVkOiAwLFxyXG4gICAgICAgICAgaGFzSGVscGluZ0xhYmVsOiBmYWxzZSxcclxuICAgICAgICAgIGhlbHBpbmdMYWJlbDogJycsXHJcbiAgICAgICAgICBpc0ZhaWxlZDogZmFsc2UsXHJcbiAgICAgICAgICBzY29yZTogcXVlc3Rpb25bdGhpcy5jb2xNYXA/LnNjb3JlXSA/PyAxLFxyXG4gICAgICAgICAgY29sb3I6ICcjMDAwMDAwJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICBhbGxvd2VkRmlsZVR5cGVzOiB7XHJcbiAgICAgICAgcGRmOiB0cnVlLFxyXG4gICAgICAgIGRvYzogdHJ1ZSxcclxuICAgICAgICBwbmc6IHRydWUsXHJcbiAgICAgICAganBnOiB0cnVlLFxyXG4gICAgICAgIGdpZjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUNob2ljZXMocXVlc3Rpb246IGFueSkge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcclxuICAgICAgcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm9wdDFdLFxyXG4gICAgICBxdWVzdGlvblt0aGlzLmNvbE1hcD8ub3B0Ml0sXHJcbiAgICAgIHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5vcHQzXSxcclxuICAgICAgcXVlc3Rpb25bdGhpcy5jb2xNYXA/Lm9wdDRdLFxyXG4gICAgICBxdWVzdGlvblt0aGlzLmNvbE1hcD8ub3B0NV0sXHJcbiAgICAgIHF1ZXN0aW9uW3RoaXMuY29sTWFwPy5vcHQ2XSxcclxuICAgIF0uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlKTtcclxuICAgIG9wdGlvbnMuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZSkge1xyXG4gICAgICAgIGVsZS50b1N0cmluZygpPy50cmltKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKG9wdGlvbnM/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBvcHRpb25zLnB1c2goJycpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb3B0aW9uTWFwOiBhbnkgPSB7XHJcbiAgICAgICdPcHRpb24gMSc6IDMsXHJcbiAgICAgICdPcHRpb24gMic6IDQsXHJcbiAgICAgICdPcHRpb24gMyc6IDUsXHJcbiAgICAgICdPcHRpb24gNCc6IDYsXHJcbiAgICAgICdPcHRpb24gNSc6IDcsXHJcbiAgICAgICdPcHRpb24gNic6IDgsXHJcbiAgICB9O1xyXG4gICAgb3B0aW9ucy5mb3JFYWNoKChjaG9pY2U6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBvcHRpb25zW2luZGV4XSA9IHtcclxuICAgICAgICB0aXRsZTpcclxuICAgICAgICAgIGNob2ljZSAmJiB0eXBlb2YgY2hvaWNlID09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgID8gY2hvaWNlXHJcbiAgICAgICAgICAgIDogY2hvaWNlLnRvU3RyaW5nKCkgPz8gJycsXHJcbiAgICAgICAgdmFsdWU6IDEsXHJcbiAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXHJcbiAgICAgICAgcmVxdWlyZWQ6IDAsXHJcbiAgICAgICAgaGFzSGVscGluZ0xhYmVsOiBmYWxzZSxcclxuICAgICAgICBoZWxwaW5nTGFiZWw6ICcnLFxyXG4gICAgICAgIGlzRmFpbGVkOlxyXG4gICAgICAgICAgY2hvaWNlPy50b1N0cmluZygpPy50cmltKCkgPT1cclxuICAgICAgICAgIHF1ZXN0aW9uW29wdGlvbk1hcFtxdWVzdGlvblt0aGlzLmNvbE1hcD8uZmFpbGVkXV1dXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlLFxyXG4gICAgICAgIHNjb3JlOiBxdWVzdGlvblt0aGlzLmNvbE1hcD8uc2NvcmVdID8/IDEsXHJcbiAgICAgICAgY29sb3I6ICcjMDAwMDAwJyxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldHRpbmdzOiBhbnkgPSB7XHJcbiAgICBhc3Nlc3NtZW50TW9kZTogZmFsc2UsXHJcbiAgICBkZWZhdWx0U2NvcmU6IDEsXHJcbiAgICBuZWdhdGl2ZVNjb3JlQ3JpdGVyaWE6ICdGQUlMRUQnLFxyXG4gICAgbmVnYXRpdmVTY29yZTogMCxcclxuICAgIHdlaWdodGFnZUVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgc2V0dGluZ3NFbmFibGVkOiBmYWxzZSxcclxuICB9O1xyXG5cclxuICBjaGVja0Zvcm1hdChhc3Nlc3NtZW50RGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmdJblRlbXBsYXRlID0gdGhpcy5jYXRlZ29yeURhdGFbMF1bNV07XHJcbiAgICAvL0NvbXBsZXRseSBibGFuayBleGNlbCBzaGVldFxyXG4gICAgaWYgKGFzc2Vzc21lbnREYXRhLmxlbmd0aCA9PT0gMCB8fCBvcmdJblRlbXBsYXRlICE9PSB0aGlzLm9yZ2FuaXphdGlvbklkKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnWW91IGhhdmUgdXBsb2FkZWQgdGhlIHdyb25nIHRlbXBsYXRlLiBQbGVhc2UgZG93bmxvYWQgdGhlIHRlbXBsYXRlIGFnYWluIHRvIHByb2NlZWQuJztcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy9JbnZhbGlkIFRlbXBhbHRlXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgYXNzZXNzbWVudERhdGFbMl1bMF0gIT09ICdBc3Nlc3NtZW50IE5hbWUqJyB8fFxyXG4gICAgICAgIGFzc2Vzc21lbnREYXRhWzNdWzBdICE9PSAnRGVzY3JpcHRpb24nIHx8XHJcbiAgICAgICAgYXNzZXNzbWVudERhdGFbNF1bMF0gIT09ICdBc3Nlc3NtZW50IENhdGVnb3J5KicgfHxcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YVs1XVswXSAhPT0gJ1F1ZXN0aW9uIFR5cGUqJ1xyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAnWW91IGhhdmUgdXBsb2FkZWQgdGhlIHdyb25nIHRlbXBsYXRlLiBQbGVhc2UgZG93bmxvYWQgdGhlIHRlbXBsYXRlIGFnYWluIHRvIHByb2NlZWQuJztcclxuICAgICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCB0aGUgd3JvbmcgdGVtcGxhdGUuIFBsZWFzZSBkb3dubG9hZCB0aGUgdGVtcGxhdGUgYWdhaW4gdG8gcHJvY2VlZC4nO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvL0NoZWNrIEFzc2Vzc21lbnQgbmFtZVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICFhc3Nlc3NtZW50RGF0YVsyXVsxXSB8fFxyXG4gICAgICAgIGFzc2Vzc21lbnREYXRhWzJdWzFdID09PSAnJyB8fFxyXG4gICAgICAgIGFzc2Vzc21lbnREYXRhWzJdWzFdID09PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRW50ZXIgYSBuYW1lIGZvciB0aGlzIEFzc2Vzc21lbnQuJztcclxuICAgICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRW50ZXIgYSBuYW1lIGZvciB0aGlzIEFzc2Vzc21lbnQuJztcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy9jYXRlZ29yeSBub3Qgc2VsZWN0ZWRcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhYXNzZXNzbWVudERhdGFbNF1bMV0gfHxcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YVs0XVsxXSA9PT0gJycgfHxcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YVs0XVsxXSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1NlbGVjdCB0aGUgQXNzZXNzbWVudCBDYXRlZ29yeS4nO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdTZWxlY3QgdGhlIEFzc2Vzc21lbnQgQ2F0ZWdvcnkuJztcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy9Eb2VzIG5vdCBjb250YWlucyBhbnkgcXVlc3Rpb25zXHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoYXNzZXNzbWVudERhdGEuc2xpY2UoNyk/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIHF1ZXN0aW9ucyB0byB0aGlzIHRlbXBsYXRlIGFuZCB1cGxvYWQgaXQgYWdhaW4uJztcclxuICAgICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIHF1ZXN0aW9ucyB0byB0aGlzIHRlbXBsYXRlIGFuZCB1cGxvYWQgaXQgYWdhaW4uJztcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy9oYW5kbGUgdHlwZSBvZiBxdWVzdGlvbiBhbmQgb3B0aW9ucyBjb3VudFxyXG4gICAgZm9yIChsZXQgaSA9IDc7IGkgPD0gYXNzZXNzbWVudERhdGEubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YVtpXVswXSAhPT0gJ011bHRpcGxlIENob2ljZScgJiZcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YVtpXVswXSAhPT0gJ0NoZWNrYm94JyAmJlxyXG4gICAgICAgIGFzc2Vzc21lbnREYXRhW2ldWzBdICE9PSAnRHJvcGRvd24nICYmXHJcbiAgICAgICAgYXNzZXNzbWVudERhdGFbaV1bMF0gIT09ICdTaW5nbGUgVGV4dGJveCcgJiZcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YVtpXVswXSAhPT0gJ0RhdGUgJiBUaW1lJyAmJlxyXG4gICAgICAgIGFzc2Vzc21lbnREYXRhW2ldWzBdICE9PSAnRmlsZSBVcGxvYWQnXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCB0aGUgd3JvbmcgdGVtcGxhdGUuIFBsZWFzZSBkb3dubG9hZCB0aGUgdGVtcGxhdGUgYWdhaW4gdG8gcHJvY2VlZC4nO1xyXG4gICAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgKGFzc2Vzc21lbnREYXRhW2ldWzFdID09PSAnJykge1xyXG4gICAgICAvLyAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1lvdSBoYXZlIHVwbG9hZGVkIHRoZSB3cm9uZyB0ZW1wbGF0ZS4gUGxlYXNlIGRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBhZ2FpbiB0byBwcm9jZWVkLic7XHJcbiAgICAgIC8vICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRW1wdHlSZXNwb25zZVNlZ21lbnQoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgbWF4U2NvcmU6IDEwLFxyXG4gICAgICBzZWdtZW50czogW10sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcG9zdEFzc2Vzc21lbnQoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmlzU2hvd0xvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRTZXJ2aWNlXHJcbiAgICAgIC5jcmVhdGVBc3Nlc3NtZW50KHRoaXMuY29udmVydGVkRGF0YS5tZXRhZGF0YSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucG9zdEFzc2Vzc21lbnREZXRhaWxzKFxyXG4gICAgICAgICAgICByZXNwb25zZS5faWQsXHJcbiAgICAgICAgICAgIGRhdGEubW9kZSxcclxuICAgICAgICAgICAgZGF0YS5hc3Nlc3NtZW50RGV0YWlsc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNTaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwb3N0QXNzZXNzbWVudERldGFpbHMoaWQ6IGFueSwgbW9kZTogYW55LCBhc3Nlc3NtZW50RGV0YWlsczogYW55KSB7XHJcbiAgICB0aGlzLmlzVXBsb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0aC5wcmV2aWV3UGFuZWwubmV4dChmYWxzZSk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBxdWVzdGlvbjogYXNzZXNzbWVudERldGFpbHMsXHJcbiAgICAgIGFjdGlvbjogJ3F1ZXN0aW9uc19zYXZlJyxcclxuICAgICAgc3RhdGU6IG1vZGUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYXNzZXNzbWVudFNlcnZpY2Uuc2F2ZUFzc2Vzc21lbnREZXRhaWxzKGlkLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudERhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLmlzU2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzbWlsZXlBY3Rpb24oaWQ6IGFueSkge1xyXG4gICAgaWYgKGlkID09PSBzbWlsZXlBY3Rpb25zLlZJRVdfQVNTRVNTTUVOVFMpIHtcclxuICAgICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgICAgLy8gVE9ETzogTmF2aWdhdGUgdG8gJy9tYW5hZ2UtYXNzZXNzbWVudCdcclxuICAgICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvbWFuYWdlLWFzc2Vzc21lbnQnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVybCA9XHJcbiAgICAgICAgICAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL2Fzc2Vzc21lbnQvbWFuYWdlLWFzc2Vzc21lbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuYXV0aC5wcmV2aWV3UGFuZWwubmV4dChmYWxzZSk7XHJcbiAgICAgIGNvbnN0IGNsb3NlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb3NlLXdvcmtmbG93LWVuZ2luZS1idG4nKTtcclxuICAgICAgaWYgKGNsb3NlQnRuKSBjbG9zZUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImltcG9ydC1hbi1hc3Nlc3NtZW50XCIgW2F0dHIuaWRdPVwiJ3Njcm9sbFJlZmVyZW5jZSdcIj5cclxuICA8IS0tIG1haW4gY29udGFpbmVyIHN0YXJ0cyBoZXJlIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJpbXBvcnQtYW4tYXNzZXNzbWVudC1ib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW1wb3J0LWFuLWFzc2Vzc21lbnQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3NwcmVhZHNoZWV0LW11bHRpcGxlLWNhdGVnb3J5LnN2Z1wiXHJcbiAgICAgICAgICBhbHQ9XCJcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxoND5Zb3UgY2FuIGltcG9ydCBhbiBhc3Nlc3NtZW50IGluIGp1c3QgdHdvIGVhc3kgc3RlcHM6PC9oND5cclxuICAgICAgPHVsIGNsYXNzPVwibGlzdFwiPlxyXG4gICAgICAgIDxsaT5Eb3dubG9hZCB0aGUgdGVtcGxhdGUgYW5kIGZpbGwgaW4gdGhlIGRldGFpbHMuPC9saT5cclxuICAgICAgICA8bGk+VXBsb2FkIHRoZSAueGxzeCBmaWxlIGFuZCB5b3XigJlyZSBnb29kIHRvIGdvITwvbGk+XHJcbiAgICAgIDwvdWw+XHJcblxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZG93bmxvYWRcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnTk9UX0RPV05MT0FESU5HJ1wiIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYjs8L2k+IERvd25sb2FkIFRlbXBsYXRlPC9idXR0b24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiICpuZ0lmPVwiZG93bmxvYWRTdGF0dXMgPT09ICdET1dOTE9BRElORydcIj5cclxuICAgICAgICBEb3dubG9hZCBpbiBQcm9ncmVzc1xyXG4gICAgICAgIDxhcHAtbGluZS1sb2FkZXIgW2xvYWRlckhlaWdodF09XCInMidcIj48L2FwcC1saW5lLWxvYWRlcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ0RPV05MT0FERUQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLXByb2dyZXNzXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWM7PC9pPkRvd25sb2FkIENvbXBsZXRlPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLWFnYWluXCI+XHJcbiAgICAgICAgICBJcyB0aGUgZmlsZSBub3QgZG93bmxvYWRlZD9cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlJldHJ5IERvd25sb2FkPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzV3JvbmdGb3JtYXRcIj57e2Vycm9yTWVzc2FnZX19PC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwiaXNTaG93TG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cclxuXHJcbjxpbnB1dCB0eXBlPVwiZmlsZVwiIFsobmdNb2RlbCldPVwiZmlsZVZhbHVlXCIgaWQ9XCJpYWEtZmlsZS1pbnB1dFwiIGFjY2VwdD1cIi54bHN4XCIgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiBvbmNsaWNrPVwidGhpcy52YWx1ZSA9IG51bGxcIlxyXG4gIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQpXCIgLz5cclxuXHJcbjxhcHAtc21pbGV5LWRpYWxvZy1pbmxpbmUgKm5nSWY9XCJzaG93U21pbGV5XCIgW21lc3NhZ2VdPVwic21pbGV5TWVzc2FnZUFjdGlvblwiIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gIChhY3Rpb24pPVwic21pbGV5QWN0aW9uKCRldmVudClcIiAoY2xvc2VTbWlsZXkpPVwiY2xvc2VTbWlsZXkoJGV2ZW50KVwiPjwvYXBwLXNtaWxleS1kaWFsb2ctaW5saW5lPlxyXG5cclxuPGRpdiBjbGFzcz1cImltcG9ydFwiICpuZ0lmPVwiaXNVcGxvYWRlZFwiPlxyXG4gIDxhcHAtY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyICNlZGl0b3IgW29wZW5Qb3J0YWxdPVwiJ0FTU0VTU01FTlRfSU1QT1JUJ1wiIChwb3N0QXNzZXNzbWVudCk9XCJwb3N0QXNzZXNzbWVudCgkZXZlbnQpXCIgKHNldElzVXBsb2FkZWQpPVwic2V0SXNVcGxvYWRlZCgkZXZlbnQpXCJcclxuICAgIFthc3Nlc3NtZW50SlNPTl09XCJjb252ZXJ0ZWREYXRhXCI+XHJcbiAgPC9hcHAtY3JlYXRlLWFzc2Vzc21lbnQtY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19
|