vcomply-workflow-engine 2.6.94 → 2.6.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/vcomply-workflow-engine.umd.js +23118 -23475
- package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
- package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.js +11 -4
- package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.ngfactory.js +28 -40
- package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.ngsummary.json +1 -1
- package/esm2015/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.js +177 -0
- package/esm2015/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.ngfactory.js +100 -0
- package/esm2015/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.ngsummary.json +1 -0
- package/esm2015/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.js +1295 -0
- package/esm2015/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.ngfactory.js +70 -0
- package/esm2015/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.ngsummary.json +1 -0
- package/esm2015/lib/formgroup/select/cs-select/cs-select.component.js +2 -2
- package/esm2015/lib/formgroup/select/cs-select/cs-select.component.ngfactory.js +3 -3
- package/esm2015/lib/more-option/more-option.component.js +2 -11
- package/esm2015/lib/pipes/search.pipe.js +5 -5
- package/esm2015/lib/services/bulk-upload.service.js +43 -0
- package/esm2015/lib/services/bulk-upload.service.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.js +18 -5
- package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.ngfactory.js +520 -30
- package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +2 -2
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +7 -7
- package/esm2015/lib/workflow-engine.module.js +5 -23
- package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
- package/esm2015/lib/workflow-program/create-program-ui/pipes/search.pipe.js +2 -2
- package/esm2015/lib/workflow-risk/workflow-risk.component.js +13 -348
- package/esm2015/lib/workflow-risk/workflow-risk.component.ngfactory.js +112 -170
- package/esm2015/lib/workflow-risk/workflow-risk.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-services/add-risk.service.js +5 -5
- package/esm2015/lib/workflow-services/frequency.service.js +41 -12
- package/esm2015/vcomply-workflow-engine.js +194 -202
- package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
- package/fesm2015/vcomply-workflow-engine.js +22012 -22361
- package/fesm2015/vcomply-workflow-engine.js.map +1 -1
- package/lib/add-multiple-responsibility/add-multiple-responsibility.component.d.ts +2 -0
- package/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.d.ts +34 -0
- package/lib/{sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngfactory.d.ts → add-multiple-responsibility-container/add-multiple-responsibility-container.component.ngfactory.d.ts} +0 -0
- package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts +170 -0
- package/lib/{sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngfactory.d.ts → add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.ngfactory.d.ts} +0 -0
- package/lib/services/bulk-upload.service.d.ts +6 -0
- package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +5 -0
- package/lib/workflow-risk/workflow-risk.component.d.ts +1 -77
- package/lib/workflow-services/add-risk.service.d.ts +1 -1
- package/lib/workflow-services/frequency.service.d.ts +1 -1
- package/package.json +1 -1
- package/vcomply-workflow-engine.d.ts +193 -201
- package/vcomply-workflow-engine.metadata.json +1 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.js +0 -210
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngfactory.js +0 -39
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.js +0 -185
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngfactory.js +0 -36
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.js +0 -26
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngfactory.js +0 -25
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.js +0 -287
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngfactory.js +0 -80
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.js +0 -57
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngfactory.js +0 -42
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.js +0 -195
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngfactory.js +0 -36
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.js +0 -136
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngfactory.js +0 -79
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.js +0 -179
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngfactory.js +0 -36
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.js +0 -31
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngfactory.js +0 -24
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.js +0 -102
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngfactory.js +0 -99
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngsummary.json +0 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.js +0 -163
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngfactory.js +0 -36
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngsummary.json +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.d.ts +0 -37
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.d.ts +0 -35
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.d.ts +0 -9
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.d.ts +0 -31
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.d.ts +0 -16
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.d.ts +0 -33
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.d.ts +0 -32
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.d.ts +0 -32
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.d.ts +0 -10
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.d.ts +0 -22
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngfactory.d.ts +0 -1
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.d.ts +0 -30
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngfactory.d.ts +0 -1
|
@@ -0,0 +1,1295 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { cloneDeep } from 'lodash-es';
|
|
3
|
+
import * as moment from 'moment';
|
|
4
|
+
import * as XLSX from 'xlsx';
|
|
5
|
+
import { SnackBarService } from '../ui-kit/snack-bar/snack-bar.service';
|
|
6
|
+
import { AddRiskService } from '../workflow-services/add-risk.service';
|
|
7
|
+
import { AuthService } from '../workflow-services/auth.service';
|
|
8
|
+
import { FrequencyBulkService } from '../workflow-services/frequency.service';
|
|
9
|
+
import { ResponsibilityService } from '../workflow-services/responsibility.service';
|
|
10
|
+
export class AddMultipleResponsibilityWithTabComponent {
|
|
11
|
+
constructor(riskService, responsibilityService, authService, frequencyService, snackBar) {
|
|
12
|
+
this.riskService = riskService;
|
|
13
|
+
this.responsibilityService = responsibilityService;
|
|
14
|
+
this.authService = authService;
|
|
15
|
+
this.frequencyService = frequencyService;
|
|
16
|
+
this.snackBar = snackBar;
|
|
17
|
+
this.pickerChanged = new EventEmitter();
|
|
18
|
+
this.populateOption = new EventEmitter();
|
|
19
|
+
this.closeWorkflow = new EventEmitter();
|
|
20
|
+
this.disconnectRefresh = new EventEmitter();
|
|
21
|
+
this.isNotificationPending = 0;
|
|
22
|
+
this.closeAddMultipleResponsibility = new EventEmitter();
|
|
23
|
+
this.responsibilityBulkUpload = {
|
|
24
|
+
header: [],
|
|
25
|
+
reports: [],
|
|
26
|
+
};
|
|
27
|
+
this.tabType = 'frequency';
|
|
28
|
+
this.tabIndex = {
|
|
29
|
+
frequency: 0,
|
|
30
|
+
ongoing: 1,
|
|
31
|
+
onCompletion: 2
|
|
32
|
+
};
|
|
33
|
+
this.bulkUpload = {
|
|
34
|
+
frequency: {
|
|
35
|
+
header: [],
|
|
36
|
+
subHeading: [],
|
|
37
|
+
reports: [],
|
|
38
|
+
},
|
|
39
|
+
ongoing: {
|
|
40
|
+
header: [],
|
|
41
|
+
subHeading: [],
|
|
42
|
+
reports: [],
|
|
43
|
+
},
|
|
44
|
+
onCompletion: {
|
|
45
|
+
header: [],
|
|
46
|
+
subHeading: [],
|
|
47
|
+
reports: [],
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
this.templateInfo = {
|
|
51
|
+
categoryList: [],
|
|
52
|
+
rcList: [],
|
|
53
|
+
assignorsList: [],
|
|
54
|
+
assigneesList: [],
|
|
55
|
+
parentResponsibility: [],
|
|
56
|
+
memberId: ''
|
|
57
|
+
};
|
|
58
|
+
this.isLoader = false;
|
|
59
|
+
this.showCategoryList = false;
|
|
60
|
+
this.templateDownloaded = false;
|
|
61
|
+
this.downloadInProgress = false;
|
|
62
|
+
this.loader = false;
|
|
63
|
+
this.isFileEmpty = false;
|
|
64
|
+
this.isWrongFile = false;
|
|
65
|
+
this.isWrongFormat = false;
|
|
66
|
+
this.showExcel = false;
|
|
67
|
+
this.uploadedFiles = [];
|
|
68
|
+
this.fileResponse = [];
|
|
69
|
+
this.memberId = 0;
|
|
70
|
+
this.organizationId = 0;
|
|
71
|
+
this.errorMessage = " invalid file error";
|
|
72
|
+
this.downloadStatus = 'NOT_DOWNLOADING';
|
|
73
|
+
this.downloadPercent = 0;
|
|
74
|
+
this.defaultOwner = '';
|
|
75
|
+
this.smileyMessage = `You're All Set! We're processing your request and you will be notified via email upon completion.`;
|
|
76
|
+
this.actionButtons = [
|
|
77
|
+
{ buttonText: 'Entrust More Responsibilities', class: 'white-btn', id: 'addMore' },
|
|
78
|
+
{ buttonText: (this.isNotificationPending) ? 'View Responsibilities In Queue' : 'View Responsibilities', class: 'blue-btn', id: 'view' },
|
|
79
|
+
];
|
|
80
|
+
this.showSmiley = false;
|
|
81
|
+
this.member_obj_id = '';
|
|
82
|
+
}
|
|
83
|
+
set uploadedFileData(data) {
|
|
84
|
+
this.uploadedFile(data);
|
|
85
|
+
}
|
|
86
|
+
ngOnChanges(changes) {
|
|
87
|
+
}
|
|
88
|
+
ngOnInit() {
|
|
89
|
+
this.pickerChanged.emit(false);
|
|
90
|
+
this.organizationId = this.authService.getOrganizationId();
|
|
91
|
+
this.memberId = this.authService.getMemberId();
|
|
92
|
+
this.member_obj_id = this.authService.getUserDetails()._id;
|
|
93
|
+
this.userInfo = this.authService.getUserDetails().user;
|
|
94
|
+
this.defaultOwner = (this.userInfo) ? this.userInfo.name + ' (' + this.userInfo.email + ')' : '';
|
|
95
|
+
this.getUserDetails();
|
|
96
|
+
this.authService.getOrganizationDetails().subscribe((res) => {
|
|
97
|
+
this.riskClassEnabled = res.enable_riskclass;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
triggerBrowseFile() {
|
|
101
|
+
const getFile = document.getElementById('fileInput');
|
|
102
|
+
if (getFile) {
|
|
103
|
+
getFile.click();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
getUserDetails() {
|
|
107
|
+
this.authService.getUserInfo().subscribe((res) => {
|
|
108
|
+
this.isNotificationPending = res.notification_pending_flag;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
uploadedFile(event, tabType) {
|
|
112
|
+
try {
|
|
113
|
+
this.responsibilityBulkUpload = {
|
|
114
|
+
header: [],
|
|
115
|
+
reports: [],
|
|
116
|
+
};
|
|
117
|
+
this.templateInfo = {
|
|
118
|
+
categoryList: [],
|
|
119
|
+
rcList: [],
|
|
120
|
+
assignorsList: [],
|
|
121
|
+
assigneesList: [],
|
|
122
|
+
parentResponsibility: [],
|
|
123
|
+
memberId: ''
|
|
124
|
+
};
|
|
125
|
+
this.uploadedFiles = [];
|
|
126
|
+
const reference = document.querySelector('#scrollReference');
|
|
127
|
+
if (reference) {
|
|
128
|
+
reference.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
129
|
+
}
|
|
130
|
+
this.isFileEmpty = false;
|
|
131
|
+
this.isWrongFile = false;
|
|
132
|
+
this.isWrongFormat = false;
|
|
133
|
+
this.fileName = event.target.files[0].name;
|
|
134
|
+
this.uploadedFiles.push(event.target.files);
|
|
135
|
+
const target = event.target;
|
|
136
|
+
// tslint:disable-next-line: curly
|
|
137
|
+
if (target.files.length !== 1)
|
|
138
|
+
throw new Error('Cannot use multiple files');
|
|
139
|
+
const reader = new FileReader();
|
|
140
|
+
reader.onload = (e) => {
|
|
141
|
+
const bstr = e.target.result;
|
|
142
|
+
const wb = XLSX.read(bstr, { type: 'binary' });
|
|
143
|
+
const wsname = wb.SheetNames[0];
|
|
144
|
+
const sheet2 = wb.SheetNames[1];
|
|
145
|
+
const sheet3 = wb.SheetNames[2];
|
|
146
|
+
const wsname1 = wb.SheetNames[3];
|
|
147
|
+
const ws = wb.Sheets[wsname];
|
|
148
|
+
const sheetReport2 = wb.Sheets[sheet2];
|
|
149
|
+
const sheetReport3 = wb.Sheets[sheet3];
|
|
150
|
+
const tempData = wb.Sheets[wsname1];
|
|
151
|
+
const tData = XLSX.utils.sheet_to_json(tempData, { header: 1 });
|
|
152
|
+
const tempList = tData.filter((dataElement) => dataElement.length > 0);
|
|
153
|
+
this.setOrganizationDetails(tempList);
|
|
154
|
+
wb.SheetNames.forEach((sheet) => {
|
|
155
|
+
switch (sheet === null || sheet === void 0 ? void 0 : sheet.toLowerCase()) {
|
|
156
|
+
case 'frequency responsibilities':
|
|
157
|
+
this.setDataForDifferentTabs(ws, sheet);
|
|
158
|
+
break;
|
|
159
|
+
case 'ongoing responsibilities':
|
|
160
|
+
this.setDataForDifferentTabs(sheetReport2, sheet);
|
|
161
|
+
break;
|
|
162
|
+
case 'on completion responsibilities':
|
|
163
|
+
this.setDataForDifferentTabs(sheetReport3, sheet);
|
|
164
|
+
break;
|
|
165
|
+
default: break;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
reader.readAsBinaryString(target.files[0]);
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
// tslint:disable-next-line: no-console
|
|
173
|
+
console.error(e);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* It takes a worksheet and a sheet name, and then it sets the data for different tabs.
|
|
178
|
+
* @param ws - XLSX.WorkSheet, sheet: string
|
|
179
|
+
* @param {string} sheet - string - the name of the sheet in the excel file
|
|
180
|
+
* @returns the value of the variable "responsibilityBulkUpload" which is an object.
|
|
181
|
+
*/
|
|
182
|
+
setDataForDifferentTabs(ws, sheet) {
|
|
183
|
+
var _a, _b, _c, _d, _e, _f;
|
|
184
|
+
let responsibilityBulkUpload = {
|
|
185
|
+
header: [],
|
|
186
|
+
reports: [],
|
|
187
|
+
subHeading: [],
|
|
188
|
+
};
|
|
189
|
+
let sheetValue = XLSX.utils.sheet_to_json(ws, {
|
|
190
|
+
header: 1, raw: false,
|
|
191
|
+
});
|
|
192
|
+
let data = sheetValue.filter((res) => {
|
|
193
|
+
let isUndefined = '';
|
|
194
|
+
res.forEach((el) => {
|
|
195
|
+
isUndefined = isUndefined + el;
|
|
196
|
+
});
|
|
197
|
+
if (sheetValue[4][1] === 'Program') {
|
|
198
|
+
return !((res === null || res === void 0 ? void 0 : res.length) === 9 && res[8] === '' && !isUndefined.length);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
return !((res === null || res === void 0 ? void 0 : res.length) === 6 && res[5] === '' && !isUndefined.length);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
if (this.fileName.substr(-5) !== '.xlsx') {
|
|
205
|
+
this.errorMessage = 'The incorrect file has been uploaded. Please upload the template which you downloaded from here.' + ' RETRY';
|
|
206
|
+
this.isWrongFile = true;
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
responsibilityBulkUpload.header = cloneDeep(data[4]);
|
|
210
|
+
responsibilityBulkUpload.subHeading = cloneDeep(data[5]);
|
|
211
|
+
data = data.slice(7);
|
|
212
|
+
if ((this.member_obj_id != this.templateInfo.memberId)) {
|
|
213
|
+
this.errorMessage = 'The incorrect file has been uploaded. Please upload the template which you downloaded from here.' + ' RETRY';
|
|
214
|
+
this.isWrongFile = true;
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const responsibilityData = data.filter((dataElement) => dataElement.length > 0);
|
|
218
|
+
responsibilityData.forEach((report) => {
|
|
219
|
+
let validDate;
|
|
220
|
+
const validUser = this.returnIds(report[2], 'entrusted_to') ? true : false;
|
|
221
|
+
if (responsibilityBulkUpload.header[1] === 'Program') {
|
|
222
|
+
validDate = this.compareWithCurrentDate(report[4], report[5]);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
validDate = this.compareWithCurrentDate(report[5], report[6]);
|
|
226
|
+
}
|
|
227
|
+
/* Pushing the report details into the bulkUpload object as per tab tabs */
|
|
228
|
+
if ((sheet === null || sheet === void 0 ? void 0 : sheet.toLowerCase()) === 'frequency responsibilities') {
|
|
229
|
+
responsibilityBulkUpload.reports.push(this.setReportDetails(report, 'frequency', responsibilityBulkUpload.header[1] === 'Program' ? true : false));
|
|
230
|
+
this.bulkUpload.frequency.header = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.header;
|
|
231
|
+
this.bulkUpload.frequency.subHeading = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.subHeading;
|
|
232
|
+
this.bulkUpload.frequency.reports = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.reports;
|
|
233
|
+
}
|
|
234
|
+
if ((sheet === null || sheet === void 0 ? void 0 : sheet.toLowerCase()) === 'ongoing responsibilities') {
|
|
235
|
+
responsibilityBulkUpload.reports.push(this.setReportDetails(report, 'ongoing', responsibilityBulkUpload.header[1] === 'Program' ? true : false));
|
|
236
|
+
this.bulkUpload.ongoing.header = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.header;
|
|
237
|
+
this.bulkUpload.ongoing.subHeading = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.subHeading;
|
|
238
|
+
this.bulkUpload.ongoing.reports = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.reports;
|
|
239
|
+
}
|
|
240
|
+
if ((sheet === null || sheet === void 0 ? void 0 : sheet.toLowerCase()) === 'on completion responsibilities') {
|
|
241
|
+
responsibilityBulkUpload.reports.push(this.setReportDetails(report, 'onCompletion', responsibilityBulkUpload.header[1] === 'Program' ? true : false));
|
|
242
|
+
this.bulkUpload.onCompletion.header = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.header;
|
|
243
|
+
this.bulkUpload.onCompletion.subHeading = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.subHeading;
|
|
244
|
+
this.bulkUpload.onCompletion.reports = responsibilityBulkUpload === null || responsibilityBulkUpload === void 0 ? void 0 : responsibilityBulkUpload.reports;
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
const isEmpty = this.checkEmptyFile(data);
|
|
248
|
+
/* Checking if the file is empty, if it is empty it will return an error message. If it is not
|
|
249
|
+
empty it will check if the file is the correct file, if it is not the correct file it will
|
|
250
|
+
return an error message. If it is the correct file it will call the fileUpload() function. */
|
|
251
|
+
if (isEmpty) {
|
|
252
|
+
this.errorMessage = 'You have uploaded a blank template. Please add details for all mandatory fields. RETRY';
|
|
253
|
+
this.isFileEmpty = true;
|
|
254
|
+
this.isWrongFile = false;
|
|
255
|
+
this.isWrongFormat = false;
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
else if (((_b = (_a = this.bulkUpload) === null || _a === void 0 ? void 0 : _a.frequency) === null || _b === void 0 ? void 0 : _b.header[0]) !== 'Responsibility Name*' && ((_d = (_c = this.bulkUpload) === null || _c === void 0 ? void 0 : _c.ongoing) === null || _d === void 0 ? void 0 : _d.header[0]) !== 'Responsibility Name*' && ((_f = (_e = this.bulkUpload) === null || _e === void 0 ? void 0 : _e.onCompletion) === null || _f === void 0 ? void 0 : _f.header[0]) !== 'Responsibility Name*') {
|
|
259
|
+
this.errorMessage = 'The incorrect file has been uploaded. Please upload the template which you downloaded from here.' + ' RETRY';
|
|
260
|
+
this.isWrongFile = false;
|
|
261
|
+
this.isWrongFormat = true;
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
this.isFileEmpty = false;
|
|
266
|
+
this.isWrongFile = false;
|
|
267
|
+
this.isWrongFormat = false;
|
|
268
|
+
this.fileUpload();
|
|
269
|
+
}
|
|
270
|
+
this.isFileEmpty = false;
|
|
271
|
+
this.isWrongFile = false;
|
|
272
|
+
this.isWrongFormat = false;
|
|
273
|
+
this.showExcel = true;
|
|
274
|
+
this.fileValue = '';
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* If the bulkUpload object has a frequency object with a reports array, set the
|
|
278
|
+
* responsibilityBulkUpload to the frequency object and set the tabType to frequency. If not, check
|
|
279
|
+
* if the bulkUpload object has an ongoing object with a reports array, set the
|
|
280
|
+
* responsibilityBulkUpload to the ongoing object and set the tabType to ongoing. If not, check if
|
|
281
|
+
* the bulkUpload object has an onCompletion object with a reports array, set the
|
|
282
|
+
* responsibilityBulkUpload to the onCompletion object and set the tabType to onCompletion. If not,
|
|
283
|
+
* return true.
|
|
284
|
+
* </code>
|
|
285
|
+
* @param {any} data - any = {
|
|
286
|
+
* @returns a boolean value.
|
|
287
|
+
*/
|
|
288
|
+
checkEmptyFile(data) {
|
|
289
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
290
|
+
let isEmpty = false;
|
|
291
|
+
if ((_c = (_b = (_a = this.bulkUpload) === null || _a === void 0 ? void 0 : _a.frequency) === null || _b === void 0 ? void 0 : _b.reports) === null || _c === void 0 ? void 0 : _c.length) {
|
|
292
|
+
this.responsibilityBulkUpload = (_d = this.bulkUpload) === null || _d === void 0 ? void 0 : _d.frequency;
|
|
293
|
+
this.tabType = 'frequency';
|
|
294
|
+
}
|
|
295
|
+
else if ((_g = (_f = (_e = this.bulkUpload) === null || _e === void 0 ? void 0 : _e.ongoing) === null || _f === void 0 ? void 0 : _f.reports) === null || _g === void 0 ? void 0 : _g.length) {
|
|
296
|
+
this.responsibilityBulkUpload = (_h = this.bulkUpload) === null || _h === void 0 ? void 0 : _h.ongoing;
|
|
297
|
+
this.tabType = 'ongoing';
|
|
298
|
+
}
|
|
299
|
+
else if ((_l = (_k = (_j = this.bulkUpload) === null || _j === void 0 ? void 0 : _j.onCompletion) === null || _k === void 0 ? void 0 : _k.reports) === null || _l === void 0 ? void 0 : _l.length) {
|
|
300
|
+
this.responsibilityBulkUpload = (_m = this.bulkUpload) === null || _m === void 0 ? void 0 : _m.onCompletion;
|
|
301
|
+
this.tabType = 'onCompletion';
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
isEmpty = true;
|
|
305
|
+
}
|
|
306
|
+
return isEmpty;
|
|
307
|
+
}
|
|
308
|
+
compareWithCurrentDate(day, month) {
|
|
309
|
+
var _a;
|
|
310
|
+
const currentDate = new Date();
|
|
311
|
+
const monthNames = [
|
|
312
|
+
{ value: 1, month: 'Jan' },
|
|
313
|
+
{ value: 2, month: 'Feb' },
|
|
314
|
+
{ value: 3, month: 'Mar' },
|
|
315
|
+
{ value: 4, month: 'Apr' },
|
|
316
|
+
{ value: 5, month: 'May' },
|
|
317
|
+
{ value: 6, month: 'Jun' },
|
|
318
|
+
{ value: 7, month: 'Jul' },
|
|
319
|
+
{ value: 8, month: 'Aug' },
|
|
320
|
+
{ value: 9, month: 'Sep' },
|
|
321
|
+
{ value: 10, month: 'Oct' },
|
|
322
|
+
{ value: 11, month: 'Nov' },
|
|
323
|
+
{ value: 12, month: 'Dec' },
|
|
324
|
+
];
|
|
325
|
+
if (!(day || month)) {
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
else if (!(day && month)) {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
const monthAndYear = month.split("'");
|
|
333
|
+
const startDate = moment(day + '-' + monthAndYear[0] + '-' + 20 + monthAndYear[1] + ' 00:00:00', 'DD-MMMM-YYYY HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');
|
|
334
|
+
if (startDate == "Invalid date") {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
setTimeout(() => {
|
|
338
|
+
}, 5);
|
|
339
|
+
const date_value = new Date();
|
|
340
|
+
date_value.setMonth(typeof month !== 'number' ? ((_a = monthNames.filter((x) => x.month === (month === null || month === void 0 ? void 0 : month.substring(0, 3)))[0]) === null || _a === void 0 ? void 0 : _a.value) - 1 : month);
|
|
341
|
+
date_value.setFullYear(Number(20 + month.split("'")[1]));
|
|
342
|
+
date_value.setDate(Number(day));
|
|
343
|
+
// const reportDate = new Date(day + month.split("'"));
|
|
344
|
+
// console.log((currentDate.toJSON().split('T')[0])+"&&"+(date_value.toJSON().split('T')[0]))
|
|
345
|
+
// debugger
|
|
346
|
+
if (((currentDate.toJSON().split('T')[0]) != (date_value.toJSON().split('T')[0])) && (currentDate > date_value)) {
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
isPastDate(day, month) {
|
|
355
|
+
var _a;
|
|
356
|
+
const currentDate = new Date();
|
|
357
|
+
const monthNames = [
|
|
358
|
+
{ value: 1, month: 'Jan' },
|
|
359
|
+
{ value: 2, month: 'Feb' },
|
|
360
|
+
{ value: 3, month: 'Mar' },
|
|
361
|
+
{ value: 4, month: 'Apr' },
|
|
362
|
+
{ value: 5, month: 'May' },
|
|
363
|
+
{ value: 6, month: 'Jun' },
|
|
364
|
+
{ value: 7, month: 'Jul' },
|
|
365
|
+
{ value: 8, month: 'Aug' },
|
|
366
|
+
{ value: 9, month: 'Sep' },
|
|
367
|
+
{ value: 10, month: 'Oct' },
|
|
368
|
+
{ value: 11, month: 'Nov' },
|
|
369
|
+
{ value: 12, month: 'Dec' },
|
|
370
|
+
];
|
|
371
|
+
if (!(day || month)) {
|
|
372
|
+
return false;
|
|
373
|
+
}
|
|
374
|
+
else if (!(day && month)) {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
// const reportDate = new Date(day + month.split("'"));
|
|
379
|
+
const date_value = new Date();
|
|
380
|
+
date_value.setMonth(typeof month !== 'number' ? ((_a = monthNames.filter((x) => x.month === (month === null || month === void 0 ? void 0 : month.substring(0, 3)))[0]) === null || _a === void 0 ? void 0 : _a.value) - 1 : month);
|
|
381
|
+
date_value.setFullYear(Number(20 + month.split("'")[1]));
|
|
382
|
+
date_value.setDate(Number(day));
|
|
383
|
+
if (currentDate > date_value) {
|
|
384
|
+
return true;
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
downloadTemplate() {
|
|
392
|
+
this.downloadStatus = 'DOWNLOADING';
|
|
393
|
+
this.downloadPercent = 0;
|
|
394
|
+
const downloadDate = new Date().toDateString().split(' ');
|
|
395
|
+
const fileName = `Entrust Responsibilities-${downloadDate[2]}-${downloadDate[1]}-${downloadDate[3]}.xlsx`;
|
|
396
|
+
this.riskService.downloadResponsibilityTemplate().subscribe((data) => {
|
|
397
|
+
if (data.loaded) {
|
|
398
|
+
this.downloadPercent = 100 * (data.loaded / data.total);
|
|
399
|
+
}
|
|
400
|
+
if (data.body) {
|
|
401
|
+
setTimeout(() => {
|
|
402
|
+
this.downloadStatus = this.riskService.downLoadFile(data.body, 'application/xlsx', fileName);
|
|
403
|
+
}, 1500);
|
|
404
|
+
}
|
|
405
|
+
}, (error) => {
|
|
406
|
+
console.error(error);
|
|
407
|
+
this.downloadStatus = 'DOWNLOADED';
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
submitResponsibilityBulkUpload() {
|
|
411
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
412
|
+
this.loader = true;
|
|
413
|
+
const payload = [];
|
|
414
|
+
const frequencyTypeArray = ['1', '2', '3', '4', '7', '0', '6'];
|
|
415
|
+
const defaultWindow = [0, 2, 7, 30, 7, 15, 3];
|
|
416
|
+
const defaultFailedDay = [1, 2, 5, 5, 5, 5, 5];
|
|
417
|
+
// this.bulkUpload?.frequency
|
|
418
|
+
let responsibilityBulkUpload = (_c = (_b = (_a = this.bulkUpload) === null || _a === void 0 ? void 0 : _a.frequency) === null || _b === void 0 ? void 0 : _b.reports) === null || _c === void 0 ? void 0 : _c.concat((_e = (_d = this.bulkUpload) === null || _d === void 0 ? void 0 : _d.ongoing) === null || _e === void 0 ? void 0 : _e.reports, (_g = (_f = this.bulkUpload) === null || _f === void 0 ? void 0 : _f.onCompletion) === null || _g === void 0 ? void 0 : _g.reports);
|
|
419
|
+
// this.responsibilityBulkUpload.reports.forEach((report: any) => {
|
|
420
|
+
responsibilityBulkUpload.forEach((report) => {
|
|
421
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
|
|
422
|
+
if (report.isValid) {
|
|
423
|
+
if ((report === null || report === void 0 ? void 0 : report.responsibilityCategory) === null) {
|
|
424
|
+
report.responsibilityCategory = '';
|
|
425
|
+
}
|
|
426
|
+
const rcDetails = this.returnIds(report === null || report === void 0 ? void 0 : report.responsibilityCenter, 'rc_id');
|
|
427
|
+
const reviewerDetails = this.returnIds(report === null || report === void 0 ? void 0 : report.reviewer, 'reviewer');
|
|
428
|
+
const assignorDetails = (report === null || report === void 0 ? void 0 : report.assignor) ? this.returnIds(report === null || report === void 0 ? void 0 : report.assignor, 'assignor') : '';
|
|
429
|
+
// const ccDetails: any = this.returnIds(report.alwaysNotify, 'cc');
|
|
430
|
+
const ccDetails = this.returnIds(report === null || report === void 0 ? void 0 : report.overseer, 'cc');
|
|
431
|
+
const ccFailureDetails = this.returnIds(report.notifyOnFailure, 'ccFailure');
|
|
432
|
+
const currentDate = moment().format('YYYY-MM-DD');
|
|
433
|
+
// const categoryName = (report.responsibilityCategory.includes('[WITHIN]')) ? report.responsibilityCategory.split(' [')[0] : report.responsibilityCategory
|
|
434
|
+
let ongoingReminderType = { 'Weekly': 1, 'Monthly': 2, 'Quarterly': 3 };
|
|
435
|
+
const ongoingValues = {
|
|
436
|
+
setReminder: report === null || report === void 0 ? void 0 : report.setReminder,
|
|
437
|
+
frequencyReminder: ongoingReminderType[report === null || report === void 0 ? void 0 : report.frequencyReminder]
|
|
438
|
+
};
|
|
439
|
+
const frequencyValue = this.frequencyService.shortHand_freqCal(report === null || report === void 0 ? void 0 : report.frequency, report === null || report === void 0 ? void 0 : report.day, report === null || report === void 0 ? void 0 : report.month, '', report === null || report === void 0 ? void 0 : report.dueDate, ongoingValues);
|
|
440
|
+
// const frequencyValue = this.frequencyService.shortHand_freqCal(report?.frequency, report?.day, report?.month, '');
|
|
441
|
+
const dateAndMonth = (_a = report === null || report === void 0 ? void 0 : report.month) === null || _a === void 0 ? void 0 : _a.split("'");
|
|
442
|
+
const startDate = dateAndMonth ? moment((report === null || report === void 0 ? void 0 : report.day) + '-' + dateAndMonth[0] + '-' + 20 + dateAndMonth[1] + ' 00:00:00', 'DD-MMMM-YYYY HH:mm:ss').format('YYYY-MM-DD HH:mm:ss') : '';
|
|
443
|
+
let completeDays;
|
|
444
|
+
let notCompleteDays;
|
|
445
|
+
const frequencyType = frequencyValue === null || frequencyValue === void 0 ? void 0 : frequencyValue.split('~')[0];
|
|
446
|
+
if (report.responsibilityWindow && report.responsibilityWindow !== '') {
|
|
447
|
+
completeDays = report === null || report === void 0 ? void 0 : report.responsibilityWindow;
|
|
448
|
+
}
|
|
449
|
+
else if (frequencyTypeArray === null || frequencyTypeArray === void 0 ? void 0 : frequencyTypeArray.includes(frequencyType)) {
|
|
450
|
+
const indexOfArray = frequencyTypeArray === null || frequencyTypeArray === void 0 ? void 0 : frequencyTypeArray.indexOf(frequencyType);
|
|
451
|
+
completeDays = defaultWindow[indexOfArray];
|
|
452
|
+
}
|
|
453
|
+
if ((report === null || report === void 0 ? void 0 : report.failedAfter) && (report === null || report === void 0 ? void 0 : report.failedAfter) !== '') {
|
|
454
|
+
notCompleteDays = report === null || report === void 0 ? void 0 : report.failedAfter;
|
|
455
|
+
}
|
|
456
|
+
else if (frequencyTypeArray.includes(frequencyType)) {
|
|
457
|
+
const indexOfArray = frequencyTypeArray === null || frequencyTypeArray === void 0 ? void 0 : frequencyTypeArray.indexOf(frequencyType);
|
|
458
|
+
notCompleteDays = defaultFailedDay[indexOfArray];
|
|
459
|
+
}
|
|
460
|
+
const obj = {
|
|
461
|
+
userId: (_b = this.templateInfo) === null || _b === void 0 ? void 0 : _b.memberId,
|
|
462
|
+
organisation_id: this.organizationId,
|
|
463
|
+
member_id: (assignorDetails) ? assignorDetails === null || assignorDetails === void 0 ? void 0 : assignorDetails.memberId : this.memberId,
|
|
464
|
+
member_name: (assignorDetails) ? ((report === null || report === void 0 ? void 0 : report.assignor) ? report === null || report === void 0 ? void 0 : report.assignor.split(' (')[0] : '') : ((this.defaultOwner) ? (_c = this.defaultOwner) === null || _c === void 0 ? void 0 : _c.split(' (')[0] : ''),
|
|
465
|
+
member_email: (assignorDetails) ? ((report === null || report === void 0 ? void 0 : report.assignor) ? (_e = (_d = report === null || report === void 0 ? void 0 : report.assignor) === null || _d === void 0 ? void 0 : _d.split(' (')[1]) === null || _e === void 0 ? void 0 : _e.replace(')', '') : '') : ((this.defaultOwner) ? (_f = this.defaultOwner) === null || _f === void 0 ? void 0 : _f.split(' (')[1].replace(')', '') : ''),
|
|
466
|
+
created_by: (assignorDetails) ? this.memberId : 0,
|
|
467
|
+
report_name: (_g = report === null || report === void 0 ? void 0 : report.responsibilityName) !== null && _g !== void 0 ? _g : '',
|
|
468
|
+
entrusted_to: (_j = (_h = report === null || report === void 0 ? void 0 : report.assignee) === null || _h === void 0 ? void 0 : _h.split(' (')[0]) !== null && _j !== void 0 ? _j : '',
|
|
469
|
+
entrusted_to_id: this.returnIds(report === null || report === void 0 ? void 0 : report.assignee, 'entrusted_to'),
|
|
470
|
+
email_address: (_m = (_l = (_k = report === null || report === void 0 ? void 0 : report.assignee) === null || _k === void 0 ? void 0 : _k.split(' (')[1]) === null || _l === void 0 ? void 0 : _l.replace(')', '')) !== null && _m !== void 0 ? _m : '',
|
|
471
|
+
isGroupAssignTo: ((_o = report === null || report === void 0 ? void 0 : report.assigneeType) === null || _o === void 0 ? void 0 : _o.includes('Any')) ? 1 : 0,
|
|
472
|
+
// category_name: categoryName,
|
|
473
|
+
category_name_with_tree: '',
|
|
474
|
+
category_id: (_q = (_p = this.getProgramId(report === null || report === void 0 ? void 0 : report.program, report === null || report === void 0 ? void 0 : report.programCategory).categoryId) === null || _p === void 0 ? void 0 : _p.toString()) !== null && _q !== void 0 ? _q : '',
|
|
475
|
+
program_cat_ids: ((_r = this.getProgramId(report === null || report === void 0 ? void 0 : report.program, report === null || report === void 0 ? void 0 : report.programCategory)) === null || _r === void 0 ? void 0 : _r.childProgramId) ? [(_s = this.getProgramId(report === null || report === void 0 ? void 0 : report.program, report === null || report === void 0 ? void 0 : report.programCategory)) === null || _s === void 0 ? void 0 : _s.childProgramId] : [],
|
|
476
|
+
rc_name: rcDetails ? rcDetails === null || rcDetails === void 0 ? void 0 : rcDetails.name : '',
|
|
477
|
+
rc_id: rcDetails ? rcDetails === null || rcDetails === void 0 ? void 0 : rcDetails.rcId : 0,
|
|
478
|
+
entity_tree: (rcDetails && (rcDetails === null || rcDetails === void 0 ? void 0 : rcDetails.rcId)) ? [{
|
|
479
|
+
parent_rc_ids: rcDetails ? rcDetails === null || rcDetails === void 0 ? void 0 : rcDetails.parentIds : [],
|
|
480
|
+
rc_id: rcDetails ? rcDetails === null || rcDetails === void 0 ? void 0 : rcDetails.rcId : 0
|
|
481
|
+
}] : [],
|
|
482
|
+
frequency_handler: frequencyValue,
|
|
483
|
+
compliance_type: frequencyValue === null || frequencyValue === void 0 ? void 0 : frequencyValue.split('~')[0],
|
|
484
|
+
frequency_description: report === null || report === void 0 ? void 0 : report.frequency,
|
|
485
|
+
start_date: (report === null || report === void 0 ? void 0 : report.day) ? startDate : currentDate + ' 00:00:00',
|
|
486
|
+
risk_class: (_t = report === null || report === void 0 ? void 0 : report.reportClass) !== null && _t !== void 0 ? _t : '',
|
|
487
|
+
risk_classId: (report === null || report === void 0 ? void 0 : report.reportClass) ? this.returnIds(report === null || report === void 0 ? void 0 : report.reportClass, 'risk_class') : ((this.riskClassEnabled) ? 1 : 2),
|
|
488
|
+
doc_utc: 0,
|
|
489
|
+
comment: (_u = report === null || report === void 0 ? void 0 : report.notes) !== null && _u !== void 0 ? _u : '',
|
|
490
|
+
cc_mail: ccDetails ? ccDetails === null || ccDetails === void 0 ? void 0 : ccDetails.email : '',
|
|
491
|
+
cc_mail_id: ccDetails ? ccDetails === null || ccDetails === void 0 ? void 0 : ccDetails.employeeId : '',
|
|
492
|
+
cc_failed_mail: ccFailureDetails ? ccFailureDetails === null || ccFailureDetails === void 0 ? void 0 : ccFailureDetails.email : '',
|
|
493
|
+
cc_failure_id: ccFailureDetails ? ccFailureDetails === null || ccFailureDetails === void 0 ? void 0 : ccFailureDetails.employeeId : 0,
|
|
494
|
+
send_reminder: "",
|
|
495
|
+
responsibilityWindow: (frequencyType === '1') ? 0 : completeDays,
|
|
496
|
+
failed_after: notCompleteDays,
|
|
497
|
+
excel_sheet_name: "",
|
|
498
|
+
report_upload_flag: (((report === null || report === void 0 ? void 0 : report.isFormat) === 'Yes') && ((_v = report === null || report === void 0 ? void 0 : report.formatForResponsibility) === null || _v === void 0 ? void 0 : _v.length)) ? 1 : 0,
|
|
499
|
+
report_id: 0,
|
|
500
|
+
is_assigned_flag: 0,
|
|
501
|
+
private_library_id: 0,
|
|
502
|
+
keycompliance: ((report === null || report === void 0 ? void 0 : report.keyResponsibility) === 'Yes') ? 'Yes' : 'No',
|
|
503
|
+
key_compliance: ((report === null || report === void 0 ? void 0 : report.keyResponsibility) === 'Yes') ? 1 : 0,
|
|
504
|
+
reviewerId: reviewerDetails ? reviewerDetails === null || reviewerDetails === void 0 ? void 0 : reviewerDetails.employeeId : 0,
|
|
505
|
+
reviewer_arr: (reviewerDetails && (reviewerDetails === null || reviewerDetails === void 0 ? void 0 : reviewerDetails.employeeId)) ? {
|
|
506
|
+
level1: {
|
|
507
|
+
reviewers: [{
|
|
508
|
+
member_id: reviewerDetails ? reviewerDetails === null || reviewerDetails === void 0 ? void 0 : reviewerDetails.employeeId : 0,
|
|
509
|
+
reviewer_accept: 0
|
|
510
|
+
}],
|
|
511
|
+
type: "SEQUENTIAL"
|
|
512
|
+
}
|
|
513
|
+
} : {},
|
|
514
|
+
reviewerWindow: ((report === null || report === void 0 ? void 0 : report.reviewToBeCompletedWithin) && (report === null || report === void 0 ? void 0 : report.reviewToBeCompletedWithin) !== '') ? report === null || report === void 0 ? void 0 : report.reviewToBeCompletedWithin : 2,
|
|
515
|
+
reviewerFailure: ((report === null || report === void 0 ? void 0 : report.reviewWillBeFailedAfter) && (report === null || report === void 0 ? void 0 : report.reviewWillBeFailedAfter) !== '') ? report === null || report === void 0 ? void 0 : report.reviewWillBeFailedAfter : 2,
|
|
516
|
+
reviewer_email: reviewerDetails ? reviewerDetails === null || reviewerDetails === void 0 ? void 0 : reviewerDetails.email : '',
|
|
517
|
+
formatForResponsibility: (report === null || report === void 0 ? void 0 : report.formatForResponsibility) ? report.formatForResponsibility : '',
|
|
518
|
+
documentaryEvidence: (_w = report === null || report === void 0 ? void 0 : report.evidenceNotes) !== null && _w !== void 0 ? _w : '',
|
|
519
|
+
isdocumentaryEvidence: (report.documentEvidenceRequired === 'Yes') ? 1 : 0,
|
|
520
|
+
objective: (_x = report.objective) !== null && _x !== void 0 ? _x : '',
|
|
521
|
+
excel_sheet_info: this.fileResponse,
|
|
522
|
+
showList: false,
|
|
523
|
+
custom_tags: '[]',
|
|
524
|
+
questionnaire_type: '',
|
|
525
|
+
on_completion_of_type: ((report === null || report === void 0 ? void 0 : report.frequency) === 'On Completion of' || ((_y = report === null || report === void 0 ? void 0 : report.frequency) === null || _y === void 0 ? void 0 : _y.toLowerCase()) === 'ongoing') ? 1 : 0,
|
|
526
|
+
on_completion_of: this.returnIds(report === null || report === void 0 ? void 0 : report.parentResponsibility, 'parentResponsibility') ? [this.returnIds(report === null || report === void 0 ? void 0 : report.parentResponsibility, 'parentResponsibility')] : [],
|
|
527
|
+
};
|
|
528
|
+
payload.push(obj);
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
// console.log("payloadpayload",payload, "responsibilityBulkUpload ==>", responsibilityBulkUpload )
|
|
532
|
+
this.responsibilityService.addBulkResponsibility(payload).subscribe((res) => {
|
|
533
|
+
this.loader = false;
|
|
534
|
+
this.showExcel = false;
|
|
535
|
+
this.showSmiley = true;
|
|
536
|
+
this.responsibilityData = res;
|
|
537
|
+
}, err => {
|
|
538
|
+
console.log(err);
|
|
539
|
+
this.loader = false;
|
|
540
|
+
this.showExcel = false;
|
|
541
|
+
this.snackBar.show('OOPS! Something went wrong and the page could not be loaded. Could you please try one more time?', 'alert');
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
returnIds(item, key) {
|
|
545
|
+
switch (key) {
|
|
546
|
+
case 'rc_id':
|
|
547
|
+
let rcObj = { name: '', rcId: 0, parentIds: [] };
|
|
548
|
+
this.templateInfo.rcList.forEach((rc_element) => {
|
|
549
|
+
if (rc_element.name == item) {
|
|
550
|
+
let name;
|
|
551
|
+
if (rc_element.name.includes('[WITHIN]')) {
|
|
552
|
+
name = rc_element.name.split(' [WITHIN] ')[0];
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
name = rc_element.name;
|
|
556
|
+
}
|
|
557
|
+
rcObj = { name, rcId: rc_element.rc_id, parentIds: rc_element.parentIds };
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
return rcObj;
|
|
561
|
+
break;
|
|
562
|
+
case 'reviewer':
|
|
563
|
+
let reviewerObj = { name: '', employeeId: 0, email: '' };
|
|
564
|
+
this.templateInfo.assigneesList.forEach((reviewerElement) => {
|
|
565
|
+
if (reviewerElement.nameAndEmail == item) {
|
|
566
|
+
reviewerObj = {
|
|
567
|
+
name: reviewerElement.name,
|
|
568
|
+
employeeId: reviewerElement.my_member_id,
|
|
569
|
+
email: reviewerElement.email
|
|
570
|
+
};
|
|
571
|
+
}
|
|
572
|
+
});
|
|
573
|
+
return reviewerObj;
|
|
574
|
+
break;
|
|
575
|
+
case 'assignor':
|
|
576
|
+
let assignorObj = { name: '', memberId: 0, email: '' };
|
|
577
|
+
this.templateInfo.assignorsList.forEach((assignorElement) => {
|
|
578
|
+
if (assignorElement.nameAndEmail == item) {
|
|
579
|
+
assignorObj = {
|
|
580
|
+
name: assignorElement.name,
|
|
581
|
+
email: assignorElement.email,
|
|
582
|
+
memberId: assignorElement.member_id
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
return assignorObj;
|
|
587
|
+
break;
|
|
588
|
+
case 'cc':
|
|
589
|
+
let ccObj = { name: '', employeeId: 0, email: '' };
|
|
590
|
+
this.templateInfo.assigneesList.forEach((ccElement) => {
|
|
591
|
+
if (ccElement.nameAndEmail == item) {
|
|
592
|
+
ccObj = {
|
|
593
|
+
name: ccElement.name,
|
|
594
|
+
employeeId: ccElement.employee_id,
|
|
595
|
+
email: ccElement.email
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
return ccObj;
|
|
600
|
+
break;
|
|
601
|
+
case 'ccFailure':
|
|
602
|
+
let ccfObj = { name: '', employeeId: 0, email: '' };
|
|
603
|
+
this.templateInfo.assigneesList.forEach((ccfElement) => {
|
|
604
|
+
if (ccfElement.nameAndEmail == item) {
|
|
605
|
+
ccfObj = {
|
|
606
|
+
name: ccfElement.name,
|
|
607
|
+
employeeId: ccfElement.employee_id,
|
|
608
|
+
email: ccfElement.email
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
});
|
|
612
|
+
return ccfObj;
|
|
613
|
+
break;
|
|
614
|
+
case 'entrusted_to':
|
|
615
|
+
let empId = 0;
|
|
616
|
+
this.templateInfo.assigneesList.forEach((enElement) => {
|
|
617
|
+
if (enElement.nameAndEmail == item) {
|
|
618
|
+
empId = enElement.employee_id;
|
|
619
|
+
}
|
|
620
|
+
});
|
|
621
|
+
return empId;
|
|
622
|
+
break;
|
|
623
|
+
case 'parentResponsibility':
|
|
624
|
+
let id = 0;
|
|
625
|
+
this.templateInfo.parentResponsibility.forEach((responsibility) => {
|
|
626
|
+
if ((responsibility === null || responsibility === void 0 ? void 0 : responsibility.name) === item) {
|
|
627
|
+
id = responsibility.id;
|
|
628
|
+
}
|
|
629
|
+
});
|
|
630
|
+
return id;
|
|
631
|
+
break;
|
|
632
|
+
case 'risk_class':
|
|
633
|
+
if (item == 'Low') {
|
|
634
|
+
return 1;
|
|
635
|
+
}
|
|
636
|
+
else if (item == 'Low-Medium') {
|
|
637
|
+
return 2;
|
|
638
|
+
}
|
|
639
|
+
else if (item == 'Medium-High') {
|
|
640
|
+
return 3;
|
|
641
|
+
}
|
|
642
|
+
else if (item == 'High') {
|
|
643
|
+
return 4;
|
|
644
|
+
}
|
|
645
|
+
else {
|
|
646
|
+
return 0;
|
|
647
|
+
}
|
|
648
|
+
break;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
reset() {
|
|
652
|
+
this.responsibilityBulkUpload = {
|
|
653
|
+
header: [],
|
|
654
|
+
reports: [],
|
|
655
|
+
};
|
|
656
|
+
this.bulkUpload = {
|
|
657
|
+
frequency: {
|
|
658
|
+
header: [],
|
|
659
|
+
subHeading: [],
|
|
660
|
+
reports: [],
|
|
661
|
+
},
|
|
662
|
+
ongoing: {
|
|
663
|
+
header: [],
|
|
664
|
+
subHeading: [],
|
|
665
|
+
reports: [],
|
|
666
|
+
},
|
|
667
|
+
onCompletion: {
|
|
668
|
+
header: [],
|
|
669
|
+
subHeading: [],
|
|
670
|
+
reports: [],
|
|
671
|
+
}
|
|
672
|
+
};
|
|
673
|
+
this.templateInfo = {
|
|
674
|
+
categoryList: [],
|
|
675
|
+
rcList: [],
|
|
676
|
+
assignorsList: [],
|
|
677
|
+
assigneesList: [],
|
|
678
|
+
memberId: ''
|
|
679
|
+
};
|
|
680
|
+
this.isFileEmpty = false;
|
|
681
|
+
this.isWrongFile = false;
|
|
682
|
+
this.isWrongFormat = false;
|
|
683
|
+
this.fileName = undefined;
|
|
684
|
+
this.data = undefined;
|
|
685
|
+
this.showExcel = false;
|
|
686
|
+
this.showSmiley = false;
|
|
687
|
+
this.closeAddMultipleResponsibility.emit();
|
|
688
|
+
}
|
|
689
|
+
action(event) {
|
|
690
|
+
switch (event) {
|
|
691
|
+
case 'addMore':
|
|
692
|
+
this.reset();
|
|
693
|
+
break;
|
|
694
|
+
case 'view':
|
|
695
|
+
this.viewResponsibilities();
|
|
696
|
+
break;
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
closeSmiley(event) {
|
|
700
|
+
this.showSmiley = false;
|
|
701
|
+
this.closeWorkflow.emit({ evt: this.responsibilityData, confirm: false });
|
|
702
|
+
}
|
|
703
|
+
viewResponsibilities() {
|
|
704
|
+
let url;
|
|
705
|
+
let urlSubstring = '';
|
|
706
|
+
this.disconnectRefresh.emit(false);
|
|
707
|
+
if (this.isNotificationPending) {
|
|
708
|
+
urlSubstring = 'compliance/manage-responsibilities/responsibilities-queue';
|
|
709
|
+
}
|
|
710
|
+
else {
|
|
711
|
+
urlSubstring = 'compliance/manage-responsibilities';
|
|
712
|
+
}
|
|
713
|
+
if (window.location.host.startsWith('localhost')) {
|
|
714
|
+
url = 'http://' + window.location.host + '/compliance/#/' + urlSubstring;
|
|
715
|
+
}
|
|
716
|
+
else {
|
|
717
|
+
url = 'https://' + window.location.host + '/compliance/#/' + urlSubstring;
|
|
718
|
+
}
|
|
719
|
+
window.location.href = url;
|
|
720
|
+
}
|
|
721
|
+
// Upload File to the server
|
|
722
|
+
fileUpload() {
|
|
723
|
+
this.loader = true;
|
|
724
|
+
const formData = new FormData();
|
|
725
|
+
const file = this.uploadedFiles[0][0];
|
|
726
|
+
formData.append('sourcefile', file);
|
|
727
|
+
formData.append('destination', 'bulkupload/entrust/' + this.userInfo.email);
|
|
728
|
+
this.responsibilityService.fileUpload(formData).subscribe((res) => {
|
|
729
|
+
if (res === null || res === void 0 ? void 0 : res.filename) {
|
|
730
|
+
this.fileResponse.push(res);
|
|
731
|
+
}
|
|
732
|
+
this.loader = false;
|
|
733
|
+
}, err => {
|
|
734
|
+
console.error(err);
|
|
735
|
+
this.loader = false;
|
|
736
|
+
this.snackBar.show('OOPS! Something went wrong and the page could not be loaded. Could you please try one more time?', 'alert');
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
setOrganizationDetails(tempList) {
|
|
740
|
+
var _a, _b;
|
|
741
|
+
if (tempList[0] !== undefined && tempList[0][18]) {
|
|
742
|
+
this.templateInfo.memberId = tempList[0][18];
|
|
743
|
+
}
|
|
744
|
+
else {
|
|
745
|
+
this.errorMessage = 'The incorrect file has been uploaded. Please upload the template which you downloaded from here.' + ' RETRY';
|
|
746
|
+
this.isWrongFile = true;
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
tempList.forEach((element) => {
|
|
750
|
+
var _a, _b, _c, _d;
|
|
751
|
+
/* Pushing the value of regulations Programs into the categoryList array. */
|
|
752
|
+
if (element[26] && typeof (element[26]) === 'number') {
|
|
753
|
+
const regulations = {
|
|
754
|
+
programName: element[22],
|
|
755
|
+
programId: element[26],
|
|
756
|
+
assignee: JSON.parse(element[30]),
|
|
757
|
+
reviewer: JSON.parse(element[31]),
|
|
758
|
+
overseer: (_a = JSON.parse(element[32])) === null || _a === void 0 ? void 0 : _a.concat(JSON.parse(element[33])),
|
|
759
|
+
programType: 1,
|
|
760
|
+
};
|
|
761
|
+
this.templateInfo.categoryList.push(regulations);
|
|
762
|
+
}
|
|
763
|
+
/* Pushing the value of standards Programs into the categoryList array. */
|
|
764
|
+
if (element[27] && typeof (element[27]) === 'number') {
|
|
765
|
+
const standards = {
|
|
766
|
+
programName: element[23],
|
|
767
|
+
programId: element[27],
|
|
768
|
+
assignee: JSON.parse(element[34]),
|
|
769
|
+
reviewer: JSON.parse(element[35]),
|
|
770
|
+
overseer: (_b = JSON.parse(element[36])) === null || _b === void 0 ? void 0 : _b.concat(JSON.parse(element[37])),
|
|
771
|
+
programType: 2,
|
|
772
|
+
};
|
|
773
|
+
this.templateInfo.categoryList.push(standards);
|
|
774
|
+
}
|
|
775
|
+
/* Pushing the value of internal Controls Programs into the categoryList array. */
|
|
776
|
+
if (element[28] && typeof (element[28]) === 'number') {
|
|
777
|
+
const internalControls = {
|
|
778
|
+
programName: element[24],
|
|
779
|
+
programId: element[28],
|
|
780
|
+
assignee: JSON.parse(element[38]),
|
|
781
|
+
reviewer: JSON.parse(element[39]),
|
|
782
|
+
overseer: (_c = JSON.parse(element[40])) === null || _c === void 0 ? void 0 : _c.concat(JSON.parse(element[41])),
|
|
783
|
+
programType: 3,
|
|
784
|
+
};
|
|
785
|
+
this.templateInfo.categoryList.push(internalControls);
|
|
786
|
+
}
|
|
787
|
+
/* Pushing the value of others Programs into the categoryList array. */
|
|
788
|
+
if (element[29] && typeof (element[29]) === 'number') {
|
|
789
|
+
const others = {
|
|
790
|
+
programName: element[25],
|
|
791
|
+
programId: element[29],
|
|
792
|
+
assignee: JSON.parse(element[42]),
|
|
793
|
+
reviewer: JSON.parse(element[43]),
|
|
794
|
+
overseer: (_d = JSON.parse(element[44])) === null || _d === void 0 ? void 0 : _d.concat(JSON.parse(element[45])),
|
|
795
|
+
programType: 0,
|
|
796
|
+
};
|
|
797
|
+
this.templateInfo.categoryList.push(others);
|
|
798
|
+
}
|
|
799
|
+
/* Checking if the element[9] is not null and not empty. If it is not null and not empty, it is
|
|
800
|
+
pushing the element[9] (RC) to the array (rcList). */
|
|
801
|
+
if (element[9] && element[9] != ' ') {
|
|
802
|
+
const rc = {
|
|
803
|
+
name: element[9],
|
|
804
|
+
rc_id: element[10],
|
|
805
|
+
parentIds: JSON.parse(element[11])
|
|
806
|
+
};
|
|
807
|
+
this.templateInfo.rcList.push(rc);
|
|
808
|
+
}
|
|
809
|
+
/* Checking if the element[2] is not empty and not equal to space. If it is not empty and not
|
|
810
|
+
equal to space, then it is pushing the assignee object to the assigneesList array. */
|
|
811
|
+
if (element[2] && element[2] != ' ') {
|
|
812
|
+
const assignee = {
|
|
813
|
+
nameAndEmail: element[2],
|
|
814
|
+
// name: element[11].split(' (')[0],
|
|
815
|
+
name: element[0],
|
|
816
|
+
email: element[1],
|
|
817
|
+
employee_id: element[3],
|
|
818
|
+
my_member_id: element[4]
|
|
819
|
+
};
|
|
820
|
+
this.templateInfo.assigneesList.push(assignee);
|
|
821
|
+
}
|
|
822
|
+
/* Checking if the element[2] is not empty and not equal to space. If it is not empty and not
|
|
823
|
+
equal to space, it will create an object and push it to the assignorsList array. */
|
|
824
|
+
if (element[2] && element[2] != ' ') {
|
|
825
|
+
const assignor = {
|
|
826
|
+
nameAndEmail: element[2],
|
|
827
|
+
name: element[0],
|
|
828
|
+
email: element[1],
|
|
829
|
+
// name: element[14].split(' (')[0],
|
|
830
|
+
// email: element[14].split(' (')[1].replace(')', ''),
|
|
831
|
+
member_id: element[4],
|
|
832
|
+
};
|
|
833
|
+
this.templateInfo.assignorsList.push(assignor);
|
|
834
|
+
}
|
|
835
|
+
/* Checking if the 17th element of the array is true. If it is, it is creating an object with the
|
|
836
|
+
16th element as the name and the 17th element as the id. */
|
|
837
|
+
if (element[17]) {
|
|
838
|
+
const parentResponsibility = {
|
|
839
|
+
name: element[16],
|
|
840
|
+
id: JSON.parse(element[17])
|
|
841
|
+
};
|
|
842
|
+
this.templateInfo.parentResponsibility.push(parentResponsibility);
|
|
843
|
+
}
|
|
844
|
+
});
|
|
845
|
+
/* Creating a list of child categories. and push the child categories to their parent program */
|
|
846
|
+
if ((_a = this.templateInfo.categoryList) === null || _a === void 0 ? void 0 : _a.length) {
|
|
847
|
+
(_b = this.templateInfo.categoryList) === null || _b === void 0 ? void 0 : _b.forEach((category, i) => {
|
|
848
|
+
var _a;
|
|
849
|
+
let index = (_a = tempList[0]) === null || _a === void 0 ? void 0 : _a.indexOf(category === null || category === void 0 ? void 0 : category.programId);
|
|
850
|
+
if (index !== -1) {
|
|
851
|
+
let childCategory = [];
|
|
852
|
+
/* Creating a list of child categories. */
|
|
853
|
+
for (let j = 1; true; j++) {
|
|
854
|
+
if (tempList[j][index]) {
|
|
855
|
+
const category = {
|
|
856
|
+
name: tempList[j][index - 1],
|
|
857
|
+
id: tempList[j][index],
|
|
858
|
+
};
|
|
859
|
+
childCategory.push(category);
|
|
860
|
+
}
|
|
861
|
+
else {
|
|
862
|
+
break;
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
this.templateInfo.categoryList[i]['childCategory'] = childCategory;
|
|
866
|
+
}
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
// console.log('this.uploadedFiles this.templateInfo',this.templateInfo, this.bulkUpload)
|
|
870
|
+
}
|
|
871
|
+
/**
|
|
872
|
+
* It takes an event, which is a string, and then it sets the responsibilityBulkUpload variable to
|
|
873
|
+
* the value of the bulkUpload variable, which is an object, and then it accesses the property of
|
|
874
|
+
* that object that matches the event string.
|
|
875
|
+
*
|
|
876
|
+
* So if the event string is 'frequency', then the responsibilityBulkUpload variable will be set to
|
|
877
|
+
* the value of the frequency property of the bulkUpload object.
|
|
878
|
+
*
|
|
879
|
+
* If the event string is 'ongoing', then the responsibilityBulkUpload variable will be set to the
|
|
880
|
+
* value of the ongoing property of the bulkUpload object.
|
|
881
|
+
*
|
|
882
|
+
* If the event string is 'onCompletion', then the responsibilityBulkUpload variable will be set to the
|
|
883
|
+
* value of the onCompletion property of the bulkUpload object.
|
|
884
|
+
*
|
|
885
|
+
* If the event string is anything else, then the responsibilityBulkUpload variable will be set to
|
|
886
|
+
* the value of the frequency property of the bulkUpload object.
|
|
887
|
+
* @param {string} event - string - the event that is emitted from the child component (frequency | ongoing | onCompletion)
|
|
888
|
+
*/
|
|
889
|
+
selectedTab(event) {
|
|
890
|
+
var _a, _b, _c, _d;
|
|
891
|
+
console.log('selectedTab', event);
|
|
892
|
+
this.tabType = event;
|
|
893
|
+
switch (event) {
|
|
894
|
+
case 'frequency':
|
|
895
|
+
this.responsibilityBulkUpload = (_a = this.bulkUpload) === null || _a === void 0 ? void 0 : _a.frequency;
|
|
896
|
+
break;
|
|
897
|
+
case 'ongoing':
|
|
898
|
+
this.responsibilityBulkUpload = (_b = this.bulkUpload) === null || _b === void 0 ? void 0 : _b.ongoing;
|
|
899
|
+
break;
|
|
900
|
+
case 'onCompletion':
|
|
901
|
+
this.responsibilityBulkUpload = (_c = this.bulkUpload) === null || _c === void 0 ? void 0 : _c.onCompletion;
|
|
902
|
+
break;
|
|
903
|
+
default:
|
|
904
|
+
this.responsibilityBulkUpload = (_d = this.bulkUpload) === null || _d === void 0 ? void 0 : _d.frequency;
|
|
905
|
+
break;
|
|
906
|
+
}
|
|
907
|
+
console.log('this.responsibilityBulkUpload', this.responsibilityBulkUpload, this.bulkUpload);
|
|
908
|
+
}
|
|
909
|
+
/**
|
|
910
|
+
* It takes in a report, a tab type, and a boolean value. It then returns an object with a bunch of
|
|
911
|
+
* properties.
|
|
912
|
+
* </code>
|
|
913
|
+
* @param {any} report - any => the array of data
|
|
914
|
+
* @param {string} tabType - string - this is the type of tab that is selected.
|
|
915
|
+
* @param {boolean} isProgram - boolean
|
|
916
|
+
* @returns An object with the following properties:
|
|
917
|
+
*/
|
|
918
|
+
setReportDetails(report, tabType, isProgram) {
|
|
919
|
+
var _a, _b, _c, _d;
|
|
920
|
+
let obj;
|
|
921
|
+
switch (tabType) {
|
|
922
|
+
case 'frequency': {
|
|
923
|
+
if (isProgram) {
|
|
924
|
+
obj = {
|
|
925
|
+
responsibilityName: report[0],
|
|
926
|
+
programType: report[1],
|
|
927
|
+
program: report[2],
|
|
928
|
+
programCategory: report[3],
|
|
929
|
+
assignor: report[4],
|
|
930
|
+
assignee: report[5],
|
|
931
|
+
assigneeType: report[6],
|
|
932
|
+
keyResponsibility: report[7],
|
|
933
|
+
responsibilityCategory: null,
|
|
934
|
+
frequency: report[8],
|
|
935
|
+
day: report[9],
|
|
936
|
+
month: report[10],
|
|
937
|
+
responsibilityWindow: report[11],
|
|
938
|
+
failedAfter: report[12],
|
|
939
|
+
responsibilityCenter: report[13],
|
|
940
|
+
reportClass: report[14],
|
|
941
|
+
objective: report[15],
|
|
942
|
+
notes: report[16],
|
|
943
|
+
isFormat: report[17],
|
|
944
|
+
formatForResponsibility: report[18],
|
|
945
|
+
documentEvidenceRequired: report[19],
|
|
946
|
+
// evidenceNotes: report[19],
|
|
947
|
+
assessments: report[20],
|
|
948
|
+
reviewer: report[21],
|
|
949
|
+
reviewToBeCompletedWithin: report[22],
|
|
950
|
+
overseer: report[23],
|
|
951
|
+
notifyOnFailure: report[24]
|
|
952
|
+
};
|
|
953
|
+
obj['isValidData'] = this.isValidData(obj);
|
|
954
|
+
obj['isValidUser'] = this.returnIds(obj === null || obj === void 0 ? void 0 : obj.assignee, 'entrusted_to') ? true : false;
|
|
955
|
+
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
956
|
+
obj['validDate'] = this.compareWithCurrentDate(obj === null || obj === void 0 ? void 0 : obj.day, obj === null || obj === void 0 ? void 0 : obj.month);
|
|
957
|
+
obj['isPastDate'] = this.isPastDate(obj === null || obj === void 0 ? void 0 : obj.day, obj === null || obj === void 0 ? void 0 : obj.month);
|
|
958
|
+
obj['isValid'] = obj['isValidData'] && obj['validDate'] && !obj['isPastDate'] && ((_a = obj === null || obj === void 0 ? void 0 : obj.frequency) === null || _a === void 0 ? void 0 : _a.length) && !Object.values(obj['userValidateWithProgram']).includes(false) && obj['isValidUser'];
|
|
959
|
+
return obj;
|
|
960
|
+
}
|
|
961
|
+
else {
|
|
962
|
+
obj = {
|
|
963
|
+
responsibilityName: report[0],
|
|
964
|
+
assignor: report[1],
|
|
965
|
+
assignee: report[2],
|
|
966
|
+
assigneeType: report[3],
|
|
967
|
+
keyResponsibility: report[4],
|
|
968
|
+
responsibilityCategory: null,
|
|
969
|
+
frequency: report[5],
|
|
970
|
+
day: report[6],
|
|
971
|
+
month: report[7],
|
|
972
|
+
responsibilityWindow: report[8],
|
|
973
|
+
failedAfter: report[9],
|
|
974
|
+
responsibilityCenter: report[10],
|
|
975
|
+
reportClass: report[11],
|
|
976
|
+
objective: report[12],
|
|
977
|
+
notes: report[13],
|
|
978
|
+
isFormat: report[14],
|
|
979
|
+
formatForResponsibility: report[15],
|
|
980
|
+
documentEvidenceRequired: report[16],
|
|
981
|
+
// evidenceNotes: report[16],
|
|
982
|
+
assessments: report[17],
|
|
983
|
+
reviewer: report[18],
|
|
984
|
+
reviewToBeCompletedWithin: report[19],
|
|
985
|
+
overseer: report[20],
|
|
986
|
+
notifyOnFailure: report[21]
|
|
987
|
+
};
|
|
988
|
+
obj['isValidData'] = this.isValidData(obj);
|
|
989
|
+
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
990
|
+
obj['isValidUser'] = this.returnIds(obj === null || obj === void 0 ? void 0 : obj.assignee, 'entrusted_to') ? true : false;
|
|
991
|
+
obj['validDate'] = this.compareWithCurrentDate(obj === null || obj === void 0 ? void 0 : obj.day, obj === null || obj === void 0 ? void 0 : obj.month);
|
|
992
|
+
obj['isPastDate'] = this.isPastDate(obj === null || obj === void 0 ? void 0 : obj.day, obj === null || obj === void 0 ? void 0 : obj.month);
|
|
993
|
+
obj['isValid'] = obj['isValidData'] && obj['validDate'] && !obj['isPastDate'] && ((_b = obj === null || obj === void 0 ? void 0 : obj.frequency) === null || _b === void 0 ? void 0 : _b.length) && obj['isValidUser'];
|
|
994
|
+
return obj;
|
|
995
|
+
}
|
|
996
|
+
break;
|
|
997
|
+
}
|
|
998
|
+
case 'ongoing': {
|
|
999
|
+
if (isProgram) {
|
|
1000
|
+
obj = {
|
|
1001
|
+
responsibilityName: report[0],
|
|
1002
|
+
programType: report[1],
|
|
1003
|
+
program: report[2],
|
|
1004
|
+
programCategory: report[3],
|
|
1005
|
+
assignor: report[4],
|
|
1006
|
+
assignee: report[5],
|
|
1007
|
+
assigneeType: report[6],
|
|
1008
|
+
keyResponsibility: report[7],
|
|
1009
|
+
responsibilityCategory: null,
|
|
1010
|
+
frequency: report[8],
|
|
1011
|
+
setReminder: report[9],
|
|
1012
|
+
frequencyReminder: report[10],
|
|
1013
|
+
responsibilityCenter: report[11],
|
|
1014
|
+
reportClass: report[12],
|
|
1015
|
+
objective: report[13],
|
|
1016
|
+
notes: report[14],
|
|
1017
|
+
isFormat: report[15],
|
|
1018
|
+
formatForResponsibility: report[16],
|
|
1019
|
+
documentEvidenceRequired: report[17],
|
|
1020
|
+
// evidenceNotes: report[17],
|
|
1021
|
+
assessments: report[18],
|
|
1022
|
+
reviewer: report[19],
|
|
1023
|
+
reviewToBeCompletedWithin: report[20],
|
|
1024
|
+
overseer: report[21],
|
|
1025
|
+
notifyOnFailure: report[22]
|
|
1026
|
+
};
|
|
1027
|
+
obj['isValidData'] = this.isValidData(obj);
|
|
1028
|
+
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1029
|
+
obj['isValidUser'] = this.returnIds(obj === null || obj === void 0 ? void 0 : obj.assignee, 'entrusted_to') ? true : false;
|
|
1030
|
+
obj['isValid'] = obj['isValidData'] && !Object.values(obj['userValidateWithProgram']).includes(false) && obj['isValidUser'];
|
|
1031
|
+
return obj;
|
|
1032
|
+
}
|
|
1033
|
+
else {
|
|
1034
|
+
obj = {
|
|
1035
|
+
responsibilityName: report[0],
|
|
1036
|
+
assignor: report[1],
|
|
1037
|
+
assignee: report[2],
|
|
1038
|
+
assigneeType: report[3],
|
|
1039
|
+
keyResponsibility: report[4],
|
|
1040
|
+
responsibilityCategory: null,
|
|
1041
|
+
frequency: report[5],
|
|
1042
|
+
setReminder: report[6],
|
|
1043
|
+
frequencyReminder: report[7],
|
|
1044
|
+
responsibilityCenter: report[8],
|
|
1045
|
+
reportClass: report[9],
|
|
1046
|
+
objective: report[10],
|
|
1047
|
+
notes: report[11],
|
|
1048
|
+
isFormat: report[12],
|
|
1049
|
+
formatForResponsibility: report[13],
|
|
1050
|
+
documentEvidenceRequired: report[14],
|
|
1051
|
+
// evidenceNotes: report[14],
|
|
1052
|
+
assessments: report[15],
|
|
1053
|
+
reviewer: report[16],
|
|
1054
|
+
reviewToBeCompletedWithin: report[17],
|
|
1055
|
+
overseer: report[18],
|
|
1056
|
+
notifyOnFailure: report[19]
|
|
1057
|
+
};
|
|
1058
|
+
obj['isValidData'] = this.isValidData(obj);
|
|
1059
|
+
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1060
|
+
obj['isValidUser'] = this.returnIds(obj === null || obj === void 0 ? void 0 : obj.assignee, 'entrusted_to') ? true : false;
|
|
1061
|
+
obj['isValid'] = obj['isValidData'] && obj['isValidUser'];
|
|
1062
|
+
return obj;
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
case 'onCompletion': {
|
|
1066
|
+
if (isProgram) {
|
|
1067
|
+
obj = {
|
|
1068
|
+
responsibilityName: report[0],
|
|
1069
|
+
programType: report[1],
|
|
1070
|
+
program: report[2],
|
|
1071
|
+
programCategory: report[3],
|
|
1072
|
+
assignor: report[4],
|
|
1073
|
+
assignee: report[5],
|
|
1074
|
+
assigneeType: report[6],
|
|
1075
|
+
keyResponsibility: report[7],
|
|
1076
|
+
responsibilityCategory: null,
|
|
1077
|
+
frequency: report[8],
|
|
1078
|
+
parentResponsibility: report[9],
|
|
1079
|
+
dueDate: report[10],
|
|
1080
|
+
responsibilityWindow: report[11],
|
|
1081
|
+
failedAfter: report[12],
|
|
1082
|
+
responsibilityCenter: report[13],
|
|
1083
|
+
reportClass: report[14],
|
|
1084
|
+
objective: report[15],
|
|
1085
|
+
notes: report[16],
|
|
1086
|
+
isFormat: report[17],
|
|
1087
|
+
formatForResponsibility: report[18],
|
|
1088
|
+
documentEvidenceRequired: report[19],
|
|
1089
|
+
// evidenceNotes: report[19],
|
|
1090
|
+
assessments: report[20],
|
|
1091
|
+
reviewer: report[21],
|
|
1092
|
+
reviewToBeCompletedWithin: report[22],
|
|
1093
|
+
overseer: report[23],
|
|
1094
|
+
notifyOnFailure: report[24]
|
|
1095
|
+
};
|
|
1096
|
+
obj['isValidData'] = this.isValidData(obj);
|
|
1097
|
+
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1098
|
+
obj['isValidUser'] = this.returnIds(obj === null || obj === void 0 ? void 0 : obj.assignee, 'entrusted_to') ? true : false;
|
|
1099
|
+
obj['isValid'] = obj['isValidData'] && !Object.values(obj['userValidateWithProgram']).includes(false) && ((_c = obj === null || obj === void 0 ? void 0 : obj.parentResponsibility) === null || _c === void 0 ? void 0 : _c.length) && obj['isValidUser'];
|
|
1100
|
+
return obj;
|
|
1101
|
+
}
|
|
1102
|
+
else {
|
|
1103
|
+
obj = {
|
|
1104
|
+
responsibilityName: report[0],
|
|
1105
|
+
assignor: report[1],
|
|
1106
|
+
assignee: report[2],
|
|
1107
|
+
assigneeType: report[3],
|
|
1108
|
+
keyResponsibility: report[4],
|
|
1109
|
+
responsibilityCategory: null,
|
|
1110
|
+
frequency: report[5],
|
|
1111
|
+
parentResponsibility: report[6],
|
|
1112
|
+
dueDate: report[7],
|
|
1113
|
+
responsibilityWindow: report[8],
|
|
1114
|
+
failedAfter: report[9],
|
|
1115
|
+
responsibilityCenter: report[10],
|
|
1116
|
+
reportClass: report[11],
|
|
1117
|
+
objective: report[12],
|
|
1118
|
+
notes: report[13],
|
|
1119
|
+
isFormat: report[14],
|
|
1120
|
+
formatForResponsibility: report[15],
|
|
1121
|
+
documentEvidenceRequired: report[16],
|
|
1122
|
+
// evidenceNotes: report[16],
|
|
1123
|
+
assessments: report[17],
|
|
1124
|
+
reviewer: report[18],
|
|
1125
|
+
reviewToBeCompletedWithin: report[19],
|
|
1126
|
+
overseer: report[20],
|
|
1127
|
+
notifyOnFailure: report[21]
|
|
1128
|
+
};
|
|
1129
|
+
obj['isValidData'] = this.isValidData(obj);
|
|
1130
|
+
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1131
|
+
obj['isValidUser'] = this.returnIds(obj === null || obj === void 0 ? void 0 : obj.assignee, 'entrusted_to') ? true : false;
|
|
1132
|
+
obj['isValid'] = obj['isValidData'] && ((_d = obj === null || obj === void 0 ? void 0 : obj.parentResponsibility) === null || _d === void 0 ? void 0 : _d.length) && obj['isValidUser'];
|
|
1133
|
+
return obj;
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
default: {
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
/**
|
|
1141
|
+
* It takes a string, removes all whitespace, and returns the string
|
|
1142
|
+
* @param {any} name - the name of the responsibility
|
|
1143
|
+
* @returns the trimmedName variable.
|
|
1144
|
+
*/
|
|
1145
|
+
checkValidResponsibilityName(name) {
|
|
1146
|
+
const re = / |<br>/g;
|
|
1147
|
+
if (name) {
|
|
1148
|
+
var trimmedName = name.toString().replace(re, '').trim();
|
|
1149
|
+
trimmedName = trimmedName.replace(/ +/g, ' ');
|
|
1150
|
+
}
|
|
1151
|
+
return trimmedName;
|
|
1152
|
+
}
|
|
1153
|
+
/**
|
|
1154
|
+
* If the responsibility name is valid, and the assignee and assignor are not empty, then return
|
|
1155
|
+
* true. Otherwise, return false
|
|
1156
|
+
* @param {any} data - any - the data that is being passed in
|
|
1157
|
+
* @returns A boolean value.
|
|
1158
|
+
*/
|
|
1159
|
+
isValidData(data) {
|
|
1160
|
+
var _a, _b, _c;
|
|
1161
|
+
const responsibility = ((_a = this.checkValidResponsibilityName(data === null || data === void 0 ? void 0 : data.responsibilityName)) === null || _a === void 0 ? void 0 : _a.length) ? true : false;
|
|
1162
|
+
const assignee = ((_b = data === null || data === void 0 ? void 0 : data.assignee) === null || _b === void 0 ? void 0 : _b.length) ? true : false;
|
|
1163
|
+
const frequency = ((_c = data === null || data === void 0 ? void 0 : data.frequency) === null || _c === void 0 ? void 0 : _c.length) ? true : false;
|
|
1164
|
+
if (assignee && responsibility && frequency && this.isValidUsers(data)) {
|
|
1165
|
+
return true;
|
|
1166
|
+
}
|
|
1167
|
+
else {
|
|
1168
|
+
return false;
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
/**
|
|
1172
|
+
* If the assignor is the same as the overseer or the NotifyOnFailure, or if the assignor is not set
|
|
1173
|
+
* and the defaultOwner is the same as the overseer or the NotifyOnFailure, or if the assignee is the
|
|
1174
|
+
* same as the reviewer, overseer, or NotifyOnFailure, or if the assignee is not set and the
|
|
1175
|
+
* defaultOwner is the same as the overseer or the NotifyOnFailure, or if the reviewer is the same as
|
|
1176
|
+
* the overseer or the NotifyOnFailure, or if the assignee is not set, then return false. Otherwise,
|
|
1177
|
+
* return true
|
|
1178
|
+
* @param {any} data - any - this is the data that is passed in from the form.
|
|
1179
|
+
* @returns A boolean value.
|
|
1180
|
+
*/
|
|
1181
|
+
isValidUsers(data) {
|
|
1182
|
+
if (((data === null || data === void 0 ? void 0 : data.assignor) && (((data === null || data === void 0 ? void 0 : data.assignor) == (data === null || data === void 0 ? void 0 : data.overseer)) || ((data === null || data === void 0 ? void 0 : data.assignor) == (data === null || data === void 0 ? void 0 : data.notifyOnFailure)))) ||
|
|
1183
|
+
((!(data === null || data === void 0 ? void 0 : data.assignor)) && ((this.defaultOwner == (data === null || data === void 0 ? void 0 : data.overseer)) || (this.defaultOwner == (data === null || data === void 0 ? void 0 : data.notifyOnFailure)))) ||
|
|
1184
|
+
((data === null || data === void 0 ? void 0 : data.assignee) && (((data === null || data === void 0 ? void 0 : data.assignee) == (data === null || data === void 0 ? void 0 : data.reviewer)) || ((data === null || data === void 0 ? void 0 : data.assignee) == (data === null || data === void 0 ? void 0 : data.overseer)) || ((data === null || data === void 0 ? void 0 : data.assignee) == (data === null || data === void 0 ? void 0 : data.notifyOnFailure)))) ||
|
|
1185
|
+
((!(data === null || data === void 0 ? void 0 : data.assignee)) && ((this.defaultOwner == (data === null || data === void 0 ? void 0 : data.overseer)) || (this.defaultOwner == (data === null || data === void 0 ? void 0 : data.notifyOnFailure)))) ||
|
|
1186
|
+
((data === null || data === void 0 ? void 0 : data.reviewer) && (((data === null || data === void 0 ? void 0 : data.reviewer) == (data === null || data === void 0 ? void 0 : data.overseer)) || ((data === null || data === void 0 ? void 0 : data.reviewer) == (data === null || data === void 0 ? void 0 : data.notifyOnFailure)))) ||
|
|
1187
|
+
(!(data === null || data === void 0 ? void 0 : data.assignee))) {
|
|
1188
|
+
return false;
|
|
1189
|
+
}
|
|
1190
|
+
else {
|
|
1191
|
+
return true;
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
/**
|
|
1195
|
+
* It takes in a data object and returns an object with 4 boolean properties.
|
|
1196
|
+
* The boolean properties are determined by the values of the data object.
|
|
1197
|
+
* @param {any} data - any = {
|
|
1198
|
+
* @returns {
|
|
1199
|
+
* isValidAssignee: true,
|
|
1200
|
+
* isValidAssignor: true,
|
|
1201
|
+
* isValidReviewer: true,
|
|
1202
|
+
* isValidOverseer: true
|
|
1203
|
+
* }
|
|
1204
|
+
*/
|
|
1205
|
+
validateDataWithProgram(data) {
|
|
1206
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
|
|
1207
|
+
const program = (_b = (_a = this.templateInfo) === null || _a === void 0 ? void 0 : _a.categoryList) === null || _b === void 0 ? void 0 : _b.filter((program) => (program === null || program === void 0 ? void 0 : program.programName) === (data === null || data === void 0 ? void 0 : data.program));
|
|
1208
|
+
const selectedAssignee = (_d = (_c = this.templateInfo) === null || _c === void 0 ? void 0 : _c.assigneesList) === null || _d === void 0 ? void 0 : _d.filter((assignee) => (assignee === null || assignee === void 0 ? void 0 : assignee.nameAndEmail) === (data === null || data === void 0 ? void 0 : data.assignee));
|
|
1209
|
+
const selectedAssignor = (_f = (_e = this.templateInfo) === null || _e === void 0 ? void 0 : _e.assignorsList) === null || _f === void 0 ? void 0 : _f.filter((assignor) => (assignor === null || assignor === void 0 ? void 0 : assignor.nameAndEmail) === (data === null || data === void 0 ? void 0 : data.assignor));
|
|
1210
|
+
const selectedReviewer = (_h = (_g = this.templateInfo) === null || _g === void 0 ? void 0 : _g.assigneesList) === null || _h === void 0 ? void 0 : _h.filter((reviewer) => (reviewer === null || reviewer === void 0 ? void 0 : reviewer.nameAndEmail) === (data === null || data === void 0 ? void 0 : data.reviewer));
|
|
1211
|
+
const selectedOverseer = (_k = (_j = this.templateInfo) === null || _j === void 0 ? void 0 : _j.assigneesList) === null || _k === void 0 ? void 0 : _k.filter((overseer) => (overseer === null || overseer === void 0 ? void 0 : overseer.nameAndEmail) === (data === null || data === void 0 ? void 0 : data.overseer));
|
|
1212
|
+
const selectedNotifyOnFailure = (_m = (_l = this.templateInfo) === null || _l === void 0 ? void 0 : _l.assigneesList) === null || _m === void 0 ? void 0 : _m.filter((notifyOnFailure) => (notifyOnFailure === null || notifyOnFailure === void 0 ? void 0 : notifyOnFailure.nameAndEmail) === (data === null || data === void 0 ? void 0 : data.notifyOnFailure));
|
|
1213
|
+
let isValidAssignee = true;
|
|
1214
|
+
let isValidAssignor = true;
|
|
1215
|
+
let isValidReviewer = true;
|
|
1216
|
+
let isValidOverseer = true;
|
|
1217
|
+
let isValidNotifyOnFailure = true;
|
|
1218
|
+
if (program) {
|
|
1219
|
+
if (((_p = (_o = program[0]) === null || _o === void 0 ? void 0 : _o.assignee) === null || _p === void 0 ? void 0 : _p.length) && (selectedAssignee === null || selectedAssignee === void 0 ? void 0 : selectedAssignee.length)) {
|
|
1220
|
+
isValidAssignee = ((_r = (_q = program[0]) === null || _q === void 0 ? void 0 : _q.assignee) === null || _r === void 0 ? void 0 : _r.includes((_s = selectedAssignee[0]) === null || _s === void 0 ? void 0 : _s.my_member_id)) ? true : false;
|
|
1221
|
+
}
|
|
1222
|
+
if (((_u = (_t = program[0]) === null || _t === void 0 ? void 0 : _t.reviewer) === null || _u === void 0 ? void 0 : _u.length) && (selectedReviewer === null || selectedReviewer === void 0 ? void 0 : selectedReviewer.length)) {
|
|
1223
|
+
isValidReviewer = ((_w = (_v = program[0]) === null || _v === void 0 ? void 0 : _v.reviewer) === null || _w === void 0 ? void 0 : _w.includes((_x = selectedReviewer[0]) === null || _x === void 0 ? void 0 : _x.my_member_id)) ? true : false;
|
|
1224
|
+
}
|
|
1225
|
+
if (((_z = (_y = program[0]) === null || _y === void 0 ? void 0 : _y.overseer) === null || _z === void 0 ? void 0 : _z.length) && (selectedOverseer === null || selectedOverseer === void 0 ? void 0 : selectedOverseer.length)) {
|
|
1226
|
+
isValidOverseer = ((_1 = (_0 = program[0]) === null || _0 === void 0 ? void 0 : _0.overseer) === null || _1 === void 0 ? void 0 : _1.includes((_2 = selectedOverseer[0]) === null || _2 === void 0 ? void 0 : _2.my_member_id)) ? true : false;
|
|
1227
|
+
}
|
|
1228
|
+
if (((_4 = (_3 = program[0]) === null || _3 === void 0 ? void 0 : _3.overseer) === null || _4 === void 0 ? void 0 : _4.length) && (selectedNotifyOnFailure === null || selectedNotifyOnFailure === void 0 ? void 0 : selectedNotifyOnFailure.length)) {
|
|
1229
|
+
isValidNotifyOnFailure = ((_6 = (_5 = program[0]) === null || _5 === void 0 ? void 0 : _5.overseer) === null || _6 === void 0 ? void 0 : _6.includes((_7 = selectedNotifyOnFailure[0]) === null || _7 === void 0 ? void 0 : _7.my_member_id)) ? true : false;
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
return {
|
|
1233
|
+
isValidAssignee: isValidAssignee,
|
|
1234
|
+
isValidAssignor: isValidAssignor,
|
|
1235
|
+
isValidReviewer: isValidReviewer,
|
|
1236
|
+
isValidOverseer: isValidOverseer,
|
|
1237
|
+
isValidNotifyOnFailure: isValidNotifyOnFailure,
|
|
1238
|
+
};
|
|
1239
|
+
}
|
|
1240
|
+
/**
|
|
1241
|
+
* It takes two strings as arguments, and returns an object with three properties
|
|
1242
|
+
* @param {string} programName - string -> Name of the program
|
|
1243
|
+
* @param {string} [chileProgram] - string => this is the name of the sub-program
|
|
1244
|
+
* @returns {
|
|
1245
|
+
* programId: 1,
|
|
1246
|
+
* childProgramId: 2,
|
|
1247
|
+
* categoryId: '1,2'
|
|
1248
|
+
* }
|
|
1249
|
+
*/
|
|
1250
|
+
getProgramId(programName, chileProgram) {
|
|
1251
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
1252
|
+
const program = (_b = (_a = this.templateInfo) === null || _a === void 0 ? void 0 : _a.categoryList) === null || _b === void 0 ? void 0 : _b.filter((program) => (program === null || program === void 0 ? void 0 : program.programName) === programName);
|
|
1253
|
+
let subProgram;
|
|
1254
|
+
let subProgramId;
|
|
1255
|
+
let categoryId;
|
|
1256
|
+
if ((chileProgram === null || chileProgram === void 0 ? void 0 : chileProgram.length) && (program === null || program === void 0 ? void 0 : program.length)) {
|
|
1257
|
+
subProgram = (_d = (_c = program[0]) === null || _c === void 0 ? void 0 : _c.childCategory) === null || _d === void 0 ? void 0 : _d.filter((subProgram) => (subProgram === null || subProgram === void 0 ? void 0 : subProgram.name) === chileProgram);
|
|
1258
|
+
subProgramId = (subProgram === null || subProgram === void 0 ? void 0 : subProgram.length) ? (_e = subProgram[0]) === null || _e === void 0 ? void 0 : _e.id : undefined;
|
|
1259
|
+
}
|
|
1260
|
+
if (subProgramId && (program === null || program === void 0 ? void 0 : program.length)) {
|
|
1261
|
+
categoryId = ((_g = (_f = program[0]) === null || _f === void 0 ? void 0 : _f.programId) === null || _g === void 0 ? void 0 : _g.toString()) + ',' + (subProgramId === null || subProgramId === void 0 ? void 0 : subProgramId.toString());
|
|
1262
|
+
}
|
|
1263
|
+
else if (program === null || program === void 0 ? void 0 : program.length) {
|
|
1264
|
+
categoryId = (_j = (_h = program[0]) === null || _h === void 0 ? void 0 : _h.programId) === null || _j === void 0 ? void 0 : _j.toString();
|
|
1265
|
+
}
|
|
1266
|
+
return {
|
|
1267
|
+
programId: (program === null || program === void 0 ? void 0 : program.length) ? (_k = program[0]) === null || _k === void 0 ? void 0 : _k.programId : undefined,
|
|
1268
|
+
childProgramId: subProgramId,
|
|
1269
|
+
categoryId: categoryId,
|
|
1270
|
+
};
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
AddMultipleResponsibilityWithTabComponent.decorators = [
|
|
1274
|
+
{ type: Component, args: [{
|
|
1275
|
+
selector: 'lib-add-multiple-responsibility-with-tab',
|
|
1276
|
+
template: "<!-- <div class=\"add-multiple-risk\" [attr.id]=\"'scrollReference'\" >\r\n <!- - main container starts here - ->\r\n <div class=\"add-multiple-risk-body\">\r\n <div class=\"add-multiple-risk-container\">\r\n <div class=\"image\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/spreadsheet-multiple-category.svg\" alt=\"\" />\r\n </div>\r\n <h4>You can entrust multiple responsibilities in just two easy steps:</h4>\r\n <ul class=\"list\">\r\n <li>Download the template and fill in the details.</li>\r\n <li>Upload the .xlsx file and you\u2019re good to go!</li>\r\n </ul>\r\n\r\n <button class=\"download\" *ngIf=\"downloadStatus === 'NOT_DOWNLOADING'\"\r\n (click)=\"downloadTemplate()\" type=\"button\"><i class=\"icons\"></i> Download Template</button>\r\n <div class=\"bulk-btn-progress\" *ngIf=\"downloadStatus === 'DOWNLOADING'\">\r\n Download in Progress\r\n <app-line-loader [loaderHeight]=\"'2'\"></app-line-loader>\r\n </div>\r\n <ng-container *ngIf=\"downloadStatus === 'DOWNLOADED'\">\r\n <div class=\"bulk-btn-progress\"><i class=\"icons\"></i>Download Complete</div>\r\n <div class=\"bulk-btn-again\">\r\n Is the file not downloaded?\r\n <button (click)=\"downloadTemplate()\">Retry Download</button>\r\n </div>\r\n </ng-container>\r\n <p class=\"error-message\" *ngIf=\"isWrongFile || isWrongFormat|| isFileEmpty\"\r\n >{{errorMessage}}</p> \r\n </div>\r\n </div>\r\n</div> -->\r\n<app-bulk-responsibility-view *ngIf=\"showExcel\"\r\n [responsibilityBulkUpload]=\"responsibilityBulkUpload\"\r\n [bulkUpload]=\"bulkUpload\"\r\n [fileName]=\"fileName\"\r\n [loader]=\"loader\"\r\n [defaultOwner]=\"defaultOwner\"\r\n [tabType]=\"tabType\"\r\n [bulkUpload]=\"bulkUpload\"\r\n (submitResponsibilityBulkUpload)=\"submitResponsibilityBulkUpload()\"\r\n (selectedTab)=\"selectedTab($event)\"\r\n (cancel)=\"reset()\"\r\n [responsibilityType]=\"'multiTab'\">\r\n</app-bulk-responsibility-view>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n\r\n<input type=\"file\" [(ngModel)]=\"fileValue\" id=\"fileInput\" class=\"hidden-input\" accept=\".xlsx\" (change)=\"uploadedFile($event)\" multiple />\r\n<app-smiley-dialog-inline *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\" (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog-inline>",
|
|
1277
|
+
styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .add-multiple-risk{background:#fff;position:relative;z-index:1}@media only screen and (min-width:1920px){::ng-deep .add-multiple-risk{height:calc(100vh - 200px);display:flex;align-items:center}}::ng-deep .add-multiple-risk-body{padding:0;display:block}::ng-deep .add-multiple-risk-container{display:block;text-align:center}::ng-deep .add-multiple-risk-container .image{width:300px;margin:0 auto 24px}::ng-deep .add-multiple-risk-container h4{font-size:20px;line-height:30px;margin:0 0 20px;font-weight:500}::ng-deep .add-multiple-risk-container ul.list{padding:0;margin:0 0 40px;display:block;counter-reset:my-awesome-counter}::ng-deep .add-multiple-risk-container ul.list li{text-align:left;color:#747576;font-size:15px;line-height:38px;font-weight:400;list-style:none;counter-increment:my-awesome-counter;background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:0 12px}::ng-deep .add-multiple-risk-container ul.list li:before{content:counter(my-awesome-counter) \". \"}::ng-deep .add-multiple-risk-container ul.list li+li{margin-top:4px}::ng-deep .add-multiple-risk-container button.download{background:#fff;height:36px;border-radius:2px;cursor:pointer;border:1px solid #1e5dd3;color:#1e5dd3;text-transform:uppercase;padding:0 30px;font-weight:500;font-size:11px}::ng-deep .add-multiple-risk-container .bulk-btn-progress{background:#f8f8f8;height:36px;border-radius:2px;cursor:pointer;border:1px solid #f8f8f8;color:#747576;text-transform:uppercase;padding:0 30px;font-weight:500;font-size:11px;position:relative;display:inline-block;line-height:34px}::ng-deep .add-multiple-risk-container .bulk-btn-progress i{color:#34aa44;font-size:14px;float:left;position:relative;margin:0 10px 0 0;font-weight:400}::ng-deep .add-multiple-risk-container .bulk-btn-progress span.progress{height:3px;position:absolute;bottom:0;left:0;width:100%;background:#1e5dd3}::ng-deep .add-multiple-risk-container .bulk-btn-again{color:#161b2f;font-size:11px;margin-top:10px}::ng-deep .add-multiple-risk-container .bulk-btn-again button{background:transparent;border:none;padding:0;font-size:11px;color:#1e5dd3;font-weight:500;text-decoration:underline;cursor:pointer;text-transform:uppercase;display:inline-block}.hidden-input{opacity:0}", "@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-left-color:#707070;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top-color:#707070;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:116px}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 24px;display:flex;align-items:center}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px;margin-right:20px}::ng-deep .vx-form-group .tab-group .upload-file .browse{display:flex;align-items:center;justify-content:center;width:calc(100% - 100px);text-align:center}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;top:0;margin:0;padding:0;right:0;bottom:0;left:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:12px \u200B24px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:11px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;width:100%;margin-top:4px;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:16px;font-weight:400;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group .input,::ng-deep .vx-form-group input[type=text]{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group .input::-moz-placeholder,::ng-deep .vx-form-group input[type=text]::-moz-placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group .input:-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group .input::placeholder,::ng-deep .vx-form-group input[type=text]::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group .input:hover,::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group input[type=text]:hover{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .input.error,::ng-deep .vx-form-group input[type=text].error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group .input.error:focus,::ng-deep .vx-form-group input[type=text].error:focus{box-shadow:0 0 5px rgba(211,30,30,.27)}::ng-deep .vx-form-group .input:disabled,::ng-deep .vx-form-group input[type=text]:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep .vx-form-group .input:disabled:hover,::ng-deep .vx-form-group input[type=text]:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group .input span.text,::ng-deep .vx-form-group input[type=text] span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group .input .input-group,::ng-deep .vx-form-group input[type=text] .input-group{display:flex;align-items:center}::ng-deep .vx-form-group .input .input-group.counter,::ng-deep .vx-form-group input[type=text] .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group .input .input-group.counter button,::ng-deep .vx-form-group input[type=text] .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group .input .input-group.counter input,::ng-deep .vx-form-group input[type=text] .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0}::ng-deep .vx-form-group .input+.file-list,::ng-deep .vx-form-group input[type=text]+.file-list{margin-top:8px}::ng-deep .vx-form-group .input::-moz-placeholder,::ng-deep .vx-form-group input[type=text]::-moz-placeholder{font-size:13px}::ng-deep .vx-form-group .input::placeholder,::ng-deep .vx-form-group input[type=text]::placeholder{font-size:13px}::ng-deep .vx-form-group .input:-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .input::-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{width:100%;position:relative;z-index:1;margin:0 4px 0 0}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:300px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:1px solid #f1f1f1;border-radius:2px;background:#fff;outline:none;cursor:pointer;display:block;height:24px;padding:0 5px 0 4px;font-size:11px;font-weight:500;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd3;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group marx-editor{margin-top:8px;display:block}::ng-deep .vx-form-group marx-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group marx-editor .editor-container:focus-within{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:hover{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:#fff;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::-moz-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:16px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:16px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:208px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:30px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 0 #34aa44;-webkit-animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;-webkit-animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;-webkit-animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;top:2px;right:0;bottom:0;left:2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group input{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@-webkit-keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes strokeCheck{to{stroke-dashoffset:0}}@-webkit-keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;-webkit-animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;-moz-text-align-last:left;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{-webkit-animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){-webkit-animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){-webkit-animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){-webkit-animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){-webkit-animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){-webkit-animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){-webkit-animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){-webkit-animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){-webkit-animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){-webkit-animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@-webkit-keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@-webkit-keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@-webkit-keyframes rotate{to{transform:rotate(1turn)}}@keyframes rotate{to{transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;top:0;right:0;bottom:0;left:0}dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}dp-date-picker input:focus{outline:none}dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;-webkit-animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}dp-date-picker .dp-popup dp-day-calendar,dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}dp-date-picker .dp-popup dp-day-calendar button,dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover{background-color:#f3f3f3}dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays{display:flex;justify-content:space-around}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover{background-color:#f3f3f3}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected{background:#1e5dd3}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}dp-date-picker .dp-open+div{position:fixed!important;top:0!important;right:0!important;bottom:0!important;left:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:rgba(0,0,0,.3)}@-webkit-keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;position:relative;margin-right:5px;border:1px solid #747576;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576,#747576 1%,#747576 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39,#f31c39 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.css,::ng-deep span.file.less,::ng-deep span.file.scss,::ng-deep span.file.xls,::ng-deep span.file.xlsx{border-color:#34aa44}::ng-deep span.file.css:before,::ng-deep span.file.less:before,::ng-deep span.file.scss:before,::ng-deep span.file.xls:before,::ng-deep span.file.xlsx:before{background:linear-gradient(45deg,#34aa44,#34aa44 1%,#34aa44 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.css:after,::ng-deep span.file.less:after,::ng-deep span.file.scss:after,::ng-deep span.file.xls:after,::ng-deep span.file.xlsx:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.css .format,::ng-deep span.file.less .format,::ng-deep span.file.scss .format,::ng-deep span.file.xls .format,::ng-deep span.file.xlsx .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3,#1e5dd3 1%,#1e5dd3 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpeg,::ng-deep span.file.jpg,::ng-deep span.file.png,::ng-deep span.file.ppt{border-color:#f6882f}::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.jpg:before,::ng-deep span.file.png:before,::ng-deep span.file.ppt:before{background:linear-gradient(45deg,#f6882f,#f6882f 1%,#f6882f 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.jpg:after,::ng-deep span.file.png:after,::ng-deep span.file.ppt:after{border-color:#f6882f}::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.jpg .format,::ng-deep span.file.png .format,::ng-deep span.file.ppt .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7,#7aa6f7 1%,#7aa6f7 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:rgba(0,0,0,.05)!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:14px solid #f1f1f1;border-bottom:12px solid transparent;border-top:12px solid transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:14px solid #f1f1f1;border-bottom:12px solid transparent;border-top:12px solid transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:calc(224px / 2 - 20px)!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}"]
|
|
1278
|
+
},] }
|
|
1279
|
+
];
|
|
1280
|
+
AddMultipleResponsibilityWithTabComponent.ctorParameters = () => [
|
|
1281
|
+
{ type: AddRiskService },
|
|
1282
|
+
{ type: ResponsibilityService },
|
|
1283
|
+
{ type: AuthService },
|
|
1284
|
+
{ type: FrequencyBulkService },
|
|
1285
|
+
{ type: SnackBarService }
|
|
1286
|
+
];
|
|
1287
|
+
AddMultipleResponsibilityWithTabComponent.propDecorators = {
|
|
1288
|
+
pickerChanged: [{ type: Output }],
|
|
1289
|
+
populateOption: [{ type: Output }],
|
|
1290
|
+
closeWorkflow: [{ type: Output }],
|
|
1291
|
+
disconnectRefresh: [{ type: Output }],
|
|
1292
|
+
closeAddMultipleResponsibility: [{ type: Output }],
|
|
1293
|
+
uploadedFileData: [{ type: Input, args: ['uploadedFile',] }]
|
|
1294
|
+
};
|
|
1295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFTcEYsTUFBTSxPQUFPLHlDQUF5QztJQWdGcEQsWUFDVSxXQUEyQixFQUMzQixxQkFBNEMsRUFDNUMsV0FBd0IsRUFDeEIsZ0JBQXNDLEVBQ3RDLFFBQXlCO1FBSnpCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7UUFDdEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFwRnpCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakQsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLG1DQUE4QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFNOUQsNkJBQXdCLEdBQVE7WUFDOUIsTUFBTSxFQUFFLEVBQUU7WUFDVixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUE7UUFDRCxZQUFPLEdBQTZDLFdBQVcsQ0FBQztRQUNoRSxhQUFRLEdBQVE7WUFDZCxTQUFTLEVBQUMsQ0FBQztZQUNYLE9BQU8sRUFBQyxDQUFDO1lBQ1QsWUFBWSxFQUFDLENBQUM7U0FDZixDQUFBO1FBRUQsZUFBVSxHQUFRO1lBQ2hCLFNBQVMsRUFBRTtnQkFDVCxNQUFNLEVBQUUsRUFBRTtnQkFDVixVQUFVLEVBQUUsRUFBRTtnQkFDZCxPQUFPLEVBQUUsRUFBRTthQUNaO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE9BQU8sRUFBRSxFQUFFO2FBQ1o7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLEVBQUU7YUFDWjtTQUNGLENBQUE7UUFFRCxpQkFBWSxHQUFRO1lBRWxCLFlBQVksRUFBRSxFQUFFO1lBQ2hCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsYUFBYSxFQUFFLEVBQUU7WUFDakIsYUFBYSxFQUFFLEVBQUU7WUFDakIsb0JBQW9CLEVBQUUsRUFBRTtZQUN4QixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUE7UUFDRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6Qix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUd0QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBRXZCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixpQkFBWSxHQUFHLHFCQUFxQixDQUFBO1FBQ3BDLG1CQUFjLEdBQVcsaUJBQWlCLENBQUM7UUFDM0Msb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEIsaUJBQVksR0FBRyxFQUFFLENBQUE7UUFDakIsa0JBQWEsR0FBRyxtR0FBbUcsQ0FBQztRQUNwSCxrQkFBYSxHQUFHO1lBQ2QsRUFBRSxVQUFVLEVBQUUsK0JBQStCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFO1lBQ2xGLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7U0FDekksQ0FBQztRQUNGLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxFQUFFLENBQUM7SUFXbkIsQ0FBQztJQS9FRCxJQUEyQixnQkFBZ0IsQ0FBQyxJQUFTO1FBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQStFRCxXQUFXLENBQUMsT0FBc0I7SUFFbEMsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQy9ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUE7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLHlCQUF5QixDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVLEVBQUUsT0FBWTtRQUNuQyxJQUFJO1lBQ0YsSUFBSSxDQUFDLHdCQUF3QixHQUFHO2dCQUM5QixNQUFNLEVBQUUsRUFBRTtnQkFDVixPQUFPLEVBQUUsRUFBRTthQUNaLENBQUE7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHO2dCQUNsQixZQUFZLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixvQkFBb0IsRUFBRSxFQUFFO2dCQUN4QixRQUFRLEVBQUUsRUFBRTthQUViLENBQUE7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN4QixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDN0QsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDbkU7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sTUFBTSxHQUFpQixLQUFLLENBQUMsTUFBc0IsQ0FBQztZQUMxRCxrQ0FBa0M7WUFDbEMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUM1RSxNQUFNLE1BQU0sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDekIsTUFBTSxJQUFJLEdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3JDLE1BQU0sRUFBRSxHQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLE9BQU8sR0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLEVBQUUsR0FBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxZQUFZLEdBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sWUFBWSxHQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLFFBQVEsR0FBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFRLENBQUM7Z0JBQ3ZFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM1RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQ25DLFFBQU8sS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFdBQVcsRUFBRSxFQUFFO3dCQUMzQixLQUFLLDRCQUE0Qjs0QkFDL0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTs0QkFDdkMsTUFBTTt3QkFDUixLQUFLLDBCQUEwQjs0QkFDN0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFDbEQsTUFBTTt3QkFDUixLQUFLLGdDQUFnQzs0QkFDbkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQTs0QkFDakQsTUFBTTt3QkFDUixPQUFRLENBQUMsQ0FBQyxNQUFNO3FCQUNqQjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLHVDQUF1QztZQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUJBQXVCLENBQUMsRUFBa0IsRUFBRSxLQUFhOztRQUN2RCxJQUFJLHdCQUF3QixHQUFRO1lBQ2xDLE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLEVBQUU7WUFDWCxVQUFVLEVBQUMsRUFBRTtTQUNkLENBQUE7UUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSztTQUN0QixDQUFRLENBQUM7UUFDVixJQUFJLElBQUksR0FBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDekMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDdEIsV0FBVyxHQUFHLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxTQUFTLEVBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxDQUFDLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE1BQU0sTUFBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTthQUNwRTtpQkFBTTtnQkFDTCxPQUFPLENBQUMsQ0FBQyxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxNQUFNLE1BQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxrR0FBa0csR0FBRyxRQUFRLENBQUM7WUFDbEksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQsd0JBQXdCLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCx3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxrR0FBa0csR0FBRyxRQUFRLENBQUM7WUFDbEksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFNBQVMsQ0FBQztZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMzRSxJQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSSxTQUFTLEVBQUU7Z0JBQ2xELFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBRS9EO2lCQUNJO2dCQUNILFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9EO1lBQ0QsMkVBQTJFO1lBQzNFLElBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsV0FBVyxFQUFFLE1BQUssNEJBQTRCLEVBQUM7Z0JBQ3ZELHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNsSixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsd0JBQXdCLGFBQXhCLHdCQUF3Qix1QkFBeEIsd0JBQXdCLENBQUUsTUFBTSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsd0JBQXdCLGFBQXhCLHdCQUF3Qix1QkFBeEIsd0JBQXdCLENBQUUsVUFBVSxDQUFDO2dCQUM1RSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsd0JBQXdCLGFBQXhCLHdCQUF3Qix1QkFBeEIsd0JBQXdCLENBQUUsT0FBTyxDQUFDO2FBQ3ZFO1lBQ0QsSUFBRyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxXQUFXLEVBQUUsTUFBSywwQkFBMEIsRUFBQztnQkFDckQsd0JBQXdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hKLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyx3QkFBd0IsYUFBeEIsd0JBQXdCLHVCQUF4Qix3QkFBd0IsQ0FBRSxNQUFNLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyx3QkFBd0IsYUFBeEIsd0JBQXdCLHVCQUF4Qix3QkFBd0IsQ0FBRSxVQUFVLENBQUM7Z0JBQzFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyx3QkFBd0IsYUFBeEIsd0JBQXdCLHVCQUF4Qix3QkFBd0IsQ0FBRSxPQUFPLENBQUM7YUFDckU7WUFDRCxJQUFHLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFdBQVcsRUFBRSxNQUFLLGdDQUFnQyxFQUFDO2dCQUMzRCx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDckosSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLHdCQUF3QixhQUF4Qix3QkFBd0IsdUJBQXhCLHdCQUF3QixDQUFFLE1BQU0sQ0FBQztnQkFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLHdCQUF3QixhQUF4Qix3QkFBd0IsdUJBQXhCLHdCQUF3QixDQUFFLFVBQVUsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLHdCQUF3QixhQUF4Qix3QkFBd0IsdUJBQXhCLHdCQUF3QixDQUFFLE9BQU8sQ0FBQzthQUMxRTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQzs7cUdBRTZGO1FBQzdGLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyx3RkFBd0YsQ0FBQztZQUM3RyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixPQUFPO1NBQ1I7YUFBTSxJQUFJLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLFNBQVMsMENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFLLHNCQUFzQixJQUFJLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLE9BQU8sMENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFLLHNCQUFzQixJQUFJLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLFlBQVksMENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFLLHNCQUFzQixFQUFFO1lBQ3BOLElBQUksQ0FBQyxZQUFZLEdBQUcsa0dBQWtHLEdBQUcsUUFBUSxDQUFDO1lBQ2xJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE9BQU87U0FDUjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsY0FBYyxDQUFDLElBQVU7O1FBQ3ZCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLFNBQVMsMENBQUUsT0FBTywwQ0FBRSxNQUFNLEVBQUU7WUFDOUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE1BQUEsSUFBSSxDQUFDLFVBQVUsMENBQUUsU0FBUyxDQUFDO1lBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDO1NBQzVCO2FBQU0sSUFBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxPQUFPLDBDQUFFLE9BQU8sMENBQUUsTUFBTSxFQUFFO1lBQ25ELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLE9BQU8sQ0FBQztZQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztTQUMxQjthQUFNLElBQUcsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsMENBQUUsWUFBWSwwQ0FBRSxPQUFPLDBDQUFFLE1BQU0sRUFBRTtZQUN4RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxZQUFZLENBQUM7WUFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUM7U0FDL0I7YUFBTTtZQUNMLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDaEI7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsR0FBUSxFQUFFLEtBQVU7O1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUc7WUFDakIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDNUIsQ0FBQztRQUVGLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFBTTtZQUNMLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3hKLElBQUksU0FBUyxJQUFJLGNBQWMsRUFBRTtnQkFDL0IsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFFaEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ04sTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUU5QixVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxNQUFBLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQUssS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxLQUFLLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwSSxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQyx1REFBdUQ7WUFDdkQsNkZBQTZGO1lBQzdGLFdBQVc7WUFDWCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtnQkFFL0csT0FBTyxLQUFLLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQzthQUNiO1NBRUY7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLEdBQVEsRUFBRSxLQUFVOztRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRS9CLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzNCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzNCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1NBQzVCLENBQUM7UUFFRixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUMxQixPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCx1REFBdUQ7WUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxNQUFBLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQUssS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxLQUFLLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwSSxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLFdBQVcsR0FBRyxVQUFVLEVBQUU7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO0lBRUgsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLDRCQUE0QixZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRTFHLElBQUksQ0FBQyxXQUFXLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxTQUFTLENBQ3pELENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6RDtZQUNELElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDYixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDL0YsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ1Y7UUFFSCxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUM7UUFDckMsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsOEJBQThCOztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBRSxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9DLDZCQUE2QjtRQUM3QixJQUFJLHdCQUF3QixHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLFNBQVMsMENBQUUsT0FBTywwQ0FBRSxNQUFNLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLE9BQU8sMENBQUUsT0FBTyxFQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxZQUFZLDBDQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZKLG1FQUFtRTtRQUNuRSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTs7WUFDL0MsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNsQixJQUFHLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLHNCQUFzQixNQUFLLElBQUksRUFBQztvQkFDekMsTUFBTSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztpQkFDcEM7Z0JBQ0QsTUFBTSxTQUFTLEdBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdFLE1BQU0sZUFBZSxHQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxlQUFlLEdBQVEsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRyxvRUFBb0U7Z0JBQ3BFLE1BQU0sU0FBUyxHQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxnQkFBZ0IsR0FBUSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2xGLE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFFbEQsMkpBQTJKO2dCQUMzSixJQUFJLG1CQUFtQixHQUFRLEVBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUMsQ0FBQTtnQkFDMUUsTUFBTSxhQUFhLEdBQUc7b0JBQ3BCLFdBQVcsRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVztvQkFDaEMsaUJBQWlCLEVBQUcsbUJBQW1CLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGlCQUFpQixDQUFDO2lCQUNuRSxDQUFBO2dCQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsU0FBUyxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxHQUFHLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDbEoscUhBQXFIO2dCQUNySCxNQUFNLFlBQVksR0FBRyxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLDBDQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsR0FBRyxJQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLHVCQUF1QixDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFFbkwsSUFBSSxZQUFZLENBQUM7Z0JBQ2pCLElBQUksZUFBZSxDQUFBO2dCQUNuQixNQUFNLGFBQWEsR0FBRyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxNQUFNLENBQUMsb0JBQW9CLElBQUksTUFBTSxDQUFDLG9CQUFvQixLQUFLLEVBQUUsRUFBRTtvQkFDckUsWUFBWSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxvQkFBb0IsQ0FBQztpQkFDN0M7cUJBQU0sSUFBSSxrQkFBa0IsYUFBbEIsa0JBQWtCLHVCQUFsQixrQkFBa0IsQ0FBRSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ3RELE1BQU0sWUFBWSxHQUFHLGtCQUFrQixhQUFsQixrQkFBa0IsdUJBQWxCLGtCQUFrQixDQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDaEUsWUFBWSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDNUM7Z0JBQ0QsSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxXQUFXLEtBQUksQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxNQUFLLEVBQUUsRUFBRTtvQkFDckQsZUFBZSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxXQUFXLENBQUM7aUJBQ3ZDO3FCQUFNLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO29CQUNyRCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsYUFBbEIsa0JBQWtCLHVCQUFsQixrQkFBa0IsQ0FBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ2hFLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDbEQ7Z0JBQ0QsTUFBTSxHQUFHLEdBQUc7b0JBQ1YsTUFBTSxFQUFFLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsUUFBUTtvQkFDbkMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO29CQUNwQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7b0JBQ3hFLFdBQVcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDN0osWUFBWSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUEsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSwwQ0FBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQywwQ0FBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2xNLFVBQVUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxXQUFXLEVBQUUsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsa0JBQWtCLG1DQUFJLEVBQUU7b0JBQzdDLFlBQVksRUFBRSxNQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsMENBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsbUNBQUksRUFBRTtvQkFDcEQsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsRUFBRSxjQUFjLENBQUM7b0JBQ2pFLGFBQWEsRUFBRSxNQUFBLE1BQUEsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSwwQ0FBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQywwQ0FBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxtQ0FBSSxFQUFFO29CQUN2RSxlQUFlLEVBQUUsQ0FBQSxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxZQUFZLDBDQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5RCwrQkFBK0I7b0JBQy9CLHVCQUF1QixFQUFFLEVBQUU7b0JBQzNCLFdBQVcsRUFBRSxNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTyxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxlQUFlLENBQUMsQ0FBQyxVQUFVLDBDQUFFLFFBQVEsRUFBRSxtQ0FBSSxFQUFFO29CQUNyRyxlQUFlLEVBQUUsQ0FBQSxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsZUFBZSxDQUFDLDBDQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsZUFBZSxDQUFDLDBDQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNqTCxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6QyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0QyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEtBQUksU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLElBQUksQ0FBQSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzlDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ3BELEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ3ZDLENBQUMsQ0FBQSxDQUFDLENBQUEsRUFBRTtvQkFDTCxpQkFBaUIsRUFBRSxjQUFjO29CQUNqQyxlQUFlLEVBQUUsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUM5QyxxQkFBcUIsRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsU0FBUztvQkFDeEMsVUFBVSxFQUFFLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxXQUFXO29CQUNqRSxVQUFVLEVBQUUsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxtQ0FBSSxFQUFFO29CQUNyQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0gsT0FBTyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxFQUFFLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssbUNBQUksRUFBRTtvQkFDNUIsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDMUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbEQsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQy9ELGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsRSxhQUFhLEVBQUUsRUFBRTtvQkFDakIsb0JBQW9CLEVBQUUsQ0FBQyxhQUFhLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWTtvQkFDaEUsWUFBWSxFQUFFLGVBQWU7b0JBQzdCLGdCQUFnQixFQUFFLEVBQUU7b0JBQ3BCLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLE1BQUssS0FBSyxDQUFDLEtBQUksTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsdUJBQXVCLDBDQUFFLE1BQU0sQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckcsU0FBUyxFQUFFLENBQUM7b0JBQ1osZ0JBQWdCLEVBQUUsQ0FBQztvQkFDbkIsa0JBQWtCLEVBQUUsQ0FBQztvQkFDckIsYUFBYSxFQUFFLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsaUJBQWlCLE1BQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDbkUsY0FBYyxFQUFFLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsaUJBQWlCLE1BQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0QsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0QsWUFBWSxFQUFFLENBQUUsZUFBZSxLQUFJLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxVQUFVLENBQUEsQ0FBRSxDQUFBLENBQUMsQ0FBQzt3QkFDaEUsTUFBTSxFQUFFOzRCQUNOLFNBQVMsRUFBRSxDQUFDO29DQUNWLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQzVELGVBQWUsRUFBRSxDQUFDO2lDQUNuQixDQUFDOzRCQUNGLElBQUksRUFBRSxZQUFZO3lCQUNuQjtxQkFDRixDQUFBLENBQUMsQ0FBQSxFQUFFO29CQUVKLGNBQWMsRUFBRSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLHlCQUF5QixLQUFJLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLHlCQUF5QixNQUFLLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hJLGVBQWUsRUFBRSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLHVCQUF1QixLQUFJLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLHVCQUF1QixNQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xJLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzdELHVCQUF1QixFQUFFLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLHVCQUF1QixFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzlGLG1CQUFtQixFQUFFLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGFBQWEsbUNBQUksRUFBRTtvQkFDaEQscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUUsU0FBUyxFQUFFLE1BQUEsTUFBTSxDQUFDLFNBQVMsbUNBQUksRUFBRTtvQkFDakMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVk7b0JBQ25DLFFBQVEsRUFBRSxLQUFLO29CQUNmLFdBQVcsRUFBRSxJQUFJO29CQUNqQixrQkFBa0IsRUFBRSxFQUFFO29CQUN0QixxQkFBcUIsRUFBRSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsTUFBSyxrQkFBa0IsSUFBSSxDQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsMENBQUUsV0FBVyxFQUFFLE1BQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0gsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxvQkFBb0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7aUJBQ3JLLENBQUE7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNuQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsbUdBQW1HO1FBQ25HLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMvRSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO1FBRWhDLENBQUMsRUFDQyxHQUFHLENBQUMsRUFBRTtZQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0dBQWtHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEksQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBR0QsU0FBUyxDQUFDLElBQVMsRUFBRSxHQUFXO1FBQzlCLFFBQVEsR0FBRyxFQUFFO1lBQ1gsS0FBSyxPQUFPO2dCQUNWLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ25ELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7d0JBQzNCLElBQUksSUFBSSxDQUFDO3dCQUNULElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7NEJBQ3hDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTt5QkFDOUM7NkJBQU07NEJBQ0wsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7eUJBQ3hCO3dCQUNELEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUMzRTtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEtBQUssQ0FBQTtnQkFDWixNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBb0IsRUFBRSxFQUFFO29CQUMvRCxJQUFJLGVBQWUsQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO3dCQUN4QyxXQUFXLEdBQUc7NEJBQ1osSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJOzRCQUMxQixVQUFVLEVBQUUsZUFBZSxDQUFDLFlBQVk7NEJBQ3hDLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSzt5QkFDN0IsQ0FBQTtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLFdBQVcsQ0FBQztnQkFFbkIsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQW9CLEVBQUUsRUFBRTtvQkFDL0QsSUFBSSxlQUFlLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTt3QkFDeEMsV0FBVyxHQUFHOzRCQUNaLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTs0QkFDMUIsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLOzRCQUM1QixRQUFRLEVBQUUsZUFBZSxDQUFDLFNBQVM7eUJBQ3BDLENBQUE7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxXQUFXLENBQUM7Z0JBRW5CLE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFBO2dCQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtvQkFDekQsSUFBSSxTQUFTLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTt3QkFDbEMsS0FBSyxHQUFHOzRCQUNOLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTs0QkFDcEIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxXQUFXOzRCQUNqQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7eUJBQ3ZCLENBQUE7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxLQUFLLENBQUM7Z0JBQ2IsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO29CQUMxRCxJQUFJLFVBQVUsQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO3dCQUNuQyxNQUFNLEdBQUc7NEJBQ1AsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJOzRCQUNyQixVQUFVLEVBQUUsVUFBVSxDQUFDLFdBQVc7NEJBQ2xDLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSzt5QkFDeEIsQ0FBQTtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE1BQU0sQ0FBQztnQkFDZCxNQUFNO1lBRVIsS0FBSyxjQUFjO2dCQUNqQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7b0JBQ3pELElBQUksU0FBUyxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUU7d0JBQ2xDLEtBQUssR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO3FCQUMvQjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEtBQUssQ0FBQTtnQkFDWixNQUFNO1lBRVIsS0FBSyxzQkFBc0I7Z0JBQ3pCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW1CLEVBQUUsRUFBRTtvQkFDckUsSUFBSSxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxJQUFJLE1BQUssSUFBSSxFQUFFO3dCQUNqQyxFQUFFLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQztxQkFDeEI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTTtZQUdSLEtBQUssWUFBWTtnQkFFZixJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7b0JBQ2pCLE9BQU8sQ0FBQyxDQUFBO2lCQUNUO3FCQUFNLElBQUksSUFBSSxJQUFJLFlBQVksRUFBRTtvQkFDL0IsT0FBTyxDQUFDLENBQUE7aUJBQ1Q7cUJBQU0sSUFBSSxJQUFJLElBQUksYUFBYSxFQUFFO29CQUNoQyxPQUFPLENBQUMsQ0FBQTtpQkFDVDtxQkFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUU7b0JBQ3pCLE9BQU8sQ0FBQyxDQUFBO2lCQUNUO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxDQUFBO2lCQUNUO2dCQUNELE1BQU07U0FDVDtJQUVILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLHdCQUF3QixHQUFHO1lBQzlCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFBO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixTQUFTLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLEVBQUU7YUFDWjtZQUNELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsRUFBRTtnQkFDVixVQUFVLEVBQUUsRUFBRTtnQkFDZCxPQUFPLEVBQUUsRUFBRTthQUNaO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE9BQU8sRUFBRSxFQUFFO2FBQ1o7U0FDRixDQUFBO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixZQUFZLEVBQUUsRUFBRTtZQUNoQixNQUFNLEVBQUUsRUFBRTtZQUNWLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFFBQVEsRUFBRSxFQUFFO1NBRWIsQ0FBQTtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQWE7UUFDbEIsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNiLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixZQUFZLEdBQUcsMkRBQTJELENBQUM7U0FDNUU7YUFBTTtZQUNMLFlBQVksR0FBRyxvQ0FBb0MsQ0FBQztTQUNyRDtRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hELEdBQUcsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO1NBQzFFO2FBQU07WUFDTCxHQUFHLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGdCQUFnQixHQUFHLFlBQVksQ0FBQztTQUMzRTtRQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JFLElBQUksR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUV0QixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDUCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtHQUFrRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxJLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWE7O1FBQ2xDLElBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLGtHQUFrRyxHQUFHLFFBQVEsQ0FBQztZQUNsSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixPQUFPO1NBQ1I7UUFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7O1lBRWhDLDRFQUE0RTtZQUM1RSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUNuRCxNQUFNLFdBQVcsR0FBRztvQkFDbEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakMsUUFBUSxFQUFFLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsMENBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLFdBQVcsRUFBRSxDQUFDO2lCQUNmLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsMEVBQTBFO1lBQzFFLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ25ELE1BQU0sU0FBUyxHQUFHO29CQUNoQixXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNqQyxRQUFRLEVBQUUsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQywwQ0FBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbEUsV0FBVyxFQUFFLENBQUM7aUJBQ2YsQ0FBQTtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEQ7WUFFRCxrRkFBa0Y7WUFDbEYsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDbkQsTUFBTSxnQkFBZ0IsR0FBRztvQkFDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakMsUUFBUSxFQUFFLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsMENBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLFdBQVcsRUFBRSxDQUFDO2lCQUNmLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdkQ7WUFFRCx1RUFBdUU7WUFDdkUsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDbkQsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakMsUUFBUSxFQUFFLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsMENBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLFdBQVcsRUFBRSxDQUFDO2lCQUNmLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzdDO1lBRUQ7aUVBQ3FEO1lBQ3JELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBRSxHQUFHLEVBQUU7Z0JBQ2pDLE1BQU0sRUFBRSxHQUFHO29CQUNULElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNuQyxDQUFBO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNuQztZQUNEO2lHQUNxRjtZQUNyRixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUUsR0FBRyxFQUFFO2dCQUNqQyxNQUFNLFFBQVEsR0FBRztvQkFDZixZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsb0NBQW9DO29CQUNwQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUN2QixZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztpQkFDekIsQ0FBQTtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEQ7WUFDRDsrRkFDbUY7WUFDbkYsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFFLEdBQUcsRUFBRTtnQkFDakMsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDakIsb0NBQW9DO29CQUNwQyxzREFBc0Q7b0JBQ3RELFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUN0QixDQUFBO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNoRDtZQUVEO3VFQUMyRDtZQUMzRCxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDZixNQUFNLG9CQUFvQixHQUFHO29CQUMzQixJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDakIsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM1QixDQUFBO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDbkU7UUFFSCxDQUFDLENBQUMsQ0FBQztRQUVILGdHQUFnRztRQUNoRyxJQUFHLE1BQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLDBDQUFFLE1BQU0sRUFBRTtZQUN6QyxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxRQUFhLEVBQUUsQ0FBUyxFQUFFLEVBQUU7O2dCQUNuRSxJQUFJLEtBQUssR0FBRyxNQUFBLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsT0FBTyxDQUFDLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxTQUFTLENBQUMsQ0FBQztnQkFDdEQsSUFBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUN2QiwwQ0FBMEM7b0JBQzFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBQzt3QkFDckIsSUFBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7NEJBQ3BCLE1BQU0sUUFBUSxHQUFHO2dDQUNmLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFFLENBQUMsQ0FBQztnQ0FDM0IsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7NkJBQ3ZCLENBQUE7NEJBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDOUI7NkJBQU07NEJBQ0wsTUFBTTt5QkFDUDtxQkFDRjtvQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxhQUFhLENBQUM7aUJBQ3BFO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUVELHlGQUF5RjtJQUMzRixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsV0FBVyxDQUFDLEtBQStDOztRQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixRQUFPLEtBQUssRUFBRTtZQUNaLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxTQUFTLENBQUM7Z0JBQzNELE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLHdCQUF3QixHQUFHLE1BQUEsSUFBSSxDQUFDLFVBQVUsMENBQUUsT0FBTyxDQUFDO2dCQUN6RCxNQUFNO1lBQ1IsS0FBSyxjQUFjO2dCQUNqQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxZQUFZLENBQUM7Z0JBQzlELE1BQU07WUFDUjtnQkFDRSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxTQUFTLENBQUM7Z0JBQzNELE1BQU07U0FDVDtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM5RixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxnQkFBZ0IsQ0FBQyxNQUFXLEVBQUUsT0FBZSxFQUFFLFNBQWtCOztRQUMvRCxJQUFJLEdBQVEsQ0FBQztRQUNiLFFBQU8sT0FBTyxFQUFDO1lBQ2IsS0FBSyxXQUFXLENBQUMsQ0FBQztnQkFDaEIsSUFBRyxTQUFTLEVBQUM7b0JBQ1gsR0FBRyxHQUFHO3dCQUNKLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzdCLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbEIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzFCLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3ZCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzVCLHNCQUFzQixFQUFFLElBQUk7d0JBQzVCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDakIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ2hDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDckIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQix1QkFBdUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNuQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQyw2QkFBNkI7d0JBQzdCLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUN2QixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIseUJBQXlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3FCQUM1QixDQUFBO29CQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDbEYsR0FBRyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxHQUFHLEVBQUUsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNyRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsR0FBRyxFQUFFLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxLQUFLLENBQUMsQ0FBQztvQkFDMUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUksTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsU0FBUywwQ0FBRSxNQUFNLENBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNoTSxPQUFPLEdBQUcsQ0FBQztpQkFDWjtxQkFBTTtvQkFDTCxHQUFHLEdBQUc7d0JBQ0osa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsc0JBQXNCLEVBQUUsSUFBSTt3QkFDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNkLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNoQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ25DLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLDZCQUE2Qjt3QkFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQix5QkFBeUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7cUJBQzVCLENBQUE7b0JBQ0QsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ2xGLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEdBQUcsRUFBRSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3JFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxHQUFHLEVBQUUsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMxRCxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxTQUFTLDBDQUFFLE1BQU0sQ0FBQSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDOUgsT0FBTyxHQUFHLENBQUM7aUJBQ1o7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDZCxJQUFHLFNBQVMsRUFBQztvQkFDWCxHQUFHLEdBQUc7d0JBQ0osa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsc0JBQXNCLEVBQUUsSUFBSTt3QkFDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUM3QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMsNkJBQTZCO3dCQUM3QixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQixlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztxQkFDNUIsQ0FBQTtvQkFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDM0MsR0FBRyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDbEYsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUM3SCxPQUFPLEdBQUcsQ0FBQztpQkFDWjtxQkFBTTtvQkFDTCxHQUFHLEdBQUc7d0JBQ0osa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsc0JBQXNCLEVBQUUsSUFBSTt3QkFDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMsNkJBQTZCO3dCQUM3QixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQixlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztxQkFDNUIsQ0FBQTtvQkFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDM0MsR0FBRyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDbEYsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzFELE9BQU8sR0FBRyxDQUFDO2lCQUNaO2FBQ0Y7WUFDRCxLQUFLLGNBQWMsQ0FBQyxDQUFDO2dCQUNuQixJQUFHLFNBQVMsRUFBQztvQkFDWCxHQUFHLEdBQUc7d0JBQ0osa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsc0JBQXNCLEVBQUUsSUFBSTt3QkFDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQy9CLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNuQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ25DLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLDZCQUE2Qjt3QkFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQix5QkFBeUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7cUJBQzVCLENBQUE7b0JBQ0QsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ2xGLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFJLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLG9CQUFvQiwwQ0FBRSxNQUFNLENBQUEsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ2xLLE9BQU8sR0FBRyxDQUFDO2lCQUNaO3FCQUFNO29CQUNMLEdBQUcsR0FBRzt3QkFDSixrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN2QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixzQkFBc0IsRUFBRSxJQUFJO3dCQUM1QixTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDcEIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDL0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2xCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQy9CLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMsNkJBQTZCO3dCQUM3QixXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQixlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztxQkFDNUIsQ0FBQTtvQkFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDM0MsR0FBRyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDbEYsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxvQkFBb0IsMENBQUUsTUFBTSxDQUFBLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMvRixPQUFPLEdBQUcsQ0FBQztpQkFDWjthQUNGO1lBQ0QsT0FBTyxDQUFDLENBQUM7YUFFUjtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw0QkFBNEIsQ0FBQyxJQUFTO1FBQ3BDLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQztRQUMxQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pELFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNoRDtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxJQUFTOztRQUNuQixNQUFNLGNBQWMsR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxrQkFBa0IsQ0FBQywwQ0FBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzFHLE1BQU0sUUFBUSxHQUFHLENBQUEsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSwwQ0FBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLENBQUEsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsU0FBUywwQ0FBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3pELElBQUcsUUFBUSxJQUFJLGNBQWMsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyRSxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksQ0FBQyxJQUFTO1FBQ3BCLElBQUksQ0FBQyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEtBQUksQ0FBRSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsTUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsTUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZUFBZSxDQUFBLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLENBQUMsQ0FBQyxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQSxDQUFDLElBQUksQ0FBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxlQUFlLENBQUEsQ0FBQyxDQUFDLENBQUM7WUFDL0csQ0FBQyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEtBQUksQ0FBQyxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsTUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsTUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxDQUFBLENBQUMsSUFBSSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsTUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZUFBZSxDQUFBLENBQUMsQ0FBQyxDQUFDO1lBQzNJLENBQUMsQ0FBQyxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsQ0FBQSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxlQUFlLENBQUEsQ0FBQyxDQUFDLENBQUM7WUFDOUcsQ0FBQyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEtBQUksQ0FBQyxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsTUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJ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O1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGRSaXNrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2FkZC1yaXNrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEZyZXF1ZW5jeUJ1bGtTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvZnJlcXVlbmN5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9yZXNwb25zaWJpbGl0eS5zZXJ2aWNlJztcclxuXHJcbnR5cGUgQU9BID0gYW55W11bXTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eVdpdGhUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgaXNOb3RpZmljYXRpb25QZW5kaW5nID0gMDtcclxuICBAT3V0cHV0KCkgY2xvc2VBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoJ3VwbG9hZGVkRmlsZScpIHNldCB1cGxvYWRlZEZpbGVEYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51cGxvYWRlZEZpbGUoZGF0YSk7XHJcbiAgfVxyXG5cclxuICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ6IGFueSA9IHtcclxuICAgIGhlYWRlcjogW10sXHJcbiAgICByZXBvcnRzOiBbXSxcclxuICB9XHJcbiAgdGFiVHlwZTogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJyA9ICdmcmVxdWVuY3knO1xyXG4gIHRhYkluZGV4OiBhbnkgPSB7XHJcbiAgICBmcmVxdWVuY3k6MCxcclxuICAgIG9uZ29pbmc6MSxcclxuICAgIG9uQ29tcGxldGlvbjoyXHJcbiAgfVxyXG5cclxuICBidWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBmcmVxdWVuY3k6IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICAgIG9uZ29pbmc6IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICAgIG9uQ29tcGxldGlvbjoge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0ZW1wbGF0ZUluZm86IGFueSA9IHtcclxuXHJcbiAgICBjYXRlZ29yeUxpc3Q6IFtdLFxyXG4gICAgcmNMaXN0OiBbXSxcclxuICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgYXNzaWduZWVzTGlzdDogW10sXHJcbiAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXHJcbiAgICBtZW1iZXJJZDogJydcclxuICB9XHJcbiAgaXNMb2FkZXIgPSBmYWxzZTtcclxuICBzaG93Q2F0ZWdvcnlMaXN0ID0gZmFsc2U7XHJcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XHJcbiAgZG93bmxvYWRJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICBpc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICBmaWxlTmFtZTogYW55O1xyXG4gIGRhdGE6IGFueTtcclxuICBzaG93RXhjZWwgPSBmYWxzZTtcclxuICB1cGxvYWRlZEZpbGVzOiBhbnkgPSBbXTtcclxuICBmaWxlUmVzcG9uc2U6IGFueSA9IFtdO1xyXG4gIGZpbGVWYWx1ZTogYW55O1xyXG4gIG1lbWJlcklkID0gMDtcclxuICBvcmdhbml6YXRpb25JZCA9IDA7XHJcbiAgZXJyb3JNZXNzYWdlID0gXCIgaW52YWxpZCBmaWxlIGVycm9yXCJcclxuICBkb3dubG9hZFN0YXR1czogc3RyaW5nID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgZG93bmxvYWRQZXJjZW50ID0gMDtcclxuICBkZWZhdWx0T3duZXIgPSAnJ1xyXG4gIHNtaWxleU1lc3NhZ2UgPSBgWW91J3JlIEFsbCBTZXQhIFdlJ3JlIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0IGFuZCB5b3Ugd2lsbCBiZSBub3RpZmllZCB2aWEgZW1haWwgdXBvbiBjb21wbGV0aW9uLmA7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHsgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJywgY2xhc3M6ICd3aGl0ZS1idG4nLCBpZDogJ2FkZE1vcmUnIH0sXHJcbiAgICB7IGJ1dHRvblRleHQ6ICh0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZykgPyAnVmlldyBSZXNwb25zaWJpbGl0aWVzIEluIFF1ZXVlJyA6ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnLCBjbGFzczogJ2JsdWUtYnRuJywgaWQ6ICd2aWV3JyB9LFxyXG4gIF07XHJcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gIG1lbWJlcl9vYmpfaWQgPSAnJztcclxuICByaXNrQ2xhc3NFbmFibGVkOiBhbnk7XHJcbiAgdXNlckluZm8gITogYW55O1xyXG4gIHJlc3BvbnNpYmlsaXR5RGF0YSAhOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJpc2tTZXJ2aWNlOiBBZGRSaXNrU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5QnVsa1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuXHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgdGhpcy5tZW1iZXJfb2JqX2lkID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLl9pZDtcclxuICAgIHRoaXMudXNlckluZm8gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkudXNlcjtcclxuICAgIHRoaXMuZGVmYXVsdE93bmVyID0gKHRoaXMudXNlckluZm8pID8gdGhpcy51c2VySW5mby5uYW1lICsgJyAoJyArIHRoaXMudXNlckluZm8uZW1haWwgKyAnKScgOiAnJztcclxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yaXNrQ2xhc3NFbmFibGVkID0gcmVzLmVuYWJsZV9yaXNrY2xhc3NcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlckJyb3dzZUZpbGUoKSB7XHJcbiAgICBjb25zdCBnZXRGaWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVJbnB1dCcpO1xyXG4gICAgaWYgKGdldEZpbGUpIHtcclxuICAgICAgZ2V0RmlsZS5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRVc2VyRGV0YWlscygpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckluZm8oKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID0gcmVzLm5vdGlmaWNhdGlvbl9wZW5kaW5nX2ZsYWc7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkZWRGaWxlKGV2ZW50OiBhbnksIHRhYlR5cGU/OmFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgICByY0xpc3Q6IFtdLFxyXG4gICAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcclxuICAgICAgICBtZW1iZXJJZDogJydcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XHJcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzY3JvbGxSZWZlcmVuY2UnKTtcclxuICAgICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWxlTmFtZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXS5uYW1lO1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMucHVzaChldmVudC50YXJnZXQuZmlsZXMpO1xyXG4gICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2ZW50LnRhcmdldCBhcyBEYXRhVHJhbnNmZXI7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY3VybHlcclxuICAgICAgaWYgKHRhcmdldC5maWxlcy5sZW5ndGggIT09IDEpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBtdWx0aXBsZSBmaWxlcycpO1xyXG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1swXTtcclxuICAgICAgICBjb25zdCBzaGVldDI6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXQzOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTE6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbM107XHJcbiAgICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXRSZXBvcnQyOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1tzaGVldDJdO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0UmVwb3J0MzogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbc2hlZXQzXTtcclxuICAgICAgICBjb25zdCB0ZW1wRGF0YTogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lMV07XHJcbiAgICAgICAgY29uc3QgdERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHsgaGVhZGVyOiAxIH0pIGFzIEFPQTtcclxuICAgICAgICBjb25zdCB0ZW1wTGlzdCA9IHREYXRhLmZpbHRlcigoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgdGhpcy5zZXRPcmdhbml6YXRpb25EZXRhaWxzKHRlbXBMaXN0KTtcclxuICAgICAgICB3Yi5TaGVldE5hbWVzLmZvckVhY2goKHNoZWV0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHN3aXRjaChzaGVldD8udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjYXNlICdmcmVxdWVuY3kgcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyh3cywgc2hlZXQpXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcycgOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUZvckRpZmZlcmVudFRhYnMoc2hlZXRSZXBvcnQyLCBzaGVldCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uIGNvbXBsZXRpb24gcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyhzaGVldFJlcG9ydDMsIHNoZWV0KVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0IDogYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGFyZ2V0LmZpbGVzWzBdKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHdvcmtzaGVldCBhbmQgYSBzaGVldCBuYW1lLCBhbmQgdGhlbiBpdCBzZXRzIHRoZSBkYXRhIGZvciBkaWZmZXJlbnQgdGFicy5cclxuICAgKiBAcGFyYW0gd3MgLSBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZ1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaGVldCAtIHN0cmluZyAtIHRoZSBuYW1lIG9mIHRoZSBzaGVldCBpbiB0aGUgZXhjZWwgZmlsZVxyXG4gICAqIEByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgXCJyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRcIiB3aGljaCBpcyBhbiBvYmplY3QuXHJcbiAgICovXHJcbiAgc2V0RGF0YUZvckRpZmZlcmVudFRhYnMod3M6IFhMU1guV29ya1NoZWV0LCBzaGVldDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICBzdWJIZWFkaW5nOltdLFxyXG4gICAgfVxyXG4gICAgbGV0IHNoZWV0VmFsdWUgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcclxuICAgICAgaGVhZGVyOiAxLCByYXc6IGZhbHNlLFxyXG4gICAgfSkgYXMgQU9BO1xyXG4gICAgbGV0IGRhdGEgID0gc2hlZXRWYWx1ZS5maWx0ZXIoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGxldCBpc1VuZGVmaW5lZCA9ICcnO1xyXG4gICAgICByZXMuZm9yRWFjaCgoZWw6IGFueSApPT4ge1xyXG4gICAgICAgIGlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQgKyBlbDtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmKHNoZWV0VmFsdWVbNF1bMV0gPT09J1Byb2dyYW0nKXtcclxuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gOSAmJiByZXNbOF0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDYgJiYgcmVzWzVdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLmZpbGVOYW1lLnN1YnN0cigtNSkgIT09ICcueGxzeCcpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXIgPSBjbG9uZURlZXAoZGF0YVs0XSk7XHJcbiAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuc3ViSGVhZGluZyA9IGNsb25lRGVlcChkYXRhWzVdKTtcclxuXHJcbiAgICBkYXRhID0gZGF0YS5zbGljZSg3KTtcclxuICAgIGlmICgodGhpcy5tZW1iZXJfb2JqX2lkICE9IHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkKSkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICsgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5RGF0YSA9IGRhdGEuZmlsdGVyKChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5RGF0YS5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdmFsaWREYXRlO1xyXG4gICAgICBjb25zdCB2YWxpZFVzZXIgPSB0aGlzLnJldHVybklkcyhyZXBvcnRbMl0sICdlbnRydXN0ZWRfdG8nKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgaWYocmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0nUHJvZ3JhbScpIHtcclxuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzRdLCByZXBvcnRbNV0pO1xyXG4gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNV0sIHJlcG9ydFs2XSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogUHVzaGluZyB0aGUgcmVwb3J0IGRldGFpbHMgaW50byB0aGUgYnVsa1VwbG9hZCBvYmplY3QgYXMgcGVyIHRhYiB0YWJzICovXHJcbiAgICAgIGlmKHNoZWV0Py50b0xvd2VyQ2FzZSgpID09PSAnZnJlcXVlbmN5IHJlc3BvbnNpYmlsaXRpZXMnKXtcclxuICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQucmVwb3J0cy5wdXNoKHRoaXMuc2V0UmVwb3J0RGV0YWlscyhyZXBvcnQsICdmcmVxdWVuY3knLCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSkpO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5zdWJIZWFkaW5nID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5zdWJIZWFkaW5nO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZihzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcycpe1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2godGhpcy5zZXRSZXBvcnREZXRhaWxzKHJlcG9ydCwgJ29uZ29pbmcnLCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSkpO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLnN1YkhlYWRpbmcgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZihzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ29uIGNvbXBsZXRpb24gcmVzcG9uc2liaWxpdGllcycpe1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2godGhpcy5zZXRSZXBvcnREZXRhaWxzKHJlcG9ydCwgJ29uQ29tcGxldGlvbicsIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09J1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlKSk7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5oZWFkZXIgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlcjtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLnN1YkhlYWRpbmcgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBpc0VtcHR5ID0gdGhpcy5jaGVja0VtcHR5RmlsZShkYXRhKTtcclxuICAgIC8qIENoZWNraW5nIGlmIHRoZSBmaWxlIGlzIGVtcHR5LCBpZiBpdCBpcyBlbXB0eSBpdCB3aWxsIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyBub3RcclxuICAgIGVtcHR5IGl0IHdpbGwgY2hlY2sgaWYgdGhlIGZpbGUgaXMgdGhlIGNvcnJlY3QgZmlsZSwgaWYgaXQgaXMgbm90IHRoZSBjb3JyZWN0IGZpbGUgaXQgd2lsbFxyXG4gICAgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UuIElmIGl0IGlzIHRoZSBjb3JyZWN0IGZpbGUgaXQgd2lsbCBjYWxsIHRoZSBmaWxlVXBsb2FkKCkgZnVuY3Rpb24uICovXHJcbiAgICBpZiAoaXNFbXB0eSkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIGRldGFpbHMgZm9yIGFsbCBtYW5kYXRvcnkgZmllbGRzLiBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5Py5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKicgJiYgdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKicgJiYgdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LmhlYWRlclswXSAhPT0gJ1Jlc3BvbnNpYmlsaXR5IE5hbWUqJykge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICsgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVVcGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsZVZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGEgZnJlcXVlbmN5IG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgZnJlcXVlbmN5IG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIGZyZXF1ZW5jeS4gSWYgbm90LCBjaGVja1xyXG4gICAqIGlmIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25nb2luZyBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uZ29pbmcgb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gb25nb2luZy4gSWYgbm90LCBjaGVjayBpZlxyXG4gICAqIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25Db21wbGV0aW9uIG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgb25Db21wbGV0aW9uIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uQ29tcGxldGlvbi4gSWYgbm90LFxyXG4gICAqIHJldHVybiB0cnVlLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgY2hlY2tFbXB0eUZpbGUoZGF0YT86IGFueSkge1xyXG4gICAgbGV0IGlzRW1wdHkgPSBmYWxzZTtcclxuICAgIGlmKHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5Py5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgdGhpcy50YWJUeXBlID0gJ2ZyZXF1ZW5jeSc7XHJcbiAgICB9IGVsc2UgaWYodGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc7XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbmdvaW5nJztcclxuICAgIH0gZWxzZSBpZih0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbkNvbXBsZXRpb24nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNFbXB0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNFbXB0eTtcclxuICB9XHJcblxyXG4gIGNvbXBhcmVXaXRoQ3VycmVudERhdGUoZGF5OiBhbnksIG1vbnRoOiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtb250aEFuZFllYXIgPSBtb250aC5zcGxpdChcIidcIik7XHJcblxyXG4gICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQoZGF5ICsgJy0nICsgbW9udGhBbmRZZWFyWzBdICsgJy0nICsgMjAgKyBtb250aEFuZFllYXJbMV0gKyAnIDAwOjAwOjAwJywgJ0RELU1NTU0tWVlZWSBISDptbTpzcycpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpO1xyXG4gICAgICBpZiAoc3RhcnREYXRlID09IFwiSW52YWxpZCBkYXRlXCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgfSwgNSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgZGF0ZV92YWx1ZS5zZXRNb250aCh0eXBlb2YgbW9udGggIT09ICdudW1iZXInID8gbW9udGhOYW1lcy5maWx0ZXIoKHgpID0+IHgubW9udGggPT09IG1vbnRoPy5zdWJzdHJpbmcoMCwgMykpWzBdPy52YWx1ZSAtIDEgOiBtb250aCk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RnVsbFllYXIoTnVtYmVyKDIwICsgbW9udGguc3BsaXQoXCInXCIpWzFdKSk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XHJcbiAgICAgIC8vIGNvbnN0IHJlcG9ydERhdGUgPSBuZXcgRGF0ZShkYXkgKyBtb250aC5zcGxpdChcIidcIikpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygoY3VycmVudERhdGUudG9KU09OKCkuc3BsaXQoJ1QnKVswXSkrXCImJlwiKyhkYXRlX3ZhbHVlLnRvSlNPTigpLnNwbGl0KCdUJylbMF0pKVxyXG4gICAgICAvLyBkZWJ1Z2dlclxyXG4gICAgICBpZiAoKChjdXJyZW50RGF0ZS50b0pTT04oKS5zcGxpdCgnVCcpWzBdKSAhPSAoZGF0ZV92YWx1ZS50b0pTT04oKS5zcGxpdCgnVCcpWzBdKSkgJiYgKGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZSkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBpc1Bhc3REYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtcclxuICAgICAgeyB2YWx1ZTogMSwgbW9udGg6ICdKYW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxyXG4gICAgICB7IHZhbHVlOiAzLCBtb250aDogJ01hcicgfSxcclxuICAgICAgeyB2YWx1ZTogNCwgbW9udGg6ICdBcHInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxyXG4gICAgICB7IHZhbHVlOiA2LCBtb250aDogJ0p1bicgfSxcclxuICAgICAgeyB2YWx1ZTogNywgbW9udGg6ICdKdWwnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxyXG4gICAgICB7IHZhbHVlOiA5LCBtb250aDogJ1NlcCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTAsIG1vbnRoOiAnT2N0JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEyLCBtb250aDogJ0RlYycgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKCEoZGF5IHx8IG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjb25zdCByZXBvcnREYXRlID0gbmV3IERhdGUoZGF5ICsgbW9udGguc3BsaXQoXCInXCIpKTtcclxuICAgICAgY29uc3QgZGF0ZV92YWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgodHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJyA/IG1vbnRoTmFtZXMuZmlsdGVyKCh4KSA9PiB4Lm1vbnRoID09PSBtb250aD8uc3Vic3RyaW5nKDAsIDMpKVswXT8udmFsdWUgLSAxIDogbW9udGgpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICBpZiAoY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgZG93bmxvYWREYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKS5zcGxpdCgnICcpO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgRW50cnVzdCBSZXNwb25zaWJpbGl0aWVzLSR7ZG93bmxvYWREYXRlWzJdfS0ke2Rvd25sb2FkRGF0ZVsxXX0tJHtkb3dubG9hZERhdGVbM119Lnhsc3hgO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZG93bmxvYWRSZXNwb25zaWJpbGl0eVRlbXBsYXRlKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDEwMCAqIChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMucmlza1NlcnZpY2UuZG93bkxvYWRGaWxlKGRhdGEuYm9keSwgJ2FwcGxpY2F0aW9uL3hsc3gnLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgICB9LCAxNTAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ0RPV05MT0FERUQnO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0gW107XHJcbiAgICBjb25zdCBmcmVxdWVuY3lUeXBlQXJyYXkgPSBbJzEnLCAnMicsICczJywgJzQnLCAnNycsICcwJywgJzYnIF07XHJcbiAgICBjb25zdCBkZWZhdWx0V2luZG93ID0gWzAsIDIsIDcsIDMwLCA3LCAxNSwgM107XHJcbiAgICBjb25zdCBkZWZhdWx0RmFpbGVkRGF5ID0gWzEsIDIsIDUsIDUsIDUsIDUsIDVdO1xyXG4gICAgLy8gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3lcclxuICAgIGxldCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cyAsIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzKTtcclxuICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMuZm9yRWFjaCgocmVwb3J0OiBhbnkpID0+IHtcclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVwb3J0LmlzVmFsaWQpIHtcclxuICAgICAgICBpZihyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkgPT09IG51bGwpe1xyXG4gICAgICAgICAgcmVwb3J0LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmNEZXRhaWxzOiBhbnkgPSB0aGlzLnJldHVybklkcyhyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5Q2VudGVyLCAncmNfaWQnKTtcclxuICAgICAgICBjb25zdCByZXZpZXdlckRldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydD8ucmV2aWV3ZXIsICdyZXZpZXdlcicpO1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbm9yRGV0YWlsczogYW55ID0gKHJlcG9ydD8uYXNzaWdub3IpID8gdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25vciwgJ2Fzc2lnbm9yJykgOiAnJztcclxuICAgICAgICAvLyBjb25zdCBjY0RldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydC5hbHdheXNOb3RpZnksICdjYycpO1xyXG4gICAgICAgIGNvbnN0IGNjRGV0YWlsczogYW55ID0gdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5vdmVyc2VlciwgJ2NjJyk7XHJcbiAgICAgICAgY29uc3QgY2NGYWlsdXJlRGV0YWlsczogYW55ID0gdGhpcy5yZXR1cm5JZHMocmVwb3J0Lm5vdGlmeU9uRmFpbHVyZSwgJ2NjRmFpbHVyZScpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IGNhdGVnb3J5TmFtZSA9IChyZXBvcnQucmVzcG9uc2liaWxpdHlDYXRlZ29yeS5pbmNsdWRlcygnW1dJVEhJTl0nKSkgPyByZXBvcnQucmVzcG9uc2liaWxpdHlDYXRlZ29yeS5zcGxpdCgnIFsnKVswXSA6IHJlcG9ydC5yZXNwb25zaWJpbGl0eUNhdGVnb3J5XHJcbiAgICAgICAgbGV0IG9uZ29pbmdSZW1pbmRlclR5cGU6IGFueSA9IHsnV2Vla2x5JzogMSwgJ01vbnRobHknOiAyLCAnUXVhcnRlcmx5JzogM31cclxuICAgICAgICBjb25zdCBvbmdvaW5nVmFsdWVzID0ge1xyXG4gICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydD8uc2V0UmVtaW5kZXIsXHJcbiAgICAgICAgICBmcmVxdWVuY3lSZW1pbmRlciA6IG9uZ29pbmdSZW1pbmRlclR5cGVbcmVwb3J0Py5mcmVxdWVuY3lSZW1pbmRlcl1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5VmFsdWUgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2Uuc2hvcnRIYW5kX2ZyZXFDYWwocmVwb3J0Py5mcmVxdWVuY3ksIHJlcG9ydD8uZGF5LCByZXBvcnQ/Lm1vbnRoLCAnJywgcmVwb3J0Py5kdWVEYXRlLCBvbmdvaW5nVmFsdWVzKTtcclxuICAgICAgICAvLyBjb25zdCBmcmVxdWVuY3lWYWx1ZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChyZXBvcnQ/LmZyZXF1ZW5jeSwgcmVwb3J0Py5kYXksIHJlcG9ydD8ubW9udGgsICcnKTtcclxuICAgICAgICBjb25zdCBkYXRlQW5kTW9udGggPSByZXBvcnQ/Lm1vbnRoPy5zcGxpdChcIidcIik7XHJcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZUFuZE1vbnRoID8gbW9tZW50KHJlcG9ydD8uZGF5ICsgJy0nICsgZGF0ZUFuZE1vbnRoWzBdICsgJy0nICsgMjAgKyBkYXRlQW5kTW9udGhbMV0gKyAnIDAwOjAwOjAwJywgJ0RELU1NTU0tWVlZWSBISDptbTpzcycpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpOiAnJztcclxuXHJcbiAgICAgICAgbGV0IGNvbXBsZXRlRGF5cztcclxuICAgICAgICBsZXQgbm90Q29tcGxldGVEYXlzXHJcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5VHlwZSA9IGZyZXF1ZW5jeVZhbHVlPy5zcGxpdCgnficpWzBdO1xyXG4gICAgICAgIGlmIChyZXBvcnQucmVzcG9uc2liaWxpdHlXaW5kb3cgJiYgcmVwb3J0LnJlc3BvbnNpYmlsaXR5V2luZG93ICE9PSAnJykge1xyXG4gICAgICAgICAgY29tcGxldGVEYXlzID0gcmVwb3J0Py5yZXNwb25zaWJpbGl0eVdpbmRvdztcclxuICAgICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeVR5cGVBcnJheT8uaW5jbHVkZXMoZnJlcXVlbmN5VHlwZSkpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4T2ZBcnJheSA9IGZyZXF1ZW5jeVR5cGVBcnJheT8uaW5kZXhPZihmcmVxdWVuY3lUeXBlKTtcclxuICAgICAgICAgIGNvbXBsZXRlRGF5cyA9IGRlZmF1bHRXaW5kb3dbaW5kZXhPZkFycmF5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcG9ydD8uZmFpbGVkQWZ0ZXIgJiYgcmVwb3J0Py5mYWlsZWRBZnRlciAhPT0gJycpIHtcclxuICAgICAgICAgIG5vdENvbXBsZXRlRGF5cyA9IHJlcG9ydD8uZmFpbGVkQWZ0ZXI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3lUeXBlQXJyYXkuaW5jbHVkZXMoZnJlcXVlbmN5VHlwZSkpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4T2ZBcnJheSA9IGZyZXF1ZW5jeVR5cGVBcnJheT8uaW5kZXhPZihmcmVxdWVuY3lUeXBlKTtcclxuICAgICAgICAgIG5vdENvbXBsZXRlRGF5cyA9IGRlZmF1bHRGYWlsZWREYXlbaW5kZXhPZkFycmF5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnRlbXBsYXRlSW5mbz8ubWVtYmVySWQsXHJcbiAgICAgICAgICBvcmdhbmlzYXRpb25faWQ6IHRoaXMub3JnYW5pemF0aW9uSWQsXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IChhc3NpZ25vckRldGFpbHMpID8gYXNzaWdub3JEZXRhaWxzPy5tZW1iZXJJZCA6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgICAgICBtZW1iZXJfbmFtZTogKGFzc2lnbm9yRGV0YWlscykgPyAoKHJlcG9ydD8uYXNzaWdub3IpID8gcmVwb3J0Py5hc3NpZ25vci5zcGxpdCgnICgnKVswXSA6ICcnKSA6ICgodGhpcy5kZWZhdWx0T3duZXIpID8gdGhpcy5kZWZhdWx0T3duZXI/LnNwbGl0KCcgKCcpWzBdIDogJycpLFxyXG4gICAgICAgICAgbWVtYmVyX2VtYWlsOiAoYXNzaWdub3JEZXRhaWxzKSA/ICgocmVwb3J0Py5hc3NpZ25vcikgPyByZXBvcnQ/LmFzc2lnbm9yPy5zcGxpdCgnICgnKVsxXT8ucmVwbGFjZSgnKScsICcnKSA6ICcnKSA6ICgodGhpcy5kZWZhdWx0T3duZXIpID8gdGhpcy5kZWZhdWx0T3duZXI/LnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJykgOiAnJyksXHJcbiAgICAgICAgICBjcmVhdGVkX2J5OiAoYXNzaWdub3JEZXRhaWxzKSA/IHRoaXMubWVtYmVySWQgOiAwLFxyXG4gICAgICAgICAgcmVwb3J0X25hbWU6IHJlcG9ydD8ucmVzcG9uc2liaWxpdHlOYW1lID8/ICcnLFxyXG4gICAgICAgICAgZW50cnVzdGVkX3RvOiByZXBvcnQ/LmFzc2lnbmVlPy5zcGxpdCgnICgnKVswXSA/PyAnJyxcclxuICAgICAgICAgIGVudHJ1c3RlZF90b19pZDogdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpLFxyXG4gICAgICAgICAgZW1haWxfYWRkcmVzczogcmVwb3J0Py5hc3NpZ25lZT8uc3BsaXQoJyAoJylbMV0/LnJlcGxhY2UoJyknLCAnJykgPz8gJycsXHJcbiAgICAgICAgICBpc0dyb3VwQXNzaWduVG86IHJlcG9ydD8uYXNzaWduZWVUeXBlPy5pbmNsdWRlcygnQW55JykgPyAxIDogMCxcclxuICAgICAgICAgIC8vIGNhdGVnb3J5X25hbWU6IGNhdGVnb3J5TmFtZSxcclxuICAgICAgICAgIGNhdGVnb3J5X25hbWVfd2l0aF90cmVlOiAnJyxcclxuICAgICAgICAgIGNhdGVnb3J5X2lkOiB0aGlzLmdldFByb2dyYW1JZChyZXBvcnQ/LnByb2dyYW0sIHJlcG9ydD8ucHJvZ3JhbUNhdGVnb3J5KS5jYXRlZ29yeUlkPy50b1N0cmluZygpID8/ICcnLFxyXG4gICAgICAgICAgcHJvZ3JhbV9jYXRfaWRzOiB0aGlzLmdldFByb2dyYW1JZChyZXBvcnQ/LnByb2dyYW0sIHJlcG9ydD8ucHJvZ3JhbUNhdGVnb3J5KT8uY2hpbGRQcm9ncmFtSWQgPyBbdGhpcy5nZXRQcm9ncmFtSWQocmVwb3J0Py5wcm9ncmFtLCByZXBvcnQ/LnByb2dyYW1DYXRlZ29yeSk/LmNoaWxkUHJvZ3JhbUlkXSA6IFtdLFxyXG4gICAgICAgICAgcmNfbmFtZTogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5uYW1lIDogJycsXHJcbiAgICAgICAgICByY19pZDogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5yY0lkIDogMCxcclxuICAgICAgICAgIGVudGl0eV90cmVlOiAocmNEZXRhaWxzICYmIHJjRGV0YWlscz8ucmNJZCApID8gW3tcclxuICAgICAgICAgICAgcGFyZW50X3JjX2lkczogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5wYXJlbnRJZHMgOiBbXSxcclxuICAgICAgICAgICAgcmNfaWQ6IHJjRGV0YWlscyA/IHJjRGV0YWlscz8ucmNJZCA6IDBcclxuICAgICAgICAgIH1dOltdLFxyXG4gICAgICAgICAgZnJlcXVlbmN5X2hhbmRsZXI6IGZyZXF1ZW5jeVZhbHVlLFxyXG4gICAgICAgICAgY29tcGxpYW5jZV90eXBlOiBmcmVxdWVuY3lWYWx1ZT8uc3BsaXQoJ34nKVswXSxcclxuICAgICAgICAgIGZyZXF1ZW5jeV9kZXNjcmlwdGlvbjogcmVwb3J0Py5mcmVxdWVuY3ksXHJcbiAgICAgICAgICBzdGFydF9kYXRlOiAocmVwb3J0Py5kYXkpID8gc3RhcnREYXRlIDogY3VycmVudERhdGUgKyAnIDAwOjAwOjAwJyxcclxuICAgICAgICAgIHJpc2tfY2xhc3M6IHJlcG9ydD8ucmVwb3J0Q2xhc3MgPz8gJycsXHJcbiAgICAgICAgICByaXNrX2NsYXNzSWQ6IChyZXBvcnQ/LnJlcG9ydENsYXNzKSA/IHRoaXMucmV0dXJuSWRzKHJlcG9ydD8ucmVwb3J0Q2xhc3MsICdyaXNrX2NsYXNzJykgOiAoKHRoaXMucmlza0NsYXNzRW5hYmxlZCkgPyAxIDogMiksXHJcbiAgICAgICAgICBkb2NfdXRjOiAwLFxyXG4gICAgICAgICAgY29tbWVudDogcmVwb3J0Py5ub3RlcyA/PyAnJyxcclxuICAgICAgICAgIGNjX21haWw6IGNjRGV0YWlscyA/IGNjRGV0YWlscz8uZW1haWwgOiAnJyxcclxuICAgICAgICAgIGNjX21haWxfaWQ6IGNjRGV0YWlscyA/IGNjRGV0YWlscz8uZW1wbG95ZWVJZCA6ICcnLFxyXG4gICAgICAgICAgY2NfZmFpbGVkX21haWw6IGNjRmFpbHVyZURldGFpbHMgPyBjY0ZhaWx1cmVEZXRhaWxzPy5lbWFpbCA6ICcnLFxyXG4gICAgICAgICAgY2NfZmFpbHVyZV9pZDogY2NGYWlsdXJlRGV0YWlscyA/IGNjRmFpbHVyZURldGFpbHM/LmVtcGxveWVlSWQgOiAwLFxyXG4gICAgICAgICAgc2VuZF9yZW1pbmRlcjogXCJcIixcclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiAoZnJlcXVlbmN5VHlwZSA9PT0gJzEnKSA/IDAgOiBjb21wbGV0ZURheXMsXHJcbiAgICAgICAgICBmYWlsZWRfYWZ0ZXI6IG5vdENvbXBsZXRlRGF5cyxcclxuICAgICAgICAgIGV4Y2VsX3NoZWV0X25hbWU6IFwiXCIsXHJcbiAgICAgICAgICByZXBvcnRfdXBsb2FkX2ZsYWc6ICgocmVwb3J0Py5pc0Zvcm1hdCA9PT0gJ1llcycpICYmIHJlcG9ydD8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk/Lmxlbmd0aCkgPyAxIDogMCxcclxuICAgICAgICAgIHJlcG9ydF9pZDogMCxcclxuICAgICAgICAgIGlzX2Fzc2lnbmVkX2ZsYWc6IDAsXHJcbiAgICAgICAgICBwcml2YXRlX2xpYnJhcnlfaWQ6IDAsXHJcbiAgICAgICAgICBrZXljb21wbGlhbmNlOiAocmVwb3J0Py5rZXlSZXNwb25zaWJpbGl0eSA9PT0gJ1llcycpID8gJ1llcycgOiAnTm8nLFxyXG4gICAgICAgICAga2V5X2NvbXBsaWFuY2U6IChyZXBvcnQ/LmtleVJlc3BvbnNpYmlsaXR5ID09PSAnWWVzJykgPyAxIDogMCxcclxuICAgICAgICAgIHJldmlld2VySWQ6IHJldmlld2VyRGV0YWlscyA/IHJldmlld2VyRGV0YWlscz8uZW1wbG95ZWVJZCA6IDAsXHJcbiAgICAgICAgICByZXZpZXdlcl9hcnI6ICggcmV2aWV3ZXJEZXRhaWxzICYmIHJldmlld2VyRGV0YWlscz8uZW1wbG95ZWVJZCApPyB7XHJcbiAgICAgICAgICAgIGxldmVsMToge1xyXG4gICAgICAgICAgICAgIHJldmlld2VyczogW3tcclxuICAgICAgICAgICAgICAgIG1lbWJlcl9pZDogcmV2aWV3ZXJEZXRhaWxzID8gcmV2aWV3ZXJEZXRhaWxzPy5lbXBsb3llZUlkIDogMCxcclxuICAgICAgICAgICAgICAgIHJldmlld2VyX2FjY2VwdDogMFxyXG4gICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgIHR5cGU6IFwiU0VRVUVOVElBTFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH06e31cclxuICAgICAgICAgICxcclxuICAgICAgICAgIHJldmlld2VyV2luZG93OiAocmVwb3J0Py5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluICYmIHJlcG9ydD8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiAhPT0gJycpICA/IHJlcG9ydD8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiA6IDIsXHJcbiAgICAgICAgICByZXZpZXdlckZhaWx1cmU6IChyZXBvcnQ/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyICYmIHJlcG9ydD8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXIgIT09ICcnKSA/IHJlcG9ydD8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXIgOiAyLFxyXG4gICAgICAgICAgcmV2aWV3ZXJfZW1haWw6IHJldmlld2VyRGV0YWlscyA/IHJldmlld2VyRGV0YWlscz8uZW1haWwgOiAnJyxcclxuICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnQ/LmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5ID8gcmVwb3J0LmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5IDogJycsXHJcbiAgICAgICAgICBkb2N1bWVudGFyeUV2aWRlbmNlOiByZXBvcnQ/LmV2aWRlbmNlTm90ZXMgPz8gJycsXHJcbiAgICAgICAgICBpc2RvY3VtZW50YXJ5RXZpZGVuY2U6IChyZXBvcnQuZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID09PSAnWWVzJykgPyAxIDogMCxcclxuICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0Lm9iamVjdGl2ZSA/PyAnJyxcclxuICAgICAgICAgIGV4Y2VsX3NoZWV0X2luZm86IHRoaXMuZmlsZVJlc3BvbnNlLFxyXG4gICAgICAgICAgc2hvd0xpc3Q6IGZhbHNlLFxyXG4gICAgICAgICAgY3VzdG9tX3RhZ3M6ICdbXScsXHJcbiAgICAgICAgICBxdWVzdGlvbm5haXJlX3R5cGU6ICcnLFxyXG4gICAgICAgICAgb25fY29tcGxldGlvbl9vZl90eXBlOiAocmVwb3J0Py5mcmVxdWVuY3kgPT09ICdPbiBDb21wbGV0aW9uIG9mJyB8fCByZXBvcnQ/LmZyZXF1ZW5jeT8udG9Mb3dlckNhc2UoKSA9PT0gJ29uZ29pbmcnKSA/IDEgOiAwLFxyXG4gICAgICAgICAgb25fY29tcGxldGlvbl9vZjogdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5wYXJlbnRSZXNwb25zaWJpbGl0eSwgJ3BhcmVudFJlc3BvbnNpYmlsaXR5JykgPyBbdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5wYXJlbnRSZXNwb25zaWJpbGl0eSwgJ3BhcmVudFJlc3BvbnNpYmlsaXR5JyldIDogW10sXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheWxvYWQucHVzaChvYmopO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicGF5bG9hZHBheWxvYWRcIixwYXlsb2FkLCBcInJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9PT5cIiwgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIClcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmFkZEJ1bGtSZXNwb25zaWJpbGl0eShwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xyXG5cclxuICAgIH0sXHJcbiAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCAnYWxlcnQnKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZykgOiBhbnkge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAncmNfaWQnOlxyXG4gICAgICAgIGxldCByY09iaiA9IHsgbmFtZTogJycsIHJjSWQ6IDAsIHBhcmVudElkczogW10gfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgocmNfZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmNfZWxlbWVudC5uYW1lID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUuaW5jbHVkZXMoJ1tXSVRISU5dJykpIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lLnNwbGl0KCcgW1dJVEhJTl0gJylbMF1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJjT2JqID0geyBuYW1lLCByY0lkOiByY19lbGVtZW50LnJjX2lkLCBwYXJlbnRJZHM6IHJjX2VsZW1lbnQucGFyZW50SWRzIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJjT2JqXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcclxuICAgICAgICBsZXQgcmV2aWV3ZXJPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKHJldmlld2VyRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmV2aWV3ZXJFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldmlld2VyT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJldmlld2VyRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IHJldmlld2VyRWxlbWVudC5teV9tZW1iZXJfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IHJldmlld2VyRWxlbWVudC5lbWFpbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJldmlld2VyT2JqO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzaWdub3InOlxyXG4gICAgICAgIGxldCBhc3NpZ25vck9iaiA9IHsgbmFtZTogJycsIG1lbWJlcklkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25vcnNMaXN0LmZvckVhY2goKGFzc2lnbm9yRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoYXNzaWdub3JFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGFzc2lnbm9yT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGFzc2lnbm9yRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtYWlsOiBhc3NpZ25vckVsZW1lbnQuZW1haWwsXHJcbiAgICAgICAgICAgICAgbWVtYmVySWQ6IGFzc2lnbm9yRWxlbWVudC5tZW1iZXJfaWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhc3NpZ25vck9iajtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjJzpcclxuICAgICAgICBsZXQgY2NPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfVxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QuZm9yRWFjaCgoY2NFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjY0VsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgY2NPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogY2NFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogY2NFbGVtZW50LmVtcGxveWVlX2lkLFxyXG4gICAgICAgICAgICAgIGVtYWlsOiBjY0VsZW1lbnQuZW1haWxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjY09iajtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2NGYWlsdXJlJzpcclxuICAgICAgICBsZXQgY2NmT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWduZWVzTGlzdC5mb3JFYWNoKChjY2ZFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjY2ZFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNjZk9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjY2ZFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogY2NmRWxlbWVudC5lbXBsb3llZV9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogY2NmRWxlbWVudC5lbWFpbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNjZk9iajtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2VudHJ1c3RlZF90byc6XHJcbiAgICAgICAgbGV0IGVtcElkID0gMFxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgZW1wSWQgPSBlbkVsZW1lbnQuZW1wbG95ZWVfaWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGVtcElkXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdwYXJlbnRSZXNwb25zaWJpbGl0eSc6XHJcbiAgICAgICAgbGV0IGlkID0gMFxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBhcmVudFJlc3BvbnNpYmlsaXR5LmZvckVhY2goKHJlc3BvbnNpYmlsaXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zaWJpbGl0eT8ubmFtZSA9PT0gaXRlbSkge1xyXG4gICAgICAgICAgICBpZCA9IHJlc3BvbnNpYmlsaXR5LmlkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlICdyaXNrX2NsYXNzJzpcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0gPT0gJ0xvdycpIHtcclxuICAgICAgICAgIHJldHVybiAxXHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdMb3ctTWVkaXVtJykge1xyXG4gICAgICAgICAgcmV0dXJuIDJcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT0gJ01lZGl1bS1IaWdoJykge1xyXG4gICAgICAgICAgcmV0dXJuIDNcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT0gJ0hpZ2gnKSB7XHJcbiAgICAgICAgICByZXR1cm4gNFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMFxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH1cclxuICAgIHRoaXMuYnVsa1VwbG9hZCA9IHtcclxuICAgICAgZnJlcXVlbmN5OiB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfSxcclxuICAgICAgb25nb2luZzoge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ29tcGxldGlvbjoge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICBtZW1iZXJJZDogJydcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY2xvc2VBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5LmVtaXQoKTtcclxuICB9XHJcbiAgYWN0aW9uKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQpIHtcclxuICAgICAgY2FzZSAnYWRkTW9yZSc6XHJcbiAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd2aWV3JzpcclxuICAgICAgICB0aGlzLnZpZXdSZXNwb25zaWJpbGl0aWVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVNtaWxleShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHsgZXZ0OiB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSwgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICB2aWV3UmVzcG9uc2liaWxpdGllcygpOiB2b2lkIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGxldCB1cmxTdWJzdHJpbmcgPSAnJztcclxuICAgIHRoaXMuZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSk7XHJcbiAgICBpZiAodGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcpIHtcclxuICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXRpZXMvcmVzcG9uc2liaWxpdGllcy1xdWV1ZSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmxTdWJzdHJpbmcgPSAnY29tcGxpYW5jZS9tYW5hZ2UtcmVzcG9uc2liaWxpdGllcyc7XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL2NvbXBsaWFuY2UvIy8nICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy9jb21wbGlhbmNlLyMvJyArIHVybFN1YnN0cmluZztcclxuICAgIH1cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBsb2FkIEZpbGUgdG8gdGhlIHNlcnZlclxyXG4gIGZpbGVVcGxvYWQoKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgY29uc3QgZmlsZSA9IHRoaXMudXBsb2FkZWRGaWxlc1swXVswXTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnc291cmNlZmlsZScsIGZpbGUpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZXN0aW5hdGlvbicsICdidWxrdXBsb2FkL2VudHJ1c3QvJyArIHRoaXMudXNlckluZm8uZW1haWwpO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZmlsZVVwbG9hZChmb3JtRGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzPy5maWxlbmFtZSkge1xyXG4gICAgICAgIHRoaXMuZmlsZVJlc3BvbnNlLnB1c2gocmVzKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCAnYWxlcnQnKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldE9yZ2FuaXphdGlvbkRldGFpbHModGVtcExpc3Q6IGFueSkge1xyXG4gICAgaWYodGVtcExpc3RbMF0gIT09IHVuZGVmaW5lZCAmJiB0ZW1wTGlzdFswXVsxOF0pe1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCA9IHRlbXBMaXN0WzBdWzE4XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgKyAnIFJFVFJZJztcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRlbXBMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG5cclxuICAgICAgLyogUHVzaGluZyB0aGUgdmFsdWUgb2YgcmVndWxhdGlvbnMgUHJvZ3JhbXMgaW50byB0aGUgY2F0ZWdvcnlMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFsyNl0gJiYgdHlwZW9mKGVsZW1lbnRbMjZdKSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCByZWd1bGF0aW9ucyA9IHtcclxuICAgICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50WzIyXSxcclxuICAgICAgICAgIHByb2dyYW1JZDogZWxlbWVudFsyNl0sXHJcbiAgICAgICAgICBhc3NpZ25lZTogSlNPTi5wYXJzZShlbGVtZW50WzMwXSksXHJcbiAgICAgICAgICByZXZpZXdlcjogSlNPTi5wYXJzZShlbGVtZW50WzMxXSksXHJcbiAgICAgICAgICBvdmVyc2VlcjogSlNPTi5wYXJzZShlbGVtZW50WzMyXSk/LmNvbmNhdChKU09OLnBhcnNlKGVsZW1lbnRbMzNdKSksXHJcbiAgICAgICAgICBwcm9ncmFtVHlwZTogMSxcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gocmVndWxhdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiBzdGFuZGFyZHMgUHJvZ3JhbXMgaW50byB0aGUgY2F0ZWdvcnlMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFsyN10gJiYgdHlwZW9mKGVsZW1lbnRbMjddKSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCBzdGFuZGFyZHMgPSB7XHJcbiAgICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFsyM10sXHJcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbMjddLFxyXG4gICAgICAgICAgYXNzaWduZWU6IEpTT04ucGFyc2UoZWxlbWVudFszNF0pLFxyXG4gICAgICAgICAgcmV2aWV3ZXI6IEpTT04ucGFyc2UoZWxlbWVudFszNV0pLFxyXG4gICAgICAgICAgb3ZlcnNlZXI6IEpTT04ucGFyc2UoZWxlbWVudFszNl0pPy5jb25jYXQoSlNPTi5wYXJzZShlbGVtZW50WzM3XSkpLFxyXG4gICAgICAgICAgcHJvZ3JhbVR5cGU6IDIsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKHN0YW5kYXJkcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFB1c2hpbmcgdGhlIHZhbHVlIG9mIGludGVybmFsIENvbnRyb2xzIFByb2dyYW1zIGludG8gdGhlIGNhdGVnb3J5TGlzdCBhcnJheS4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbMjhdICYmIHR5cGVvZihlbGVtZW50WzI4XSkgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJuYWxDb250cm9scyA9IHtcclxuICAgICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50WzI0XSxcclxuICAgICAgICAgIHByb2dyYW1JZDogZWxlbWVudFsyOF0sXHJcbiAgICAgICAgICBhc3NpZ25lZTogSlNPTi5wYXJzZShlbGVtZW50WzM4XSksXHJcbiAgICAgICAgICByZXZpZXdlcjogSlNPTi5wYXJzZShlbGVtZW50WzM5XSksXHJcbiAgICAgICAgICBvdmVyc2VlcjogSlNPTi5wYXJzZShlbGVtZW50WzQwXSk/LmNvbmNhdChKU09OLnBhcnNlKGVsZW1lbnRbNDFdKSksXHJcbiAgICAgICAgICBwcm9ncmFtVHlwZTogMyxcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2goaW50ZXJuYWxDb250cm9scyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFB1c2hpbmcgdGhlIHZhbHVlIG9mIG90aGVycyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXHJcbiAgICAgIGlmIChlbGVtZW50WzI5XSAmJiB0eXBlb2YoZWxlbWVudFsyOV0pID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGNvbnN0IG90aGVycyA9IHtcclxuICAgICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50WzI1XSxcclxuICAgICAgICAgIHByb2dyYW1JZDogZWxlbWVudFsyOV0sXHJcbiAgICAgICAgICBhc3NpZ25lZTogSlNPTi5wYXJzZShlbGVtZW50WzQyXSksXHJcbiAgICAgICAgICByZXZpZXdlcjogSlNPTi5wYXJzZShlbGVtZW50WzQzXSksXHJcbiAgICAgICAgICBvdmVyc2VlcjogSlNPTi5wYXJzZShlbGVtZW50WzQ0XSk/LmNvbmNhdChKU09OLnBhcnNlKGVsZW1lbnRbNDVdKSksXHJcbiAgICAgICAgICBwcm9ncmFtVHlwZTogMCxcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gob3RoZXJzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbOV0gaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eS4gSWYgaXQgaXMgbm90IG51bGwgYW5kIG5vdCBlbXB0eSwgaXQgaXNcclxuICAgICAgcHVzaGluZyB0aGUgZWxlbWVudFs5XSAoUkMpIHRvIHRoZSBhcnJheSAocmNMaXN0KS4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbOV0gJiYgZWxlbWVudFs5XSE9JyAnKSB7XHJcbiAgICAgICAgY29uc3QgcmMgPSB7XHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzldLFxyXG4gICAgICAgICAgcmNfaWQ6IGVsZW1lbnRbMTBdLFxyXG4gICAgICAgICAgcGFyZW50SWRzOiBKU09OLnBhcnNlKGVsZW1lbnRbMTFdKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QucHVzaChyYyk7XHJcbiAgICAgIH1cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbMl0gaXMgbm90IGVtcHR5IGFuZCBub3QgZXF1YWwgdG8gc3BhY2UuIElmIGl0IGlzIG5vdCBlbXB0eSBhbmQgbm90XHJcbiAgICAgIGVxdWFsIHRvIHNwYWNlLCB0aGVuIGl0IGlzIHB1c2hpbmcgdGhlIGFzc2lnbmVlIG9iamVjdCB0byB0aGUgYXNzaWduZWVzTGlzdCBhcnJheS4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbMl0gJiYgZWxlbWVudFsyXSE9JyAnKSB7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWUgPSB7XHJcbiAgICAgICAgICBuYW1lQW5kRW1haWw6IGVsZW1lbnRbMl0sXHJcbiAgICAgICAgICAvLyBuYW1lOiBlbGVtZW50WzExXS5zcGxpdCgnICgnKVswXSxcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbMF0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFsxXSxcclxuICAgICAgICAgIGVtcGxveWVlX2lkOiBlbGVtZW50WzNdLFxyXG4gICAgICAgICAgbXlfbWVtYmVyX2lkOiBlbGVtZW50WzRdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QucHVzaChhc3NpZ25lZSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbMl0gaXMgbm90IGVtcHR5IGFuZCBub3QgZXF1YWwgdG8gc3BhY2UuIElmIGl0IGlzIG5vdCBlbXB0eSBhbmQgbm90XHJcbiAgICAgIGVxdWFsIHRvIHNwYWNlLCBpdCB3aWxsIGNyZWF0ZSBhbiBvYmplY3QgYW5kIHB1c2ggaXQgdG8gdGhlIGFzc2lnbm9yc0xpc3QgYXJyYXkuICovXHJcbiAgICAgIGlmIChlbGVtZW50WzJdICYmIGVsZW1lbnRbMl0hPScgJykge1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbm9yID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50WzJdLFxyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFswXSxcclxuICAgICAgICAgIGVtYWlsOiBlbGVtZW50WzFdLFxyXG4gICAgICAgICAgLy8gbmFtZTogZWxlbWVudFsxNF0uc3BsaXQoJyAoJylbMF0sXHJcbiAgICAgICAgICAvLyBlbWFpbDogZWxlbWVudFsxNF0uc3BsaXQoJyAoJylbMV0ucmVwbGFjZSgnKScsICcnKSxcclxuICAgICAgICAgIG1lbWJlcl9pZDogZWxlbWVudFs0XSxcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5wdXNoKGFzc2lnbm9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIDE3dGggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdHJ1ZS4gSWYgaXQgaXMsIGl0IGlzIGNyZWF0aW5nIGFuIG9iamVjdCB3aXRoIHRoZVxyXG4gICAgICAxNnRoIGVsZW1lbnQgYXMgdGhlIG5hbWUgYW5kIHRoZSAxN3RoIGVsZW1lbnQgYXMgdGhlIGlkLiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFsxN10pIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRSZXNwb25zaWJpbGl0eSA9IHtcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbMTZdLFxyXG4gICAgICAgICAgaWQ6IEpTT04ucGFyc2UoZWxlbWVudFsxN10pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBhcmVudFJlc3BvbnNpYmlsaXR5LnB1c2gocGFyZW50UmVzcG9uc2liaWxpdHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgLyogQ3JlYXRpbmcgYSBsaXN0IG9mIGNoaWxkIGNhdGVnb3JpZXMuIGFuZCBwdXNoIHRoZSBjaGlsZCBjYXRlZ29yaWVzIHRvIHRoZWlyIHBhcmVudCBwcm9ncmFtICovXHJcbiAgICBpZih0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3Q/LmZvckVhY2goKGNhdGVnb3J5OiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRlbXBMaXN0WzBdPy5pbmRleE9mKGNhdGVnb3J5Py5wcm9ncmFtSWQpO1xyXG4gICAgICAgIGlmKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgbGV0IGNoaWxkQ2F0ZWdvcnkgPSBbXTtcclxuICAgICAgICAgIC8qIENyZWF0aW5nIGEgbGlzdCBvZiBjaGlsZCBjYXRlZ29yaWVzLiAqL1xyXG4gICAgICAgICAgZm9yKGxldCBqPTE7IHRydWU7IGorKyl7XHJcbiAgICAgICAgICAgIGlmKHRlbXBMaXN0W2pdW2luZGV4XSl7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0ZW1wTGlzdFtqXVtpbmRleCAtMV0sXHJcbiAgICAgICAgICAgICAgICBpZDogdGVtcExpc3Rbal1baW5kZXhdLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjaGlsZENhdGVnb3J5LnB1c2goY2F0ZWdvcnkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3RbaV1bJ2NoaWxkQ2F0ZWdvcnknXSA9IGNoaWxkQ2F0ZWdvcnk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnVwbG9hZGVkRmlsZXMgdGhpcy50ZW1wbGF0ZUluZm8nLHRoaXMudGVtcGxhdGVJbmZvLCB0aGlzLmJ1bGtVcGxvYWQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhbiBldmVudCwgd2hpY2ggaXMgYSBzdHJpbmcsIGFuZCB0aGVuIGl0IHNldHMgdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgYnVsa1VwbG9hZCB2YXJpYWJsZSwgd2hpY2ggaXMgYW4gb2JqZWN0LCBhbmQgdGhlbiBpdCBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgb2ZcclxuICAgKiB0aGF0IG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIGV2ZW50IHN0cmluZy5cclxuICAgKiBcclxuICAgKiBTbyBpZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdmcmVxdWVuY3knLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICogXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnb25nb2luZycsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGVcclxuICAgKiB2YWx1ZSBvZiB0aGUgb25nb2luZyBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICogXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnb25Db21wbGV0aW9uJywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoZSBvbkNvbXBsZXRpb24gcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgYW55dGhpbmcgZWxzZSwgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvXHJcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIHN0cmluZyAtIHRoZSBldmVudCB0aGF0IGlzIGVtaXR0ZWQgZnJvbSB0aGUgY2hpbGQgY29tcG9uZW50IChmcmVxdWVuY3kgfCBvbmdvaW5nIHwgb25Db21wbGV0aW9uKVxyXG4gICAqL1xyXG4gIHNlbGVjdGVkVGFiKGV2ZW50OiAnZnJlcXVlbmN5JyB8ICdvbmdvaW5nJyB8ICdvbkNvbXBsZXRpb24nKSB7XHJcbiAgICBjb25zb2xlLmxvZygnc2VsZWN0ZWRUYWInLCBldmVudCk7XHJcbiAgICB0aGlzLnRhYlR5cGUgPSBldmVudDtcclxuICAgIHN3aXRjaChldmVudCkge1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knIDogXHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb25nb2luZyc6IFxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvbkNvbXBsZXRpb24nOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQgOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQnLCB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCwgdGhpcy5idWxrVXBsb2FkKVxyXG4gIH1cclxuICBcclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBpbiBhIHJlcG9ydCwgYSB0YWIgdHlwZSwgYW5kIGEgYm9vbGVhbiB2YWx1ZS4gSXQgdGhlbiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgYnVuY2ggb2ZcclxuICAgKiBwcm9wZXJ0aWVzLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gcmVwb3J0IC0gYW55ID0mZ3Q7IHRoZSBhcnJheSBvZiBkYXRhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYlR5cGUgLSBzdHJpbmcgLSB0aGlzIGlzIHRoZSB0eXBlIG9mIHRhYiB0aGF0IGlzIHNlbGVjdGVkLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcm9ncmFtIC0gYm9vbGVhblxyXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuICAgKi9cclxuICBzZXRSZXBvcnREZXRhaWxzKHJlcG9ydDogYW55LCB0YWJUeXBlOiBzdHJpbmcsIGlzUHJvZ3JhbTogYm9vbGVhbikge1xyXG4gICAgbGV0IG9iajogYW55O1xyXG4gICAgc3dpdGNoKHRhYlR5cGUpe1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOiB7XHJcbiAgICAgICAgaWYoaXNQcm9ncmFtKXtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZGF5OiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIG1vbnRoOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnRzOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyM10sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzI0XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzUGFzdERhdGUnXSA9IHRoaXMuaXNQYXN0RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmpbJ3ZhbGlkRGF0ZSddICYmICFvYmpbJ2lzUGFzdERhdGUnXSAmJiBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmIG9ialsnaXNWYWxpZFVzZXInXTtcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgZGF5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIG1vbnRoOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnRzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzUGFzdERhdGUnXSA9IHRoaXMuaXNQYXN0RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmpbJ3ZhbGlkRGF0ZSddICYmICFvYmpbJ2lzUGFzdERhdGUnXSAmJiBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmIG9ialsnaXNWYWxpZFVzZXInXTtcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOiB7XHJcbiAgICAgICAgaWYoaXNQcm9ncmFtKXtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnRzOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIyXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPSBvYmpbJ2lzVmFsaWREYXRhJ10gICYmICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmIG9ialsnaXNWYWxpZFVzZXInXTtcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGFzc2Vzc21lbnRzOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzE5XVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPSBvYmpbJ2lzVmFsaWREYXRhJ10gJiYgb2JqWydpc1ZhbGlkVXNlciddO1xyXG4gICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzoge1xyXG4gICAgICAgIGlmKGlzUHJvZ3JhbSl7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIHByb2dyYW1DYXRlZ29yeTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgYXNzZXNzbWVudHM6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMjFdLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMjJdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIzXSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjRdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAgJiYgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiYgb2JqPy5wYXJlbnRSZXNwb25zaWJpbGl0eT8ubGVuZ3RoICYmIG9ialsnaXNWYWxpZFVzZXInXTtcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgZHVlRGF0ZTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBhc3Nlc3NtZW50czogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID0gb2JqWydpc1ZhbGlkRGF0YSddICYmIG9iaj8ucGFyZW50UmVzcG9uc2liaWxpdHk/Lmxlbmd0aCAmJiBvYmpbJ2lzVmFsaWRVc2VyJ107XHJcbiAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBcclxuICAgICAgZGVmYXVsdDoge1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIHJlbW92ZXMgYWxsIHdoaXRlc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBzdHJpbmdcclxuICAgKiBAcGFyYW0ge2FueX0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSByZXNwb25zaWJpbGl0eVxyXG4gICAqIEByZXR1cm5zIHRoZSB0cmltbWVkTmFtZSB2YXJpYWJsZS5cclxuICAgKi9cclxuICBjaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKG5hbWU6IGFueSl7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgdmFyIHRyaW1tZWROYW1lID0gbmFtZS50b1N0cmluZygpLnJlcGxhY2UocmUsICcnKS50cmltKCk7XHJcbiAgICAgIHRyaW1tZWROYW1lID0gdHJpbW1lZE5hbWUucmVwbGFjZSgvICArL2csICcgJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJpbW1lZE5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgcmVzcG9uc2liaWxpdHkgbmFtZSBpcyB2YWxpZCwgYW5kIHRoZSBhc3NpZ25lZSBhbmQgYXNzaWdub3IgYXJlIG5vdCBlbXB0eSwgdGhlbiByZXR1cm5cclxuICAgKiB0cnVlLiBPdGhlcndpc2UsIHJldHVybiBmYWxzZVxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55IC0gdGhlIGRhdGEgdGhhdCBpcyBiZWluZyBwYXNzZWQgaW5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgaXNWYWxpZERhdGEoZGF0YTogYW55KXtcclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5ID0gdGhpcy5jaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKGRhdGE/LnJlc3BvbnNpYmlsaXR5TmFtZSk/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFzc2lnbmVlID0gZGF0YT8uYXNzaWduZWU/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGRhdGE/LmZyZXF1ZW5jeT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYoYXNzaWduZWUgJiYgcmVzcG9uc2liaWxpdHkgJiYgZnJlcXVlbmN5ICYmIHRoaXMuaXNWYWxpZFVzZXJzKGRhdGEpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGFzc2lnbm9yIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWdub3IgaXMgbm90IHNldFxyXG4gICAqIGFuZCB0aGUgZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgdGhlXHJcbiAgICogc2FtZSBhcyB0aGUgcmV2aWV3ZXIsIG92ZXJzZWVyLCBvciBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyBub3Qgc2V0IGFuZCB0aGVcclxuICAgKiBkZWZhdWx0T3duZXIgaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSByZXZpZXdlciBpcyB0aGUgc2FtZSBhc1xyXG4gICAqIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCwgdGhlbiByZXR1cm4gZmFsc2UuIE90aGVyd2lzZSxcclxuICAgKiByZXR1cm4gdHJ1ZVxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55IC0gdGhpcyBpcyB0aGUgZGF0YSB0aGF0IGlzIHBhc3NlZCBpbiBmcm9tIHRoZSBmb3JtLlxyXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cclxuICAgKi9cclxuICBpc1ZhbGlkVXNlcnMoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoKGRhdGE/LmFzc2lnbm9yICYmICggKGRhdGE/LmFzc2lnbm9yID09IGRhdGE/Lm92ZXJzZWVyKSB8fCAoZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkpIHx8IFxyXG4gICAgICAoKCFkYXRhPy5hc3NpZ25vcikgJiYgKCAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ub3ZlcnNlZXIpIHx8ICh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSkgfHwgXHJcbiAgICAgIChkYXRhPy5hc3NpZ25lZSAmJiAoKGRhdGE/LmFzc2lnbmVlID09IGRhdGE/LnJldmlld2VyKSB8fCAoZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ub3ZlcnNlZXIpIHx8IChkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSkgfHwgXHJcbiAgICAgICgoIWRhdGE/LmFzc2lnbmVlKSAmJiAoKHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm92ZXJzZWVyKSB8fCAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkpIHx8IFxyXG4gICAgICAoZGF0YT8ucmV2aWV3ZXIgJiYgKChkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5vdmVyc2VlcikgfHwgKGRhdGE/LnJldmlld2VyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpKSB8fCBcclxuICAgICAgKCFkYXRhPy5hc3NpZ25lZSkpe1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGluIGEgZGF0YSBvYmplY3QgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggNCBib29sZWFuIHByb3BlcnRpZXMuXHJcbiAgICogVGhlIGJvb2xlYW4gcHJvcGVydGllcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWVzIG9mIHRoZSBkYXRhIG9iamVjdC5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyB7XHJcbiAgICogICBpc1ZhbGlkQXNzaWduZWU6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkQXNzaWdub3I6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkUmV2aWV3ZXI6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkT3ZlcnNlZXI6IHRydWVcclxuICAgKiB9XHJcbiAgICovXHJcbiAgdmFsaWRhdGVEYXRhV2l0aFByb2dyYW0oIGRhdGE6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdD8uZmlsdGVyKChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LnByb2dyYW1OYW1lID09PSBkYXRhPy5wcm9ncmFtKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWduZWUgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZmlsdGVyKChhc3NpZ25lZTogYW55KSA9PiBhc3NpZ25lZT8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5hc3NpZ25lZSk7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFzc2lnbm9yID0gdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbm9yc0xpc3Q/LmZpbHRlcigoYXNzaWdub3I6IGFueSkgPT4gYXNzaWdub3I/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWdub3IpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRSZXZpZXdlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5maWx0ZXIoKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LnJldmlld2VyKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkT3ZlcnNlZXIgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZmlsdGVyKChvdmVyc2VlcjogYW55KSA9PiBvdmVyc2Vlcj8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5vdmVyc2Vlcik7XHJcbiAgICBjb25zdCBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5maWx0ZXIoKG5vdGlmeU9uRmFpbHVyZTogYW55KSA9PiBub3RpZnlPbkZhaWx1cmU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKTtcclxuICAgIGxldCBpc1ZhbGlkQXNzaWduZWUgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRBc3NpZ25vciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZFJldmlld2VyID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkT3ZlcnNlZXIgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWROb3RpZnlPbkZhaWx1cmUgPSB0cnVlO1xyXG4gICAgaWYocHJvZ3JhbSkge1xyXG4gICAgICBpZihwcm9ncmFtWzBdPy5hc3NpZ25lZT8ubGVuZ3RoICYmIHNlbGVjdGVkQXNzaWduZWU/Lmxlbmd0aCl7XHJcbiAgICAgICAgaXNWYWxpZEFzc2lnbmVlID0gcHJvZ3JhbVswXT8uYXNzaWduZWU/LmluY2x1ZGVzKHNlbGVjdGVkQXNzaWduZWVbMF0/Lm15X21lbWJlcl9pZCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYocHJvZ3JhbVswXT8ucmV2aWV3ZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZFJldmlld2VyPy5sZW5ndGgpe1xyXG4gICAgICAgIGlzVmFsaWRSZXZpZXdlciA9IHByb2dyYW1bMF0/LnJldmlld2VyPy5pbmNsdWRlcyhzZWxlY3RlZFJldmlld2VyWzBdPy5teV9tZW1iZXJfaWQpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5sZW5ndGggJiYgc2VsZWN0ZWRPdmVyc2Vlcj8ubGVuZ3RoKXtcclxuICAgICAgICBpc1ZhbGlkT3ZlcnNlZXIgPSBwcm9ncmFtWzBdPy5vdmVyc2Vlcj8uaW5jbHVkZXMoc2VsZWN0ZWRPdmVyc2VlclswXT8ubXlfbWVtYmVyX2lkKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZihwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlPy5sZW5ndGgpe1xyXG4gICAgICAgIGlzVmFsaWROb3RpZnlPbkZhaWx1cmUgPSBwcm9ncmFtWzBdPy5vdmVyc2Vlcj8uaW5jbHVkZXMoc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmVbMF0/Lm15X21lbWJlcl9pZCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzVmFsaWRBc3NpZ25lZTogaXNWYWxpZEFzc2lnbmVlLFxyXG4gICAgICBpc1ZhbGlkQXNzaWdub3I6IGlzVmFsaWRBc3NpZ25vcixcclxuICAgICAgaXNWYWxpZFJldmlld2VyOiBpc1ZhbGlkUmV2aWV3ZXIsXHJcbiAgICAgIGlzVmFsaWRPdmVyc2VlcjogaXNWYWxpZE92ZXJzZWVyLFxyXG4gICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlOiBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgdHdvIHN0cmluZ3MgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBwcm9wZXJ0aWVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb2dyYW1OYW1lIC0gc3RyaW5nIC0mZ3Q7IE5hbWUgb2YgdGhlIHByb2dyYW1cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoaWxlUHJvZ3JhbV0gLSBzdHJpbmcgPSZndDsgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgc3ViLXByb2dyYW1cclxuICAgKiBAcmV0dXJucyB7XHJcbiAgICogICBwcm9ncmFtSWQ6IDEsXHJcbiAgICogICBjaGlsZFByb2dyYW1JZDogMixcclxuICAgKiAgIGNhdGVnb3J5SWQ6ICcxLDInXHJcbiAgICogfVxyXG4gICAqL1xyXG4gIGdldFByb2dyYW1JZChwcm9ncmFtTmFtZTogc3RyaW5nLCBjaGlsZVByb2dyYW0/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3Q/LmZpbHRlcigocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5wcm9ncmFtTmFtZSA9PT0gcHJvZ3JhbU5hbWUpO1xyXG4gICAgbGV0IHN1YlByb2dyYW07XHJcbiAgICBsZXQgc3ViUHJvZ3JhbUlkO1xyXG4gICAgbGV0IGNhdGVnb3J5SWQ7XHJcbiAgICBpZihjaGlsZVByb2dyYW0/Lmxlbmd0aCAmJiBwcm9ncmFtPy5sZW5ndGgpIHtcclxuICAgICAgc3ViUHJvZ3JhbSA9IHByb2dyYW1bMF0/LmNoaWxkQ2F0ZWdvcnk/LmZpbHRlcigoc3ViUHJvZ3JhbTogYW55KSA9PiBzdWJQcm9ncmFtPy5uYW1lID09PSBjaGlsZVByb2dyYW0pXHJcbiAgICAgIHN1YlByb2dyYW1JZCA9IHN1YlByb2dyYW0/Lmxlbmd0aCA/IHN1YlByb2dyYW1bMF0/LmlkIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHN1YlByb2dyYW1JZCAmJiBwcm9ncmFtPy5sZW5ndGgpIHtcclxuICAgICAgY2F0ZWdvcnlJZCA9IHByb2dyYW1bMF0/LnByb2dyYW1JZD8udG9TdHJpbmcoKSArICcsJyArICBzdWJQcm9ncmFtSWQ/LnRvU3RyaW5nKCk7XHJcbiAgICB9IGVsc2UgaWYocHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhdGVnb3J5SWQgPSBwcm9ncmFtWzBdPy5wcm9ncmFtSWQ/LnRvU3RyaW5nKClcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByb2dyYW1JZDogcHJvZ3JhbT8ubGVuZ3RoID8gcHJvZ3JhbVswXT8ucHJvZ3JhbUlkIDogdW5kZWZpbmVkLFxyXG4gICAgICBjaGlsZFByb2dyYW1JZDogc3ViUHJvZ3JhbUlkLFxyXG4gICAgICBjYXRlZ29yeUlkIDogY2F0ZWdvcnlJZCxcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
|