vcomply-workflow-engine 2.6.196 → 2.7.0
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 +9513 -7197
- package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.js +243 -98
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.ngfactory.js +3 -2
- package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.ngsummary.json +1 -1
- package/esm2015/lib/formgroup/select/cs-select/cs-select.component.js +2 -2
- package/esm2015/lib/formgroup/select/cs-select/cs-select.component.ngfactory.js +3 -3
- package/esm2015/lib/more-option/more-option.component.js +15 -3
- package/esm2015/lib/sharedComponents/bulk-view/bulk-view.component.js +9 -7
- package/esm2015/lib/sharedComponents/bulk-view/bulk-view.component.ngfactory.js +24 -19
- package/esm2015/lib/sharedComponents/frequency/frequency-responsibility-list/frequency-responsibility-list.component.js +2 -2
- package/esm2015/lib/sharedComponents/frequency/frequency-responsibility-list/frequency-responsibility-list.component.ngfactory.js +38 -34
- package/esm2015/lib/sharedComponents/frequency/frequency.service.js +152 -41
- package/esm2015/lib/sharedComponents/frequency/frequency.service.ngsummary.json +1 -1
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.js +210 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngfactory.js +39 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.js +187 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngfactory.js +36 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.js +26 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngfactory.js +25 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.js +287 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngfactory.js +80 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.js +62 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngfactory.js +42 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.js +197 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngfactory.js +36 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.js +137 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngfactory.js +70 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.js +181 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngfactory.js +36 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.js +31 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngfactory.js +24 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.js +102 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngfactory.js +90 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngsummary.json +1 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.js +165 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngfactory.js +36 -0
- package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngsummary.json +1 -0
- package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +10 -3
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +10 -2
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +37 -36
- package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-engine.module.js +23 -1
- package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
- package/esm2015/lib/workflow-policy/workflow-policy.component.js +2 -2
- package/esm2015/lib/workflow-policy/workflow-policy.component.ngfactory.js +3 -3
- package/esm2015/lib/workflow-risk/workflow-risk.component.js +447 -30
- package/esm2015/lib/workflow-risk/workflow-risk.component.ngfactory.js +294 -117
- package/esm2015/lib/workflow-risk/workflow-risk.component.ngsummary.json +1 -1
- package/esm2015/lib/workflow-services/add-risk.service.js +19 -5
- package/esm2015/lib/workflow-services/add-risk.service.ngsummary.json +1 -1
- package/esm2015/lib/workflow-services/auth.service.js +1 -1
- package/esm2015/lib/workflow-services/frequency.service.js +1 -1
- package/esm2015/vcomply-workflow-engine.js +233 -222
- package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
- package/fesm2015/vcomply-workflow-engine.js +10618 -8337
- package/fesm2015/vcomply-workflow-engine.js.map +1 -1
- package/lib/add-multiple-risk/add-multiple-risk.component.d.ts +44 -1
- package/lib/more-option/more-option.component.d.ts +2 -2
- package/lib/sharedComponents/frequency/frequency.service.d.ts +3 -2
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.d.ts +37 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.d.ts +35 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.d.ts +9 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.d.ts +31 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.d.ts +16 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.d.ts +33 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.d.ts +32 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.d.ts +32 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.d.ts +10 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.d.ts +22 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.ngfactory.d.ts +1 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.d.ts +30 -0
- package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.ngfactory.d.ts +1 -0
- package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +2 -0
- package/lib/workflow-risk/workflow-risk.component.d.ts +82 -1
- package/lib/workflow-services/add-risk.service.d.ts +2 -1
- package/lib/workflow-services/auth.service.d.ts +1 -0
- package/lib/workflow-services/frequency.service.d.ts +1 -1
- package/package.json +1 -1
- package/vcomply-workflow-engine.d.ts +232 -221
- package/vcomply-workflow-engine.metadata.json +1 -1
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { Component, Input, EventEmitter, Optional, Output } from '@angular/core';
|
|
2
2
|
import { cloneDeep } from 'lodash';
|
|
3
3
|
import { Configurations } from '../configurations';
|
|
4
|
+
import { FrequencyService } from '../sharedComponents/frequency/frequency.service';
|
|
4
5
|
import { SnackBarService } from '../ui-kit/snack-bar/snack-bar.service';
|
|
5
6
|
import { AddRiskService } from '../workflow-services/add-risk.service';
|
|
6
7
|
import { AuthService } from '../workflow-services/auth.service';
|
|
7
8
|
import { UiKitService } from '../workflow-services/ui-kit.service';
|
|
9
|
+
import * as moment from 'moment';
|
|
8
10
|
export class WorkflowRiskComponent {
|
|
9
|
-
constructor(riskService, authService, uiKitService, snackBar, config) {
|
|
11
|
+
constructor(riskService, authService, uiKitService, snackBar, frequencyService, config) {
|
|
10
12
|
this.riskService = riskService;
|
|
11
13
|
this.authService = authService;
|
|
12
14
|
this.uiKitService = uiKitService;
|
|
13
15
|
this.snackBar = snackBar;
|
|
16
|
+
this.frequencyService = frequencyService;
|
|
14
17
|
this.responsibilityCentersList = [];
|
|
15
18
|
this.selectedResponsibilityCenters = [];
|
|
16
19
|
this.mitigationDetails = [];
|
|
@@ -21,7 +24,7 @@ export class WorkflowRiskComponent {
|
|
|
21
24
|
{ buttonText: 'Add More Risks', class: 'white-btn', id: 'addMore' },
|
|
22
25
|
{ buttonText: 'View Risk', class: 'blue-btn', id: 'viewRisks' },
|
|
23
26
|
];
|
|
24
|
-
this.sideSelectorElements = ['rc', 'owner', 'overseer', 'category'];
|
|
27
|
+
this.sideSelectorElements = ['rc', 'owner', 'overseer', 'category', 'frequency'];
|
|
25
28
|
this.showSmiley = false;
|
|
26
29
|
this.mode = 'EDIT';
|
|
27
30
|
this.riskId = '';
|
|
@@ -56,6 +59,7 @@ export class WorkflowRiskComponent {
|
|
|
56
59
|
},
|
|
57
60
|
};
|
|
58
61
|
this.overseersList = [];
|
|
62
|
+
this.overseersGroupList = [];
|
|
59
63
|
this.adminsList = [];
|
|
60
64
|
this.overseersIdList = [];
|
|
61
65
|
this.riskNameFocus = false;
|
|
@@ -67,12 +71,14 @@ export class WorkflowRiskComponent {
|
|
|
67
71
|
description: '',
|
|
68
72
|
responsibilityCentersList: [],
|
|
69
73
|
ownersList: [],
|
|
74
|
+
groupsList: [],
|
|
70
75
|
category: {
|
|
71
76
|
type: 'strategic',
|
|
72
77
|
selectedCategory: '',
|
|
73
78
|
},
|
|
74
79
|
categoryCustomTags: [],
|
|
75
80
|
overseersList: [],
|
|
81
|
+
overseersGroupList: [],
|
|
76
82
|
mitigation: 0,
|
|
77
83
|
assessment_deadline_days: 0,
|
|
78
84
|
head_ids: [],
|
|
@@ -80,6 +86,14 @@ export class WorkflowRiskComponent {
|
|
|
80
86
|
addMitigation: false,
|
|
81
87
|
addMitigationPlan: false,
|
|
82
88
|
mitigationDescriptionPlan: '',
|
|
89
|
+
frequency_details: {
|
|
90
|
+
"frequency": '',
|
|
91
|
+
"started_at": '',
|
|
92
|
+
"frequency_time": '',
|
|
93
|
+
"remind_before_days": 0,
|
|
94
|
+
},
|
|
95
|
+
addRiskLabel: false,
|
|
96
|
+
riskLabelValue: 1,
|
|
83
97
|
};
|
|
84
98
|
this.apiUrl = '';
|
|
85
99
|
this.memberId = 0;
|
|
@@ -89,21 +103,42 @@ export class WorkflowRiskComponent {
|
|
|
89
103
|
this.categoryListLoaded = false;
|
|
90
104
|
this.rcListLoaded = false;
|
|
91
105
|
this.submitted = false;
|
|
106
|
+
// weekly: 2~2,5~0~6
|
|
107
|
+
// monthly: 3~28~1,2,3,5,6,7,8,11,12~0
|
|
108
|
+
// quarterly: 7~28~2,5,8,11~0
|
|
109
|
+
// biannual: 9~28~3,9~0
|
|
110
|
+
// annual: 4~28~9~3
|
|
111
|
+
// oneTime: 0~2022~12~28
|
|
112
|
+
this.frequencyDetails = {
|
|
113
|
+
"frequency": "",
|
|
114
|
+
"started_at": "",
|
|
115
|
+
"frequency_time": "",
|
|
116
|
+
"remind_before_days": 0
|
|
117
|
+
};
|
|
118
|
+
this.frequencyPlaceholder = 'Set a Reassessment Frequency';
|
|
119
|
+
this.shortMonth = [];
|
|
92
120
|
this.loader = false;
|
|
93
121
|
//
|
|
94
122
|
this.activeSelector = '';
|
|
95
123
|
this.currentTimeStamp = Math.round(Date.now() / 1000);
|
|
124
|
+
this.featureflag_groups = false;
|
|
125
|
+
this.groupsList = [];
|
|
126
|
+
/* Creating an array for risk label with it's value. */
|
|
127
|
+
this.riskLabelList = [
|
|
128
|
+
{ name: 'Newly Identified Risk', value: 1 },
|
|
129
|
+
{ name: 'Rapidly Changing Risk', value: 2 }
|
|
130
|
+
];
|
|
96
131
|
this.description = {
|
|
97
132
|
mode: 'prime',
|
|
98
133
|
colorPalette: true,
|
|
99
134
|
link: true,
|
|
100
|
-
placeholder: '
|
|
135
|
+
placeholder: 'Add a description for this risk',
|
|
101
136
|
};
|
|
102
137
|
this.mitigationDescriptionPlan = {
|
|
103
138
|
mode: 'prime',
|
|
104
139
|
colorPalette: true,
|
|
105
140
|
link: true,
|
|
106
|
-
placeholder: 'Describe the recommended mitigation
|
|
141
|
+
placeholder: 'Describe the recommended mitigation plans'
|
|
107
142
|
};
|
|
108
143
|
// if (config) {
|
|
109
144
|
// this.apiUrl = config.apiUrl;
|
|
@@ -111,14 +146,19 @@ export class WorkflowRiskComponent {
|
|
|
111
146
|
this.timezone = this.authService.getUserTimeZone();
|
|
112
147
|
}
|
|
113
148
|
ngOnInit() {
|
|
149
|
+
this.featureflag_groups = this.feature.isFeatureEnabled("ff_risk_groups");
|
|
114
150
|
this.pickerChanged.emit(false);
|
|
115
151
|
this.loader = true;
|
|
116
152
|
this.uiKitService.isLoader = true;
|
|
117
153
|
this.getAdminsList();
|
|
118
154
|
this.getRCList();
|
|
119
155
|
this.getOwnersList();
|
|
156
|
+
if (this.featureflag_groups) {
|
|
157
|
+
this.getGroupList();
|
|
158
|
+
}
|
|
120
159
|
this.getCategoryList();
|
|
121
160
|
this.getSettingsInfo();
|
|
161
|
+
this.shortMonth = this.frequencyService.monthArray.map(month => month.substring(0, 3));
|
|
122
162
|
if (this.mode === 'CREATE') {
|
|
123
163
|
this.organizationId = this.authService.getOrganizationId();
|
|
124
164
|
}
|
|
@@ -140,6 +180,14 @@ export class WorkflowRiskComponent {
|
|
|
140
180
|
this.setRiskTypeBasedOnSubscription();
|
|
141
181
|
}
|
|
142
182
|
}
|
|
183
|
+
//TO get groupList data
|
|
184
|
+
getGroupList() {
|
|
185
|
+
this.riskService.getGroupsList().subscribe((res) => {
|
|
186
|
+
this.groupsList = res === null || res === void 0 ? void 0 : res.data;
|
|
187
|
+
}, err => {
|
|
188
|
+
console.error(err);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
143
191
|
setRiskTypeBasedOnSubscription() {
|
|
144
192
|
if (this.openedFrom === 'REPORTED_RISK') {
|
|
145
193
|
this.riskForm.riskType = 'REPORTED';
|
|
@@ -225,7 +273,7 @@ export class WorkflowRiskComponent {
|
|
|
225
273
|
}
|
|
226
274
|
getRiskDetails(riskId) {
|
|
227
275
|
this.riskService.getRiskDetail(riskId).subscribe((res) => {
|
|
228
|
-
var _a, _b, _c, _d, _e;
|
|
276
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
229
277
|
this.loader = false;
|
|
230
278
|
this.uiKitService.isLoader = false;
|
|
231
279
|
this.editDetails = cloneDeep(res);
|
|
@@ -240,6 +288,7 @@ export class WorkflowRiskComponent {
|
|
|
240
288
|
this.riskForm.description = res.description;
|
|
241
289
|
this.riskForm.responsibilityCentersList = this.setList(this.responsibilityCentersList, res.rc_id, 'item_id');
|
|
242
290
|
this.riskForm.ownersList = this.setList(this.ownersList, res.owner, 'member_id');
|
|
291
|
+
this.riskForm.groupsList = this.setList(this.groupsList, res === null || res === void 0 ? void 0 : res.usergroup_ids, '_id');
|
|
243
292
|
this.riskForm.mitigationDescriptionPlan = res.mitigationDescriptionPlan;
|
|
244
293
|
const type = this.setCategoryType(res.category_type[0]);
|
|
245
294
|
const categoryIndex = (_b = this.categoryList[type]) === null || _b === void 0 ? void 0 : _b.data.findIndex((element) => element.category_id == res.category[0]);
|
|
@@ -251,15 +300,17 @@ export class WorkflowRiskComponent {
|
|
|
251
300
|
this.riskForm.categoryCustomTags = res.category_custom_tag;
|
|
252
301
|
}
|
|
253
302
|
this.riskForm.overseersList = this.setList(this.ownersList, res.manage_oversight, 'member_id');
|
|
254
|
-
this.riskForm.
|
|
303
|
+
this.riskForm.overseersGroupList = this.setList(this.groupsList, res === null || res === void 0 ? void 0 : res.overseergroup_ids, '_id');
|
|
304
|
+
this.riskForm.mitigation = (res === null || res === void 0 ? void 0 : res.mitigation) ? res === null || res === void 0 ? void 0 : res.mitigation : (_d = this.riskForm) === null || _d === void 0 ? void 0 : _d.mitigation;
|
|
255
305
|
this.riskForm.assessment_deadline_days = res.assessment_deadline_days;
|
|
256
|
-
this.riskForm.addOverseer = (res.manage_oversight.length > 0) ? true : false;
|
|
306
|
+
this.riskForm.addOverseer = (res.manage_oversight.length > 0 || ((_e = res === null || res === void 0 ? void 0 : res.overseergroup_ids) === null || _e === void 0 ? void 0 : _e.length) > 0) ? true : false;
|
|
257
307
|
this.riskForm.addMitigation = (res.mitigation) ? true : false;
|
|
258
308
|
// this.memberId = res.member_id;
|
|
259
309
|
this.organizationId = res.organisation_id;
|
|
260
310
|
this.riskForm.head_ids = (res === null || res === void 0 ? void 0 : res.head_ids) ? res === null || res === void 0 ? void 0 : res.head_ids : [];
|
|
261
|
-
this.riskForm.mitigationDescriptionPlan = (
|
|
262
|
-
this.riskForm.addMitigationPlan = ((
|
|
311
|
+
this.riskForm.mitigationDescriptionPlan = (_f = res === null || res === void 0 ? void 0 : res.mitigation_plan_recommendation) !== null && _f !== void 0 ? _f : '';
|
|
312
|
+
this.riskForm.addMitigationPlan = ((_g = res === null || res === void 0 ? void 0 : res.mitigation_plan_recommendation.trim()) === null || _g === void 0 ? void 0 : _g.length) ? true : false;
|
|
313
|
+
this.riskForm.addRiskLabel = (res.risk_label) ? true : false;
|
|
263
314
|
if (res.assessment_date_timestamp) {
|
|
264
315
|
this.date = new Date(res.assessment_date);
|
|
265
316
|
}
|
|
@@ -280,6 +331,10 @@ export class WorkflowRiskComponent {
|
|
|
280
331
|
this.nonRemovableUsersList = Array.from(new Set([...this.nonRemovableUsersList, ...this.getCurrentlyLoggedInUser()]));
|
|
281
332
|
}
|
|
282
333
|
this.populateOptionalFields();
|
|
334
|
+
this.frequencyDataPopulate(res === null || res === void 0 ? void 0 : res.frequency_details);
|
|
335
|
+
this.riskForm.frequency_details = res === null || res === void 0 ? void 0 : res.frequency_details;
|
|
336
|
+
this.getFrequencyPlaceholder(res.frequency_details);
|
|
337
|
+
this.setOverseersList();
|
|
283
338
|
}, err => {
|
|
284
339
|
console.log(err);
|
|
285
340
|
this.loader = false;
|
|
@@ -297,6 +352,9 @@ export class WorkflowRiskComponent {
|
|
|
297
352
|
if (this.riskForm.addMitigationPlan) {
|
|
298
353
|
activatedOptions.push('MITIGATION_PLAN');
|
|
299
354
|
}
|
|
355
|
+
if (this.riskForm.addRiskLabel) {
|
|
356
|
+
activatedOptions.push('RISK_LABEL');
|
|
357
|
+
}
|
|
300
358
|
this.populateOption.emit(activatedOptions);
|
|
301
359
|
}
|
|
302
360
|
setCategoryType(type) {
|
|
@@ -318,7 +376,7 @@ export class WorkflowRiskComponent {
|
|
|
318
376
|
}
|
|
319
377
|
getRCList() {
|
|
320
378
|
const rcArray = [];
|
|
321
|
-
this.riskService.getResponsibilityCenterList(rcArray).subscribe(res => {
|
|
379
|
+
this.riskService.getResponsibilityCenterList(rcArray, this.mode === "EDIT" ? this.riskId : "").subscribe(res => {
|
|
322
380
|
this.responsibilityCentersList = res;
|
|
323
381
|
this.rcListLoaded = true;
|
|
324
382
|
}, err => {
|
|
@@ -423,10 +481,21 @@ export class WorkflowRiskComponent {
|
|
|
423
481
|
this.overseersList = allUsers.filter((user) => !ids.includes(user.member_id));
|
|
424
482
|
console.log("overseer list", this.overseersList);
|
|
425
483
|
this.riskForm.overseersList = this.riskForm.overseersList.filter((user) => !ids.includes(user.member_id));
|
|
484
|
+
//Groups which are selected in Owners field should not be visible Overseer
|
|
485
|
+
let groupids = [];
|
|
486
|
+
const groups = cloneDeep(this.riskForm.groupsList);
|
|
487
|
+
const allgroups = cloneDeep(this.groupsList);
|
|
488
|
+
groups.forEach((group) => {
|
|
489
|
+
groupids.push(group.group_id);
|
|
490
|
+
});
|
|
491
|
+
groupids = [...new Set(groupids)];
|
|
492
|
+
this.overseersGroupList = allgroups.filter((group) => !groupids.includes(group.group_id));
|
|
493
|
+
this.riskForm.overseersGroupList = this.riskForm.overseersGroupList.filter((user) => !groupids.includes(user.group_id));
|
|
426
494
|
}
|
|
427
495
|
activateSelector(type, event) {
|
|
496
|
+
console.log("typetypetypetype==>", type, event);
|
|
428
497
|
this.activeSelector = event ? type : '';
|
|
429
|
-
if (['rc', 'owner', 'overseer', 'category'].includes(type)) {
|
|
498
|
+
if (['rc', 'owner', 'overseer', 'category', 'frequency'].includes(type)) {
|
|
430
499
|
this.pickerChanged.emit(event);
|
|
431
500
|
}
|
|
432
501
|
}
|
|
@@ -435,6 +504,7 @@ export class WorkflowRiskComponent {
|
|
|
435
504
|
this.pickerChanged.emit(false);
|
|
436
505
|
}
|
|
437
506
|
remove(type, event) {
|
|
507
|
+
var _a, _b;
|
|
438
508
|
switch (type) {
|
|
439
509
|
case 'rc':
|
|
440
510
|
const rcIndex = this.riskForm.responsibilityCentersList.findIndex((rc) => rc.rc_id == event.rc_id);
|
|
@@ -445,10 +515,18 @@ export class WorkflowRiskComponent {
|
|
|
445
515
|
this.riskForm.ownersList.splice(ownerIndex, 1);
|
|
446
516
|
this.setOverseersList();
|
|
447
517
|
break;
|
|
518
|
+
case 'Ownergroup':
|
|
519
|
+
const groupIndex = (_a = this.riskForm) === null || _a === void 0 ? void 0 : _a.groupsList.findIndex((owner) => owner.group_id == event.group_id);
|
|
520
|
+
this.riskForm.groupsList.splice(groupIndex, 1);
|
|
521
|
+
break;
|
|
448
522
|
case 'overseer':
|
|
449
523
|
const overseerIndex = this.riskForm.overseersList.findIndex((overseer) => overseer.member_id == event.member_id);
|
|
450
524
|
this.riskForm.overseersList.splice(overseerIndex, 1);
|
|
451
525
|
break;
|
|
526
|
+
case 'overseergroup':
|
|
527
|
+
const overseergroupIndex = (_b = this.riskForm) === null || _b === void 0 ? void 0 : _b.overseersGroupList.findIndex((overseer) => overseer.group_id == event.group_id);
|
|
528
|
+
this.riskForm.overseersGroupList.splice(overseergroupIndex, 1);
|
|
529
|
+
break;
|
|
452
530
|
case 'category':
|
|
453
531
|
this.riskForm.category = {
|
|
454
532
|
type: 'strategic',
|
|
@@ -481,15 +559,41 @@ export class WorkflowRiskComponent {
|
|
|
481
559
|
}
|
|
482
560
|
saveSelectedOwnersList(ids) {
|
|
483
561
|
this.activeDeselector();
|
|
484
|
-
|
|
485
|
-
|
|
562
|
+
if (this.featureflag_groups) {
|
|
563
|
+
let ownerids;
|
|
564
|
+
let groupIds;
|
|
565
|
+
ownerids = this.returnIds(ids.users, "member_id");
|
|
566
|
+
groupIds = this.returnIds(ids.groups, 'group_id');
|
|
567
|
+
const selectedOwners = this.setList(this.ownersList, ownerids, 'member_id');
|
|
568
|
+
const selectedGroups = this.setList(this.groupsList, groupIds, 'group_id');
|
|
569
|
+
this.setList(this.groupsList, groupIds, 'group_id');
|
|
570
|
+
this.riskForm.ownersList = selectedOwners;
|
|
571
|
+
this.riskForm.groupsList = selectedGroups;
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
const selectedOwners = this.setList(this.ownersList, ids, 'member_id');
|
|
575
|
+
this.riskForm.ownersList = selectedOwners;
|
|
576
|
+
}
|
|
486
577
|
this.setOverseersList();
|
|
487
578
|
this.pickerChanged.emit(false);
|
|
488
579
|
}
|
|
489
580
|
saveSelectedOverseersList(ids) {
|
|
490
581
|
this.activeDeselector();
|
|
491
|
-
|
|
492
|
-
|
|
582
|
+
if (!this.featureflag_groups) {
|
|
583
|
+
const selectedOverseers = this.setList(this.overseersList, ids, 'member_id');
|
|
584
|
+
this.riskForm.overseersList = selectedOverseers;
|
|
585
|
+
}
|
|
586
|
+
else {
|
|
587
|
+
let overseerids;
|
|
588
|
+
let overseerGroupIds;
|
|
589
|
+
overseerids = this.returnIds(ids.users, "member_id");
|
|
590
|
+
overseerGroupIds = this.returnIds(ids.groups, 'group_id');
|
|
591
|
+
const selectedOverseers = this.setList(this.overseersList, overseerids, 'member_id');
|
|
592
|
+
const selectedOverseerGroups = this.setList(this.overseersGroupList, overseerGroupIds, 'group_id');
|
|
593
|
+
// this.setList(this.groupsList,overseerGroupIds,'group_id');
|
|
594
|
+
this.riskForm.overseersList = selectedOverseers;
|
|
595
|
+
this.riskForm.overseersGroupList = selectedOverseerGroups;
|
|
596
|
+
}
|
|
493
597
|
this.pickerChanged.emit(false);
|
|
494
598
|
}
|
|
495
599
|
changeRiskAssessment(name) {
|
|
@@ -551,8 +655,8 @@ export class WorkflowRiskComponent {
|
|
|
551
655
|
else {
|
|
552
656
|
const confirmationDetails = {
|
|
553
657
|
isVisible: true,
|
|
554
|
-
message: `The Responsibility Center(s) associated with this risk
|
|
555
|
-
|
|
658
|
+
message: `The Responsibility Center(s) associated with this risk has been modified.
|
|
659
|
+
Hence, this risk needs to be reassessed. Once you confirm, the current due date will be closed and a new risk assessment due date will be generated.`,
|
|
556
660
|
action: 'EDIT_RISK',
|
|
557
661
|
};
|
|
558
662
|
this.showConfirmationAlert.emit(confirmationDetails);
|
|
@@ -572,19 +676,24 @@ export class WorkflowRiskComponent {
|
|
|
572
676
|
break;
|
|
573
677
|
case 'Recommended Mitigation Plans':
|
|
574
678
|
this.riskForm.addMitigationPlan = event === null || event === void 0 ? void 0 : event.checked;
|
|
679
|
+
break;
|
|
680
|
+
case 'Risk Label':
|
|
681
|
+
this.riskForm.addRiskLabel = event === null || event === void 0 ? void 0 : event.checked;
|
|
682
|
+
break;
|
|
575
683
|
}
|
|
576
684
|
this.scrollToBottom = true;
|
|
577
685
|
}
|
|
578
686
|
validateRisk() {
|
|
579
|
-
var _a, _b, _c, _d, _e;
|
|
687
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
580
688
|
this.submitted = true;
|
|
581
689
|
const event = this.riskForm.title;
|
|
582
690
|
const re = / |<br>/g;
|
|
583
691
|
this.riskForm.title = event.replace(re, '').trim();
|
|
692
|
+
// ((!this.settingsInfo.assessment_deadline_enable) && (this.riskForm?.assessment_deadline_days < 1) && this.riskForm?.riskType !== 'REPORTED') ||
|
|
584
693
|
if (!this.riskForm.title || this.riskForm.responsibilityCentersList.length == 0
|
|
585
694
|
|| this.riskForm.ownersList.length == 0 ||
|
|
586
|
-
(
|
|
587
|
-
(this.riskForm.riskType
|
|
695
|
+
(this.riskForm.riskType === 'REPORTED' && !((_c = (_b = (_a = this.riskForm) === null || _a === void 0 ? void 0 : _a.description) === null || _b === void 0 ? void 0 : _b.trim()) === null || _c === void 0 ? void 0 : _c.length)) ||
|
|
696
|
+
(((_d = this.riskForm) === null || _d === void 0 ? void 0 : _d.riskType) !== 'REPORTED' && (!((_f = (_e = this.riskForm) === null || _e === void 0 ? void 0 : _e.frequency_details) === null || _f === void 0 ? void 0 : _f.frequency) || ((_h = (_g = this.riskForm) === null || _g === void 0 ? void 0 : _g.frequency_details) === null || _h === void 0 ? void 0 : _h.frequency) === ''))) {
|
|
588
697
|
return false;
|
|
589
698
|
}
|
|
590
699
|
else {
|
|
@@ -592,7 +701,7 @@ export class WorkflowRiskComponent {
|
|
|
592
701
|
}
|
|
593
702
|
}
|
|
594
703
|
createRisk(riskForm) {
|
|
595
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
704
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
596
705
|
this.loader = true;
|
|
597
706
|
this.uiKitService.isLoader = false;
|
|
598
707
|
const payload = {
|
|
@@ -601,8 +710,10 @@ export class WorkflowRiskComponent {
|
|
|
601
710
|
category_custom_tag: riskForm.categoryCustomTags,
|
|
602
711
|
assessment_deadline_enable: this.settingsInfo.assessment_deadline_enable,
|
|
603
712
|
owner: this.returnIds(riskForm.ownersList, 'member_id'),
|
|
713
|
+
// usergroup_ids: this.returnIds(riskForm.groupsList,'_id'),
|
|
604
714
|
category: ((_b = (_a = riskForm.category) === null || _a === void 0 ? void 0 : _a.selectedCategory) === null || _b === void 0 ? void 0 : _b.category_id) ? [riskForm.category.selectedCategory.category_id] : [],
|
|
605
715
|
manage_oversight: riskForm.addOverseer ? this.returnIds(riskForm.overseersList, 'member_id') : [],
|
|
716
|
+
// overseergroup_ids : riskForm.addOverseer ? this.returnIds(riskForm.overseersGroupList,'_id') :[] ,
|
|
606
717
|
rc_id: this.returnIds(riskForm.responsibilityCentersList, 'item_id'),
|
|
607
718
|
head_ids: riskForm.head_ids,
|
|
608
719
|
rating_arr: [],
|
|
@@ -624,10 +735,17 @@ export class WorkflowRiskComponent {
|
|
|
624
735
|
this.settingsInfo.weightage_details.vulnerability.value,
|
|
625
736
|
],
|
|
626
737
|
assessment_deadline_set_by: this.settingsInfo.assessment_deadline_set_by,
|
|
627
|
-
assessment_deadline_days: (this.settingsInfo.assessment_deadline_enable) ? this.settingsInfo.assessment_deadline_days : riskForm.assessment_deadline_days,
|
|
738
|
+
// assessment_deadline_days: (this.settingsInfo.assessment_deadline_enable) ? this.settingsInfo.assessment_deadline_days : riskForm.assessment_deadline_days,
|
|
628
739
|
risk_type: (_d = (_c = this.riskForm) === null || _c === void 0 ? void 0 : _c.riskType) !== null && _d !== void 0 ? _d : 'NORMAL',
|
|
629
|
-
mitigation_plan_recommendation: ((_e = this.riskForm) === null || _e === void 0 ? void 0 : _e.addMitigationPlan) ? (_g = (_f = this.riskForm) === null || _f === void 0 ? void 0 : _f.mitigationDescriptionPlan) !== null && _g !== void 0 ? _g : '' : ''
|
|
740
|
+
mitigation_plan_recommendation: ((_e = this.riskForm) === null || _e === void 0 ? void 0 : _e.addMitigationPlan) ? (_g = (_f = this.riskForm) === null || _f === void 0 ? void 0 : _f.mitigationDescriptionPlan) !== null && _g !== void 0 ? _g : '' : '',
|
|
741
|
+
frequency_details: (_h = this.riskForm) === null || _h === void 0 ? void 0 : _h.frequency_details,
|
|
742
|
+
risk_label: (riskForm === null || riskForm === void 0 ? void 0 : riskForm.addRiskLabel) ? riskForm === null || riskForm === void 0 ? void 0 : riskForm.riskLabelValue : 1,
|
|
630
743
|
};
|
|
744
|
+
if (this.featureflag_groups) {
|
|
745
|
+
payload['usergroup_ids'] = this.returnIds(riskForm.groupsList, '_id');
|
|
746
|
+
payload['overseergroup_ids'] = riskForm.addOverseer ? this.returnIds(riskForm.overseersGroupList, '_id') : [];
|
|
747
|
+
}
|
|
748
|
+
console.log("payloadpayloadpayloadpayload", payload);
|
|
631
749
|
if (this.mode == 'CREATE') {
|
|
632
750
|
this.riskService.addRisk(payload).subscribe((res) => {
|
|
633
751
|
console.log(res);
|
|
@@ -677,6 +795,7 @@ export class WorkflowRiskComponent {
|
|
|
677
795
|
mitigationDescriptionPlan: '',
|
|
678
796
|
responsibilityCentersList: [],
|
|
679
797
|
ownersList: [],
|
|
798
|
+
groupsList: [],
|
|
680
799
|
category: {
|
|
681
800
|
type: 'strategic',
|
|
682
801
|
selectedCategory: '',
|
|
@@ -687,7 +806,15 @@ export class WorkflowRiskComponent {
|
|
|
687
806
|
assessment_deadline_days: 0,
|
|
688
807
|
head_ids: [],
|
|
689
808
|
addOverseer: false,
|
|
690
|
-
addMitigation: false
|
|
809
|
+
addMitigation: false,
|
|
810
|
+
frequency_details: {
|
|
811
|
+
"frequency": '',
|
|
812
|
+
"started_at": '',
|
|
813
|
+
"frequency_time": '',
|
|
814
|
+
"remind_before_days": 0,
|
|
815
|
+
},
|
|
816
|
+
riskLabelValue: 1,
|
|
817
|
+
addRiskLabel: false
|
|
691
818
|
};
|
|
692
819
|
this.nonRemovableUsersList = [];
|
|
693
820
|
this.organizationId = this.authService.getOrganizationId();
|
|
@@ -696,6 +823,13 @@ export class WorkflowRiskComponent {
|
|
|
696
823
|
this.date = new Date();
|
|
697
824
|
this.submitted = false;
|
|
698
825
|
this.refreshForm.emit(true);
|
|
826
|
+
this.frequencyDetails = {
|
|
827
|
+
frequency: '',
|
|
828
|
+
started_at: '',
|
|
829
|
+
frequency_time: '',
|
|
830
|
+
remind_before_days: 0,
|
|
831
|
+
};
|
|
832
|
+
this.frequencyPlaceholder = 'Set a Reassessment Frequency';
|
|
699
833
|
this.populateOptionalFields();
|
|
700
834
|
this.getOwnersList();
|
|
701
835
|
}
|
|
@@ -728,10 +862,15 @@ export class WorkflowRiskComponent {
|
|
|
728
862
|
url = 'https://' + window.location.host;
|
|
729
863
|
}
|
|
730
864
|
if (window.location.host.startsWith('localhost')) {
|
|
731
|
-
url += '/
|
|
865
|
+
url += '/risk-workroom/' + this.riskId;
|
|
732
866
|
}
|
|
733
867
|
else {
|
|
734
|
-
|
|
868
|
+
if (window.location.href.includes('/riskv2')) {
|
|
869
|
+
url += '/riskv2/risk-workroom/' + this.riskId;
|
|
870
|
+
}
|
|
871
|
+
else {
|
|
872
|
+
url += '/risk/risk-workroom/' + this.riskId;
|
|
873
|
+
}
|
|
735
874
|
}
|
|
736
875
|
window.location.href = url;
|
|
737
876
|
//this.resetForm();
|
|
@@ -746,10 +885,15 @@ export class WorkflowRiskComponent {
|
|
|
746
885
|
url = 'https://' + window.location.host;
|
|
747
886
|
}
|
|
748
887
|
if (window.location.host.startsWith('localhost')) {
|
|
749
|
-
url += '/reported-risk
|
|
888
|
+
url += '/reported-risk';
|
|
750
889
|
}
|
|
751
890
|
else {
|
|
752
|
-
|
|
891
|
+
if (window.location.href.includes('/riskv2')) {
|
|
892
|
+
url += '/riskv2/reported-risk';
|
|
893
|
+
}
|
|
894
|
+
else {
|
|
895
|
+
url += '/risk/reported-risk';
|
|
896
|
+
}
|
|
753
897
|
}
|
|
754
898
|
window.location.href = url;
|
|
755
899
|
//this.resetForm();
|
|
@@ -764,11 +908,282 @@ export class WorkflowRiskComponent {
|
|
|
764
908
|
this.riskForm.mitigationDescriptionPlan = '';
|
|
765
909
|
}
|
|
766
910
|
}
|
|
911
|
+
frequencyData(event) {
|
|
912
|
+
this.activeDeselector();
|
|
913
|
+
this.frequencyDataPopulate(event);
|
|
914
|
+
this.riskForm.frequency_details = {
|
|
915
|
+
"frequency": event === null || event === void 0 ? void 0 : event.frequency,
|
|
916
|
+
"started_at": event === null || event === void 0 ? void 0 : event.started_at,
|
|
917
|
+
"frequency_time": event === null || event === void 0 ? void 0 : event.frequency_time,
|
|
918
|
+
"remind_before_days": event === null || event === void 0 ? void 0 : event.remind_before_days
|
|
919
|
+
};
|
|
920
|
+
this.frequencyPlaceholder = event === null || event === void 0 ? void 0 : event.placeholder;
|
|
921
|
+
this.pickerChanged.emit(false);
|
|
922
|
+
}
|
|
923
|
+
getFrequencyPlaceholder(res) {
|
|
924
|
+
try {
|
|
925
|
+
if (res === null || res === void 0 ? void 0 : res.frequency) {
|
|
926
|
+
const frequencyDetails = res === null || res === void 0 ? void 0 : res.frequency.split('~');
|
|
927
|
+
const frequencyTime = (res === null || res === void 0 ? void 0 : res.frequency_time) === '00:00:00' ? '12:00 am' : res === null || res === void 0 ? void 0 : res.frequency_time;
|
|
928
|
+
switch (parseInt(frequencyDetails[0])) {
|
|
929
|
+
case 2:
|
|
930
|
+
this.getWeeklyPlaceholder(frequencyDetails, frequencyTime);
|
|
931
|
+
break;
|
|
932
|
+
case 3:
|
|
933
|
+
this.getMonthlyPlaceholder(frequencyDetails, frequencyTime);
|
|
934
|
+
break;
|
|
935
|
+
case 4:
|
|
936
|
+
this.getYearlyPlaceholder(frequencyDetails, frequencyTime);
|
|
937
|
+
break;
|
|
938
|
+
case 7:
|
|
939
|
+
this.getQuarterlyPlaceholder(frequencyDetails, frequencyTime);
|
|
940
|
+
break;
|
|
941
|
+
case 9:
|
|
942
|
+
this.getBiannualPlaceholder(frequencyDetails, frequencyTime);
|
|
943
|
+
break;
|
|
944
|
+
case 0:
|
|
945
|
+
{
|
|
946
|
+
const dateObject = new Date(moment(frequencyDetails[1] + '-' + frequencyDetails[2] + '-' + frequencyDetails[3] + ' 00:00:00', 'YYYY-MM-DD HH:mm:ss').unix() * 1000);
|
|
947
|
+
// tslint:disable-next-line: max-line-length
|
|
948
|
+
this.frequencyPlaceholder =
|
|
949
|
+
'One Time ' + dateObject.getDate() + ' ' + this.shortMonth[dateObject.getMonth()] + ' ' + dateObject.getFullYear() + ' by ' + frequencyTime;
|
|
950
|
+
}
|
|
951
|
+
break;
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
catch (e) {
|
|
956
|
+
// tslint:disable-next-line: no-console
|
|
957
|
+
console.log(e);
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
/**
|
|
961
|
+
* It takes a frequencyDetails array and a frequencyTime string and returns a frequencyPlaceholder
|
|
962
|
+
* string.
|
|
963
|
+
* @param {any} frequencyDetails - ["1", "1,2,3,4,5", "1", "1", "1", "1", "1", "1", "1", "1", "1",
|
|
964
|
+
* "1", "1", "1", "1", "1", "1", "
|
|
965
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
966
|
+
*/
|
|
967
|
+
getWeeklyPlaceholder(frequencyDetails, frequencyTime) {
|
|
968
|
+
{
|
|
969
|
+
const selectedDay = frequencyDetails[1].split(',').map((ele) => {
|
|
970
|
+
return this.frequencyService.dayName[parseInt(ele) - 1];
|
|
971
|
+
});
|
|
972
|
+
if (parseInt(frequencyDetails[3]) === 1) {
|
|
973
|
+
this.frequencyPlaceholder = 'Every ' + selectedDay.join() + ' by ' + frequencyTime;
|
|
974
|
+
}
|
|
975
|
+
if (parseInt(frequencyDetails[3]) === 2) {
|
|
976
|
+
this.frequencyPlaceholder = 'Every alternate ' + selectedDay.join() + ' by ' + frequencyTime;
|
|
977
|
+
}
|
|
978
|
+
if (parseInt(frequencyDetails[3]) === 3) {
|
|
979
|
+
this.frequencyPlaceholder = 'Every 3rd ' + selectedDay.join() + ' by ' + frequencyTime;
|
|
980
|
+
}
|
|
981
|
+
if (parseInt(frequencyDetails[3]) > 3) {
|
|
982
|
+
this.frequencyPlaceholder = 'Every ' + parseInt(frequencyDetails[3]) + 'th ' + selectedDay.join() + ' by ' + frequencyTime;
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
/**
|
|
987
|
+
* It takes a string of comma separated numbers and returns a string of comma separated month names.
|
|
988
|
+
* @param {any} frequencyDetails - ["1", "1", "1,2,3,4,5,6,7,8,9,10,11,12"]
|
|
989
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
990
|
+
*/
|
|
991
|
+
getMonthlyPlaceholder(frequencyDetails, frequencyTime) {
|
|
992
|
+
{
|
|
993
|
+
const selectedMonth = frequencyDetails[2].split(',').map((ele) => {
|
|
994
|
+
return this.shortMonth[parseInt(ele) - 1];
|
|
995
|
+
});
|
|
996
|
+
if (parseInt(frequencyDetails[1]) === 1) {
|
|
997
|
+
this.frequencyPlaceholder = '1st of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
998
|
+
}
|
|
999
|
+
else if (parseInt(frequencyDetails[1]) === 2) {
|
|
1000
|
+
this.frequencyPlaceholder = '2nd of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1001
|
+
}
|
|
1002
|
+
else if (parseInt(frequencyDetails[1]) === 3) {
|
|
1003
|
+
this.frequencyPlaceholder = '3rd of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1004
|
+
}
|
|
1005
|
+
else if (parseInt(frequencyDetails[1]) === 21 || parseInt(frequencyDetails[1]) === 31) {
|
|
1006
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'st of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1007
|
+
}
|
|
1008
|
+
else if (parseInt(frequencyDetails[1]) === 22) {
|
|
1009
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'nd of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1010
|
+
}
|
|
1011
|
+
else if (parseInt(frequencyDetails[1]) === 23) {
|
|
1012
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'rd of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1013
|
+
}
|
|
1014
|
+
else if (parseInt(frequencyDetails[1]) > 3) {
|
|
1015
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'th of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
/**
|
|
1020
|
+
* If the frequencyDetails[1] is less than 2, then the frequencyPlaceholder is set to the 1st, 2nd,
|
|
1021
|
+
* 3rd, or nth of every month by frequencyTime.
|
|
1022
|
+
*
|
|
1023
|
+
* If the frequencyDetails[1] is greater than 1, then the frequencyPlaceholder is set to the 1st,
|
|
1024
|
+
* 2nd, 3rd, or nth of every month, Interval: every yearSequence years by frequencyTime.
|
|
1025
|
+
*
|
|
1026
|
+
* I'm trying to write a test that will test the above function.
|
|
1027
|
+
*
|
|
1028
|
+
* Here's what I have so far:
|
|
1029
|
+
* @param {any} frequencyDetails - [0] = "Yearly"
|
|
1030
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
1031
|
+
*/
|
|
1032
|
+
getYearlyPlaceholder(frequencyDetails, frequencyTime) {
|
|
1033
|
+
{
|
|
1034
|
+
const yearSequence = parseInt(frequencyDetails[3]) > 0 ? parseInt(frequencyDetails[3]) : 1;
|
|
1035
|
+
if (yearSequence < 2) {
|
|
1036
|
+
if (parseInt(frequencyDetails[1]) === 1) {
|
|
1037
|
+
this.frequencyPlaceholder = '1st of every ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ' by ' + frequencyTime;
|
|
1038
|
+
}
|
|
1039
|
+
if (parseInt(frequencyDetails[1]) === 2) {
|
|
1040
|
+
this.frequencyPlaceholder = '2nd of every ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ' by ' + frequencyTime;
|
|
1041
|
+
}
|
|
1042
|
+
if (parseInt(frequencyDetails[1]) === 3) {
|
|
1043
|
+
this.frequencyPlaceholder = '3rd of every ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ' by ' + frequencyTime;
|
|
1044
|
+
}
|
|
1045
|
+
if (parseInt(frequencyDetails[1]) > 3) {
|
|
1046
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'th of every ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ' by ' + frequencyTime;
|
|
1047
|
+
}
|
|
1048
|
+
if (parseInt(frequencyDetails[1]) === 31 || parseInt(frequencyDetails[1]) === 21) {
|
|
1049
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'st of every ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ' by ' + frequencyTime;
|
|
1050
|
+
}
|
|
1051
|
+
if (parseInt(frequencyDetails[1]) === 22) {
|
|
1052
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'nd of every ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ' by ' + frequencyTime;
|
|
1053
|
+
}
|
|
1054
|
+
if (parseInt(frequencyDetails[1]) === 23) {
|
|
1055
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'rd of every ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ' by ' + frequencyTime;
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
if (yearSequence > 1) {
|
|
1059
|
+
if (parseInt(frequencyDetails[1]) === 1) {
|
|
1060
|
+
// tslint:disable-next-line: max-line-length
|
|
1061
|
+
this.frequencyPlaceholder = '1st of ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ', Interval: every ' + yearSequence + ' years by ' + frequencyTime;
|
|
1062
|
+
}
|
|
1063
|
+
if (parseInt(frequencyDetails[1]) === 2) {
|
|
1064
|
+
// tslint:disable-next-line: max-line-length
|
|
1065
|
+
this.frequencyPlaceholder = '2nd of' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ', Interval: every ' + yearSequence + ' years by ' + frequencyTime;
|
|
1066
|
+
}
|
|
1067
|
+
if (parseInt(frequencyDetails[1]) === 3) {
|
|
1068
|
+
// tslint:disable-next-line: max-line-length
|
|
1069
|
+
this.frequencyPlaceholder = '3rd of ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ', Interval: every ' + yearSequence + ' years by ' + frequencyTime;
|
|
1070
|
+
}
|
|
1071
|
+
if (parseInt(frequencyDetails[1]) > 3) {
|
|
1072
|
+
// tslint:disable-next-line: max-line-length
|
|
1073
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'th of ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ', Interval: every ' + yearSequence + ' years by ' + frequencyTime;
|
|
1074
|
+
}
|
|
1075
|
+
if (parseInt(frequencyDetails[1]) === 31 || parseInt(frequencyDetails[1]) === 21) {
|
|
1076
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'st of ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ', Interval: every ' + yearSequence + ' years by ' + frequencyTime;
|
|
1077
|
+
}
|
|
1078
|
+
if (parseInt(frequencyDetails[1]) === 22) {
|
|
1079
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'nd of ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ', Interval: every ' + yearSequence + ' years by ' + frequencyTime;
|
|
1080
|
+
}
|
|
1081
|
+
if (parseInt(frequencyDetails[1]) === 23) {
|
|
1082
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'rd of ' + this.shortMonth[parseInt(frequencyDetails[2]) - 1] + ', Interval: every ' + yearSequence + ' years by ' + frequencyTime;
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
/**
|
|
1088
|
+
* If the frequencyDetails[1] is 1, 2, 3, 21, 22, 23, or greater than 3, then set the
|
|
1089
|
+
* frequencyPlaceholder to a string that includes the frequencyDetails[1] and the frequencyTime.
|
|
1090
|
+
* @param {any} frequencyDetails - ["3", "1", "1,2,3"]
|
|
1091
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
1092
|
+
*/
|
|
1093
|
+
getQuarterlyPlaceholder(frequencyDetails, frequencyTime) {
|
|
1094
|
+
{
|
|
1095
|
+
const quarterly = ['January, April, July, October', 'February, May, August, November', ' March, June, September, December'];
|
|
1096
|
+
if (parseInt(frequencyDetails[1]) === 1) {
|
|
1097
|
+
this.frequencyPlaceholder = '1st of every ' + quarterly[parseInt(frequencyDetails[2].split(',')[0]) - 1] + ' by ' + frequencyTime;
|
|
1098
|
+
}
|
|
1099
|
+
else if (parseInt(frequencyDetails[1]) === 2) {
|
|
1100
|
+
this.frequencyPlaceholder = '2nd of every ' + quarterly[parseInt(frequencyDetails[2].split(',')[0]) - 1] + ' by ' + frequencyTime;
|
|
1101
|
+
}
|
|
1102
|
+
else if (parseInt(frequencyDetails[1]) === 3) {
|
|
1103
|
+
this.frequencyPlaceholder = '3rd of every ' + quarterly[parseInt(frequencyDetails[2].split(',')[0]) - 1] + ' by ' + frequencyTime;
|
|
1104
|
+
}
|
|
1105
|
+
else if (parseInt(frequencyDetails[1]) === 21 || parseInt(frequencyDetails[1]) === 31) {
|
|
1106
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'st of every ' + quarterly[parseInt(frequencyDetails[2].split(',')[0]) - 1] + ' by ' + frequencyTime;
|
|
1107
|
+
}
|
|
1108
|
+
else if (parseInt(frequencyDetails[1]) === 22) {
|
|
1109
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'nd of every ' + quarterly[parseInt(frequencyDetails[2].split(',')[0]) - 1] + ' by ' + frequencyTime;
|
|
1110
|
+
}
|
|
1111
|
+
else if (parseInt(frequencyDetails[1]) === 23) {
|
|
1112
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'rd of every ' + quarterly[parseInt(frequencyDetails[2].split(',')[0]) - 1] + ' by ' + frequencyTime;
|
|
1113
|
+
}
|
|
1114
|
+
else if (parseInt(frequencyDetails[1]) > 3) {
|
|
1115
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'th of every ' + quarterly[parseInt(frequencyDetails[2].split(',')[0]) - 1] + ' by ' + frequencyTime;
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
/**
|
|
1120
|
+
* It takes a string of comma separated numbers and returns a string of comma separated month names.
|
|
1121
|
+
* @param {any} frequencyDetails - ["1", "1", "1,2,3,4,5,6,7,8,9,10,11,12"]
|
|
1122
|
+
* @param {any} frequencyTime - "10:00 AM"
|
|
1123
|
+
*/
|
|
1124
|
+
getBiannualPlaceholder(frequencyDetails, frequencyTime) {
|
|
1125
|
+
{
|
|
1126
|
+
const selectedMonth = frequencyDetails[2].split(',').map((ele) => {
|
|
1127
|
+
return this.shortMonth[parseInt(ele) - 1];
|
|
1128
|
+
});
|
|
1129
|
+
if (parseInt(frequencyDetails[1]) === 1) {
|
|
1130
|
+
this.frequencyPlaceholder = '1st of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1131
|
+
}
|
|
1132
|
+
else if (parseInt(frequencyDetails[1]) === 2) {
|
|
1133
|
+
this.frequencyPlaceholder = '2nd of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1134
|
+
}
|
|
1135
|
+
else if (parseInt(frequencyDetails[1]) === 3) {
|
|
1136
|
+
this.frequencyPlaceholder = '3rd of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1137
|
+
}
|
|
1138
|
+
else if (parseInt(frequencyDetails[1]) === 21 || parseInt(frequencyDetails[1]) === 31) {
|
|
1139
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'st of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1140
|
+
}
|
|
1141
|
+
else if (parseInt(frequencyDetails[1]) === 22) {
|
|
1142
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'nd of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1143
|
+
}
|
|
1144
|
+
else if (parseInt(frequencyDetails[1]) === 23) {
|
|
1145
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'rd of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1146
|
+
}
|
|
1147
|
+
else if (parseInt(frequencyDetails[1]) > 3) {
|
|
1148
|
+
this.frequencyPlaceholder = parseInt(frequencyDetails[1]) + 'th of every ' + selectedMonth.join(', ') + ' by ' + frequencyTime;
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
/**
|
|
1153
|
+
* It takes an event object, and if it exists, it creates a new object with the same properties as
|
|
1154
|
+
* the event object, and assigns it to the frequencyDetails property.
|
|
1155
|
+
*
|
|
1156
|
+
* If the event object is undefined, then the frequencyDetails property will be undefined.
|
|
1157
|
+
*
|
|
1158
|
+
* If the event object is null, then the frequencyDetails property will be null.
|
|
1159
|
+
*
|
|
1160
|
+
* If the event object is an empty object, then the frequencyDetails property will be an empty
|
|
1161
|
+
* object.
|
|
1162
|
+
*
|
|
1163
|
+
* If the event object is an object with properties, then the frequencyDetails property will be an
|
|
1164
|
+
* object with the same properties.
|
|
1165
|
+
*
|
|
1166
|
+
* If the event object is an object with properties, but some of those properties are undefined, then
|
|
1167
|
+
* the frequencyDetails property will be an object with the same properties, but some of those
|
|
1168
|
+
* properties will be undefined.
|
|
1169
|
+
*
|
|
1170
|
+
* If the event object is an object with properties, but some of those properties are null, then the
|
|
1171
|
+
* @param {any} event - any = {
|
|
1172
|
+
*/
|
|
1173
|
+
frequencyDataPopulate(event) {
|
|
1174
|
+
let data = {
|
|
1175
|
+
"frequency": event === null || event === void 0 ? void 0 : event.frequency,
|
|
1176
|
+
"started_at": event === null || event === void 0 ? void 0 : event.started_at,
|
|
1177
|
+
"frequency_time": event === null || event === void 0 ? void 0 : event.frequency_time,
|
|
1178
|
+
"remind_before_days": event === null || event === void 0 ? void 0 : event.remind_before_days,
|
|
1179
|
+
};
|
|
1180
|
+
this.frequencyDetails = data;
|
|
1181
|
+
}
|
|
767
1182
|
}
|
|
768
1183
|
WorkflowRiskComponent.decorators = [
|
|
769
1184
|
{ type: Component, args: [{
|
|
770
1185
|
selector: 'app-workflow-risk',
|
|
771
|
-
template: "<div class=\"workflw-risk\" *ngIf=\"!showSmiley\">\r\n <!-- Risk Type -->\r\n <div class=\"form-group-row\" [class.active]=\"false\"\r\n [class.disabled]=\"false\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"im\" *ngIf=\"true\">\r\n\r\n <svg *ngIf=\"false\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Type <span class=\"required\">*</span></label>\r\n <div class=\"risk-type-field\">\r\n <div class=\"type-item\" [class.active]=\"riskForm?.riskType === 'NORMAL'\">\r\n <button [class.disabled]=\"!riskTypeChangeAllowed\" (click)=\"changeRisk('NORMAL')\">ADD TO RISK REGISTER</button>\r\n <i class=\"icons info\" [appTooltip]=\"'This option lets you add a risk directly to the Risk Register. The risk owners will receive an alert and they can begin the the risk assessment process.'\" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </div>\r\n <div class=\"type-item\" [class.active]=\"riskForm?.riskType === 'REPORTED'\">\r\n <button [class.disabled]=\"!riskTypeChangeAllowed\" (click)=\"changeRisk('REPORTED')\">REPORT A RISK</button>\r\n <i class=\"icons info\" [appTooltip]=\"'This options lets you report a risk and assign it to the risk owners. The risk owners will have the option to either add the risk to the Risk Register or flag it for a follow-up at a later date.'\" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </div>\r\n <span class=\"background-glider\"></span>\r\n </div>\r\n <p *ngIf=\"false\" class=\"error-message\">Add a risk type</p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Name -->\r\n <div class=\"form-group-row\" [class.active]=\"false\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'name' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"riskForm.title\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"im\" *ngIf=\"riskForm?.title?.trim()?.length === 0 || activeSelector === 'name'\">\r\n\r\n <svg *ngIf=\"riskForm?.title?.trim()?.length > 0 && activeSelector !== 'name'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Name <span class=\"required\">*</span></label>\r\n <input spaceTrim type=\"text\" (keydown)=\"activeSelector = 'name'\" (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\" [(ngModel)]=\"riskForm.title\"\r\n placeholder=\"Add a risk name\" *ngIf=\"riskForm?.title?.trim() =='' || activeSelector === 'name'\">\r\n <div class=\"selected\" *ngIf=\"riskForm?.title?.trim()!= '' && activeSelector !== 'name'\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{riskForm.title}}</span>\r\n </div>\r\n <button class=\"edit\" (click)=\"activateSelector('name',true)\" type=\"button\"><i\r\n class=\"icons\"></i> Edit</button>\r\n </div>\r\n <p *ngIf=\"submitted && (!riskForm.title)\" class=\"error-message\">Add a risk name</p>\r\n <marx-editor [(ngModel)]=\"riskForm.description\" [editorConfig]=\"description\" (clickOutside)=\"checkDescription()\"></marx-editor>\r\n <p *ngIf=\"submitted && (riskForm.riskType ==='REPORTED' && !riskForm?.description?.trim()?.length)\" class=\"error-message\">Add a risk description</p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Responsibility Center -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rc'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rc' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.responsibilityCentersList?.length>0\">\r\n <img *ngIf=\"riskForm?.responsibilityCentersList?.length==0 || activeSelector === 'rc'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\" alt=\"\">\r\n\r\n <svg *ngIf=\"riskForm?.responsibilityCentersList?.length>0 && activeSelector !== 'rc'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center <span class=\"required\">*</span>\r\n <i class=\"icons\" [appTooltip]=\"'Responsibility Centers represent the corporate and operational infrastructure of an organization. One or more Responsibility Centers can be exposed to a risk and accordingly, the risk must be assessed against each Responsibility Center.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i>\r\n </label>\r\n <div class=\"select\" *ngIf=\"riskForm?.responsibilityCentersList?.length==0\">\r\n <input type=\"text\" (click)=\"activateSelector('rc',true)\"\r\n placeholder=\"Select Responsibility Center(s)\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"riskForm?.responsibilityCentersList?.length>0\">\r\n <div class=\"chip-container\" [class.more-one]=\"riskForm?.responsibilityCentersList?.length>1\" [class.plus]=\"riskForm?.responsibilityCentersList?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let rcName of riskForm?.responsibilityCentersList?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('rc',rcName)\"></i> {{rcName.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"riskForm?.responsibilityCentersList?.length > 2\" type=\"button\"\r\n appPopover (click)=\"popoverRC.popover()\" placement=\"right\">+\r\n {{riskForm?.responsibilityCentersList?.slice(2).length}}</button>\r\n </div>\r\n\r\n <button *ngIf=\"activeSelector !== 'rc'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('rc',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n <p *ngIf=\"submitted && (riskForm?.responsibilityCentersList?.length==0)\" class=\"error-message\">Assign\r\n this risk to a Responsibility Center(s)</p>\r\n <app-popover #popoverRC [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let rcName of riskForm?.responsibilityCentersList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rcName)\"></i>\r\n {{ rcName.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- RISK OWNER -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'owner'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'owner' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.ownersList?.length>0\">\r\n <img *ngIf=\"riskForm?.ownersList?.length ==0 || activeSelector === 'owner'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/im-creating.svg\" alt=\"\" />\r\n\r\n <svg *ngIf=\"riskForm?.ownersList?.length>0 && activeSelector !== 'owner'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RISK OWNER <span class=\"required\">*</span>\r\n <i class=\"icons\" [appTooltip]=\"'This is the person that is responsible for managing the risk.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i>\r\n </label>\r\n <div class=\"select\" *ngIf=\"riskForm?.ownersList?.length ==0\">\r\n <input type=\"text\" (click)=\"activateSelector('owner',true)\" placeholder=\"Select Risk Owner(s)\"\r\n readonly>\r\n </div>\r\n \r\n <div class=\"selected\" *ngIf=\"riskForm?.ownersList?.length>0\">\r\n <div class=\"chip-container\" [class.more-one]=\"riskForm?.ownersList?.length>1\" [class.plus]=\"riskForm?.ownersList?.length>2\">\r\n <ng-container *ngIf=\"(riskForm?.ownersList|shortMerge : nonRemovableUsersList) as ownerList\">\r\n <span class=\"chip\" *ngFor=\"let owner of ownerList?.slice(0,2)\"><i class=\"icons\"\r\n *ngIf=\"!nonRemovableUsersList.includes(owner?.member_id)\" (click)=\"remove('owner',owner)\"></i>\r\n {{owner?.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"riskForm?.ownersList?.length > 2\" type=\"button\" appPopover\r\n (click)=\"popoverOwner.popover()\" placement=\"right\">+\r\n {{riskForm?.ownersList?.slice(2).length}}</button>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <button *ngIf=\"activeSelector !== 'owner'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('owner',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n <p *ngIf=\"submitted && (riskForm?.ownersList?.length===0)\" class=\"error-message\">Select Owner(s) for this risk.</p>\r\n <app-popover #popoverOwner [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ng-container *ngIf=\"(riskForm?.ownersList|shortMerge : nonRemovableUsersList) as ownerPop\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of ownerPop | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf = \"!nonRemovableUsersList.includes(owner?.member_id)\" class=\"icons\" (click)=\"remove('owner',owner)\"></i>\r\n {{ owner.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Category -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'category'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'category' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.category?.selectedCategory\">\r\n <img *ngIf=\"!riskForm?.category?.selectedCategory || activeSelector === 'category'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\" />\r\n\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm?.category?.selectedCategory && activeSelector !== 'category'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Category\r\n <i class=\"icons\" [appTooltip]=\"'Risk Categories are used to group similar risks.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"select\" *ngIf=\"!riskForm?.category?.selectedCategory\">\r\n <input type=\"text\" (click)=\"activateSelector('category',true)\" placeholder=\"Select Risk Category\"\r\n readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"riskForm?.category?.selectedCategory\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"remove('category',riskForm.category.selectedCategory)\"></i>{{riskForm?.category?.selectedCategory?.category_name}}\r\n </span>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'category'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('category',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"riskForm?.categoryCustomTags?.length>0\">\r\n <div class=\"vx-form-group\" *ngFor=\"let tag of riskForm.categoryCustomTags\">\r\n <label class=\"vx-control-panel\">{{tag.custom_tag_name}}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.custom_tag_value\" [placeholder]=\"tag.custom_tag_name\">\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n <!-- Assessment Deadline -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assessment'\" id=\"deadline\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'assessment' && sideSelectorElements.includes(activeSelector)\"\r\n *ngIf=\"!settingsInfo?.assessment_deadline_enable && riskForm?.riskType !== 'REPORTED' && ((currentTimeStamp < editDetails?.assessment_date_timestamp) || !editDetails?.IfAssessmentDone )\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.assessment_deadline_days>=1\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\"\r\n *ngIf=\"riskForm?.assessment_deadline_days<1 || activeSelector === 'assessment'\" alt=\"\" />\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm?.assessment_deadline_days>=1 && activeSelector !== 'assessment'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Assessment Deadline <span class=\"required\">*</span>\r\n <i class=\"icons\" [appTooltip]=\"'This is the date that the inherent risk assessment must be completed by.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"input\">\r\n <span class=\"text\">Set Number of days</span>\r\n <div class=\"input-group counter\">\r\n <button (click)=\"changeRiskAssessment('subtract')\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n <input type=\"number\" [(ngModel)]=\"riskForm.assessment_deadline_days\"\r\n (focusin)=\"activateSelector('assessment',true)\"\r\n (focusout)=\"activateSelector('assessment',false)\" name=\"riskAssessmentDeadline\"\r\n validateAssessment #deadline=\"ngModel\"\r\n (ngModelChange)=\"changeRiskAssessmentDeadline($event)\"\r\n onkeydown=\"return event.keyCode !== 190\" min=\"0\" oninput=\"this.value = Math.abs(this.value)\" />\r\n <button (click)=\"changeRiskAssessment('add')\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <p *ngIf=\"submitted && (riskForm?.assessment_deadline_days<1)\" class=\"error-message\">\r\n Enter a value greater than 0.\r\n </p>\r\n <label class=\"vx-control-panel\" *ngIf=\"riskForm?.assessment_deadline_days>=1\">\r\n This risk assessment needs to be completed by {{ date | date: 'dd MMM yyyy' }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Overseer -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.active]=\"activeSelector === 'overseer'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'overseer' && sideSelectorElements.includes(activeSelector)\"\r\n *ngIf=\"riskForm.addOverseer\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.overseersList?.length>0\">\r\n <img *ngIf=\"riskForm?.overseersList?.length==0 || activeSelector === 'overseer'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\" alt=\"\" />\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm?.overseersList?.length>0 && activeSelector !== 'overseer'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Overseer<i class=\"icons\" [appTooltip]=\"'This is the person that is responsible for overseeing the risk but who is not responsible for managing the risk.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"select\" *ngIf=\"riskForm?.overseersList?.length==0\">\r\n <input type=\"text\" (click)=\"activateSelector('overseer',true)\" placeholder=\"Select Risk Overseer(s)\"\r\n readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"riskForm?.overseersList?.length>0\">\r\n <div class=\"chip-container\" [class.more-one]=\"riskForm?.overseersList?.length>1\" [class.plus]=\"riskForm?.overseersList?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let owner of riskForm?.overseersList?.slice(0,2)\"><i class=\"icons\"\r\n (click)=\"remove('overseer',owner)\"></i> {{owner.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"riskForm?.overseersList?.length > 2\" type=\"button\" appPopover\r\n (click)=\"popoverOverseer.popover()\" placement=\"right\">+\r\n {{riskForm?.overseersList?.slice(2).length}}</button>\r\n </div>\r\n\r\n <button *ngIf=\"activeSelector !== 'overseer'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('overseer',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n <app-popover #popoverOverseer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of riskForm?.overseersList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseer',owner)\"></i>\r\n {{ owner.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Mitigation Priority -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.active]=\"false\"\r\n [class.disabled]=\"activeSelector && sideSelectorElements.includes(activeSelector)\"\r\n *ngIf=\"riskForm.addMitigation\">\r\n <div class=\"left\" [class.checked]=\"riskForm.mitigation\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/priority.svg\" *ngIf=\"!riskForm.mitigation\" alt=\"\" />\r\n <!-- <svg viewBox=\"25 25 50 50\" class=\"edit-loader\">\r\n <circle cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke=\"#1e5dd3\" stroke-width=\"3\" class=\"loader-path\"></circle>\r\n </svg> -->\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm.mitigation\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Mitigation Priority\r\n <i class=\"icons\" [appTooltip]=\"'This sets the priority level for the mitigation of each risk.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></label>\r\n\r\n <cs-select [(ngModel)]=\"riskForm.mitigation\" [placeholder]=\"'Select a mitigation priority'\"\r\n name=\"riskForm.mitigation\">\r\n <cs-option *ngFor=\"let data of mitigationDetails\" [value]=\"data?.mitigation_id\"\r\n [color]=\"data?.mitigation_color\">\r\n {{ data.mitigation_name }}\r\n </cs-option>\r\n </cs-select>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Recommended Mitigation Plan -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"riskForm?.addMitigationPlan\">\r\n <div id=\"riskSpace\" class=\"left\" [class.checked]=\"(riskForm.mitigationDescriptionPlan | spaceTrim) !== ''\">\r\n <img *ngIf=\"(riskForm.mitigationDescriptionPlan | spaceTrim) ===''\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/objectives.svg\" alt=\"\" />\r\n <svg *ngIf=\"(riskForm.mitigationDescriptionPlan | spaceTrim) !== ''\" class=\"checkIcon\" \r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label for=\"\" class=\"vx-control-panel\">Recommended Mitigation Plans<link rel=\"manifest\" href=\"./manifest.json\">\r\n <i class=\"icons\" [appTooltip]=\"'Specify the mitigation plan that can be undertaken to mitigate the risk.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i>\r\n </label>\r\n <marx-editor [(ngModel)]=\"riskForm.mitigationDescriptionPlan\"\r\n [editorConfig]=\"mitigationDescriptionPlan\" (clickOutside)=\"checkMitigationPlan()\">\r\n </marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [responsibilityCentersList]=\"responsibilityCentersList\"\r\n [selectedResponsibilityCenters]=\"riskForm.responsibilityCentersList\" [rcIdKey]=\"'rc_id'\"\r\n (saveSelectedList)=\"saveSelectedRCList($event)\" (closeRcList)=\"activateSelector('rc',false)\"\r\n [singularText]=\"'Responsibility Center selected'\" [pluralText]=\"'Responsibility Centers selected'\" >\r\n</app-responsibility-centers-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'owner'\" [usersList]=\"ownersList\" [selectedUsers]=\"riskForm.ownersList\"\r\n [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedOwnersList($event)\"\r\n [nonRemovableUsersList]=\"nonRemovableUsersList\" (closeUsersList)=\"activateSelector('owner',false)\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" ></app-owner-list>\r\n\r\n<app-category-list *ngIf=\"activeSelector === 'category'\" [categoryList]=\"categoryList\"\r\n [selectedCategory]=\"riskForm.category\" (saveSelectedCategory)=\"saveSelectedCategory($event)\"\r\n (closeCategoriesList)=\"activateSelector('category',false)\"></app-category-list>\r\n<app-owner-list *ngIf=\"activeSelector === 'overseer'\" [usersList]=\"overseersList\"\r\n [selectedUsers]=\"riskForm.overseersList\" [userIdKey]=\"'member_id'\" [itemNameKey]=\"'member_name'\" [itemEmailKey]=\"'member_email'\"\r\n (saveSelectedList)=\"saveSelectedOverseersList($event)\" (closeUsersList)=\"activateSelector('overseer',false)\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" >\r\n</app-owner-list>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n<!-- <app-smiley-dialog *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog> -->\r\n\r\n <app-smiley-dialog-inline\r\n *ngIf=\"showSmiley\"\r\n [message]=\"smileyMessage\"\r\n [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\"\r\n (closeSmiley)=\"closeSmiley($event)\">\r\n </app-smiley-dialog-inline>\r\n",
|
|
1186
|
+
template: "<div class=\"workflw-risk\" *ngIf=\"!showSmiley\">\r\n <!-- Risk Type -->\r\n <div class=\"form-group-row\" [class.active]=\"false\"\r\n [class.disabled]=\"false\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"im\" *ngIf=\"true\">\r\n\r\n <svg *ngIf=\"false\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Type <span class=\"required\">*</span></label>\r\n <div class=\"risk-type-field\">\r\n <div class=\"type-item\" [class.active]=\"riskForm?.riskType === 'NORMAL'\">\r\n <button [class.disabled]=\"!riskTypeChangeAllowed\" (click)=\"changeRisk('NORMAL')\">ADD TO RISK REGISTER</button>\r\n <i class=\"icons info\" [appTooltip]=\"'This option lets you add a risk directly to the Risk Register. The risk owners will receive an alert and they can begin the the risk assessment process.'\" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </div>\r\n <div class=\"type-item\" [class.active]=\"riskForm?.riskType === 'REPORTED'\">\r\n <button [class.disabled]=\"!riskTypeChangeAllowed\" (click)=\"changeRisk('REPORTED')\">REPORT A RISK</button>\r\n <i class=\"icons info\" [appTooltip]=\"'This options lets you report a risk and assign it to the risk owners. The risk owners will have the option to either add the risk to the Risk Register or flag it for a follow-up at a later date.'\" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\r\n </div>\r\n <span class=\"background-glider\"></span>\r\n </div>\r\n <p *ngIf=\"false\" class=\"error-message\">Add a risk type</p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Name -->\r\n <div class=\"form-group-row\" [class.active]=\"false\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'name' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"riskForm.title\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"im\" *ngIf=\"riskForm?.title?.trim()?.length === 0 || activeSelector === 'name'\">\r\n\r\n <svg *ngIf=\"riskForm?.title?.trim()?.length > 0 && activeSelector !== 'name'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">WHAT RISK WOULD YOU LIKE TO MANAGE? <span class=\"required\">*</span></label>\r\n <input spaceTrim type=\"text\" (keydown)=\"activeSelector = 'name'\" (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\" [(ngModel)]=\"riskForm.title\"\r\n placeholder=\"Add a risk name\" *ngIf=\"riskForm?.title?.trim() =='' || activeSelector === 'name'\">\r\n <div class=\"selected\" *ngIf=\"riskForm?.title?.trim()!= '' && activeSelector !== 'name'\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{riskForm.title}}</span>\r\n </div>\r\n <button class=\"edit\" (click)=\"activateSelector('name',true)\" type=\"button\"><i\r\n class=\"icons\"></i> Edit</button>\r\n </div>\r\n <p *ngIf=\"submitted && (!riskForm.title)\" class=\"error-message\">Add a risk name</p>\r\n <marx-editor [(ngModel)]=\"riskForm.description\" [editorConfig]=\"description\" (clickOutside)=\"checkDescription()\"></marx-editor>\r\n <p *ngIf=\"submitted && (riskForm.riskType ==='REPORTED' && !riskForm?.description?.trim()?.length)\" class=\"error-message\">Add a risk description</p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- RISK OWNER -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'owner'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'owner' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.ownersList?.length>0\">\r\n <img *ngIf=\"riskForm?.ownersList?.length ==0 || activeSelector === 'owner'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/im-creating.svg\" alt=\"\" />\r\n\r\n <svg *ngIf=\"riskForm?.ownersList?.length>0 && activeSelector !== 'owner'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">WHO IS RESPONSIBLE FOR MANAGING THIS RISK? <span class=\"required\">*</span>\r\n <i class=\"icons\" [appTooltip]=\"'This is the person that is responsible for managing the risk.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i>\r\n </label>\r\n <div class=\"select\" *ngIf=\"riskForm?.ownersList?.length ==0\">\r\n <input type=\"text\" (click)=\"activateSelector('owner',true)\" placeholder=\"Select Risk Owner(s)\"\r\n readonly>\r\n </div>\r\n \r\n <div class=\"selected\" *ngIf=\"riskForm?.ownersList?.length>0 || riskForm?.groupsList.length > 0\">\r\n <div class=\"chip-container\" *ngIf=\"!featureflag_groups\" [class.more-one]=\"riskForm?.ownersList?.length>1\" [class.plus]=\"riskForm?.ownersList?.length>2\">\r\n <ng-container *ngIf=\"(riskForm?.ownersList|shortMerge : nonRemovableUsersList) as ownerList\">\r\n <span class=\"chip\" *ngFor=\"let owner of ownerList?.slice(0,2)\"><i class=\"icons\"\r\n *ngIf=\"!nonRemovableUsersList.includes(owner?.member_id)\" (click)=\"remove('owner',owner)\"></i>\r\n {{owner?.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"riskForm?.ownersList?.length > 2\" type=\"button\" appPopover\r\n (click)=\"popoverOwner.popover()\" placement=\"right\">+\r\n {{riskForm?.ownersList?.slice(2).length}}</button>\r\n </ng-container>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureflag_groups\">\r\n <div class=\"chip-inner\" >\r\n <span class=\"chip\">\r\n <span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"popoverUser.popover()\" placement=\"right\">{{riskForm?.ownersList.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"riskForm?.groupsList.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"riskForm?.groupsList.length > 0\" >\r\n <span class=\"chip\" ><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">{{riskForm?.groupsList?.length}}</button>\r\n </div>\r\n </div>\r\n\r\n <button *ngIf=\"activeSelector !== 'owner'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('owner',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n <p *ngIf=\"submitted && (riskForm?.ownersList?.length===0)\" class=\"error-message\">Select Owner(s) for this risk.</p>\r\n <app-popover #popoverOwner [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ng-container *ngIf=\"(riskForm?.ownersList|shortMerge : nonRemovableUsersList) as ownerPop\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of ownerPop | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf = \"!nonRemovableUsersList.includes(owner?.member_id)\" class=\"icons\" (click)=\"remove('owner',owner)\"></i>\r\n {{ owner.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n </div>\r\n </app-popover>\r\n <app-popover #popoverUser [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ng-container *ngIf=\"(riskForm?.ownersList|shortMerge : nonRemovableUsersList) as ownerPop\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of ownerPop; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf = \"!nonRemovableUsersList.includes(owner?.member_id)\" class=\"icons\" (click)=\"remove('owner',owner)\"></i>\r\n {{ owner.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of (riskForm?.groupsList)\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('Ownergroup', data)\"></i>\r\n {{data.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Responsibility Center -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rc'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rc' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.responsibilityCentersList?.length>0\">\r\n <img *ngIf=\"riskForm?.responsibilityCentersList?.length==0 || activeSelector === 'rc'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\" alt=\"\">\r\n\r\n <svg *ngIf=\"riskForm?.responsibilityCentersList?.length>0 && activeSelector !== 'rc'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center <span class=\"required\">*</span>\r\n <i class=\"icons\" [appTooltip]=\"'Responsibility Centers represent the corporate and operational infrastructure of an organization. One or more Responsibility Centers can be exposed to a risk and accordingly, the risk must be assessed against each Responsibility Center.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i>\r\n </label>\r\n <div class=\"select\" *ngIf=\"riskForm?.responsibilityCentersList?.length==0\">\r\n <input type=\"text\" (click)=\"activateSelector('rc',true)\"\r\n placeholder=\"Select Responsibility Center(s)\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"riskForm?.responsibilityCentersList?.length>0\">\r\n <div class=\"chip-container\" [class.more-one]=\"riskForm?.responsibilityCentersList?.length>1\" [class.plus]=\"riskForm?.responsibilityCentersList?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let rcName of riskForm?.responsibilityCentersList?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('rc',rcName)\"></i> {{rcName.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"riskForm?.responsibilityCentersList?.length > 2\" type=\"button\"\r\n appPopover (click)=\"popoverRC.popover()\" placement=\"right\">+\r\n {{riskForm?.responsibilityCentersList?.slice(2).length}}</button>\r\n </div>\r\n\r\n <button *ngIf=\"activeSelector !== 'rc'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('rc',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n <p *ngIf=\"submitted && (riskForm?.responsibilityCentersList?.length==0)\" class=\"error-message\">Assign\r\n this risk to a Responsibility Center(s)</p>\r\n <app-popover #popoverRC [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let rcName of riskForm?.responsibilityCentersList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rcName)\"></i>\r\n {{ rcName.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Frequency -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"activeSelector && activeSelector !== 'frequency' && sideSelectorElements?.includes(activeSelector)\" *ngIf=\"riskForm?.riskType !== 'REPORTED'\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.category?.selectedCategory\">\r\n <img *ngIf=\"!riskForm?.frequency_details?.frequency || riskForm?.frequency_details?.frequency === '' || activeSelector === 'frequency'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\" alt=\"\" />\r\n\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm?.frequency_details?.frequency && riskForm?.frequency_details?.frequency !== '' || activeSelector !== 'frequency'\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">HOW OFTEN DOES THIS RISK NEED TO BE REASSESSED? <span class=\"required\">*</span>\r\n <i class=\"icons\" [appTooltip]=\"'The option lets you specify the risk reassessment frequency.'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"select\" *ngIf=\"!riskForm?.frequency_details?.frequency\" (click)=\"activateSelector('frequency',true)\">\r\n <input type=\"text\" placeholder=\"Set a Reassessment Frequency\" readonly>\r\n </div>\r\n <div class=\"selected button-sec\" *ngIf=\"riskForm?.frequency_details?.frequency\">\r\n <span class=\"chip\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"false\">{{frequencyPlaceholder}}</span>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('frequency',true)\"><i class=\"icons\"></i> Edit</button>\r\n </div>\r\n <p *ngIf=\"submitted && (!riskForm?.frequency_details?.frequency || riskForm?.frequency_details?.frequency === '')\" class=\"error-message\">Please select the frequency of occurrence for this risk.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Category -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'category'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'category' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.category?.selectedCategory\">\r\n <img *ngIf=\"!riskForm?.category?.selectedCategory || activeSelector === 'category'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\" />\r\n\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm?.category?.selectedCategory && activeSelector !== 'category'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Category\r\n <i class=\"icons\" [appTooltip]=\"'Risk Categories are used to group similar risks.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"select\" *ngIf=\"!riskForm?.category?.selectedCategory\">\r\n <input type=\"text\" (click)=\"activateSelector('category',true)\" placeholder=\"Select Risk Category\"\r\n readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"riskForm?.category?.selectedCategory\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\"\r\n (click)=\"remove('category',riskForm.category.selectedCategory)\"></i>{{riskForm?.category?.selectedCategory?.category_name}}\r\n </span>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'category'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('category',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"riskForm?.categoryCustomTags?.length>0\">\r\n <div class=\"vx-form-group\" *ngFor=\"let tag of riskForm.categoryCustomTags\">\r\n <label class=\"vx-control-panel\">{{tag.custom_tag_name}}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.custom_tag_value\" [placeholder]=\"tag.custom_tag_name\">\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n <!-- Assessment Deadline -->\r\n <!-- !settingsInfo?.assessment_deadline_enable && riskForm?.riskType !== 'REPORTED' && ((currentTimeStamp < editDetails?.assessment_date_timestamp) || !editDetails?.IfAssessmentDone ) -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assessment'\" id=\"deadline\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'assessment' && sideSelectorElements.includes(activeSelector)\"\r\n *ngIf=\"false\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.assessment_deadline_days>=1\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\"\r\n *ngIf=\"riskForm?.assessment_deadline_days<1 || activeSelector === 'assessment'\" alt=\"\" />\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm?.assessment_deadline_days>=1 && activeSelector !== 'assessment'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Assessment Deadline <span class=\"required\">*</span>\r\n <i class=\"icons\" [appTooltip]=\"'This is the date that the inherent risk assessment must be completed by.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"input\">\r\n <span class=\"text\">Set Number of days</span>\r\n <div class=\"input-group counter\">\r\n <button (click)=\"changeRiskAssessment('subtract')\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n <input type=\"number\" [(ngModel)]=\"riskForm.assessment_deadline_days\"\r\n (focusin)=\"activateSelector('assessment',true)\"\r\n (focusout)=\"activateSelector('assessment',false)\" name=\"riskAssessmentDeadline\"\r\n validateAssessment #deadline=\"ngModel\"\r\n (ngModelChange)=\"changeRiskAssessmentDeadline($event)\"\r\n onkeydown=\"return event.keyCode !== 190\" min=\"0\" oninput=\"this.value = Math.abs(this.value)\" />\r\n <button (click)=\"changeRiskAssessment('add')\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <p *ngIf=\"submitted && (riskForm?.assessment_deadline_days<1)\" class=\"error-message\">\r\n Enter a value greater than 0.\r\n </p>\r\n <label class=\"vx-control-panel\" *ngIf=\"riskForm?.assessment_deadline_days>=1\">\r\n This risk assessment needs to be completed by {{ date | date: 'dd MMM yyyy' }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Overseer -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.active]=\"activeSelector === 'overseer'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'overseer' && sideSelectorElements.includes(activeSelector)\"\r\n *ngIf=\"riskForm.addOverseer\">\r\n <div class=\"left\" [class.checked]=\"riskForm?.overseersList?.length>0\">\r\n <img *ngIf=\"riskForm?.overseersList?.length==0 || activeSelector === 'overseer'\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\" alt=\"\" />\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm?.overseersList?.length>0 && activeSelector !== 'overseer'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Overseer<i class=\"icons\" [appTooltip]=\"'This is the person that is responsible for overseeing the risk but who is not responsible for managing the risk.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></label>\r\n <div class=\"select\" *ngIf=\"riskForm?.overseersList?.length==0 && riskForm?.overseersGroupList?.length==0 \">\r\n <input type=\"text\" (click)=\"activateSelector('overseer',true)\" placeholder=\"Select Risk Overseer(s)\"\r\n readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"riskForm?.overseersList?.length>0 || riskForm?.overseersGroupList.length > 0\">\r\n <div class=\"chip-container\" *ngIf=\"!featureflag_groups\" [class.more-one]=\"riskForm?.overseersList?.length>1\" [class.plus]=\"riskForm?.overseersList?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let owner of riskForm?.overseersList?.slice(0,2)\"><i class=\"icons\"\r\n (click)=\"remove('overseer',owner)\"></i> {{owner.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"riskForm?.overseersList?.length > 2\" type=\"button\" appPopover\r\n (click)=\"popoverOverseer.popover()\" placement=\"right\">+\r\n {{riskForm?.overseersList?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureflag_groups\">\r\n <div class=\"chip-inner\" >\r\n <span class=\"chip\">\r\n <span *ngIf=\"riskForm?.overseersList.length > 0\" class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button *ngIf=\"riskForm?.overseersList.length > 0\" class=\"count user\" appPopover (click)=\"overseer.popover()\" placement=\"right\">{{riskForm?.overseersList.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"riskForm?.overseersList.length > 0 && riskForm?.overseersGroupList.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"riskForm?.overseersGroupList.length > 0\" >\r\n <span class=\"chip\" ><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">{{riskForm?.overseersGroupList?.length}}</button>\r\n </div>\r\n </div>\r\n\r\n <button *ngIf=\"activeSelector !== 'overseer'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('overseer',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n <app-popover #popoverOverseer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of riskForm?.overseersList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseer',owner)\"></i>\r\n {{ owner.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let owner of riskForm?.overseersList ; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseer',owner)\"></i>\r\n {{ owner.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of (riskForm?.overseersGroupList)\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseergroup', data)\"></i>\r\n {{data.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Mitigation Priority -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.active]=\"false\"\r\n [class.disabled]=\"activeSelector && sideSelectorElements.includes(activeSelector)\"\r\n *ngIf=\"riskForm.addMitigation\">\r\n <div class=\"left\" [class.checked]=\"riskForm.mitigation\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/priority.svg\" *ngIf=\"!riskForm.mitigation\" alt=\"\" />\r\n <!-- <svg viewBox=\"25 25 50 50\" class=\"edit-loader\">\r\n <circle cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" stroke=\"#1e5dd3\" stroke-width=\"3\" class=\"loader-path\"></circle>\r\n </svg> -->\r\n <svg class=\"checkIcon\" *ngIf=\"riskForm.mitigation\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Mitigation Priority\r\n <i class=\"icons\" [appTooltip]=\"'This sets the priority level for the mitigation of each risk.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></label>\r\n\r\n <cs-select [(ngModel)]=\"riskForm.mitigation\" [placeholder]=\"'Select a mitigation priority'\"\r\n name=\"riskForm.mitigation\">\r\n <cs-option *ngFor=\"let data of mitigationDetails\" [value]=\"data?.mitigation_id\"\r\n [color]=\"data?.mitigation_color\">\r\n {{ data.mitigation_name }}\r\n </cs-option>\r\n </cs-select>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Recommended Mitigation Plan -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"riskForm?.addMitigationPlan\">\r\n <div id=\"riskSpace\" class=\"left\" [class.checked]=\"(riskForm.mitigationDescriptionPlan | spaceTrim) !== ''\">\r\n <img *ngIf=\"(riskForm.mitigationDescriptionPlan | spaceTrim) ===''\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/objectives.svg\" alt=\"\" />\r\n <svg *ngIf=\"(riskForm.mitigationDescriptionPlan | spaceTrim) !== ''\" class=\"checkIcon\" \r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label for=\"\" class=\"vx-control-panel\">Recommended Mitigation Plans<link rel=\"manifest\" href=\"./manifest.json\">\r\n <i class=\"icons\" [appTooltip]=\"'Specify the mitigation plan that can be undertaken to mitigate the risk.'\"\r\n placement=\"bottom\"\r\n delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i>\r\n </label>\r\n <marx-editor [(ngModel)]=\"riskForm.mitigationDescriptionPlan\"\r\n [editorConfig]=\"mitigationDescriptionPlan\" (clickOutside)=\"checkMitigationPlan()\">\r\n </marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Risk Label -->\r\n <div class=\"form-group-row\" [class.active]=\"false\" [class.disabled]=\"activeSelector && sideSelectorElements.includes(activeSelector)\" *ngIf=\"riskForm?.addRiskLabel\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <!-- <img *ngIf=\"true\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\" alt=\"\" /> -->\r\n\r\n <svg class=\"checkIcon\" *ngIf=\"true\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RISK LABEL <i class=\"icons\" [appTooltip]=\"'Risk label info text here...'\" placement=\"bottom\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i></label>\r\n <cs-select [(ngModel)]=\"riskForm.riskLabelValue\" [placeholder]=\"'Select a risk label'\"\r\n name=\"riskForm?.riskLabelValue\">\r\n <cs-option *ngFor=\"let data of riskLabelList\" [value]=\"data?.value\">\r\n {{ data?.name }}\r\n </cs-option>\r\n </cs-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [responsibilityCentersList]=\"responsibilityCentersList\"\r\n [selectedResponsibilityCenters]=\"riskForm.responsibilityCentersList\" [rcIdKey]=\"'rc_id'\"\r\n (saveSelectedList)=\"saveSelectedRCList($event)\" (closeRcList)=\"activateSelector('rc',false)\"\r\n [singularText]=\"'Responsibility Center selected'\" [pluralText]=\"'Responsibility Centers selected'\" >\r\n</app-responsibility-centers-list>\r\n\r\n<app-owner-list *ngIf=\"!featureflag_groups && activeSelector === 'owner'\" [usersList]=\"ownersList\" [selectedUsers]=\"riskForm.ownersList\"\r\n [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedOwnersList($event)\"\r\n [nonRemovableUsersList]=\"nonRemovableUsersList\" (closeUsersList)=\"activateSelector('owner',false)\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" ></app-owner-list>\r\n\r\n<user-group-list *ngIf=\"featureflag_groups && activeSelector === 'owner'\" [userlist]=\"ownersList\" [selectedUsers]=\"riskForm.ownersList\" [groupList]=\"groupsList\"\r\n [nonRemovableUserIds]=\"nonRemovableUsersList\" (save)=\"saveSelectedOwnersList($event)\" [selectedGroups]=\"riskForm.groupsList\"\r\n (cancel)=\"activateSelector('owner',false)\" [groupEnabled]=\"true\" [featureflag]=\"featureflag_groups\" >\r\n </user-group-list>\r\n\r\n <user-group-list *ngIf=\"featureflag_groups && activeSelector === 'overseer'\" [userlist]=\"overseersList\" [selectedUsers]=\"riskForm.overseersList\" [groupList]=\"overseersGroupList\"\r\n (save)=\"saveSelectedOverseersList($event)\" [selectedGroups]=\"riskForm.overseersGroupList\"\r\n (cancel)=\"activateSelector('overseer',false)\" [groupEnabled]=\"true\" [featureflag]=\"featureflag_groups\" >\r\n </user-group-list>\r\n\r\n<app-category-list *ngIf=\"activeSelector === 'category'\" [categoryList]=\"categoryList\"\r\n [selectedCategory]=\"riskForm.category\" (saveSelectedCategory)=\"saveSelectedCategory($event)\"\r\n (closeCategoriesList)=\"activateSelector('category',false)\"></app-category-list>\r\n<app-owner-list *ngIf=\"!featureflag_groups && activeSelector === 'overseer'\" [usersList]=\"overseersList\"\r\n [selectedUsers]=\"riskForm.overseersList\" [userIdKey]=\"'member_id'\" [itemNameKey]=\"'member_name'\" [itemEmailKey]=\"'member_email'\"\r\n (saveSelectedList)=\"saveSelectedOverseersList($event)\" (closeUsersList)=\"activateSelector('overseer',false)\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" >\r\n</app-owner-list>\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n<!-- <app-smiley-dialog *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog> -->\r\n\r\n<app-frequency-dialog-container \r\n *ngIf=\"activeSelector === 'frequency'\" \r\n [frequencyDetails]=\"frequencyDetails\" \r\n (selectedFrequency)=\"frequencyData($event)\" \r\n (closeFrequency)=\"activateSelector('frequency',false)\">\r\n</app-frequency-dialog-container>\r\n\r\n<app-smiley-dialog-inline\r\n *ngIf=\"showSmiley\"\r\n [message]=\"smileyMessage\"\r\n [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\"\r\n (closeSmiley)=\"closeSmiley($event)\">\r\n</app-smiley-dialog-inline>",
|
|
772
1187
|
styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .workflw-risk{display:block;position:relative}", "@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 app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::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}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}"]
|
|
773
1188
|
},] }
|
|
774
1189
|
];
|
|
@@ -777,9 +1192,11 @@ WorkflowRiskComponent.ctorParameters = () => [
|
|
|
777
1192
|
{ type: AuthService },
|
|
778
1193
|
{ type: UiKitService },
|
|
779
1194
|
{ type: SnackBarService },
|
|
1195
|
+
{ type: FrequencyService },
|
|
780
1196
|
{ type: Configurations, decorators: [{ type: Optional }] }
|
|
781
1197
|
];
|
|
782
1198
|
WorkflowRiskComponent.propDecorators = {
|
|
1199
|
+
feature: [{ type: Input }],
|
|
783
1200
|
mode: [{ type: Input }],
|
|
784
1201
|
riskId: [{ type: Input }],
|
|
785
1202
|
defaultRiskType: [{ type: Input }],
|
|
@@ -794,4 +1211,4 @@ WorkflowRiskComponent.propDecorators = {
|
|
|
794
1211
|
hideElementsFromMoreOptions: [{ type: Output }],
|
|
795
1212
|
openedFrom: [{ type: Input }]
|
|
796
1213
|
};
|
|
797
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcmlzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1yaXNrL3dvcmtmbG93LXJpc2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFTbkUsTUFBTSxPQUFPLHFCQUFxQjtJQWtHaEMsWUFDVSxXQUEyQixFQUMzQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixRQUF5QixFQUNyQixNQUF1QjtRQUozQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFwR25DLDhCQUF5QixHQUFRLEVBQUUsQ0FBQztRQUNwQyxrQ0FBNkIsR0FBUSxFQUFFLENBQUM7UUFDeEMsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFDckIsMEJBQXFCLEdBQVEsRUFBRSxDQUFDO1FBRWhDLGtCQUFhLEdBQUcsaUJBQWlCLENBQUM7UUFF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LFFBQVE7OzttQkF2RlYsS0FBSztxQkFDTCxLQUFLOzhCQUNMLEtBQUs7aUNBQ0wsS0FBSztrQ0FDTCxLQUFLO29DQUNMLE1BQU07NEJBQ04sTUFBTTs2QkFDTixNQUFNOzRCQUNOLE1BQU07Z0NBQ04sTUFBTTswQkFDTixNQUFNOzBDQUNOLE1BQU07eUJBQ04sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRocm93U3RtdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcclxuaW1wb3J0IHsgVEhJU19FWFBSIH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL291dHB1dC9vdXRwdXRfYXN0JztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnMgfSBmcm9tICcuLi9jb25maWd1cmF0aW9ucyc7XHJcbmltcG9ydCB7IENhdGVnb3J5TGlzdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2F0ZWdvcnlMaXN0JztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uQWxlcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpcm1hdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGRSaXNrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2FkZC1yaXNrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFVpS2l0U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3VpLWtpdC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXJpc2snLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1yaXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1yaXNrLmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXSxcclxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1Jpc2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0OiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyczogYW55ID0gW107XHJcbiAgbWl0aWdhdGlvbkRldGFpbHM6IGFueSA9IFtdO1xyXG4gIG93bmVyc0xpc3Q6IGFueSA9IFtdO1xyXG4gIG5vblJlbW92YWJsZVVzZXJzTGlzdDogYW55ID0gW107XHJcbiAgZWRpdERldGFpbHMhOiBhbnk7XHJcbiAgc21pbGV5TWVzc2FnZSA9IGBZb3UncmUgQWxsIFNldCFgO1xyXG4gIHJpc2tEYXRhICE6IGFueTtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAgeyBidXR0b25UZXh0OiAnQWRkIE1vcmUgUmlza3MnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgIHsgYnV0dG9uVGV4dDogJ1ZpZXcgUmlzaycsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXdSaXNrcycgfSxcclxuICBdO1xyXG4gIHNpZGVTZWxlY3RvckVsZW1lbnRzOiBhbnkgPSBbJ3JjJywgJ293bmVyJywgJ292ZXJzZWVyJywgJ2NhdGVnb3J5J107XHJcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1vZGUgPSAnRURJVCc7XHJcbiAgQElucHV0KCkgcmlza0lkID0gJyc7XHJcbiAgQElucHV0KCkgZGVmYXVsdFJpc2tUeXBlID0gJ05PUk1BTCdcclxuICBASW5wdXQoKSBtb3ZlVG9SZWdpc3Rlck1vZGUgPSAnJ1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU9wZW5Qb3J0YWwgPSAnJztcclxuICBAT3V0cHV0KCkgc2hvd0NvbmZpcm1hdGlvbkFsZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJlZnJlc2hGb3JtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgb3BlbmVkRnJvbSA9ICcnXHJcbiAgc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICBjYXRlZ29yeUxpc3Q6IENhdGVnb3J5TGlzdCA9IHtcclxuICAgIHN0cmF0ZWdpYzoge1xyXG4gICAgICBuYW1lOiAnU1RSQVRFR0lDJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgICBvcGVyYXRpb25hbDoge1xyXG4gICAgICBuYW1lOiAnT1BFUkFUSU9OQUwnLFxyXG4gICAgICBkYXRhOiBbXVxyXG4gICAgfSxcclxuICAgIGNvbXBsaWFuY2U6IHtcclxuICAgICAgbmFtZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICBkYXRhOiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBuYW1lOiAnT1RIRVJTJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgfTtcclxuICBvdmVyc2VlcnNMaXN0OiBhbnkgPSBbXTtcclxuICBhZG1pbnNMaXN0OiBhbnkgPSBbXTtcclxuICBvdmVyc2VlcnNJZExpc3Q6IGFueSA9IFtdO1xyXG4gIHRpbWV6b25lITogc3RyaW5nO1xyXG4gIGRhdGUhOiBEYXRlO1xyXG4gIHJpc2tOYW1lRm9jdXMgPSBmYWxzZTtcclxuICBhc3Nlc3NtZW50Rm9jdXMgPSBmYWxzZTtcclxuICByaXNrVHlwZUNoYW5nZUFsbG93ZWQgPSBmYWxzZTtcclxuXHJcblxyXG4gIHJpc2tGb3JtOiBhbnkgPSB7XHJcbiAgICByaXNrVHlwZTogJ05PUk1BTCcsXHJcbiAgICB0aXRsZTogJycsXHJcbiAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0OiBbXSxcclxuICAgIG93bmVyc0xpc3Q6IFtdLFxyXG4gICAgY2F0ZWdvcnk6IHtcclxuICAgICAgdHlwZTogJ3N0cmF0ZWdpYycsXHJcbiAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gICAgfSxcclxuICAgIGNhdGVnb3J5Q3VzdG9tVGFnczogW10sXHJcbiAgICBvdmVyc2VlcnNMaXN0OiBbXSxcclxuICAgIG1pdGlnYXRpb246IDAsXHJcbiAgICBhc3Nlc3NtZW50X2RlYWRsaW5lX2RheXM6IDAsXHJcbiAgICBoZWFkX2lkczogW10sXHJcbiAgICBhZGRPdmVyc2VlcjogZmFsc2UsXHJcbiAgICBhZGRNaXRpZ2F0aW9uOiBmYWxzZSxcclxuICAgIGFkZE1pdGlnYXRpb25QbGFuOiBmYWxzZSxcclxuICAgIG1pdGlnYXRpb25EZXNjcmlwdGlvblBsYW46ICcnLFxyXG4gIH07XHJcbiAgYXBpVXJsID0gJyc7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIG9yZ2FuaXphdGlvbklkID0gMDtcclxuXHJcblxyXG4gIHVzZXJzTGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGFkbWluc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBjYXRlZ29yeUxpc3RMb2FkZWQgPSBmYWxzZTtcclxuICByY0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgc3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG5cclxuICBzZXR0aW5nc0luZm8gITogYW55O1xyXG5cclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICAvL1xyXG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgY3VycmVudFRpbWVTdGFtcCA9IE1hdGgucm91bmQoRGF0ZS5ub3coKS8xMDAwKTtcclxuICBcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmlza1NlcnZpY2U6IEFkZFJpc2tTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVpS2l0U2VydmljZTogVWlLaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnPzogQ29uZmlndXJhdGlvbnNcclxuXHJcbiAgKSB7XHJcbiAgICAvLyBpZiAoY29uZmlnKSB7XHJcbiAgICAvLyAgIHRoaXMuYXBpVXJsID0gY29uZmlnLmFwaVVybDtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudGltZXpvbmUgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJUaW1lWm9uZSgpO1xyXG5cclxuICB9XHJcbiAgZGVzY3JpcHRpb246IEVkaXRvckNvbmZpZyA9IHtcclxuICAgIG1vZGU6ICdwcmltZScsXHJcbiAgICBjb2xvclBhbGV0dGU6IHRydWUsXHJcbiAgICBsaW5rOiB0cnVlLFxyXG4gICAgcGxhY2Vob2xkZXI6ICdEZXNjcmliZSB0aGUgcmlzaycsXHJcbiAgfTtcclxuXHJcbiAgbWl0aWdhdGlvbkRlc2NyaXB0aW9uUGxhbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgbW9kZTogJ3ByaW1lJyxcclxuICAgIGNvbG9yUGFsZXR0ZTogdHJ1ZSxcclxuICAgIGxpbms6IHRydWUsXHJcbiAgICBwbGFjZWhvbGRlcjogJ0Rlc2NyaWJlIHRoZSByZWNvbW1lbmRlZCBtaXRpZ2F0aW9uIFBsYW5zJ1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSlcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2V0QWRtaW5zTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRSQ0xpc3QoKTtcclxuICAgIHRoaXMuZ2V0T3duZXJzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRDYXRlZ29yeUxpc3QoKTtcclxuICAgIHRoaXMuZ2V0U2V0dGluZ3NJbmZvKCk7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykge1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKTtcclxuICAgIGNvbnNvbGUubG9nKFwibWVtYmVyIGlkIG9mIGxvZ2dlZCBpbiB1c2VyXCIsIHRoaXMubWVtYmVySWQpXHJcbiAgICBpZiAodGhpcy5zZWNvbmRhcnlPcGVuUG9ydGFsICE9PSAnT1RIRVInICYmIHRoaXMubW9kZSAhPT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LnB1c2godGhpcy5tZW1iZXJJZCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgIGlmICh0aGlzLm9wZW5lZEZyb20gPT09ICdSRVBPUlRFRF9SSVNLJykge1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID0gJ1JFUE9SVEVEJztcclxuICAgICAgdGhpcy5yaXNrVHlwZUNoYW5nZUFsbG93ZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnTU9WRV9UT19SRUdJU1RFUicpIHtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5yaXNrVHlwZSA9ICdOT1JNQUwnO1xyXG4gICAgICB0aGlzLnJpc2tUeXBlQ2hhbmdlQWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRSaXNrVHlwZUJhc2VkT25TdWJzY3JpcHRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBzZXRSaXNrVHlwZUJhc2VkT25TdWJzY3JpcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnUkVQT1JURURfUklTSycpIHtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5yaXNrVHlwZSA9ICdSRVBPUlRFRCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXM/LnBlcm1pc3Npb24pIHtcclxuICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBKU09OLnBhcnNlKHJlcz8ucGVybWlzc2lvbilcclxuICAgICAgICAgIGlmICh0aGlzLmF1dGhTZXJ2aWNlPy5pc0FkbWluKCkgfHwgdGhpcy5hdXRoU2VydmljZT8uaXNLZXlBZG1pbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlza1R5cGVDaGFuZ2VBbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hdXRoU2VydmljZS5pc01hbmFnZXIoKSkge1xyXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbj8uTVJJU0sgPT09IDEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJpc2tUeXBlQ2hhbmdlQWxsb3dlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yaXNrVHlwZUNoYW5nZUFsbG93ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID0gJ1JFUE9SVEVEJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF1dGhTZXJ2aWNlLmlzVXNlcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmlza1R5cGVDaGFuZ2VBbGxvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPSAnUkVQT1JURUQnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yaXNrVHlwZUNoYW5nZUFsbG93ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPSAnUkVQT1JURUQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXM/LnJvbGVBY3Rpb25zKSB7XHJcbiAgICAgICAgICBjb25zdCBtb2R1bGVJbmRleCA9IHJlcy5yb2xlQWN0aW9ucy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5tb2R1bGVOYW1lID09IFwicmlza1wiKTtcclxuICAgICAgICAgIGNvbnN0IHJpc2tQZXJtaXNzaW9ucyA9IHJlcy5yb2xlQWN0aW9uc1ttb2R1bGVJbmRleF0uc3ViTW9kdWxlWzFdLnBlcm1pc3Npb25zO1xyXG4gICAgICAgICAgcmlza1Blcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbi5uYW1lID09ICdtYW5hZ2Ugcmlza3MnICYmIHBlcm1pc3Npb24uZW5hYmxlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yaXNrVHlwZUNoYW5nZUFsbG93ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPSAnTk9STUFMJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgICAgIHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPSAnTk9STUFMJztcclxuICAgICAgICAgIHRoaXMucmlza1R5cGVDaGFuZ2VBbGxvd2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VSaXNrKHR5cGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5yaXNrRm9ybSA9IHsgLi4udGhpcy5yaXNrRm9ybSwgLi4ueyByaXNrVHlwZTogdHlwZSB9IH1cclxuICAgIHRoaXMuc2V0UG9wdXBCdXR0b25zKCk7XHJcbiAgICBpZiAodHlwZSA9PT0gJ1JFUE9SVEVEJykge1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50bHlMb2dnZWRJblVzZXIoKXtcclxuICAgIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnKXtcclxuICAgICAgY29uc3Qgb3duZXJzTGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLm93bmVyc0xpc3QsIHRoaXMuZWRpdERldGFpbHM/Lm93bmVyLCAnbWVtYmVyX2lkJyk/Lm1hcCgoZWxlOmFueSkgPT4gZWxlPy5tZW1iZXJfaWQpO1xyXG4gICAgICBpZihvd25lcnNMaXN0LmluY2x1ZGVzKHRoaXMubWVtYmVySWQpKXtcclxuICAgICAgICByZXR1cm4gW3RoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKV07XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBbdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBvcHVwQnV0dG9ucygpIHtcclxuICAgIGlmICh0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID09PSAnUkVQT1JURUQnKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgICAgICB7IGJ1dHRvblRleHQ6ICdBZGQgTW9yZSBSaXNrcycsIGNsYXNzOiAnd2hpdGUtYnRuJywgaWQ6ICdhZGRNb3JlJyB9LFxyXG4gICAgICAgIHsgYnV0dG9uVGV4dDogJ1ZpZXcgUmVwb3J0ZWQgUmlza3MnLCBjbGFzczogJ2JsdWUtYnRuJywgaWQ6ICdtYW5hZ2VSZXBvcnRlZFJpc2snIH0sXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICAgICAgeyBidXR0b25UZXh0OiAnQWRkIE1vcmUgUmlza3MnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgICAgICB7IGJ1dHRvblRleHQ6ICdWaWV3IFJpc2snLCBjbGFzczogJ2JsdWUtYnRuJywgaWQ6ICd2aWV3Umlza3MnIH0sXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFJpc2tEZXRhaWxzKHJpc2tJZDogYW55KSB7XHJcblxyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRSaXNrRGV0YWlsKHJpc2tJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmVkaXREZXRhaWxzID0gY2xvbmVEZWVwKHJlcyk7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0udGl0bGUgPSByZXMudGl0bGU7XHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZEZyb20gPT09ICdNT1ZFX1RPX1JFR0lTVEVSJykge1xyXG4gICAgICAgIHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPSAnTk9STUFMJztcclxuICAgICAgICB0aGlzLnJpc2tUeXBlQ2hhbmdlQWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPSByZXM/LnJpc2tfdHlwZSA/PyAnUkVQT1JURUQnXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmlza0Zvcm0uZGVzY3JpcHRpb24gPSByZXMuZGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMucmlza0Zvcm0ucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsIHJlcy5yY19pZCwgJ2l0ZW1faWQnKTtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5vd25lcnNMaXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMub3duZXJzTGlzdCwgcmVzLm93bmVyLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0ubWl0aWdhdGlvbkRlc2NyaXB0aW9uUGxhbiA9IHJlcy5taXRpZ2F0aW9uRGVzY3JpcHRpb25QbGFuO1xyXG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5zZXRDYXRlZ29yeVR5cGUocmVzLmNhdGVnb3J5X3R5cGVbMF0pO1xyXG4gICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5jYXRlZ29yeUxpc3RbdHlwZV0/LmRhdGEuZmluZEluZGV4KChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQuY2F0ZWdvcnlfaWQgPT0gcmVzLmNhdGVnb3J5WzBdKTtcclxuICAgICAgaWYgKGNhdGVnb3J5SW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmNhdGVnb3J5ID0ge1xyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnlMaXN0W3R5cGVdPy5kYXRhW2NhdGVnb3J5SW5kZXhdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yaXNrRm9ybS5jYXRlZ29yeUN1c3RvbVRhZ3MgPSByZXMuY2F0ZWdvcnlfY3VzdG9tX3RhZztcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yaXNrRm9ybS5vdmVyc2VlcnNMaXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMub3duZXJzTGlzdCwgcmVzLm1hbmFnZV9vdmVyc2lnaHQsICdtZW1iZXJfaWQnKTtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5taXRpZ2F0aW9uID0gcmVzLm1pdGlnYXRpb247XHJcbiAgICAgIHRoaXMucmlza0Zvcm0uYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzID0gcmVzLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cztcclxuICAgICAgdGhpcy5yaXNrRm9ybS5hZGRPdmVyc2VlciA9IChyZXMubWFuYWdlX292ZXJzaWdodC5sZW5ndGggPiAwKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5hZGRNaXRpZ2F0aW9uID0gKHJlcy5taXRpZ2F0aW9uKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAvLyB0aGlzLm1lbWJlcklkID0gcmVzLm1lbWJlcl9pZDtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHJlcy5vcmdhbmlzYXRpb25faWQ7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0uaGVhZF9pZHMgPSByZXM/LmhlYWRfaWRzID8gcmVzPy5oZWFkX2lkcyA6IFtdO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLm1pdGlnYXRpb25EZXNjcmlwdGlvblBsYW4gPSByZXM/Lm1pdGlnYXRpb25fcGxhbl9yZWNvbW1lbmRhdGlvbiA/PyAnJztcclxuICAgICAgdGhpcy5yaXNrRm9ybS5hZGRNaXRpZ2F0aW9uUGxhbiA9IHJlcz8ubWl0aWdhdGlvbl9wbGFuX3JlY29tbWVuZGF0aW9uLnRyaW0oKT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICBpZiAocmVzLmFzc2Vzc21lbnRfZGF0ZV90aW1lc3RhbXApIHtcclxuICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZShyZXMuYXNzZXNzbWVudF9kYXRlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzLklmQXNzZXNzbWVudERvbmUgPiAwKSB7XHJcbiAgICAgICAgcmVzLmFsbF9vd25lcl9hcnIuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5hc3Nlc3NtZW50X2RvbmUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LnB1c2goZWxlbWVudC5tZW1iZXJfaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlY29uZGFyeU9wZW5Qb3J0YWwgPT09ICdPVEhFUicgJiYgdGhpcy5tb2RlID09PSAnRURJVCcpIHsgICAgICAgIFxyXG4gICAgICAgIHRoaXMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0ID0gQXJyYXkuZnJvbShuZXcgU2V0PGFueVtdPihbLi4udGhpcy5ub25SZW1vdmFibGVVc2Vyc0xpc3QsIC4uLnJlcz8ub3duZXJdKSk7ICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlY29uZGFyeU9wZW5Qb3J0YWwgIT09ICdPVEhFUicgJiYgdGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLm5vblJlbW92YWJsZVVzZXJzTGlzdCA9IEFycmF5LmZyb20obmV3IFNldDxhbnlbXT4oWy4uLnRoaXMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LCAuLi50aGlzLmdldEN1cnJlbnRseUxvZ2dlZEluVXNlcigpXSkpO1xyXG5cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzPy5yaXNrX3R5cGUgPT09ICdOT1JNQUwnKSB7XHJcbiAgICAgICAgdGhpcy5ub25SZW1vdmFibGVVc2Vyc0xpc3QgPSBBcnJheS5mcm9tKG5ldyBTZXQ8YW55W10+KFsuLi50aGlzLm5vblJlbW92YWJsZVVzZXJzTGlzdCwgLi4udGhpcy5nZXRDdXJyZW50bHlMb2dnZWRJblVzZXIoKV0pKTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCkge1xyXG4gICAgY29uc3QgYWN0aXZhdGVkT3B0aW9ucyA9IFtdO1xyXG4gICAgaWYgKHRoaXMucmlza0Zvcm0uYWRkTWl0aWdhdGlvbikgeyBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ01JVElHQVRJT04nKTsgfVxyXG4gICAgaWYgKHRoaXMucmlza0Zvcm0uYWRkT3ZlcnNlZXIpIHsgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdPVkVSU0VFUicpOyB9XHJcbiAgICBpZiAodGhpcy5yaXNrRm9ybS5hZGRNaXRpZ2F0aW9uUGxhbikgeyBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ01JVElHQVRJT05fUExBTicpIH1cclxuICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChhY3RpdmF0ZWRPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHNldENhdGVnb3J5VHlwZSh0eXBlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlID09PSAxKSB7XHJcbiAgICAgIHJldHVybiAnc3RyYXRlZ2ljJztcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gMikge1xyXG4gICAgICByZXR1cm4gJ29wZXJhdGlvbmFsJztcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gMykge1xyXG4gICAgICByZXR1cm4gJ2NvbXBsaWFuY2UnO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnb3RoZXJzJztcclxuICAgIH0gZWxzZSB7IHJldHVybiAnc3RyYXRlZ2ljJzsgfVxyXG4gIH1cclxuICBnZXRSQ0xpc3QoKSB7XHJcbiAgICBjb25zdCByY0FycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QocmNBcnJheSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRDYXRlZ29yeUxpc3QoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnN0cmF0ZWdpYy5kYXRhID0gcmVzLnN0cmF0ZWdpY19hcnI7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0Lm9wZXJhdGlvbmFsLmRhdGEgPSByZXMub3BlcmF0aW9uYWxfYXJyO1xyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdC5jb21wbGlhbmNlLmRhdGEgPSByZXMuY29tcGxpYW5jZV9hcnI7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0Lm90aGVycy5kYXRhID0gcmVzLm90aGVyc19hcnI7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBnZXRPd25lcnNMaXN0KCkge1xyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2VycygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5vd25lcnNMaXN0ID0gcmVzO1xyXG5cclxuICAgICAgdGhpcy51c2Vyc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gcmVzLmZpbmRJbmRleCgodXNlcjogYW55KSA9PiB1c2VyLm1lbWJlcl9pZCA9PT0gdGhpcy5tZW1iZXJJZCk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWNvbmRhcnlPcGVuUG9ydGFsICE9PSAnT1RIRVInICYmIHRoaXMubW9kZSAhPT0gJ0VESVQnKSB7XHJcbiAgICAgICAgICB0aGlzLnJpc2tGb3JtLm93bmVyc0xpc3QucHVzaChyZXNbaW5kZXhdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMudXNlcnNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRBZG1pbnNMaXN0KCkge1xyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRBZG1pbktleUFkbWluTGlzdCgpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLmFkbWluc0xpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMuYWRtaW5zTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmFkbWluc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2V0dGluZ3NJbmZvKCkge1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZ2V0Umlza1NldHRpbmdEZXRhaWxzKCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3NJbmZvID0gcmVzO1xyXG4gICAgICB0aGlzLmhpZGVPcHRpb25hbEZpZWxkcyhyZXMpO1xyXG4gICAgICB0aGlzLm1pdGlnYXRpb25EZXRhaWxzID0gcmVzPy5yaXNrX21pdGlnYXRpb25fcHJpb3JpdHk/Lm1pdGlnYXRpb25fZGF0YTtcclxuICAgICAgbGV0IGRlZmF1bHRNaXRpZ2F0aW9uID0gdGhpcy5taXRpZ2F0aW9uRGV0YWlscz8uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlPy5taXRpZ2F0aW9uX25hbWUgPT09IFwiTE9XXCIpO1xyXG4gICAgICBpZiAoZGVmYXVsdE1pdGlnYXRpb24/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMucmlza0Zvcm0ubWl0aWdhdGlvbiA9IGRlZmF1bHRNaXRpZ2F0aW9uWzBdPy5taXRpZ2F0aW9uX2lkO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgaGlkZU9wdGlvbmFsRmllbGRzKHJlczogYW55KSB7XHJcbiAgICBpZiAocmVzPy5yaXNrX2F1dG9tYXRpb25fZW5hYmxlID09PSAxKSB7XHJcbiAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQoWydNSVRJR0FUSU9OJ10pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLnJjTGlzdExvYWRlZCAmJiB0aGlzLnVzZXJzTGlzdExvYWRlZCAmJiB0aGlzLmFkbWluc0xpc3RMb2FkZWQgJiYgdGhpcy5jYXRlZ29yeUxpc3RMb2FkZWQpIHtcclxuXHJcbiAgICAgIHRoaXMuc2V0T3ZlcnNlZXJzTGlzdCgpO1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLmdldFJpc2tEZXRhaWxzKHRoaXMucmlza0lkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRPdmVyc2VlcnNMaXN0KCkge1xyXG5cclxuICAgIGxldCBpZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJjT3duZXJJZHM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgdXNlcnMgPSBjbG9uZURlZXAodGhpcy5yaXNrRm9ybS5vd25lcnNMaXN0KTtcclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5Q2VudGVycyA9IGNsb25lRGVlcCh0aGlzLnJpc2tGb3JtLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QpO1xyXG4gICAgY29uc3QgYWRtaW5zID0gY2xvbmVEZWVwKHRoaXMuYWRtaW5zTGlzdCk7XHJcbiAgICBjb25zdCBhbGxVc2VycyA9IGNsb25lRGVlcCh0aGlzLm93bmVyc0xpc3QpO1xyXG4gICAgLy8gY29uc29sZS5sb2coYWxsVXNlcnMsIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdClcclxuICAgIHVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBpZHMucHVzaCh1c2VyLm1lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIGFkbWlucy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgaWRzLnB1c2godXNlci5tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICByZXNwb25zaWJpbGl0eUNlbnRlcnMuZm9yRWFjaCgocmM6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBhcnkgPSBbLi4ucmMub3duZXIsIC4uLnJjLnBhcmVudF9vd25lcnNdO1xyXG4gICAgICBpZHMgPSBbLi4uaWRzLCAuLi5hcnldO1xyXG4gICAgICByY093bmVySWRzID0gWy4uLnJjT3duZXJJZHMsIC4uLmFyeV07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZHMgPSBbLi4ubmV3IFNldChpZHMpXTtcclxuICAgIHJjT3duZXJJZHMgPSBbLi4ubmV3IFNldChyY093bmVySWRzKV07XHJcbiAgICB0aGlzLnJpc2tGb3JtLmhlYWRfaWRzID0gcmNPd25lcklkcztcclxuICAgIHRoaXMub3ZlcnNlZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAhaWRzLmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKSk7XHJcbiAgICBjb25zb2xlLmxvZyhcIm92ZXJzZWVyIGxpc3RcIix0aGlzLm92ZXJzZWVyc0xpc3QpXHJcbiAgICB0aGlzLnJpc2tGb3JtLm92ZXJzZWVyc0xpc3QgPSB0aGlzLnJpc2tGb3JtLm92ZXJzZWVyc0xpc3QuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICFpZHMuaW5jbHVkZXModXNlci5tZW1iZXJfaWQpKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlU2VsZWN0b3IodHlwZTogYW55LCBldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9IGV2ZW50ID8gdHlwZSA6ICcnO1xyXG4gICAgaWYgKFsncmMnLCAnb3duZXInLCAnb3ZlcnNlZXInLCAnY2F0ZWdvcnknXS5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYWN0aXZlRGVzZWxlY3RvcigpIHtcclxuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdyYyc6XHJcbiAgICAgICAgY29uc3QgcmNJbmRleCA9IHRoaXMucmlza0Zvcm0ucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdC5maW5kSW5kZXgoKHJjOiBhbnkpID0+IHJjLnJjX2lkID09IGV2ZW50LnJjX2lkKTtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3Quc3BsaWNlKHJjSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvd25lcic6XHJcbiAgICAgICAgY29uc3Qgb3duZXJJbmRleCA9IHRoaXMucmlza0Zvcm0ub3duZXJzTGlzdC5maW5kSW5kZXgoKG93bmVyOiBhbnkpID0+IG93bmVyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMucmlza0Zvcm0ub3duZXJzTGlzdC5zcGxpY2Uob3duZXJJbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5zZXRPdmVyc2VlcnNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ292ZXJzZWVyJzpcclxuICAgICAgICBjb25zdCBvdmVyc2VlckluZGV4ID0gdGhpcy5yaXNrRm9ybS5vdmVyc2VlcnNMaXN0LmZpbmRJbmRleCgob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIubWVtYmVyX2lkID09IGV2ZW50Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgdGhpcy5yaXNrRm9ybS5vdmVyc2VlcnNMaXN0LnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxyXG4gICAgICAgIHRoaXMucmlza0Zvcm0uY2F0ZWdvcnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmNhdGVnb3J5Q3VzdG9tVGFncyA9IFtdO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNhdmVTZWxlY3RlZFJDTGlzdChyY0lkczogYW55KSB7XHJcbiAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkUkMgPSB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCByY0lkcywgJ2l0ZW1faWQnKTtcclxuICAgIHRoaXMucmlza0Zvcm0ucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IHNlbGVjdGVkUkM7XHJcbiAgICB0aGlzLnNldE92ZXJzZWVyc0xpc3QoKTtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWxlY3RlZENhdGVnb3J5KGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xyXG4gICAgdGhpcy5yaXNrRm9ybS5jYXRlZ29yeSA9IGNhdGVnb3J5O1xyXG4gICAgY29uc3QgY3VzdG9tVGFnczogYW55ID0gW107XHJcbiAgICBjYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmN1c3RvbV90YWcuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhZyA9IHtcclxuICAgICAgICBjdXN0b21fdGFnX25hbWU6IGVsZW1lbnQudGFnTmFtZSxcclxuICAgICAgICBjdXN0b21fdGFnX3ZhbHVlOiAnJ1xyXG4gICAgICB9O1xyXG4gICAgICBjdXN0b21UYWdzLnB1c2godGFnKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yaXNrRm9ybS5jYXRlZ29yeUN1c3RvbVRhZ3MgPSBjdXN0b21UYWdzO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlbGVjdGVkT3duZXJzTGlzdChpZHM6IGFueSkge1xyXG4gICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE93bmVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLm93bmVyc0xpc3QsIGlkcywgJ21lbWJlcl9pZCcpO1xyXG4gICAgdGhpcy5yaXNrRm9ybS5vd25lcnNMaXN0ID0gc2VsZWN0ZWRPd25lcnM7XHJcbiAgICB0aGlzLnNldE92ZXJzZWVyc0xpc3QoKTtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWxlY3RlZE92ZXJzZWVyc0xpc3QoaWRzOiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRPdmVyc2VlcnMgPSB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBpZHMsICdtZW1iZXJfaWQnKTtcclxuICAgIHRoaXMucmlza0Zvcm0ub3ZlcnNlZXJzTGlzdCA9IHNlbGVjdGVkT3ZlcnNlZXJzO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUmlza0Fzc2Vzc21lbnQobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSAnc3VidHJhY3QnOlxyXG4gICAgICAgIGlmICh0aGlzLnJpc2tGb3JtLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyA+IDEpIHtcclxuICAgICAgICAgIHRoaXMucmlza0Zvcm0uYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzIC09IDE7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGUodGhpcy5yaXNrRm9ybS5hc3Nlc3NtZW50X2RlYWRsaW5lX2RheXMpO1xyXG4gICAgICAgICAgLy8gdGhpcy5yaXNrQXNzZXNzbWVudERlYWRsaW5lRGF0ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYWRkJzpcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyArPSAxO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0ZSh0aGlzLnJpc2tGb3JtLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyk7XHJcbiAgICAgICAgLy8gdGhpcy5yaXNrQXNzZXNzbWVudERlYWRsaW5lRGF0ZSA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERhdGUoZGF5czogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoZGF5cyA+PSAwKSB7XHJcbiAgICAgIGNvbnN0IG1pbGlzZWNvbmRzID0gZGF5cyAqIDg2NDAwICogMTAwMDtcclxuICAgICAgY29uc3QgZDogbnVtYmVyID0gbmV3IERhdGUoXHJcbiAgICAgICAgbmV3IERhdGUoRGF0ZS5ub3coKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xyXG4gICAgICAgICAgdGltZVpvbmU6IHRoaXMudGltZXpvbmUsXHJcbiAgICAgICAgfSlcclxuICAgICAgKS5nZXRUaW1lKCk7XHJcbiAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKGQgKyBtaWxpc2Vjb25kcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VSaXNrQXNzZXNzbWVudERlYWRsaW5lKGV2ZW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghaXNOYU4oZXZlbnQpKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0ZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YTogYW55ID0gW107XHJcbiAgICBsaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaWRzLmluY2x1ZGVzKGVsZW1lbnRba2V5XSkpIHtcclxuICAgICAgICBkYXRhLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICByZXR1cm5JZHMobGlzdDogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbGlzdC5tYXAoZWxlID0+IHsgaWYgKGVsZVtrZXldKSB7IHJldHVybiBlbGVba2V5XTsgfSB9KTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFJpc2soKSB7XHJcbiAgICB0aGlzLnNldFBvcHVwQnV0dG9ucygpO1xyXG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlUmlzaygpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnICYmIHRoaXMuZWRpdERldGFpbHMuSWZBc3Nlc3NtZW50RG9uZSA+IDApIHtcclxuICAgICAgY29uc3QgcHJldlJDQXJyID0gdGhpcy5lZGl0RGV0YWlscy5yY19pZDtcclxuICAgICAgY29uc3QgY3VyclJDQXJyID0gdGhpcy5yZXR1cm5JZHModGhpcy5yaXNrRm9ybS5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCAncmNfaWQnKTtcclxuICAgICAgaWYgKHByZXZSQ0Fyci5sZW5ndGggPT09IGN1cnJSQ0Fyci5sZW5ndGggJiYgcHJldlJDQXJyLnNvcnQoKS5ldmVyeSgodmFsdWU6IGFueSwgaW5kZXg6IGFueSkgPT4gdmFsdWUgPT09IGN1cnJSQ0Fyci5zb3J0KClbaW5kZXhdKSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlUmlzayh0aGlzLnJpc2tGb3JtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb25maXJtYXRpb25EZXRhaWxzOiBDb25maXJtYXRpb25BbGVydCA9IHtcclxuICAgICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgUmVzcG9uc2liaWxpdHkgQ2VudGVyKHMpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJpc2sgaGF2ZSBiZWVuIG1vZGlmaWVkLlxyXG4gICAgICAgICAgICAgICBUaGlzIGhhcyBjYXVzZWQgdGhlIHJpc2sgdG8gbW92ZSB0byB0aGUgXCJJZGVudGlmaWVkICYgQXNzZXNzZWRcIiBzdGF0ZSBhbmQgYSBuZXcgcmlzayBsaWZlY3ljbGUgZm9yIHRoaXMgcmlzayBpcyB0byBiZWdpbi5gLFxyXG4gICAgICAgICAgYWN0aW9uOiAnRURJVF9SSVNLJyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbkFsZXJ0LmVtaXQoY29uZmlybWF0aW9uRGV0YWlscyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlUmlzayh0aGlzLnJpc2tGb3JtKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBhZGRNb3JlSW5mbyhldmVudDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50Lm5hbWUpIHtcclxuICAgICAgY2FzZSAnUmlzayBPdmVyc2Vlcic6XHJcbiAgICAgICAgdGhpcy5yaXNrRm9ybS5hZGRPdmVyc2VlciA9IGV2ZW50Py5jaGVja2VkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdSaXNrIE1pdGlnYXRpb24gUHJpb3JpdHknOlxyXG4gICAgICAgIHRoaXMucmlza0Zvcm0uYWRkTWl0aWdhdGlvbiA9IGV2ZW50Py5jaGVja2VkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdSZWNvbW1lbmRlZCBNaXRpZ2F0aW9uIFBsYW5zJzpcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmFkZE1pdGlnYXRpb25QbGFuID0gZXZlbnQ/LmNoZWNrZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlUmlzaygpIHtcclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5yaXNrRm9ybS50aXRsZTtcclxuICAgIGNvbnN0IHJlID0gLyZuYnNwO3w8YnI+L2c7XHJcbiAgICB0aGlzLnJpc2tGb3JtLnRpdGxlID0gZXZlbnQucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcclxuICAgIGlmICghdGhpcy5yaXNrRm9ybS50aXRsZSB8fCB0aGlzLnJpc2tGb3JtLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QubGVuZ3RoID09IDBcclxuICAgICAgfHwgdGhpcy5yaXNrRm9ybS5vd25lcnNMaXN0Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgICgoIXRoaXMuc2V0dGluZ3NJbmZvLmFzc2Vzc21lbnRfZGVhZGxpbmVfZW5hYmxlKSAmJiAodGhpcy5yaXNrRm9ybT8uYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzIDwgMSkgJiYgdGhpcy5yaXNrRm9ybT8ucmlza1R5cGUgIT09ICdSRVBPUlRFRCcpIHx8XHJcbiAgICAgICh0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID09PSAnUkVQT1JURUQnICYmICF0aGlzLnJpc2tGb3JtPy5kZXNjcmlwdGlvbj8udHJpbSgpPy5sZW5ndGgpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlUmlzayhyaXNrRm9ybTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgdGl0bGU6IHJpc2tGb3JtLnRpdGxlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogcmlza0Zvcm0uZGVzY3JpcHRpb24sXHJcbiAgICAgIGNhdGVnb3J5X2N1c3RvbV90YWc6IHJpc2tGb3JtLmNhdGVnb3J5Q3VzdG9tVGFncyxcclxuICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9lbmFibGU6IHRoaXMuc2V0dGluZ3NJbmZvLmFzc2Vzc21lbnRfZGVhZGxpbmVfZW5hYmxlLFxyXG4gICAgICBvd25lcjogdGhpcy5yZXR1cm5JZHMocmlza0Zvcm0ub3duZXJzTGlzdCwgJ21lbWJlcl9pZCcpLFxyXG4gICAgICBjYXRlZ29yeTogKHJpc2tGb3JtLmNhdGVnb3J5Py5zZWxlY3RlZENhdGVnb3J5Py5jYXRlZ29yeV9pZCkgPyBbcmlza0Zvcm0uY2F0ZWdvcnkuc2VsZWN0ZWRDYXRlZ29yeS5jYXRlZ29yeV9pZF0gOiBbXSxcclxuICAgICAgbWFuYWdlX292ZXJzaWdodDogcmlza0Zvcm0uYWRkT3ZlcnNlZXIgPyB0aGlzLnJldHVybklkcyhyaXNrRm9ybS5vdmVyc2VlcnNMaXN0LCAnbWVtYmVyX2lkJykgOiBbXSxcclxuICAgICAgcmNfaWQ6IHRoaXMucmV0dXJuSWRzKHJpc2tGb3JtLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsICdpdGVtX2lkJyksXHJcbiAgICAgIGhlYWRfaWRzOiByaXNrRm9ybS5oZWFkX2lkcyxcclxuICAgICAgcmF0aW5nX2FycjogW10sXHJcbiAgICAgIG1lbWJlcl9pZDogdGhpcy5tZW1iZXJJZCxcclxuICAgICAgb3JnYW5pc2F0aW9uX2lkOiB0aGlzLm9yZ2FuaXphdGlvbklkLFxyXG4gICAgICByaXNrX3Byb2dyZXNzX2ZsYWc6ICh0aGlzLm1vZGUgPT09ICdFRElUJykgPyB0aGlzLmVkaXREZXRhaWxzLnJpc2tfcHJvZ3Jlc3NfZmxhZyA6IDEsXHJcbiAgICAgIElmQXNzZXNzbWVudERvbmU6ICh0aGlzLm1vZGUgPT0gJ0VESVQnKSA/IHRoaXMuZWRpdERldGFpbHMuSWZBc3Nlc3NtZW50RG9uZSA6IDAsXHJcbiAgICAgIHdvcmtzaG9wX2lkOiAodGhpcy5tb2RlID09ICdFRElUJykgPyB0aGlzLmVkaXREZXRhaWxzLndvcmtzaG9wX2lkIDogMCxcclxuICAgICAgY29tcGxldGVfYXNzZXNzbWVudDogMCxcclxuICAgICAgbWl0aWdhdGlvbjogKHJpc2tGb3JtLmFkZE1pdGlnYXRpb24pID8gcmlza0Zvcm0ubWl0aWdhdGlvbiA6IDAsXHJcbiAgICAgIHdlaWdodGFnZV9lbmFibGU6IHRoaXMuc2V0dGluZ3NJbmZvLndlaWdodGFnZV9lbmFibGUsXHJcbiAgICAgIHRyZWF0bWVudF90eXBlOiB0aGlzLnNldHRpbmdzSW5mby50cmVhdG1lbnRfY3JpdGVyaWEsXHJcbiAgICAgIHdlaWdodGFnZV9kZXRhaWxzOiB0aGlzLnNldHRpbmdzSW5mby53ZWlnaHRhZ2VfZGV0YWlscyxcclxuICAgICAgd2VpZ2h0YWdlX3NldF9ieTogdGhpcy5zZXR0aW5nc0luZm8ud2VpZ2h0YWdlX3NldF9ieSxcclxuICAgICAgd2VpZ2h0YWdlX3N0cjogW1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvLndlaWdodGFnZV9kZXRhaWxzLmltcGFjdC52YWx1ZSxcclxuICAgICAgICB0aGlzLnNldHRpbmdzSW5mby53ZWlnaHRhZ2VfZGV0YWlscy5saWtlbGlob29kLnZhbHVlLFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvLndlaWdodGFnZV9kZXRhaWxzLnZlbG9jaXR5LnZhbHVlLFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NJbmZvLndlaWdodGFnZV9kZXRhaWxzLnZ1bG5lcmFiaWxpdHkudmFsdWUsXHJcbiAgICAgIF0sXHJcbiAgICAgIGFzc2Vzc21lbnRfZGVhZGxpbmVfc2V0X2J5OiB0aGlzLnNldHRpbmdzSW5mby5hc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieSxcclxuICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzOiAodGhpcy5zZXR0aW5nc0luZm8uYXNzZXNzbWVudF9kZWFkbGluZV9lbmFibGUpID8gdGhpcy5zZXR0aW5nc0luZm8uYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzIDogcmlza0Zvcm0uYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzLFxyXG4gICAgICByaXNrX3R5cGU6IHRoaXMucmlza0Zvcm0/LnJpc2tUeXBlID8/ICdOT1JNQUwnLFxyXG4gICAgICBtaXRpZ2F0aW9uX3BsYW5fcmVjb21tZW5kYXRpb246IHRoaXMucmlza0Zvcm0/LmFkZE1pdGlnYXRpb25QbGFuID8gdGhpcy5yaXNrRm9ybT8ubWl0aWdhdGlvbkRlc2NyaXB0aW9uUGxhbiA/PyAnJyA6ICcnXHJcblxyXG5cclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnKSB7XHJcbiAgICAgIHRoaXMucmlza1NlcnZpY2UuYWRkUmlzayhwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgICB0aGlzLnJpc2tEYXRhID0gcmVzO1xyXG4gICAgICAgIHRoaXMucmlza0lkID0gcmVzLl9pZDtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gICB0aGlzLnJlc2V0Rm9ybSgpO1xyXG4gICAgICB9LFxyXG4gICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsICdhbGVydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnICYmIHRoaXMub3BlbmVkRnJvbSAhPT0gJ01PVkVfVE9fUkVHSVNURVInKSB7XHJcbiAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBUaGUgcmlzayBoYXMgYmVlbiBtb2RpZmllZC5gO1xyXG4gICAgICB0aGlzLnJpc2tTZXJ2aWNlLnVwZGF0ZVJpc2sodGhpcy5yaXNrSWQsIHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJpc2tEYXRhID0gcmVzO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCAnYWxlcnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3BlbmVkRnJvbSA9PT0gJ01PVkVfVE9fUkVHSVNURVInKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHsgZXZ0OiB7IGFjdGlvbjogJ01PVkVfVE9fUkVHSVNURVInLCBwYXlsb2FkIH0sIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0Rm9ybSgpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5yaXNrRm9ybSA9IHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgIHJpc2tUeXBlOiB0aGlzLnJpc2tGb3JtPy5yaXNrVHlwZSxcclxuICAgICAgYWRkTWl0aWdhdGlvblBsYW46IGZhbHNlLFxyXG4gICAgICBtaXRpZ2F0aW9uRGVzY3JpcHRpb25QbGFuOiAnJyxcclxuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdDogW10sXHJcbiAgICAgIG93bmVyc0xpc3Q6IFtdLFxyXG4gICAgICBjYXRlZ29yeToge1xyXG4gICAgICAgIHR5cGU6ICdzdHJhdGVnaWMnLFxyXG4gICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gICAgICB9LFxyXG4gICAgICBjYXRlZ29yeUN1c3RvbVRhZ3M6IFtdLFxyXG4gICAgICBvdmVyc2VlcnNMaXN0OiBbXSxcclxuICAgICAgbWl0aWdhdGlvbjogMCxcclxuICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzOiAwLFxyXG4gICAgICBoZWFkX2lkczogW10sXHJcbiAgICAgIGFkZE92ZXJzZWVyOiBmYWxzZSxcclxuICAgICAgYWRkTWl0aWdhdGlvbjogZmFsc2VcclxuICAgIH07XHJcbiAgICB0aGlzLm5vblJlbW92YWJsZVVzZXJzTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICB0aGlzLm5vblJlbW92YWJsZVVzZXJzTGlzdCA9IHRoaXMuZ2V0Q3VycmVudGx5TG9nZ2VkSW5Vc2VyKCk7XHJcbiAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh0cnVlKTtcclxuXHJcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgIHRoaXMuZ2V0T3duZXJzTGlzdCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXdSaXNrcyc6XHJcbiAgICAgICAgdGhpcy52aWV3Umlza3MoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWFuYWdlUmVwb3J0ZWRSaXNrJzpcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VG9SZXBvcnRlZCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yaXNrRGF0YSwgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHZpZXdSaXNrcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSk7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCArPSAnL21hbmFnZS1yaXNrLycgKyB0aGlzLnJpc2tJZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCArPSAnL3Jpc2svbWFuYWdlLXJpc2svJyArIHRoaXMucmlza0lkO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgICAvL3RoaXMucmVzZXRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICByZWRpcmVjdFRvUmVwb3J0ZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgKz0gJy9yZXBvcnRlZC1yaXNrLyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgKz0gJy9yaXNrL3JlcG9ydGVkLXJpc2svJztcclxuICAgIH1cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgLy90aGlzLnJlc2V0Rm9ybSgpO1xyXG4gIH1cclxuICBjaGVja0Rlc2NyaXB0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMucmlza0Zvcm0uZGVzY3JpcHRpb24gPT0gJzxicj4nKSB7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0uZGVzY3JpcHRpb24gPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrTWl0aWdhdGlvblBsYW4oKSB7XHJcbiAgICBpZiAodGhpcy5yaXNrRm9ybS5taXRpZ2F0aW9uRGVzY3JpcHRpb25QbGFuID09ICc8YnI+Jykge1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLm1pdGlnYXRpb25EZXNjcmlwdGlvblBsYW4gPSAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
1214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcmlzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1yaXNrL3dvcmtmbG93LXJpc2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUEyQixNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFTakMsTUFBTSxPQUFPLHFCQUFxQjtJQXFJaEMsWUFDVSxXQUEyQixFQUMzQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixRQUF5QixFQUN6QixnQkFBa0MsRUFDOUIsTUFBdUI7UUFMM0IsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUF4STVDLDhCQUF5QixHQUFRLEVBQUUsQ0FBQztRQUNwQyxrQ0FBNkIsR0FB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QkEzSFYsS0FBSzttQkFDTCxLQUFLO3FCQUNMLEtBQUs7OEJBQ0wsS0FBSztpQ0FDTCxLQUFLO2tDQUNMLEtBQUs7b0NBQ0wsTUFBTTs0QkFDTixNQUFNOzZCQUNOLE1BQU07NEJBQ04sTUFBTTtnQ0FDTixNQUFNOzBCQUNOLE1BQU07MENBQ04sTUFBTTt5QkFDTixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGhyb3dTdG10IH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xyXG5pbXBvcnQgeyBUSElTX0VYUFIgfSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAndmNvbXBseS1lZGl0b3InO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcclxuaW1wb3J0IHsgQ2F0ZWdvcnlMaXN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXRlZ29yeUxpc3QnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25BbGVydCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlybWF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgRnJlcXVlbmN5U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZnJlcXVlbmN5L2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZFJpc2tTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYWRkLXJpc2suc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVWlLaXRTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvdWkta2l0LnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXJpc2snLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1yaXNrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1yaXNrLmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXSxcclxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1Jpc2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0OiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyczogYW55ID0gW107XHJcbiAgbWl0aWdhdGlvbkRldGFpbHM6IGFueSA9IFtdO1xyXG4gIG93bmVyc0xpc3Q6IGFueSA9IFtdO1xyXG4gIG5vblJlbW92YWJsZVVzZXJzTGlzdDogYW55ID0gW107XHJcbiAgZWRpdERldGFpbHMhOiBhbnk7XHJcbiAgc21pbGV5TWVzc2FnZSA9IGBZb3UncmUgQWxsIFNldCFgO1xyXG4gIHJpc2tEYXRhICE6IGFueTtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAgeyBidXR0b25UZXh0OiAnQWRkIE1vcmUgUmlza3MnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgIHsgYnV0dG9uVGV4dDogJ1ZpZXcgUmlzaycsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXdSaXNrcycgfSxcclxuICBdO1xyXG4gIHNpZGVTZWxlY3RvckVsZW1lbnRzOiBhbnkgPSBbJ3JjJywgJ293bmVyJywgJ292ZXJzZWVyJywgJ2NhdGVnb3J5JywgJ2ZyZXF1ZW5jeSddO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBmZWF0dXJlITogYW55O1xyXG4gIEBJbnB1dCgpIG1vZGUgPSAnRURJVCc7XHJcbiAgQElucHV0KCkgcmlza0lkID0gJyc7XHJcbiAgQElucHV0KCkgZGVmYXVsdFJpc2tUeXBlID0gJ05PUk1BTCdcclxuICBASW5wdXQoKSBtb3ZlVG9SZWdpc3Rlck1vZGUgPSAnJ1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU9wZW5Qb3J0YWwgPSAnJztcclxuICBAT3V0cHV0KCkgc2hvd0NvbmZpcm1hdGlvbkFsZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJlZnJlc2hGb3JtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgb3BlbmVkRnJvbSA9ICcnXHJcbiAgc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICBjYXRlZ29yeUxpc3Q6IENhdGVnb3J5TGlzdCA9IHtcclxuICAgIHN0cmF0ZWdpYzoge1xyXG4gICAgICBuYW1lOiAnU1RSQVRFR0lDJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgICBvcGVyYXRpb25hbDoge1xyXG4gICAgICBuYW1lOiAnT1BFUkFUSU9OQUwnLFxyXG4gICAgICBkYXRhOiBbXVxyXG4gICAgfSxcclxuICAgIGNvbXBsaWFuY2U6IHtcclxuICAgICAgbmFtZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICBkYXRhOiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBuYW1lOiAnT1RIRVJTJyxcclxuICAgICAgZGF0YTogW11cclxuICAgIH0sXHJcbiAgfTtcclxuICBvdmVyc2VlcnNMaXN0OiBhbnkgPSBbXTtcclxuICBvdmVyc2VlcnNHcm91cExpc3QgOiBhbnkgPVtdXHJcbiAgYWRtaW5zTGlzdDogYW55ID0gW107XHJcbiAgb3ZlcnNlZXJzSWRMaXN0OiBhbnkgPSBbXTtcclxuICB0aW1lem9uZSE6IHN0cmluZztcclxuICBkYXRlITogRGF0ZTtcclxuICByaXNrTmFtZUZvY3VzID0gZmFsc2U7XHJcbiAgYXNzZXNzbWVudEZvY3VzID0gZmFsc2U7XHJcbiAgcmlza1R5cGVDaGFuZ2VBbGxvd2VkID0gZmFsc2U7XHJcblxyXG5cclxuICByaXNrRm9ybTogYW55ID0ge1xyXG4gICAgcmlza1R5cGU6ICdOT1JNQUwnLFxyXG4gICAgdGl0bGU6ICcnLFxyXG4gICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdDogW10sXHJcbiAgICBvd25lcnNMaXN0OiBbXSxcclxuICAgIGdyb3Vwc0xpc3Q6IFtdLFxyXG4gICAgY2F0ZWdvcnk6IHtcclxuICAgICAgdHlwZTogJ3N0cmF0ZWdpYycsXHJcbiAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gICAgfSxcclxuICAgIGNhdGVnb3J5Q3VzdG9tVGFnczogW10sXHJcbiAgICBvdmVyc2VlcnNMaXN0OiBbXSxcclxuICAgIG92ZXJzZWVyc0dyb3VwTGlzdCA6W10sXHJcbiAgICBtaXRpZ2F0aW9uOiAwLFxyXG4gICAgYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzOiAwLFxyXG4gICAgaGVhZF9pZHM6IFtdLFxyXG4gICAgYWRkT3ZlcnNlZXI6IGZhbHNlLFxyXG4gICAgYWRkTWl0aWdhdGlvbjogZmFsc2UsXHJcbiAgICBhZGRNaXRpZ2F0aW9uUGxhbjogZmFsc2UsXHJcbiAgICBtaXRpZ2F0aW9uRGVzY3JpcHRpb25QbGFuOiAnJyxcclxuICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiB7XHJcbiAgICAgIFwiZnJlcXVlbmN5XCI6ICAnJyxcclxuICAgICAgXCJzdGFydGVkX2F0XCI6ICcnLFxyXG4gICAgICBcImZyZXF1ZW5jeV90aW1lXCI6ICcnLFxyXG4gICAgICBcInJlbWluZF9iZWZvcmVfZGF5c1wiOiAwLFxyXG4gICAgfSxcclxuICAgIGFkZFJpc2tMYWJlbDogZmFsc2UsXHJcbiAgICByaXNrTGFiZWxWYWx1ZTogMSwgXHJcbiAgfTtcclxuICBhcGlVcmwgPSAnJztcclxuICBtZW1iZXJJZCA9IDA7XHJcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xyXG5cclxuXHJcbiAgdXNlcnNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgYWRtaW5zTGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGNhdGVnb3J5TGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIHJjTGlzdExvYWRlZCA9IGZhbHNlO1xyXG5cclxuICBzdWJtaXR0ZWQgPSBmYWxzZTtcclxuIFxyXG4gIC8vIHdlZWtseTogMn4yLDV+MH42XHJcbiAgLy8gbW9udGhseTogM34yOH4xLDIsMyw1LDYsNyw4LDExLDEyfjBcclxuICAvLyBxdWFydGVybHk6IDd+Mjh+Miw1LDgsMTF+MFxyXG4gIC8vIGJpYW5udWFsOiA5fjI4fjMsOX4wXHJcbiAgLy8gYW5udWFsOiA0fjI4fjl+M1xyXG4gIC8vIG9uZVRpbWU6IDB+MjAyMn4xMn4yOFxyXG5cclxuICBmcmVxdWVuY3lEZXRhaWxzID0ge1xyXG4gICAgXCJmcmVxdWVuY3lcIjogXCJcIixcclxuICAgIFwic3RhcnRlZF9hdFwiOiBcIlwiLFxyXG4gICAgXCJmcmVxdWVuY3lfdGltZVwiOiBcIlwiLFxyXG4gICAgXCJyZW1pbmRfYmVmb3JlX2RheXNcIjogMFxyXG4gIH1cclxuICBmcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdTZXQgYSBSZWFzc2Vzc21lbnQgRnJlcXVlbmN5JztcclxuICBzaG9ydE1vbnRoOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG5cclxuICBzZXR0aW5nc0luZm8gITogYW55O1xyXG5cclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICAvL1xyXG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgY3VycmVudFRpbWVTdGFtcCA9IE1hdGgucm91bmQoRGF0ZS5ub3coKS8xMDAwKTtcclxuICBmZWF0dXJlZmxhZ19ncm91cHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBncm91cHNMaXN0OiBhbnkgPSBbXTtcclxuICAvKiBDcmVhdGluZyBhbiBhcnJheSBmb3IgcmlzayBsYWJlbCB3aXRoIGl0J3MgdmFsdWUuICovXHJcbiAgcmlza0xhYmVsTGlzdDogYW55ID0gW1xyXG4gICAge25hbWU6ICdOZXdseSBJZGVudGlmaWVkIFJpc2snLCB2YWx1ZTogMX0sXHJcbiAgICB7bmFtZTogJ1JhcGlkbHkgQ2hhbmdpbmcgUmlzaycsIHZhbHVlOiAyfVxyXG4gIF1cclxuICBcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmlza1NlcnZpY2U6IEFkZFJpc2tTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVpS2l0U2VydmljZTogVWlLaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnPzogQ29uZmlndXJhdGlvbnNcclxuXHJcbiAgKSB7XHJcbiAgICAvLyBpZiAoY29uZmlnKSB7XHJcbiAgICAvLyAgIHRoaXMuYXBpVXJsID0gY29uZmlnLmFwaVVybDtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudGltZXpvbmUgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJUaW1lWm9uZSgpO1xyXG5cclxuICB9XHJcbiAgZGVzY3JpcHRpb246IEVkaXRvckNvbmZpZyA9IHtcclxuICAgIG1vZGU6ICdwcmltZScsXHJcbiAgICBjb2xvclBhbGV0dGU6IHRydWUsXHJcbiAgICBsaW5rOiB0cnVlLFxyXG4gICAgcGxhY2Vob2xkZXI6ICdBZGQgYSBkZXNjcmlwdGlvbiBmb3IgdGhpcyByaXNrJyxcclxuICB9O1xyXG5cclxuICBtaXRpZ2F0aW9uRGVzY3JpcHRpb25QbGFuOiBFZGl0b3JDb25maWcgPSB7XHJcbiAgICBtb2RlOiAncHJpbWUnLFxyXG4gICAgY29sb3JQYWxldHRlOiB0cnVlLFxyXG4gICAgbGluazogdHJ1ZSxcclxuICAgIHBsYWNlaG9sZGVyOiAnRGVzY3JpYmUgdGhlIHJlY29tbWVuZGVkIG1pdGlnYXRpb24gcGxhbnMnXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmVhdHVyZWZsYWdfZ3JvdXBzID0gdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoXCJmZl9yaXNrX2dyb3Vwc1wiKTtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKVxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5nZXRBZG1pbnNMaXN0KCk7XHJcbiAgICB0aGlzLmdldFJDTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRPd25lcnNMaXN0KCk7XHJcbiAgICBpZih0aGlzLmZlYXR1cmVmbGFnX2dyb3Vwcyl7XHJcbiAgICAgIHRoaXMuZ2V0R3JvdXBMaXN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldENhdGVnb3J5TGlzdCgpO1xyXG4gICAgdGhpcy5nZXRTZXR0aW5nc0luZm8oKTtcclxuICAgIHRoaXMuc2hvcnRNb250aCA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5tb250aEFycmF5Lm1hcChtb250aCA9PiBtb250aC5zdWJzdHJpbmcoMCwgMykpO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpIHtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgIH1cclxuICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcIm1lbWJlciBpZCBvZiBsb2dnZWQgaW4gdXNlclwiLCB0aGlzLm1lbWJlcklkKVxyXG4gICAgaWYgKHRoaXMuc2Vjb25kYXJ5T3BlblBvcnRhbCAhPT0gJ09USEVSJyAmJiB0aGlzLm1vZGUgIT09ICdFRElUJykge1xyXG4gICAgICB0aGlzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5wdXNoKHRoaXMubWVtYmVySWQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnUkVQT1JURURfUklTSycpIHtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5yaXNrVHlwZSA9ICdSRVBPUlRFRCc7XHJcbiAgICAgIHRoaXMucmlza1R5cGVDaGFuZ2VBbGxvd2VkID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMub3BlbmVkRnJvbSA9PT0gJ01PVkVfVE9fUkVHSVNURVInKSB7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPSAnTk9STUFMJztcclxuICAgICAgdGhpcy5yaXNrVHlwZUNoYW5nZUFsbG93ZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0Umlza1R5cGVCYXNlZE9uU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy9UTyBnZXQgZ3JvdXBMaXN0IGRhdGFcclxuICBnZXRHcm91cExpc3QoKSB7XHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmdldEdyb3Vwc0xpc3QoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IHJlcz8uZGF0YVxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgXHJcbiAgc2V0Umlza1R5cGVCYXNlZE9uU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JFUE9SVEVEX1JJU0snKSB7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPSAnUkVQT1JURUQnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VySW5mbygpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzPy5wZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gSlNPTi5wYXJzZShyZXM/LnBlcm1pc3Npb24pXHJcbiAgICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZT8uaXNBZG1pbigpIHx8IHRoaXMuYXV0aFNlcnZpY2U/LmlzS2V5QWRtaW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJpc2tUeXBlQ2hhbmdlQWxsb3dlZCA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXV0aFNlcnZpY2UuaXNNYW5hZ2VyKCkpIHtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24/Lk1SSVNLID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yaXNrVHlwZUNoYW5nZUFsbG93ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMucmlza1R5cGVDaGFuZ2VBbGxvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5yaXNrRm9ybS5yaXNrVHlwZSA9ICdSRVBPUlRFRCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hdXRoU2VydmljZS5pc1VzZXIoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJpc2tUeXBlQ2hhbmdlQWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID0gJ1JFUE9SVEVEJztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmlza1R5cGVDaGFuZ2VBbGxvd2VkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID0gJ1JFUE9SVEVEJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzPy5yb2xlQWN0aW9ucykge1xyXG4gICAgICAgICAgY29uc3QgbW9kdWxlSW5kZXggPSByZXMucm9sZUFjdGlvbnMuZmluZEluZGV4KChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubW9kdWxlTmFtZSA9PSBcInJpc2tcIik7XHJcbiAgICAgICAgICBjb25zdCByaXNrUGVybWlzc2lvbnMgPSByZXMucm9sZUFjdGlvbnNbbW9kdWxlSW5kZXhdLnN1Yk1vZHVsZVsxXS5wZXJtaXNzaW9ucztcclxuICAgICAgICAgIHJpc2tQZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ubmFtZSA9PSAnbWFuYWdlIHJpc2tzJyAmJiBwZXJtaXNzaW9uLmVuYWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmlza1R5cGVDaGFuZ2VBbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID0gJ05PUk1BTCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgICB0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID0gJ05PUk1BTCc7XHJcbiAgICAgICAgICB0aGlzLnJpc2tUeXBlQ2hhbmdlQWxsb3dlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlUmlzayh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmlza0Zvcm0gPSB7IC4uLnRoaXMucmlza0Zvcm0sIC4uLnsgcmlza1R5cGU6IHR5cGUgfSB9XHJcbiAgICB0aGlzLnNldFBvcHVwQnV0dG9ucygpO1xyXG4gICAgaWYgKHR5cGUgPT09ICdSRVBPUlRFRCcpIHtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5hc3Nlc3NtZW50X2RlYWRsaW5lX2RheXMgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudGx5TG9nZ2VkSW5Vc2VyKCl7XHJcbiAgICBpZih0aGlzLm1vZGUgPT09ICdFRElUJyl7XHJcbiAgICAgIGNvbnN0IG93bmVyc0xpc3QgPSB0aGlzLnNldExpc3QodGhpcy5vd25lcnNMaXN0LCB0aGlzLmVkaXREZXRhaWxzPy5vd25lciwgJ21lbWJlcl9pZCcpPy5tYXAoKGVsZTphbnkpID0+IGVsZT8ubWVtYmVyX2lkKTtcclxuICAgICAgaWYob3duZXJzTGlzdC5pbmNsdWRlcyh0aGlzLm1lbWJlcklkKSl7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCldO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gW3RoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQb3B1cEJ1dHRvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5yaXNrRm9ybS5yaXNrVHlwZSA9PT0gJ1JFUE9SVEVEJykge1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICAgICAgeyBidXR0b25UZXh0OiAnQWRkIE1vcmUgUmlza3MnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgICAgICB7IGJ1dHRvblRleHQ6ICdWaWV3IFJlcG9ydGVkIFJpc2tzJywgY2xhc3M6ICdibHVlLWJ0bicsIGlkOiAnbWFuYWdlUmVwb3J0ZWRSaXNrJyB9LFxyXG4gICAgICBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gW1xyXG4gICAgICAgIHsgYnV0dG9uVGV4dDogJ0FkZCBNb3JlIFJpc2tzJywgY2xhc3M6ICd3aGl0ZS1idG4nLCBpZDogJ2FkZE1vcmUnIH0sXHJcbiAgICAgICAgeyBidXR0b25UZXh0OiAnVmlldyBSaXNrJywgY2xhc3M6ICdibHVlLWJ0bicsIGlkOiAndmlld1Jpc2tzJyB9LFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRSaXNrRGV0YWlscyhyaXNrSWQ6IGFueSkge1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZ2V0Umlza0RldGFpbChyaXNrSWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0RGV0YWlscyA9IGNsb25lRGVlcChyZXMpO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLnRpdGxlID0gcmVzLnRpdGxlO1xyXG4gICAgICBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnTU9WRV9UT19SRUdJU1RFUicpIHtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID0gJ05PUk1BTCc7XHJcbiAgICAgICAgdGhpcy5yaXNrVHlwZUNoYW5nZUFsbG93ZWQgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLnJpc2tUeXBlID0gcmVzPy5yaXNrX3R5cGUgPz8gJ1JFUE9SVEVEJ1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJpc2tGb3JtLmRlc2NyaXB0aW9uID0gcmVzLmRlc2NyaXB0aW9uO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QgPSB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCByZXMucmNfaWQsICdpdGVtX2lkJyk7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0ub3duZXJzTGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLm93bmVyc0xpc3QsIHJlcy5vd25lciwgJ21lbWJlcl9pZCcpO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLmdyb3Vwc0xpc3QgPSB0aGlzLnNldExpc3QodGhpcy5ncm91cHNMaXN0LHJlcz8udXNlcmdyb3VwX2lkcywnX2lkJylcclxuICAgICAgdGhpcy5yaXNrRm9ybS5taXRpZ2F0aW9uRGVzY3JpcHRpb25QbGFuID0gcmVzLm1pdGlnYXRpb25EZXNjcmlwdGlvblBsYW47XHJcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnNldENhdGVnb3J5VHlwZShyZXMuY2F0ZWdvcnlfdHlwZVswXSk7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLmNhdGVnb3J5TGlzdFt0eXBlXT8uZGF0YS5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5jYXRlZ29yeV9pZCA9PSByZXMuY2F0ZWdvcnlbMF0pO1xyXG4gICAgICBpZiAoY2F0ZWdvcnlJbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMucmlza0Zvcm0uY2F0ZWdvcnkgPSB7XHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogdGhpcy5jYXRlZ29yeUxpc3RbdHlwZV0/LmRhdGFbY2F0ZWdvcnlJbmRleF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmNhdGVnb3J5Q3VzdG9tVGFncyA9IHJlcy5jYXRlZ29yeV9jdXN0b21fdGFnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJpc2tGb3JtLm92ZXJzZWVyc0xpc3QgPSB0aGlzLnNldExpc3QodGhpcy5vd25lcnNMaXN0LCByZXMubWFuYWdlX292ZXJzaWdodCwgJ21lbWJlcl9pZCcpO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLm92ZXJzZWVyc0dyb3VwTGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmdyb3Vwc0xpc3QsIHJlcz8ub3ZlcnNlZXJncm91cF9pZHMsICdfaWQnKTtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5taXRpZ2F0aW9uID0gcmVzPy5taXRpZ2F0aW9uID8gcmVzPy5taXRpZ2F0aW9uIDogdGhpcy5yaXNrRm9ybT8ubWl0aWdhdGlvbjtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5hc3Nlc3NtZW50X2RlYWRsaW5lX2RheXMgPSByZXMuYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLmFkZE92ZXJzZWVyID0gKHJlcy5tYW5hZ2Vfb3ZlcnNpZ2h0Lmxlbmd0aCA+IDAgfHwgcmVzPy5vdmVyc2Vlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0uYWRkTWl0aWdhdGlvbiA9IChyZXMubWl0aWdhdGlvbikgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgLy8gdGhpcy5tZW1iZXJJZCA9IHJlcy5tZW1iZXJfaWQ7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSByZXMub3JnYW5pc2F0aW9uX2lkO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLmhlYWRfaWRzID0gcmVzPy5oZWFkX2lkcyA/IHJlcz8uaGVhZF9pZHMgOiBbXTtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5taXRpZ2F0aW9uRGVzY3JpcHRpb25QbGFuID0gcmVzPy5taXRpZ2F0aW9uX3BsYW5fcmVjb21tZW5kYXRpb24gPz8gJyc7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0uYWRkTWl0aWdhdGlvblBsYW4gPSByZXM/Lm1pdGlnYXRpb25fcGxhbl9yZWNvbW1lbmRhdGlvbi50cmltKCk/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgdGhpcy5yaXNrRm9ybS5hZGRSaXNrTGFiZWwgPSAocmVzLnJpc2tfbGFiZWwpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICBpZiAocmVzLmFzc2Vzc21lbnRfZGF0ZV90aW1lc3RhbXApIHtcclxuICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZShyZXMuYXNzZXNzbWVudF9kYXRlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzLklmQXNzZXNzbWVudERvbmUgPiAwKSB7XHJcbiAgICAgICAgcmVzLmFsbF9vd25lcl9hcnIuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5hc3Nlc3NtZW50X2RvbmUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LnB1c2goZWxlbWVudC5tZW1iZXJfaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlY29uZGFyeU9wZW5Qb3J0YWwgPT09ICdPVEhFUicgJiYgdGhpcy5tb2RlID09PSAnRURJVCcpIHsgICAgICAgIFxyXG4gICAgICAgIHRoaXMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0ID0gQXJyYXkuZnJvbShuZXcgU2V0PGFueVtdPihbLi4udGhpcy5ub25SZW1vdmFibGVVc2Vyc0xpc3QsIC4uLnJlcz8ub3duZXJdKSk7ICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlY29uZGFyeU9wZW5Qb3J0YWwgIT09ICdPVEhFUicgJiYgdGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLm5vblJlbW92YWJsZVVzZXJzTGlzdCA9IEFycmF5LmZyb20obmV3IFNldDxhbnlbXT4oWy4uLnRoaXMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LCAuLi50aGlzLmdldEN1cnJlbnRseUxvZ2dlZEluVXNlcigpXSkpO1xyXG5cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzPy5yaXNrX3R5cGUgPT09ICdOT1JNQUwnKSB7XHJcbiAgICAgICAgdGhpcy5ub25SZW1vdmFibGVVc2Vyc0xpc3QgPSBBcnJheS5mcm9tKG5ldyBTZXQ8YW55W10+KFsuLi50aGlzLm5vblJlbW92YWJsZVVzZXJzTGlzdCwgLi4udGhpcy5nZXRDdXJyZW50bHlMb2dnZWRJblVzZXIoKV0pKTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgICAgdGhpcy5mcmVxdWVuY3lEYXRhUG9wdWxhdGUocmVzPy5mcmVxdWVuY3lfZGV0YWlscyk7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0uZnJlcXVlbmN5X2RldGFpbHMgPSByZXM/LmZyZXF1ZW5jeV9kZXRhaWxzO1xyXG4gICAgICB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKHJlcy5mcmVxdWVuY3lfZGV0YWlscyk7XHJcbiAgICAgIHRoaXMuc2V0T3ZlcnNlZXJzTGlzdCgpO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKSB7XHJcbiAgICBjb25zdCBhY3RpdmF0ZWRPcHRpb25zID0gW107XHJcbiAgICBpZiAodGhpcy5yaXNrRm9ybS5hZGRNaXRpZ2F0aW9uKSB7IGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnTUlUSUdBVElPTicpOyB9XHJcbiAgICBpZiAodGhpcy5yaXNrRm9ybS5hZGRPdmVyc2VlcikgeyBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ09WRVJTRUVSJyk7IH1cclxuICAgIGlmICh0aGlzLnJpc2tGb3JtLmFkZE1pdGlnYXRpb25QbGFuKSB7IGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnTUlUSUdBVElPTl9QTEFOJykgfVxyXG4gICAgaWYgKHRoaXMucmlza0Zvcm0uYWRkUmlza0xhYmVsKSB7IGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnUklTS19MQUJFTCcpIH1cclxuICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChhY3RpdmF0ZWRPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHNldENhdGVnb3J5VHlwZSh0eXBlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlID09PSAxKSB7XHJcbiAgICAgIHJldHVybiAnc3RyYXRlZ2ljJztcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gMikge1xyXG4gICAgICByZXR1cm4gJ29wZXJhdGlvbmFsJztcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gMykge1xyXG4gICAgICByZXR1cm4gJ2NvbXBsaWFuY2UnO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnb3RoZXJzJztcclxuICAgIH0gZWxzZSB7IHJldHVybiAnc3RyYXRlZ2ljJzsgfVxyXG4gIH1cclxuICBnZXRSQ0xpc3QoKSB7XHJcbiAgICBjb25zdCByY0FycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QocmNBcnJheSx0aGlzLm1vZGUgPT09IFwiRURJVFwiID8gdGhpcy5yaXNrSWQgOiBcIlwiKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmdldENhdGVnb3J5TGlzdCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3Quc3RyYXRlZ2ljLmRhdGEgPSByZXMuc3RyYXRlZ2ljX2FycjtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3Qub3BlcmF0aW9uYWwuZGF0YSA9IHJlcy5vcGVyYXRpb25hbF9hcnI7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LmNvbXBsaWFuY2UuZGF0YSA9IHJlcy5jb21wbGlhbmNlX2FycjtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3Qub3RoZXJzLmRhdGEgPSByZXMub3RoZXJzX2FycjtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldE93bmVyc0xpc3QoKSB7XHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblVzZXJzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLm93bmVyc0xpc3QgPSByZXM7XHJcblxyXG4gICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSByZXMuZmluZEluZGV4KCh1c2VyOiBhbnkpID0+IHVzZXIubWVtYmVyX2lkID09PSB0aGlzLm1lbWJlcklkKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlY29uZGFyeU9wZW5Qb3J0YWwgIT09ICdPVEhFUicgJiYgdGhpcy5tb2RlICE9PSAnRURJVCcpIHtcclxuICAgICAgICAgIHRoaXMucmlza0Zvcm0ub3duZXJzTGlzdC5wdXNoKHJlc1tpbmRleF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy51c2Vyc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldEFkbWluc0xpc3QoKSB7XHJcbiAgICB0aGlzLnJpc2tTZXJ2aWNlLmdldEFkbWluS2V5QWRtaW5MaXN0KCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuYWRtaW5zTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5hZG1pbnNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuYWRtaW5zTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTZXR0aW5nc0luZm8oKSB7XHJcblxyXG4gICAgdGhpcy5yaXNrU2VydmljZS5nZXRSaXNrU2V0dGluZ0RldGFpbHMoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5zZXR0aW5nc0luZm8gPSByZXM7XHJcbiAgICAgIHRoaXMuaGlkZU9wdGlvbmFsRmllbGRzKHJlcyk7XHJcbiAgICAgIHRoaXMubWl0aWdhdGlvbkRldGFpbHMgPSByZXM/LnJpc2tfbWl0aWdhdGlvbl9wcmlvcml0eT8ubWl0aWdhdGlvbl9kYXRhO1xyXG4gICAgICBsZXQgZGVmYXVsdE1pdGlnYXRpb24gPSB0aGlzLm1pdGlnYXRpb25EZXRhaWxzPy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGU/Lm1pdGlnYXRpb25fbmFtZSA9PT0gXCJMT1dcIik7XHJcbiAgICAgIGlmIChkZWZhdWx0TWl0aWdhdGlvbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5yaXNrRm9ybS5taXRpZ2F0aW9uID0gZGVmYXVsdE1pdGlnYXRpb25bMF0/Lm1pdGlnYXRpb25faWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBoaWRlT3B0aW9uYWxGaWVsZHMocmVzOiBhbnkpIHtcclxuICAgIGlmIChyZXM/LnJpc2tfYXV0b21hdGlvbl9lbmFibGUgPT09IDEpIHtcclxuICAgICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdChbJ01JVElHQVRJT04nXSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCkge1xyXG4gICAgaWYgKHRoaXMucmNMaXN0TG9hZGVkICYmIHRoaXMudXNlcnNMaXN0TG9hZGVkICYmIHRoaXMuYWRtaW5zTGlzdExvYWRlZCAmJiB0aGlzLmNhdGVnb3J5TGlzdExvYWRlZCkge1xyXG5cclxuICAgICAgdGhpcy5zZXRPdmVyc2VlcnNMaXN0KCk7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMuZ2V0Umlza0RldGFpbHModGhpcy5yaXNrSWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE92ZXJzZWVyc0xpc3QoKSB7XHJcblxyXG4gICAgbGV0IGlkczogYW55ID0gW107XHJcbiAgICBsZXQgcmNPd25lcklkczogYW55ID0gW107XHJcbiAgICBjb25zdCB1c2VycyA9IGNsb25lRGVlcCh0aGlzLnJpc2tGb3JtLm93bmVyc0xpc3QpO1xyXG4gICAgY29uc3QgcmVzcG9uc2liaWxpdHlDZW50ZXJzID0gY2xvbmVEZWVwKHRoaXMucmlza0Zvcm0ucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCk7XHJcbiAgICBjb25zdCBhZG1pbnMgPSBjbG9uZURlZXAodGhpcy5hZG1pbnNMaXN0KTtcclxuICAgIGNvbnN0IGFsbFVzZXJzID0gY2xvbmVEZWVwKHRoaXMub3duZXJzTGlzdCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhhbGxVc2VycywgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0KVxyXG4gICAgdXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIGlkcy5wdXNoKHVzZXIubWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgYWRtaW5zLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBpZHMucHVzaCh1c2VyLm1lbWJlcl9pZCk7XHJcbiAgICB9KTtcclxuICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVycy5mb3JFYWNoKChyYzogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFyeSA9IFsuLi5yYy5vd25lciwgLi4ucmMucGFyZW50X293bmVyc107XHJcbiAgICAgIGlkcyA9IFsuLi5pZHMsIC4uLmFyeV07XHJcbiAgICAgIHJjT3duZXJJZHMgPSBbLi4ucmNPd25lcklkcywgLi4uYXJ5XTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlkcyA9IFsuLi5uZXcgU2V0KGlkcyldO1xyXG4gICAgcmNPd25lcklkcyA9IFsuLi5uZXcgU2V0KHJjT3duZXJJZHMpXTtcclxuICAgIHRoaXMucmlza0Zvcm0uaGVhZF9pZHMgPSByY093bmVySWRzO1xyXG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICFpZHMuaW5jbHVkZXModXNlci5tZW1iZXJfaWQpKTtcclxuICAgIGNvbnNvbGUubG9nKFwib3ZlcnNlZXIgbGlzdFwiLHRoaXMub3ZlcnNlZXJzTGlzdClcclxuICAgIHRoaXMucmlza0Zvcm0ub3ZlcnNlZXJzTGlzdCA9IHRoaXMucmlza0Zvcm0ub3ZlcnNlZXJzTGlzdC5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIWlkcy5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZCkpO1xyXG5cclxuICAgLy9Hcm91cHMgd2hpY2ggYXJlIHNlbGVjdGVkIGluIE93bmVycyBmaWVsZCBzaG91bGQgbm90IGJlIHZpc2libGUgT3ZlcnNlZXIgXHJcbiAgICBsZXQgZ3JvdXBpZHM6YW55ID1bXTtcclxuICAgIGNvbnN0IGdyb3VwcyA9IGNsb25lRGVlcCh0aGlzLnJpc2tGb3JtLmdyb3Vwc0xpc3QpXHJcbiAgICBjb25zdCBhbGxncm91cHMgPSBjbG9uZURlZXAodGhpcy5ncm91cHNMaXN0KTtcclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XHJcbiAgICAgIGdyb3VwaWRzLnB1c2goZ3JvdXAuZ3JvdXBfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBncm91cGlkcyA9IFsuLi5uZXcgU2V0KGdyb3VwaWRzKV07XHJcbiAgICB0aGlzLm92ZXJzZWVyc0dyb3VwTGlzdCA9IGFsbGdyb3Vwcy5maWx0ZXIoKGdyb3VwOiBhbnkpID0+ICFncm91cGlkcy5pbmNsdWRlcyhncm91cC5ncm91cF9pZCkpO1xyXG4gICAgdGhpcy5yaXNrRm9ybS5vdmVyc2VlcnNHcm91cExpc3QgPSB0aGlzLnJpc2tGb3JtLm92ZXJzZWVyc0dyb3VwTGlzdC5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIWdyb3VwaWRzLmluY2x1ZGVzKHVzZXIuZ3JvdXBfaWQpKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlU2VsZWN0b3IodHlwZTogYW55LCBldmVudDogYm9vbGVhbikge1xyXG4gICAgY29uc29sZS5sb2coXCJ0eXBldHlwZXR5cGV0eXBlPT0+XCIsIHR5cGUsIGV2ZW50KVxyXG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9IGV2ZW50ID8gdHlwZSA6ICcnO1xyXG4gICAgaWYgKFsncmMnLCAnb3duZXInLCAnb3ZlcnNlZXInLCAnY2F0ZWdvcnknLCAnZnJlcXVlbmN5J10uaW5jbHVkZXModHlwZSkpIHtcclxuICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGFjdGl2ZURlc2VsZWN0b3IoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmUodHlwZTogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLnJpc2tGb3JtLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmluZEluZGV4KChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZCk7XHJcbiAgICAgICAgdGhpcy5yaXNrRm9ybS5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LnNwbGljZShyY0luZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3duZXInOlxyXG4gICAgICAgIGNvbnN0IG93bmVySW5kZXggPSB0aGlzLnJpc2tGb3JtLm93bmVyc0xpc3QuZmluZEluZGV4KChvd25lcjogYW55KSA9PiBvd25lci5tZW1iZXJfaWQgPT0gZXZlbnQubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLm93bmVyc0xpc3Quc3BsaWNlKG93bmVySW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuc2V0T3ZlcnNlZXJzTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdPd25lcmdyb3VwJzpcclxuICAgICAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5yaXNrRm9ybT8uZ3JvdXBzTGlzdC5maW5kSW5kZXgoKG93bmVyOiBhbnkpID0+IG93bmVyLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkKTtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmdyb3Vwc0xpc3Quc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlcic6XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJJbmRleCA9IHRoaXMucmlza0Zvcm0ub3ZlcnNlZXJzTGlzdC5maW5kSW5kZXgoKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMucmlza0Zvcm0ub3ZlcnNlZXJzTGlzdC5zcGxpY2Uob3ZlcnNlZXJJbmRleCwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ292ZXJzZWVyZ3JvdXAnOlxyXG4gICAgICAgICAgY29uc3Qgb3ZlcnNlZXJncm91cEluZGV4ID0gdGhpcy5yaXNrRm9ybT8ub3ZlcnNlZXJzR3JvdXBMaXN0LmZpbmRJbmRleCgob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIuZ3JvdXBfaWQgPT0gZXZlbnQuZ3JvdXBfaWQpO1xyXG4gICAgICAgICAgdGhpcy5yaXNrRm9ybS5vdmVyc2VlcnNHcm91cExpc3Quc3BsaWNlKG92ZXJzZWVyZ3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxyXG4gICAgICAgIHRoaXMucmlza0Zvcm0uY2F0ZWdvcnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3RyYXRlZ2ljJyxcclxuICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmNhdGVnb3J5Q3VzdG9tVGFncyA9IFtdO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNhdmVTZWxlY3RlZFJDTGlzdChyY0lkczogYW55KSB7XHJcbiAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkUkMgPSB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCByY0lkcywgJ2l0ZW1faWQnKTtcclxuICAgIHRoaXMucmlza0Zvcm0ucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IHNlbGVjdGVkUkM7XHJcbiAgICB0aGlzLnNldE92ZXJzZWVyc0xpc3QoKTtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWxlY3RlZENhdGVnb3J5KGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xyXG4gICAgdGhpcy5yaXNrRm9ybS5jYXRlZ29yeSA9IGNhdGVnb3J5O1xyXG4gICAgY29uc3QgY3VzdG9tVGFnczogYW55ID0gW107XHJcbiAgICBjYXRlZ29yeS5zZWxlY3RlZENhdGVnb3J5LmN1c3RvbV90YWcuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhZyA9IHtcclxuICAgICAgICBjdXN0b21fdGFnX25hbWU6IGVsZW1lbnQudGFnTmFtZSxcclxuICAgICAgICBjdXN0b21fdGFnX3ZhbHVlOiAnJ1xyXG4gICAgICB9O1xyXG4gICAgICBjdXN0b21UYWdzLnB1c2godGFnKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yaXNrRm9ybS5jYXRlZ29yeUN1c3RvbVRhZ3MgPSBjdXN0b21UYWdzO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlbGVjdGVkT3duZXJzTGlzdChpZHM6IGFueSkge1xyXG4gICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XHJcbiAgICBpZih0aGlzLmZlYXR1cmVmbGFnX2dyb3Vwcyl7XHJcbiAgICAgIGxldCBvd25lcmlkc1xyXG4gICAgICBsZXQgZ3JvdXBJZHNcclxuICAgICAgb3duZXJpZHMgPSB0aGlzLnJldHVybklkcyhpZHMudXNlcnMsXCJtZW1iZXJfaWRcIilcclxuICAgICAgZ3JvdXBJZHMgPSB0aGlzLnJldHVybklkcyhpZHMuZ3JvdXBzLCdncm91cF9pZCcpXHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3duZXJzID0gdGhpcy5zZXRMaXN0KHRoaXMub3duZXJzTGlzdCAsIG93bmVyaWRzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gdGhpcy5zZXRMaXN0KHRoaXMuZ3JvdXBzTGlzdCwgZ3JvdXBJZHMsJ2dyb3VwX2lkJyk7XHJcbiAgICAgIHRoaXMuc2V0TGlzdCh0aGlzLmdyb3Vwc0xpc3QsZ3JvdXBJZHMsJ2dyb3VwX2lkJyk7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0ub3duZXJzTGlzdCA9IHNlbGVjdGVkT3duZXJzO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLmdyb3Vwc0xpc3QgPSBzZWxlY3RlZEdyb3VwcztcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE93bmVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLm93bmVyc0xpc3QsIGlkcywgJ21lbWJlcl9pZCcpO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLm93bmVyc0xpc3QgPSBzZWxlY3RlZE93bmVycztcclxuICAgIH1cclxuICAgIHRoaXMuc2V0T3ZlcnNlZXJzTGlzdCgpO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlbGVjdGVkT3ZlcnNlZXJzTGlzdChpZHM6IGFueSkge1xyXG4gICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XHJcbiAgICBpZighdGhpcy5mZWF0dXJlZmxhZ19ncm91cHMpe1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE92ZXJzZWVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIGlkcywgJ21lbWJlcl9pZCcpO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLm92ZXJzZWVyc0xpc3QgPSBzZWxlY3RlZE92ZXJzZWVycztcclxuICAgIH1lbHNle1xyXG4gICAgICBsZXQgb3ZlcnNlZXJpZHNcclxuICAgICAgbGV0IG92ZXJzZWVyR3JvdXBJZHNcclxuICAgICAgb3ZlcnNlZXJpZHMgPSB0aGlzLnJldHVybklkcyhpZHMudXNlcnMsXCJtZW1iZXJfaWRcIilcclxuICAgICAgb3ZlcnNlZXJHcm91cElkcyA9IHRoaXMucmV0dXJuSWRzKGlkcy5ncm91cHMsJ2dyb3VwX2lkJylcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRPdmVyc2VlcnMgPSB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0ICwgb3ZlcnNlZXJpZHMsICdtZW1iZXJfaWQnKTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRPdmVyc2Vlckdyb3VwcyA9IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0dyb3VwTGlzdCwgb3ZlcnNlZXJHcm91cElkcywnZ3JvdXBfaWQnKTtcclxuICAgICAgLy8gdGhpcy5zZXRMaXN0KHRoaXMuZ3JvdXBzTGlzdCxvdmVyc2Vlckdyb3VwSWRzLCdncm91cF9pZCcpO1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLm92ZXJzZWVyc0xpc3QgPSBzZWxlY3RlZE92ZXJzZWVycztcclxuICAgICAgdGhpcy5yaXNrRm9ybS5vdmVyc2VlcnNHcm91cExpc3QgPSBzZWxlY3RlZE92ZXJzZWVyR3JvdXBzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUmlza0Fzc2Vzc21lbnQobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgY2FzZSAnc3VidHJhY3QnOlxyXG4gICAgICAgIGlmICh0aGlzLnJpc2tGb3JtLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyA+IDEpIHtcclxuICAgICAgICAgIHRoaXMucmlza0Zvcm0uYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzIC09IDE7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGUodGhpcy5yaXNrRm9ybS5hc3Nlc3NtZW50X2RlYWRsaW5lX2RheXMpO1xyXG4gICAgICAgICAgLy8gdGhpcy5yaXNrQXNzZXNzbWVudERlYWRsaW5lRGF0ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYWRkJzpcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyArPSAxO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0ZSh0aGlzLnJpc2tGb3JtLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyk7XHJcbiAgICAgICAgLy8gdGhpcy5yaXNrQXNzZXNzbWVudERlYWRsaW5lRGF0ZSA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERhdGUoZGF5czogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoZGF5cyA+PSAwKSB7XHJcbiAgICAgIGNvbnN0IG1pbGlzZWNvbmRzID0gZGF5cyAqIDg2NDAwICogMTAwMDtcclxuICAgICAgY29uc3QgZDogbnVtYmVyID0gbmV3IERhdGUoXHJcbiAgICAgICAgbmV3IERhdGUoRGF0ZS5ub3coKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xyXG4gICAgICAgICAgdGltZVpvbmU6IHRoaXMudGltZXpvbmUsXHJcbiAgICAgICAgfSlcclxuICAgICAgKS5nZXRUaW1lKCk7XHJcbiAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKGQgKyBtaWxpc2Vjb25kcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VSaXNrQXNzZXNzbWVudERlYWRsaW5lKGV2ZW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghaXNOYU4oZXZlbnQpKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0ZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YTogYW55ID0gW107XHJcbiAgICBsaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaWRzLmluY2x1ZGVzKGVsZW1lbnRba2V5XSkpIHtcclxuICAgICAgICBkYXRhLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICByZXR1cm5JZHMobGlzdDogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbGlzdC5tYXAoZWxlID0+IHsgaWYgKGVsZVtrZXldKSB7IHJldHVybiBlbGVba2V5XTsgfSB9KTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFJpc2soKSB7XHJcbiAgICB0aGlzLnNldFBvcHVwQnV0dG9ucygpO1xyXG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlUmlzaygpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnICYmIHRoaXMuZWRpdERldGFpbHMuSWZBc3Nlc3NtZW50RG9uZSA+IDApIHtcclxuICAgICAgY29uc3QgcHJldlJDQXJyID0gdGhpcy5lZGl0RGV0YWlscy5yY19pZDtcclxuICAgICAgY29uc3QgY3VyclJDQXJyID0gdGhpcy5yZXR1cm5JZHModGhpcy5yaXNrRm9ybS5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCAncmNfaWQnKTtcclxuICAgICAgaWYgKHByZXZSQ0Fyci5sZW5ndGggPT09IGN1cnJSQ0Fyci5sZW5ndGggJiYgcHJldlJDQXJyLnNvcnQoKS5ldmVyeSgodmFsdWU6IGFueSwgaW5kZXg6IGFueSkgPT4gdmFsdWUgPT09IGN1cnJSQ0Fyci5zb3J0KClbaW5kZXhdKSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlUmlzayh0aGlzLnJpc2tGb3JtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb25maXJtYXRpb25EZXRhaWxzOiBDb25maXJtYXRpb25BbGVydCA9IHtcclxuICAgICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgUmVzcG9uc2liaWxpdHkgQ2VudGVyKHMpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJpc2sgaGFzIGJlZW4gbW9kaWZpZWQuIFxyXG4gICAgICAgICAgICAgICBIZW5jZSwgdGhpcyByaXNrIG5lZWRzIHRvIGJlIHJlYXNzZXNzZWQuIE9uY2UgeW91IGNvbmZpcm0sIHRoZSBjdXJyZW50IGR1ZSBkYXRlIHdpbGwgYmUgY2xvc2VkIGFuZCBhIG5ldyByaXNrIGFzc2Vzc21lbnQgZHVlIGRhdGUgd2lsbCBiZSBnZW5lcmF0ZWQuYCxcclxuICAgICAgICAgIGFjdGlvbjogJ0VESVRfUklTSycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnNob3dDb25maXJtYXRpb25BbGVydC5lbWl0KGNvbmZpcm1hdGlvbkRldGFpbHMpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNyZWF0ZVJpc2sodGhpcy5yaXNrRm9ybSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYWRkTW9yZUluZm8oZXZlbnQ6IGFueSkge1xyXG4gICAgc3dpdGNoIChldmVudC5uYW1lKSB7XHJcbiAgICAgIGNhc2UgJ1Jpc2sgT3ZlcnNlZXInOlxyXG4gICAgICAgIHRoaXMucmlza0Zvcm0uYWRkT3ZlcnNlZXIgPSBldmVudD8uY2hlY2tlZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUmlzayBNaXRpZ2F0aW9uIFByaW9yaXR5JzpcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmFkZE1pdGlnYXRpb24gPSBldmVudD8uY2hlY2tlZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUmVjb21tZW5kZWQgTWl0aWdhdGlvbiBQbGFucyc6XHJcbiAgICAgICAgdGhpcy5yaXNrRm9ybS5hZGRNaXRpZ2F0aW9uUGxhbiA9IGV2ZW50Py5jaGVja2VkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdSaXNrIExhYmVsJzpcclxuICAgICAgICB0aGlzLnJpc2tGb3JtLmFkZFJpc2tMYWJlbCA9IGV2ZW50Py5jaGVja2VkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVJpc2soKSB7XHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcbiAgICBjb25zdCBldmVudCA9IHRoaXMucmlza0Zvcm0udGl0bGU7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgdGhpcy5yaXNrRm9ybS50aXRsZSA9IGV2ZW50LnJlcGxhY2UocmUsICcnKS50cmltKCk7XHJcbiAgICAvLyAoKCF0aGlzLnNldHRpbmdzSW5mby5hc3Nlc3NtZW50X2RlYWRsaW5lX2VuYWJsZSkgJiYgKHRoaXMucmlza0Zvcm0/LmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyA8IDEpICYmIHRoaXMucmlza0Zvcm0/LnJpc2tUeXBlICE9PSAnUkVQT1JURUQnKSB8fFxyXG4gICAgaWYgKCF0aGlzLnJpc2tGb3JtLnRpdGxlIHx8IHRoaXMucmlza0Zvcm0ucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdC5sZW5ndGggPT0gMFxyXG4gICAgICB8fCB0aGlzLnJpc2tGb3JtLm93bmVyc0xpc3QubGVuZ3RoID09IDAgfHxcclxuICAgICAgKHRoaXMucmlza0Zvcm0ucmlza1R5cGUgPT09ICdSRVBPUlRFRCcgJiYgIXRoaXMucmlza0Zvcm0/LmRlc2NyaXB0aW9uPy50cmltKCk/Lmxlbmd0aCkgfHwgXHJcbiAgICAgICh0aGlzLnJpc2tGb3JtPy5yaXNrVHlwZSAhPT0gJ1JFUE9SVEVEJyAmJiAoIXRoaXMucmlza0Zvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzPy5mcmVxdWVuY3kgfHwgdGhpcy5yaXNrRm9ybT8uZnJlcXVlbmN5X2RldGFpbHM/LmZyZXF1ZW5jeSA9PT0gJycpKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVJpc2socmlza0Zvcm06IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgIGNvbnN0IHBheWxvYWQgOmFueSA9IHtcclxuICAgICAgdGl0bGU6IHJpc2tGb3JtLnRpdGxlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogcmlza0Zvcm0uZGVzY3JpcHRpb24sXHJcbiAgICAgIGNhdGVnb3J5X2N1c3RvbV90YWc6IHJpc2tGb3JtLmNhdGVnb3J5Q3VzdG9tVGFncyxcclxuICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9lbmFibGU6IHRoaXMuc2V0dGluZ3NJbmZvLmFzc2Vzc21lbnRfZGVhZGxpbmVfZW5hYmxlLFxyXG4gICAgICBvd25lcjogdGhpcy5yZXR1cm5JZHMocmlza0Zvcm0ub3duZXJzTGlzdCwgJ21lbWJlcl9pZCcpLFxyXG4gICAgICAvLyB1c2VyZ3JvdXBfaWRzOiB0aGlzLnJldHVybklkcyhyaXNrRm9ybS5ncm91cHNMaXN0LCdfaWQnKSxcclxuICAgICAgY2F0ZWdvcnk6IChyaXNrRm9ybS5jYXRlZ29yeT8uc2VsZWN0ZWRDYXRlZ29yeT8uY2F0ZWdvcnlfaWQpID8gW3Jpc2tGb3JtLmNhdGVnb3J5LnNlbGVjdGVkQ2F0ZWdvcnkuY2F0ZWdvcnlfaWRdIDogW10sXHJcbiAgICAgIG1hbmFnZV9vdmVyc2lnaHQ6IHJpc2tGb3JtLmFkZE92ZXJzZWVyID8gdGhpcy5yZXR1cm5JZHMocmlza0Zvcm0ub3ZlcnNlZXJzTGlzdCwgJ21lbWJlcl9pZCcpIDogW10sXHJcbiAgICAgIC8vIG92ZXJzZWVyZ3JvdXBfaWRzIDogcmlza0Zvcm0uYWRkT3ZlcnNlZXIgPyB0aGlzLnJldHVybklkcyhyaXNrRm9ybS5vdmVyc2VlcnNHcm91cExpc3QsJ19pZCcpIDpbXSAsXHJcbiAgICAgIHJjX2lkOiB0aGlzLnJldHVybklkcyhyaXNrRm9ybS5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCAnaXRlbV9pZCcpLFxyXG4gICAgICBoZWFkX2lkczogcmlza0Zvcm0uaGVhZF9pZHMsXHJcbiAgICAgIHJhdGluZ19hcnI6IFtdLFxyXG4gICAgICBtZW1iZXJfaWQ6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5vcmdhbml6YXRpb25JZCxcclxuICAgICAgcmlza19wcm9ncmVzc19mbGFnOiAodGhpcy5tb2RlID09PSAnRURJVCcpID8gdGhpcy5lZGl0RGV0YWlscy5yaXNrX3Byb2dyZXNzX2ZsYWcgOiAxLFxyXG4gICAgICBJZkFzc2Vzc21lbnREb25lOiAodGhpcy5tb2RlID09ICdFRElUJykgPyB0aGlzLmVkaXREZXRhaWxzLklmQXNzZXNzbWVudERvbmUgOiAwLFxyXG4gICAgICB3b3Jrc2hvcF9pZDogKHRoaXMubW9kZSA9PSAnRURJVCcpID8gdGhpcy5lZGl0RGV0YWlscy53b3Jrc2hvcF9pZCA6IDAsXHJcbiAgICAgIGNvbXBsZXRlX2Fzc2Vzc21lbnQ6IDAsXHJcbiAgICAgIG1pdGlnYXRpb246IChyaXNrRm9ybS5hZGRNaXRpZ2F0aW9uKSA/IHJpc2tGb3JtLm1pdGlnYXRpb24gOiAwLFxyXG4gICAgICB3ZWlnaHRhZ2VfZW5hYmxlOiB0aGlzLnNldHRpbmdzSW5mby53ZWlnaHRhZ2VfZW5hYmxlLFxyXG4gICAgICB0cmVhdG1lbnRfdHlwZTogdGhpcy5zZXR0aW5nc0luZm8udHJlYXRtZW50X2NyaXRlcmlhLFxyXG4gICAgICB3ZWlnaHRhZ2VfZGV0YWlsczogdGhpcy5zZXR0aW5nc0luZm8ud2VpZ2h0YWdlX2RldGFpbHMsXHJcbiAgICAgIHdlaWdodGFnZV9zZXRfYnk6IHRoaXMuc2V0dGluZ3NJbmZvLndlaWdodGFnZV9zZXRfYnksXHJcbiAgICAgIHdlaWdodGFnZV9zdHI6IFtcclxuICAgICAgICB0aGlzLnNldHRpbmdzSW5mby53ZWlnaHRhZ2VfZGV0YWlscy5pbXBhY3QudmFsdWUsXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0luZm8ud2VpZ2h0YWdlX2RldGFpbHMubGlrZWxpaG9vZC52YWx1ZSxcclxuICAgICAgICB0aGlzLnNldHRpbmdzSW5mby53ZWlnaHRhZ2VfZGV0YWlscy52ZWxvY2l0eS52YWx1ZSxcclxuICAgICAgICB0aGlzLnNldHRpbmdzSW5mby53ZWlnaHRhZ2VfZGV0YWlscy52dWxuZXJhYmlsaXR5LnZhbHVlLFxyXG4gICAgICBdLFxyXG4gICAgICBhc3Nlc3NtZW50X2RlYWRsaW5lX3NldF9ieTogdGhpcy5zZXR0aW5nc0luZm8uYXNzZXNzbWVudF9kZWFkbGluZV9zZXRfYnksXHJcbiAgICAgIC8vIGFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5czogKHRoaXMuc2V0dGluZ3NJbmZvLmFzc2Vzc21lbnRfZGVhZGxpbmVfZW5hYmxlKSA/IHRoaXMuc2V0dGluZ3NJbmZvLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyA6IHJpc2tGb3JtLmFzc2Vzc21lbnRfZGVhZGxpbmVfZGF5cyxcclxuICAgICAgcmlza190eXBlOiB0aGlzLnJpc2tGb3JtPy5yaXNrVHlwZSA/PyAnTk9STUFMJyxcclxuICAgICAgbWl0aWdhdGlvbl9wbGFuX3JlY29tbWVuZGF0aW9uOiB0aGlzLnJpc2tGb3JtPy5hZGRNaXRpZ2F0aW9uUGxhbiA/IHRoaXMucmlza0Zvcm0/Lm1pdGlnYXRpb25EZXNjcmlwdGlvblBsYW4gPz8gJycgOiAnJyxcclxuICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IHRoaXMucmlza0Zvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzLFxyXG4gICAgICByaXNrX2xhYmVsOiAocmlza0Zvcm0/LmFkZFJpc2tMYWJlbCkgPyByaXNrRm9ybT8ucmlza0xhYmVsVmFsdWUgOiAxLFxyXG5cclxuICAgIH07XHJcbiAgIGlmKHRoaXMuZmVhdHVyZWZsYWdfZ3JvdXBzKXtcclxuICAgIHBheWxvYWRbJ3VzZXJncm91cF9pZHMnXSA9IHRoaXMucmV0dXJuSWRzKHJpc2tGb3JtLmdyb3Vwc0xpc3QsJ19pZCcpXHJcbiAgICBwYXlsb2FkWydvdmVyc2Vlcmdyb3VwX2lkcyddID0gcmlza0Zvcm0uYWRkT3ZlcnNlZXIgPyB0aGlzLnJldHVybklkcyhyaXNrRm9ybS5vdmVyc2VlcnNHcm91cExpc3QsJ19pZCcpIDpbXVxyXG4gICB9IFxyXG4gICAgY29uc29sZS5sb2coXCJwYXlsb2FkcGF5bG9hZHBheWxvYWRwYXlsb2FkXCIscGF5bG9hZClcclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcclxuICAgICAgdGhpcy5yaXNrU2VydmljZS5hZGRSaXNrKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgICAgIHRoaXMucmlza0RhdGEgPSByZXM7XHJcbiAgICAgICAgdGhpcy5yaXNrSWQgPSByZXMuX2lkO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyAgIHRoaXMucmVzZXRGb3JtKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JywgJ2FsZXJ0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcgJiYgdGhpcy5vcGVuZWRGcm9tICE9PSAnTU9WRV9UT19SRUdJU1RFUicpIHtcclxuICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFRoZSByaXNrIGhhcyBiZWVuIG1vZGlmaWVkLmA7XHJcbiAgICAgIHRoaXMucmlza1NlcnZpY2UudXBkYXRlUmlzayh0aGlzLnJpc2tJZCwgcGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmlza0RhdGEgPSByZXM7XHJcbiAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsICdhbGVydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnTU9WRV9UT19SRUdJU1RFUicpIHtcclxuICAgICAgdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQoeyBldnQ6IHsgYWN0aW9uOiAnTU9WRV9UT19SRUdJU1RFUicsIHBheWxvYWQgfSwgY29uZmlybTogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtKCkge1xyXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICB0aGlzLnJpc2tGb3JtID0ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgcmlza1R5cGU6IHRoaXMucmlza0Zvcm0/LnJpc2tUeXBlLFxyXG4gICAgICBhZGRNaXRpZ2F0aW9uUGxhbjogZmFsc2UsXHJcbiAgICAgIG1pdGlnYXRpb25EZXNjcmlwdGlvblBsYW46ICcnLFxyXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0OiBbXSxcclxuICAgICAgb3duZXJzTGlzdDogW10sXHJcbiAgICAgIGdyb3Vwc0xpc3Q6IFtdLFxyXG4gICAgICBjYXRlZ29yeToge1xyXG4gICAgICAgIHR5cGU6ICdzdHJhdGVnaWMnLFxyXG4gICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6ICcnLFxyXG4gICAgICB9LFxyXG4gICAgICBjYXRlZ29yeUN1c3RvbVRhZ3M6IFtdLFxyXG4gICAgICBvdmVyc2VlcnNMaXN0OiBbXSxcclxuICAgICAgbWl0aWdhdGlvbjogMCxcclxuICAgICAgYXNzZXNzbWVudF9kZWFkbGluZV9kYXlzOiAwLFxyXG4gICAgICBoZWFkX2lkczogW10sXHJcbiAgICAgIGFkZE92ZXJzZWVyOiBmYWxzZSxcclxuICAgICAgYWRkTWl0aWdhdGlvbjogZmFsc2UsXHJcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiB7XHJcbiAgICAgICAgXCJmcmVxdWVuY3lcIjogICcnLFxyXG4gICAgICAgIFwic3RhcnRlZF9hdFwiOiAnJyxcclxuICAgICAgICBcImZyZXF1ZW5jeV90aW1lXCI6ICcnLFxyXG4gICAgICAgIFwicmVtaW5kX2JlZm9yZV9kYXlzXCI6IDAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHJpc2tMYWJlbFZhbHVlOiAxLFxyXG4gICAgICBhZGRSaXNrTGFiZWw6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ub25SZW1vdmFibGVVc2Vyc0xpc3QgPSBbXTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgdGhpcy5ub25SZW1vdmFibGVVc2Vyc0xpc3QgPSB0aGlzLmdldEN1cnJlbnRseUxvZ2dlZEluVXNlcigpO1xyXG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMgPSB7XHJcbiAgICAgIGZyZXF1ZW5jeTogICcnLFxyXG4gICAgICBzdGFydGVkX2F0OiAnJyxcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6ICcnLFxyXG4gICAgICByZW1pbmRfYmVmb3JlX2RheXM6IDAsXHJcbiAgICB9ICAgXHJcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ1NldCBhIFJlYXNzZXNzbWVudCBGcmVxdWVuY3knO1xyXG5cclxuICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xyXG4gICAgdGhpcy5nZXRPd25lcnNMaXN0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYWN0aW9uKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQpIHtcclxuICAgICAgY2FzZSAnYWRkTW9yZSc6XHJcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlld1Jpc2tzJzpcclxuICAgICAgICB0aGlzLnZpZXdSaXNrcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtYW5hZ2VSZXBvcnRlZFJpc2snOlxyXG4gICAgICAgIHRoaXMucmVkaXJlY3RUb1JlcG9ydGVkKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVNtaWxleShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcclxuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHsgZXZ0OiB0aGlzLnJpc2tEYXRhLCBjb25maXJtOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgdmlld1Jpc2tzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgdXJsICs9ICcvcmlzay13b3Jrcm9vbS8nICsgdGhpcy5yaXNrSWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3Jpc2t2MicpKSB7XHJcbiAgICAgICAgdXJsICs9ICcvcmlza3YyL3Jpc2std29ya3Jvb20vJyArIHRoaXMucmlza0lkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVybCArPSAnL3Jpc2svcmlzay13b3Jrcm9vbS8nICsgdGhpcy5yaXNrSWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgLy90aGlzLnJlc2V0Rm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgcmVkaXJlY3RUb1JlcG9ydGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgdXJsICs9ICcvcmVwb3J0ZWQtcmlzayc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3Jpc2t2MicpKSB7XHJcbiAgICAgICAgdXJsICs9ICcvcmlza3YyL3JlcG9ydGVkLXJpc2snO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVybCArPSAnL3Jpc2svcmVwb3J0ZWQtcmlzayc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgLy90aGlzLnJlc2V0Rm9ybSgpO1xyXG4gIH1cclxuICBjaGVja0Rlc2NyaXB0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMucmlza0Zvcm0uZGVzY3JpcHRpb24gPT0gJzxicj4nKSB7XHJcbiAgICAgIHRoaXMucmlza0Zvcm0uZGVzY3JpcHRpb24gPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrTWl0aWdhdGlvblBsYW4oKSB7XHJcbiAgICBpZiAodGhpcy5yaXNrRm9ybS5taXRpZ2F0aW9uRGVzY3JpcHRpb25QbGFuID09ICc8YnI+Jykge1xyXG4gICAgICB0aGlzLnJpc2tGb3JtLm1pdGlnYXRpb25EZXNjcmlwdGlvblBsYW4gPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURhdGFQb3B1bGF0ZShldmVudCk7XHJcbiAgICBcclxuICAgIHRoaXMucmlza0Zvcm0uZnJlcXVlbmN5X2RldGFpbHMgPSB7XHJcbiAgICAgIFwiZnJlcXVlbmN5XCI6IGV2ZW50Py5mcmVxdWVuY3ksXHJcbiAgICAgIFwic3RhcnRlZF9hdFwiOiBldmVudD8uc3RhcnRlZF9hdCxcclxuICAgICAgXCJmcmVxdWVuY3lfdGltZVwiOiBldmVudD8uZnJlcXVlbmN5X3RpbWUsXHJcbiAgICAgIFwicmVtaW5kX2JlZm9yZV9kYXlzXCI6IGV2ZW50Py5yZW1pbmRfYmVmb3JlX2RheXNcclxuICAgIH07XHJcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gZXZlbnQ/LnBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RnJlcXVlbmN5UGxhY2Vob2xkZXIocmVzOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChyZXM/LmZyZXF1ZW5jeSkge1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeURldGFpbHMgPSByZXM/LmZyZXF1ZW5jeS5zcGxpdCgnficpO1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeVRpbWUgPSByZXM/LmZyZXF1ZW5jeV90aW1lID09PSAnMDA6MDA6MDAnID8gJzEyOjAwIGFtJyA6IHJlcz8uZnJlcXVlbmN5X3RpbWU7XHJcbiAgICAgICAgc3dpdGNoIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzBdKSkge1xyXG4gICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICB0aGlzLmdldFdlZWtseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgdGhpcy5nZXRNb250aGx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICB0aGlzLmdldFllYXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgdGhpcy5nZXRRdWFydGVybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDk6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Qmlhbm51YWxQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBjb25zdCBkYXRlT2JqZWN0ID0gbmV3IERhdGUobW9tZW50KGZyZXF1ZW5jeURldGFpbHNbMV0gKyAnLScgKyBmcmVxdWVuY3lEZXRhaWxzWzJdICsgJy0nICsgZnJlcXVlbmN5RGV0YWlsc1szXSArICcgMDA6MDA6MDAnLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLnVuaXgoKSAqIDEwMDApO1xyXG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XHJcbiAgICAgICAgICAgICAgICAnT25lIFRpbWUgJyArIGRhdGVPYmplY3QuZ2V0RGF0ZSgpICsgJyAnICsgdGhpcy5zaG9ydE1vbnRoW2RhdGVPYmplY3QuZ2V0TW9udGgoKV0gKyAnICcgKyBkYXRlT2JqZWN0LmdldEZ1bGxZZWFyKCkgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIGZyZXF1ZW5jeURldGFpbHMgYXJyYXkgYW5kIGEgZnJlcXVlbmN5VGltZSBzdHJpbmcgYW5kIHJldHVybnMgYSBmcmVxdWVuY3lQbGFjZWhvbGRlclxyXG4gICAqIHN0cmluZy5cclxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxLDIsMyw0LDVcIiwgXCIxXCIsIFwiMVwiLCBcIjFcIiwgXCIxXCIsIFwiMVwiLCBcIjFcIiwgXCIxXCIsIFwiMVwiLCBcIjFcIixcclxuICAgKiBcIjFcIiwgXCIxXCIsIFwiMVwiLCBcIjFcIiwgXCIxXCIsIFwiMVwiLCBcIlxyXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAgICovXHJcbiAgZ2V0V2Vla2x5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcclxuICAgIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWREYXkgPSBmcmVxdWVuY3lEZXRhaWxzWzFdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZGF5TmFtZVtwYXJzZUludChlbGUpIC0gMV07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAnICsgc2VsZWN0ZWREYXkuam9pbigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPT09IDIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5IGFsdGVybmF0ZSAnICsgc2VsZWN0ZWREYXkuam9pbigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPT09IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5IDNyZCAnICsgc2VsZWN0ZWREYXkuam9pbigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAnICsgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgKyAndGggJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBudW1iZXJzIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBtb250aCBuYW1lcy5cclxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxXCIsIFwiMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTJcIl1cclxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5VGltZSAtIFwiMTA6MDAgQU1cIlxyXG4gICAqL1xyXG4gIGdldE1vbnRobHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGVsZSkgLSAxXTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMXN0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEgfHwgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyBsZXNzIHRoYW4gMiwgdGhlbiB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgaXMgc2V0IHRvIHRoZSAxc3QsIDJuZCxcclxuICAgKiAzcmQsIG9yIG50aCBvZiBldmVyeSBtb250aCBieSBmcmVxdWVuY3lUaW1lLlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzFdIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHRoZSBmcmVxdWVuY3lQbGFjZWhvbGRlciBpcyBzZXQgdG8gdGhlIDFzdCxcclxuICAgKiAybmQsIDNyZCwgb3IgbnRoIG9mIGV2ZXJ5IG1vbnRoLCBJbnRlcnZhbDogZXZlcnkgeWVhclNlcXVlbmNlIHllYXJzIGJ5IGZyZXF1ZW5jeVRpbWUuXHJcbiAgICogXHJcbiAgICogSSdtIHRyeWluZyB0byB3cml0ZSBhIHRlc3QgdGhhdCB3aWxsIHRlc3QgdGhlIGFib3ZlIGZ1bmN0aW9uLlxyXG4gICAqIFxyXG4gICAqIEhlcmUncyB3aGF0IEkgaGF2ZSBzbyBmYXI6XHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbMF0gPSBcIlllYXJseVwiXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAgKi9cclxuICBnZXRZZWFybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCB5ZWFyU2VxdWVuY2UgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA+IDAgPyBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA6IDE7XHJcbiAgICAgIGlmICh5ZWFyU2VxdWVuY2UgPCAyKSB7XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzFzdCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMm5kIG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICczcmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoIG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEgfHwgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIxKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdyZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHllYXJTZXF1ZW5jZSA+IDEpIHtcclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzFzdCBvZiAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnLCBJbnRlcnZhbDogZXZlcnkgJyArIHllYXJTZXF1ZW5jZSArICcgeWVhcnMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMikge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMm5kIG9mJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnLCBJbnRlcnZhbDogZXZlcnkgJyArIHllYXJTZXF1ZW5jZSArICcgeWVhcnMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxIHx8IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSkge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcsIEludGVydmFsOiBldmVyeSAnICsgeWVhclNlcXVlbmNlICsgJyB5ZWFycyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcsIEludGVydmFsOiBldmVyeSAnICsgeWVhclNlcXVlbmNlICsgJyB5ZWFycyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcsIEludGVydmFsOiBldmVyeSAnICsgeWVhclNlcXVlbmNlICsgJyB5ZWFycyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzFdIGlzIDEsIDIsIDMsIDIxLCAyMiwgMjMsIG9yIGdyZWF0ZXIgdGhhbiAzLCB0aGVuIHNldCB0aGVcclxuICAgKiBmcmVxdWVuY3lQbGFjZWhvbGRlciB0byBhIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzFdIGFuZCB0aGUgZnJlcXVlbmN5VGltZS5cclxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjNcIiwgXCIxXCIsIFwiMSwyLDNcIl1cclxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5VGltZSAtIFwiMTA6MDAgQU1cIlxyXG4gICAqL1xyXG4gIGdldFF1YXJ0ZXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHF1YXJ0ZXJseSA9IFsnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLCAnRmVicnVhcnksIE1heSwgQXVndXN0LCBOb3ZlbWJlcicsICcgTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInXTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICczcmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mIGV2ZXJ5ICcgKyBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycyBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbW9udGggbmFtZXMuXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMVwiLCBcIjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXCJdXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAgKi9cclxuICBnZXRCaWFubnVhbFBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGFuIGV2ZW50IG9iamVjdCwgYW5kIGlmIGl0IGV4aXN0cywgaXQgY3JlYXRlcyBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzXHJcbiAgICogdGhlIGV2ZW50IG9iamVjdCwgYW5kIGFzc2lnbnMgaXQgdG8gdGhlIGZyZXF1ZW5jeURldGFpbHMgcHJvcGVydHkuXHJcbiAgICogXHJcbiAgICogSWYgdGhlIGV2ZW50IG9iamVjdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIGZyZXF1ZW5jeURldGFpbHMgcHJvcGVydHkgd2lsbCBiZSB1bmRlZmluZWQuXHJcbiAgICogXHJcbiAgICogSWYgdGhlIGV2ZW50IG9iamVjdCBpcyBudWxsLCB0aGVuIHRoZSBmcmVxdWVuY3lEZXRhaWxzIHByb3BlcnR5IHdpbGwgYmUgbnVsbC5cclxuICAgKiBcclxuICAgKiBJZiB0aGUgZXZlbnQgb2JqZWN0IGlzIGFuIGVtcHR5IG9iamVjdCwgdGhlbiB0aGUgZnJlcXVlbmN5RGV0YWlscyBwcm9wZXJ0eSB3aWxsIGJlIGFuIGVtcHR5XHJcbiAgICogb2JqZWN0LlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBldmVudCBvYmplY3QgaXMgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcywgdGhlbiB0aGUgZnJlcXVlbmN5RGV0YWlscyBwcm9wZXJ0eSB3aWxsIGJlIGFuXHJcbiAgICogb2JqZWN0IHdpdGggdGhlIHNhbWUgcHJvcGVydGllcy5cclxuICAgKiBcclxuICAgKiBJZiB0aGUgZXZlbnQgb2JqZWN0IGlzIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMsIGJ1dCBzb21lIG9mIHRob3NlIHByb3BlcnRpZXMgYXJlIHVuZGVmaW5lZCwgdGhlblxyXG4gICAqIHRoZSBmcmVxdWVuY3lEZXRhaWxzIHByb3BlcnR5IHdpbGwgYmUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgcHJvcGVydGllcywgYnV0IHNvbWUgb2YgdGhvc2VcclxuICAgKiBwcm9wZXJ0aWVzIHdpbGwgYmUgdW5kZWZpbmVkLlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBldmVudCBvYmplY3QgaXMgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcywgYnV0IHNvbWUgb2YgdGhvc2UgcHJvcGVydGllcyBhcmUgbnVsbCwgdGhlbiB0aGVcclxuICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBhbnkgPSB7XHJcbiAgICovXHJcbiAgZnJlcXVlbmN5RGF0YVBvcHVsYXRlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBcImZyZXF1ZW5jeVwiOiBldmVudD8uZnJlcXVlbmN5LFxyXG4gICAgICBcInN0YXJ0ZWRfYXRcIjogZXZlbnQ/LnN0YXJ0ZWRfYXQsXHJcbiAgICAgIFwiZnJlcXVlbmN5X3RpbWVcIjogZXZlbnQ/LmZyZXF1ZW5jeV90aW1lLFxyXG4gICAgICBcInJlbWluZF9iZWZvcmVfZGF5c1wiOiBldmVudD8ucmVtaW5kX2JlZm9yZV9kYXlzLFxyXG4gICAgfVxyXG4gICAgdGhpcy4gZnJlcXVlbmN5RGV0YWlscyA9IGRhdGE7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|