@valtimo/task 12.2.1 → 12.4.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/esm2022/lib/components/assign-user-to-task/assign-user-to-task.component.mjs +8 -5
- package/esm2022/lib/components/task-detail-content/task-detail-content.component.mjs +317 -0
- package/esm2022/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.mjs +144 -0
- package/esm2022/lib/components/task-detail-modal/task-detail-modal.component.mjs +53 -272
- package/esm2022/lib/components/task-list/task-list.component.mjs +5 -5
- package/esm2022/lib/models/task.model.mjs +1 -1
- package/esm2022/lib/services/index.mjs +2 -1
- package/esm2022/lib/services/task-intermediate-save.service.mjs +18 -3
- package/esm2022/lib/task.module.mjs +17 -6
- package/esm2022/public_api.mjs +9 -6
- package/fesm2022/valtimo-task.mjs +637 -405
- package/fesm2022/valtimo-task.mjs.map +1 -1
- package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts +1 -1
- package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts.map +1 -1
- package/lib/components/task-detail-content/task-detail-content.component.d.ts +79 -0
- package/lib/components/task-detail-content/task-detail-content.component.d.ts.map +1 -0
- package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts +41 -0
- package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts.map +1 -0
- package/lib/components/task-detail-modal/task-detail-modal.component.d.ts +22 -65
- package/lib/components/task-detail-modal/task-detail-modal.component.d.ts.map +1 -1
- package/lib/models/task.model.d.ts +5 -1
- package/lib/models/task.model.d.ts.map +1 -1
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/task-intermediate-save.service.d.ts +7 -1
- package/lib/services/task-intermediate-save.service.d.ts.map +1 -1
- package/lib/task.module.d.ts +14 -12
- package/lib/task.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +8 -5
- package/public_api.d.ts.map +1 -1
|
@@ -13,333 +13,114 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { Component, EventEmitter,
|
|
17
|
-
import {
|
|
16
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
17
|
+
import { formSizeToCarbonModalSizeMap } from '@valtimo/process-link';
|
|
18
18
|
import moment from 'moment';
|
|
19
|
-
import {
|
|
20
|
-
import { BehaviorSubject, combineLatest, Subscription } from 'rxjs';
|
|
21
|
-
import { FORM_VIEW_MODEL_TOKEN } from '@valtimo/config';
|
|
22
|
-
import { RecentlyViewed16 } from '@carbon/icons';
|
|
19
|
+
import { BehaviorSubject, Subscription } from 'rxjs';
|
|
23
20
|
import { CAN_ASSIGN_TASK_PERMISSION, TASK_DETAIL_PERMISSION_RESOURCE } from '../../task-permissions';
|
|
21
|
+
import { TaskDetailIntermediateSaveComponent } from '../task-detail-intermediate-save/task-detail-intermediate-save.component';
|
|
24
22
|
import * as i0 from "@angular/core";
|
|
25
|
-
import * as i1 from "
|
|
26
|
-
import * as i2 from "@
|
|
27
|
-
import * as i3 from "@
|
|
28
|
-
import * as i4 from "
|
|
29
|
-
import * as i5 from "
|
|
30
|
-
import * as i6 from "@
|
|
31
|
-
import * as i7 from "
|
|
32
|
-
import * as i8 from "@
|
|
33
|
-
import * as i9 from "
|
|
34
|
-
import * as i10 from "
|
|
35
|
-
import * as i11 from "
|
|
36
|
-
import * as i12 from "@valtimo/access-control";
|
|
37
|
-
import * as i13 from "ngx-logger";
|
|
38
|
-
import * as i14 from "@angular/common";
|
|
39
|
-
import * as i15 from "../assign-user-to-task/assign-user-to-task.component";
|
|
23
|
+
import * as i1 from "@angular/router";
|
|
24
|
+
import * as i2 from "@ngx-translate/core";
|
|
25
|
+
import * as i3 from "@valtimo/access-control";
|
|
26
|
+
import * as i4 from "ngx-logger";
|
|
27
|
+
import * as i5 from "../../services";
|
|
28
|
+
import * as i6 from "@angular/common";
|
|
29
|
+
import * as i7 from "carbon-components-angular";
|
|
30
|
+
import * as i8 from "@valtimo/components";
|
|
31
|
+
import * as i9 from "../assign-user-to-task/assign-user-to-task.component";
|
|
32
|
+
import * as i10 from "../task-detail-content/task-detail-content.component";
|
|
33
|
+
import * as i11 from "../task-detail-intermediate-save/task-detail-intermediate-save.component";
|
|
40
34
|
moment.locale(localStorage.getItem('langKey') || '');
|
|
41
35
|
export class TaskDetailModalComponent {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
36
|
+
set modalSize(value) {
|
|
37
|
+
if (value)
|
|
38
|
+
this.size$.next(formSizeToCarbonModalSizeMap[value]);
|
|
39
|
+
}
|
|
40
|
+
constructor(router, translateService, permissionService, logger, taskIntermediateSaveService) {
|
|
45
41
|
this.router = router;
|
|
46
|
-
this.taskService = taskService;
|
|
47
|
-
this.userProviderService = userProviderService;
|
|
48
|
-
this.modalService = modalService;
|
|
49
|
-
this.stateService = stateService;
|
|
50
|
-
this.documentService = documentService;
|
|
51
42
|
this.translateService = translateService;
|
|
52
|
-
this.formViewModel = formViewModel;
|
|
53
|
-
this.taskIntermediateSaveService = taskIntermediateSaveService;
|
|
54
|
-
this.configService = configService;
|
|
55
|
-
this.iconService = iconService;
|
|
56
43
|
this.permissionService = permissionService;
|
|
57
44
|
this.logger = logger;
|
|
45
|
+
this.taskIntermediateSaveService = taskIntermediateSaveService;
|
|
58
46
|
this.formSubmit = new EventEmitter();
|
|
59
47
|
this.assignmentOfTaskChanged = new EventEmitter();
|
|
60
|
-
this.
|
|
61
|
-
this.currentIntermediateSave = null;
|
|
48
|
+
this.currentIntermediateSave$ = new BehaviorSubject(null);
|
|
62
49
|
this.task$ = new BehaviorSubject(null);
|
|
63
|
-
this.taskInstanceId$ = new BehaviorSubject(null);
|
|
64
|
-
this.formDefinition$ = new BehaviorSubject(undefined);
|
|
65
|
-
this.formDefinitionId$ = new BehaviorSubject(undefined);
|
|
66
|
-
this.formName$ = new BehaviorSubject(undefined);
|
|
67
50
|
this.submission$ = new BehaviorSubject({});
|
|
68
|
-
this.formFlowInstanceId$ = new BehaviorSubject(undefined);
|
|
69
51
|
this.page$ = new BehaviorSubject(null);
|
|
70
|
-
this.formioOptions$ = new BehaviorSubject(null);
|
|
71
|
-
this.errorMessage$ = new BehaviorSubject(undefined);
|
|
72
|
-
this.isAdmin$ = this.userProviderService
|
|
73
|
-
.getUserSubject()
|
|
74
|
-
.pipe(map(userIdentity => userIdentity?.roles?.includes('ROLE_ADMIN')));
|
|
75
|
-
this.formIoFormData$ = new BehaviorSubject(null);
|
|
76
|
-
this.loading$ = new BehaviorSubject(true);
|
|
77
52
|
this.showConfirmationModal$ = new BehaviorSubject(false);
|
|
78
|
-
this.
|
|
79
|
-
this.processLinkIsForm$ = this.taskProcessLinkType$.pipe(map(type => type === 'form'));
|
|
80
|
-
this.processLinkIsFormViewModel$ = this.taskProcessLinkType$.pipe(map(type => type === 'form-view-model'));
|
|
81
|
-
this.processLinkIsFormFlow$ = this.taskProcessLinkType$.pipe(map(type => type === 'form-flow'));
|
|
53
|
+
this.size$ = new BehaviorSubject('md');
|
|
82
54
|
this.canAssignUserToTask$ = new BehaviorSubject(false);
|
|
83
|
-
this.processLinkId$ = new BehaviorSubject(undefined);
|
|
84
55
|
this._subscriptions = new Subscription();
|
|
85
|
-
const options = new FormioOptionsImpl();
|
|
86
|
-
options.disableAlerts = true;
|
|
87
|
-
this.formioOptions$.next(options);
|
|
88
|
-
this.intermediateSaveEnabled = this.configService.featureToggles.enableIntermediateSave;
|
|
89
|
-
this.iconService.registerAll([RecentlyViewed16]);
|
|
90
|
-
this._subscriptions.add(this.canAssignUserToTask$.subscribe((canAssign) => {
|
|
91
|
-
this.logger.debug("Is user allowed to assign a user to Task", canAssign);
|
|
92
|
-
}));
|
|
93
56
|
}
|
|
94
57
|
ngOnInit() {
|
|
95
58
|
this._subscriptions.add(this.task$.subscribe(task => {
|
|
96
59
|
if (task) {
|
|
97
|
-
this.logger.debug(
|
|
98
|
-
this.permissionService
|
|
60
|
+
this.logger.debug('Checking if user allowed to assign a user to Task with id:', task.id);
|
|
61
|
+
this.permissionService
|
|
62
|
+
.requestPermission(CAN_ASSIGN_TASK_PERMISSION, {
|
|
99
63
|
resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
|
|
100
64
|
identifier: task.id,
|
|
101
|
-
})
|
|
65
|
+
})
|
|
66
|
+
.subscribe((allowed) => {
|
|
102
67
|
this.canAssignUserToTask$.next(allowed);
|
|
103
68
|
});
|
|
104
69
|
}
|
|
105
70
|
else {
|
|
106
|
-
this.logger.debug(
|
|
71
|
+
this.logger.debug('Reset is user allowed to assign a user to Task as task is null');
|
|
107
72
|
this.canAssignUserToTask$.next(false);
|
|
108
73
|
}
|
|
109
74
|
}));
|
|
110
75
|
}
|
|
111
|
-
|
|
112
|
-
this.
|
|
76
|
+
clearCurrentProgress() {
|
|
77
|
+
this._intermediateSaveComponent.clearCurrentProgress();
|
|
113
78
|
}
|
|
114
79
|
openTaskDetails(task) {
|
|
115
|
-
this.resetTaskProcessLinkType();
|
|
116
|
-
this.resetFormDefinition();
|
|
117
|
-
this.getTaskProcessLink(task.id);
|
|
118
|
-
this.setDocumentDefinitionNameInService(task);
|
|
119
|
-
const documentId = task.businessKey;
|
|
120
|
-
this.stateService.setDocumentId(documentId);
|
|
121
80
|
this.task$.next(task);
|
|
122
|
-
this.taskInstanceId$.next(task.id);
|
|
123
81
|
this.page$.next({
|
|
124
|
-
title: task
|
|
125
|
-
subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${task
|
|
82
|
+
title: task?.name,
|
|
83
|
+
subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${task?.created}`,
|
|
126
84
|
});
|
|
127
|
-
|
|
128
|
-
if (!this.taskProcessLinkType$.getValue()) {
|
|
129
|
-
this.openModal();
|
|
130
|
-
}
|
|
85
|
+
this.openModal();
|
|
131
86
|
}
|
|
132
87
|
gotoProcessLinkScreen() {
|
|
133
88
|
this.closeModal();
|
|
134
89
|
this.router.navigate(['process-links']);
|
|
135
90
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
this.formIoFormData$.next(event.data);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
onSubmit(submission) {
|
|
142
|
-
if (submission.data) {
|
|
143
|
-
this.formIoFormData$.next(submission.data);
|
|
144
|
-
}
|
|
145
|
-
combineLatest([this.processLinkId$, this.taskProcessLinkType$, this.task$])
|
|
146
|
-
.pipe(take(1))
|
|
147
|
-
.subscribe(([processLinkId, taskProcessLinkType, task]) => {
|
|
148
|
-
if (taskProcessLinkType === 'form') {
|
|
149
|
-
if (processLinkId) {
|
|
150
|
-
this.processLinkService
|
|
151
|
-
.submitForm(processLinkId, submission.data, task.businessKey, task.id)
|
|
152
|
-
.subscribe({
|
|
153
|
-
next: (_) => {
|
|
154
|
-
this.completeTask();
|
|
155
|
-
},
|
|
156
|
-
error: errors => {
|
|
157
|
-
this.form.showErrors(errors);
|
|
158
|
-
},
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
else if (taskProcessLinkType === 'form-view-model') {
|
|
163
|
-
this.completeTask();
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
completeTask() {
|
|
168
|
-
this.task$.pipe(take(1)).subscribe(task => {
|
|
169
|
-
this.toastr.success(`${task.name} ${this.translateService.instant('taskDetail.taskCompleted')}`);
|
|
170
|
-
this.closeModal();
|
|
171
|
-
this.task$.next(null);
|
|
172
|
-
this.formSubmit.emit();
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
resetFormDefinition() {
|
|
176
|
-
this.formDefinition$.next(null);
|
|
177
|
-
this.loading$.next(true);
|
|
178
|
-
}
|
|
179
|
-
getTaskProcessLink(taskId) {
|
|
180
|
-
this.taskService.getTaskProcessLink(taskId).subscribe({
|
|
181
|
-
next: res => {
|
|
182
|
-
if (res != null) {
|
|
183
|
-
switch (res?.type) {
|
|
184
|
-
case 'form':
|
|
185
|
-
this.taskProcessLinkType$.next('form');
|
|
186
|
-
this.processLinkId$.next(res.processLinkId);
|
|
187
|
-
if (this.intermediateSaveEnabled)
|
|
188
|
-
this.getCurrentProgress();
|
|
189
|
-
this.setFormDefinitionAndOpenModal(res.properties.prefilledForm);
|
|
190
|
-
break;
|
|
191
|
-
case 'form-flow':
|
|
192
|
-
this.taskProcessLinkType$.next('form-flow');
|
|
193
|
-
this.formFlowInstanceId$.next(res.properties.formFlowInstanceId);
|
|
194
|
-
break;
|
|
195
|
-
case 'form-view-model':
|
|
196
|
-
this.taskProcessLinkType$.next('form-view-model');
|
|
197
|
-
this.processLinkId$.next(res.processLinkId);
|
|
198
|
-
this.formDefinition$.next(res.properties.formDefinition);
|
|
199
|
-
this.formName$.next(res.properties.formName);
|
|
200
|
-
this.openModal();
|
|
201
|
-
this.setFormViewModelComponent();
|
|
202
|
-
break;
|
|
203
|
-
}
|
|
204
|
-
this.loading$.next(false);
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
error: _ => {
|
|
208
|
-
this.loading$.next(false);
|
|
209
|
-
},
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
resetTaskProcessLinkType() {
|
|
213
|
-
this.taskProcessLinkType$.next(null);
|
|
214
|
-
this.processLinkId$.next(null);
|
|
91
|
+
onCurrentIntermediateSaveEvent(value) {
|
|
92
|
+
this.currentIntermediateSave$.next(value);
|
|
215
93
|
}
|
|
216
|
-
|
|
217
|
-
this.
|
|
218
|
-
this.formDefinition$.next(formDefinition);
|
|
219
|
-
this.openModal();
|
|
220
|
-
}
|
|
221
|
-
setDocumentDefinitionNameInService(task) {
|
|
222
|
-
this.documentService
|
|
223
|
-
.getProcessDocumentDefinitionFromProcessInstanceId(task.processInstanceId)
|
|
224
|
-
.subscribe(processDocumentDefinition => {
|
|
225
|
-
const documentDefinitionName = processDocumentDefinition.id.documentDefinitionId.name;
|
|
226
|
-
this.modalService.setDocumentDefinitionName(documentDefinitionName);
|
|
227
|
-
this.stateService.setDocumentDefinitionName(documentDefinitionName);
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
setFormViewModelComponent() {
|
|
231
|
-
this.formViewModelDynamicContainer.clear();
|
|
232
|
-
if (!this.formViewModel)
|
|
233
|
-
return;
|
|
234
|
-
const formViewModelComponent = this.formViewModelDynamicContainer.createComponent(this.formViewModel.component);
|
|
235
|
-
formViewModelComponent.instance.form = this.formDefinition$.getValue();
|
|
236
|
-
formViewModelComponent.instance.formName = this.formName$.getValue();
|
|
237
|
-
formViewModelComponent.instance.taskInstanceId = this.taskInstanceId$.getValue();
|
|
238
|
-
formViewModelComponent.instance.isStartForm = false;
|
|
239
|
-
formViewModelComponent.instance.formSubmit.pipe(take(1)).subscribe(() => {
|
|
240
|
-
this.completeTask();
|
|
241
|
-
this.closeModal();
|
|
242
|
-
});
|
|
243
|
-
if (this.intermediateSaveEnabled) {
|
|
244
|
-
this._subscriptions.add(formViewModelComponent.instance.submission$.subscribe(submission => {
|
|
245
|
-
this.submission$.next(submission);
|
|
246
|
-
}));
|
|
247
|
-
this._subscriptions.add(this.submission$.pipe(distinctUntilChanged()).subscribe((submission) => {
|
|
248
|
-
if (submission?.data && Object.keys(submission.data).length === 0) {
|
|
249
|
-
formViewModelComponent.instance.submission = { data: {} };
|
|
250
|
-
}
|
|
251
|
-
}));
|
|
252
|
-
this.getCurrentProgress(formViewModelComponent);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
getCurrentProgress(formViewModelComponentRef) {
|
|
256
|
-
this.taskInstanceId$
|
|
257
|
-
.pipe(take(1), switchMap((taskInstanceId) => this.taskIntermediateSaveService.getIntermediateSubmission(taskInstanceId)))
|
|
258
|
-
.subscribe({
|
|
259
|
-
next: (intermediateSubmission) => {
|
|
260
|
-
this.submission$.next({ data: intermediateSubmission.submission });
|
|
261
|
-
this.currentIntermediateSave = this.formatIntermediateSubmission(intermediateSubmission);
|
|
262
|
-
if (formViewModelComponentRef) {
|
|
263
|
-
formViewModelComponentRef.instance.submission = {
|
|
264
|
-
data: intermediateSubmission.submission,
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
saveCurrentProgress() {
|
|
271
|
-
const intermediateSaveRequest = {
|
|
272
|
-
submission: this.submission$.getValue().data
|
|
273
|
-
? this.submission$.getValue().data
|
|
274
|
-
: this.formIoFormData$.getValue(),
|
|
275
|
-
taskInstanceId: this.taskInstanceId$.getValue(),
|
|
276
|
-
};
|
|
277
|
-
this.taskIntermediateSaveService
|
|
278
|
-
.storeIntermediateSubmission(intermediateSaveRequest)
|
|
279
|
-
.pipe(take(1))
|
|
280
|
-
.subscribe({
|
|
281
|
-
next: intermediateSubmission => {
|
|
282
|
-
this.toastr.success(this.translateService.instant('formManagement.intermediateSave.success'));
|
|
283
|
-
this.currentIntermediateSave = this.formatIntermediateSubmission(intermediateSubmission);
|
|
284
|
-
},
|
|
285
|
-
error: () => {
|
|
286
|
-
this.toastr.error(this.translateService.instant('formManagement.intermediateSave.error'));
|
|
287
|
-
},
|
|
288
|
-
});
|
|
94
|
+
onFormSubmit() {
|
|
95
|
+
this.formSubmit.emit();
|
|
289
96
|
}
|
|
290
|
-
|
|
291
|
-
this.
|
|
292
|
-
.pipe(take(1), switchMap((taskInstanceId) => this.taskIntermediateSaveService.clearIntermediateSubmission(taskInstanceId)))
|
|
293
|
-
.subscribe({
|
|
294
|
-
next: () => {
|
|
295
|
-
this.submission$.next({ data: {} });
|
|
296
|
-
this.currentIntermediateSave = null;
|
|
297
|
-
},
|
|
298
|
-
});
|
|
97
|
+
onShowModalEvent() {
|
|
98
|
+
this.showConfirmationModal$.next(true);
|
|
299
99
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
intermediateSubmission.editedOn = moment(new Date(intermediateSubmission.editedOn)).format('DD MMM YYYY HH:mm');
|
|
304
|
-
}
|
|
305
|
-
return intermediateSubmission;
|
|
100
|
+
closeModal() {
|
|
101
|
+
this._modal.open = false;
|
|
102
|
+
this.taskIntermediateSaveService.setSubmission({ data: {} });
|
|
306
103
|
}
|
|
307
104
|
openModal() {
|
|
308
|
-
this.
|
|
105
|
+
this._modal.open = true;
|
|
309
106
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
this._subscriptions.unsubscribe();
|
|
313
|
-
if (this.formFlow) {
|
|
314
|
-
this.formFlow.saveData();
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailModalComponent, deps: [{ token: i1.ToastrService }, { token: i2.ProcessLinkService }, { token: i3.Router }, { token: i4.TaskService }, { token: i5.UserProviderService }, { token: i6.ValtimoModalService }, { token: i6.FormIoStateService }, { token: i7.DocumentService }, { token: i8.TranslateService }, { token: FORM_VIEW_MODEL_TOKEN, optional: true }, { token: i9.TaskIntermediateSaveService }, { token: i10.ConfigService }, { token: i11.IconService }, { token: i12.PermissionService }, { token: i13.NGXLogger }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
318
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailModalComponent, selector: "valtimo-task-detail-modal", outputs: { formSubmit: "formSubmit", assignmentOfTaskChanged: "assignmentOfTaskChanged" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formFlow", first: true, predicate: ["formFlow"], descendants: true }, { propertyName: "modal", first: true, predicate: ["taskDetailModal"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-modal #taskDetailModal id=\"taskDetailModal\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"cds-modal-header\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n <p class=\"cds--modal-header__label cds--type-delta\" *ngIf=\"currentIntermediateSave\">\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n {{ 'formManagement.intermediateSave.on' | translate }}:\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n <div\n *ngIf=\"intermediateSaveEnabled && (formFlowInstanceId$ | async) === undefined\"\n class=\"save-buttons-margin\"\n >\n <cds-tooltip\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"'formManagement.intermediateSave.save' | translate\"\n >\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"save\"\n (click)=\"saveCurrentProgress()\"\n ></button>\n </cds-tooltip>\n <cds-tooltip\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"'formManagement.intermediateSave.clear' | translate\"\n >\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"recently-viewed\"\n [disabled]=\"!currentIntermediateSave\"\n (click)=\"showConfirmationModal$.next(true)\"\n ></button>\n </cds-tooltip>\n </div>\n </div>\n </cds-modal-header>\n <div\n body\n class=\"cds--modal-content pb-1\"\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async\n } as obs\"\n >\n <div *ngIf=\"obs.formDefinition && obs.processLinkIsForm\">\n <valtimo-form-io\n #form\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n </div>\n <div *ngIf=\"obs.processLinkIsFormFlow\">\n <valtimo-form-flow\n #formFlow\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask()\"\n ></valtimo-form-flow>\n </div>\n <div *ngIf=\"obs.loading\">\n <div class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n </div>\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage\n \"\n >\n <div class=\"bg-warning text-black mb-0 p-3 text-center\">\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n </div>\n <div *ngIf=\"obs.errorMessage\">\n <div class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n </div>\n </div>\n <div\n footer\n *ngIf=\"{\n formDefinition: formDefinition$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async\n } as obs\"\n >\n <div class=\"mb-0 p-3 text-center\" *ngIf=\"!obs.formDefinition && !obs.formFlowInstanceId\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoProcessLinkScreen()\"\n id=\"process-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n </div>\n <div body class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <ng-container *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async\n } as obs\">\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n </ng-container>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}.cds-modal-header{width:100%;display:flex;justify-content:space-between}.title-container{width:50%}.save-buttons-margin{margin-top:-15px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }, { kind: "component", type: i11.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i11.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete"] }, { kind: "directive", type: i11.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i11.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i11.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "component", type: i6.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i15.AssignUserToTaskComponent, selector: "valtimo-assign-user-to-task", inputs: ["taskId", "assigneeId"], outputs: ["assignmentOfTaskChanged"] }, { kind: "pipe", type: i14.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
107
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailModalComponent, deps: [{ token: i1.Router }, { token: i2.TranslateService }, { token: i3.PermissionService }, { token: i4.NGXLogger }, { token: i5.TaskIntermediateSaveService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
108
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailModalComponent, selector: "valtimo-task-detail-modal", inputs: { modalSize: "modalSize" }, outputs: { formSubmit: "formSubmit", assignmentOfTaskChanged: "assignmentOfTaskChanged" }, viewQueries: [{ propertyName: "_modal", first: true, predicate: ["taskDetailModal"], descendants: true }, { propertyName: "_intermediateSaveComponent", first: true, predicate: TaskDetailIntermediateSaveComponent, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal #taskDetailModal id=\"taskDetailModal\" [size]=\"size$ | async\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n\n <p\n class=\"cds--modal-header__label cds--type-delta\"\n *ngIf=\"currentIntermediateSave$ | async as currentIntermediateSave\"\n >\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n\n <valtimo-task-detail-intermediate-save\n class=\"save-buttons-margin\"\n [task]=\"task$ | async\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n (showModalEvent)=\"onShowModalEvent()\"\n ></valtimo-task-detail-intermediate-save>\n </cds-modal-header>\n\n <div body class=\"cds--modal-content pb-1\">\n <valtimo-task-detail-content\n [task]=\"task$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (closeModalEvent)=\"closeModal()\"\n ></valtimo-task-detail-content>\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <ng-container\n *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n >\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n </ng-container>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}cds-modal-header .cds--modal-header{display:flex;justify-content:space-between}.save-buttons-margin{margin-top:-15px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i7.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i8.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i9.AssignUserToTaskComponent, selector: "valtimo-assign-user-to-task", inputs: ["taskId", "assigneeId"], outputs: ["assignmentOfTaskChanged"] }, { kind: "component", type: i10.TaskDetailContentComponent, selector: "valtimo-task-detail-content", inputs: ["task"], outputs: ["closeModalEvent", "formSubmit", "activeChange"] }, { kind: "component", type: i11.TaskDetailIntermediateSaveComponent, selector: "valtimo-task-detail-intermediate-save", inputs: ["task"], outputs: ["currentIntermediateSaveEvent", "showModalEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
319
109
|
}
|
|
320
110
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailModalComponent, decorators: [{
|
|
321
111
|
type: Component,
|
|
322
|
-
args: [{ selector: 'valtimo-task-detail-modal', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-modal #taskDetailModal id=\"taskDetailModal\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"
|
|
323
|
-
}], ctorParameters: () => [{ type: i1.
|
|
324
|
-
type: Optional
|
|
325
|
-
}, {
|
|
326
|
-
type: Inject,
|
|
327
|
-
args: [FORM_VIEW_MODEL_TOKEN]
|
|
328
|
-
}] }, { type: i9.TaskIntermediateSaveService }, { type: i10.ConfigService }, { type: i11.IconService }, { type: i12.PermissionService }, { type: i13.NGXLogger }], propDecorators: { form: [{
|
|
329
|
-
type: ViewChild,
|
|
330
|
-
args: ['form']
|
|
331
|
-
}], formFlow: [{
|
|
332
|
-
type: ViewChild,
|
|
333
|
-
args: ['formFlow']
|
|
334
|
-
}], modal: [{
|
|
112
|
+
args: [{ selector: 'valtimo-task-detail-modal', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal #taskDetailModal id=\"taskDetailModal\" [size]=\"size$ | async\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n\n <p\n class=\"cds--modal-header__label cds--type-delta\"\n *ngIf=\"currentIntermediateSave$ | async as currentIntermediateSave\"\n >\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n\n <valtimo-task-detail-intermediate-save\n class=\"save-buttons-margin\"\n [task]=\"task$ | async\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n (showModalEvent)=\"onShowModalEvent()\"\n ></valtimo-task-detail-intermediate-save>\n </cds-modal-header>\n\n <div body class=\"cds--modal-content pb-1\">\n <valtimo-task-detail-content\n [task]=\"task$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (closeModalEvent)=\"closeModal()\"\n ></valtimo-task-detail-content>\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <ng-container\n *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n >\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n </ng-container>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}cds-modal-header .cds--modal-header{display:flex;justify-content:space-between}.save-buttons-margin{margin-top:-15px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
113
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.TranslateService }, { type: i3.PermissionService }, { type: i4.NGXLogger }, { type: i5.TaskIntermediateSaveService }], propDecorators: { _modal: [{
|
|
335
114
|
type: ViewChild,
|
|
336
115
|
args: ['taskDetailModal']
|
|
337
|
-
}],
|
|
116
|
+
}], _intermediateSaveComponent: [{
|
|
338
117
|
type: ViewChild,
|
|
339
|
-
args: [
|
|
118
|
+
args: [TaskDetailIntermediateSaveComponent]
|
|
340
119
|
}], formSubmit: [{
|
|
341
120
|
type: Output
|
|
342
121
|
}], assignmentOfTaskChanged: [{
|
|
343
122
|
type: Output
|
|
123
|
+
}], modalSize: [{
|
|
124
|
+
type: Input
|
|
344
125
|
}] } });
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kZXRhaWwtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby90YXNrL3NyYy9saWIvY29tcG9uZW50cy90YXNrLWRldGFpbC1tb2RhbC90YXNrLWRldGFpbC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stZGV0YWlsLW1vZGFsL3Rhc2stZGV0YWlsLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUVOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVMLGlCQUFpQixHQUtsQixNQUFNLHFCQUFxQixDQUFDO0FBUzdCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJOUUsT0FBTyxFQUFnQixxQkFBcUIsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUdwRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFL0MsT0FBTyxFQUFDLDBCQUEwQixFQUFFLCtCQUErQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR25HLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENB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QixpQkFBaUIsQ0FBQyxJQUFJOzswQkF1RGxDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCO3FNQXBEeEIsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQUNNLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDUyxLQUFLO3NCQUFsQyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFFckIsNkJBQTZCO3NCQURuQyxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBRWpFLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBPbkRlc3Ryb3ksIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEZvcm1pb0NvbXBvbmVudCxcbiAgRm9ybWlvT3B0aW9uc0ltcGwsXG4gIEZvcm1Jb1N0YXRlU2VydmljZSxcbiAgRm9ybWlvU3VibWlzc2lvbixcbiAgVmFsdGltb0Zvcm1pb09wdGlvbnMsXG4gIFZhbHRpbW9Nb2RhbFNlcnZpY2UsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgSW50ZXJtZWRpYXRlU2F2ZVJlcXVlc3QsXG4gIEludGVybWVkaWF0ZVN1Ym1pc3Npb24sXG4gIFRhc2ssXG4gIFRhc2tQcm9jZXNzTGlua1R5cGUsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0Zvcm1GbG93Q29tcG9uZW50LCBGb3JtU3VibWlzc2lvblJlc3VsdCwgUHJvY2Vzc0xpbmtTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9wcm9jZXNzLWxpbmsnO1xuaW1wb3J0IHtGb3JtaW9Gb3JtfSBmcm9tICdAZm9ybWlvL2FuZ3VsYXInO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtUb2FzdHJTZXJ2aWNlfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1Rhc2tTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXNrLnNlcnZpY2UnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlLCBGT1JNX1ZJRVdfTU9ERUxfVE9LRU4sIEZvcm1WaWV3TW9kZWx9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1Rhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFzay1pbnRlcm1lZGlhdGUtc2F2ZS5zZXJ2aWNlJztcbmltcG9ydCB7SWNvblNlcnZpY2UsIE1vZGFsfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7UmVjZW50bHlWaWV3ZWQxNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5pbXBvcnQge0NBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLCBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFfSBmcm9tICcuLi8uLi90YXNrLXBlcm1pc3Npb25zJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcblxubW9tZW50LmxvY2FsZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ0tleScpIHx8ICcnKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby10YXNrLWRldGFpbC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXNrLWRldGFpbC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rhc2stZGV0YWlsLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFRhc2tEZXRhaWxNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnZm9ybScpIGZvcm06IEZvcm1pb0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZm9ybUZsb3cnKSBmb3JtRmxvdzogRm9ybUZsb3dDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3Rhc2tEZXRhaWxNb2RhbCcpIG1vZGFsOiBNb2RhbDtcbiAgQFZpZXdDaGlsZCgnZm9ybVZpZXdNb2RlbENvbXBvbmVudCcsIHtzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICBwdWJsaWMgZm9ybVZpZXdNb2RlbER5bmFtaWNDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIEBPdXRwdXQoKSBmb3JtU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYXNzaWdubWVudE9mVGFza0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGludGVybWVkaWF0ZVNhdmVFbmFibGVkID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZTogSW50ZXJtZWRpYXRlU3VibWlzc2lvbiA9IG51bGw7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhc2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYXNrIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSB0YXNrSW5zdGFuY2VJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtRGVmaW5pdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1pb0Zvcm0+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtRGVmaW5pdGlvbklkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybU5hbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtRmxvd0luc3RhbmNlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1pb09wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWYWx0aW1vRm9ybWlvT3B0aW9ucz4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBlcnJvck1lc3NhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBpc0FkbWluJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMudXNlclByb3ZpZGVyU2VydmljZVxuICAgIC5nZXRVc2VyU3ViamVjdCgpXG4gICAgLnBpcGUobWFwKHVzZXJJZGVudGl0eSA9PiB1c2VySWRlbnRpdHk/LnJvbGVzPy5pbmNsdWRlcygnUk9MRV9BRE1JTicpKSk7XG4gIHB1YmxpYyByZWFkb25seSBmb3JtSW9Gb3JtRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93Q29uZmlybWF0aW9uTW9kYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0YXNrUHJvY2Vzc0xpbmtUeXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFza1Byb2Nlc3NMaW5rVHlwZSB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtJc0Zvcm0kID0gdGhpcy50YXNrUHJvY2Vzc0xpbmtUeXBlJC5waXBlKG1hcCh0eXBlID0+IHR5cGUgPT09ICdmb3JtJykpO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtJc0Zvcm1WaWV3TW9kZWwkID0gdGhpcy50YXNrUHJvY2Vzc0xpbmtUeXBlJC5waXBlKFxuICAgIG1hcCh0eXBlID0+IHR5cGUgPT09ICdmb3JtLXZpZXctbW9kZWwnKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvY2Vzc0xpbmtJc0Zvcm1GbG93JCA9IHRoaXMudGFza1Byb2Nlc3NMaW5rVHlwZSQucGlwZShcbiAgICBtYXAodHlwZSA9PiB0eXBlID09PSAnZm9ybS1mbG93JylcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhbkFzc2lnblVzZXJUb1Rhc2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NMaW5rSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NMaW5rU2VydmljZTogUHJvY2Vzc0xpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrU2VydmljZTogVGFza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBWYWx0aW1vTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBGb3JtSW9TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGT1JNX1ZJRVdfTU9ERUxfVE9LRU4pIHByaXZhdGUgcmVhZG9ubHkgZm9ybVZpZXdNb2RlbDogRm9ybVZpZXdNb2RlbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZTogVGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTkdYTG9nZ2VyLFxuICApIHtcbiAgICBjb25zdCBvcHRpb25zID0gbmV3IEZvcm1pb09wdGlvbnNJbXBsKCk7XG4gICAgb3B0aW9ucy5kaXNhYmxlQWxlcnRzID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1pb09wdGlvbnMkLm5leHQob3B0aW9ucyk7XG5cbiAgICB0aGlzLmludGVybWVkaWF0ZVNhdmVFbmFibGVkID0gdGhpcy5jb25maWdTZXJ2aWNlLmZlYXR1cmVUb2dnbGVzLmVuYWJsZUludGVybWVkaWF0ZVNhdmU7XG5cbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtSZWNlbnRseVZpZXdlZDE2XSk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuY2FuQXNzaWduVXNlclRvVGFzayQuc3Vic2NyaWJlKChjYW5Bc3NpZ24pID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJJcyB1c2VyIGFsbG93ZWQgdG8gYXNzaWduIGEgdXNlciB0byBUYXNrXCIsIGNhbkFzc2lnbik7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzayQuc3Vic2NyaWJlKHRhc2sgPT4ge1xuICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiQ2hlY2tpbmcgaWYgdXNlciBhbGxvd2VkIHRvIGFzc2lnbiBhIHVzZXIgdG8gVGFzayB3aXRoIGlkOlwiLCB0YXNrLmlkKTtcbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLCB7XG4gICAgICAgICAgICByZXNvdXJjZTogVEFTS19ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRS50YXNrLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogdGFzay5pZCxcbiAgICAgICAgICB9KS5zdWJzY3JpYmUoIChhbGxvd2VkOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQoYWxsb3dlZClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiUmVzZXQgaXMgdXNlciBhbGxvd2VkIHRvIGFzc2lnbiBhIHVzZXIgdG8gVGFzayBhcyB0YXNrIGlzIG51bGxcIik7XG4gICAgICAgICAgdGhpcy5jYW5Bc3NpZ25Vc2VyVG9UYXNrJC5uZXh0KGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb3BlblRhc2tEZXRhaWxzKHRhc2s6IFRhc2spOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0VGFza1Byb2Nlc3NMaW5rVHlwZSgpO1xuICAgIHRoaXMucmVzZXRGb3JtRGVmaW5pdGlvbigpO1xuICAgIHRoaXMuZ2V0VGFza1Byb2Nlc3NMaW5rKHRhc2suaWQpO1xuICAgIHRoaXMuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZUluU2VydmljZSh0YXNrKTtcbiAgICBjb25zdCBkb2N1bWVudElkID0gdGFzay5idXNpbmVzc0tleTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXREb2N1bWVudElkKGRvY3VtZW50SWQpO1xuXG4gICAgdGhpcy50YXNrJC5uZXh0KHRhc2spO1xuICAgIHRoaXMudGFza0luc3RhbmNlSWQkLm5leHQodGFzay5pZCk7XG4gICAgdGhpcy5wYWdlJC5uZXh0KHtcbiAgICAgIHRpdGxlOiB0YXNrLm5hbWUsXG4gICAgICBzdWJ0aXRsZTogYCR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3Rhc2tEZXRhaWwudGFza0NyZWF0ZWQnKX0gJHt0YXNrLmNyZWF0ZWR9YCxcbiAgICB9KTtcblxuICAgIC8vb25seSBsb2FkIGZyb20gZm9ybWxpbmsgd2hlbiBwcm9jZXNzIGxpbmsgZmFpbGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIGlmICghdGhpcy50YXNrUHJvY2Vzc0xpbmtUeXBlJC5nZXRWYWx1ZSgpKSB7XG4gICAgICB0aGlzLm9wZW5Nb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnb3RvUHJvY2Vzc0xpbmtTY3JlZW4oKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydwcm9jZXNzLWxpbmtzJ10pO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuZGF0YSkge1xuICAgICAgdGhpcy5mb3JtSW9Gb3JtRGF0YSQubmV4dChldmVudC5kYXRhKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25TdWJtaXQoc3VibWlzc2lvbjogRm9ybWlvU3VibWlzc2lvbik6IHZvaWQge1xuICAgIGlmIChzdWJtaXNzaW9uLmRhdGEpIHtcbiAgICAgIHRoaXMuZm9ybUlvRm9ybURhdGEkLm5leHQoc3VibWlzc2lvbi5kYXRhKTtcbiAgICB9XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnByb2Nlc3NMaW5rSWQkLCB0aGlzLnRhc2tQcm9jZXNzTGlua1R5cGUkLCB0aGlzLnRhc2skXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChbcHJvY2Vzc0xpbmtJZCwgdGFza1Byb2Nlc3NMaW5rVHlwZSwgdGFza10pID0+IHtcbiAgICAgICAgaWYgKHRhc2tQcm9jZXNzTGlua1R5cGUgPT09ICdmb3JtJykge1xuICAgICAgICAgIGlmIChwcm9jZXNzTGlua0lkKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NMaW5rU2VydmljZVxuICAgICAgICAgICAgICAuc3VibWl0Rm9ybShwcm9jZXNzTGlua0lkLCBzdWJtaXNzaW9uLmRhdGEsIHRhc2suYnVzaW5lc3NLZXksIHRhc2suaWQpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChfOiBGb3JtU3VibWlzc2lvblJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVRhc2soKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcnMgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNob3dFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGFza1Byb2Nlc3NMaW5rVHlwZSA9PT0gJ2Zvcm0tdmlldy1tb2RlbCcpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlVGFzaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb21wbGV0ZVRhc2soKTogdm9pZCB7XG4gICAgdGhpcy50YXNrJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh0YXNrID0+IHtcbiAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXG4gICAgICAgIGAke3Rhc2submFtZX0gJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndGFza0RldGFpbC50YXNrQ29tcGxldGVkJyl9YFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICAgICAgdGhpcy50YXNrJC5uZXh0KG51bGwpO1xuICAgICAgdGhpcy5mb3JtU3VibWl0LmVtaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGb3JtRGVmaW5pdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1EZWZpbml0aW9uJC5uZXh0KG51bGwpO1xuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFza1Byb2Nlc3NMaW5rKHRhc2tJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50YXNrU2VydmljZS5nZXRUYXNrUHJvY2Vzc0xpbmsodGFza0lkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogcmVzID0+IHtcbiAgICAgICAgaWYgKHJlcyAhPSBudWxsKSB7XG4gICAgICAgICAgc3dpdGNoIChyZXM/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICAgICAgICB0aGlzLnRhc2tQcm9jZXNzTGlua1R5cGUkLm5leHQoJ2Zvcm0nKTtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTGlua0lkJC5uZXh0KHJlcy5wcm9jZXNzTGlua0lkKTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJtZWRpYXRlU2F2ZUVuYWJsZWQpIHRoaXMuZ2V0Q3VycmVudFByb2dyZXNzKCk7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybURlZmluaXRpb25BbmRPcGVuTW9kYWwocmVzLnByb3BlcnRpZXMucHJlZmlsbGVkRm9ybSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZm9ybS1mbG93JzpcbiAgICAgICAgICAgICAgdGhpcy50YXNrUHJvY2Vzc0xpbmtUeXBlJC5uZXh0KCdmb3JtLWZsb3cnKTtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRmxvd0luc3RhbmNlSWQkLm5leHQocmVzLnByb3BlcnRpZXMuZm9ybUZsb3dJbnN0YW5jZUlkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmb3JtLXZpZXctbW9kZWwnOlxuICAgICAgICAgICAgICB0aGlzLnRhc2tQcm9jZXNzTGlua1R5cGUkLm5leHQoJ2Zvcm0tdmlldy1tb2RlbCcpO1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NMaW5rSWQkLm5leHQocmVzLnByb2Nlc3NMaW5rSWQpO1xuICAgICAgICAgICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJC5uZXh0KHJlcy5wcm9wZXJ0aWVzLmZvcm1EZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtTmFtZSQubmV4dChyZXMucHJvcGVydGllcy5mb3JtTmFtZSk7XG4gICAgICAgICAgICAgIHRoaXMub3Blbk1vZGFsKCk7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVZpZXdNb2RlbENvbXBvbmVudCgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBfID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0VGFza1Byb2Nlc3NMaW5rVHlwZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhc2tQcm9jZXNzTGlua1R5cGUkLm5leHQobnVsbCk7XG4gICAgdGhpcy5wcm9jZXNzTGlua0lkJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb3JtRGVmaW5pdGlvbkFuZE9wZW5Nb2RhbChmb3JtRGVmaW5pdGlvbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy50YXNrUHJvY2Vzc0xpbmtUeXBlJC5uZXh0KCdmb3JtJyk7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChmb3JtRGVmaW5pdGlvbik7XG4gICAgdGhpcy5vcGVuTW9kYWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZUluU2VydmljZSh0YXNrOiBUYXNrKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5nZXRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uRnJvbVByb2Nlc3NJbnN0YW5jZUlkKHRhc2sucHJvY2Vzc0luc3RhbmNlSWQpXG4gICAgICAuc3Vic2NyaWJlKHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPT4ge1xuICAgICAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb25OYW1lID0gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbi5pZC5kb2N1bWVudERlZmluaXRpb25JZC5uYW1lO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zZXREb2N1bWVudERlZmluaXRpb25OYW1lKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXREb2N1bWVudERlZmluaXRpb25OYW1lKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1WaWV3TW9kZWxDb21wb25lbnQoKSB7XG4gICAgdGhpcy5mb3JtVmlld01vZGVsRHluYW1pY0NvbnRhaW5lci5jbGVhcigpO1xuICAgIGlmICghdGhpcy5mb3JtVmlld01vZGVsKSByZXR1cm47XG4gICAgY29uc3QgZm9ybVZpZXdNb2RlbENvbXBvbmVudCA9IHRoaXMuZm9ybVZpZXdNb2RlbER5bmFtaWNDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgdGhpcy5mb3JtVmlld01vZGVsLmNvbXBvbmVudFxuICAgICk7XG4gICAgZm9ybVZpZXdNb2RlbENvbXBvbmVudC5pbnN0YW5jZS5mb3JtID0gdGhpcy5mb3JtRGVmaW5pdGlvbiQuZ2V0VmFsdWUoKTtcbiAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZSQuZ2V0VmFsdWUoKTtcbiAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLnRhc2tJbnN0YW5jZUlkID0gdGhpcy50YXNrSW5zdGFuY2VJZCQuZ2V0VmFsdWUoKTtcbiAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmlzU3RhcnRGb3JtID0gZmFsc2U7XG5cbiAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLmZvcm1TdWJtaXQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb21wbGV0ZVRhc2soKTtcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaW50ZXJtZWRpYXRlU2F2ZUVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLnN1Ym1pc3Npb24kLnN1YnNjcmliZShzdWJtaXNzaW9uID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dChzdWJtaXNzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICB0aGlzLnN1Ym1pc3Npb24kLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKChzdWJtaXNzaW9uPykgPT4ge1xuICAgICAgICAgIGlmIChzdWJtaXNzaW9uPy5kYXRhICYmIE9iamVjdC5rZXlzKHN1Ym1pc3Npb24uZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50Lmluc3RhbmNlLnN1Ym1pc3Npb24gPSB7ZGF0YToge319O1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIHRoaXMuZ2V0Q3VycmVudFByb2dyZXNzKGZvcm1WaWV3TW9kZWxDb21wb25lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFByb2dyZXNzKGZvcm1WaWV3TW9kZWxDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8YW55Pik6IHZvaWQge1xuICAgIHRoaXMudGFza0luc3RhbmNlSWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKCh0YXNrSW5zdGFuY2VJZDogc3RyaW5nKSA9PlxuICAgICAgICAgIHRoaXMudGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlLmdldEludGVybWVkaWF0ZVN1Ym1pc3Npb24odGFza0luc3RhbmNlSWQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoaW50ZXJtZWRpYXRlU3VibWlzc2lvbjogSW50ZXJtZWRpYXRlU3VibWlzc2lvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbiQubmV4dCh7ZGF0YTogaW50ZXJtZWRpYXRlU3VibWlzc2lvbi5zdWJtaXNzaW9ufSk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW50ZXJtZWRpYXRlU2F2ZSA9IHRoaXMuZm9ybWF0SW50ZXJtZWRpYXRlU3VibWlzc2lvbihpbnRlcm1lZGlhdGVTdWJtaXNzaW9uKTtcblxuICAgICAgICAgIGlmIChmb3JtVmlld01vZGVsQ29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICBmb3JtVmlld01vZGVsQ29tcG9uZW50UmVmLmluc3RhbmNlLnN1Ym1pc3Npb24gPSB7XG4gICAgICAgICAgICAgIGRhdGE6IGludGVybWVkaWF0ZVN1Ym1pc3Npb24uc3VibWlzc2lvbixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2F2ZUN1cnJlbnRQcm9ncmVzcygpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcm1lZGlhdGVTYXZlUmVxdWVzdDogSW50ZXJtZWRpYXRlU2F2ZVJlcXVlc3QgPSB7XG4gICAgICBzdWJtaXNzaW9uOiB0aGlzLnN1Ym1pc3Npb24kLmdldFZhbHVlKCkuZGF0YVxuICAgICAgICA/IHRoaXMuc3VibWlzc2lvbiQuZ2V0VmFsdWUoKS5kYXRhXG4gICAgICAgIDogdGhpcy5mb3JtSW9Gb3JtRGF0YSQuZ2V0VmFsdWUoKSxcbiAgICAgIHRhc2tJbnN0YW5jZUlkOiB0aGlzLnRhc2tJbnN0YW5jZUlkJC5nZXRWYWx1ZSgpLFxuICAgIH07XG5cbiAgICB0aGlzLnRhc2tJbnRlcm1lZGlhdGVTYXZlU2VydmljZVxuICAgICAgLnN0b3JlSW50ZXJtZWRpYXRlU3VibWlzc2lvbihpbnRlcm1lZGlhdGVTYXZlUmVxdWVzdClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogaW50ZXJtZWRpYXRlU3VibWlzc2lvbiA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdmb3JtTWFuYWdlbWVudC5pbnRlcm1lZGlhdGVTYXZlLnN1Y2Nlc3MnKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW50ZXJtZWRpYXRlU2F2ZSA9IHRoaXMuZm9ybWF0SW50ZXJtZWRpYXRlU3VibWlzc2lvbihpbnRlcm1lZGlhdGVTdWJtaXNzaW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZm9ybU1hbmFnZW1lbnQuaW50ZXJtZWRpYXRlU2F2ZS5lcnJvcicpKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyQ3VycmVudFByb2dyZXNzKCk6IHZvaWQge1xuICAgIHRoaXMudGFza0luc3RhbmNlSWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKCh0YXNrSW5zdGFuY2VJZDogc3RyaW5nKSA9PlxuICAgICAgICAgIHRoaXMudGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlLmNsZWFySW50ZXJtZWRpYXRlU3VibWlzc2lvbih0YXNrSW5zdGFuY2VJZClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb24kLm5leHQoe2RhdGE6IHt9fSk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW50ZXJtZWRpYXRlU2F2ZSA9IG51bGw7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0SW50ZXJtZWRpYXRlU3VibWlzc2lvbihcbiAgICBpbnRlcm1lZGlhdGVTdWJtaXNzaW9uOiBJbnRlcm1lZGlhdGVTdWJtaXNzaW9uXG4gICk6IEludGVybWVkaWF0ZVN1Ym1pc3Npb24ge1xuICAgIGludGVybWVkaWF0ZVN1Ym1pc3Npb24uY3JlYXRlZE9uID0gbW9tZW50KGludGVybWVkaWF0ZVN1Ym1pc3Npb24uY3JlYXRlZE9uKS5mb3JtYXQoXG4gICAgICAnREQgTU1NIFlZWVkgSEg6bW0nXG4gICAgKTtcbiAgICBpZiAoaW50ZXJtZWRpYXRlU3VibWlzc2lvbi5lZGl0ZWRPbikge1xuICAgICAgaW50ZXJtZWRpYXRlU3VibWlzc2lvbi5lZGl0ZWRPbiA9IG1vbWVudChuZXcgRGF0ZShpbnRlcm1lZGlhdGVTdWJtaXNzaW9uLmVkaXRlZE9uKSkuZm9ybWF0KFxuICAgICAgICAnREQgTU1NIFlZWVkgSEg6bW0nXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcm1lZGlhdGVTdWJtaXNzaW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbC5vcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWwub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLmZvcm1GbG93KSB7XG4gICAgICB0aGlzLmZvcm1GbG93LnNhdmVEYXRhKCk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG48Y2RzLW1vZGFsICN0YXNrRGV0YWlsTW9kYWwgaWQ9XCJ0YXNrRGV0YWlsTW9kYWxcIj5cbiAgPGNkcy1tb2RhbC1oZWFkZXIgKGNsb3NlU2VsZWN0KT1cImNsb3NlTW9kYWwoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjZHMtbW9kYWwtaGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiY2RzLS1tb2RhbC1oZWFkZXJfX2hlYWRpbmcgY2RzLS10eXBlLWJldGFcIj57eyAocGFnZSQgfCBhc3luYyk/LnRpdGxlIH19PC9wPlxuICAgICAgICA8cCBjbGFzcz1cImNkcy0tbW9kYWwtaGVhZGVyX19sYWJlbCBjZHMtLXR5cGUtZGVsdGFcIj57eyAocGFnZSQgfCBhc3luYyk/LnN1YnRpdGxlIH19PC9wPlxuICAgICAgICA8cCBjbGFzcz1cImNkcy0tbW9kYWwtaGVhZGVyX19sYWJlbCBjZHMtLXR5cGUtZGVsdGFcIiAqbmdJZj1cImN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlXCI+XG4gICAgICAgICAge3sgJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUubGFzdFNhdmVkQnknIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZT8uZWRpdGVkQnlcbiAgICAgICAgICAgICAgPyBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZT8uZWRpdGVkQnlcbiAgICAgICAgICAgICAgOiBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZS5jcmVhdGVkQnlcbiAgICAgICAgICB9fVxuICAgICAgICAgIHt7ICdmb3JtTWFuYWdlbWVudC5pbnRlcm1lZGlhdGVTYXZlLm9uJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICB7e1xuICAgICAgICAgICAgY3VycmVudEludGVybWVkaWF0ZVNhdmU/LmVkaXRlZE9uXG4gICAgICAgICAgICAgID8gY3VycmVudEludGVybWVkaWF0ZVNhdmU/LmVkaXRlZE9uXG4gICAgICAgICAgICAgIDogY3VycmVudEludGVybWVkaWF0ZVNhdmUuY3JlYXRlZE9uXG4gICAgICAgICAgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXNzaWduVXNlclRvVGFza1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiaW50ZXJtZWRpYXRlU2F2ZUVuYWJsZWQgJiYgKGZvcm1GbG93SW5zdGFuY2VJZCQgfCBhc3luYykgPT09IHVuZGVmaW5lZFwiXG4gICAgICAgIGNsYXNzPVwic2F2ZS1idXR0b25zLW1hcmdpblwiXG4gICAgICA+XG4gICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgIFtjYXJldF09XCJ0cnVlXCJcbiAgICAgICAgICBlbnRlckRlbGF5TXM9XCIwXCJcbiAgICAgICAgICBsZWF2ZURlbGF5TXM9XCIwXCJcbiAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUuc2F2ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgICAgICAgaWNvbk9ubHk9XCJ0cnVlXCJcbiAgICAgICAgICAgIGNkc0ljb249XCJzYXZlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlQ3VycmVudFByb2dyZXNzKClcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgW2NhcmV0XT1cInRydWVcIlxuICAgICAgICAgIGVudGVyRGVsYXlNcz1cIjBcIlxuICAgICAgICAgIGxlYXZlRGVsYXlNcz1cIjBcIlxuICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZm9ybU1hbmFnZW1lbnQuaW50ZXJtZWRpYXRlU2F2ZS5jbGVhcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgICAgICAgaWNvbk9ubHk9XCJ0cnVlXCJcbiAgICAgICAgICAgIGNkc0ljb249XCJyZWNlbnRseS12aWV3ZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsJC5uZXh0KHRydWUpXCJcbiAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9jZHMtbW9kYWwtaGVhZGVyPlxuICA8ZGl2XG4gICAgYm9keVxuICAgIGNsYXNzPVwiY2RzLS1tb2RhbC1jb250ZW50IHBiLTFcIlxuICAgICpuZ0lmPVwie1xuICAgICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luYyxcbiAgICAgIHBhZ2U6IHBhZ2UkIHwgYXN5bmMsXG4gICAgICB0YXNrOiB0YXNrJCB8IGFzeW5jLFxuICAgICAgdGFza0lkOiB0YXNrSW5zdGFuY2VJZCQgfCBhc3luYyxcbiAgICAgIGZvcm1EZWZpbml0aW9uOiBmb3JtRGVmaW5pdGlvbiQgfCBhc3luYyxcbiAgICAgIGZvcm1EZWZpbml0aW9uSWQ6IGZvcm1EZWZpbml0aW9uSWQkIHwgYXN5bmMsXG4gICAgICBmb3JtTmFtZTogZm9ybU5hbWUkIHwgYXN5bmMsXG4gICAgICBmb3JtSW9Gb3JtRGF0YTogZm9ybUlvRm9ybURhdGEkIHwgYXN5bmMsXG4gICAgICBzdWJtaXNzaW9uOiBzdWJtaXNzaW9uJCB8IGFzeW5jLFxuICAgICAgcHJvY2Vzc0xpbmtJc0Zvcm06IHByb2Nlc3NMaW5rSXNGb3JtJCB8IGFzeW5jLFxuICAgICAgcHJvY2Vzc0xpbmtJc0Zvcm1WaWV3TW9kZWw6IHByb2Nlc3NMaW5rSXNGb3JtVmlld01vZGVsJCB8IGFzeW5jLFxuICAgICAgZm9ybWlvT3B0aW9uczogZm9ybWlvT3B0aW9ucyQgfCBhc3luYyxcbiAgICAgIHByb2Nlc3NMaW5rSXNGb3JtRmxvdzogcHJvY2Vzc0xpbmtJc0Zvcm1GbG93JCB8IGFzeW5jLFxuICAgICAgZm9ybUZsb3dJbnN0YW5jZUlkOiBmb3JtRmxvd0luc3RhbmNlSWQkIHwgYXN5bmMsXG4gICAgICBlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZSQgfCBhc3luY1xuICAgIH0gYXMgb2JzXCJcbiAgPlxuICAgIDxkaXYgKm5nSWY9XCJvYnMuZm9ybURlZmluaXRpb24gJiYgb2JzLnByb2Nlc3NMaW5rSXNGb3JtXCI+XG4gICAgICA8dmFsdGltby1mb3JtLWlvXG4gICAgICAgICNmb3JtXG4gICAgICAgIFtmb3JtXT1cIm9icy5mb3JtRGVmaW5pdGlvblwiXG4gICAgICAgIFtzdWJtaXNzaW9uXT1cIm9icy5zdWJtaXNzaW9uXCJcbiAgICAgICAgKHN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW29wdGlvbnNdPVwib2JzLmZvcm1pb09wdGlvbnNcIlxuICAgICAgPjwvdmFsdGltby1mb3JtLWlvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJvYnMucHJvY2Vzc0xpbmtJc0Zvcm1GbG93XCI+XG4gICAgICA8dmFsdGltby1mb3JtLWZsb3dcbiAgICAgICAgI2Zvcm1GbG93XG4gICAgICAgIFtmb3JtSW9Gb3JtRGF0YV09XCJmb3JtSW9Gb3JtRGF0YSRcIlxuICAgICAgICBbZm9ybUZsb3dJbnN0YW5jZUlkXT1cIm9icy5mb3JtRmxvd0luc3RhbmNlSWRcIlxuICAgICAgICAoZm9ybUZsb3dDb21wbGV0ZSk9XCJjb21wbGV0ZVRhc2soKVwiXG4gICAgICA+PC92YWx0aW1vLWZvcm0tZmxvdz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwib2JzLmxvYWRpbmdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJsYWNrIG1iLTAgcC0zIHRleHQtY2VudGVyXCI+XG4gICAgICAgIHt7ICdmb3JtTWFuYWdlbWVudC5sb2FkaW5nJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgb2JzLmxvYWRpbmcgPT09IGZhbHNlICYmICFvYnMuZm9ybURlZmluaXRpb24gJiYgIW9icy5mb3JtRmxvd0luc3RhbmNlSWQgJiYgIW9icy5lcnJvck1lc3NhZ2VcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImJnLXdhcm5pbmcgdGV4dC1ibGFjayBtYi0wIHAtMyB0ZXh0LWNlbnRlclwiPlxuICAgICAgICB7e1xuICAgICAgICAgIChpc0FkbWluJCB8IGFzeW5jKVxuICAgICAgICAgICAgPyAoJ2Zvcm1NYW5hZ2VtZW50Lm5vRm9ybURlZmluaXRpb25Gb3VuZEFkbWluJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgIDogKCdmb3JtTWFuYWdlbWVudC5ub0Zvcm1EZWZpbml0aW9uRm91bmRVc2VyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJvYnMuZXJyb3JNZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYmctZGFuZ2VyIHRleHQtYmxhY2sgbWItMCBwLTMgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAge3sgb2JzLmVycm9yTWVzc2FnZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgZm9vdGVyXG4gICAgKm5nSWY9XCJ7XG4gICAgICBmb3JtRGVmaW5pdGlvbjogZm9ybURlZmluaXRpb24kIHwgYXN5bmMsXG4gICAgICBmb3JtRmxvd0luc3RhbmNlSWQ6IGZvcm1GbG93SW5zdGFuY2VJZCQgfCBhc3luY1xuICAgIH0gYXMgb2JzXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0wIHAtMyB0ZXh0LWNlbnRlclwiICpuZ0lmPVwiIW9icy5mb3JtRGVmaW5pdGlvbiAmJiAhb2JzLmZvcm1GbG93SW5zdGFuY2VJZFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zcGFjZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZ290b1Byb2Nlc3NMaW5rU2NyZWVuKClcIlxuICAgICAgICBpZD1cInByb2Nlc3MtbGluay1idXR0b25cIlxuICAgICAgPlxuICAgICAgICB7eyAnZm9ybU1hbmFnZW1lbnQuZ290b1Byb2Nlc3NMaW5rc0J1dHRvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBib2R5IGNsYXNzPVwibS0yXCI+XG4gICAgPG5nLXRlbXBsYXRlICNmb3JtVmlld01vZGVsQ29tcG9uZW50PjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9jZHMtbW9kYWw+XG5cbjx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsJFwiXG4gIChjb25maXJtRXZlbnQpPVwiY2xlYXJDdXJyZW50UHJvZ3Jlc3MoKVwiXG4gIChjYW5jZWxFdmVudCk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwkLm5leHQoZmFsc2UpXCJcbiAgY2FuY2VsQnV0dG9uVHlwZT1cImdob3N0XCJcbiAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5jb25maXJtXCJcbiAgdGl0bGVUcmFuc2xhdGlvbktleT1cImZvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUuY2xlYXJcIlxuICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJmb3JtTWFuYWdlbWVudC5pbnRlcm1lZGlhdGVTYXZlLmNsZWFyQ29uZmlybVwiXG4+PC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNhc3NpZ25Vc2VyVG9UYXNrPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwie1xuICAgIHRhc2s6IHRhc2skIHwgYXN5bmMsXG4gICAgY2FuQXNzaWduVXNlclRvVGFzazogY2FuQXNzaWduVXNlclRvVGFzayQgfCBhc3luY1xuICB9IGFzIG9ic1wiPlxuICAgIDx2YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2tcbiAgICAgICpuZ0lmPVwib2JzLnRhc2sgJiYgb2JzLmNhbkFzc2lnblVzZXJUb1Rhc2sgJiYgYXNzaWdubWVudE9mVGFza0NoYW5nZWRcIlxuICAgICAgW3Rhc2tJZF09XCJvYnMudGFzay5pZFwiXG4gICAgICBbYXNzaWduZWVJZF09XCJvYnMudGFzay5hc3NpZ25lZVwiXG4gICAgICAoYXNzaWdubWVudE9mVGFza0NoYW5nZWQpPVwiYXNzaWdubWVudE9mVGFza0NoYW5nZWQuZW1pdCgpXCJcbiAgICA+PC92YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2s+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1kZXRhaWwtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby90YXNrL3NyYy9saWIvY29tcG9uZW50cy90YXNrLWRldGFpbC1tb2RhbC90YXNrLWRldGFpbC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stZGV0YWlsLW1vZGFsL3Rhc2stZGV0YWlsLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBVyw0QkFBNEIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTdFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUduRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUUsK0JBQStCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRyxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSwwRUFBMEUsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUU3SCxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFRckQsTUFBTSxPQUFPLHdCQUF3QjtJQVFuQyxJQUFhLFNBQVMsQ0FBQyxLQUFlO1FBQ3BDLElBQUksS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFD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QUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQzsrR0E1RlUsd0JBQXdCO21HQUF4Qix3QkFBd0Isd1ZBRXhCLG1DQUFtQyxnRENoRGhELDBzR0F5RkE7OzRGRDNDYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsMkJBQTJCLGlCQUd0QixpQkFBaUIsQ0FBQyxJQUFJOzRNQUdVLE1BQU07c0JBQXBELFNBQVM7dUJBQUMsaUJBQWlCO2dCQUVYLDBCQUEwQjtzQkFEMUMsU0FBUzt1QkFBQyxtQ0FBbUM7Z0JBR3BDLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUVNLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5pbXBvcnQge0NhcmJvbk1vZGFsU2l6ZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0Zvcm1TaXplLCBmb3JtU2l6ZVRvQ2FyYm9uTW9kYWxTaXplTWFwfSBmcm9tICdAdmFsdGltby9wcm9jZXNzLWxpbmsnO1xuaW1wb3J0IHtNb2RhbH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7SW50ZXJtZWRpYXRlU3VibWlzc2lvbiwgVGFza30gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7VGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0NBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLCBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFfSBmcm9tICcuLi8uLi90YXNrLXBlcm1pc3Npb25zJztcbmltcG9ydCB7VGFza0RldGFpbEludGVybWVkaWF0ZVNhdmVDb21wb25lbnR9IGZyb20gJy4uL3Rhc2stZGV0YWlsLWludGVybWVkaWF0ZS1zYXZlL3Rhc2stZGV0YWlsLWludGVybWVkaWF0ZS1zYXZlLmNvbXBvbmVudCc7XG5cbm1vbWVudC5sb2NhbGUobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmdLZXknKSB8fCAnJyk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tdGFzay1kZXRhaWwtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFzay1kZXRhaWwtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YXNrLWRldGFpbC1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNrRGV0YWlsTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCd0YXNrRGV0YWlsTW9kYWwnKSBwcml2YXRlIHJlYWRvbmx5IF9tb2RhbDogTW9kYWw7XG4gIEBWaWV3Q2hpbGQoVGFza0RldGFpbEludGVybWVkaWF0ZVNhdmVDb21wb25lbnQpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ludGVybWVkaWF0ZVNhdmVDb21wb25lbnQ6IFRhc2tEZXRhaWxJbnRlcm1lZGlhdGVTYXZlQ29tcG9uZW50O1xuXG4gIEBPdXRwdXQoKSBmb3JtU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYXNzaWdubWVudE9mVGFza0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgc2V0IG1vZGFsU2l6ZSh2YWx1ZTogRm9ybVNpemUpIHtcbiAgICBpZiAodmFsdWUpIHRoaXMuc2l6ZSQubmV4dChmb3JtU2l6ZVRvQ2FyYm9uTW9kYWxTaXplTWFwW3ZhbHVlXSk7XG4gIH1cblxuICBwdWJsaWMgY3VycmVudEludGVybWVkaWF0ZVNhdmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm1lZGlhdGVTdWJtaXNzaW9uIHwgbnVsbD4obnVsbCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhc2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYXNrIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dDb25maXJtYXRpb25Nb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvbk1vZGFsU2l6ZT4oJ21kJyk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhbkFzc2lnblVzZXJUb1Rhc2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFza0ludGVybWVkaWF0ZVNhdmVTZXJ2aWNlOiBUYXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzayQuc3Vic2NyaWJlKHRhc2sgPT4ge1xuICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDaGVja2luZyBpZiB1c2VyIGFsbG93ZWQgdG8gYXNzaWduIGEgdXNlciB0byBUYXNrIHdpdGggaWQ6JywgdGFzay5pZCk7XG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2VydmljZVxuICAgICAgICAgICAgLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9BU1NJR05fVEFTS19QRVJNSVNTSU9OLCB7XG4gICAgICAgICAgICAgIHJlc291cmNlOiBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLnRhc2ssXG4gICAgICAgICAgICAgIGlkZW50aWZpZXI6IHRhc2suaWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWxsb3dlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQoYWxsb3dlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUmVzZXQgaXMgdXNlciBhbGxvd2VkIHRvIGFzc2lnbiBhIHVzZXIgdG8gVGFzayBhcyB0YXNrIGlzIG51bGwnKTtcbiAgICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJDdXJyZW50UHJvZ3Jlc3MoKTogdm9pZCB7XG4gICAgdGhpcy5faW50ZXJtZWRpYXRlU2F2ZUNvbXBvbmVudC5jbGVhckN1cnJlbnRQcm9ncmVzcygpO1xuICB9XG5cbiAgcHVibGljIG9wZW5UYXNrRGV0YWlscyh0YXNrOiBUYXNrIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudGFzayQubmV4dCh0YXNrKTtcbiAgICB0aGlzLnBhZ2UkLm5leHQoe1xuICAgICAgdGl0bGU6IHRhc2s/Lm5hbWUsXG4gICAgICBzdWJ0aXRsZTogYCR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3Rhc2tEZXRhaWwudGFza0NyZWF0ZWQnKX0gJHt0YXNrPy5jcmVhdGVkfWAsXG4gICAgfSk7XG5cbiAgICB0aGlzLm9wZW5Nb2RhbCgpO1xuICB9XG5cbiAgcHVibGljIGdvdG9Qcm9jZXNzTGlua1NjcmVlbigpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3Byb2Nlc3MtbGlua3MnXSk7XG4gIH1cblxuICBwdWJsaWMgb25DdXJyZW50SW50ZXJtZWRpYXRlU2F2ZUV2ZW50KHZhbHVlOiBJbnRlcm1lZGlhdGVTdWJtaXNzaW9uIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEludGVybWVkaWF0ZVNhdmUkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG9uRm9ybVN1Ym1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uU2hvd01vZGFsRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q29uZmlybWF0aW9uTW9kYWwkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RhbC5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy50YXNrSW50ZXJtZWRpYXRlU2F2ZVNlcnZpY2Uuc2V0U3VibWlzc2lvbih7ZGF0YToge319KTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsLm9wZW4gPSB0cnVlO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxjZHMtbW9kYWwgI3Rhc2tEZXRhaWxNb2RhbCBpZD1cInRhc2tEZXRhaWxNb2RhbFwiIFtzaXplXT1cInNpemUkIHwgYXN5bmNcIj5cbiAgPGNkcy1tb2RhbC1oZWFkZXIgKGNsb3NlU2VsZWN0KT1cImNsb3NlTW9kYWwoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1jb250YWluZXJcIj5cbiAgICAgIDxwIGNsYXNzPVwiY2RzLS1tb2RhbC1oZWFkZXJfX2hlYWRpbmcgY2RzLS10eXBlLWJldGFcIj57eyAocGFnZSQgfCBhc3luYyk/LnRpdGxlIH19PC9wPlxuXG4gICAgICA8cCBjbGFzcz1cImNkcy0tbW9kYWwtaGVhZGVyX19sYWJlbCBjZHMtLXR5cGUtZGVsdGFcIj57eyAocGFnZSQgfCBhc3luYyk/LnN1YnRpdGxlIH19PC9wPlxuXG4gICAgICA8cFxuICAgICAgICBjbGFzcz1cImNkcy0tbW9kYWwtaGVhZGVyX19sYWJlbCBjZHMtLXR5cGUtZGVsdGFcIlxuICAgICAgICAqbmdJZj1cImN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlJCB8IGFzeW5jIGFzIGN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2Zvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUubGFzdFNhdmVkQnknIHwgdHJhbnNsYXRlIH19OlxuXG4gICAgICAgIHt7XG4gICAgICAgICAgY3VycmVudEludGVybWVkaWF0ZVNhdmU/LmVkaXRlZEJ5XG4gICAgICAgICAgICA/IGN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlPy5lZGl0ZWRCeVxuICAgICAgICAgICAgOiBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZS5jcmVhdGVkQnlcbiAgICAgICAgfX1cblxuICAgICAgICB7eyAnZm9ybU1hbmFnZW1lbnQuaW50ZXJtZWRpYXRlU2F2ZS5vbicgfCB0cmFuc2xhdGUgfX06XG5cbiAgICAgICAge3tcbiAgICAgICAgICBjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZT8uZWRpdGVkT25cbiAgICAgICAgICAgID8gY3VycmVudEludGVybWVkaWF0ZVNhdmU/LmVkaXRlZE9uXG4gICAgICAgICAgICA6IGN1cnJlbnRJbnRlcm1lZGlhdGVTYXZlLmNyZWF0ZWRPblxuICAgICAgICB9fVxuICAgICAgPC9wPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXNzaWduVXNlclRvVGFza1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPHZhbHRpbW8tdGFzay1kZXRhaWwtaW50ZXJtZWRpYXRlLXNhdmVcbiAgICAgIGNsYXNzPVwic2F2ZS1idXR0b25zLW1hcmdpblwiXG4gICAgICBbdGFza109XCJ0YXNrJCB8IGFzeW5jXCJcbiAgICAgIChjdXJyZW50SW50ZXJtZWRpYXRlU2F2ZUV2ZW50KT1cIm9uQ3VycmVudEludGVybWVkaWF0ZVNhdmVFdmVudCgkZXZlbnQpXCJcbiAgICAgIChzaG93TW9kYWxFdmVudCk9XCJvblNob3dNb2RhbEV2ZW50KClcIlxuICAgID48L3ZhbHRpbW8tdGFzay1kZXRhaWwtaW50ZXJtZWRpYXRlLXNhdmU+XG4gIDwvY2RzLW1vZGFsLWhlYWRlcj5cblxuICA8ZGl2IGJvZHkgY2xhc3M9XCJjZHMtLW1vZGFsLWNvbnRlbnQgcGItMVwiPlxuICAgIDx2YWx0aW1vLXRhc2stZGV0YWlsLWNvbnRlbnRcbiAgICAgIFt0YXNrXT1cInRhc2skIHwgYXN5bmNcIlxuICAgICAgKGZvcm1TdWJtaXQpPVwib25Gb3JtU3VibWl0KClcIlxuICAgICAgKGNsb3NlTW9kYWxFdmVudCk9XCJjbG9zZU1vZGFsKClcIlxuICAgID48L3ZhbHRpbW8tdGFzay1kZXRhaWwtY29udGVudD5cbiAgPC9kaXY+XG48L2Nkcy1tb2RhbD5cblxuPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93Q29uZmlybWF0aW9uTW9kYWwkXCJcbiAgKGNvbmZpcm1FdmVudCk9XCJjbGVhckN1cnJlbnRQcm9ncmVzcygpXCJcbiAgKGNhbmNlbEV2ZW50KT1cInNob3dDb25maXJtYXRpb25Nb2RhbCQubmV4dChmYWxzZSlcIlxuICBjYW5jZWxCdXR0b25UeXBlPVwiZ2hvc3RcIlxuICBjb25maXJtQnV0dG9uVGV4dFRyYW5zbGF0aW9uS2V5PVwiaW50ZXJmYWNlLmNvbmZpcm1cIlxuICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiZm9ybU1hbmFnZW1lbnQuaW50ZXJtZWRpYXRlU2F2ZS5jbGVhclwiXG4gIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImZvcm1NYW5hZ2VtZW50LmludGVybWVkaWF0ZVNhdmUuY2xlYXJDb25maXJtXCJcbj48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI2Fzc2lnblVzZXJUb1Rhc2s+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIntcbiAgICAgIHRhc2s6IHRhc2skIHwgYXN5bmMsXG4gICAgICBjYW5Bc3NpZ25Vc2VyVG9UYXNrOiBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCB8IGFzeW5jLFxuICAgIH0gYXMgb2JzXCJcbiAgPlxuICAgIDx2YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2tcbiAgICAgICpuZ0lmPVwib2JzLnRhc2sgJiYgb2JzLmNhbkFzc2lnblVzZXJUb1Rhc2sgJiYgYXNzaWdubWVudE9mVGFza0NoYW5nZWRcIlxuICAgICAgW3Rhc2tJZF09XCJvYnMudGFzay5pZFwiXG4gICAgICBbYXNzaWduZWVJZF09XCJvYnMudGFzay5hc3NpZ25lZVwiXG4gICAgICAoYXNzaWdubWVudE9mVGFza0NoYW5nZWQpPVwiYXNzaWdubWVudE9mVGFza0NoYW5nZWQuZW1pdCgpXCJcbiAgICA+PC92YWx0aW1vLWFzc2lnbi11c2VyLXRvLXRhc2s+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|