@mediusinc/mng-commons 2.5.0 → 2.6.0-rc.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/assets/i18n/en.json +4 -1
- package/assets/i18n/sl.json +4 -1
- package/esm2020/lib/components/action/action.component.mjs +8 -1
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +196 -115
- package/esm2020/lib/components/action/models/action-execution.model.mjs +99 -10
- package/esm2020/lib/components/action/route/action-route.component.mjs +53 -35
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +15 -6
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.mjs +69 -0
- package/esm2020/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +54 -0
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +5 -2
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/index.mjs +3 -1
- package/esm2020/lib/components/form/formly/formly.config.mjs +11 -1
- package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +1 -1
- package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +21 -3
- package/esm2020/lib/components/layout/menu-item.component.mjs +9 -11
- package/esm2020/lib/components/layout/version.component.mjs +3 -3
- package/esm2020/lib/components/tableview/table/models/index.mjs +2 -0
- package/esm2020/lib/components/tableview/table/table.component.mjs +67 -9
- package/esm2020/lib/descriptors/action/action.descriptor.mjs +13 -1
- package/esm2020/lib/descriptors/editor/field.descriptor.mjs +77 -3
- package/esm2020/lib/descriptors/table/column.descriptor.mjs +25 -1
- package/esm2020/lib/descriptors/table/table.descriptor.mjs +13 -1
- package/esm2020/lib/descriptors/types/table.type.mjs +4 -1
- package/esm2020/lib/mng-commons.module.mjs +7 -4
- package/esm2020/lib/models/config.model.mjs +1 -1
- package/esm2020/lib/models/view-container.model.mjs +1 -1
- package/esm2020/lib/services/action-executor.service.mjs +313 -190
- package/esm2020/lib/services/commons.service.mjs +8 -1
- package/esm2020/lib/services/index.mjs +3 -1
- package/esm2020/lib/services/internal/commons-init.service.mjs +5 -9
- package/esm2020/lib/services/navigation.service.mjs +6 -3
- package/esm2020/lib/services/view-container.component.service.mjs +10 -1
- package/esm2020/lib/utils/action-data-provider.util.mjs +14 -1
- package/esm2020/lib/utils/editor-formly.util.mjs +23 -3
- package/fesm2015/mediusinc-mng-commons.mjs +2541 -1807
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +2167 -1451
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/components/action/action.component.d.ts +1 -2
- package/lib/components/action/editor/action-editor.component.d.ts +19 -6
- package/lib/components/action/models/action-execution.model.d.ts +35 -6
- package/lib/components/action/route/action-route.component.d.ts +7 -4
- package/lib/components/form/editor/form-editor.component.d.ts +2 -1
- package/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.d.ts +27 -0
- package/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +11 -0
- package/lib/components/form/formly/fields/index.d.ts +2 -0
- package/lib/components/form/formly/models/formly-field.model.d.ts +1 -0
- package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +5 -0
- package/lib/components/layout/menu-item.component.d.ts +1 -2
- package/lib/components/layout/version.component.d.ts +1 -1
- package/lib/components/tableview/table/models/index.d.ts +6 -0
- package/lib/components/tableview/table/table.component.d.ts +16 -1
- package/lib/descriptors/action/action.descriptor.d.ts +5 -0
- package/lib/descriptors/editor/field.descriptor.d.ts +28 -1
- package/lib/descriptors/table/column.descriptor.d.ts +8 -0
- package/lib/descriptors/table/table.descriptor.d.ts +2 -0
- package/lib/descriptors/types/table.type.d.ts +3 -0
- package/lib/mng-commons.module.d.ts +15 -14
- package/lib/models/config.model.d.ts +4 -0
- package/lib/models/view-container.model.d.ts +6 -0
- package/lib/services/action-executor.service.d.ts +69 -35
- package/lib/services/commons.service.d.ts +2 -0
- package/lib/services/index.d.ts +2 -0
- package/lib/services/internal/commons-init.service.d.ts +1 -3
- package/lib/services/navigation.service.d.ts +3 -2
- package/lib/services/view-container.component.service.d.ts +7 -2
- package/lib/utils/action-data-provider.util.d.ts +8 -0
- package/package.json +2 -2
- package/scss/mng-commons-light.scss +3 -0
- package/scss/mng-overrides/_theme_multiselect.scss +20 -0
- package/scss/mng-overrides/_theme_styles.scss +1 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { BehaviorSubject, ReplaySubject, Subject, distinctUntilChanged } from 'rxjs';
|
|
1
|
+
import { BehaviorSubject, ReplaySubject, Subject, distinctUntilChanged, take } from 'rxjs';
|
|
2
|
+
import { filter, map } from 'rxjs/operators';
|
|
3
|
+
import { ActionActivationTriggerEnum, ActionTypeEnum } from '../../../descriptors/types';
|
|
2
4
|
export class ActionError {
|
|
3
5
|
constructor(error, // error details
|
|
4
6
|
dismissed = false // by user
|
|
@@ -13,6 +15,7 @@ export class ActionError {
|
|
|
13
15
|
export class ActionInstance {
|
|
14
16
|
constructor(action, state = ActionInstanceStateEnum.TriggerStart, debug = false) {
|
|
15
17
|
this.debug = debug;
|
|
18
|
+
this.createdDate = new Date();
|
|
16
19
|
// function execution
|
|
17
20
|
this.isRunLoadingSubject = new BehaviorSubject(false);
|
|
18
21
|
this.contexts = [];
|
|
@@ -22,6 +25,8 @@ export class ActionInstance {
|
|
|
22
25
|
this.resultSubject = new ReplaySubject(1);
|
|
23
26
|
this.errorSubject = new ReplaySubject(1);
|
|
24
27
|
this.contextExecutionSubscriptions = [];
|
|
28
|
+
// linked actions
|
|
29
|
+
this._reactivationInstanceSubject = new BehaviorSubject(undefined); // editor action with resubmit enabled
|
|
25
30
|
this.instanceId = Math.random().toString(36).substring(2);
|
|
26
31
|
this.instanceLongName = `${action.actionNameLong}_${this.instanceId}`;
|
|
27
32
|
this.action = action;
|
|
@@ -43,12 +48,36 @@ export class ActionInstance {
|
|
|
43
48
|
return this.stateSubject.value;
|
|
44
49
|
}
|
|
45
50
|
set state(state) {
|
|
46
|
-
if (state > this.stateSubject.value) {
|
|
51
|
+
if (state > this.stateSubject.value || (this.stateSubject.value === ActionInstanceStateEnum.RunError && state === ActionInstanceStateEnum.RunStart)) {
|
|
47
52
|
if (this.debug) {
|
|
48
53
|
// eslint-disable-next-line no-console, no-restricted-syntax
|
|
49
54
|
console.debug(`ActionInstance ${this.instanceLongName} - state #${state}: ${ActionInstanceStateEnum[state]}`);
|
|
50
55
|
}
|
|
51
56
|
this.stateSubject.next(state);
|
|
57
|
+
switch (state) {
|
|
58
|
+
case ActionInstanceStateEnum.FinishSuccessFinal:
|
|
59
|
+
case ActionInstanceStateEnum.FinishErrorFinal:
|
|
60
|
+
case ActionInstanceStateEnum.FinishDismissedFinal:
|
|
61
|
+
if (this.action.activationTrigger === ActionActivationTriggerEnum.OnClick) {
|
|
62
|
+
this.finish();
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
case ActionInstanceStateEnum.FinishSuccessReactivateFinal:
|
|
66
|
+
// partially finish reactivation because new instance event must still be emitted
|
|
67
|
+
if (this.action.type === ActionTypeEnum.Editor) {
|
|
68
|
+
this.finish(true);
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
case ActionInstanceStateEnum.FinishComponentDestroyFinal:
|
|
72
|
+
this.finish();
|
|
73
|
+
break;
|
|
74
|
+
case ActionInstanceStateEnum.FinishRouteUntriggerEndFinal:
|
|
75
|
+
case ActionInstanceStateEnum.FinishRouteUntriggerTimeoutFinal:
|
|
76
|
+
if (this.action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
|
|
77
|
+
this.finish();
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
52
81
|
}
|
|
53
82
|
}
|
|
54
83
|
get state$() {
|
|
@@ -88,6 +117,21 @@ export class ActionInstance {
|
|
|
88
117
|
get error$() {
|
|
89
118
|
return this.errorSubject.asObservable();
|
|
90
119
|
}
|
|
120
|
+
set reactivationInstance(instance) {
|
|
121
|
+
// this is allowed to only be executed once for subject and must be in correct status!
|
|
122
|
+
if (this.state !== ActionInstanceStateEnum.FinishSuccessReactivateFinal) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this._reactivationInstanceSubject.next(instance);
|
|
126
|
+
this._reactivationInstanceSubject.complete();
|
|
127
|
+
}
|
|
128
|
+
get reactivationInstance() {
|
|
129
|
+
return this._reactivationInstanceSubject.value;
|
|
130
|
+
}
|
|
131
|
+
get reactivationInstance$() {
|
|
132
|
+
return this._reactivationInstanceSubject.asObservable().pipe(filter(i => !!i), // ignore undefined events (usually initial)
|
|
133
|
+
map(i => i), take(1));
|
|
134
|
+
}
|
|
91
135
|
contextAt(idx) {
|
|
92
136
|
return idx < this.contexts.length ? this.contexts[idx] : undefined;
|
|
93
137
|
}
|
|
@@ -112,10 +156,13 @@ export class ActionInstance {
|
|
|
112
156
|
}));
|
|
113
157
|
this.contexts.push(context);
|
|
114
158
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
159
|
+
forceFinish() {
|
|
160
|
+
// eslint-disable-next-line no-console, no-restricted-syntax
|
|
161
|
+
console.warn(`Force finishing action instance '${this.instanceLongName}'. Try completing instance with states instead.`);
|
|
162
|
+
this.state = ActionInstanceStateEnum.FinishDismissedFinal;
|
|
163
|
+
this.finish();
|
|
164
|
+
}
|
|
165
|
+
finish(reactivate = false) {
|
|
119
166
|
// complete all subjects
|
|
120
167
|
this.contexts.forEach(c => c.finish());
|
|
121
168
|
this.executionSubject.complete();
|
|
@@ -123,6 +170,20 @@ export class ActionInstance {
|
|
|
123
170
|
this.stateSubject.complete();
|
|
124
171
|
this.resultSubject.complete();
|
|
125
172
|
this.errorSubject.complete();
|
|
173
|
+
if (!reactivate) {
|
|
174
|
+
// allow reactivation instance to be emitted separately
|
|
175
|
+
this._reactivationInstanceSubject.complete();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
isClosed() {
|
|
179
|
+
return (this.executionSubject.isStopped &&
|
|
180
|
+
this.executionIsRunningSubject.isStopped &&
|
|
181
|
+
this.stateSubject.isStopped &&
|
|
182
|
+
this.resultSubject.isStopped &&
|
|
183
|
+
this.errorSubject.isStopped &&
|
|
184
|
+
this._reactivationInstanceSubject.isStopped &&
|
|
185
|
+
this.contextExecutionSubscriptions.every(s => s.closed) &&
|
|
186
|
+
this.contexts.every(c => c.isClosed()));
|
|
126
187
|
}
|
|
127
188
|
}
|
|
128
189
|
/**
|
|
@@ -179,9 +240,13 @@ export class ActionContext {
|
|
|
179
240
|
this.executionIsRunningSubject.next(false);
|
|
180
241
|
}
|
|
181
242
|
finish() {
|
|
243
|
+
this.runSubscription?.unsubscribe();
|
|
182
244
|
this.executionSubject.complete();
|
|
183
245
|
this.executionIsRunningSubject.complete();
|
|
184
246
|
}
|
|
247
|
+
isClosed() {
|
|
248
|
+
return this.executionSubject.isStopped && this.executionIsRunningSubject.isStopped && (this.runSubscription?.closed ?? true);
|
|
249
|
+
}
|
|
185
250
|
}
|
|
186
251
|
/**
|
|
187
252
|
* Class containing all main data for action validations (enabled/visible) to be executed in validation states.
|
|
@@ -232,7 +297,26 @@ export class ActionParameters {
|
|
|
232
297
|
this.locale = locale;
|
|
233
298
|
return this;
|
|
234
299
|
}
|
|
300
|
+
/**
|
|
301
|
+
* Used for action editor re-fetch.
|
|
302
|
+
* @param item Form item.
|
|
303
|
+
*/
|
|
304
|
+
withFormItem(item) {
|
|
305
|
+
this.formItem = item;
|
|
306
|
+
return this;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Used for action editor re-fetch.
|
|
310
|
+
* @param item Submit result.
|
|
311
|
+
*/
|
|
312
|
+
withSubmitResult(item) {
|
|
313
|
+
this.submitResult = item;
|
|
314
|
+
return this;
|
|
315
|
+
}
|
|
235
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* States of action. Enums ending with `*Final` are supposed to be final.
|
|
319
|
+
*/
|
|
236
320
|
export var ActionInstanceStateEnum;
|
|
237
321
|
(function (ActionInstanceStateEnum) {
|
|
238
322
|
ActionInstanceStateEnum[ActionInstanceStateEnum["TriggerStart"] = 0] = "TriggerStart";
|
|
@@ -250,8 +334,13 @@ export var ActionInstanceStateEnum;
|
|
|
250
334
|
ActionInstanceStateEnum[ActionInstanceStateEnum["RunError"] = 12] = "RunError";
|
|
251
335
|
ActionInstanceStateEnum[ActionInstanceStateEnum["NextActionStart"] = 13] = "NextActionStart";
|
|
252
336
|
ActionInstanceStateEnum[ActionInstanceStateEnum["NextActionEnd"] = 14] = "NextActionEnd";
|
|
253
|
-
ActionInstanceStateEnum[ActionInstanceStateEnum["
|
|
254
|
-
ActionInstanceStateEnum[ActionInstanceStateEnum["
|
|
255
|
-
ActionInstanceStateEnum[ActionInstanceStateEnum["
|
|
337
|
+
ActionInstanceStateEnum[ActionInstanceStateEnum["FinishSuccessFinal"] = 15] = "FinishSuccessFinal";
|
|
338
|
+
ActionInstanceStateEnum[ActionInstanceStateEnum["FinishErrorFinal"] = 16] = "FinishErrorFinal";
|
|
339
|
+
ActionInstanceStateEnum[ActionInstanceStateEnum["FinishDismissedFinal"] = 17] = "FinishDismissedFinal";
|
|
340
|
+
ActionInstanceStateEnum[ActionInstanceStateEnum["FinishSuccessReactivateFinal"] = 18] = "FinishSuccessReactivateFinal";
|
|
341
|
+
ActionInstanceStateEnum[ActionInstanceStateEnum["FinishComponentDestroyFinal"] = 19] = "FinishComponentDestroyFinal";
|
|
342
|
+
ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerStart"] = 20] = "FinishRouteUntriggerStart";
|
|
343
|
+
ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerEndFinal"] = 21] = "FinishRouteUntriggerEndFinal";
|
|
344
|
+
ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerTimeoutFinal"] = 22] = "FinishRouteUntriggerTimeoutFinal";
|
|
256
345
|
})(ActionInstanceStateEnum || (ActionInstanceStateEnum = {}));
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dGlvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzL2FjdGlvbi1leGVjdXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixvQkFBb0IsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQVE3RyxNQUFNLE9BQU8sV0FBVztJQUNwQixZQUNvQixLQUFVLEVBQUUsZ0JBQWdCO0lBQzVCLFlBQXFCLEtBQUssQ0FBQyxVQUFVOztRQURyQyxVQUFLLEdBQUwsS0FBSyxDQUFLO1FBQ1YsY0FBUyxHQUFULFNBQVMsQ0FBaUI7SUFDM0MsQ0FBQztDQUNQO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQWdDdkIsWUFBWSxNQUEyQixFQUFFLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLEVBQVMsUUFBUSxLQUFLO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQTNCM0cscUJBQXFCO1FBQ0wsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFLaEQsYUFBUSxHQUErQixFQUFFLENBQUM7UUFDMUMscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQXdCLENBQUM7UUFDdkQsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBMEIsQ0FBQyxDQUFDLENBQUM7UUFDL0Qsa0JBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBVyxDQUFDLENBQUMsQ0FBQztRQUMvQyxpQkFBWSxHQUFHLElBQUksYUFBYSxDQUFjLENBQUMsQ0FBQyxDQUFDO1FBRTFELGtDQUE2QixHQUF3QixFQUFFLENBQUM7UUFlNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMs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O0NBQ0o7QUFFRCxNQUFNLENBQU4sSUFBWSx1QkFtQlg7QUFuQkQsV0FBWSx1QkFBdUI7SUFDL0IscUZBQVksQ0FBQTtJQUNaLGlGQUFVLENBQUE7SUFDViwyRkFBZSxDQUFBO0lBQ2YsdUZBQWEsQ0FBQTtJQUNiLGlGQUFVLENBQUE7SUFDViw2RUFBUSxDQUFBO0lBQ1IsaUZBQVUsQ0FBQTtJQUNWLHFHQUFvQixDQUFBO0lBQ3BCLDZHQUF3QixDQUFBO0lBQ3hCLDZHQUF3QixDQUFBO0lBQ3hCLDhFQUFRLENBQUE7SUFDUiwwRUFBTSxDQUFBO0lBQ04sOEVBQVEsQ0FBQTtJQUNSLDRGQUFlLENBQUE7SUFDZix3RkFBYSxDQUFBO0lBQ2Isd0ZBQWEsQ0FBQTtJQUNiLG9GQUFXLENBQUE7SUFDWCw0RkFBZSxDQUFBLENBQUMsK0JBQStCO0FBQ25ELENBQUMsRUFuQlcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQW1CbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge0NvbmZpcm1hdGlvbiwgTWVzc2FnZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEeW5hbWljRGlhbG9nUmVmfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW19IGZyb20gJy4uLy4uLy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBNbmdFcnJvcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FcnJvciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlcnJvcjogYW55LCAvLyBlcnJvciBkZXRhaWxzXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBkaXNtaXNzZWQ6IGJvb2xlYW4gPSBmYWxzZSAvLyBieSB1c2VyXG4gICAgKSB7fVxufVxuXG4vKipcbiAqIEFjdGlvbiBleGVjdXRpb24gaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIGFib3V0IGV4ZWN1dGlvbiBzdGF0ZSBvZiBhY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGlvbkluc3RhbmNlPFQsIFM+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VJZDogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZUxvbmdOYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPjtcblxuICAgIC8vIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgIHB1YmxpYyByZWFkb25seSBpc1J1bkxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvLyBwYXJhbWV0ZXJzLCBjb250ZXh0cywgc3RhdGVzXG4gICAgcHVibGljIHRyaWdnZXJQYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxUPjtcbiAgICBwdWJsaWMgYWN0aXZhdGlvblBhcmFtZXRlcnM/OiBBY3Rpb25QYXJhbWV0ZXJzPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dHM6IEFycmF5PEFjdGlvbkNvbnRleHQ8VCwgUz4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8VCB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtPigxKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3VsdFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxUIHwgbnVsbD4oMSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvclN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxBY3Rpb25FcnJvcj4oMSk7XG5cbiAgICBwcml2YXRlIGNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICAvLyByZXN1bHQgb3IgZXJyb3JcbiAgICBwcml2YXRlIF9yZXN1bHQ/OiBUIHwgbnVsbDtcbiAgICBwcml2YXRlIF9lcnJvcj86IEFjdGlvbkVycm9yO1xuXG4gICAgLy8gYWRkaXRpb25hbCBkYXRhIGZyb20gdHJpZ2dlci9hY3RpdmF0aW9uXG4gICAgcHVibGljIHRyaWdnZXJSb3V0ZU5hdmlnYXRpb24/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyBhY3RpdmF0aW9uRGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcblxuICAgIC8vIGxpbmtlZCBhY3Rpb25zXG4gICAgcHVibGljIG5leHRBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+O1xuICAgIHB1YmxpYyBlcnJvckFjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz47IC8vIGVycm9yIGFjdGlvbiBtdXN0IHJlbHkgb24gc2FtZSB0eXBlXG5cbiAgICBjb25zdHJ1Y3RvcihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlclN0YXJ0LCBwdWJsaWMgZGVidWcgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmluc3RhbmNlSWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VMb25nTmFtZSA9IGAke2FjdGlvbi5hY3Rpb25OYW1lTG9uZ31fJHt0aGlzLmluc3RhbmNlSWR9YDtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzUnVuTG9hZGluZyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUnVuTG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb250ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0cy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLmNvbnRleHRzW3RoaXMuY29udGV4dHMubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb24kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhlY3V0aW9uSXNSdW5uaW5nJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHN0YXRlKHN0YXRlOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSkge1xuICAgICAgICBpZiAoc3RhdGUgPiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25JbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSBzdGF0ZSAjJHtzdGF0ZX06ICR7QWN0aW9uSW5zdGFuY2VTdGF0ZUVudW1bc3RhdGVdfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXRlJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByZXN1bHQocmVzdWx0OiBUIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25JbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSByZXN1bHRgLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5yZXN1bHRTdWJqZWN0Lm5leHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlc3VsdCQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZXJyb3IoZXJyb3I6IEFjdGlvbkVycm9yIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uSW5zdGFuY2UgJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9IC0gZXJyb3JgLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChlcnJvcik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlcnJvciQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udGV4dEF0KGlkeDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBpZHggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMuY29udGV4dHNbaWR4XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIG5ld0NvbnRleHQoY29udGV4dDogQWN0aW9uQ29udGV4dDxULCBTPiwgZmluaXNoUHJldmlvdXMgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkluc3RhbmNlICR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfSAtIG5ldyBjb250ZXh0ICR7Y29udGV4dC5jb250ZXh0TG9uZ05hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGlmIChjdXJyZW50Q29udGV4dCkge1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZXhlY3V0aW9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGNvbnRleHQuZXhlY3V0aW9uJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IG5leHQgPT4gdGhpcy5leGVjdXRpb25TdWJqZWN0Lm5leHQobmV4dCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHRoaXMuZXhlY3V0aW9uU3ViamVjdC5lcnJvcihlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGNvbnRleHQuZXhlY3V0aW9uSXNSdW5uaW5nJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IG5leHQgPT4gdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0Lm5leHQobmV4dClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluaXNoKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZVN1YmplY3QudmFsdWUgPCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2VzcztcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21wbGV0ZSBhbGwgc3ViamVjdHNcbiAgICAgICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKGMgPT4gYy5maW5pc2goKSk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZXN1bHRTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxufVxuXG4vKipcbiAqIENsYXNzIGNvbnRhaW5pbmcgYWxsIG1haW4gZGF0YSBmb3IgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkIGluIHJ1bi9mZXRjaC9zdWJtaXQgc3RhdGVzLlxuICovXG5leHBvcnQgY2xhc3MgQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbnRleHRMb25nTmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj47XG4gICAgcHVibGljIGNvbmZpcm1hdGlvbj86IENvbmZpcm1hdGlvbjtcbiAgICBwdWJsaWMgbm90aWZpY2F0aW9uPzogTWVzc2FnZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZTogJ3J1bicgfCAnZmV0Y2gnIHwgJ3N1Ym1pdCcsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZUluc3RhbmNlPzogUyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25TdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8VCB8IG51bGwgfCB1bmRlZmluZWQ+KDEpLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKVxuICAgICkge1xuICAgICAgICB0aGlzLmNvbnRleHRMb25nTmFtZSA9IGAke3RoaXMuaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX1fJHtmdW5jdGlvbk5hbWV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV4ZWN1dGlvbiQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb25Jc1J1bm5pbmckKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGlvblN0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5kZWJ1Zykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25Db250ZXh0ICR7dGhpcy5jb250ZXh0TG9uZ05hbWV9IC0gZXhlY3V0aW9uIHN0YXJ0YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGlvbk5leHQobmV4dDogVCB8IG51bGwgfCB1bmRlZmluZWQsIGZpbmlzaCA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UuZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uQ29udGV4dCAke3RoaXMuY29udGV4dExvbmdOYW1lfSAtIGV4ZWN1dGlvbiBuZXh0IGV2ZW50YCwgbmV4dCwgZmluaXNoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QubmV4dChuZXh0KTtcbiAgICAgICAgaWYgKGZpbmlzaCkge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGlvbkNvbXBsZXRlKCkge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5kZWJ1Zykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25Db250ZXh0ICR7dGhpcy5jb250ZXh0TG9uZ05hbWV9IC0gZXhlY3V0aW9uIGNvbXBsZXRlYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhlY3V0aW9uRXJyb3IoZXJyOiBNbmdFcnJvcikge1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5kZWJ1Zykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25Db250ZXh0ICR7dGhpcy5jb250ZXh0TG9uZ05hbWV9IC0gZXhlY3V0aW9uIGVycm9yYCwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5pc2goKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQ2xhc3MgY29udGFpbmluZyBhbGwgbWFpbiBkYXRhIGZvciBhY3Rpb24gdmFsaWRhdGlvbnMgKGVuYWJsZWQvdmlzaWJsZSkgdG8gYmUgZXhlY3V0ZWQgaW4gdmFsaWRhdGlvbiBzdGF0ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdG9yOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlSW5zdGFuY2U/OiBTXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uUGFyYW1ldGVyczxUPiB7XG4gICAgcHVibGljIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhO1xuICAgIHB1YmxpYyBxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbTtcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIHVua25vd24+O1xuICAgIHB1YmxpYyBzb3VyY2VDb21wb25lbnQ/OiBhbnk7XG4gICAgcHVibGljIGhvc3RDb21wb25lbnQ/OiB1bmtub3duO1xuICAgIHB1YmxpYyByb3V0ZT86IEFjdGl2YXRlZFJvdXRlO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBUW10gPSBbXTtcbiAgICBwdWJsaWMgbG9jYWxlPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGl0ZW1JZD86IElkVHlwZSwgcHVibGljIGl0ZW0/OiBUKSB7fVxuXG4gICAgcHVibGljIHdpdGhBY3Rpb25EYXRhKGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbShxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSkge1xuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZpZXdDb250YWluZXIodmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIHVua25vd24+KSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHZpZXdDb250YWluZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU291cmNlQ29tcG9uZW50KHNvdXJjZUNvbXBvbmVudD86IGFueSkge1xuICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIb3N0Q29tcG9uZW50KGhvc3RDb21wb25lbnQ/OiB1bmtub3duKSB7XG4gICAgICAgIHRoaXMuaG9zdENvbXBvbmVudCA9IGhvc3RDb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm91dGUocm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgICAgICB0aGlzLnJvdXRlID0gcm91dGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VsZWN0ZWRJdGVtcyhzZWxlY3RlZEl0ZW1zOiBUW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb2NhbGUobG9jYWxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0ge1xuICAgIFRyaWdnZXJTdGFydCwgLy8gYWN0aW9uIHdhcyB0cmlnZ2VyZWQgKGNsaWNrIG9yIGRpcmVjdClcbiAgICBUcmlnZ2VyRW5kLFxuICAgIEFjdGl2YXRpb25TdGFydCwgLy8gYWN0aW9uIGFjdGl2YXRpb24gc3RhcnRlZCAoZGlyZWN0LCBldmVudCBvciBlZGl0b3IpXG4gICAgQWN0aXZhdGlvbkVuZCwgLy8gYWN0aW9uIGFjdGl2YXRpb24gZW5kZWRcbiAgICBGZXRjaFN0YXJ0LCAvLyBmZXRjaCBzdGFydGVkXG4gICAgRmV0Y2hFbmQsIC8vIGZldGNoIGVuZGVkXG4gICAgRmV0Y2hFcnJvciwgLy8gZmV0Y2ggZXJyb3JcbiAgICBSdW5Db25maXJtYXRpb25TdGFydCwgLy8gY29uZmlybWF0aW9uIGZvciBydW4gaXMgc3RhcnRlZFxuICAgIFJ1bkNvbmZpcm1hdGlvbkVuZEFjY2VwdCwgLy8gY29uZmlybWF0aW9uIGFjY2VwdGVkXG4gICAgUnVuQ29uZmlybWF0aW9uRW5kUmVqZWN0LCAvLyBjb25maXJtYXRpb24gcmVqZWN0ZWRcbiAgICBSdW5TdGFydCwgLy8gYWN0aW9uIHdhcyBydW4gYnkgY2FsbGluZyBtYWluIGZ1bmN0aW9uXG4gICAgUnVuRW5kLCAvLyBhY3Rpb24gcnVuIGZ1bmN0aW9uIGV4ZWN1dGVkXG4gICAgUnVuRXJyb3IsIC8vIGFjdGlvbiBydW4gZnVuY3Rpb24gZXhlY3V0ZWRcbiAgICBOZXh0QWN0aW9uU3RhcnQsIC8vIG5leHQgYWN0aW9uIHN0YXJ0ZWRcbiAgICBOZXh0QWN0aW9uRW5kLCAvLyBuZXh0IGFjdGlvbiBmaW5pc2hlZFxuICAgIEZpbmlzaFN1Y2Nlc3MsIC8vIGFjdGlvbiBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICBGaW5pc2hFcnJvciwgLy8gYWN0aW9uIGV4ZWN1dGVkIHdpdGggZXJyb3JcbiAgICBGaW5pc2hEaXNtaXNzZWQgLy8gYWN0aW9uIHdhcyBkaXNtaXNzZWQgYnkgdXNlclxufVxuXG5leHBvcnQgdHlwZSBBY3Rpb25EYXRhID0ge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG4iXX0=
|
|
346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dGlvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzL2FjdGlvbi1leGVjdXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkgsT0FBTyxFQUFDLE1BQU0sRUFBUyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUtsRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUUsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFJdkYsTUFBTSxPQUFPLFdBQVc7SUFDcEIsWUFDb0IsS0FBVSxFQUFFLGdCQUFnQjtJQUM1QixZQUFxQixLQUFLLENBQUMsVUFBVTs7UUFEckMsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNWLGNBQVMsR0FBVCxTQUFTLENBQWlCO0lBQzNDLENBQUM7Q0FDUDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFrQ3ZCLFlBQVksTUFBMkIsRUFBRSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxFQUFTLFFBQVEsS0FBSztRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7UUE5QjNGLGdCQUFXLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUUvQyxxQkFBcUI7UUFDTCx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUtoRCxhQUFRLEdBQStCLEVBQUUsQ0FBQztRQUMxQyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztRQUN2RCw4QkFBeUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUEwQixDQUFDLENBQUMsQ0FBQztRQUMv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QTtJQUNSLDBFQUFNLENBQUE7SUFDTiw4RUFBUSxDQUFBO0lBQ1IsNEZBQWUsQ0FBQTtJQUNmLHdGQUFhLENBQUE7SUFDYixrR0FBa0IsQ0FBQTtJQUNsQiw4RkFBZ0IsQ0FBQTtJQUNoQixzR0FBb0IsQ0FBQTtJQUNwQixzSEFBNEIsQ0FBQTtJQUM1QixvSEFBMkIsQ0FBQTtJQUMzQixnSEFBeUIsQ0FBQTtJQUN6QixzSEFBNEIsQ0FBQTtJQUM1Qiw4SEFBZ0MsQ0FBQTtBQUNwQyxDQUFDLEVBeEJXLHVCQUF1QixLQUF2Qix1QkFBdUIsUUF3QmxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtDb25maXJtYXRpb24sIE1lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RHluYW1pY0RpYWxvZ1JlZn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvYWN0aW9uJztcbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLCBBY3Rpb25UeXBlRW51bX0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtJVmlld0NvbnRhaW5lciwgTW5nRXJyb3J9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3I6IGFueSwgLy8gZXJyb3IgZGV0YWlsc1xuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGlzbWlzc2VkOiBib29sZWFuID0gZmFsc2UgLy8gYnkgdXNlclxuICAgICkge31cbn1cblxuLyoqXG4gKiBBY3Rpb24gZXhlY3V0aW9uIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSBhYm91dCBleGVjdXRpb24gc3RhdGUgb2YgYWN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25JbnN0YW5jZTxULCBTPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlSWQ6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VMb25nTmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD47XG4gICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8vIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgIHB1YmxpYyByZWFkb25seSBpc1J1bkxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvLyBwYXJhbWV0ZXJzLCBjb250ZXh0cywgc3RhdGVzXG4gICAgcHVibGljIHRyaWdnZXJQYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxUPjtcbiAgICBwdWJsaWMgYWN0aXZhdGlvblBhcmFtZXRlcnM/OiBBY3Rpb25QYXJhbWV0ZXJzPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dHM6IEFycmF5PEFjdGlvbkNvbnRleHQ8VCwgUz4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8VCB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtPigxKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3VsdFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxUIHwgbnVsbD4oMSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvclN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxBY3Rpb25FcnJvcj4oMSk7XG5cbiAgICBwcml2YXRlIGNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICAvLyByZXN1bHQgb3IgZXJyb3JcbiAgICBwcml2YXRlIF9yZXN1bHQ/OiBUIHwgbnVsbDtcbiAgICBwcml2YXRlIF9lcnJvcj86IEFjdGlvbkVycm9yO1xuXG4gICAgLy8gYWRkaXRpb25hbCBkYXRhIGZyb20gdHJpZ2dlci9hY3RpdmF0aW9uXG4gICAgcHVibGljIGFjdGl2YXRpb25EaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xuXG4gICAgLy8gbGlua2VkIGFjdGlvbnNcbiAgICBwcml2YXRlIF9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkluc3RhbmNlPFQsIFM+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpOyAvLyBlZGl0b3IgYWN0aW9uIHdpdGggcmVzdWJtaXQgZW5hYmxlZFxuICAgIHB1YmxpYyBwcmV2aW91c0luc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz47XG4gICAgcHVibGljIG5leHRBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+OyAvLyBhcyBkZWZpbmVkIGluIGFjdGlvbiBkZXNjcmlwdG9yXG4gICAgcHVibGljIGVycm9yQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPjsgLy8gZXJyb3IgYWN0aW9uIG11c3QgcmVseSBvbiBzYW1lIHR5cGUsIGFzIGRlZmluZWQgaW4gYWN0aW9uIGRlc2NyaXB0b3JcblxuICAgIGNvbnN0cnVjdG9yKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPiwgc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5UcmlnZ2VyU3RhcnQsIHB1YmxpYyBkZWJ1ZyA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VJZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZUxvbmdOYW1lID0gYCR7YWN0aW9uLmFjdGlvbk5hbWVMb25nfV8ke3RoaXMuaW5zdGFuY2VJZH1gO1xuICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNSdW5Mb2FkaW5nJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSdW5Mb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRzLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHRoaXMuY29udGV4dHNbdGhpcy5jb250ZXh0cy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV4ZWN1dGlvbiQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb25Jc1J1bm5pbmckKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc3RhdGUoc3RhdGU6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtKSB7XG4gICAgICAgIGlmIChzdGF0ZSA+IHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlIHx8ICh0aGlzLnN0YXRlU3ViamVjdC52YWx1ZSA9PT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRXJyb3IgJiYgc3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25JbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSBzdGF0ZSAjJHtzdGF0ZX06ICR7QWN0aW9uSW5zdGFuY2VTdGF0ZUVudW1bc3RhdGVdfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChzdGF0ZSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hFcnJvckZpbmFsOlxuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAvLyBwYXJ0aWFsbHkgZmluaXNoIHJlYWN0aXZhdGlvbiBiZWNhdXNlIG5ldyBpbnN0YW5jZSBldmVudCBtdXN0IHN0aWxsIGJlIGVtaXR0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hDb21wb25lbnREZXN0cm95RmluYWw6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJFbmRGaW5hbDpcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFJvdXRlVW50cmlnZ2VyVGltZW91dEZpbmFsOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdGF0ZSQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcmVzdWx0KHJlc3VsdDogVCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uSW5zdGFuY2UgJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9IC0gcmVzdWx0YCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMucmVzdWx0U3ViamVjdC5uZXh0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN1bHQkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGVycm9yKGVycm9yOiBBY3Rpb25FcnJvciB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkluc3RhbmNlICR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfSAtIGVycm9yYCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoZXJyb3IpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXJyb3IkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByZWFjdGl2YXRpb25JbnN0YW5jZShpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhbGxvd2VkIHRvIG9ubHkgYmUgZXhlY3V0ZWQgb25jZSBmb3Igc3ViamVjdCBhbmQgbXVzdCBiZSBpbiBjb3JyZWN0IHN0YXR1cyFcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QubmV4dChpbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVhY3RpdmF0aW9uSW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWFjdGl2YXRpb25JbnN0YW5jZSQoKTogT2JzZXJ2YWJsZTxBY3Rpb25JbnN0YW5jZTxULCBTPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoaSA9PiAhIWkpLCAvLyBpZ25vcmUgdW5kZWZpbmVkIGV2ZW50cyAodXN1YWxseSBpbml0aWFsKVxuICAgICAgICAgICAgbWFwKGkgPT4gaSEpLFxuICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250ZXh0QXQoaWR4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGlkeCA8IHRoaXMuY29udGV4dHMubGVuZ3RoID8gdGhpcy5jb250ZXh0c1tpZHhdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgbmV3Q29udGV4dChjb250ZXh0OiBBY3Rpb25Db250ZXh0PFQsIFM+LCBmaW5pc2hQcmV2aW91cyA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uSW5zdGFuY2UgJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9IC0gbmV3IGNvbnRleHQgJHtjb250ZXh0LmNvbnRleHRMb25nTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0KSB7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5leGVjdXRpb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgY29udGV4dC5leGVjdXRpb24kLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogbmV4dCA9PiB0aGlzLmV4ZWN1dGlvblN1YmplY3QubmV4dChuZXh0KSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgPT4gdGhpcy5leGVjdXRpb25TdWJqZWN0LmVycm9yKGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgY29udGV4dC5leGVjdXRpb25Jc1J1bm5pbmckLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogbmV4dCA9PiB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QubmV4dChuZXh0KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0cy5wdXNoKGNvbnRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JjZUZpbmlzaCgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGNvbnNvbGUud2FybihgRm9yY2UgZmluaXNoaW5nIGFjdGlvbiBpbnN0YW5jZSAnJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9Jy4gVHJ5IGNvbXBsZXRpbmcgaW5zdGFuY2Ugd2l0aCBzdGF0ZXMgaW5zdGVhZC5gKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsO1xuICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoKHJlYWN0aXZhdGUgPSBmYWxzZSkge1xuICAgICAgICAvLyBjb21wbGV0ZSBhbGwgc3ViamVjdHNcbiAgICAgICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKGMgPT4gYy5maW5pc2goKSk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZXN1bHRTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICghcmVhY3RpdmF0ZSkge1xuICAgICAgICAgICAgLy8gYWxsb3cgcmVhY3RpdmF0aW9uIGluc3RhbmNlIHRvIGJlIGVtaXR0ZWQgc2VwYXJhdGVseVxuICAgICAgICAgICAgdGhpcy5fcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5fcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucy5ldmVyeShzID0+IHMuY2xvc2VkKSAmJlxuICAgICAgICAgICAgdGhpcy5jb250ZXh0cy5ldmVyeShjID0+IGMuaXNDbG9zZWQoKSlcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQ2xhc3MgY29udGFpbmluZyBhbGwgbWFpbiBkYXRhIGZvciBhY3Rpb24gdG8gYmUgZXhlY3V0ZWQgaW4gcnVuL2ZldGNoL3N1Ym1pdCBzdGF0ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dExvbmdOYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPjtcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uPzogQ29uZmlybWF0aW9uO1xuICAgIHB1YmxpYyBub3RpZmljYXRpb24/OiBNZXNzYWdlO1xuICAgIHB1YmxpYyBydW5TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8VD4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbk5hbWU6ICdydW4nIHwgJ2ZldGNoJyB8ICdzdWJtaXQnLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VJbnN0YW5jZT86IFMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0aW9uU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PFQgfCBudWxsIHwgdW5kZWZpbmVkPigxKSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSlcbiAgICApIHtcbiAgICAgICAgdGhpcy5jb250ZXh0TG9uZ05hbWUgPSBgJHt0aGlzLmluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9XyR7ZnVuY3Rpb25OYW1lfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb24kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhlY3V0aW9uSXNSdW5uaW5nJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRpb25TdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UuZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uQ29udGV4dCAke3RoaXMuY29udGV4dExvbmdOYW1lfSAtIGV4ZWN1dGlvbiBzdGFydGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRpb25OZXh0KG5leHQ6IFQgfCBudWxsIHwgdW5kZWZpbmVkLCBmaW5pc2ggPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlLmRlYnVnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkNvbnRleHQgJHt0aGlzLmNvbnRleHRMb25nTmFtZX0gLSBleGVjdXRpb24gbmV4dCBldmVudGAsIG5leHQsIGZpbmlzaCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0Lm5leHQobmV4dCk7XG4gICAgICAgIGlmIChmaW5pc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRpb25Db21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UuZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uQ29udGV4dCAke3RoaXMuY29udGV4dExvbmdOYW1lfSAtIGV4ZWN1dGlvbiBjb21wbGV0ZWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGlvbkVycm9yKGVycjogTW5nRXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UuZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgQWN0aW9uQ29udGV4dCAke3RoaXMuY29udGV4dExvbmdOYW1lfSAtIGV4ZWN1dGlvbiBlcnJvcmAsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluaXNoKCkge1xuICAgICAgICB0aGlzLnJ1blN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0Nsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5pc1N0b3BwZWQgJiYgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmlzU3RvcHBlZCAmJiAodGhpcy5ydW5TdWJzY3JpcHRpb24/LmNsb3NlZCA/PyB0cnVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogQ2xhc3MgY29udGFpbmluZyBhbGwgbWFpbiBkYXRhIGZvciBhY3Rpb24gdmFsaWRhdGlvbnMgKGVuYWJsZWQvdmlzaWJsZSkgdG8gYmUgZXhlY3V0ZWQgaW4gdmFsaWRhdGlvbiBzdGF0ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdG9yOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlSW5zdGFuY2U/OiBTXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uUGFyYW1ldGVyczxUPiB7XG4gICAgcHVibGljIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhO1xuICAgIHB1YmxpYyBxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbTtcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIHVua25vd24+O1xuICAgIHB1YmxpYyBzb3VyY2VDb21wb25lbnQ/OiBhbnk7XG4gICAgcHVibGljIGhvc3RDb21wb25lbnQ/OiB1bmtub3duO1xuICAgIHB1YmxpYyByb3V0ZT86IEFjdGl2YXRlZFJvdXRlO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBUW10gPSBbXTtcbiAgICBwdWJsaWMgbG9jYWxlPzogc3RyaW5nO1xuXG4gICAgcHVibGljIGZvcm1JdGVtPzogVCB8IG51bGw7XG4gICAgcHVibGljIHN1Ym1pdFJlc3VsdD86IFQgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGl0ZW1JZD86IElkVHlwZSwgcHVibGljIGl0ZW0/OiBUKSB7fVxuXG4gICAgcHVibGljIHdpdGhBY3Rpb25EYXRhKGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbShxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSkge1xuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZpZXdDb250YWluZXIodmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIHVua25vd24+KSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHZpZXdDb250YWluZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU291cmNlQ29tcG9uZW50KHNvdXJjZUNvbXBvbmVudD86IGFueSkge1xuICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIb3N0Q29tcG9uZW50KGhvc3RDb21wb25lbnQ/OiB1bmtub3duKSB7XG4gICAgICAgIHRoaXMuaG9zdENvbXBvbmVudCA9IGhvc3RDb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm91dGUocm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgICAgICB0aGlzLnJvdXRlID0gcm91dGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VsZWN0ZWRJdGVtcyhzZWxlY3RlZEl0ZW1zOiBUW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb2NhbGUobG9jYWxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGFjdGlvbiBlZGl0b3IgcmUtZmV0Y2guXG4gICAgICogQHBhcmFtIGl0ZW0gRm9ybSBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRm9ybUl0ZW0oaXRlbTogVCB8IG51bGwgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5mb3JtSXRlbSA9IGl0ZW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGFjdGlvbiBlZGl0b3IgcmUtZmV0Y2guXG4gICAgICogQHBhcmFtIGl0ZW0gU3VibWl0IHJlc3VsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFN1Ym1pdFJlc3VsdChpdGVtOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICB0aGlzLnN1Ym1pdFJlc3VsdCA9IGl0ZW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBTdGF0ZXMgb2YgYWN0aW9uLiBFbnVtcyBlbmRpbmcgd2l0aCBgKkZpbmFsYCBhcmUgc3VwcG9zZWQgdG8gYmUgZmluYWwuXG4gKi9cbmV4cG9ydCBlbnVtIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtIHtcbiAgICBUcmlnZ2VyU3RhcnQsIC8vIGFjdGlvbiB3YXMgdHJpZ2dlcmVkIChjbGljayBvciBkaXJlY3QpXG4gICAgVHJpZ2dlckVuZCxcbiAgICBBY3RpdmF0aW9uU3RhcnQsIC8vIGFjdGlvbiBhY3RpdmF0aW9uIHN0YXJ0ZWQgKGRpcmVjdCwgZXZlbnQgb3IgZWRpdG9yKVxuICAgIEFjdGl2YXRpb25FbmQsIC8vIGFjdGlvbiBhY3RpdmF0aW9uIGVuZGVkXG4gICAgRmV0Y2hTdGFydCwgLy8gZmV0Y2ggc3RhcnRlZFxuICAgIEZldGNoRW5kLCAvLyBmZXRjaCBlbmRlZFxuICAgIEZldGNoRXJyb3IsIC8vIGZldGNoIGVycm9yXG4gICAgUnVuQ29uZmlybWF0aW9uU3RhcnQsIC8vIGNvbmZpcm1hdGlvbiBmb3IgcnVuIGlzIHN0YXJ0ZWRcbiAgICBSdW5Db25maXJtYXRpb25FbmRBY2NlcHQsIC8vIGNvbmZpcm1hdGlvbiBhY2NlcHRlZFxuICAgIFJ1bkNvbmZpcm1hdGlvbkVuZFJlamVjdCwgLy8gY29uZmlybWF0aW9uIHJlamVjdGVkXG4gICAgUnVuU3RhcnQsIC8vIGFjdGlvbiB3YXMgcnVuIGJ5IGNhbGxpbmcgbWFpbiBmdW5jdGlvblxuICAgIFJ1bkVuZCwgLy8gYWN0aW9uIHJ1biBmdW5jdGlvbiBleGVjdXRlZFxuICAgIFJ1bkVycm9yLCAvLyBhY3Rpb24gcnVuIGZ1bmN0aW9uIGV4ZWN1dGVkIHdpdGggZXJyb3JcbiAgICBOZXh0QWN0aW9uU3RhcnQsIC8vIG5leHQgYWN0aW9uIHN0YXJ0ZWRcbiAgICBOZXh0QWN0aW9uRW5kLCAvLyBuZXh0IGFjdGlvbiBmaW5pc2hlZFxuICAgIEZpbmlzaFN1Y2Nlc3NGaW5hbCwgLy8gYWN0aW9uIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIEZpbmlzaEVycm9yRmluYWwsIC8vIGFjdGlvbiBleGVjdXRlZCB3aXRoIGVycm9yXG4gICAgRmluaXNoRGlzbWlzc2VkRmluYWwsIC8vIGFjdGlvbiB3YXMgZGlzbWlzc2VkIGJ5IHVzZXJcbiAgICBGaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsLCAvLyBhY3Rpb24gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LCBhbm90aGVyIGluc3RhbmNlIHdpbGwgZGlyZWN0bHkgc3RhcnQgZnJvbSBwcmV2aW91c1xuICAgIEZpbmlzaENvbXBvbmVudERlc3Ryb3lGaW5hbCwgLy8gYWN0aW9uIHdhcyBkaXNtaXNzZWQgYnkgZGVzdHJveWluZyBjb21wb25lbnQgdGhhdCB3YXMgZXhlY3V0aW5nIGl0XG4gICAgRmluaXNoUm91dGVVbnRyaWdnZXJTdGFydCxcbiAgICBGaW5pc2hSb3V0ZVVudHJpZ2dlckVuZEZpbmFsLFxuICAgIEZpbmlzaFJvdXRlVW50cmlnZ2VyVGltZW91dEZpbmFsXG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkRhdGEgPSB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufTtcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, Optional } from '@angular/core';
|
|
2
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
2
|
+
import { ActivatedRoute, NavigationCancel, NavigationEnd, NavigationError, NavigationSkipped, NavigationStart, Router } from '@angular/router';
|
|
3
3
|
import { ConfirmationService, MessageService } from 'primeng/api';
|
|
4
4
|
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
5
5
|
import { ActionActivationTriggerEnum } from '../../../descriptors/types';
|
|
@@ -21,24 +21,29 @@ export class MngActionRouteComponent {
|
|
|
21
21
|
this.cmpId = Math.random().toString(36).substring(2);
|
|
22
22
|
this.actions = [];
|
|
23
23
|
this.subscriptions = [];
|
|
24
|
+
this.isRouterNavigationInProgress = false;
|
|
24
25
|
}
|
|
25
26
|
ngOnInit() {
|
|
26
27
|
this.actions = this.viewContainerService?.getActions().filter(a => a.activationTrigger === ActionActivationTriggerEnum.OnRoute) ?? [];
|
|
27
|
-
|
|
28
|
-
const action = this.
|
|
28
|
+
this.subscriptions.push(this.route.params.subscribe(p => {
|
|
29
|
+
const action = this.findActionForRoute(p) ?? undefined;
|
|
29
30
|
if (action) {
|
|
30
31
|
this.activateAction(action, p, this.route.snapshot.queryParams);
|
|
31
32
|
}
|
|
32
|
-
});
|
|
33
|
-
this.subscriptions.push(
|
|
33
|
+
}));
|
|
34
|
+
this.subscriptions.push(this.router.events.subscribe(e => {
|
|
35
|
+
if (e instanceof NavigationStart) {
|
|
36
|
+
this.isRouterNavigationInProgress = true;
|
|
37
|
+
}
|
|
38
|
+
else if (e instanceof NavigationEnd || e instanceof NavigationCancel || e instanceof NavigationError || e instanceof NavigationSkipped) {
|
|
39
|
+
this.isRouterNavigationInProgress = false;
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
34
42
|
}
|
|
35
43
|
ngOnDestroy() {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.dialogCloseSubscription?.unsubscribe();
|
|
40
|
-
this.dialogRef.close();
|
|
41
|
-
}
|
|
44
|
+
const instance = this.instance;
|
|
45
|
+
this.unsetInstance();
|
|
46
|
+
this.actionExecutor.onActionRouteDestroy(instance);
|
|
42
47
|
this.subscriptions.forEach(s => s.unsubscribe());
|
|
43
48
|
}
|
|
44
49
|
getConfirmationService() {
|
|
@@ -60,36 +65,21 @@ export class MngActionRouteComponent {
|
|
|
60
65
|
for (const key in qp) {
|
|
61
66
|
actionData[key] = p[key];
|
|
62
67
|
}
|
|
63
|
-
|
|
68
|
+
this.processActionInstance(this.actionExecutor.activateAction(action, new ActionParameters(itemId)
|
|
64
69
|
.withActionData(actionData)
|
|
65
70
|
.withViewContainer(this.viewContainerService ?? undefined)
|
|
66
71
|
.withSourceComponent(this)
|
|
67
|
-
.withRoute(this.route));
|
|
68
|
-
this.activeActionInstance = instance;
|
|
69
|
-
if (instance.activationDialogRef) {
|
|
70
|
-
this.dialogRef = instance.activationDialogRef;
|
|
71
|
-
this.dialogCloseSubscription = instance.activationDialogRef.onClose.subscribe(e => {
|
|
72
|
-
const actionEv = e;
|
|
73
|
-
if (instance.state === ActionInstanceStateEnum.FinishSuccess) {
|
|
74
|
-
if (!this.viewContainerService) {
|
|
75
|
-
console.warn(`View container service could not be found, table reload will not be triggered.`);
|
|
76
|
-
}
|
|
77
|
-
this.viewContainerService?.reloadTable({ data: { event: actionEv } }); // reload only if no error in action and
|
|
78
|
-
}
|
|
79
|
-
this.untriggerAction();
|
|
80
|
-
});
|
|
81
|
-
}
|
|
72
|
+
.withRoute(this.route)));
|
|
82
73
|
}
|
|
83
74
|
untriggerAction() {
|
|
84
|
-
if (this.
|
|
85
|
-
|
|
86
|
-
this.dialogCloseSubscription = undefined;
|
|
75
|
+
if (!this.instance || this.isRouterNavigationInProgress) {
|
|
76
|
+
return;
|
|
87
77
|
}
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
78
|
+
const instance = this.instance;
|
|
79
|
+
this.unsetInstance();
|
|
80
|
+
this.actionExecutor.finishActionRouteUntrigger(instance);
|
|
91
81
|
}
|
|
92
|
-
|
|
82
|
+
findActionForRoute(params) {
|
|
93
83
|
const urlSegments = this.route.snapshot.url;
|
|
94
84
|
for (const action of this.actions) {
|
|
95
85
|
let actionUrl = action.routeUrl ?? '';
|
|
@@ -121,6 +111,34 @@ export class MngActionRouteComponent {
|
|
|
121
111
|
}
|
|
122
112
|
return null;
|
|
123
113
|
}
|
|
114
|
+
processActionInstance(instance) {
|
|
115
|
+
if (!this.instance || this.instance.instanceLongName !== instance.instanceLongName) {
|
|
116
|
+
this.unsetInstance();
|
|
117
|
+
this.instance = instance;
|
|
118
|
+
this.instanceStateSubscription = this.instance.state$.subscribe(s => {
|
|
119
|
+
switch (s) {
|
|
120
|
+
case ActionInstanceStateEnum.FinishSuccessReactivateFinal:
|
|
121
|
+
this.viewContainerService?.reloadTable(); // reload only if no error in action and
|
|
122
|
+
break;
|
|
123
|
+
case ActionInstanceStateEnum.FinishSuccessFinal:
|
|
124
|
+
this.viewContainerService?.reloadTable(); // reload only if no error in action and
|
|
125
|
+
this.untriggerAction();
|
|
126
|
+
break;
|
|
127
|
+
case ActionInstanceStateEnum.FinishDismissedFinal:
|
|
128
|
+
this.untriggerAction();
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
this.instanceReactivationSubscription = this.instance.reactivationInstance$.subscribe(newInstance => {
|
|
133
|
+
this.processActionInstance(newInstance);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
unsetInstance() {
|
|
138
|
+
this.instance = undefined;
|
|
139
|
+
this.instanceStateSubscription?.unsubscribe();
|
|
140
|
+
this.instanceReactivationSubscription?.unsubscribe();
|
|
141
|
+
}
|
|
124
142
|
}
|
|
125
143
|
MngActionRouteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: MngActionRouteComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ConfirmationService }, { token: i3.MngNavigationService }, { token: i3.MngActionExecutorService }, { token: i3.MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
126
144
|
MngActionRouteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.6", type: MngActionRouteComponent, isStandalone: true, selector: "mng-action-route", providers: [MessageService, ConfirmationService], ngImport: i0, template: "<p-confirmDialog [key]=\"'actionRoute_' + cmpId\" [baseZIndex]=\"50\" appendTo=\"body\"></p-confirmDialog>\n", dependencies: [{ kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i4.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -130,4 +148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImpor
|
|
|
130
148
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ConfirmationService }, { type: i3.MngNavigationService }, { type: i3.MngActionExecutorService }, { type: i3.MngViewContainerComponentService, decorators: [{
|
|
131
149
|
type: Optional
|
|
132
150
|
}] }]; } });
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXJvdXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vcm91dGUvYWN0aW9uLXJvdXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vcm91dGUvYWN0aW9uLXJvdXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUMsY0FBYyxFQUFVLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRS9ELE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFLMUQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxFQUFDLHdCQUF3QixFQUFFLG9CQUFvQixFQUFtQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25ILE9BQU8sRUFBNkIsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQTZCLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFVNUgsTUFBTSxPQUFPLHVCQUF1QjtJQVNoQyxZQUNZLE1BQWMsRUFDZCxLQUFxQixFQUNyQixtQkFBd0MsRUFDeEMsaUJBQXVDLEVBQ3ZDLGNBQXdDLEVBQzVCLG9CQUFtRTtRQUwvRSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtRQUM1Qix5QkFBb0IsR0FBcEIs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QixDQUFDLDBCQ25CcEQsOEdBQ0EsMkNEaUJjLG1CQUFtQjsyRkFHcEIsdUJBQXVCO2tCQVJuQyxTQUFTO2lDQUNNLElBQUksWUFDTixrQkFBa0IsbUJBRVgsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLG1CQUFtQixDQUFDLGFBQ25CLENBQUMsY0FBYyxFQUFFLG1CQUFtQixDQUFDOzswQkFpQjNDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtDb25maXJtRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHtEeW5hbWljRGlhbG9nUmVmfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bX0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ05hdmlnYXRpb25TZXJ2aWNlLCBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0sIEFjdGlvblBhcmFtZXRlcnMsIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWFjdGlvbi1yb3V0ZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1yb3V0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW0NvbmZpcm1EaWFsb2dNb2R1bGVdLFxuICAgIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlLCBDb25maXJtYXRpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZSB7XG4gICAgcHVibGljIGNtcElkOiBzdHJpbmcgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG4gICAgcHJpdmF0ZSBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHByaXZhdGUgYWN0aXZlQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPjtcbiAgICBwcml2YXRlIGRpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XG4gICAgcHJpdmF0ZSBkaWFsb2dDbG9zZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lclNlcnZpY2U6IE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlPFQsIFM+IHwgbnVsbFxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy52aWV3Q29udGFpbmVyU2VydmljZT8uZ2V0QWN0aW9ucygpLmZpbHRlcihhID0+IGEuYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSA/PyBbXTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHAgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5maW5kQWN0aXZlQWN0aW9uKHApO1xuICAgICAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBwLCB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgICAgICAgLy8gdW5zdWJzY3JpYmUgZmlyc3QsIHNvIHRoYXQgY2xvc2UgZXZlbnQgZG9lcyBub3QgdHJpZ2dlclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dDbG9zZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb25maXJtYXRpb25TZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+KSB7XG4gICAgICAgIHJldHVybiBgYWN0aW9uUm91dGVfJHt0aGlzLmNtcElkfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZUFjdGlvbihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHA6IFBhcmFtcywgcXA6IFBhcmFtcykge1xuICAgICAgICBjb25zdCBpdGVtSWQgPSBwWydpdGVtSWQnXTtcbiAgICAgICAgY29uc3QgYWN0aW9uRGF0YTogQWN0aW9uRGF0YSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnaXRlbUlkJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uRGF0YVtrZXldID0gcFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHFwKSB7XG4gICAgICAgICAgICBhY3Rpb25EYXRhW2tleV0gPSBwW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLmFjdGl2YXRlQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgbmV3IEFjdGlvblBhcmFtZXRlcnM8VD4oaXRlbUlkKVxuICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YShhY3Rpb25EYXRhKVxuICAgICAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzKVxuICAgICAgICAgICAgICAgIC53aXRoUm91dGUodGhpcy5yb3V0ZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25JbnN0YW5jZSA9IGluc3RhbmNlO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWY7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0Nsb3NlU3Vic2NyaXB0aW9uID0gaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FdiA9IGUgYXMgVCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52aWV3Q29udGFpbmVyU2VydmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBWaWV3IGNvbnRhaW5lciBzZXJ2aWNlIGNvdWxkIG5vdCBiZSBmb3VuZCwgdGFibGUgcmVsb2FkIHdpbGwgbm90IGJlIHRyaWdnZXJlZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlPy5yZWxvYWRUYWJsZSh7ZGF0YToge2V2ZW50OiBhY3Rpb25Fdn19KTsgLy8gcmVsb2FkIG9ubHkgaWYgbm8gZXJyb3IgaW4gYWN0aW9uIGFuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnVudHJpZ2dlckFjdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVudHJpZ2dlckFjdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ2xvc2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nQ2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nQ2xvc2VTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5kZWFjdGl2YXRlT25Sb3V0ZVRyaWdnZXJlZEFjdGlvbih0aGlzLmFjdGl2ZUFjdGlvbkluc3RhbmNlISk7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uSW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEFjdGl2ZUFjdGlvbihwYXJhbXM6IFBhcmFtcyk6IEFjdGlvbkRlc2NyaXB0b3I8VD4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgdXJsU2VnbWVudHMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnVybDtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gYWN0aW9uLnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgLy8gVE9ETzogZG9udCBzdHJpcCAnLycsIGJ1dCB1c2UgaXQgYWNjb3JkaW5nbHkgd2l0aCBBbmd1bGFyJ3Mgcm91dGVyIHBhdHRlcm5zICgvLCAuLywgLi4vKVxuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGlmIChhY3Rpb25VcmxTZWdtZW50cy5sZW5ndGggIT09IHVybFNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3Rpb25VcmxTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25VcmxTZWdtZW50c1tpXS5zdGFydHNXaXRoKCc6JykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gYWN0aW9uVXJsU2VnbWVudHNbaV0uc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtc1twYXJhbU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uVXJsU2VnbWVudHNbaV0gIT09IHVybFNlZ21lbnRzW2ldLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwiPHAtY29uZmlybURpYWxvZyBba2V5XT1cIidhY3Rpb25Sb3V0ZV8nICsgY21wSWRcIiBbYmFzZVpJbmRleF09XCI1MFwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1jb25maXJtRGlhbG9nPlxuIl19
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXJvdXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vcm91dGUvYWN0aW9uLXJvdXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vcm91dGUvYWN0aW9uLXJvdXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFVLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXJKLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJMUQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxFQUFDLHdCQUF3QixFQUFFLG9CQUFvQixFQUFtQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25ILE9BQU8sRUFBNkIsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQTZCLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFVNUgsTUFBTSxPQUFPLHVCQUF1QjtJQVVoQyxZQUNZLE1BQWMsRUFDZCxLQUFxQixFQUNyQixtQkFBd0MsRUFDeEMsaUJBQXVDLEVBQ3ZDLGNBQXdDLEVBQzVCLG9CQUFtRTtRQUwvRSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlC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RSxDQUFDLENBQUMsd0NBQXdDO3dCQUNsRixNQUFNO29CQUNWLEtBQUssdUJBQXVCLENBQUMsa0JBQWtCO3dCQUMzQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7d0JBQ2xGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDdkIsTUFBTTtvQkFDVixLQUFLLHVCQUF1QixDQUFDLG9CQUFvQjt3QkFDN0MsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN2QixNQUFNO2lCQUNiO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ2hHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN6RCxDQUFDOztvSEF4SlEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsK0RBRnJCLENBQUMsY0FBYyxFQUFFLG1CQUFtQixDQUFDLDBCQ2xCcEQsOEdBQ0EsMkNEZ0JjLG1CQUFtQjsyRkFHcEIsdUJBQXVCO2tCQVJuQyxTQUFTO2lDQUNNLElBQUksWUFDTixrQkFBa0IsbUJBRVgsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLG1CQUFtQixDQUFDLGFBQ25CLENBQUMsY0FBYyxFQUFFLG1CQUFtQixDQUFDOzswQkFrQjNDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25Ta2lwcGVkLCBOYXZpZ2F0aW9uU3RhcnQsIFBhcmFtcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0NvbmZpcm1EaWFsb2dNb2R1bGV9IGZyb20gJ3ByaW1lbmcvY29uZmlybWRpYWxvZyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvYWN0aW9uJztcbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtfSBmcm9tICcuLi8uLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSwgTW5nTmF2aWdhdGlvblNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0FjdGlvbkRhdGEsIEFjdGlvbkluc3RhbmNlLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uLXJvdXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLXJvdXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbQ29uZmlybURpYWxvZ01vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2UsIENvbmZpcm1hdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvblJvdXRlQ29tcG9uZW50PFQsIFM+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgY21wSWQ6IHN0cmluZyA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcbiAgICBwcml2YXRlIGFjdGlvbnM6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+ID0gW107XG4gICAgcHJpdmF0ZSBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+O1xuICAgIHByaXZhdGUgaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG4gICAgcHJpdmF0ZSBpc1JvdXRlck5hdmlnYXRpb25JblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTW5nTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlPy5nZXRBY3Rpb25zKCkuZmlsdGVyKGEgPT4gYS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpID8/IFtdO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmZpbmRBY3Rpb25Gb3JSb3V0ZShwKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlQWN0aW9uKGFjdGlvbiwgcCwgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSb3V0ZXJOYXZpZ2F0aW9uSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCB8fCBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCB8fCBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU2tpcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUm91dGVyTmF2aWdhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5vbkFjdGlvblJvdXRlRGVzdHJveShpbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlybWF0aW9uU2VydmljZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleShhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICByZXR1cm4gYGFjdGlvblJvdXRlXyR7dGhpcy5jbXBJZH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWN0aXZhdGVBY3Rpb24oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LCBwOiBQYXJhbXMsIHFwOiBQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgaXRlbUlkID0gcFsnaXRlbUlkJ107XG4gICAgICAgIGNvbnN0IGFjdGlvbkRhdGE6IEFjdGlvbkRhdGEgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcCkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2l0ZW1JZCcpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvbkRhdGFba2V5XSA9IHBba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBxcCkge1xuICAgICAgICAgICAgYWN0aW9uRGF0YVtrZXldID0gcFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzQWN0aW9uSW5zdGFuY2UoXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLmFjdGl2YXRlQWN0aW9uKFxuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVyczxUPihpdGVtSWQpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YShhY3Rpb25EYXRhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyU2VydmljZSA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoUm91dGUodGhpcy5yb3V0ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVudHJpZ2dlckFjdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8IHRoaXMuaXNSb3V0ZXJOYXZpZ2F0aW9uSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZTtcbiAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IuZmluaXNoQWN0aW9uUm91dGVVbnRyaWdnZXIoaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEFjdGlvbkZvclJvdXRlKHBhcmFtczogUGFyYW1zKTogQWN0aW9uRGVzY3JpcHRvcjxUPiB8IG51bGwge1xuICAgICAgICBjb25zdCB1cmxTZWdtZW50cyA9IHRoaXMucm91dGUuc25hcHNob3QudXJsO1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICAvLyBUT0RPOiBkb250IHN0cmlwICcvJywgYnV0IHVzZSBpdCBhY2NvcmRpbmdseSB3aXRoIEFuZ3VsYXIncyByb3V0ZXIgcGF0dGVybnMgKC8sIC4vLCAuLi8pXG4gICAgICAgICAgICBpZiAoYWN0aW9uVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25VcmxTZWdtZW50cyA9IGFjdGlvblVybC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aCAhPT0gdXJsU2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvblVybFNlZ21lbnRzW2ldLnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbU5hbWUgPSBhY3Rpb25VcmxTZWdtZW50c1tpXS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1zW3BhcmFtTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25VcmxTZWdtZW50c1tpXSAhPT0gdXJsU2VnbWVudHNbaV0ucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NBY3Rpb25JbnN0YW5jZShpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSAhPT0gaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSkge1xuICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5zdGFuY2Uuc3RhdGUkLnN1YnNjcmliZShzID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyU2VydmljZT8ucmVsb2FkVGFibGUoKTsgLy8gcmVsb2FkIG9ubHkgaWYgbm8gZXJyb3IgaW4gYWN0aW9uIGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyU2VydmljZT8ucmVsb2FkVGFibGUoKTsgLy8gcmVsb2FkIG9ubHkgaWYgbm8gZXJyb3IgaW4gYWN0aW9uIGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnRyaWdnZXJBY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnRyaWdnZXJBY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5yZWFjdGl2YXRpb25JbnN0YW5jZSQuc3Vic2NyaWJlKG5ld0luc3RhbmNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZShuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZXRJbnN0YW5jZSgpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cbiIsIjxwLWNvbmZpcm1EaWFsb2cgW2tleV09XCInYWN0aW9uUm91dGVfJyArIGNtcElkXCIgW2Jhc2VaSW5kZXhdPVwiNTBcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtY29uZmlybURpYWxvZz5cbiJdfQ==
|