@datarailsshared/datarailsshared 1.5.230-rocket → 1.5.233
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/_datarailsshared.styles.css +2 -0
- package/assets/styles/_styles.scss +1 -0
- package/assets/styles/dataRailsFont.scss +1 -0
- package/assets/styles/icons.scss +1 -0
- package/datarailsshared-datarailsshared-1.5.233.tgz +0 -0
- package/esm2022/lib/date-tags/any-tag.component.mjs +4 -4
- package/esm2022/lib/date-tags/date-tag.component.mjs +4 -4
- package/esm2022/lib/date-tags/date-tag.module.mjs +5 -5
- package/esm2022/lib/date-tags/day-tag/day-tag.component.mjs +4 -4
- package/esm2022/lib/date-tags/forecast-tag/forecast-tag.component.mjs +4 -4
- package/esm2022/lib/date-tags/month-tag/month-tag.component.mjs +4 -4
- package/esm2022/lib/date-tags/quarter-tag/quarter-tag.component.mjs +4 -4
- package/esm2022/lib/date-tags/week-tag/week-tag.component.mjs +4 -4
- package/esm2022/lib/date-tags/year-tag/year-tag.component.mjs +4 -4
- package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +4 -4
- package/esm2022/lib/directives/click-outside/click-outside.module.mjs +5 -5
- package/esm2022/lib/dr-accordion/accordion-item-body.component.mjs +4 -4
- package/esm2022/lib/dr-accordion/accordion-item-header.component.mjs +4 -4
- package/esm2022/lib/dr-accordion/accordion-item.component.mjs +4 -4
- package/esm2022/lib/dr-accordion/accordion.component.mjs +4 -4
- package/esm2022/lib/dr-accordion/accordion.module.mjs +5 -5
- package/esm2022/lib/dr-alert/dr-alert.component.mjs +4 -4
- package/esm2022/lib/dr-alert/dr-alert.module.mjs +5 -5
- package/esm2022/lib/dr-avatar/dr-avatar.component.mjs +4 -4
- package/esm2022/lib/dr-avatar/dr-avatar.module.mjs +5 -5
- package/esm2022/lib/dr-avatar/dr-avatar.pipe.mjs +4 -4
- package/esm2022/lib/dr-badge-status/dr-badge-status.component.mjs +4 -4
- package/esm2022/lib/dr-badge-status/dr-badge-status.module.mjs +5 -5
- package/esm2022/lib/dr-chat/chat.component.mjs +4 -4
- package/esm2022/lib/dr-chat/chat.module.mjs +5 -5
- package/esm2022/lib/dr-chat/dr-chat-form/chat-form.component.mjs +4 -4
- package/esm2022/lib/dr-chat/dr-chat-message/chat-message.component.mjs +4 -4
- package/esm2022/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.directive.mjs +4 -4
- package/esm2022/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.service.mjs +4 -4
- package/esm2022/lib/dr-chat/dr-chat-message/dr-chat-message-file/chat-message-file.component.mjs +4 -4
- package/esm2022/lib/dr-chat/dr-chat-message/dr-chat-message-text/chat-message-text.component.mjs +4 -4
- package/esm2022/lib/dr-chat/dr-chat-suggestions/chat-suggestions.component.mjs +4 -4
- package/esm2022/lib/dr-chat/dr-dot-flashing/dr-dot-flashing.component.mjs +4 -4
- package/esm2022/lib/dr-details-list/dr-details-list.component.mjs +4 -4
- package/esm2022/lib/dr-details-list/dr-details-list.module.mjs +5 -5
- package/esm2022/lib/dr-dialog/components/dialog-modal-wrapper/dialog-modal-wrapper.component.mjs +5 -5
- package/esm2022/lib/dr-dialog/components/dialog-wrapper/dialog-wrapper.component.mjs +5 -5
- package/esm2022/lib/dr-dialog/dialog.module.mjs +5 -5
- package/esm2022/lib/dr-dialog/interfaces/dialog-data.mjs +2 -1
- package/esm2022/lib/dr-dialog/services/dialog.service.mjs +4 -4
- package/esm2022/lib/dr-dropdown/dr-dropdown-item-show.pipe.mjs +4 -4
- package/esm2022/lib/dr-dropdown/dr-dropdown-position.directive.mjs +4 -4
- package/esm2022/lib/dr-dropdown/dr-dropdown.component.mjs +4 -4
- package/esm2022/lib/dr-dropdown/dr-dropdown.directive.mjs +4 -4
- package/esm2022/lib/dr-dropdown/dr-dropdown.module.mjs +5 -5
- package/esm2022/lib/dr-dropdown/dr-dropdown.service.mjs +4 -4
- package/esm2022/lib/dr-dynamic-tag/dr-dynamic-tag.component.mjs +4 -4
- package/esm2022/lib/dr-dynamic-tag/dr-dynamic-tag.module.mjs +5 -5
- package/esm2022/lib/dr-error/dr-error.component.mjs +4 -4
- package/esm2022/lib/dr-error/dr-error.module.mjs +5 -5
- package/esm2022/lib/dr-inputs/button/button.component.mjs +4 -4
- package/esm2022/lib/dr-inputs/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/lib/dr-inputs/date-pickers/directives/dr-date-picker-format.directive.mjs +4 -4
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker/dr-date-picker.component.mjs +6 -6
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.mjs +7 -7
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker_custom-header/dr-date-picker_custom-header.component.mjs +4 -4
- package/esm2022/lib/dr-inputs/date-pickers/dr-show-timeframe.pipe.mjs +4 -4
- package/esm2022/lib/dr-inputs/date-pickers/services/dr-date-picker.service.mjs +4 -4
- package/esm2022/lib/dr-inputs/dr-input/dr-input.component.mjs +4 -4
- package/esm2022/lib/dr-inputs/dr-inputs.module.mjs +5 -5
- package/esm2022/lib/dr-inputs/dr-model-debounce-change.directive.mjs +4 -4
- package/esm2022/lib/dr-inputs/dr-select/dr-select.component.mjs +6 -6
- package/esm2022/lib/dr-inputs/dr-select-add-item/dr-select-add-item.component.mjs +4 -4
- package/esm2022/lib/dr-inputs/dr-toggle/dr-toggle.component.mjs +4 -4
- package/esm2022/lib/dr-inputs/dr-toggle-button/dr-toggle-button.component.mjs +4 -4
- package/esm2022/lib/dr-inputs/radio-button/radio-button.component.mjs +4 -4
- package/esm2022/lib/dr-inputs/radio-button/radio-group.component.mjs +4 -4
- package/esm2022/lib/dr-layout/dr-layout-body.component.mjs +4 -4
- package/esm2022/lib/dr-layout/dr-layout-header.component.mjs +4 -4
- package/esm2022/lib/dr-layout/dr-layout.component.mjs +4 -4
- package/esm2022/lib/dr-layout/dr-layout.module.mjs +5 -5
- package/esm2022/lib/dr-popover/dr-popover.component.mjs +4 -4
- package/esm2022/lib/dr-popover/dr-popover.directive.mjs +4 -4
- package/esm2022/lib/dr-popover/dr-popover.module.mjs +5 -5
- package/esm2022/lib/dr-popover/dr-popover.service.mjs +4 -4
- package/esm2022/lib/dr-scenario/components/dr-scenario-configuration/dr-scenario-configuration.component.mjs +10 -38
- package/esm2022/lib/dr-scenario/components/dr-scenario-tag-configuration/dr-scenario-tag-configuration.component.mjs +4 -4
- package/esm2022/lib/dr-scenario/consts/scenario-tags-config.mjs +2 -2
- package/esm2022/lib/dr-scenario/dr-scenario.module.mjs +12 -8
- package/esm2022/lib/dr-scenario/interfaces/scenario.mjs +1 -1
- package/esm2022/lib/dr-scenario/services/scenario.service.mjs +42 -17
- package/esm2022/lib/dr-spinner/dr-spinner.component.mjs +4 -4
- package/esm2022/lib/dr-spinner/dr-spinner.directive.mjs +4 -4
- package/esm2022/lib/dr-spinner/dr-spinner.module.mjs +5 -5
- package/esm2022/lib/dr-tabs/dr-tab.component.mjs +4 -4
- package/esm2022/lib/dr-tabs/dr-tabs.component.mjs +4 -4
- package/esm2022/lib/dr-tabs/dr-tabs.module.mjs +5 -5
- package/esm2022/lib/dr-tags/dr-tag.component.mjs +4 -4
- package/esm2022/lib/dr-tags/dr-tag.module.mjs +5 -5
- package/esm2022/lib/dr-tags-constructor/dr-tags-constructor.component.mjs +108 -0
- package/esm2022/lib/dr-tags-constructor/dr-tags-constructor.module.mjs +23 -0
- package/esm2022/lib/dr-tags-constructor/tags-constructor.service.mjs +70 -0
- package/esm2022/lib/dr-tooltip/components/tooltip-info/tooltip-info.component.mjs +4 -4
- package/esm2022/lib/dr-tooltip/components/tooltip-info-simple/tooltip-info-simple.component.mjs +4 -4
- package/esm2022/lib/dr-tooltip/components/tooltip-no-body/tooltip-no-body.component.mjs +4 -4
- package/esm2022/lib/dr-tooltip/components/tooltip-process-default/tooltip-process-default.component.mjs +4 -4
- package/esm2022/lib/dr-tooltip/dr-tooltip.component.mjs +4 -4
- package/esm2022/lib/dr-tooltip/dr-tooltip.directive.mjs +4 -4
- package/esm2022/lib/dr-tooltip/dr-tooltip.module.mjs +5 -5
- package/esm2022/lib/dr-treeview/components/treeview/treeview.component.mjs +4 -4
- package/esm2022/lib/dr-treeview/components/treeview-item/treeview-item.component.mjs +4 -4
- package/esm2022/lib/dr-treeview/dr-tree-view.module.mjs +5 -5
- package/esm2022/lib/dr-treeview/helpers/treeview-event-parser.mjs +13 -13
- package/esm2022/lib/dr-treeview/models/treeview-config.mjs +4 -4
- package/esm2022/lib/dr-treeview/models/treeview-i18n.mjs +7 -7
- package/esm2022/lib/dr-treeview/pipes/treeview.pipe.mjs +4 -4
- package/esm2022/lib/list-tags/list-tag.component.mjs +4 -4
- package/esm2022/lib/list-tags/list-tag.module.mjs +5 -5
- package/esm2022/lib/stepper/stepper.component.mjs +4 -4
- package/esm2022/lib/stepper/stepper.module.mjs +5 -5
- package/esm2022/public-api.mjs +5 -2
- package/fesm2022/datarailsshared-datarailsshared.mjs +582 -403
- package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
- package/lib/dr-dialog/interfaces/dialog-data.d.ts +2 -1
- package/lib/dr-scenario/components/dr-scenario-configuration/dr-scenario-configuration.component.d.ts +0 -4
- package/lib/dr-scenario/dr-scenario.module.d.ts +2 -1
- package/lib/dr-scenario/interfaces/scenario.d.ts +1 -1
- package/lib/dr-scenario/services/scenario.service.d.ts +4 -2
- package/lib/dr-tags-constructor/dr-tags-constructor.component.d.ts +33 -0
- package/lib/dr-tags-constructor/dr-tags-constructor.module.d.ts +10 -0
- package/lib/dr-tags-constructor/tags-constructor.service.d.ts +12 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -1
- package/datarailsshared-datarailsshared-1.5.230-rocket.tgz +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { TagsConfigSubType, TagTypes } from '../../models/serverTags';
|
|
3
3
|
import { Scenario } from '../interfaces/scenario';
|
|
4
|
-
import { cloneDeep as _cloneDeep, filter as _filter, find as _find, forEach as _forEach, orderBy as _orderBy, indexOf as _indexOf, reduce as _reduce, some as _some, } from 'lodash';
|
|
4
|
+
import { cloneDeep as _cloneDeep, filter as _filter, find as _find, forEach as _forEach, orderBy as _orderBy, indexOf as _indexOf, reduce as _reduce, some as _some, map as _map, includes as _includes } from 'lodash';
|
|
5
5
|
import { getScenarioTagDataConfig } from '../consts/scenario-tags-config';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export class ScenarioService {
|
|
@@ -34,7 +34,7 @@ export class ScenarioService {
|
|
|
34
34
|
const tag = tagWithSubTags || this.prepareScenarioTag(scenarioTagsConfig, scenarioTag, scenario, isTagWithSubTags);
|
|
35
35
|
if (isTagWithSubTags) {
|
|
36
36
|
this.updateScenarioSubTags(tag, scenarioTag);
|
|
37
|
-
tag.subTags =
|
|
37
|
+
tag.subTags = ScenarioService.sortedSubTags(tag);
|
|
38
38
|
}
|
|
39
39
|
if (tagWithSubTags)
|
|
40
40
|
return;
|
|
@@ -47,18 +47,45 @@ export class ScenarioService {
|
|
|
47
47
|
if (isTagNotSupportingDates) {
|
|
48
48
|
this.turnOffDateTag(scenarioTagsUi);
|
|
49
49
|
}
|
|
50
|
-
const tagWithSpecificDateTags = _find(scenarioTagsUi, (tag) => tag.toggle && !!tag.
|
|
50
|
+
const tagWithSpecificDateTags = _find(scenarioTagsUi, (tag) => tag.toggle && !!tag.acceptableSubTags?.length);
|
|
51
51
|
if (tagWithSpecificDateTags) {
|
|
52
52
|
this.hideNotAvailableTags(tagWithSpecificDateTags, scenarioTagsUi);
|
|
53
53
|
}
|
|
54
54
|
return this.sortScenarioTags(scenarioTagsUi);
|
|
55
55
|
}
|
|
56
|
+
tagNotSupportingDatesHandler(tag, tagNotSupportingDates, dateTag) {
|
|
57
|
+
if (!tagNotSupportingDates || !tag.toggle)
|
|
58
|
+
return;
|
|
59
|
+
if (tag.type === TagTypes.DATE) {
|
|
60
|
+
tagNotSupportingDates.toggle = false;
|
|
61
|
+
}
|
|
62
|
+
if (tag === tagNotSupportingDates) {
|
|
63
|
+
if (dateTag) {
|
|
64
|
+
dateTag.toggle = false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
tagAcceptableSubTagsHandler(tag, dateTag) {
|
|
69
|
+
if (!tag.acceptableSubTags?.length)
|
|
70
|
+
return;
|
|
71
|
+
if (!dateTag)
|
|
72
|
+
return;
|
|
73
|
+
dateTag.subTags = _map(dateTag.subTags, (subTag) => {
|
|
74
|
+
subTag.hidden = tag.toggle && !_includes(tag.acceptableSubTags, subTag.subType);
|
|
75
|
+
return subTag;
|
|
76
|
+
});
|
|
77
|
+
dateTag.selectedTagSubType = tag.acceptableSubTags[0];
|
|
78
|
+
}
|
|
56
79
|
sortScenarioTags(scenarioTagsUi) {
|
|
57
80
|
return _orderBy(scenarioTagsUi, [
|
|
58
81
|
(tag) => (tag.type === TagTypes.DATE ? 0 : 1),
|
|
59
82
|
(tag) => (tag.name === 'File Status')
|
|
60
83
|
]);
|
|
61
84
|
}
|
|
85
|
+
static sortedSubTags(tag) {
|
|
86
|
+
const SUB_TAGS_ORDER = [TagsConfigSubType.DAY, TagsConfigSubType.WEEK, TagsConfigSubType.MONTH, TagsConfigSubType.QUARTER, TagsConfigSubType.YEAR];
|
|
87
|
+
return _orderBy(tag.subTags, (subTag) => _indexOf(SUB_TAGS_ORDER, subTag.subType));
|
|
88
|
+
}
|
|
62
89
|
initExistingTagsConfig(scenario, scenarioTagsUi) {
|
|
63
90
|
_forEach(this.currentTagsConfig, (tagConfig) => {
|
|
64
91
|
const tagSubType = tagConfig?.options?.sub_type;
|
|
@@ -69,8 +96,10 @@ export class ScenarioService {
|
|
|
69
96
|
const scenarioTagUi = tagConfig.type === TagTypes.DATE
|
|
70
97
|
? _find(scenarioTagsUi, { type: tagConfig.type })
|
|
71
98
|
: _find(scenarioTagsUi, { selectedTagSubType: tagSubType });
|
|
72
|
-
scenarioTagUi
|
|
73
|
-
|
|
99
|
+
if (scenarioTagUi) {
|
|
100
|
+
scenarioTagUi.toggle = true;
|
|
101
|
+
scenarioTagUi.selectedTagSubType = tagSubType;
|
|
102
|
+
}
|
|
74
103
|
});
|
|
75
104
|
}
|
|
76
105
|
prepareScenarioTag(scenarioTagsConfig, scenarioTag, scenario, isDateTag) {
|
|
@@ -90,15 +119,11 @@ export class ScenarioService {
|
|
|
90
119
|
if (scenarioTag.scenarioData.turnOffDateTags) {
|
|
91
120
|
tag.turnOffDateTags = scenarioTag.scenarioData.turnOffDateTags;
|
|
92
121
|
}
|
|
93
|
-
if (scenarioTag.scenarioData.
|
|
94
|
-
tag.
|
|
122
|
+
if (scenarioTag.scenarioData.acceptableSubTags) {
|
|
123
|
+
tag.acceptableSubTags = scenarioTag.scenarioData.acceptableSubTags;
|
|
95
124
|
}
|
|
96
125
|
return tag;
|
|
97
126
|
}
|
|
98
|
-
sortedScenarioSubTags(tag) {
|
|
99
|
-
const SUB_TAGS_ORDER = [TagsConfigSubType.DAY, TagsConfigSubType.WEEK, TagsConfigSubType.MONTH, TagsConfigSubType.QUARTER, TagsConfigSubType.YEAR];
|
|
100
|
-
return _orderBy(tag.subTags, (subTag) => _indexOf(SUB_TAGS_ORDER, subTag.subType));
|
|
101
|
-
}
|
|
102
127
|
updateScenarioSubTags(tag, scenarioTag) {
|
|
103
128
|
if (!tag.subTags) {
|
|
104
129
|
tag.subTags = [];
|
|
@@ -120,14 +145,14 @@ export class ScenarioService {
|
|
|
120
145
|
if (!subTags.length)
|
|
121
146
|
return;
|
|
122
147
|
_forEach(scenarioTags, (tag) => {
|
|
123
|
-
if (!tag.
|
|
148
|
+
if (!tag.acceptableSubTags?.length)
|
|
124
149
|
return;
|
|
125
150
|
if (tag !== tagWithSpecificDateTags) {
|
|
126
151
|
tag.toggle = false;
|
|
127
152
|
}
|
|
128
153
|
});
|
|
129
154
|
_forEach(subTags, (subTag) => {
|
|
130
|
-
subTag.hidden = !tagWithSpecificDateTags.
|
|
155
|
+
subTag.hidden = !tagWithSpecificDateTags.acceptableSubTags.includes(subTag.subType);
|
|
131
156
|
});
|
|
132
157
|
}
|
|
133
158
|
getScenarioSelectedDateTag(scenario, dateTags) {
|
|
@@ -156,10 +181,10 @@ export class ScenarioService {
|
|
|
156
181
|
return acc;
|
|
157
182
|
}, []);
|
|
158
183
|
}
|
|
159
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
|
160
|
-
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.
|
|
184
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ScenarioService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
185
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ScenarioService }); }
|
|
161
186
|
}
|
|
162
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
|
187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ScenarioService, decorators: [{
|
|
163
188
|
type: Injectable
|
|
164
189
|
}] });
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLXNjZW5hcmlvL3NlcnZpY2VzL3NjZW5hcmlvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVEsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUUsT0FBTyxFQUE0RCxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RyxPQUFPLEVBQ0gsU0FBUyxJQUFJLFVBQVUsRUFDdkIsTUFBTSxJQUFJLE9BQU8sRUFDakIsSUFBSSxJQUFJLEtBQUssRUFDYixPQUFPLElBQUksUUFBUSxFQUNuQixPQUFPLElBQUksUUFBUSxFQUNuQixPQUFPLElBQUksUUFBUSxFQUNuQixNQUFNLElBQUksT0FBTyxFQUNqQixJQUFJLElBQUksS0FBSyxHQUNoQixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHMUUsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFFWSw4QkFBeUIsR0FBRyxPQUFPLENBQUM7S0E0TC9DO0lBdExHLElBQVcsU0FBUztRQUNoQixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsSUFBWSxxQkFBcUI7UUFDN0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ3BDLENBQUM7SUFFTSxnQkFBZ0IsQ0FB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ZixlQUFlOzsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVRhZywgVGFnc0NvbmZpZ1N1YlR5cGUsIFRhZ1R5cGVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NlcnZlclRhZ3MnO1xuaW1wb3J0IHsgSVNjZW5hcmlvLCBJU2NlbmFyaW9TdWJUYWcsIElTY2VuYXJpb1RhZywgSVNjZW5hcmlvVGFnVWksIFNjZW5hcmlvIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zY2VuYXJpbyc7XG5pbXBvcnQge1xuICAgIGNsb25lRGVlcCBhcyBfY2xvbmVEZWVwLFxuICAgIGZpbHRlciBhcyBfZmlsdGVyLFxuICAgIGZpbmQgYXMgX2ZpbmQsXG4gICAgZm9yRWFjaCBhcyBfZm9yRWFjaCxcbiAgICBvcmRlckJ5IGFzIF9vcmRlckJ5LFxuICAgIGluZGV4T2YgYXMgX2luZGV4T2YsXG4gICAgcmVkdWNlIGFzIF9yZWR1Y2UsXG4gICAgc29tZSBhcyBfc29tZSxcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGdldFNjZW5hcmlvVGFnRGF0YUNvbmZpZyB9IGZyb20gJy4uL2NvbnN0cy9zY2VuYXJpby10YWdzLWNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTY2VuYXJpb1NlcnZpY2Uge1xuICAgIHByaXZhdGUgREVGQVVMVF9GT1JFQ0FTVF9EQVRFX1RBRyA9ICdNb250aCc7XG5cbiAgICBwcml2YXRlIHdob2xlVGFnc0NvbmZpZzogSVRhZ1tdO1xuICAgIHByaXZhdGUgY3VycmVudFRhZ3NDb25maWc6IElUYWdbXTtcbiAgICBwcml2YXRlIGlzTXVsdGlwbGVEaW1lbnNpb246IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgZ2V0IHNjZW5hcmlvcygpOiBTY2VuYXJpb1tdIHtcbiAgICAgICAgcmV0dXJuIF9vcmRlckJ5KE9iamVjdC52YWx1ZXMoU2NlbmFyaW8pLCAoc2NlbmFyaW8pID0+IHNjZW5hcmlvID09PSBTY2VuYXJpby5OT05FID8gMSA6IDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGFyZUV4aXN0aW5nVGFnc0NvbmZpZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jdXJyZW50VGFnc0NvbmZpZztcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdFNjZW5hcmlvVGFncyh3aG9sZVRhZ3NDb25maWc6IElUYWdbXSwgY3VycmVudFRhZ3NDb25maWc6IElUYWdbXSwgaXNNdWx0aXBsZURpbWVuc2lvbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIXdob2xlVGFnc0NvbmZpZz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy53aG9sZVRhZ3NDb25maWcgPSBfY2xvbmVEZWVwKHdob2xlVGFnc0NvbmZpZyk7XG4gICAgICAgIHRoaXMuY3VycmVudFRhZ3NDb25maWcgPSBjdXJyZW50VGFnc0NvbmZpZztcbiAgICAgICAgdGhpcy5pc011bHRpcGxlRGltZW5zaW9uID0gaXNNdWx0aXBsZURpbWVuc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFnc0NvbmZpZ0J5U2NlbmFyaW9UYWdzKHNjZW5hcmlvVGFnczogSVNjZW5hcmlvVGFnVWlbXSwgdGFnc0NvbmZpZzogSVRhZ1tdKTogSVRhZ1tdIHtcbiAgICAgICAgY29uc3Qgc2NlbmFyaW9UYWdzQ29uZmlnID0gX2ZpbHRlcih0YWdzQ29uZmlnLCAodGFnQ29uZmlnKSA9PlxuICAgICAgICAgICAgX3NvbWUoc2NlbmFyaW9UYWdzLCAoc2NlbmFyaW9UYWcpID0+IHNjZW5hcmlvVGFnLnRvZ2dsZSAmJiBzY2VuYXJpb1RhZy5zZWxlY3RlZFRhZ1N1YlR5cGUgPT09IHRhZ0NvbmZpZy5vcHRpb25zLnN1Yl90eXBlKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydFNjZW5hcmlvVGFncyhzY2VuYXJpb1RhZ3NDb25maWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTY2VuYXJpb1RhZ3NCeVNjZW5hcmlvKHNjZW5hcmlvOiBTY2VuYXJpbykge1xuICAgICAgICBjb25zdCBzY2VuYXJpb1RhZ3NDb25maWc6IElTY2VuYXJpb1RhZ1tdID0gdGhpcy5nZXRTY2VuYXJpb1RhZ3NDb25maWcoc2NlbmFyaW8sIHRoaXMud2hvbGVUYWdzQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgc2NlbmFyaW9UYWdzVWk6IElTY2VuYXJpb1RhZ1VpW10gPSBbXTtcblxuICAgICAgICBfZm9yRWFjaChzY2VuYXJpb1RhZ3NDb25maWcsIChzY2VuYXJpb1RhZzogSVNjZW5hcmlvVGFnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1RhZ1dpdGhTdWJUYWdzID0gc2NlbmFyaW9UYWcudHlwZSA9PT0gVGFnVHlwZXMuREFURTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ1dpdGhTdWJUYWdzID0gaXNUYWdXaXRoU3ViVGFncyAmJiBfZmluZChzY2VuYXJpb1RhZ3NVaSwgeyB0eXBlOiBzY2VuYXJpb1RhZy50eXBlIH0pO1xuXG4gICAgICAgICAgICBjb25zdCB0YWc6IElTY2VuYXJpb1RhZ1VpID0gdGFnV2l0aFN1YlRhZ3MgfHwgdGhpcy5wcmVwYXJlU2NlbmFyaW9UYWcoc2NlbmFyaW9UYWdzQ29uZmlnLCBzY2VuYXJpb1RhZywgc2NlbmFyaW8sIGlzVGFnV2l0aFN1YlRhZ3MpO1xuXG4gICAgICAgICAgICBpZiAoaXNUYWdXaXRoU3ViVGFncykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2NlbmFyaW9TdWJUYWdzKHRhZywgc2NlbmFyaW9UYWcpO1xuICAgICAgICAgICAgICAgIHRhZy5zdWJUYWdzID0gdGhpcy5zb3J0ZWRTY2VuYXJpb1N1YlRhZ3ModGFnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhZ1dpdGhTdWJUYWdzKSByZXR1cm47XG4gICAgICAgICAgICBzY2VuYXJpb1RhZ3NVaS5wdXNoKHRhZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFyZUV4aXN0aW5nVGFnc0NvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5pbml0RXhpc3RpbmdUYWdzQ29uZmlnKHNjZW5hcmlvLCBzY2VuYXJpb1RhZ3NVaSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1RhZ05vdFN1cHBvcnRpbmdEYXRlcyA9IF9zb21lKHNjZW5hcmlvVGFnc1VpLCB7IHR1cm5PZmZEYXRlVGFnczogdHJ1ZSwgdG9nZ2xlOiB0cnVlIH0pO1xuICAgICAgICBpZiAoaXNUYWdOb3RTdXBwb3J0aW5nRGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMudHVybk9mZkRhdGVUYWcoc2NlbmFyaW9UYWdzVWkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFnV2l0aFNwZWNpZmljRGF0ZVRhZ3M6IElTY2VuYXJpb1RhZ1VpID0gX2ZpbmQoc2NlbmFyaW9UYWdzVWksICh0YWcpID0+IHRhZy50b2dnbGUgJiYgISF0YWcuYWNjZXB0YWJsZURhdGVUYWdzPy5sZW5ndGgpO1xuICAgICAgICBpZiAodGFnV2l0aFNwZWNpZmljRGF0ZVRhZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vdEF2YWlsYWJsZVRhZ3ModGFnV2l0aFNwZWNpZmljRGF0ZVRhZ3MsIHNjZW5hcmlvVGFnc1VpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRTY2VuYXJpb1RhZ3Moc2NlbmFyaW9UYWdzVWkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0U2NlbmFyaW9UYWdzKHNjZW5hcmlvVGFnc1VpOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIF9vcmRlckJ5KHNjZW5hcmlvVGFnc1VpLCBbXG4gICAgICAgICAgICAodGFnKSA9PiAodGFnLnR5cGUgPT09IFRhZ1R5cGVzLkRBVEUgPyAwIDogMSksXG4gICAgICAgICAgICAodGFnKSA9PiAodGFnLm5hbWUgPT09ICdGaWxlIFN0YXR1cycpXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEV4aXN0aW5nVGFnc0NvbmZpZyhzY2VuYXJpbzogU2NlbmFyaW8sIHNjZW5hcmlvVGFnc1VpOiBJU2NlbmFyaW9UYWdVaVtdKSB7XG4gICAgICAgIF9mb3JFYWNoKHRoaXMuY3VycmVudFRhZ3NDb25maWcsICh0YWdDb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ1N1YlR5cGUgPSB0YWdDb25maWc/Lm9wdGlvbnM/LnN1Yl90eXBlO1xuICAgICAgICAgICAgY29uc3Qgc2NlbmFyaW9UYWdEYXRhQ29uZmlnID0gZ2V0U2NlbmFyaW9UYWdEYXRhQ29uZmlnKHRoaXMuaXNNdWx0aXBsZURpbWVuc2lvbik7XG4gICAgICAgICAgICBpZiAoIXNjZW5hcmlvVGFnRGF0YUNvbmZpZyB8fCAhc2NlbmFyaW9UYWdEYXRhQ29uZmlnW3NjZW5hcmlvXSB8fCAhc2NlbmFyaW9UYWdEYXRhQ29uZmlnW3NjZW5hcmlvXVt0YWdTdWJUeXBlXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2NlbmFyaW9UYWdVaSA9IHRhZ0NvbmZpZy50eXBlID09PSBUYWdUeXBlcy5EQVRFXG4gICAgICAgICAgICAgICAgPyBfZmluZChzY2VuYXJpb1RhZ3NVaSwgeyB0eXBlOiB0YWdDb25maWcudHlwZSB9KVxuICAgICAgICAgICAgICAgIDogX2ZpbmQoc2NlbmFyaW9UYWdzVWksIHsgc2VsZWN0ZWRUYWdTdWJUeXBlOiB0YWdTdWJUeXBlIH0pO1xuXG4gICAgICAgICAgICBzY2VuYXJpb1RhZ1VpLnRvZ2dsZSA9IHRydWU7XG4gICAgICAgICAgICBzY2VuYXJpb1RhZ1VpLnNlbGVjdGVkVGFnU3ViVHlwZSA9IHRhZ1N1YlR5cGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZVNjZW5hcmlvVGFnKHNjZW5hcmlvVGFnc0NvbmZpZzogSVNjZW5hcmlvVGFnW10sIHNjZW5hcmlvVGFnOiBJU2NlbmFyaW9UYWcsIHNjZW5hcmlvOiBTY2VuYXJpbywgaXNEYXRlVGFnOiBib29sZWFuKTogSVNjZW5hcmlvVGFnVWkge1xuICAgICAgICBjb25zdCB0b2dnbGVTdGF0dXMgPSBpc0RhdGVUYWdcbiAgICAgICAgICAgID8gX3NvbWUoc2NlbmFyaW9UYWdzQ29uZmlnLCAodGFnKSA9PiB0YWcudHlwZSA9PT0gVGFnVHlwZXMuREFURSAmJiB0YWcuc2NlbmFyaW9EYXRhLnRvZ2dsZSlcbiAgICAgICAgICAgIDogc2NlbmFyaW9UYWcuc2NlbmFyaW9EYXRhLnRvZ2dsZTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZFRhZ1N1YlR5cGUgPSAgaXNEYXRlVGFnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmdldFNjZW5hcmlvU2VsZWN0ZWREYXRlVGFnKHNjZW5hcmlvLCBzY2VuYXJpb1RhZ3NDb25maWcpXG4gICAgICAgICAgICAgICAgOiBzY2VuYXJpb1RhZy5vcHRpb25zLnN1Yl90eXBlO1xuXG4gICAgICAgIGNvbnN0IHRhZzogSVNjZW5hcmlvVGFnVWkgPSB7XG4gICAgICAgICAgICB0b2dnbGU6IHRoaXMuYXJlRXhpc3RpbmdUYWdzQ29uZmlnID8gZmFsc2UgOiB0b2dnbGVTdGF0dXMsXG4gICAgICAgICAgICBuYW1lOiBzY2VuYXJpb1RhZy5zY2VuYXJpb0RhdGEubmFtZSB8fCBzY2VuYXJpb1RhZy5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHNjZW5hcmlvVGFnLnNjZW5hcmlvRGF0YS5kZXNjcmlwdGlvbiB8fCBzY2VuYXJpb1RhZy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHR5cGU6IHNjZW5hcmlvVGFnLnR5cGUsXG4gICAgICAgICAgICBzZWxlY3RlZFRhZ1N1YlR5cGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNjZW5hcmlvVGFnLnNjZW5hcmlvRGF0YS50dXJuT2ZmRGF0ZVRhZ3MpIHtcbiAgICAgICAgICAgIHRhZy50dXJuT2ZmRGF0ZVRhZ3MgPSBzY2VuYXJpb1RhZy5zY2VuYXJpb0RhdGEudHVybk9mZkRhdGVUYWdzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjZW5hcmlvVGFnLnNjZW5hcmlvRGF0YS5hY2NlcHRhYmxlRGF0ZVRhZ3MpIHtcbiAgICAgICAgICAgIHRhZy5hY2NlcHRhYmxlRGF0ZVRhZ3MgPSBzY2VuYXJpb1RhZy5zY2VuYXJpb0RhdGEuYWNjZXB0YWJsZURhdGVUYWdzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhZztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRlZFNjZW5hcmlvU3ViVGFncyh0YWc6IElTY2VuYXJpb1RhZ1VpKTogSVNjZW5hcmlvU3ViVGFnW10ge1xuICAgICAgICBjb25zdCBTVUJfVEFHU19PUkRFUiA9IFtUYWdzQ29uZmlnU3ViVHlwZS5EQVksIFRhZ3NDb25maWdTdWJUeXBlLldFRUssIFRhZ3NDb25maWdTdWJUeXBlLk1PTlRILCBUYWdzQ29uZmlnU3ViVHlwZS5RVUFSVEVSLCBUYWdzQ29uZmlnU3ViVHlwZS5ZRUFSXTtcbiAgICAgICAgcmV0dXJuIF9vcmRlckJ5KHRhZy5zdWJUYWdzLCAoc3ViVGFnKSA9PiBfaW5kZXhPZihTVUJfVEFHU19PUkRFUiwgc3ViVGFnLnN1YlR5cGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNjZW5hcmlvU3ViVGFncyh0YWc6IElTY2VuYXJpb1RhZ1VpLCBzY2VuYXJpb1RhZzogSVNjZW5hcmlvVGFnKTogdm9pZCB7XG4gICAgICAgIGlmICghdGFnLnN1YlRhZ3MpIHtcbiAgICAgICAgICAgIHRhZy5zdWJUYWdzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YWdTdWJUeXBlID0gc2NlbmFyaW9UYWcub3B0aW9ucy5zdWJfdHlwZTtcblxuICAgICAgICB0YWcuc3ViVGFncy5wdXNoKHtcbiAgICAgICAgICAgIHN1YlR5cGU6IHRhZ1N1YlR5cGUsXG4gICAgICAgICAgICBuYW1lOiB0YWdTdWJUeXBlID09PSBUYWdzQ29uZmlnU3ViVHlwZS5GT1JFQ0FTVF9ORVcgPyB0aGlzLkRFRkFVTFRfRk9SRUNBU1RfREFURV9UQUcgOiBzY2VuYXJpb1RhZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHR1cm5PZmZEYXRlVGFnKHNjZW5hcmlvVGFnczogSVNjZW5hcmlvVGFnVWlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRlVGFnID0gX2ZpbmQoc2NlbmFyaW9UYWdzLCB7IHR5cGU6IFRhZ1R5cGVzLkRBVEUgfSk7XG5cbiAgICAgICAgaWYgKCFkYXRlVGFnKSByZXR1cm47XG4gICAgICAgIGRhdGVUYWcudG9nZ2xlPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVOb3RBdmFpbGFibGVUYWdzKHRhZ1dpdGhTcGVjaWZpY0RhdGVUYWdzOiBJU2NlbmFyaW9UYWdVaSwgc2NlbmFyaW9UYWdzOiBJU2NlbmFyaW9UYWdVaVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN1YlRhZ3MgPSBfZmluZChzY2VuYXJpb1RhZ3MsIHsgdHlwZTogVGFnVHlwZXMuREFURSB9KT8uc3ViVGFncztcbiAgICAgICAgaWYgKCFzdWJUYWdzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIF9mb3JFYWNoKHNjZW5hcmlvVGFncywgKHRhZykgPT4ge1xuICAgICAgICAgICAgaWYgKCF0YWcuYWNjZXB0YWJsZURhdGVUYWdzPy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0YWcgIT09IHRhZ1dpdGhTcGVjaWZpY0RhdGVUYWdzKSB7XG4gICAgICAgICAgICAgICAgdGFnLnRvZ2dsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBfZm9yRWFjaChzdWJUYWdzLCAoc3ViVGFnKSA9PiB7XG4gICAgICAgICAgICBzdWJUYWcuaGlkZGVuID0gIXRhZ1dpdGhTcGVjaWZpY0RhdGVUYWdzLmFjY2VwdGFibGVEYXRlVGFncy5pbmNsdWRlcyhzdWJUYWcuc3ViVHlwZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2NlbmFyaW9TZWxlY3RlZERhdGVUYWcoc2NlbmFyaW86IFNjZW5hcmlvLCBkYXRlVGFnczogSVNjZW5hcmlvVGFnW10pOiBUYWdzQ29uZmlnU3ViVHlwZSB7XG4gICAgICAgIGNvbnN0IG1vbnRoU3ViVHlwZSA9IF9maW5kKGRhdGVUYWdzLCAodGFnOiBJU2NlbmFyaW9UYWcpID0+IHRhZy5vcHRpb25zLnN1Yl90eXBlID09PSBUYWdzQ29uZmlnU3ViVHlwZS5NT05USCk/Lm9wdGlvbnM/LnN1Yl90eXBlO1xuXG4gICAgICAgIGNvbnN0IHNjZW5hcmlvU2VsZWN0ZWREYXRlVGFnID0ge1xuICAgICAgICAgICAgW1NjZW5hcmlvLkFDVFVBTFNdOiAoKSA9PiBtb250aFN1YlR5cGUsXG4gICAgICAgICAgICBbU2NlbmFyaW8uQlVER0VUXTogKCkgPT4gX2ZpbmQoZGF0ZVRhZ3MsICh0YWc6IElTY2VuYXJpb1RhZykgPT4gdGFnLm9wdGlvbnMuc3ViX3R5cGUgPT09IFRhZ3NDb25maWdTdWJUeXBlLllFQVIpPy5vcHRpb25zPy5zdWJfdHlwZSxcbiAgICAgICAgICAgIFtTY2VuYXJpby5GT1JFQ0FTVF06ICgpID0+IF9maW5kKGRhdGVUYWdzLCAodGFnOiBJU2NlbmFyaW9UYWcpID0+IHRhZy5vcHRpb25zLnN1Yl90eXBlID09PSBUYWdzQ29uZmlnU3ViVHlwZS5GT1JFQ0FTVF9ORVcpPy5vcHRpb25zPy5zdWJfdHlwZSxcbiAgICAgICAgICAgIFtTY2VuYXJpby5OT05FXTogKCkgPT4gbW9udGhTdWJUeXBlLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzY2VuYXJpb1NlbGVjdGVkRGF0ZVRhZ1tzY2VuYXJpb10pIHJldHVybjtcbiAgICAgICAgcmV0dXJuIHNjZW5hcmlvU2VsZWN0ZWREYXRlVGFnW3NjZW5hcmlvXSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2NlbmFyaW9UYWdzQ29uZmlnKHNjZW5hcmlvOiBTY2VuYXJpbywgdGFnc0NvbmZpZzogSVRhZ1tdKTogSVNjZW5hcmlvVGFnW10ge1xuICAgICAgICByZXR1cm4gX3JlZHVjZSh0YWdzQ29uZmlnLCAoYWNjOiBJU2NlbmFyaW9UYWdbXSwgdGFnQ29uZmlnOiBJVGFnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWdTdWJUeXBlID0gdGFnQ29uZmlnPy5vcHRpb25zPy5zdWJfdHlwZTtcblxuICAgICAgICAgICAgY29uc3Qgc2NlbmFyaW9UYWdEYXRhQ29uZmlnID0gZ2V0U2NlbmFyaW9UYWdEYXRhQ29uZmlnKHRoaXMuaXNNdWx0aXBsZURpbWVuc2lvbik7XG4gICAgICAgICAgICBjb25zdCBzY2VuYXJpb1RhZ0NvbmZpZzogSVNjZW5hcmlvID0gc2NlbmFyaW9UYWdEYXRhQ29uZmlnICYmIHNjZW5hcmlvVGFnRGF0YUNvbmZpZ1tzY2VuYXJpb10gP1xuICAgICAgICAgICAgICAgIHNjZW5hcmlvVGFnRGF0YUNvbmZpZ1tzY2VuYXJpb11bdGFnU3ViVHlwZV0gOiBudWxsO1xuICAgICAgICAgICAgaWYgKCFzY2VuYXJpb1RhZ0NvbmZpZyB8fCBzY2VuYXJpb1RhZ0NvbmZpZy5oaWRkZW4pIHJldHVybiBhY2M7XG5cbiAgICAgICAgICAgIGNvbnN0IGNsb25lZFRhZ0NvbmZpZyA9IF9jbG9uZURlZXAodGFnQ29uZmlnKTtcbiAgICAgICAgICAgIGNvbnN0IHNjZW5hcmlvVGFnOiBJU2NlbmFyaW9UYWcgPSB7IC4uLmNsb25lZFRhZ0NvbmZpZywgc2NlbmFyaW9EYXRhOiBzY2VuYXJpb1RhZ0NvbmZpZyB9O1xuXG4gICAgICAgICAgICBhY2MucHVzaChzY2VuYXJpb1RhZyk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxufVxuIl19
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLXNjZW5hcmlvL3NlcnZpY2VzL3NjZW5hcmlvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVEsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUUsT0FBTyxFQUE0RCxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RyxPQUFPLEVBQ0gsU0FBUyxJQUFJLFVBQVUsRUFDdkIsTUFBTSxJQUFJLE9BQU8sRUFDakIsSUFBSSxJQUFJLEtBQUssRUFDYixPQUFPLElBQUksUUFBUSxFQUNuQixPQUFPLElBQUksUUFBUSxFQUNuQixPQUFPLElBQUksUUFBUSxFQUNuQixNQUFNLElBQUksT0FBTyxFQUNqQixJQUFJLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQzFCLFFBQVEsSUFBSSxTQUFTLEVBQ3hCLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUcxRSxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVZLDhCQUF5QixHQUFHLE9BQU8sQ0FBQztLQXlOL0M7SUFuTkcsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxJQUFZLHFCQUFxQjtRQUM3QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDcEMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLGVBQXVCLEVBQUUsaUJBQXlCLEVBQUUsbUJBQTRCO1FBQ3BHLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTTtZQUFFLE9BQU87UUFFckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztJQUNuRCxDQUFDO0lBRU0sMkJBQTJCLENBQUMsWUFBOEIsRUFBRSxVQUFrQjtRQUNqRixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUN6RCxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFL0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0seUJBQXlCLENBQUMsUUFBa0I7UUFDL0MsTUFBTSxrQkFBa0IsR0FBbUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEcsTUFBTSxjQUFjLEdBQXFCLEVBQUUsQ0FBQztRQUU1QyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxXQUF5QixFQUFFLEVBQUU7WUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDNUQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUU3RixNQUFNLEdBQUcsR0FBbUIsY0FBYyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFFbkksSUFBSSxnQkFBZ0IsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDN0MsR0FBRyxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsSUFBSSxjQUFjO2dCQUFFLE9BQU87WUFDM0IsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzVCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDekQ7UUFFRCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLElBQUksdUJBQXVCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2QztRQUVELE1BQU0sdUJBQXVCLEdBQW1CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5SCxJQUFJLHVCQUF1QixFQUFFO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUN0RTtRQUVELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSw0QkFBNEIsQ0FBMkIsR0FBTSxFQUFFLHFCQUF3QixFQUFFLE9BQVU7UUFDdEcsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRWxELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQzVCLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDeEM7UUFFRCxJQUFJLEdBQUcsS0FBSyxxQkFBcUIsRUFBRTtZQUMvQixJQUFJLE9BQU8sRUFBRTtnQkFDVCxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzthQUMxQjtTQUNKO0lBQ0wsQ0FBQztJQUVNLDJCQUEyQixDQUEyQixHQUFNLEVBQUUsT0FBVTtRQUMzRSxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE1BQU07WUFBRSxPQUFPO1FBRTNDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVyQixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEYsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxjQUFxQjtRQUN6QyxPQUFPLFFBQVEsQ0FBQyxjQUFjLEVBQUU7WUFDNUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQztTQUN4QyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFtQjtRQUMzQyxNQUFNLGNBQWMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuSixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxRQUFrQixFQUFFLGNBQWdDO1FBQy9FLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUMzQyxNQUFNLFVBQVUsR0FBRyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztZQUNoRCxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzVHLE9BQU87YUFDVjtZQUVELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUk7Z0JBQ2xELENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBRWhFLElBQUksYUFBYSxFQUFFO2dCQUNmLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixhQUFhLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO2FBQ2pEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsa0JBQWtDLEVBQUUsV0FBeUIsRUFBRSxRQUFrQixFQUFFLFNBQWtCO1FBQzVILE1BQU0sWUFBWSxHQUFHLFNBQVM7WUFDMUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQzNGLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUV0QyxNQUFNLGtCQUFrQixHQUFHLFNBQVM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUM7WUFDL0QsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBRXZDLE1BQU0sR0FBRyxHQUFtQjtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDekQsSUFBSSxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJO1lBQ3ZELFdBQVcsRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsV0FBVztZQUM1RSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDdEIsa0JBQWtCO1NBQ3JCLENBQUM7UUFFRixJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFO1lBQzFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7U0FDbEU7UUFFRCxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUU7WUFDNUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7U0FDdEU7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxHQUFtQixFQUFFLFdBQXlCO1FBQ3hFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2QsR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFFRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUVoRCxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNiLE9BQU8sRUFBRSxVQUFVO1lBQ25CLElBQUksRUFBRSxVQUFVLEtBQUssaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJO1NBQzFHLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxjQUFjLENBQUMsWUFBOEI7UUFDakQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDckIsT0FBTyxDQUFDLE1BQU0sR0FBRSxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVPLG9CQUFvQixDQUFDLHVCQUF1QyxFQUFFLFlBQThCO1FBQ2hHLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFNUIsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTTtnQkFBRSxPQUFPO1lBQzNDLElBQUksR0FBRyxLQUFLLHVCQUF1QixFQUFFO2dCQUNqQyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzthQUN0QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFFBQWtCLEVBQUUsUUFBd0I7UUFDM0UsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7UUFFakksTUFBTSx1QkFBdUIsR0FBRztZQUM1QixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZO1lBQ3RDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFpQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUTtZQUNuSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBaUIsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssaUJBQWlCLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVE7WUFDN0ksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWTtTQUN0QyxDQUFBO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU87UUFDL0MsT0FBTyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUFrQixFQUFFLFVBQWtCO1FBQ2hFLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQW1CLEVBQUUsU0FBZSxFQUFFLEVBQUU7WUFDaEUsTUFBTSxVQUFVLEdBQUcsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7WUFFaEQsTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNqRixNQUFNLGlCQUFpQixHQUFjLHFCQUFxQixJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzNGLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkQsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGlCQUFpQixDQUFDLE1BQU07Z0JBQUUsT0FBTyxHQUFHLENBQUM7WUFFL0QsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sV0FBVyxHQUFpQixFQUFFLEdBQUcsZUFBZSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1lBRTFGLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO2tJQXpOUSxlQUFlO3NJQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJVGFnLCBUYWdzQ29uZmlnU3ViVHlwZSwgVGFnVHlwZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VydmVyVGFncyc7XG5pbXBvcnQgeyBJU2NlbmFyaW8sIElTY2VuYXJpb1N1YlRhZywgSVNjZW5hcmlvVGFnLCBJU2NlbmFyaW9UYWdVaSwgU2NlbmFyaW8gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjZW5hcmlvJztcbmltcG9ydCB7XG4gICAgY2xvbmVEZWVwIGFzIF9jbG9uZURlZXAsXG4gICAgZmlsdGVyIGFzIF9maWx0ZXIsXG4gICAgZmluZCBhcyBfZmluZCxcbiAgICBmb3JFYWNoIGFzIF9mb3JFYWNoLFxuICAgIG9yZGVyQnkgYXMgX29yZGVyQnksXG4gICAgaW5kZXhPZiBhcyBfaW5kZXhPZixcbiAgICByZWR1Y2UgYXMgX3JlZHVjZSxcbiAgICBzb21lIGFzIF9zb21lLCBtYXAgYXMgX21hcCxcbiAgICBpbmNsdWRlcyBhcyBfaW5jbHVkZXNcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGdldFNjZW5hcmlvVGFnRGF0YUNvbmZpZyB9IGZyb20gJy4uL2NvbnN0cy9zY2VuYXJpby10YWdzLWNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTY2VuYXJpb1NlcnZpY2Uge1xuICAgIHByaXZhdGUgREVGQVVMVF9GT1JFQ0FTVF9EQVRFX1RBRyA9ICdNb250aCc7XG5cbiAgICBwcml2YXRlIHdob2xlVGFnc0NvbmZpZzogSVRhZ1tdO1xuICAgIHByaXZhdGUgY3VycmVudFRhZ3NDb25maWc6IElUYWdbXTtcbiAgICBwcml2YXRlIGlzTXVsdGlwbGVEaW1lbnNpb246IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgZ2V0IHNjZW5hcmlvcygpOiBTY2VuYXJpb1tdIHtcbiAgICAgICAgcmV0dXJuIF9vcmRlckJ5KE9iamVjdC52YWx1ZXMoU2NlbmFyaW8pLCAoc2NlbmFyaW8pID0+IHNjZW5hcmlvID09PSBTY2VuYXJpby5OT05FID8gMSA6IDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGFyZUV4aXN0aW5nVGFnc0NvbmZpZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jdXJyZW50VGFnc0NvbmZpZztcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdFNjZW5hcmlvVGFncyh3aG9sZVRhZ3NDb25maWc6IElUYWdbXSwgY3VycmVudFRhZ3NDb25maWc6IElUYWdbXSwgaXNNdWx0aXBsZURpbWVuc2lvbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIXdob2xlVGFnc0NvbmZpZz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy53aG9sZVRhZ3NDb25maWcgPSBfY2xvbmVEZWVwKHdob2xlVGFnc0NvbmZpZyk7XG4gICAgICAgIHRoaXMuY3VycmVudFRhZ3NDb25maWcgPSBjdXJyZW50VGFnc0NvbmZpZztcbiAgICAgICAgdGhpcy5pc011bHRpcGxlRGltZW5zaW9uID0gaXNNdWx0aXBsZURpbWVuc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFnc0NvbmZpZ0J5U2NlbmFyaW9UYWdzKHNjZW5hcmlvVGFnczogSVNjZW5hcmlvVGFnVWlbXSwgdGFnc0NvbmZpZzogSVRhZ1tdKTogSVRhZ1tdIHtcbiAgICAgICAgY29uc3Qgc2NlbmFyaW9UYWdzQ29uZmlnID0gX2ZpbHRlcih0YWdzQ29uZmlnLCAodGFnQ29uZmlnKSA9PlxuICAgICAgICAgICAgX3NvbWUoc2NlbmFyaW9UYWdzLCAoc2NlbmFyaW9UYWcpID0+IHNjZW5hcmlvVGFnLnRvZ2dsZSAmJiBzY2VuYXJpb1RhZy5zZWxlY3RlZFRhZ1N1YlR5cGUgPT09IHRhZ0NvbmZpZy5vcHRpb25zLnN1Yl90eXBlKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydFNjZW5hcmlvVGFncyhzY2VuYXJpb1RhZ3NDb25maWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTY2VuYXJpb1RhZ3NCeVNjZW5hcmlvKHNjZW5hcmlvOiBTY2VuYXJpbykge1xuICAgICAgICBjb25zdCBzY2VuYXJpb1RhZ3NDb25maWc6IElTY2VuYXJpb1RhZ1tdID0gdGhpcy5nZXRTY2VuYXJpb1RhZ3NDb25maWcoc2NlbmFyaW8sIHRoaXMud2hvbGVUYWdzQ29uZmlnKTtcbiAgICAgICAgY29uc3Qgc2NlbmFyaW9UYWdzVWk6IElTY2VuYXJpb1RhZ1VpW10gPSBbXTtcblxuICAgICAgICBfZm9yRWFjaChzY2VuYXJpb1RhZ3NDb25maWcsIChzY2VuYXJpb1RhZzogSVNjZW5hcmlvVGFnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1RhZ1dpdGhTdWJUYWdzID0gc2NlbmFyaW9UYWcudHlwZSA9PT0gVGFnVHlwZXMuREFURTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ1dpdGhTdWJUYWdzID0gaXNUYWdXaXRoU3ViVGFncyAmJiBfZmluZChzY2VuYXJpb1RhZ3NVaSwgeyB0eXBlOiBzY2VuYXJpb1RhZy50eXBlIH0pO1xuXG4gICAgICAgICAgICBjb25zdCB0YWc6IElTY2VuYXJpb1RhZ1VpID0gdGFnV2l0aFN1YlRhZ3MgfHwgdGhpcy5wcmVwYXJlU2NlbmFyaW9UYWcoc2NlbmFyaW9UYWdzQ29uZmlnLCBzY2VuYXJpb1RhZywgc2NlbmFyaW8sIGlzVGFnV2l0aFN1YlRhZ3MpO1xuXG4gICAgICAgICAgICBpZiAoaXNUYWdXaXRoU3ViVGFncykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2NlbmFyaW9TdWJUYWdzKHRhZywgc2NlbmFyaW9UYWcpO1xuICAgICAgICAgICAgICAgIHRhZy5zdWJUYWdzID0gU2NlbmFyaW9TZXJ2aWNlLnNvcnRlZFN1YlRhZ3ModGFnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhZ1dpdGhTdWJUYWdzKSByZXR1cm47XG4gICAgICAgICAgICBzY2VuYXJpb1RhZ3NVaS5wdXNoKHRhZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFyZUV4aXN0aW5nVGFnc0NvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5pbml0RXhpc3RpbmdUYWdzQ29uZmlnKHNjZW5hcmlvLCBzY2VuYXJpb1RhZ3NVaSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1RhZ05vdFN1cHBvcnRpbmdEYXRlcyA9IF9zb21lKHNjZW5hcmlvVGFnc1VpLCB7IHR1cm5PZmZEYXRlVGFnczogdHJ1ZSwgdG9nZ2xlOiB0cnVlIH0pO1xuICAgICAgICBpZiAoaXNUYWdOb3RTdXBwb3J0aW5nRGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMudHVybk9mZkRhdGVUYWcoc2NlbmFyaW9UYWdzVWkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFnV2l0aFNwZWNpZmljRGF0ZVRhZ3M6IElTY2VuYXJpb1RhZ1VpID0gX2ZpbmQoc2NlbmFyaW9UYWdzVWksICh0YWcpID0+IHRhZy50b2dnbGUgJiYgISF0YWcuYWNjZXB0YWJsZVN1YlRhZ3M/Lmxlbmd0aCk7XG4gICAgICAgIGlmICh0YWdXaXRoU3BlY2lmaWNEYXRlVGFncykge1xuICAgICAgICAgICAgdGhpcy5oaWRlTm90QXZhaWxhYmxlVGFncyh0YWdXaXRoU3BlY2lmaWNEYXRlVGFncywgc2NlbmFyaW9UYWdzVWkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydFNjZW5hcmlvVGFncyhzY2VuYXJpb1RhZ3NVaSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRhZ05vdFN1cHBvcnRpbmdEYXRlc0hhbmRsZXI8VCBleHRlbmRzIElTY2VuYXJpb1RhZ1VpPih0YWc6IFQsIHRhZ05vdFN1cHBvcnRpbmdEYXRlczogVCwgZGF0ZVRhZzogVCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRhZ05vdFN1cHBvcnRpbmdEYXRlcyB8fCAhdGFnLnRvZ2dsZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0YWcudHlwZSA9PT0gVGFnVHlwZXMuREFURSkge1xuICAgICAgICAgICAgdGFnTm90U3VwcG9ydGluZ0RhdGVzLnRvZ2dsZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZyA9PT0gdGFnTm90U3VwcG9ydGluZ0RhdGVzKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZVRhZykge1xuICAgICAgICAgICAgICAgIGRhdGVUYWcudG9nZ2xlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdGFnQWNjZXB0YWJsZVN1YlRhZ3NIYW5kbGVyPFQgZXh0ZW5kcyBJU2NlbmFyaW9UYWdVaT4odGFnOiBULCBkYXRlVGFnOiBUKTogdm9pZCB7XG4gICAgICAgIGlmICghdGFnLmFjY2VwdGFibGVTdWJUYWdzPy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICBpZiAoIWRhdGVUYWcpIHJldHVybjtcblxuICAgICAgICBkYXRlVGFnLnN1YlRhZ3MgPSBfbWFwKGRhdGVUYWcuc3ViVGFncywgKHN1YlRhZykgPT4ge1xuICAgICAgICAgICAgc3ViVGFnLmhpZGRlbiA9IHRhZy50b2dnbGUgJiYgIV9pbmNsdWRlcyh0YWcuYWNjZXB0YWJsZVN1YlRhZ3MsIHN1YlRhZy5zdWJUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBzdWJUYWc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRhdGVUYWcuc2VsZWN0ZWRUYWdTdWJUeXBlID0gdGFnLmFjY2VwdGFibGVTdWJUYWdzWzBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0U2NlbmFyaW9UYWdzKHNjZW5hcmlvVGFnc1VpOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIF9vcmRlckJ5KHNjZW5hcmlvVGFnc1VpLCBbXG4gICAgICAgICAgICAodGFnKSA9PiAodGFnLnR5cGUgPT09IFRhZ1R5cGVzLkRBVEUgPyAwIDogMSksXG4gICAgICAgICAgICAodGFnKSA9PiAodGFnLm5hbWUgPT09ICdGaWxlIFN0YXR1cycpXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc29ydGVkU3ViVGFncyh0YWc6IElTY2VuYXJpb1RhZ1VpKTogSVNjZW5hcmlvU3ViVGFnW10ge1xuICAgICAgICBjb25zdCBTVUJfVEFHU19PUkRFUiA9IFtUYWdzQ29uZmlnU3ViVHlwZS5EQVksIFRhZ3NDb25maWdTdWJUeXBlLldFRUssIFRhZ3NDb25maWdTdWJUeXBlLk1PTlRILCBUYWdzQ29uZmlnU3ViVHlwZS5RVUFSVEVSLCBUYWdzQ29uZmlnU3ViVHlwZS5ZRUFSXTtcbiAgICAgICAgcmV0dXJuIF9vcmRlckJ5KHRhZy5zdWJUYWdzLCAoc3ViVGFnKSA9PiBfaW5kZXhPZihTVUJfVEFHU19PUkRFUiwgc3ViVGFnLnN1YlR5cGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFeGlzdGluZ1RhZ3NDb25maWcoc2NlbmFyaW86IFNjZW5hcmlvLCBzY2VuYXJpb1RhZ3NVaTogSVNjZW5hcmlvVGFnVWlbXSkge1xuICAgICAgICBfZm9yRWFjaCh0aGlzLmN1cnJlbnRUYWdzQ29uZmlnLCAodGFnQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWdTdWJUeXBlID0gdGFnQ29uZmlnPy5vcHRpb25zPy5zdWJfdHlwZTtcbiAgICAgICAgICAgIGNvbnN0IHNjZW5hcmlvVGFnRGF0YUNvbmZpZyA9IGdldFNjZW5hcmlvVGFnRGF0YUNvbmZpZyh0aGlzLmlzTXVsdGlwbGVEaW1lbnNpb24pO1xuICAgICAgICAgICAgaWYgKCFzY2VuYXJpb1RhZ0RhdGFDb25maWcgfHwgIXNjZW5hcmlvVGFnRGF0YUNvbmZpZ1tzY2VuYXJpb10gfHwgIXNjZW5hcmlvVGFnRGF0YUNvbmZpZ1tzY2VuYXJpb11bdGFnU3ViVHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNjZW5hcmlvVGFnVWkgPSB0YWdDb25maWcudHlwZSA9PT0gVGFnVHlwZXMuREFURVxuICAgICAgICAgICAgICAgID8gX2ZpbmQoc2NlbmFyaW9UYWdzVWksIHsgdHlwZTogdGFnQ29uZmlnLnR5cGUgfSlcbiAgICAgICAgICAgICAgICA6IF9maW5kKHNjZW5hcmlvVGFnc1VpLCB7IHNlbGVjdGVkVGFnU3ViVHlwZTogdGFnU3ViVHlwZSB9KTtcblxuICAgICAgICAgICAgaWYgKHNjZW5hcmlvVGFnVWkpIHtcbiAgICAgICAgICAgICAgICBzY2VuYXJpb1RhZ1VpLnRvZ2dsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2NlbmFyaW9UYWdVaS5zZWxlY3RlZFRhZ1N1YlR5cGUgPSB0YWdTdWJUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVTY2VuYXJpb1RhZyhzY2VuYXJpb1RhZ3NDb25maWc6IElTY2VuYXJpb1RhZ1tdLCBzY2VuYXJpb1RhZzogSVNjZW5hcmlvVGFnLCBzY2VuYXJpbzogU2NlbmFyaW8sIGlzRGF0ZVRhZzogYm9vbGVhbik6IElTY2VuYXJpb1RhZ1VpIHtcbiAgICAgICAgY29uc3QgdG9nZ2xlU3RhdHVzID0gaXNEYXRlVGFnXG4gICAgICAgICAgICA/IF9zb21lKHNjZW5hcmlvVGFnc0NvbmZpZywgKHRhZykgPT4gdGFnLnR5cGUgPT09IFRhZ1R5cGVzLkRBVEUgJiYgdGFnLnNjZW5hcmlvRGF0YS50b2dnbGUpXG4gICAgICAgICAgICA6IHNjZW5hcmlvVGFnLnNjZW5hcmlvRGF0YS50b2dnbGU7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUYWdTdWJUeXBlID0gaXNEYXRlVGFnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmdldFNjZW5hcmlvU2VsZWN0ZWREYXRlVGFnKHNjZW5hcmlvLCBzY2VuYXJpb1RhZ3NDb25maWcpXG4gICAgICAgICAgICAgICAgOiBzY2VuYXJpb1RhZy5vcHRpb25zLnN1Yl90eXBlO1xuXG4gICAgICAgIGNvbnN0IHRhZzogSVNjZW5hcmlvVGFnVWkgPSB7XG4gICAgICAgICAgICB0b2dnbGU6IHRoaXMuYXJlRXhpc3RpbmdUYWdzQ29uZmlnID8gZmFsc2UgOiB0b2dnbGVTdGF0dXMsXG4gICAgICAgICAgICBuYW1lOiBzY2VuYXJpb1RhZy5zY2VuYXJpb0RhdGEubmFtZSB8fCBzY2VuYXJpb1RhZy5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHNjZW5hcmlvVGFnLnNjZW5hcmlvRGF0YS5kZXNjcmlwdGlvbiB8fCBzY2VuYXJpb1RhZy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHR5cGU6IHNjZW5hcmlvVGFnLnR5cGUsXG4gICAgICAgICAgICBzZWxlY3RlZFRhZ1N1YlR5cGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNjZW5hcmlvVGFnLnNjZW5hcmlvRGF0YS50dXJuT2ZmRGF0ZVRhZ3MpIHtcbiAgICAgICAgICAgIHRhZy50dXJuT2ZmRGF0ZVRhZ3MgPSBzY2VuYXJpb1RhZy5zY2VuYXJpb0RhdGEudHVybk9mZkRhdGVUYWdzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjZW5hcmlvVGFnLnNjZW5hcmlvRGF0YS5hY2NlcHRhYmxlU3ViVGFncykge1xuICAgICAgICAgICAgdGFnLmFjY2VwdGFibGVTdWJUYWdzID0gc2NlbmFyaW9UYWcuc2NlbmFyaW9EYXRhLmFjY2VwdGFibGVTdWJUYWdzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhZztcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNjZW5hcmlvU3ViVGFncyh0YWc6IElTY2VuYXJpb1RhZ1VpLCBzY2VuYXJpb1RhZzogSVNjZW5hcmlvVGFnKTogdm9pZCB7XG4gICAgICAgIGlmICghdGFnLnN1YlRhZ3MpIHtcbiAgICAgICAgICAgIHRhZy5zdWJUYWdzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YWdTdWJUeXBlID0gc2NlbmFyaW9UYWcub3B0aW9ucy5zdWJfdHlwZTtcblxuICAgICAgICB0YWcuc3ViVGFncy5wdXNoKHtcbiAgICAgICAgICAgIHN1YlR5cGU6IHRhZ1N1YlR5cGUsXG4gICAgICAgICAgICBuYW1lOiB0YWdTdWJUeXBlID09PSBUYWdzQ29uZmlnU3ViVHlwZS5GT1JFQ0FTVF9ORVcgPyB0aGlzLkRFRkFVTFRfRk9SRUNBU1RfREFURV9UQUcgOiBzY2VuYXJpb1RhZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHR1cm5PZmZEYXRlVGFnKHNjZW5hcmlvVGFnczogSVNjZW5hcmlvVGFnVWlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRlVGFnID0gX2ZpbmQoc2NlbmFyaW9UYWdzLCB7IHR5cGU6IFRhZ1R5cGVzLkRBVEUgfSk7XG5cbiAgICAgICAgaWYgKCFkYXRlVGFnKSByZXR1cm47XG4gICAgICAgIGRhdGVUYWcudG9nZ2xlPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVOb3RBdmFpbGFibGVUYWdzKHRhZ1dpdGhTcGVjaWZpY0RhdGVUYWdzOiBJU2NlbmFyaW9UYWdVaSwgc2NlbmFyaW9UYWdzOiBJU2NlbmFyaW9UYWdVaVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN1YlRhZ3MgPSBfZmluZChzY2VuYXJpb1RhZ3MsIHsgdHlwZTogVGFnVHlwZXMuREFURSB9KT8uc3ViVGFncztcbiAgICAgICAgaWYgKCFzdWJUYWdzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIF9mb3JFYWNoKHNjZW5hcmlvVGFncywgKHRhZykgPT4ge1xuICAgICAgICAgICAgaWYgKCF0YWcuYWNjZXB0YWJsZVN1YlRhZ3M/Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRhZyAhPT0gdGFnV2l0aFNwZWNpZmljRGF0ZVRhZ3MpIHtcbiAgICAgICAgICAgICAgICB0YWcudG9nZ2xlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9mb3JFYWNoKHN1YlRhZ3MsIChzdWJUYWcpID0+IHtcbiAgICAgICAgICAgIHN1YlRhZy5oaWRkZW4gPSAhdGFnV2l0aFNwZWNpZmljRGF0ZVRhZ3MuYWNjZXB0YWJsZVN1YlRhZ3MuaW5jbHVkZXMoc3ViVGFnLnN1YlR5cGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNjZW5hcmlvU2VsZWN0ZWREYXRlVGFnKHNjZW5hcmlvOiBTY2VuYXJpbywgZGF0ZVRhZ3M6IElTY2VuYXJpb1RhZ1tdKTogVGFnc0NvbmZpZ1N1YlR5cGUge1xuICAgICAgICBjb25zdCBtb250aFN1YlR5cGUgPSBfZmluZChkYXRlVGFncywgKHRhZzogSVNjZW5hcmlvVGFnKSA9PiB0YWcub3B0aW9ucy5zdWJfdHlwZSA9PT0gVGFnc0NvbmZpZ1N1YlR5cGUuTU9OVEgpPy5vcHRpb25zPy5zdWJfdHlwZTtcblxuICAgICAgICBjb25zdCBzY2VuYXJpb1NlbGVjdGVkRGF0ZVRhZyA9IHtcbiAgICAgICAgICAgIFtTY2VuYXJpby5BQ1RVQUxTXTogKCkgPT4gbW9udGhTdWJUeXBlLFxuICAgICAgICAgICAgW1NjZW5hcmlvLkJVREdFVF06ICgpID0+IF9maW5kKGRhdGVUYWdzLCAodGFnOiBJU2NlbmFyaW9UYWcpID0+IHRhZy5vcHRpb25zLnN1Yl90eXBlID09PSBUYWdzQ29uZmlnU3ViVHlwZS5ZRUFSKT8ub3B0aW9ucz8uc3ViX3R5cGUsXG4gICAgICAgICAgICBbU2NlbmFyaW8uRk9SRUNBU1RdOiAoKSA9PiBfZmluZChkYXRlVGFncywgKHRhZzogSVNjZW5hcmlvVGFnKSA9PiB0YWcub3B0aW9ucy5zdWJfdHlwZSA9PT0gVGFnc0NvbmZpZ1N1YlR5cGUuRk9SRUNBU1RfTkVXKT8ub3B0aW9ucz8uc3ViX3R5cGUsXG4gICAgICAgICAgICBbU2NlbmFyaW8uTk9ORV06ICgpID0+IG1vbnRoU3ViVHlwZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2NlbmFyaW9TZWxlY3RlZERhdGVUYWdbc2NlbmFyaW9dKSByZXR1cm47XG4gICAgICAgIHJldHVybiBzY2VuYXJpb1NlbGVjdGVkRGF0ZVRhZ1tzY2VuYXJpb10oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNjZW5hcmlvVGFnc0NvbmZpZyhzY2VuYXJpbzogU2NlbmFyaW8sIHRhZ3NDb25maWc6IElUYWdbXSk6IElTY2VuYXJpb1RhZ1tdIHtcbiAgICAgICAgcmV0dXJuIF9yZWR1Y2UodGFnc0NvbmZpZywgKGFjYzogSVNjZW5hcmlvVGFnW10sIHRhZ0NvbmZpZzogSVRhZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFnU3ViVHlwZSA9IHRhZ0NvbmZpZz8ub3B0aW9ucz8uc3ViX3R5cGU7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjZW5hcmlvVGFnRGF0YUNvbmZpZyA9IGdldFNjZW5hcmlvVGFnRGF0YUNvbmZpZyh0aGlzLmlzTXVsdGlwbGVEaW1lbnNpb24pO1xuICAgICAgICAgICAgY29uc3Qgc2NlbmFyaW9UYWdDb25maWc6IElTY2VuYXJpbyA9IHNjZW5hcmlvVGFnRGF0YUNvbmZpZyAmJiBzY2VuYXJpb1RhZ0RhdGFDb25maWdbc2NlbmFyaW9dID9cbiAgICAgICAgICAgICAgICBzY2VuYXJpb1RhZ0RhdGFDb25maWdbc2NlbmFyaW9dW3RhZ1N1YlR5cGVdIDogbnVsbDtcbiAgICAgICAgICAgIGlmICghc2NlbmFyaW9UYWdDb25maWcgfHwgc2NlbmFyaW9UYWdDb25maWcuaGlkZGVuKSByZXR1cm4gYWNjO1xuXG4gICAgICAgICAgICBjb25zdCBjbG9uZWRUYWdDb25maWcgPSBfY2xvbmVEZWVwKHRhZ0NvbmZpZyk7XG4gICAgICAgICAgICBjb25zdCBzY2VuYXJpb1RhZzogSVNjZW5hcmlvVGFnID0geyAuLi5jbG9uZWRUYWdDb25maWcsIHNjZW5hcmlvRGF0YTogc2NlbmFyaW9UYWdDb25maWcgfTtcblxuICAgICAgICAgICAgYWNjLnB1c2goc2NlbmFyaW9UYWcpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgIH1cbn1cbiJdfQ==
|