@dsivd/prestations-ng 14.5.22 → 14.5.23-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/dsivd-prestations-ng.umd.js +462 -102
- package/bundles/dsivd-prestations-ng.umd.js.map +1 -1
- package/dsivd-prestations-ng-v14.5.23-beta1.tgz +0 -0
- package/esm2015/foehn-checkables/foehn-checkable-group.component.js +11 -3
- package/esm2015/foehn-date-picker/foehn-date-picker.component.js +2 -2
- package/esm2015/foehn-input/foehn-input-email.component.js +2 -2
- package/esm2015/foehn-input/foehn-input-hidden.component.js +2 -2
- package/esm2015/foehn-input/foehn-input-number.component.js +2 -2
- package/esm2015/foehn-input/foehn-input-password.component.js +2 -2
- package/esm2015/foehn-input/foehn-input-phone.component.js +2 -2
- package/esm2015/foehn-input/foehn-input-text.component.js +2 -2
- package/esm2015/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.component.js +287 -0
- package/esm2015/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.module.js +42 -0
- package/esm2015/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.js +2 -2
- package/esm2015/index.js +4 -1
- package/esm2015/sdk-dictionary/default-dictionary.js +12 -2
- package/fesm2015/dsivd-prestations-ng.js +426 -100
- package/fesm2015/dsivd-prestations-ng.js.map +1 -1
- package/foehn-checkables/foehn-checkable-group.component.d.ts +3 -2
- package/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.component.d.ts +47 -0
- package/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.module.d.ts +13 -0
- package/index.d.ts +2 -0
- package/package.json +1 -1
- package/dsivd-prestations-ng-v14.5.22.tgz +0 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { Component, forwardRef, HostListener, Input, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
+
import { FoehnInputComponent } from '../foehn-input/foehn-input.component';
|
|
3
|
+
import { FoehnAutocompleteComponent } from '../foehn-autocomplete/foehn-autocomplete.component';
|
|
4
|
+
import { first } from 'rxjs/operators';
|
|
5
|
+
import { ObjectHelper } from '../helpers/object.helper';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../sdk-dictionary/sdk-dictionary.service";
|
|
8
|
+
import * as i2 from "../foehn-autocomplete/foehn-autocomplete.component";
|
|
9
|
+
import * as i3 from "../foehn-icons/foehn-icon-times.component";
|
|
10
|
+
import * as i4 from "@angular/common";
|
|
11
|
+
import * as i5 from "../sdk-dictionary/sdk-dictionary.pipe";
|
|
12
|
+
export class FoehnMultiselectAutocompleteComponent extends FoehnAutocompleteComponent {
|
|
13
|
+
constructor(ngZone, dictionaryService) {
|
|
14
|
+
super(ngZone);
|
|
15
|
+
this.dictionaryService = dictionaryService;
|
|
16
|
+
this.showEmptyListMessage = false;
|
|
17
|
+
this.keyboardNavigationAllowed = false;
|
|
18
|
+
}
|
|
19
|
+
set defaultElementValues(items) {
|
|
20
|
+
this.defaultElementValues_ = [...items];
|
|
21
|
+
if ((!this.model || !this.model.length) && items) {
|
|
22
|
+
this.updateNgModel(items);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
get defaultElementValues() {
|
|
26
|
+
return this.defaultElementValues_;
|
|
27
|
+
}
|
|
28
|
+
set defaultElementValue(item) {
|
|
29
|
+
this.defaultElementValues = [item];
|
|
30
|
+
}
|
|
31
|
+
handleKeyboardDownEvent(event) {
|
|
32
|
+
if (this.keyboardNavigationAllowed) {
|
|
33
|
+
this.onKeyDownSelectedInner(event);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
updateMultiselectAutocomplete() {
|
|
37
|
+
const validValue = this.getValidValue();
|
|
38
|
+
if (typeof validValue !== 'undefined') {
|
|
39
|
+
this.updateNgModel(validValue);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
handleUserInput() {
|
|
43
|
+
const validValue = this.getValidValue();
|
|
44
|
+
if (typeof validValue !== 'undefined') {
|
|
45
|
+
this.handleChange(validValue);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
addItem(item) {
|
|
49
|
+
if (!!item) {
|
|
50
|
+
if (!this.model) {
|
|
51
|
+
this.model = [];
|
|
52
|
+
}
|
|
53
|
+
const index = this.model.indexOf(item);
|
|
54
|
+
if (index === -1) {
|
|
55
|
+
this.model.push(item);
|
|
56
|
+
this.updateMultiselectAutocomplete();
|
|
57
|
+
this.handleUserInput();
|
|
58
|
+
this.manageSuggestionListAndFocusAfterAddingAnItem();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
removeItem(item) {
|
|
63
|
+
const index = this.model.indexOf(item);
|
|
64
|
+
if (index > -1) {
|
|
65
|
+
this.model.splice(index, 1);
|
|
66
|
+
this.triggerUserInput(this.model);
|
|
67
|
+
this.manageSuggestionListAndFocusAfterRemovingAnItem();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
trackByFn(index) {
|
|
71
|
+
return index;
|
|
72
|
+
}
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/explicit-module-boundary-types
|
|
74
|
+
getLabel(value) {
|
|
75
|
+
const elem = this.findElementByModelItem(value);
|
|
76
|
+
return super.getLabel(elem);
|
|
77
|
+
}
|
|
78
|
+
getSelectedElementTabIndex(index) {
|
|
79
|
+
let firstIndexFocusable = 0;
|
|
80
|
+
if (!!this.defaultElementValues) {
|
|
81
|
+
firstIndexFocusable = this.model.findIndex((selected) => !this.defaultElementValues.includes(selected));
|
|
82
|
+
}
|
|
83
|
+
if (index !== firstIndexFocusable) {
|
|
84
|
+
return -1;
|
|
85
|
+
}
|
|
86
|
+
return 0;
|
|
87
|
+
}
|
|
88
|
+
isSelectedItemFocusable(index) {
|
|
89
|
+
return !this.disabled && !!this.defaultElementValues && this.defaultElementValues.includes(this.model[index]);
|
|
90
|
+
}
|
|
91
|
+
canBeDeleted(index) {
|
|
92
|
+
return !this.defaultElementValues || !this.defaultElementValues.includes(this.model[index]);
|
|
93
|
+
}
|
|
94
|
+
onSelectedItemsFocusin() {
|
|
95
|
+
this.keyboardNavigationAllowed = true;
|
|
96
|
+
this.currentFocusedElem = document.activeElement;
|
|
97
|
+
}
|
|
98
|
+
onSelectedItemsFocusout() {
|
|
99
|
+
this.keyboardNavigationAllowed = false;
|
|
100
|
+
}
|
|
101
|
+
onAutocompleteElementsLoaded(elements) {
|
|
102
|
+
// Need to wait for childView to be loaded
|
|
103
|
+
setTimeout(() => {
|
|
104
|
+
if (!!this.autocompleteComponent) {
|
|
105
|
+
this.autocompleteComponent.elements = this.filterAutocompleteElements(elements);
|
|
106
|
+
if (!this.disabled && !this.autocompleteComponent.elements.length) {
|
|
107
|
+
this.showAlertMessageAndHideAutocomplete();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
getDeleteButtonAriaLabel(element) {
|
|
113
|
+
return `${this.dictionaryService.getKeySync('foehn-multiselect-autocomplete.selected.delete.aria-label', { elementLabel: this.getLabel(element), componentLabel: this.label })}`;
|
|
114
|
+
}
|
|
115
|
+
getSelectedListAriaLabel() {
|
|
116
|
+
return `${this.label}: ${this.dictionaryService.getKeySync('foehn-multiselect-autocomplete.list-of-selected-items')}`;
|
|
117
|
+
}
|
|
118
|
+
findElementByModelItem(item) {
|
|
119
|
+
if (!!this.elements && !!this.elements.length) {
|
|
120
|
+
const itemValue = typeof item === 'string' ? item : this.getValue(item);
|
|
121
|
+
const elem = this.elements.find((element) => this.getValue(element) === itemValue);
|
|
122
|
+
if (!!elem) {
|
|
123
|
+
return elem;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return item;
|
|
127
|
+
}
|
|
128
|
+
getValidValue() {
|
|
129
|
+
if (!this.model || !this.model.length) {
|
|
130
|
+
if (this.model_ !== undefined) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
return this.model;
|
|
136
|
+
}
|
|
137
|
+
getFirstDeleteButtonToFocus() {
|
|
138
|
+
const closeButtonsElemRefArray = [...this.closeButtonsElemRef.toArray()];
|
|
139
|
+
if (!!closeButtonsElemRefArray.length) {
|
|
140
|
+
return closeButtonsElemRefArray[0].nativeElement;
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
navigateSelectedList(offset) {
|
|
145
|
+
if (!this.disabled) {
|
|
146
|
+
const closeButtonsElemRefArray = this.getDefaultSelectedElements().concat([...this.closeButtonsElemRef.toArray()]);
|
|
147
|
+
if (!!closeButtonsElemRefArray.length) {
|
|
148
|
+
const focusIndex = closeButtonsElemRefArray.findIndex(value => this.currentFocusedElem === value.nativeElement);
|
|
149
|
+
let newIndex = focusIndex + offset;
|
|
150
|
+
if (newIndex >= closeButtonsElemRefArray.length) {
|
|
151
|
+
newIndex = 0;
|
|
152
|
+
}
|
|
153
|
+
if (newIndex < 0) {
|
|
154
|
+
newIndex = closeButtonsElemRefArray.length - 1;
|
|
155
|
+
}
|
|
156
|
+
const elemRef = closeButtonsElemRefArray[newIndex];
|
|
157
|
+
if (!!elemRef) {
|
|
158
|
+
elemRef.nativeElement.focus();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
getDefaultSelectedElements() {
|
|
164
|
+
return [...this.selectedElemRef.toArray()].filter(value => value.nativeElement.getAttribute('is-default') === 'true');
|
|
165
|
+
}
|
|
166
|
+
onKeyDownSelectedInner(keyEvent) {
|
|
167
|
+
// IE doesn't support keyEvent.code, and has different values
|
|
168
|
+
// in keyEvent.key (Down instead of ArrowDown for instance), hence the multi-support.
|
|
169
|
+
const ie11CompatibleCode = keyEvent.code || keyEvent.key;
|
|
170
|
+
switch (ie11CompatibleCode) {
|
|
171
|
+
case 'Right':
|
|
172
|
+
case 'ArrowRight':
|
|
173
|
+
this.navigateSelectedList(1);
|
|
174
|
+
break;
|
|
175
|
+
case 'Left':
|
|
176
|
+
case 'ArrowLeft':
|
|
177
|
+
this.navigateSelectedList(-1);
|
|
178
|
+
break;
|
|
179
|
+
default:
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
keyEvent.preventDefault();
|
|
183
|
+
keyEvent.stopPropagation();
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
filterAutocompleteElements(elements) {
|
|
187
|
+
const filteredElements = ObjectHelper.deepCopy(elements);
|
|
188
|
+
if (!!this.model && !!this.model.length) {
|
|
189
|
+
this.model.forEach((selected) => {
|
|
190
|
+
for (const [index, value] of filteredElements.entries()) {
|
|
191
|
+
const elem = this.findElementByModelItem(selected);
|
|
192
|
+
if (ObjectHelper.isEqual(elem, value)) {
|
|
193
|
+
filteredElements.splice(index, 1);
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return filteredElements;
|
|
200
|
+
}
|
|
201
|
+
manageSuggestionListAndFocusAfterAddingAnItem() {
|
|
202
|
+
// Highlight selected suggestion in input so screen reader knows there is still some text in input
|
|
203
|
+
this.autocompleteComponent.inputElement.nativeElement.select();
|
|
204
|
+
// Remove selected item from autocomplete suggestion list
|
|
205
|
+
this.autocompleteComponent.elements = this.filterAutocompleteElements(this.elements);
|
|
206
|
+
// Check if we still have suggestions to display
|
|
207
|
+
if (!this.autocompleteComponent.elements.length) {
|
|
208
|
+
this.showAlertMessageAndHideAutocomplete();
|
|
209
|
+
// Need setTimeout to ensure alert message is on the DOM and can be focusable
|
|
210
|
+
setTimeout(() => {
|
|
211
|
+
const alertMessage = this.alertMessageContainer.nativeElement.querySelector('p');
|
|
212
|
+
if (alertMessage) {
|
|
213
|
+
alertMessage.focus();
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
manageSuggestionListAndFocusAfterRemovingAnItem() {
|
|
219
|
+
// Hide message saying no more suggestions to display
|
|
220
|
+
this.showEmptyListMessage = false;
|
|
221
|
+
// Manually show autocomplete because there is at least one suggestions to display
|
|
222
|
+
this.autocompleteComponent.inputElement.nativeElement.hidden = false;
|
|
223
|
+
// Add back selected item to autocomplete suggestion list
|
|
224
|
+
this.autocompleteComponent.elements = this.filterAutocompleteElements(this.elements);
|
|
225
|
+
// When deleting a selected item, check were to set focus back
|
|
226
|
+
this.closeButtonsElemRef.changes.pipe(first()).subscribe(() => {
|
|
227
|
+
const buttonToFocus = this.getFirstDeleteButtonToFocus();
|
|
228
|
+
if (!!buttonToFocus) {
|
|
229
|
+
buttonToFocus.focus();
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
this.autocompleteComponent.setFocusOnInput();
|
|
233
|
+
this.autocompleteComponent.onInputFocus();
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
showAlertMessageAndHideAutocomplete() {
|
|
238
|
+
// Show a message to user indicating there is no more suggestions to display
|
|
239
|
+
this.showEmptyListMessage = true;
|
|
240
|
+
// Manually reset and hide autocomplete because there is no more suggestions to display
|
|
241
|
+
this.autocompleteInputValue = null;
|
|
242
|
+
this.autocompleteComponent.inputElement.nativeElement.hidden = true;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
FoehnMultiselectAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnMultiselectAutocompleteComponent, deps: [{ token: i0.NgZone }, { token: i1.SdkDictionaryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
246
|
+
FoehnMultiselectAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnMultiselectAutocompleteComponent, selector: "foehn-multiselect-autocomplete", inputs: { defaultElementValues: "defaultElementValues", defaultElementValue: "defaultElementValue" }, host: { listeners: { "keydown": "handleKeyboardDownEvent($event)" } }, providers: [
|
|
247
|
+
{
|
|
248
|
+
provide: FoehnInputComponent,
|
|
249
|
+
useExisting: forwardRef(() => FoehnMultiselectAutocompleteComponent),
|
|
250
|
+
multi: true
|
|
251
|
+
}
|
|
252
|
+
], viewQueries: [{ propertyName: "autocompleteComponent", first: true, predicate: ["autocompleteComponent"], descendants: true }, { propertyName: "alertMessageContainer", first: true, predicate: ["alertMessageContainer"], descendants: true }, { propertyName: "closeButtonsElemRef", predicate: ["closeButtonsElemRef"], descendants: true }, { propertyName: "selectedElemRef", predicate: ["selectedElemRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<foehn-autocomplete\n #autocompleteComponent\n [name]=\"name\"\n [label]=\"label\"\n [elements]=\"elements\"\n [elementsUrl]=\"elementsUrl\"\n [elementValue]=\"elementValue\"\n [elementLabel]=\"elementLabel\"\n [elementValueIdentity]=\"elementValueIdentity\"\n [elementDisabled]=\"elementDisabled\"\n [allElementDisabled]=\"allElementDisabled\"\n [elementGroup]=\"elementGroup\"\n [allowCustomValue]=\"false\"\n [searchValueMinCharsCount]=\"searchValueMinCharsCount\"\n [customValueModelGenerator]=\"customValueModelGenerator\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n (userInput)=\"addItem($event)\"\n [(model)]=\"autocompleteInputValue\"\n (elementsLoaded)=\"onAutocompleteElementsLoaded($event)\"\n>\n <div\n [attr.role]=\"!disabled ? 'application' : null\"\n (focusin)=\"onSelectedItemsFocusin()\"\n (focusout)=\"onSelectedItemsFocusout()\"\n [tabindex]=\"(!!model && !!model.length) ? 0 : -1\"\n class=\"selected-list-container\"\n >\n <div class=\"sr-only\">\n {{'foehn-multiselect-autocomplete.list-of-selected-items.screen-reader.helper' | fromDictionary}}\n </div>\n <ul\n [id]=\"buildChildId() + 'SelectedItemsList'\"\n class=\"list-unstyled mb-1 d-flex align-content-stretch flex-wrap\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n aria-orientation=\"horizontal\"\n [attr.aria-label]=\"getSelectedListAriaLabel()\"\n >\n <li\n *ngFor=\"let element of model; let index = index; trackBy: trackByFn\"\n class=\"badge badge-pill badge-secondary mr-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"isSelectedItemFocusable(index) ? 0 : -1\"\n [attr.is-default]=\"!canBeDeleted(index)\"\n #selectedElemRef\n >\n <ng-container *ngIf=\"!disabled\">\n <span *ngIf=\"!canBeDeleted(index)\" class=\"sr-only\">{{ 'foehn-multiselect-autocomplete.selected.screen-reader.default-value' | fromDictionary }}</span>\n <span *ngIf=\"canBeDeleted(index)\" class=\"sr-only\">{{ 'foehn-multiselect-autocomplete.selected.screen-reader.selected-value' | fromDictionary }}</span>\n </ng-container>\n\n <span [innerHtml]=\"getLabel(element)\"></span>\n\n <button\n *ngIf=\"!disabled && canBeDeleted(index)\"\n type=\"button\"\n class=\"btn btn-link ml-2\"\n [tabindex]=\"getSelectedElementTabIndex(index)\"\n (click)=\"removeItem(element)\"\n [attr.aria-label]=\"getDeleteButtonAriaLabel(element)\"\n #closeButtonsElemRef\n >\n <foehn-icon-times\n title=\"{{ 'foehn-multiselect-autocomplete.selected.delete' | fromDictionary: {elementLabel: getLabel(element)} }}\"\n ></foehn-icon-times>\n </button>\n </li>\n </ul>\n </div>\n\n <small\n *ngIf=\"!showEmptyListMessage\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText ? helpText : 'foehn-multiselect-autocomplete.autocomplete.screen-reader.label' | fromDictionary\"\n ></small>\n\n <div\n [id]=\"buildChildId() + 'AlertMessageContainer'\"\n role=\"status\"\n tabindex=\"-1\"\n #alertMessageContainer\n >\n <p\n *ngIf=\"showEmptyListMessage\"\n class=\"alert alert-info\"\n tabindex=\"0\"\n >{{'foehn-multiselect-autocomplete.autocomplete.empty-message' | fromDictionary}}</p>\n </div>\n</foehn-autocomplete>\n", styles: [".selected-list-container button>.btn,.btn-link{line-height:inherit;padding:0}.selected-list-container li:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem #ffbf47}.selected-list-container:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem #ffbf47}foehn-autocomplete p.alert:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem #ffbf47}\n"], components: [{ type: i2.FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: ["searchValueMinCharsCount", "allowCustomValue", "customValueModelGenerator"] }, { type: i3.FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fromDictionary": i5.SdkDictionaryPipe } });
|
|
253
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnMultiselectAutocompleteComponent, decorators: [{
|
|
254
|
+
type: Component,
|
|
255
|
+
args: [{
|
|
256
|
+
selector: 'foehn-multiselect-autocomplete',
|
|
257
|
+
templateUrl: './foehn-multiselect-autocomplete.component.html',
|
|
258
|
+
styleUrls: ['./foehn-multiselect-autocomplete.component.css'],
|
|
259
|
+
providers: [
|
|
260
|
+
{
|
|
261
|
+
provide: FoehnInputComponent,
|
|
262
|
+
useExisting: forwardRef(() => FoehnMultiselectAutocompleteComponent),
|
|
263
|
+
multi: true
|
|
264
|
+
}
|
|
265
|
+
]
|
|
266
|
+
}]
|
|
267
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.SdkDictionaryService }]; }, propDecorators: { autocompleteComponent: [{
|
|
268
|
+
type: ViewChild,
|
|
269
|
+
args: ['autocompleteComponent']
|
|
270
|
+
}], alertMessageContainer: [{
|
|
271
|
+
type: ViewChild,
|
|
272
|
+
args: ['alertMessageContainer']
|
|
273
|
+
}], closeButtonsElemRef: [{
|
|
274
|
+
type: ViewChildren,
|
|
275
|
+
args: ['closeButtonsElemRef']
|
|
276
|
+
}], selectedElemRef: [{
|
|
277
|
+
type: ViewChildren,
|
|
278
|
+
args: ['selectedElemRef']
|
|
279
|
+
}], defaultElementValues: [{
|
|
280
|
+
type: Input
|
|
281
|
+
}], defaultElementValue: [{
|
|
282
|
+
type: Input
|
|
283
|
+
}], handleKeyboardDownEvent: [{
|
|
284
|
+
type: HostListener,
|
|
285
|
+
args: ['keydown', ['$event']]
|
|
286
|
+
}] } });
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUvZm9laG4tbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUvZm9laG4tbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBZXhELE1BQU0sT0FBTyxxQ0FBc0MsU0FBUSwwQkFBMEI7SUFzQ2pGLFlBQVksTUFBYyxFQUFVLGlCQUF1QztRQUN2RSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFEa0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQU4zRSx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFHckIsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO0lBSzFDLENBQUM7SUExQkQsSUFDSSxvQkFBb0IsQ0FBQyxLQUFnQjtRQUNyQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFD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QzFCTCwreUhBMEZBOzJGRDlEYSxxQ0FBcUM7a0JBWmpELFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsV0FBVyxFQUFFLGlEQUFpRDtvQkFDOUQsU0FBUyxFQUFFLENBQUMsZ0RBQWdELENBQUM7b0JBQzdELFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQ0FBc0MsQ0FBQzs0QkFDcEUsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7aUJBQ0o7Z0lBSVcscUJBQXFCO3NCQUQ1QixTQUFTO3VCQUFDLHVCQUF1QjtnQkFJMUIscUJBQXFCO3NCQUQ1QixTQUFTO3VCQUFDLHVCQUF1QjtnQkFJMUIsbUJBQW1CO3NCQUQxQixZQUFZO3VCQUFDLHFCQUFxQjtnQkFJM0IsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBSTNCLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFhRixtQkFBbUI7c0JBRHRCLEtBQUs7Z0JBaUJFLHVCQUF1QjtzQkFEOUIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LCBOZ1pvbmUsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb2VobklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvZWhuQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4tYXV0b2NvbXBsZXRlL2ZvZWhuLWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYmplY3RIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL29iamVjdC5oZWxwZXInO1xuaW1wb3J0IHsgU2RrRGljdGlvbmFyeVNlcnZpY2UgfSBmcm9tICcuLi9zZGstZGljdGlvbmFyeS9zZGstZGljdGlvbmFyeS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmb2Vobi1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZvZWhuLW11bHRpc2VsZWN0LWF1dG9jb21wbGV0ZS5jb21wb25lbnQuY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvZWhuSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb2Vobk11bHRpc2VsZWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvZWhuTXVsdGlzZWxlY3RBdXRvY29tcGxldGVDb21wb25lbnQgZXh0ZW5kcyBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudCB7XG5cbiAgICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGVDb21wb25lbnQnKVxuICAgIHByaXZhdGUgYXV0b2NvbXBsZXRlQ29tcG9uZW50OiBGb2VobkF1dG9jb21wbGV0ZUNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ2FsZXJ0TWVzc2FnZUNvbnRhaW5lcicpXG4gICAgcHJpdmF0ZSBhbGVydE1lc3NhZ2VDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkcmVuKCdjbG9zZUJ1dHRvbnNFbGVtUmVmJylcbiAgICBwcml2YXRlIGNsb3NlQnV0dG9uc0VsZW1SZWY6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ3NlbGVjdGVkRWxlbVJlZicpXG4gICAgcHJpdmF0ZSBzZWxlY3RlZEVsZW1SZWY6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRlZmF1bHRFbGVtZW50VmFsdWVzKGl0ZW1zOiB1bmtub3duW10pIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0RWxlbWVudFZhbHVlc18gPSBbLi4uaXRlbXNdO1xuICAgICAgICBpZiAoKCF0aGlzLm1vZGVsIHx8ICF0aGlzLm1vZGVsLmxlbmd0aCkgJiYgaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbChpdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdEVsZW1lbnRWYWx1ZXMoKTogdW5rbm93bltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEVsZW1lbnRWYWx1ZXNfO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRlZmF1bHRFbGVtZW50VmFsdWUoaXRlbTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEVsZW1lbnRWYWx1ZXMgPSBbaXRlbV07XG4gICAgfVxuXG4gICAgYXV0b2NvbXBsZXRlSW5wdXRWYWx1ZTogc3RyaW5nO1xuICAgIHNob3dFbXB0eUxpc3RNZXNzYWdlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGRlZmF1bHRFbGVtZW50VmFsdWVzXzogdW5rbm93bltdO1xuICAgIHByaXZhdGUga2V5Ym9hcmROYXZpZ2F0aW9uQWxsb3dlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgY3VycmVudEZvY3VzZWRFbGVtOiBFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3Iobmdab25lOiBOZ1pvbmUsIHByaXZhdGUgZGljdGlvbmFyeVNlcnZpY2U6IFNka0RpY3Rpb25hcnlTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKG5nWm9uZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlib2FyZERvd25FdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZE5hdmlnYXRpb25BbGxvd2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93blNlbGVjdGVkSW5uZXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTXVsdGlzZWxlY3RBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbGlkVmFsdWUgPSB0aGlzLmdldFZhbGlkVmFsdWUoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOZ01vZGVsKHZhbGlkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlVXNlcklucHV0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZFZhbHVlID0gdGhpcy5nZXRWYWxpZFZhbHVlKCk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbGlkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSXRlbShpdGVtOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2YoaXRlbSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTXVsdGlzZWxlY3RBdXRvY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJJbnB1dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFuYWdlU3VnZ2VzdGlvbkxpc3RBbmRGb2N1c0FmdGVyQWRkaW5nQW5JdGVtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVJdGVtKGl0ZW06IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJVc2VySW5wdXQodGhpcy5tb2RlbCk7XG4gICAgICAgICAgICB0aGlzLm1hbmFnZVN1Z2dlc3Rpb25MaXN0QW5kRm9jdXNBZnRlclJlbW92aW5nQW5JdGVtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSxAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG4gICAgZ2V0TGFiZWwodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLmZpbmRFbGVtZW50QnlNb2RlbEl0ZW0odmFsdWUpO1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0TGFiZWwoZWxlbSk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50VGFiSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBmaXJzdEluZGV4Rm9jdXNhYmxlID0gMDtcbiAgICAgICAgaWYgKCEhdGhpcy5kZWZhdWx0RWxlbWVudFZhbHVlcykge1xuICAgICAgICAgICAgZmlyc3RJbmRleEZvY3VzYWJsZSA9IHRoaXMubW9kZWwuZmluZEluZGV4KChzZWxlY3RlZDogdW5rbm93bikgPT4gIXRoaXMuZGVmYXVsdEVsZW1lbnRWYWx1ZXMuaW5jbHVkZXMoc2VsZWN0ZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggIT09IGZpcnN0SW5kZXhGb2N1c2FibGUpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkSXRlbUZvY3VzYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCAmJiAhIXRoaXMuZGVmYXVsdEVsZW1lbnRWYWx1ZXMgJiYgdGhpcy5kZWZhdWx0RWxlbWVudFZhbHVlcy5pbmNsdWRlcyh0aGlzLm1vZGVsW2luZGV4XSk7XG4gICAgfVxuXG4gICAgY2FuQmVEZWxldGVkKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmRlZmF1bHRFbGVtZW50VmFsdWVzIHx8ICF0aGlzLmRlZmF1bHRFbGVtZW50VmFsdWVzLmluY2x1ZGVzKHRoaXMubW9kZWxbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGVkSXRlbXNGb2N1c2luKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkFsbG93ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c2VkRWxlbSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgb25TZWxlY3RlZEl0ZW1zRm9jdXNvdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uQWxsb3dlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uQXV0b2NvbXBsZXRlRWxlbWVudHNMb2FkZWQoZWxlbWVudHM6IFtdKTogdm9pZCB7XG4gICAgICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgY2hpbGRWaWV3IHRvIGJlIGxvYWRlZFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuYXV0b2NvbXBsZXRlQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb21wb25lbnQuZWxlbWVudHMgPSB0aGlzLmZpbHRlckF1dG9jb21wbGV0ZUVsZW1lbnRzKGVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuYXV0b2NvbXBsZXRlQ29tcG9uZW50LmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2VBbmRIaWRlQXV0b2NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREZWxldGVCdXR0b25BcmlhTGFiZWwoZWxlbWVudDogdW5rbm93bik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldEtleVN5bmMoJ2ZvZWhuLW11bHRpc2VsZWN0LWF1dG9jb21wbGV0ZS5zZWxlY3RlZC5kZWxldGUuYXJpYS1sYWJlbCcsXG4gICAgICAgICAgICB7IGVsZW1lbnRMYWJlbDogdGhpcy5nZXRMYWJlbChlbGVtZW50KSwgY29tcG9uZW50TGFiZWw6IHRoaXMubGFiZWwgfSl9YDtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZExpc3RBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9OiAke3RoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYygnZm9laG4tbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlLmxpc3Qtb2Ytc2VsZWN0ZWQtaXRlbXMnKX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEVsZW1lbnRCeU1vZGVsSXRlbShpdGVtOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgICAgIGlmICghIXRoaXMuZWxlbWVudHMgJiYgISF0aGlzLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbVZhbHVlOiBzdHJpbmcgPSB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBpdGVtIDogdGhpcy5nZXRWYWx1ZShpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLmVsZW1lbnRzLmZpbmQoKGVsZW1lbnQ6IHVua25vd24pID0+IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCkgPT09IGl0ZW1WYWx1ZSk7XG4gICAgICAgICAgICBpZiAoISFlbGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZFZhbHVlKCk6IG51bWJlcltdIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLm1vZGVsIHx8ICF0aGlzLm1vZGVsLmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaXJzdERlbGV0ZUJ1dHRvblRvRm9jdXMoKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbnNFbGVtUmVmQXJyYXkgPSBbLi4udGhpcy5jbG9zZUJ1dHRvbnNFbGVtUmVmLnRvQXJyYXkoKV07XG4gICAgICAgIGlmICghIWNsb3NlQnV0dG9uc0VsZW1SZWZBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZUJ1dHRvbnNFbGVtUmVmQXJyYXlbMF0ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5hdmlnYXRlU2VsZWN0ZWRMaXN0KG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgY2xvc2VCdXR0b25zRWxlbVJlZkFycmF5ID0gdGhpcy5nZXREZWZhdWx0U2VsZWN0ZWRFbGVtZW50cygpLmNvbmNhdChbLi4udGhpcy5jbG9zZUJ1dHRvbnNFbGVtUmVmLnRvQXJyYXkoKV0pO1xuICAgICAgICAgICAgaWYgKCEhY2xvc2VCdXR0b25zRWxlbVJlZkFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzSW5kZXggPSBjbG9zZUJ1dHRvbnNFbGVtUmVmQXJyYXkuZmluZEluZGV4KHZhbHVlID0+IHRoaXMuY3VycmVudEZvY3VzZWRFbGVtID09PSB2YWx1ZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3SW5kZXggPSBmb2N1c0luZGV4ICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGlmIChuZXdJbmRleCA+PSBjbG9zZUJ1dHRvbnNFbGVtUmVmQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5ld0luZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdJbmRleCA9IGNsb3NlQnV0dG9uc0VsZW1SZWZBcnJheS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtUmVmID0gY2xvc2VCdXR0b25zRWxlbVJlZkFycmF5W25ld0luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoISFlbGVtUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1SZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVmYXVsdFNlbGVjdGVkRWxlbWVudHMoKTogRWxlbWVudFJlZltdIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnNlbGVjdGVkRWxlbVJlZi50b0FycmF5KCldLmZpbHRlcihcbiAgICAgICAgICAgIHZhbHVlID0+IHZhbHVlLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpcy1kZWZhdWx0JykgPT09ICd0cnVlJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25LZXlEb3duU2VsZWN0ZWRJbm5lcihrZXlFdmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQga2V5RXZlbnQuY29kZSwgYW5kIGhhcyBkaWZmZXJlbnQgdmFsdWVzXG4gICAgICAgIC8vIGluIGtleUV2ZW50LmtleSAoRG93biBpbnN0ZWFkIG9mIEFycm93RG93biBmb3IgaW5zdGFuY2UpLCBoZW5jZSB0aGUgbXVsdGktc3VwcG9ydC5cbiAgICAgICAgY29uc3QgaWUxMUNvbXBhdGlibGVDb2RlID0ga2V5RXZlbnQuY29kZSB8fCBrZXlFdmVudC5rZXk7XG4gICAgICAgIHN3aXRjaCAoaWUxMUNvbXBhdGlibGVDb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdSaWdodCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlU2VsZWN0ZWRMaXN0KDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTGVmdCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVTZWxlY3RlZExpc3QoLTEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlckF1dG9jb21wbGV0ZUVsZW1lbnRzKGVsZW1lbnRzOiBbXSk6IHVua25vd24ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gT2JqZWN0SGVscGVyLmRlZXBDb3B5KGVsZW1lbnRzKTtcblxuICAgICAgICBpZiAoISF0aGlzLm1vZGVsICYmICEhdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaCgoc2VsZWN0ZWQ6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmFsdWVdIG9mIGZpbHRlcmVkRWxlbWVudHMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLmZpbmRFbGVtZW50QnlNb2RlbEl0ZW0oc2VsZWN0ZWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0SGVscGVyLmlzRXF1YWwoZWxlbSwgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEVsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYW5hZ2VTdWdnZXN0aW9uTGlzdEFuZEZvY3VzQWZ0ZXJBZGRpbmdBbkl0ZW0oKTogdm9pZCB7XG4gICAgICAgIC8vIEhpZ2hsaWdodCBzZWxlY3RlZCBzdWdnZXN0aW9uIGluIGlucHV0IHNvIHNjcmVlbiByZWFkZXIga25vd3MgdGhlcmUgaXMgc3RpbGwgc29tZSB0ZXh0IGluIGlucHV0XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29tcG9uZW50LmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICAvLyBSZW1vdmUgc2VsZWN0ZWQgaXRlbSBmcm9tIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uIGxpc3RcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb21wb25lbnQuZWxlbWVudHMgPSB0aGlzLmZpbHRlckF1dG9jb21wbGV0ZUVsZW1lbnRzKHRoaXMuZWxlbWVudHMpO1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBzdGlsbCBoYXZlIHN1Z2dlc3Rpb25zIHRvIGRpc3BsYXlcbiAgICAgICAgaWYgKCF0aGlzLmF1dG9jb21wbGV0ZUNvbXBvbmVudC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZUFuZEhpZGVBdXRvY29tcGxldGUoKTtcbiAgICAgICAgICAgIC8vIE5lZWQgc2V0VGltZW91dCB0byBlbnN1cmUgYWxlcnQgbWVzc2FnZSBpcyBvbiB0aGUgRE9NIGFuZCBjYW4gYmUgZm9jdXNhYmxlXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGVydE1lc3NhZ2U6IEhUTUxFbGVtZW50ID0gdGhpcy5hbGVydE1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdwJyk7XG4gICAgICAgICAgICAgICAgaWYgKGFsZXJ0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydE1lc3NhZ2UuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFuYWdlU3VnZ2VzdGlvbkxpc3RBbmRGb2N1c0FmdGVyUmVtb3ZpbmdBbkl0ZW0oKTogdm9pZCB7XG4gICAgICAgIC8vIEhpZGUgbWVzc2FnZSBzYXlpbmcgbm8gbW9yZSBzdWdnZXN0aW9ucyB0byBkaXNwbGF5XG4gICAgICAgIHRoaXMuc2hvd0VtcHR5TGlzdE1lc3NhZ2UgPSBmYWxzZTtcbiAgICAgICAgLy8gTWFudWFsbHkgc2hvdyBhdXRvY29tcGxldGUgYmVjYXVzZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc3VnZ2VzdGlvbnMgdG8gZGlzcGxheVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbXBvbmVudC5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgLy8gQWRkIGJhY2sgc2VsZWN0ZWQgaXRlbSB0byBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbiBsaXN0XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29tcG9uZW50LmVsZW1lbnRzID0gdGhpcy5maWx0ZXJBdXRvY29tcGxldGVFbGVtZW50cyh0aGlzLmVsZW1lbnRzKTtcbiAgICAgICAgLy8gV2hlbiBkZWxldGluZyBhIHNlbGVjdGVkIGl0ZW0sIGNoZWNrIHdlcmUgdG8gc2V0IGZvY3VzIGJhY2tcbiAgICAgICAgdGhpcy5jbG9zZUJ1dHRvbnNFbGVtUmVmLmNoYW5nZXMucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uVG9Gb2N1cyA9IHRoaXMuZ2V0Rmlyc3REZWxldGVCdXR0b25Ub0ZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoISFidXR0b25Ub0ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uVG9Gb2N1cy5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbXBvbmVudC5zZXRGb2N1c09uSW5wdXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbXBvbmVudC5vbklucHV0Rm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93QWxlcnRNZXNzYWdlQW5kSGlkZUF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gU2hvdyBhIG1lc3NhZ2UgdG8gdXNlciBpbmRpY2F0aW5nIHRoZXJlIGlzIG5vIG1vcmUgc3VnZ2VzdGlvbnMgdG8gZGlzcGxheVxuICAgICAgICB0aGlzLnNob3dFbXB0eUxpc3RNZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgLy8gTWFudWFsbHkgcmVzZXQgYW5kIGhpZGUgYXV0b2NvbXBsZXRlIGJlY2F1c2UgdGhlcmUgaXMgbm8gbW9yZSBzdWdnZXN0aW9ucyB0byBkaXNwbGF5XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlSW5wdXRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29tcG9uZW50LmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgfVxufVxuIiwiPGZvZWhuLWF1dG9jb21wbGV0ZVxuICAgICNhdXRvY29tcGxldGVDb21wb25lbnRcbiAgICBbbmFtZV09XCJuYW1lXCJcbiAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgIFtlbGVtZW50c109XCJlbGVtZW50c1wiXG4gICAgW2VsZW1lbnRzVXJsXT1cImVsZW1lbnRzVXJsXCJcbiAgICBbZWxlbWVudFZhbHVlXT1cImVsZW1lbnRWYWx1ZVwiXG4gICAgW2VsZW1lbnRMYWJlbF09XCJlbGVtZW50TGFiZWxcIlxuICAgIFtlbGVtZW50VmFsdWVJZGVudGl0eV09XCJlbGVtZW50VmFsdWVJZGVudGl0eVwiXG4gICAgW2VsZW1lbnREaXNhYmxlZF09XCJlbGVtZW50RGlzYWJsZWRcIlxuICAgIFthbGxFbGVtZW50RGlzYWJsZWRdPVwiYWxsRWxlbWVudERpc2FibGVkXCJcbiAgICBbZWxlbWVudEdyb3VwXT1cImVsZW1lbnRHcm91cFwiXG4gICAgW2FsbG93Q3VzdG9tVmFsdWVdPVwiZmFsc2VcIlxuICAgIFtzZWFyY2hWYWx1ZU1pbkNoYXJzQ291bnRdPVwic2VhcmNoVmFsdWVNaW5DaGFyc0NvdW50XCJcbiAgICBbY3VzdG9tVmFsdWVNb2RlbEdlbmVyYXRvcl09XCJjdXN0b21WYWx1ZU1vZGVsR2VuZXJhdG9yXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKHVzZXJJbnB1dCk9XCJhZGRJdGVtKCRldmVudClcIlxuICAgIFsobW9kZWwpXT1cImF1dG9jb21wbGV0ZUlucHV0VmFsdWVcIlxuICAgIChlbGVtZW50c0xvYWRlZCk9XCJvbkF1dG9jb21wbGV0ZUVsZW1lbnRzTG9hZGVkKCRldmVudClcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgW2F0dHIucm9sZV09XCIhZGlzYWJsZWQgPyAnYXBwbGljYXRpb24nIDogbnVsbFwiXG4gICAgICAgIChmb2N1c2luKT1cIm9uU2VsZWN0ZWRJdGVtc0ZvY3VzaW4oKVwiXG4gICAgICAgIChmb2N1c291dCk9XCJvblNlbGVjdGVkSXRlbXNGb2N1c291dCgpXCJcbiAgICAgICAgW3RhYmluZGV4XT1cIighIW1vZGVsICYmICEhbW9kZWwubGVuZ3RoKSA/IDAgOiAtMVwiXG4gICAgICAgIGNsYXNzPVwic2VsZWN0ZWQtbGlzdC1jb250YWluZXJcIlxuICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgIHt7J2ZvZWhuLW11bHRpc2VsZWN0LWF1dG9jb21wbGV0ZS5saXN0LW9mLXNlbGVjdGVkLWl0ZW1zLnNjcmVlbi1yZWFkZXIuaGVscGVyJyB8IGZyb21EaWN0aW9uYXJ5fX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx1bFxuICAgICAgICAgICAgW2lkXT1cImJ1aWxkQ2hpbGRJZCgpICsgJ1NlbGVjdGVkSXRlbXNMaXN0J1wiXG4gICAgICAgICAgICBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMSBkLWZsZXggYWxpZ24tY29udGVudC1zdHJldGNoIGZsZXgtd3JhcFwiXG4gICAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgICAgYXJpYS1hdG9taWM9XCJ0cnVlXCJcbiAgICAgICAgICAgIGFyaWEtb3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0U2VsZWN0ZWRMaXN0QXJpYUxhYmVsKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBtb2RlbDsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXNlY29uZGFyeSBtci0xIG1iLTEgcHktMiBweC0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJpc1NlbGVjdGVkSXRlbUZvY3VzYWJsZShpbmRleCkgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlzLWRlZmF1bHRdPVwiIWNhbkJlRGVsZXRlZChpbmRleClcIlxuICAgICAgICAgICAgICAgICNzZWxlY3RlZEVsZW1SZWZcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNhbkJlRGVsZXRlZChpbmRleClcIiBjbGFzcz1cInNyLW9ubHlcIj57eyAnZm9laG4tbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlLnNlbGVjdGVkLnNjcmVlbi1yZWFkZXIuZGVmYXVsdC12YWx1ZScgfCBmcm9tRGljdGlvbmFyeSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjYW5CZURlbGV0ZWQoaW5kZXgpXCIgY2xhc3M9XCJzci1vbmx5XCI+e3sgJ2ZvZWhuLW11bHRpc2VsZWN0LWF1dG9jb21wbGV0ZS5zZWxlY3RlZC5zY3JlZW4tcmVhZGVyLnNlbGVjdGVkLXZhbHVlJyB8IGZyb21EaWN0aW9uYXJ5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJnZXRMYWJlbChlbGVtZW50KVwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGlzYWJsZWQgJiYgY2FuQmVEZWxldGVkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBtbC0yXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImdldFNlbGVjdGVkRWxlbWVudFRhYkluZGV4KGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVJdGVtKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXREZWxldGVCdXR0b25BcmlhTGFiZWwoZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAjY2xvc2VCdXR0b25zRWxlbVJlZlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZvZWhuLWljb24tdGltZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ2ZvZWhuLW11bHRpc2VsZWN0LWF1dG9jb21wbGV0ZS5zZWxlY3RlZC5kZWxldGUnIHwgZnJvbURpY3Rpb25hcnk6IHtlbGVtZW50TGFiZWw6IGdldExhYmVsKGVsZW1lbnQpfSB9fVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZvZWhuLWljb24tdGltZXM+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuXG4gICAgPHNtYWxsXG4gICAgICAgICpuZ0lmPVwiIXNob3dFbXB0eUxpc3RNZXNzYWdlXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHQgPyBoZWxwVGV4dCA6ICdmb2Vobi1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUuYXV0b2NvbXBsZXRlLnNjcmVlbi1yZWFkZXIubGFiZWwnIHwgZnJvbURpY3Rpb25hcnlcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPGRpdlxuICAgICAgICBbaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnQWxlcnRNZXNzYWdlQ29udGFpbmVyJ1wiXG4gICAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgI2FsZXJ0TWVzc2FnZUNvbnRhaW5lclxuICAgID5cbiAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0VtcHR5TGlzdE1lc3NhZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgID57eydmb2Vobi1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUuYXV0b2NvbXBsZXRlLmVtcHR5LW1lc3NhZ2UnIHwgZnJvbURpY3Rpb25hcnl9fTwvcD5cbiAgICA8L2Rpdj5cbjwvZm9laG4tYXV0b2NvbXBsZXRlPlxuIl19
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { FoehnMultiselectAutocompleteComponent } from './foehn-multiselect-autocomplete.component';
|
|
3
|
+
import { FoehnAutocompleteModule } from '../foehn-autocomplete/foehn-autocomplete.module';
|
|
4
|
+
import { SdkDictionaryModule } from '../sdk-dictionary/sdk-dictionary.module';
|
|
5
|
+
import { FoehnValidationAlertsModule } from '../foehn-validation-alerts/foehn-validation-alerts.module';
|
|
6
|
+
import { CommonModule } from '@angular/common';
|
|
7
|
+
import { FoehnIconsModule } from '../foehn-icons/foehn-icons.module';
|
|
8
|
+
import { FormsModule } from '@angular/forms';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class FoehnMultiselectAutocompleteModule {
|
|
11
|
+
}
|
|
12
|
+
FoehnMultiselectAutocompleteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnMultiselectAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
FoehnMultiselectAutocompleteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnMultiselectAutocompleteModule, declarations: [FoehnMultiselectAutocompleteComponent], imports: [FoehnAutocompleteModule,
|
|
14
|
+
SdkDictionaryModule,
|
|
15
|
+
FoehnValidationAlertsModule,
|
|
16
|
+
CommonModule,
|
|
17
|
+
FoehnIconsModule,
|
|
18
|
+
FormsModule], exports: [FoehnMultiselectAutocompleteComponent] });
|
|
19
|
+
FoehnMultiselectAutocompleteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnMultiselectAutocompleteModule, imports: [[
|
|
20
|
+
FoehnAutocompleteModule,
|
|
21
|
+
SdkDictionaryModule,
|
|
22
|
+
FoehnValidationAlertsModule,
|
|
23
|
+
CommonModule,
|
|
24
|
+
FoehnIconsModule,
|
|
25
|
+
FormsModule
|
|
26
|
+
]] });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnMultiselectAutocompleteModule, decorators: [{
|
|
28
|
+
type: NgModule,
|
|
29
|
+
args: [{
|
|
30
|
+
imports: [
|
|
31
|
+
FoehnAutocompleteModule,
|
|
32
|
+
SdkDictionaryModule,
|
|
33
|
+
FoehnValidationAlertsModule,
|
|
34
|
+
CommonModule,
|
|
35
|
+
FoehnIconsModule,
|
|
36
|
+
FormsModule
|
|
37
|
+
],
|
|
38
|
+
declarations: [FoehnMultiselectAutocompleteComponent],
|
|
39
|
+
exports: [FoehnMultiselectAutocompleteComponent]
|
|
40
|
+
}]
|
|
41
|
+
}] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1tdWx0aXNlbGVjdC1hdXRvY29tcGxldGUvZm9laG4tbXVsdGlzZWxlY3QtYXV0b2NvbXBsZXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBYzdDLE1BQU0sT0FBTyxrQ0FBa0M7OytIQUFsQyxrQ0FBa0M7Z0lBQWxDLGtDQUFrQyxpQkFINUIscUNBQXFDLGFBUGhELHVCQUF1QjtRQUN2QixtQkFBbUI7UUFDbkIsMkJBQTJCO1FBQzNCLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsV0FBVyxhQUdMLHFDQUFxQztnSUFFdEMsa0NBQWtDLFlBWGxDO1lBQ0wsdUJBQXVCO1lBQ3ZCLG1CQUFtQjtZQUNuQiwyQkFBMkI7WUFDM0IsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixXQUFXO1NBQ2Q7MkZBSVEsa0NBQWtDO2tCQVo5QyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCx1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsMkJBQTJCO3dCQUMzQixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsV0FBVztxQkFDZDtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztvQkFDckQsT0FBTyxFQUFFLENBQUMscUNBQXFDLENBQUM7aUJBQ25EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvZWhuTXVsdGlzZWxlY3RBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuL2ZvZWhuLW11bHRpc2VsZWN0LWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9laG5BdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICcuLi9mb2Vobi1hdXRvY29tcGxldGUvZm9laG4tYXV0b2NvbXBsZXRlLm1vZHVsZSc7XG5pbXBvcnQgeyBTZGtEaWN0aW9uYXJ5TW9kdWxlIH0gZnJvbSAnLi4vc2RrLWRpY3Rpb25hcnkvc2RrLWRpY3Rpb25hcnkubW9kdWxlJztcbmltcG9ydCB7IEZvZWhuVmFsaWRhdGlvbkFsZXJ0c01vZHVsZSB9IGZyb20gJy4uL2ZvZWhuLXZhbGlkYXRpb24tYWxlcnRzL2ZvZWhuLXZhbGlkYXRpb24tYWxlcnRzLm1vZHVsZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9laG5JY29uc01vZHVsZSB9IGZyb20gJy4uL2ZvZWhuLWljb25zL2ZvZWhuLWljb25zLm1vZHVsZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZvZWhuQXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgICAgICBTZGtEaWN0aW9uYXJ5TW9kdWxlLFxuICAgICAgICBGb2VoblZhbGlkYXRpb25BbGVydHNNb2R1bGUsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9laG5JY29uc01vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGVcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW0ZvZWhuTXVsdGlzZWxlY3RBdXRvY29tcGxldGVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtGb2Vobk11bHRpc2VsZWN0QXV0b2NvbXBsZXRlQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBGb2Vobk11bHRpc2VsZWN0QXV0b2NvbXBsZXRlTW9kdWxlIHtcbn1cbiJdfQ==
|
|
@@ -133,7 +133,7 @@ FoehnPictureUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.
|
|
|
133
133
|
useExisting: forwardRef(() => FoehnPictureUploadComponent),
|
|
134
134
|
multi: true
|
|
135
135
|
}
|
|
136
|
-
], usesInheritance: true, ngImport: i0, template: "<div\n [attr.id]=\"buildId('Container')\"\n [class.has-danger]=\"hasErrors()\"\n [class.vd-form-group-danger]=\"hasErrors()\"\n class=\"form-group clearable-input-form-group\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <input type=\"hidden\" [name]=\"name || label\" [ngModel]=\"model\" />\n\n <ng-content></ng-content>\n\n <div *ngIf=\"hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <img\n [id]=\"buildChildId('Picture')\"\n [attr.alt]=\"label\"\n [src]=\"getDownloadUrl()\"\n />\n </div>\n <div class=\"col-md-4\">\n <button\n type=\"button\"\n class=\"btn btn-danger w-100\"\n [attr.id]=\"buildChildId('DeleteButton')\"\n (click)=\"deleteFile()\"\n >\n {{\n 'foehn-picture-upload.delete-picture-label' | fromDictionary\n }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"!hasPicture && !croppedPictureAsBase64Url\">\n <input\n #inputFile\n type=\"file\"\n class=\"form-control-file d-none\"\n [attr.id]=\"name\"\n [attr.accept]=\"'.jpeg,.jpg,.png'\"\n [multiple]=\"false\"\n [name]=\"name\"\n (change)=\"onPictureSelection($event)\"\n />\n\n <button\n type=\"button\"\n class=\"btn btn-primary my-2\"\n [attr.id]=\"buildChildId('ChooseButton')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n [disabled]=\"loading\"\n >\n {{ 'foehn-picture-upload.choose-button-label' | fromDictionary }}\n </button>\n </div>\n\n <div *ngIf=\"loading\">\n {{ 'foehn-picture-upload.loading-label' | fromDictionary }}\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <image-cropper\n [id]=\"buildChildId('Cropper')\"\n (cropperReady)=\"loading = false\"\n (imageCropped)=\"onImageCropped($event)\"\n (loadImageFailed)=\"onPictureSelectionFailed()\"\n [aspectRatio]=\"3 / 4\"\n [imageChangedEvent]=\"pictureToCrop\"\n [maintainAspectRatio]=\"true\"\n [resizeToWidth]=\"resizeToWidth\"\n [resizeToHeight]=\"resizeToHeight\"\n [onlyScaleDown]=\"true\"\n format=\"png\"\n ></image-cropper>\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"col-md-4\">\n <div class=\"row mb-3\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-primary w-100\"\n [attr.id]=\"buildChildId('SaveButton')\"\n (click)=\"savePicture()\"\n >\n {{\n 'foehn-picture-upload.validate-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n <div class=\"row\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-secondary w-100\"\n [attr.id]=\"buildChildId('CancelButton')\"\n (click)=\"resetPictureSelection()\"\n >\n {{\n 'foehn-picture-upload.cancel-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i4.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: i5.ImageCropperComponent, selector: "image-cropper", inputs: ["format", "transform", "maintainAspectRatio", "aspectRatio", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "cropper", "alignImage", "disabled", "imageChangedEvent", "imageURL", "imageBase64", "imageFile"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": i8.SdkDictionaryPipe } });
|
|
136
|
+
], usesInheritance: true, ngImport: i0, template: "<div\n [attr.id]=\"buildId('Container')\"\n [class.has-danger]=\"hasErrors()\"\n [class.vd-form-group-danger]=\"hasErrors()\"\n class=\"form-group clearable-input-form-group\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <input type=\"hidden\" [name]=\"name || label\" [ngModel]=\"model\" />\n\n <ng-content></ng-content>\n\n <div *ngIf=\"hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <img\n [id]=\"buildChildId('Picture')\"\n [attr.alt]=\"label\"\n [src]=\"getDownloadUrl()\"\n />\n </div>\n <div class=\"col-md-4\">\n <button\n type=\"button\"\n class=\"btn btn-danger w-100\"\n [attr.id]=\"buildChildId('DeleteButton')\"\n (click)=\"deleteFile()\"\n >\n {{\n 'foehn-picture-upload.delete-picture-label' | fromDictionary\n }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"!hasPicture && !croppedPictureAsBase64Url\">\n <input\n #inputFile\n type=\"file\"\n class=\"form-control-file d-none\"\n [attr.id]=\"name\"\n [attr.accept]=\"'.jpeg,.jpg,.png'\"\n [multiple]=\"false\"\n [name]=\"name\"\n (change)=\"onPictureSelection($event)\"\n />\n\n <button\n type=\"button\"\n class=\"btn btn-primary my-2\"\n [attr.id]=\"buildChildId('ChooseButton')\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.aria-describedby]=\"buildId('ErrorsContainer')\"\n (click)=\"inputFile.click()\"\n [attr.disabled]=\"loading ? 'disabled' : null\"\n >\n {{ 'foehn-picture-upload.choose-button-label' | fromDictionary }}\n </button>\n </div>\n\n <div *ngIf=\"loading\">\n {{ 'foehn-picture-upload.loading-label' | fromDictionary }}\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"row\">\n <div class=\"col-md-6\">\n <image-cropper\n [id]=\"buildChildId('Cropper')\"\n (cropperReady)=\"loading = false\"\n (imageCropped)=\"onImageCropped($event)\"\n (loadImageFailed)=\"onPictureSelectionFailed()\"\n [aspectRatio]=\"3 / 4\"\n [imageChangedEvent]=\"pictureToCrop\"\n [maintainAspectRatio]=\"true\"\n [resizeToWidth]=\"resizeToWidth\"\n [resizeToHeight]=\"resizeToHeight\"\n [onlyScaleDown]=\"true\"\n format=\"png\"\n ></image-cropper>\n </div>\n\n <div *ngIf=\"!hasPicture\" class=\"col-md-4\">\n <div class=\"row mb-3\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-primary w-100\"\n [attr.id]=\"buildChildId('SaveButton')\"\n (click)=\"savePicture()\"\n >\n {{\n 'foehn-picture-upload.validate-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n <div class=\"row\">\n <button\n *ngIf=\"croppedPictureAsBase64Url\"\n type=\"button\"\n class=\"btn btn-secondary w-100\"\n [attr.id]=\"buildChildId('CancelButton')\"\n (click)=\"resetPictureSelection()\"\n >\n {{\n 'foehn-picture-upload.cancel-selection-label'\n | fromDictionary\n }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i4.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: i5.ImageCropperComponent, selector: "image-cropper", inputs: ["format", "transform", "maintainAspectRatio", "aspectRatio", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "cropper", "alignImage", "disabled", "imageChangedEvent", "imageURL", "imageBase64", "imageFile"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "fromDictionary": i8.SdkDictionaryPipe } });
|
|
137
137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnPictureUploadComponent, decorators: [{
|
|
138
138
|
type: Component,
|
|
139
139
|
args: [{
|
|
@@ -164,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
|
|
|
164
164
|
}], shouldDisplayFileSavedConfirmation: [{
|
|
165
165
|
type: Input
|
|
166
166
|
}] } });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tcGljdHVyZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLXVwbG9hZC9mb2Vobi1waWN0dXJlLXVwbG9hZC9mb2Vobi1waWN0dXJlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tdXBsb2FkL2ZvZWhuLXBpY3R1cmUtdXBsb2FkL2ZvZWhuLXBpY3R1cmUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7QUFROUUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFjLEVBQUUsUUFBZ0IsRUFBUSxFQUFFO0lBQzFELDhEQUE4RDtJQUM5RCxNQUFNLElBQUksR0FBUSxRQUFRLENBQUM7SUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7SUFDckIsT0FBTyxJQUFZLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxzQkFBc0IsR0FBRyxDQUMzQix1QkFBK0IsRUFDL0IsUUFBZ0IsRUFDWixFQUFFO0lBQ04sTUFBTSxHQUFHLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxD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QUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO1lBQzFELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixpRENsREwsMCtJQXNJQTsyRkRsRmEsMkJBQTJCO2tCQVh2QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSx1Q0FBdUM7b0JBQ3BELFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7aUJBQ0o7NktBS0csSUFBSTtzQkFESCxLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlOLGtDQUFrQztzQkFEakMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb2VobklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERvY3VtZW50UmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vZm9laG4tdXBsb2FkL2RvY3VtZW50LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBHcm93bEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi1ncm93bC9ncm93bC1icm9rZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNdWx0aVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi11cGxvYWQvZm9laG4tbXVsdGktdXBsb2FkL211bHRpLXVwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFNka0RpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2RrLWRpY3Rpb25hcnkvc2RrLWRpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vZXJyb3ItdGVtcGxhdGUnO1xuaW1wb3J0IHsgSW1hZ2VDcm9wcGVkRXZlbnQgfSBmcm9tICduZ3gtaW1hZ2UtY3JvcHBlcic7XG5cbmNvbnN0IGJsb2JUb0ZpbGUgPSAoYmxvYkRhdGE6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpOiBGaWxlID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGJsb2I6IGFueSA9IGJsb2JEYXRhO1xuICAgIGJsb2IubmFtZSA9IGZpbGVOYW1lO1xuICAgIHJldHVybiBibG9iIGFzIEZpbGU7XG59O1xuXG5jb25zdCBjb252ZXJ0QmFzZTY0VXJsVG9GaWxlID0gKFxuICAgIGNyb3BwZWRJbWFnZWFzQmFzZTY0VXJsOiBzdHJpbmcsXG4gICAgZmlsZW5hbWU6IHN0cmluZ1xuKTogRmlsZSA9PiB7XG4gICAgY29uc3QgYXJyID0gY3JvcHBlZEltYWdlYXNCYXNlNjRVcmwuc3BsaXQoJywnKTtcbiAgICBjb25zdCBtaW1lID0gYXJyWzBdLm1hdGNoKC86KC4qPyk7LylbMV07XG4gICAgY29uc3QgYnN0ciA9IGF0b2IoYXJyWzFdKTtcbiAgICBsZXQgbiA9IGJzdHIubGVuZ3RoO1xuICAgIGNvbnN0IHU4YXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgd2hpbGUgKG4tLSkge1xuICAgICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcbiAgICB9XG5cbiAgICBpZiAoIW5hdmlnYXRvci5tc1NhdmVCbG9iKSB7XG4gICAgICAgIC8vIGRldGVjdCBpZiBub3QgRWRnZVxuICAgICAgICByZXR1cm4gbmV3IEZpbGUoW3U4YXJyXSwgZmlsZW5hbWUsIHsgdHlwZTogbWltZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFZGdlIHN1cHBvcnQgdGhlIEZpbGVBUEkgYnV0IG5vdCB0aGUgRmlsZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgcmV0dXJuIGJsb2JUb0ZpbGUobmV3IEJsb2IoW3U4YXJyXSwgeyB0eXBlOiBtaW1lIH0pLCBmaWxlbmFtZSk7XG4gICAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmb2Vobi1waWN0dXJlLXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLXBpY3R1cmUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRm9laG5JbnB1dENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvZWhuUGljdHVyZVVwbG9hZENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb2VoblBpY3R1cmVVcGxvYWRDb21wb25lbnRcbiAgICBleHRlbmRzIEZvZWhuSW5wdXRDb21wb25lbnQ8RG9jdW1lbnRSZWZlcmVuY2VbXT5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KClcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIGtleTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBsYWJlbDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBiYXNlVXJsID0gJ2FwaS9kb2N1bWVudCc7XG5cbiAgICBASW5wdXQoKVxuICAgIGNyb3BwZWRQaWN0dXJlRmlsZW5hbWUgPSAncGhvdG8ucG5nJztcblxuICAgIEBJbnB1dCgpXG4gICAgcmVzaXplVG9XaWR0aCA9IDMwMDtcblxuICAgIEBJbnB1dCgpXG4gICAgcmVzaXplVG9IZWlnaHQgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBzaG91bGREaXNwbGF5RmlsZVNhdmVkQ29uZmlybWF0aW9uID0gdHJ1ZTtcblxuICAgIHBpY3R1cmVUb0Nyb3A6IEV2ZW50O1xuICAgIGNyb3BwZWRQaWN0dXJlQXNCYXNlNjRVcmw6IHN0cmluZztcbiAgICBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgY3VycmVudExhbmd1YWdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xTZXJ2aWNlOiBHcm93bEJyb2tlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogTXVsdGlVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpY3Rpb25hcnlTZXJ2aWNlOiBTZGtEaWN0aW9uYXJ5U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZVN1YnNjcmlwdGlvbiA9IHRoaXMuZGljdGlvbmFyeVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRDdXJyZW50TGFuZ3VhZ2VDb2RlKClcbiAgICAgICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGxhbmd1YWdlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25QaWN0dXJlU2VsZWN0aW9uKGltZ0V2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZnJlc2hFcnJvcnMoW1tdLCB0cnVlXSk7XG4gICAgICAgIHRoaXMucGljdHVyZVRvQ3JvcCA9IGltZ0V2ZW50O1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uUGljdHVyZVNlbGVjdGlvbkZhaWxlZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICBjb2RlOiAnTG9hZGluZ0ZhaWx1cmUnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYyhcbiAgICAgICAgICAgICAgICAgICAgJ2ZvZWhuLXBpY3R1cmUtdXBsb2FkLmxvYWRpbmctZmFpbHVyZS1sYWJlbCdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbZXJyb3JzLCB0cnVlXSk7XG4gICAgICAgIHRoaXMucmVzZXRQaWN0dXJlU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgb25JbWFnZUNyb3BwZWQoY3JvcHBlZEV2ZW50OiBJbWFnZUNyb3BwZWRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyb3BwZWRQaWN0dXJlQXNCYXNlNjRVcmwgPSBjcm9wcGVkRXZlbnQuYmFzZTY0O1xuICAgIH1cblxuICAgIHJlc2V0UGljdHVyZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcm9wcGVkUGljdHVyZUFzQmFzZTY0VXJsID0gbnVsbDtcbiAgICAgICAgdGhpcy5waWN0dXJlVG9Dcm9wID0gbnVsbDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2F2ZVBpY3R1cmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgICBjb25zdCBwaG90byA9IGNvbnZlcnRCYXNlNjRVcmxUb0ZpbGUoXG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRQaWN0dXJlQXNCYXNlNjRVcmwsXG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRQaWN0dXJlRmlsZW5hbWVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2VcbiAgICAgICAgICAgIC51cGxvYWREb2N1bWVudHMoXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsLFxuICAgICAgICAgICAgICAgIFtwaG90b10sXG4gICAgICAgICAgICAgICAgdGhpcy5rZXksXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5RmlsZVNhdmVkQ29uZmlybWF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIocmVzdWx0ID0+ICEhcmVzdWx0KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgZG9jdW1lbnRzLCBlcnJvcnMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRQaWN0dXJlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEhZG9jdW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBkb2N1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbW10sIHRydWVdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbZXJyb3JzLCB0cnVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlRmlsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlXG4gICAgICAgICAgICAuZGVsZXRlRG9jdW1lbnQodGhpcy5iYXNlVXJsLCB0aGlzLm1vZGVsWzBdKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRQaWN0dXJlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREb3dubG9hZFVybCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZXJ2aWNlLmdldERvd25sb2FkVXJsKHRoaXMuYmFzZVVybCwgdGhpcy5tb2RlbFswXSk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc1BpY3R1cmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwubGVuZ3RoICYmICEhdGhpcy5tb2RlbFswXS5yZWZlcmVuY2U7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZWZyZXNoRXJyb3JzKHJlc3VsdHM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVycm9yczogRXJyb3JUZW1wbGF0ZVtdID0gcmVzdWx0c1swXTtcblxuICAgICAgICBjb25zdCBpc0luU2VsZWN0aW9uTW9kZSA9XG4gICAgICAgICAgICAhdGhpcy5oYXNQaWN0dXJlICYmICEhdGhpcy5jcm9wcGVkUGljdHVyZUFzQmFzZTY0VXJsO1xuICAgICAgICBpZiAoaXNJblNlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdE51bGxFcnJvciA9IGVycm9ycy5maW5kKFxuICAgICAgICAgICAgICAgIGUgPT4gZS5uYW1lID09PSB0aGlzLm5hbWUgJiYgZS5jb2RlID09PSAnTm90RW1wdHknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG5vdE51bGxFcnJvcikge1xuICAgICAgICAgICAgICAgIG5vdE51bGxFcnJvci5tZXNzYWdlID0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXRLZXlTeW5jKFxuICAgICAgICAgICAgICAgICAgICAnZm9laG4tcGljdHVyZS11cGxvYWQuc2VsZWN0aW9uLW5vdC12YWxpZGF0ZWQtbGFiZWwnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLnJlZnJlc2hFcnJvcnMocmVzdWx0cyk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoJ0NvbnRhaW5lcicpXCJcbiAgICBbY2xhc3MuaGFzLWRhbmdlcl09XCJoYXNFcnJvcnMoKVwiXG4gICAgW2NsYXNzLnZkLWZvcm0tZ3JvdXAtZGFuZ2VyXT1cImhhc0Vycm9ycygpXCJcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXAgY2xlYXJhYmxlLWlucHV0LWZvcm0tZ3JvdXBcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuPlxuICAgIDxsYWJlbFxuICAgICAgICBbYXR0ci5mb3JdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICAqbmdJZj1cIiEhbGFiZWxcIlxuICAgICAgICBbbmdDbGFzc109XCJpc0xhYmVsU3JPbmx5ID8gJ3NyLW9ubHknIDogbGFiZWxTdHlsZU1vZGlmaWVyXCJcbiAgICA+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibGFiZWxcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFyZXF1aXJlZCAmJiAhaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbFwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyAnZm9laG4taW5wdXQub3B0aW9uYWwnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8Zm9laG4tdmFsaWRhdGlvbi1hbGVydHMgW2NvbXBvbmVudF09XCJ0aGlzXCI+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgIDxzbWFsbFxuICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBbbmFtZV09XCJuYW1lIHx8IGxhYmVsXCIgW25nTW9kZWxdPVwibW9kZWxcIiAvPlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiAqbmdJZj1cImhhc1BpY3R1cmVcIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBbaWRdPVwiYnVpbGRDaGlsZElkKCdQaWN0dXJlJylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFsdF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJnZXREb3dubG9hZFVybCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIHctMTAwXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoJ0RlbGV0ZUJ1dHRvbicpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAnZm9laG4tcGljdHVyZS11cGxvYWQuZGVsZXRlLXBpY3R1cmUtbGFiZWwnIHwgZnJvbURpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFoYXNQaWN0dXJlICYmICFjcm9wcGVkUGljdHVyZUFzQmFzZTY0VXJsXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2lucHV0RmlsZVxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZmlsZSBkLW5vbmVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwibmFtZVwiXG4gICAgICAgICAgICBbYXR0ci5hY2NlcHRdPVwiJy5qcGVnLC5qcGcsLnBuZydcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBpY3R1cmVTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBteS0yXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgnQ2hvb3NlQnV0dG9uJylcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpIHx8IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJidWlsZElkKCdFcnJvcnNDb250YWluZXInKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaW5wdXRGaWxlLmNsaWNrKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyAnZm9laG4tcGljdHVyZS11cGxvYWQuY2hvb3NlLWJ1dHRvbi1sYWJlbCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgIHt7ICdmb2Vobi1waWN0dXJlLXVwbG9hZC5sb2FkaW5nLWxhYmVsJyB8IGZyb21EaWN0aW9uYXJ5IH19XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWhhc1BpY3R1cmVcIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxpbWFnZS1jcm9wcGVyXG4gICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkQ2hpbGRJZCgnQ3JvcHBlcicpXCJcbiAgICAgICAgICAgICAgICAoY3JvcHBlclJlYWR5KT1cImxvYWRpbmcgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJvbkltYWdlQ3JvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobG9hZEltYWdlRmFpbGVkKT1cIm9uUGljdHVyZVNlbGVjdGlvbkZhaWxlZCgpXCJcbiAgICAgICAgICAgICAgICBbYXNwZWN0UmF0aW9dPVwiMyAvIDRcIlxuICAgICAgICAgICAgICAgIFtpbWFnZUNoYW5nZWRFdmVudF09XCJwaWN0dXJlVG9Dcm9wXCJcbiAgICAgICAgICAgICAgICBbbWFpbnRhaW5Bc3BlY3RSYXRpb109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcmVzaXplVG9XaWR0aF09XCJyZXNpemVUb1dpZHRoXCJcbiAgICAgICAgICAgICAgICBbcmVzaXplVG9IZWlnaHRdPVwicmVzaXplVG9IZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtvbmx5U2NhbGVEb3duXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIGZvcm1hdD1cInBuZ1wiXG4gICAgICAgICAgICA+PC9pbWFnZS1jcm9wcGVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhhc1BpY3R1cmVcIiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3JvcHBlZFBpY3R1cmVBc0Jhc2U2NFVybFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgnU2F2ZUJ1dHRvbicpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVQaWN0dXJlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb2Vobi1waWN0dXJlLXVwbG9hZC52YWxpZGF0ZS1zZWxlY3Rpb24tbGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNyb3BwZWRQaWN0dXJlQXNCYXNlNjRVcmxcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSB3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgnQ2FuY2VsQnV0dG9uJylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRQaWN0dXJlU2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb2Vobi1waWN0dXJlLXVwbG9hZC5jYW5jZWwtc2VsZWN0aW9uLWxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnJvbURpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tcGljdHVyZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLXVwbG9hZC9mb2Vobi1waWN0dXJlLXVwbG9hZC9mb2Vobi1waWN0dXJlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tdXBsb2FkL2ZvZWhuLXBpY3R1cmUtdXBsb2FkL2ZvZWhuLXBpY3R1cmUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7QUFROUUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFjLEVBQUUsUUFBZ0IsRUFBUSxFQUFFO0lBQzFELDhEQUE4RDtJQUM5RCxNQUFNLElBQUksR0FBUSxRQUFRLENBQUM7SUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7SUFDckIsT0FBTyxJQUFZLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxzQkFBc0IsR0FBRyxDQUMzQix1QkFBK0IsRUFDL0IsUUFBZ0IsRUFDWixFQUFFO0lBQ04sTUFBTSxHQUFHLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxD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QUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO1lBQzFELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixpRENsREwsbWdKQXNJQTsyRkRsRmEsMkJBQTJCO2tCQVh2QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSx1Q0FBdUM7b0JBQ3BELFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7aUJBQ0o7NktBS0csSUFBSTtzQkFESCxLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlOLGtDQUFrQztzQkFEakMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb2VobklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERvY3VtZW50UmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vZm9laG4tdXBsb2FkL2RvY3VtZW50LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBHcm93bEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi1ncm93bC9ncm93bC1icm9rZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNdWx0aVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9mb2Vobi11cGxvYWQvZm9laG4tbXVsdGktdXBsb2FkL211bHRpLXVwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFNka0RpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2RrLWRpY3Rpb25hcnkvc2RrLWRpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vZXJyb3ItdGVtcGxhdGUnO1xuaW1wb3J0IHsgSW1hZ2VDcm9wcGVkRXZlbnQgfSBmcm9tICduZ3gtaW1hZ2UtY3JvcHBlcic7XG5cbmNvbnN0IGJsb2JUb0ZpbGUgPSAoYmxvYkRhdGE6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpOiBGaWxlID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGJsb2I6IGFueSA9IGJsb2JEYXRhO1xuICAgIGJsb2IubmFtZSA9IGZpbGVOYW1lO1xuICAgIHJldHVybiBibG9iIGFzIEZpbGU7XG59O1xuXG5jb25zdCBjb252ZXJ0QmFzZTY0VXJsVG9GaWxlID0gKFxuICAgIGNyb3BwZWRJbWFnZWFzQmFzZTY0VXJsOiBzdHJpbmcsXG4gICAgZmlsZW5hbWU6IHN0cmluZ1xuKTogRmlsZSA9PiB7XG4gICAgY29uc3QgYXJyID0gY3JvcHBlZEltYWdlYXNCYXNlNjRVcmwuc3BsaXQoJywnKTtcbiAgICBjb25zdCBtaW1lID0gYXJyWzBdLm1hdGNoKC86KC4qPyk7LylbMV07XG4gICAgY29uc3QgYnN0ciA9IGF0b2IoYXJyWzFdKTtcbiAgICBsZXQgbiA9IGJzdHIubGVuZ3RoO1xuICAgIGNvbnN0IHU4YXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgd2hpbGUgKG4tLSkge1xuICAgICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcbiAgICB9XG5cbiAgICBpZiAoIW5hdmlnYXRvci5tc1NhdmVCbG9iKSB7XG4gICAgICAgIC8vIGRldGVjdCBpZiBub3QgRWRnZVxuICAgICAgICByZXR1cm4gbmV3IEZpbGUoW3U4YXJyXSwgZmlsZW5hbWUsIHsgdHlwZTogbWltZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFZGdlIHN1cHBvcnQgdGhlIEZpbGVBUEkgYnV0IG5vdCB0aGUgRmlsZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgcmV0dXJuIGJsb2JUb0ZpbGUobmV3IEJsb2IoW3U4YXJyXSwgeyB0eXBlOiBtaW1lIH0pLCBmaWxlbmFtZSk7XG4gICAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmb2Vobi1waWN0dXJlLXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLXBpY3R1cmUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRm9laG5JbnB1dENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvZWhuUGljdHVyZVVwbG9hZENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb2VoblBpY3R1cmVVcGxvYWRDb21wb25lbnRcbiAgICBleHRlbmRzIEZvZWhuSW5wdXRDb21wb25lbnQ8RG9jdW1lbnRSZWZlcmVuY2VbXT5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KClcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIGtleTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBsYWJlbDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBiYXNlVXJsID0gJ2FwaS9kb2N1bWVudCc7XG5cbiAgICBASW5wdXQoKVxuICAgIGNyb3BwZWRQaWN0dXJlRmlsZW5hbWUgPSAncGhvdG8ucG5nJztcblxuICAgIEBJbnB1dCgpXG4gICAgcmVzaXplVG9XaWR0aCA9IDMwMDtcblxuICAgIEBJbnB1dCgpXG4gICAgcmVzaXplVG9IZWlnaHQgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBzaG91bGREaXNwbGF5RmlsZVNhdmVkQ29uZmlybWF0aW9uID0gdHJ1ZTtcblxuICAgIHBpY3R1cmVUb0Nyb3A6IEV2ZW50O1xuICAgIGNyb3BwZWRQaWN0dXJlQXNCYXNlNjRVcmw6IHN0cmluZztcbiAgICBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgY3VycmVudExhbmd1YWdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xTZXJ2aWNlOiBHcm93bEJyb2tlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogTXVsdGlVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpY3Rpb25hcnlTZXJ2aWNlOiBTZGtEaWN0aW9uYXJ5U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZVN1YnNjcmlwdGlvbiA9IHRoaXMuZGljdGlvbmFyeVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRDdXJyZW50TGFuZ3VhZ2VDb2RlKClcbiAgICAgICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGxhbmd1YWdlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25QaWN0dXJlU2VsZWN0aW9uKGltZ0V2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZnJlc2hFcnJvcnMoW1tdLCB0cnVlXSk7XG4gICAgICAgIHRoaXMucGljdHVyZVRvQ3JvcCA9IGltZ0V2ZW50O1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uUGljdHVyZVNlbGVjdGlvbkZhaWxlZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICBjb2RlOiAnTG9hZGluZ0ZhaWx1cmUnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYyhcbiAgICAgICAgICAgICAgICAgICAgJ2ZvZWhuLXBpY3R1cmUtdXBsb2FkLmxvYWRpbmctZmFpbHVyZS1sYWJlbCdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbZXJyb3JzLCB0cnVlXSk7XG4gICAgICAgIHRoaXMucmVzZXRQaWN0dXJlU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgb25JbWFnZUNyb3BwZWQoY3JvcHBlZEV2ZW50OiBJbWFnZUNyb3BwZWRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyb3BwZWRQaWN0dXJlQXNCYXNlNjRVcmwgPSBjcm9wcGVkRXZlbnQuYmFzZTY0O1xuICAgIH1cblxuICAgIHJlc2V0UGljdHVyZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcm9wcGVkUGljdHVyZUFzQmFzZTY0VXJsID0gbnVsbDtcbiAgICAgICAgdGhpcy5waWN0dXJlVG9Dcm9wID0gbnVsbDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2F2ZVBpY3R1cmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgICBjb25zdCBwaG90byA9IGNvbnZlcnRCYXNlNjRVcmxUb0ZpbGUoXG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRQaWN0dXJlQXNCYXNlNjRVcmwsXG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRQaWN0dXJlRmlsZW5hbWVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2VcbiAgICAgICAgICAgIC51cGxvYWREb2N1bWVudHMoXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsLFxuICAgICAgICAgICAgICAgIFtwaG90b10sXG4gICAgICAgICAgICAgICAgdGhpcy5rZXksXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5RmlsZVNhdmVkQ29uZmlybWF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIocmVzdWx0ID0+ICEhcmVzdWx0KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgZG9jdW1lbnRzLCBlcnJvcnMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRQaWN0dXJlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEhZG9jdW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBkb2N1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbW10sIHRydWVdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEVycm9ycyhbZXJyb3JzLCB0cnVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlRmlsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlXG4gICAgICAgICAgICAuZGVsZXRlRG9jdW1lbnQodGhpcy5iYXNlVXJsLCB0aGlzLm1vZGVsWzBdKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRQaWN0dXJlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREb3dubG9hZFVybCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZXJ2aWNlLmdldERvd25sb2FkVXJsKHRoaXMuYmFzZVVybCwgdGhpcy5tb2RlbFswXSk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc1BpY3R1cmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwubGVuZ3RoICYmICEhdGhpcy5tb2RlbFswXS5yZWZlcmVuY2U7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZWZyZXNoRXJyb3JzKHJlc3VsdHM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVycm9yczogRXJyb3JUZW1wbGF0ZVtdID0gcmVzdWx0c1swXTtcblxuICAgICAgICBjb25zdCBpc0luU2VsZWN0aW9uTW9kZSA9XG4gICAgICAgICAgICAhdGhpcy5oYXNQaWN0dXJlICYmICEhdGhpcy5jcm9wcGVkUGljdHVyZUFzQmFzZTY0VXJsO1xuICAgICAgICBpZiAoaXNJblNlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdE51bGxFcnJvciA9IGVycm9ycy5maW5kKFxuICAgICAgICAgICAgICAgIGUgPT4gZS5uYW1lID09PSB0aGlzLm5hbWUgJiYgZS5jb2RlID09PSAnTm90RW1wdHknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG5vdE51bGxFcnJvcikge1xuICAgICAgICAgICAgICAgIG5vdE51bGxFcnJvci5tZXNzYWdlID0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXRLZXlTeW5jKFxuICAgICAgICAgICAgICAgICAgICAnZm9laG4tcGljdHVyZS11cGxvYWQuc2VsZWN0aW9uLW5vdC12YWxpZGF0ZWQtbGFiZWwnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLnJlZnJlc2hFcnJvcnMocmVzdWx0cyk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoJ0NvbnRhaW5lcicpXCJcbiAgICBbY2xhc3MuaGFzLWRhbmdlcl09XCJoYXNFcnJvcnMoKVwiXG4gICAgW2NsYXNzLnZkLWZvcm0tZ3JvdXAtZGFuZ2VyXT1cImhhc0Vycm9ycygpXCJcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXAgY2xlYXJhYmxlLWlucHV0LWZvcm0tZ3JvdXBcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuPlxuICAgIDxsYWJlbFxuICAgICAgICBbYXR0ci5mb3JdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICAqbmdJZj1cIiEhbGFiZWxcIlxuICAgICAgICBbbmdDbGFzc109XCJpc0xhYmVsU3JPbmx5ID8gJ3NyLW9ubHknIDogbGFiZWxTdHlsZU1vZGlmaWVyXCJcbiAgICA+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibGFiZWxcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFyZXF1aXJlZCAmJiAhaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbFwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyAnZm9laG4taW5wdXQub3B0aW9uYWwnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8Zm9laG4tdmFsaWRhdGlvbi1hbGVydHMgW2NvbXBvbmVudF09XCJ0aGlzXCI+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgIDxzbWFsbFxuICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBbbmFtZV09XCJuYW1lIHx8IGxhYmVsXCIgW25nTW9kZWxdPVwibW9kZWxcIiAvPlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiAqbmdJZj1cImhhc1BpY3R1cmVcIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBbaWRdPVwiYnVpbGRDaGlsZElkKCdQaWN0dXJlJylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFsdF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJnZXREb3dubG9hZFVybCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIHctMTAwXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoJ0RlbGV0ZUJ1dHRvbicpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAnZm9laG4tcGljdHVyZS11cGxvYWQuZGVsZXRlLXBpY3R1cmUtbGFiZWwnIHwgZnJvbURpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFoYXNQaWN0dXJlICYmICFjcm9wcGVkUGljdHVyZUFzQmFzZTY0VXJsXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2lucHV0RmlsZVxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZmlsZSBkLW5vbmVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwibmFtZVwiXG4gICAgICAgICAgICBbYXR0ci5hY2NlcHRdPVwiJy5qcGVnLC5qcGcsLnBuZydcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBpY3R1cmVTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBteS0yXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkQ2hpbGRJZCgnQ2hvb3NlQnV0dG9uJylcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpIHx8IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJidWlsZElkKCdFcnJvcnNDb250YWluZXInKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaW5wdXRGaWxlLmNsaWNrKClcIlxuICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwibG9hZGluZyA/ICdkaXNhYmxlZCcgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgJ2ZvZWhuLXBpY3R1cmUtdXBsb2FkLmNob29zZS1idXR0b24tbGFiZWwnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICB7eyAnZm9laG4tcGljdHVyZS11cGxvYWQubG9hZGluZy1sYWJlbCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFoYXNQaWN0dXJlXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8aW1hZ2UtY3JvcHBlclxuICAgICAgICAgICAgICAgIFtpZF09XCJidWlsZENoaWxkSWQoJ0Nyb3BwZXInKVwiXG4gICAgICAgICAgICAgICAgKGNyb3BwZXJSZWFkeSk9XCJsb2FkaW5nID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIChpbWFnZUNyb3BwZWQpPVwib25JbWFnZUNyb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGxvYWRJbWFnZUZhaWxlZCk9XCJvblBpY3R1cmVTZWxlY3Rpb25GYWlsZWQoKVwiXG4gICAgICAgICAgICAgICAgW2FzcGVjdFJhdGlvXT1cIjMgLyA0XCJcbiAgICAgICAgICAgICAgICBbaW1hZ2VDaGFuZ2VkRXZlbnRdPVwicGljdHVyZVRvQ3JvcFwiXG4gICAgICAgICAgICAgICAgW21haW50YWluQXNwZWN0UmF0aW9dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Jlc2l6ZVRvV2lkdGhdPVwicmVzaXplVG9XaWR0aFwiXG4gICAgICAgICAgICAgICAgW3Jlc2l6ZVRvSGVpZ2h0XT1cInJlc2l6ZVRvSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbb25seVNjYWxlRG93bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBmb3JtYXQ9XCJwbmdcIlxuICAgICAgICAgICAgPjwvaW1hZ2UtY3JvcHBlcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFoYXNQaWN0dXJlXCIgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNyb3BwZWRQaWN0dXJlQXNCYXNlNjRVcmxcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoJ1NhdmVCdXR0b24nKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlUGljdHVyZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9laG4tcGljdHVyZS11cGxvYWQudmFsaWRhdGUtc2VsZWN0aW9uLWxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnJvbURpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcm9wcGVkUGljdHVyZUFzQmFzZTY0VXJsXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoJ0NhbmNlbEJ1dHRvbicpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0UGljdHVyZVNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9laG4tcGljdHVyZS11cGxvYWQuY2FuY2VsLXNlbGVjdGlvbi1sYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZyb21EaWN0aW9uYXJ5XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|