@skyux/lookup 7.21.2 → 7.21.4
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/documentation.json +800 -800
- package/esm2020/lib/modules/autocomplete/autocomplete.component.mjs +73 -64
- package/esm2020/testing/country-field/country-field-fixture.mjs +2 -1
- package/fesm2015/skyux-lookup-testing.mjs +1 -0
- package/fesm2015/skyux-lookup-testing.mjs.map +1 -1
- package/fesm2015/skyux-lookup.mjs +72 -63
- package/fesm2015/skyux-lookup.mjs.map +1 -1
- package/fesm2020/skyux-lookup-testing.mjs +1 -0
- package/fesm2020/skyux-lookup-testing.mjs.map +1 -1
- package/fesm2020/skyux-lookup.mjs +72 -63
- package/fesm2020/skyux-lookup.mjs.map +1 -1
- package/package.json +10 -10
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _SkyAutocompleteComponent_instances, _SkyAutocompleteComponent_activeElementIndex, _SkyAutocompleteComponent_adapterService, _SkyAutocompleteComponent_affixer, _SkyAutocompleteComponent_affixService, _SkyAutocompleteComponent_changeDetector, _SkyAutocompleteComponent_elementRef, _SkyAutocompleteComponent_inputBoxHostSvc, _SkyAutocompleteComponent_inputDirectiveUnsubscribe, _SkyAutocompleteComponent_messageStreamSub, _SkyAutocompleteComponent_ngUnsubscribe, _SkyAutocompleteComponent_overlay, _SkyAutocompleteComponent_overlayService, _SkyAutocompleteComponent_overlayFocusableElements, _SkyAutocompleteComponent_currentSearchSub, _SkyAutocompleteComponent_zIndex, _SkyAutocompleteComponent__data, _SkyAutocompleteComponent__debounceTime, _SkyAutocompleteComponent__descriptorProperty, _SkyAutocompleteComponent__highlightText, _SkyAutocompleteComponent__inputDirective, _SkyAutocompleteComponent__messageStream, _SkyAutocompleteComponent__propertiesToSearch, _SkyAutocompleteComponent__resultsRef, _SkyAutocompleteComponent__search, _SkyAutocompleteComponent__searchFilters, _SkyAutocompleteComponent__searchResults, _SkyAutocompleteComponent__searchResultsLimit, _SkyAutocompleteComponent__searchTextMinimumCharacters, _SkyAutocompleteComponent_searchTextChanged, _SkyAutocompleteComponent_performSearch, _SkyAutocompleteComponent_cancelCurrentSearch, _SkyAutocompleteComponent_getHighlightText, _SkyAutocompleteComponent_selectSearchResultById, _SkyAutocompleteComponent_openDropdown, _SkyAutocompleteComponent_closeDropdown, _SkyAutocompleteComponent_setActiveDescendant, _SkyAutocompleteComponent_removeActiveDescendant, _SkyAutocompleteComponent_updateAriaOwns, _SkyAutocompleteComponent_resetSearch, _SkyAutocompleteComponent_addInputEventListeners, _SkyAutocompleteComponent_destroyOverlay, _SkyAutocompleteComponent_createAffixer, _SkyAutocompleteComponent_destroyAffixer, _SkyAutocompleteComponent_initMessageStream, _SkyAutocompleteComponent_initOverlayFocusableElements, _SkyAutocompleteComponent_getActiveElement, _SkyAutocompleteComponent_removeFocusedClass, _SkyAutocompleteComponent_addFocusedClass, _SkyAutocompleteComponent_updateDefaultSearchOptions;
|
|
1
|
+
var _SkyAutocompleteComponent_instances, _SkyAutocompleteComponent_activeElementIndex, _SkyAutocompleteComponent_adapterService, _SkyAutocompleteComponent_affixer, _SkyAutocompleteComponent_affixService, _SkyAutocompleteComponent_changeDetector, _SkyAutocompleteComponent_elementRef, _SkyAutocompleteComponent_hasFocus, _SkyAutocompleteComponent_inputBoxHostSvc, _SkyAutocompleteComponent_inputDirectiveUnsubscribe, _SkyAutocompleteComponent_messageStreamSub, _SkyAutocompleteComponent_ngUnsubscribe, _SkyAutocompleteComponent_overlay, _SkyAutocompleteComponent_overlayService, _SkyAutocompleteComponent_overlayFocusableElements, _SkyAutocompleteComponent_currentSearchSub, _SkyAutocompleteComponent_zIndex, _SkyAutocompleteComponent__data, _SkyAutocompleteComponent__debounceTime, _SkyAutocompleteComponent__descriptorProperty, _SkyAutocompleteComponent__highlightText, _SkyAutocompleteComponent__inputDirective, _SkyAutocompleteComponent__messageStream, _SkyAutocompleteComponent__propertiesToSearch, _SkyAutocompleteComponent__resultsRef, _SkyAutocompleteComponent__search, _SkyAutocompleteComponent__searchFilters, _SkyAutocompleteComponent__searchResults, _SkyAutocompleteComponent__searchResultsLimit, _SkyAutocompleteComponent__searchTextMinimumCharacters, _SkyAutocompleteComponent_searchTextChanged, _SkyAutocompleteComponent_performSearch, _SkyAutocompleteComponent_cancelCurrentSearch, _SkyAutocompleteComponent_getHighlightText, _SkyAutocompleteComponent_selectSearchResultById, _SkyAutocompleteComponent_openDropdown, _SkyAutocompleteComponent_closeDropdown, _SkyAutocompleteComponent_setActiveDescendant, _SkyAutocompleteComponent_removeActiveDescendant, _SkyAutocompleteComponent_updateAriaOwns, _SkyAutocompleteComponent_resetSearch, _SkyAutocompleteComponent_addInputEventListeners, _SkyAutocompleteComponent_destroyOverlay, _SkyAutocompleteComponent_createAffixer, _SkyAutocompleteComponent_destroyAffixer, _SkyAutocompleteComponent_initMessageStream, _SkyAutocompleteComponent_initOverlayFocusableElements, _SkyAutocompleteComponent_getActiveElement, _SkyAutocompleteComponent_removeFocusedClass, _SkyAutocompleteComponent_addFocusedClass, _SkyAutocompleteComponent_updateDefaultSearchOptions;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
3
|
import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, Inject, Input, Optional, Output, TemplateRef, ViewChild, } from '@angular/core';
|
|
4
4
|
import { SKY_STACKING_CONTEXT, SkyAffixAutoFitContext, } from '@skyux/core';
|
|
@@ -71,6 +71,7 @@ export class SkyAutocompleteComponent {
|
|
|
71
71
|
_SkyAutocompleteComponent_affixService.set(this, void 0);
|
|
72
72
|
_SkyAutocompleteComponent_changeDetector.set(this, void 0);
|
|
73
73
|
_SkyAutocompleteComponent_elementRef.set(this, void 0);
|
|
74
|
+
_SkyAutocompleteComponent_hasFocus.set(this, false);
|
|
74
75
|
_SkyAutocompleteComponent_inputBoxHostSvc.set(this, void 0);
|
|
75
76
|
_SkyAutocompleteComponent_inputDirectiveUnsubscribe.set(this, new Subject());
|
|
76
77
|
_SkyAutocompleteComponent_messageStreamSub.set(this, void 0);
|
|
@@ -270,11 +271,14 @@ export class SkyAutocompleteComponent {
|
|
|
270
271
|
.subscribe(() => {
|
|
271
272
|
directive.restoreInputTextValueToPreviousState();
|
|
272
273
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_closeDropdown).call(this);
|
|
274
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_cancelCurrentSearch).call(this);
|
|
273
275
|
directive.onTouched();
|
|
276
|
+
__classPrivateFieldSet(this, _SkyAutocompleteComponent_hasFocus, false, "f");
|
|
274
277
|
});
|
|
275
278
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent__inputDirective, "f").focus
|
|
276
279
|
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyAutocompleteComponent_inputDirectiveUnsubscribe, "f")))
|
|
277
280
|
.subscribe(() => {
|
|
281
|
+
__classPrivateFieldSet(this, _SkyAutocompleteComponent_hasFocus, true, "f");
|
|
278
282
|
if (this.showActionsArea) {
|
|
279
283
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_openDropdown).call(this);
|
|
280
284
|
}
|
|
@@ -417,77 +421,82 @@ export class SkyAutocompleteComponent {
|
|
|
417
421
|
return ref === __classPrivateFieldGet(this, _SkyAutocompleteComponent_overlayFocusableElements, "f")[__classPrivateFieldGet(this, _SkyAutocompleteComponent_activeElementIndex, "f")];
|
|
418
422
|
}
|
|
419
423
|
}
|
|
420
|
-
_SkyAutocompleteComponent_activeElementIndex = new WeakMap(), _SkyAutocompleteComponent_adapterService = new WeakMap(), _SkyAutocompleteComponent_affixer = new WeakMap(), _SkyAutocompleteComponent_affixService = new WeakMap(), _SkyAutocompleteComponent_changeDetector = new WeakMap(), _SkyAutocompleteComponent_elementRef = new WeakMap(), _SkyAutocompleteComponent_inputBoxHostSvc = new WeakMap(), _SkyAutocompleteComponent_inputDirectiveUnsubscribe = new WeakMap(), _SkyAutocompleteComponent_messageStreamSub = new WeakMap(), _SkyAutocompleteComponent_ngUnsubscribe = new WeakMap(), _SkyAutocompleteComponent_overlay = new WeakMap(), _SkyAutocompleteComponent_overlayService = new WeakMap(), _SkyAutocompleteComponent_overlayFocusableElements = new WeakMap(), _SkyAutocompleteComponent_currentSearchSub = new WeakMap(), _SkyAutocompleteComponent_zIndex = new WeakMap(), _SkyAutocompleteComponent__data = new WeakMap(), _SkyAutocompleteComponent__debounceTime = new WeakMap(), _SkyAutocompleteComponent__descriptorProperty = new WeakMap(), _SkyAutocompleteComponent__highlightText = new WeakMap(), _SkyAutocompleteComponent__inputDirective = new WeakMap(), _SkyAutocompleteComponent__messageStream = new WeakMap(), _SkyAutocompleteComponent__propertiesToSearch = new WeakMap(), _SkyAutocompleteComponent__resultsRef = new WeakMap(), _SkyAutocompleteComponent__search = new WeakMap(), _SkyAutocompleteComponent__searchFilters = new WeakMap(), _SkyAutocompleteComponent__searchResults = new WeakMap(), _SkyAutocompleteComponent__searchResultsLimit = new WeakMap(), _SkyAutocompleteComponent__searchTextMinimumCharacters = new WeakMap(), _SkyAutocompleteComponent_instances = new WeakSet(), _SkyAutocompleteComponent_searchTextChanged = function _SkyAutocompleteComponent_searchTextChanged(searchText) {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
this.inputDirective.value
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
else {
|
|
435
|
-
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_resetSearch).call(this);
|
|
436
|
-
}
|
|
437
|
-
this.isSearchingAsync = false;
|
|
438
|
-
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").markForCheck();
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
const isLongEnough = searchText.length >= this.searchTextMinimumCharacters;
|
|
442
|
-
const isDifferent = searchText !== this.searchText;
|
|
443
|
-
this.searchText = searchText.trim();
|
|
444
|
-
if (isLongEnough && isDifferent) {
|
|
445
|
-
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_cancelCurrentSearch).call(this);
|
|
446
|
-
__classPrivateFieldSet(this, _SkyAutocompleteComponent_currentSearchSub, __classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_performSearch).call(this)
|
|
447
|
-
.pipe(take(1))
|
|
448
|
-
.subscribe((result) => {
|
|
449
|
-
const items = result?.items.filter((item) => {
|
|
450
|
-
return item && this.descriptorProperty in item;
|
|
451
|
-
});
|
|
452
|
-
this.isSearchingAsync = false;
|
|
453
|
-
this.searchResults =
|
|
454
|
-
items?.map((r, i) => {
|
|
455
|
-
const result = {
|
|
456
|
-
elementId: `${this.resultsListId}-item-${i}`,
|
|
457
|
-
data: r,
|
|
458
|
-
};
|
|
459
|
-
return result;
|
|
460
|
-
}) || [];
|
|
461
|
-
this.searchResultsCount = result?.totalCount || 0;
|
|
462
|
-
this.highlightText = __classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_getHighlightText).call(this, this.searchText);
|
|
463
|
-
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_removeFocusedClass).call(this);
|
|
464
|
-
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_removeActiveDescendant).call(this);
|
|
465
|
-
if (this.searchResults.length > 0) {
|
|
466
|
-
__classPrivateFieldSet(this, _SkyAutocompleteComponent_activeElementIndex, 0, "f");
|
|
424
|
+
_SkyAutocompleteComponent_activeElementIndex = new WeakMap(), _SkyAutocompleteComponent_adapterService = new WeakMap(), _SkyAutocompleteComponent_affixer = new WeakMap(), _SkyAutocompleteComponent_affixService = new WeakMap(), _SkyAutocompleteComponent_changeDetector = new WeakMap(), _SkyAutocompleteComponent_elementRef = new WeakMap(), _SkyAutocompleteComponent_hasFocus = new WeakMap(), _SkyAutocompleteComponent_inputBoxHostSvc = new WeakMap(), _SkyAutocompleteComponent_inputDirectiveUnsubscribe = new WeakMap(), _SkyAutocompleteComponent_messageStreamSub = new WeakMap(), _SkyAutocompleteComponent_ngUnsubscribe = new WeakMap(), _SkyAutocompleteComponent_overlay = new WeakMap(), _SkyAutocompleteComponent_overlayService = new WeakMap(), _SkyAutocompleteComponent_overlayFocusableElements = new WeakMap(), _SkyAutocompleteComponent_currentSearchSub = new WeakMap(), _SkyAutocompleteComponent_zIndex = new WeakMap(), _SkyAutocompleteComponent__data = new WeakMap(), _SkyAutocompleteComponent__debounceTime = new WeakMap(), _SkyAutocompleteComponent__descriptorProperty = new WeakMap(), _SkyAutocompleteComponent__highlightText = new WeakMap(), _SkyAutocompleteComponent__inputDirective = new WeakMap(), _SkyAutocompleteComponent__messageStream = new WeakMap(), _SkyAutocompleteComponent__propertiesToSearch = new WeakMap(), _SkyAutocompleteComponent__resultsRef = new WeakMap(), _SkyAutocompleteComponent__search = new WeakMap(), _SkyAutocompleteComponent__searchFilters = new WeakMap(), _SkyAutocompleteComponent__searchResults = new WeakMap(), _SkyAutocompleteComponent__searchResultsLimit = new WeakMap(), _SkyAutocompleteComponent__searchTextMinimumCharacters = new WeakMap(), _SkyAutocompleteComponent_instances = new WeakSet(), _SkyAutocompleteComponent_searchTextChanged = function _SkyAutocompleteComponent_searchTextChanged(searchText) {
|
|
425
|
+
if (__classPrivateFieldGet(this, _SkyAutocompleteComponent_hasFocus, "f")) {
|
|
426
|
+
const isEmpty = !searchText || !searchText.trim() || searchText.match(/^\s+$/);
|
|
427
|
+
if (isEmpty) {
|
|
428
|
+
// Emit selectionChange if value has been cleared.
|
|
429
|
+
/* istanbul ignore else */
|
|
430
|
+
if (this.inputDirective && this.inputDirective.value) {
|
|
431
|
+
this.inputDirective.value = undefined;
|
|
432
|
+
this.selectionChange.emit({
|
|
433
|
+
selectedItem: undefined,
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
if (!this.showActionsArea) {
|
|
437
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_closeDropdown).call(this);
|
|
467
438
|
}
|
|
468
439
|
else {
|
|
469
|
-
|
|
440
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_resetSearch).call(this);
|
|
470
441
|
}
|
|
442
|
+
this.isSearchingAsync = false;
|
|
471
443
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").markForCheck();
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
const isLongEnough = searchText.length >= this.searchTextMinimumCharacters;
|
|
447
|
+
const isDifferent = searchText !== this.searchText;
|
|
448
|
+
this.searchText = searchText.trim();
|
|
449
|
+
if (isLongEnough && isDifferent) {
|
|
450
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_cancelCurrentSearch).call(this);
|
|
451
|
+
__classPrivateFieldSet(this, _SkyAutocompleteComponent_currentSearchSub, __classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_performSearch).call(this)
|
|
452
|
+
.pipe(take(1))
|
|
453
|
+
.subscribe((result) => {
|
|
454
|
+
const items = result?.items.filter((item) => {
|
|
455
|
+
return item && this.descriptorProperty in item;
|
|
480
456
|
});
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
457
|
+
this.isSearchingAsync = false;
|
|
458
|
+
this.searchResults =
|
|
459
|
+
items?.map((r, i) => {
|
|
460
|
+
const result = {
|
|
461
|
+
elementId: `${this.resultsListId}-item-${i}`,
|
|
462
|
+
data: r,
|
|
463
|
+
};
|
|
464
|
+
return result;
|
|
465
|
+
}) || [];
|
|
466
|
+
this.searchResultsCount = result?.totalCount || 0;
|
|
467
|
+
this.highlightText = __classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_getHighlightText).call(this, this.searchText);
|
|
468
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_removeFocusedClass).call(this);
|
|
469
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_removeActiveDescendant).call(this);
|
|
470
|
+
if (this.searchResults.length > 0) {
|
|
471
|
+
__classPrivateFieldSet(this, _SkyAutocompleteComponent_activeElementIndex, 0, "f");
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
__classPrivateFieldSet(this, _SkyAutocompleteComponent_activeElementIndex, -1, "f");
|
|
475
|
+
}
|
|
484
476
|
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").markForCheck();
|
|
485
|
-
|
|
486
|
-
|
|
477
|
+
if (this.isOpen) {
|
|
478
|
+
// Let the results populate in the DOM before recalculating placement.
|
|
479
|
+
setTimeout(() => {
|
|
480
|
+
if (__classPrivateFieldGet(this, _SkyAutocompleteComponent_affixer, "f")) {
|
|
481
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_affixer, "f").reaffix();
|
|
482
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").detectChanges();
|
|
483
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_initOverlayFocusableElements).call(this);
|
|
484
|
+
}
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_instances, "m", _SkyAutocompleteComponent_openDropdown).call(this);
|
|
489
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").markForCheck();
|
|
490
|
+
}
|
|
491
|
+
}), "f");
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
this.isSearchingAsync = false;
|
|
495
|
+
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").markForCheck();
|
|
496
|
+
}
|
|
487
497
|
}
|
|
488
498
|
else {
|
|
489
499
|
this.isSearchingAsync = false;
|
|
490
|
-
__classPrivateFieldGet(this, _SkyAutocompleteComponent_changeDetector, "f").markForCheck();
|
|
491
500
|
}
|
|
492
501
|
}, _SkyAutocompleteComponent_performSearch = function _SkyAutocompleteComponent_performSearch() {
|
|
493
502
|
if (!this.searchAsyncDisabled && this.searchAsync.observers.length > 0) {
|
|
@@ -763,4 +772,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
|
|
|
763
772
|
read: ElementRef,
|
|
764
773
|
}]
|
|
765
774
|
}] } });
|
|
766
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEdBTXZCLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFFTCxPQUFPLEVBRVAsSUFBSSxFQUNKLFNBQVMsSUFBSSxtQkFBbUIsRUFDaEMsRUFBRSxHQUNILE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFlBQVksRUFDWixLQUFLLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0s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QVE7c0JBRGQsTUFBTTtnQkFRQSxhQUFhO3NCQURuQixNQUFNO2dCQU9BLGVBQWU7c0JBRHJCLE1BQU07Z0JBUUEsV0FBVztzQkFEakIsTUFBTTtnQkEwQ0ksY0FBYztzQkFEeEIsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBNkRwQyxrQkFBa0I7c0JBSHhCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUU7d0JBQy9CLElBQUksRUFBRSxXQUFXO3FCQUNsQjtnQkFNVSxVQUFVO3NCQUhwQixTQUFTO3VCQUFDLFlBQVksRUFBRTt3QkFDdkIsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU0tZX1NUQUNLSU5HX0NPTlRFWFQsXG4gIFNreUFmZml4QXV0b0ZpdENvbnRleHQsXG4gIFNreUFmZml4U2VydmljZSxcbiAgU2t5QWZmaXhlcixcbiAgU2t5T3ZlcmxheUluc3RhbmNlLFxuICBTa3lPdmVybGF5U2VydmljZSxcbiAgU2t5U3RhY2tpbmdDb250ZXh0LFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcblxuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBmcm9tLFxuICBmcm9tRXZlbnQgYXMgb2JzZXJ2YWJsZUZyb21FdmVudCxcbiAgb2YsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgbWFwLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVEaWFjcml0aWNzIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1sb29rdXAtc3RyaW5nLXV0aWxzJztcblxuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgc2t5QXV0b2NvbXBsZXRlRGVmYXVsdFNlYXJjaEZ1bmN0aW9uIH0gZnJvbSAnLi9hdXRvY29tcGxldGUtZGVmYXVsdC1zZWFyY2gtZnVuY3Rpb24nO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1tZXNzYWdlLXR5cGUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNBcmdzIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWFzeW5jLWFyZ3MnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNSZXN1bHQgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtYXN5bmMtcmVzdWx0JztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWZ1bmN0aW9uJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uRmlsdGVyIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWZ1bmN0aW9uLWZpbHRlcic7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWxlY3Rpb24tY2hhbmdlJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNob3dNb3JlQXJncyB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNob3ctbW9yZS1hcmdzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdCB7XG4gIGVsZW1lbnRJZDogc3RyaW5nO1xuICBkYXRhOiBhbnk7XG59XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1hdXRvY29tcGxldGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1NreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreUF1dG9jb21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vI3JlZ2lvbiBwdWJsaWNfYXBpXG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MIGVsZW1lbnQgSUQgb2YgdGhlIGVsZW1lbnQgdGhhdCBsYWJlbHNcbiAgICogdGhlIGF1dG9jb21wbGV0ZSB0ZXh0IGlucHV0LiBUaGlzIHNldHMgdGhlIGlucHV0J3MgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlIHRvIHByb3ZpZGUgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1sYWJlbGxlZGJ5KS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGljIGRhdGEgc291cmNlIGZvciB0aGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCB0byBzZWFyY2hcbiAgICogd2hlbiB1c2VycyBlbnRlciB0ZXh0LiBGb3IgYSBkeW5hbWljIGRhdGEgc291cmNlIHN1Y2ggYXMgYW4gYXJyYXkgdGhhdFxuICAgKiBjaGFuZ2VzIGR1ZSB0byBzZXJ2ZXIgY2FsbHMsIHVzZSBgc2VhcmNoYCBvciBgc2VhcmNoQXN5bmNgIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IGFueVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGEgPSB2YWx1ZSA/PyBbXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzZWFyY2hpbmcgd2hpbGUgdXNlcnNcbiAgICogZW50ZXIgdGV4dCBpbiB0aGUgYXV0b2NvbXBsZXRlIGZpZWxkLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRlYm91bmNlVGltZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RlYm91bmNlVGltZSA9IHZhbHVlID8/IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlYm91bmNlVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfZGVib3VuY2VUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgcHJvcGVydHkgdG8gZGlzcGxheSBpbiB0aGUgdGV4dCBpbnB1dCBhZnRlciB1c2Vyc1xuICAgKiBzZWxlY3QgYW4gaXRlbSBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQGRlZmF1bHQgXCJuYW1lXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVzY3JpcHRvclByb3BlcnR5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGVzY3JpcHRvclByb3BlcnR5ID0gdmFsdWUgfHwgJ25hbWUnO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXNjcmlwdG9yUHJvcGVydHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rlc2NyaXB0b3JQcm9wZXJ0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGEgYnV0dG9uIGluIHRoZSBkcm9wZG93biB0aGF0IG9wZW5zIGEgcGlja2VyIHdoZXJlIHVzZXJzIGNhbiB2aWV3IGFsbCBvcHRpb25zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGVuYWJsZVNob3dNb3JlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBvYnNlcnZhYmxlIG9mIGBTa3lBdXRvY29tcGxldGVNZXNzYWdlYCB0aGF0IGNhbiBjbG9zZSB0aGUgZHJvcGRvd24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZXNzYWdlU3RyZWFtKHZhbHVlOiBTdWJqZWN0PFNreUF1dG9jb21wbGV0ZU1lc3NhZ2U+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21lc3NhZ2VTdHJlYW0gPSB2YWx1ZSA/PyBuZXcgU3ViamVjdDxTa3lBdXRvY29tcGxldGVNZXNzYWdlPigpO1xuICAgIHRoaXMuI2luaXRNZXNzYWdlU3RyZWFtKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lc3NhZ2VTdHJlYW0oKTogU3ViamVjdDxTa3lBdXRvY29tcGxldGVNZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMuI19tZXNzYWdlU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHdyYXBwZXJDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHByb3BlcnRpZXMgdG8gc2VhcmNoLlxuICAgKiBAZGVmYXVsdCBbXCJuYW1lXCJdXG4gICAqIEBkZXByZWNhdGVkIFdlIHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIHRoaXMgcHJvcGVydHkuIFRvIHNlYXJjaCBzcGVjaWZpYyBwcm9wZXJ0aWVzLCB1c2UgdGhlIGBzZWFyY2hBc3luY2AgZXZlbnQgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcHJvcGVydGllc1RvU2VhcmNoKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19wcm9wZXJ0aWVzVG9TZWFyY2ggPSB2YWx1ZSA/PyBbJ25hbWUnXTtcblxuICAgIHRoaXMuI3VwZGF0ZURlZmF1bHRTZWFyY2hPcHRpb25zKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb3BlcnRpZXNUb1NlYXJjaCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19wcm9wZXJ0aWVzVG9TZWFyY2g7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRoYXQgZHluYW1pY2FsbHkgbWFuYWdlcyB0aGUgZGF0YSBzb3VyY2Ugd2hlbiB1c2Vyc1xuICAgKiBjaGFuZ2UgdGhlIHRleHQgaW4gdGhlIGF1dG9jb21wbGV0ZSBmaWVsZC4gVGhlIHNlYXJjaCBmdW5jdGlvbiBtdXN0IHJldHVyblxuICAgKiBhbiBhcnJheSBvciBhIHByb21pc2Ugb2YgYW4gYXJyYXkuIFRoZSBgc2VhcmNoYCBwcm9wZXJ0eSBpcyBwYXJ0aWN1bGFybHlcbiAgICogdXNlZnVsIHdoZW4gdGhlIGRhdGEgc291cmNlIGRvZXMgbm90IGxpdmUgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgKiBAZGVwcmVjYXRlZCBXZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZyB0aGlzIHByb3BlcnR5LiBUbyBjYWxsIGEgcmVtb3RlIGRhdGEgc291cmNlLCB1c2UgdGhlIGBzZWFyY2hBc3luY2AgZXZlbnQgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VhcmNoKHZhbHVlOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zZWFyY2ggPSB2YWx1ZTtcbiAgICB0aGlzLnNlYXJjaE9yRGVmYXVsdCA9XG4gICAgICB2YWx1ZSB8fFxuICAgICAgc2t5QXV0b2NvbXBsZXRlRGVmYXVsdFNlYXJjaEZ1bmN0aW9uKHtcbiAgICAgICAgcHJvcGVydGllc1RvU2VhcmNoOiB0aGlzLnByb3BlcnRpZXNUb1NlYXJjaCxcbiAgICAgICAgc2VhcmNoRmlsdGVyczogdGhpcy5zZWFyY2hGaWx0ZXJzLFxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlYXJjaCgpOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWFyY2g7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgZm9ybWF0cyBlYWNoIHNlYXJjaCByZXN1bHQgaW4gdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqIFRoZSBhdXRvY29tcGxldGUgY29tcG9uZW50IGluamVjdHMgc2VhcmNoIHJlc3VsdCB2YWx1ZXMgaW50byB0aGUgdGVtcGxhdGVcbiAgICogYXMgYGl0ZW1gIHZhcmlhYmxlcyB0aGF0IHJlZmVyZW5jZSBhbGwgb2YgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIG9mIHRoZSBzZWFyY2ggcmVzdWx0cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWFyY2hSZXN1bHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdXNlcnMgbXVzdCBlbnRlciBiZWZvcmVcbiAgICogdGhlIGF1dG9jb21wbGV0ZSBjb21wb25lbnQgc2VhcmNoZXMgdGhlIGRhdGEgc291cmNlIGFuZCBkaXNwbGF5cyBzZWFyY2hcbiAgICogcmVzdWx0cyBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMgPSB2YWx1ZSAmJiB2YWx1ZSA+IDAgPyB2YWx1ZSA6IDE7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhcnJheSBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZ2FpbnN0IGVhY2ggc2VhcmNoIHJlc3VsdCBpbiBvcmRlclxuICAgKiB0byBmaWx0ZXIgdGhlIHNlYXJjaCByZXN1bHRzIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgc2VhcmNoIGZ1bmN0aW9uLiBXaGVuXG4gICAqIHVzaW5nIHRoZSBgc2VhcmNoYCBwcm9wZXJ0eSB0byBzcGVjaWZ5IGEgY3VzdG9tIHNlYXJjaCBmdW5jdGlvbiwgeW91IG11c3RcbiAgICogbWFudWFsbHkgYXBwbHkgZmlsdGVycyBpbnNpZGUgdGhhdCBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGB0cnVlYFxuICAgKiBvciBgZmFsc2VgIGZvciBlYWNoIHJlc3VsdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGRpc3BsYXkgaXQgaW4gdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqIEBkZXByZWNhdGVkIFdlIHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIHRoaXMgcHJvcGVydHkuIFRvIGZpbHRlciByZXN1bHRzLCB1c2UgdGhlIGBzZWFyY2hBc3luY2AgZXZlbnQgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VhcmNoRmlsdGVycyhcbiAgICB2YWx1ZTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb25GaWx0ZXJbXSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLiNfc2VhcmNoRmlsdGVycyA9IHZhbHVlO1xuXG4gICAgdGhpcy4jdXBkYXRlRGVmYXVsdFNlYXJjaE9wdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoRmlsdGVycygpOlxuICAgIHwgU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb25GaWx0ZXJbXVxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlYXJjaEZpbHRlcnM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzIHRvIGRpc3BsYXkgaW4gdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBjb21wb25lbnQgZGlzcGxheXMgYWxsIG1hdGNoaW5nIHJlc3VsdHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaFJlc3VsdHNMaW1pdCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3NlYXJjaFJlc3VsdHNMaW1pdCA9IHZhbHVlIHx8IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlYXJjaFJlc3VsdHNMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoUmVzdWx0c0xpbWl0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYSBidXR0b24gdGhhdCBsZXRzIHVzZXJzIGFkZCBvcHRpb25zIHRvIHRoZSBkYXRhIHNvdXJjZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93QWRkQnV0dG9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgd2hlbiBubyBzZWFyY2ggcmVzdWx0cyBhcmUgZm91bmQuXG4gICAqIEBkZWZhdWx0IFwiTm8gbWF0Y2hlcyBmb3VuZFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbm9SZXN1bHRzRm91bmRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBBbGxvd3MgYXN5bmMgc2VhcmNoIHRvIGJlIGRpc2FibGVkIGV2ZW4gd2hlbiBhIGxpc3RlbmVyIGlzIHNwZWNpZmllZCBmb3JcbiAgICogdGhlIGBzZWFyY2hBc3luY2Agb3V0cHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEFzeW5jRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBidXR0b24gdG8gYWRkIG9wdGlvbnMgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhZGRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBidXR0b24gdG8gdmlldyBhbGwgb3B0aW9ucy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2hvd01vcmVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5QXV0b2NvbXBsZXRlU2hvd01vcmVBcmdzPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCBpdGVtcyBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2U+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgZW50ZXIgbmV3IHNlYXJjaCBpbmZvcm1hdGlvbiBhbmQgYWxsb3dzIHJlc3VsdHMgdG8gYmVcbiAgICogcmV0dXJuZWQgdmlhIGFuIG9ic2VydmFibGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNlYXJjaEFzeW5jID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0FyZ3M+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIHRlbXBsYXRlX3Byb3BlcnRpZXNcblxuICBwdWJsaWMgZ2V0IHNlYXJjaFJlc3VsdHMoKTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10ge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoUmVzdWx0cyB8fCBbXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc2VhcmNoUmVzdWx0cyh2YWx1ZTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10pIHtcbiAgICB0aGlzLiNfc2VhcmNoUmVzdWx0cyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBoaWdobGlnaHRUZXh0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy4jX2hpZ2hsaWdodFRleHQgfHwgW107XG4gIH1cblxuICBwdWJsaWMgc2V0IGhpZ2hsaWdodFRleHQodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy4jX2hpZ2hsaWdodFRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpc09wZW4gPSBmYWxzZTtcblxuICBwdWJsaWMgcmVzdWx0c0xpc3RJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyByZXN1bHRzV3JhcHBlcklkOiBzdHJpbmc7XG5cbiAgcHVibGljIHNlYXJjaFRleHQgPSAnJztcblxuICBwdWJsaWMgZ2V0IHNob3dBY3Rpb25zQXJlYSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnNob3dBZGRCdXR0b24gfHwgISF0aGlzLmVuYWJsZVNob3dNb3JlO1xuICB9XG5cbiAgcHVibGljIGlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcblxuICBwdWJsaWMgc2VhcmNoUmVzdWx0c0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgQENvbnRlbnRDaGlsZChTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSlcbiAgcHVibGljIHNldCBpbnB1dERpcmVjdGl2ZShcbiAgICBkaXJlY3RpdmU6IFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGlmICghZGlyZWN0aXZlKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgW1xuICAgICAgICAgICdUaGUgU2t5QXV0b2NvbXBsZXRlQ29tcG9uZW50IHJlcXVpcmVzIGEgQ29udGVudENoaWxkIGlucHV0IG9yJyxcbiAgICAgICAgICAndGV4dGFyZWEgYm91bmQgd2l0aCB0aGUgU2t5QXV0b2NvbXBsZXRlIGRpcmVjdGl2ZS4gRm9yIGV4YW1wbGU6JyxcbiAgICAgICAgICAnYDxpbnB1dCB0eXBlPVwidGV4dFwiIHNreUF1dG9jb21wbGV0ZT5gLicsXG4gICAgICAgIF0uam9pbignICcpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiNfaW5wdXREaXJlY3RpdmUgIT09IGRpcmVjdGl2ZSkge1xuICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBvbGQgc3Vic2NyaXB0aW9ucyBvbiBhbnkgcHJldmlvdXMgaW5wdXQgZGlyZWN0aXZlXG4gICAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuZGlzcGxheVdpdGggPSB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlLnRleHRDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGNoYW5nZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLiNzZWFyY2hUZXh0Q2hhbmdlZChjaGFuZ2UudmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gV2UgZGVsYXkgdGhpcyBsaXN0ZW5lciBieSAyNW1zIHRvIGdpdmUgdGhpbmdzIHdhdGNoaW5nIHRoZSB2YWx1ZSB0aW1lIHRvIHJlc3BvbmQgKHN1Y2ggYXMgdGhlIHNlYXJjaCBidXR0b24pLlxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlLmJsdXJcbiAgICAgICAgLnBpcGUoZGVsYXkoMjUpLCB0YWtlVW50aWwodGhpcy4jaW5wdXREaXJlY3RpdmVVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGRpcmVjdGl2ZS5yZXN0b3JlSW5wdXRUZXh0VmFsdWVUb1ByZXZpb3VzU3RhdGUoKTtcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgZGlyZWN0aXZlLm9uVG91Y2hlZCgpO1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlLmZvY3VzXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICAgICAgICB0aGlzLiNvcGVuRHJvcGRvd24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5wdXREaXJlY3RpdmUoKTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaW5wdXREaXJlY3RpdmU7XG4gIH1cblxuICBAVmlld0NoaWxkKCdyZXN1bHRzVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gIH0pXG4gIHB1YmxpYyByZXN1bHRzVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ3Jlc3VsdHNSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIHNldCByZXN1bHRzUmVmKHZhbHVlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNfcmVzdWx0c1JlZiA9IHZhbHVlO1xuICAgICAgdGhpcy4jZGVzdHJveUFmZml4ZXIoKTtcbiAgICAgIHRoaXMuI2NyZWF0ZUFmZml4ZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc3VsdHNSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19yZXN1bHRzUmVmO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaE9yRGVmYXVsdDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIEluZGV4IHRoYXQgaW5kaWNhdGVzIHdoaWNoIGRlc2NlbmRhbnQgb2YgdGhlIG92ZXJsYXkgY3VycmVudGx5IGhhcyBmb2N1cy5cbiAgICovXG4gICNhY3RpdmVFbGVtZW50SW5kZXggPSAtMTtcblxuICAjYWRhcHRlclNlcnZpY2U6IFNreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlO1xuXG4gICNhZmZpeGVyOiBTa3lBZmZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gICNhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gICNpbnB1dEJveEhvc3RTdmM6IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNtZXNzYWdlU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNvdmVybGF5OiBTa3lPdmVybGF5SW5zdGFuY2UgfCB1bmRlZmluZWQ7XG5cbiAgI292ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZTtcblxuICAvKipcbiAgICogRWxlbWVudHMgd2l0aGluIHRoZSBhdXRvY29tcGxldGUgZHJvcGRvd24gdGhhdCBhcmUgZm9jdXNhYmxlLlxuICAgKiBUaGVzZSBhcmUgdHlwaWNhbGx5IHRoZSBzZWFyY2ggcmVzdWx0cyBhbmQgYWN0aW9uIGJ1dHRvbnMsIGJ1dCBjb3VsZCBhbHNvIGJlXG4gICAqIGVsZW1lbnRzIHByb3ZpZGVkIGluIHRoZSBjb25zdW1lcidzIG93biB0ZW1wbGF0ZS5cbiAgICovXG4gICNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAjY3VycmVudFNlYXJjaFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICN6SW5kZXg6IE9ic2VydmFibGU8bnVtYmVyPiB8IHVuZGVmaW5lZDtcblxuICAjX2RhdGE6IGFueVtdID0gW107XG5cbiAgI19kZWJvdW5jZVRpbWUgPSAwO1xuXG4gICNfZGVzY3JpcHRvclByb3BlcnR5ID0gJ25hbWUnO1xuXG4gICNfaGlnaGxpZ2h0VGV4dDogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgI19pbnB1dERpcmVjdGl2ZTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG5cbiAgI19tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4oKTtcblxuICAjX3Byb3BlcnRpZXNUb1NlYXJjaCA9IFsnbmFtZSddO1xuXG4gICNfcmVzdWx0c1JlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAjX3NlYXJjaDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hGaWx0ZXJzOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlcltdIHwgdW5kZWZpbmVkO1xuXG4gICNfc2VhcmNoUmVzdWx0czogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hSZXN1bHRzTGltaXQgPSAwO1xuXG4gICNfc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzID0gMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBhZGFwdGVyU2VydmljZTogU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2UsXG4gICAgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGlucHV0Qm94SG9zdFN2Yz86IFNreUlucHV0Qm94SG9zdFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNLWV9TVEFDS0lOR19DT05URVhUKVxuICAgIHN0YWNraW5nQ29udGV4dD86IFNreVN0YWNraW5nQ29udGV4dFxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2FmZml4U2VydmljZSA9IGFmZml4U2VydmljZTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZSA9IGFkYXB0ZXJTZXJ2aWNlO1xuICAgIHRoaXMuI292ZXJsYXlTZXJ2aWNlID0gb3ZlcmxheVNlcnZpY2U7XG4gICAgdGhpcy4jaW5wdXRCb3hIb3N0U3ZjID0gaW5wdXRCb3hIb3N0U3ZjO1xuICAgIHRoaXMuI3pJbmRleCA9IHN0YWNraW5nQ29udGV4dD8uekluZGV4O1xuXG4gICAgdGhpcy5zZWFyY2hPckRlZmF1bHQgPSBza3lBdXRvY29tcGxldGVEZWZhdWx0U2VhcmNoRnVuY3Rpb24oe1xuICAgICAgcHJvcGVydGllc1RvU2VhcmNoOiBbJ25hbWUnXSxcbiAgICAgIHNlYXJjaEZpbHRlcnM6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlkID0gKyt1bmlxdWVJZDtcbiAgICB0aGlzLnJlc3VsdHNMaXN0SWQgPSBgc2t5LWF1dG9jb21wbGV0ZS1saXN0LSR7aWR9YDtcbiAgICB0aGlzLnJlc3VsdHNXcmFwcGVySWQgPSBgc2t5LWF1dG9jb21wbGV0ZS13cmFwcGVyLSR7aWR9YDtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRkSW5wdXRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRCdXR0b25DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2xpY2suZW1pdCgpO1xuICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50LmtleSkge1xuICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy4jZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudElkID0gYWN0aXZlRWxlbWVudD8uaWQ7XG4gICAgICBjb25zdCB0YXJnZXRJc1NlYXJjaFJlc3VsdCA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maW5kKFxuICAgICAgICAocikgPT4gci5lbGVtZW50SWQgPT09IGFjdGl2ZUVsZW1lbnRJZFxuICAgICAgKTtcblxuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgIGlmICh0YXJnZXRJc1NlYXJjaFJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy4jc2VsZWN0U2VhcmNoUmVzdWx0QnlJZChhY3RpdmVFbGVtZW50SWQpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI3Jlc2V0U2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vkb3duJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndGFiJzpcbiAgICAgICAgICBpZiAodGFyZ2V0SXNTZWFyY2hSZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuI3NlbGVjdFNlYXJjaFJlc3VsdEJ5SWQoYWN0aXZlRWxlbWVudElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5yZXN0b3JlSW5wdXRUZXh0VmFsdWVUb1ByZXZpb3VzU3RhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID09PVxuICAgICAgICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIGlmICh0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPD0gMCkge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID1cbiAgICAgICAgICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuI2FkZEZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vcmVCdXR0b25DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01vcmVDbGljay5lbWl0KHsgaW5wdXRWYWx1ZTogdGhpcy5zZWFyY2hUZXh0IH0pO1xuICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXN1bHRNb3VzZURvd24oaWQ6IHN0cmluZywgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLiNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGlkKTtcblxuICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzdWx0TW91c2VNb3ZlKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaWQgIT09IHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCkge1xuICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSBpZDtcbiAgICAgIHRoaXMuI2FkZEZvY3VzZWRDbGFzcygpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRWxlbWVudEZvY3VzZWQocmVmOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWYgPT09IHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdO1xuICB9XG5cbiAgI3NlYXJjaFRleHRDaGFuZ2VkKHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGlzRW1wdHkgPVxuICAgICAgIXNlYXJjaFRleHQgfHwgIXNlYXJjaFRleHQudHJpbSgpIHx8IHNlYXJjaFRleHQubWF0Y2goL15cXHMrJC8pO1xuXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIC8vIEVtaXQgc2VsZWN0aW9uQ2hhbmdlIGlmIHZhbHVlIGhhcyBiZWVuIGNsZWFyZWQuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUgJiYgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWx1ZSkge1xuICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1NlYXJjaGluZ0FzeW5jID0gZmFsc2U7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTG9uZ0Vub3VnaCA9IHNlYXJjaFRleHQubGVuZ3RoID49IHRoaXMuc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzO1xuICAgIGNvbnN0IGlzRGlmZmVyZW50ID0gc2VhcmNoVGV4dCAhPT0gdGhpcy5zZWFyY2hUZXh0O1xuXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dC50cmltKCk7XG5cbiAgICBpZiAoaXNMb25nRW5vdWdoICYmIGlzRGlmZmVyZW50KSB7XG4gICAgICB0aGlzLiNjYW5jZWxDdXJyZW50U2VhcmNoKCk7XG5cbiAgICAgIHRoaXMuI2N1cnJlbnRTZWFyY2hTdWIgPSB0aGlzLiNwZXJmb3JtU2VhcmNoKClcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXMgPSByZXN1bHQ/Lml0ZW1zLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbSAmJiB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eSBpbiBpdGVtO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5pc1NlYXJjaGluZ0FzeW5jID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPVxuICAgICAgICAgICAgaXRlbXM/Lm1hcCgociwgaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50SWQ6IGAke3RoaXMucmVzdWx0c0xpc3RJZH0taXRlbS0ke2l9YCxcbiAgICAgICAgICAgICAgICBkYXRhOiByLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSkgfHwgW107XG5cbiAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCA9IHJlc3VsdD8udG90YWxDb3VudCB8fCAwO1xuXG4gICAgICAgICAgdGhpcy5oaWdobGlnaHRUZXh0ID0gdGhpcy4jZ2V0SGlnaGxpZ2h0VGV4dCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIHRoaXMuI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAvLyBMZXQgdGhlIHJlc3VsdHMgcG9wdWxhdGUgaW4gdGhlIERPTSBiZWZvcmUgcmVjYWxjdWxhdGluZyBwbGFjZW1lbnQuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhZmZpeGVyLnJlYWZmaXgoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jb3BlbkRyb3Bkb3duKCk7XG4gICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gICNwZXJmb3JtU2VhcmNoKCk6IE9ic2VydmFibGU8U2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQXN5bmNEaXNhYmxlZCAmJiB0aGlzLnNlYXJjaEFzeW5jLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWFyY2hBc3luY0FyZ3M6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jQXJncyA9IHtcbiAgICAgICAgZGlzcGxheVR5cGU6ICdwb3BvdmVyJyxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNlYXJjaEFzeW5jLmVtaXQoc2VhcmNoQXN5bmNBcmdzKTtcblxuICAgICAgcmV0dXJuIHNlYXJjaEFzeW5jQXJncy5yZXN1bHQgfHwgb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaE9yRGVmYXVsdCh0aGlzLnNlYXJjaFRleHQsIHRoaXMuZGF0YSwge1xuICAgICAgY29udGV4dDogJ3BvcG92ZXInLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICBpdGVtczogcmVzdWx0LFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb20ocmVzdWx0KS5waXBlKFxuICAgICAgbWFwKChpdGVtcykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgIHRvdGFsQ291bnQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gICNjYW5jZWxDdXJyZW50U2VhcmNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXJyZW50U2VhcmNoU3ViKSB7XG4gICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHRvIGhpZ2hsaWdodCBiYXNlZCBvbiBleGFjdCBtYXRjaGVzLCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoZXMsIGFuZCBtYXRjaGVzIGZvciBjb3JyZXNwb25kaW5nIGRpYWNyaXRpY2FsIGNoYXJhY3RlcnMgKGEgd2lsbCBtYXRjaCDDoCkuXG4gICAqL1xuICAjZ2V0SGlnaGxpZ2h0VGV4dChzZWFyY2hUZXh0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaFRleHQgPSBub3JtYWxpemVEaWFjcml0aWNzKHNlYXJjaFRleHQpXG4gICAgICAudG9Mb2NhbGVVcHBlckNhc2UoKVxuICAgICAgLnRyaW0oKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hUZXh0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IG1hdGNoZXNUb0hpZ2hsaWdodDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHRoaXMuc2VhcmNoUmVzdWx0cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWFyY2hSZXN1bHRzW2ldLmRhdGFbdGhpcy5kZXNjcmlwdG9yUHJvcGVydHldXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC50b0xvY2FsZVVwcGVyQ2FzZSgpIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRhVmFsdWUgPSBub3JtYWxpemVEaWFjcml0aWNzKHZhbHVlKTtcblxuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgKGluZGV4ID0gbm9ybWFsaXplZERhdGFWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRTZWFyY2hUZXh0LCBvZmZzZXQpKSA+IC0xXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZFN0cmluZyA9IHZhbHVlLnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ID0gaW5kZXggKyBzZWFyY2hUZXh0Lmxlbmd0aDtcbiAgICAgICAgbWF0Y2hlc1RvSGlnaGxpZ2h0ID0gbWF0Y2hlc1RvSGlnaGxpZ2h0LmNvbmNhdChtYXRjaGVkU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYW55IGR1cGxpY2F0ZXMgZnJvbSB0aGUgYXJyYXkuXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KG1hdGNoZXNUb0hpZ2hsaWdodCldO1xuICB9XG5cbiAgI3NlbGVjdFNlYXJjaFJlc3VsdEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maW5kKChyKSA9PiByLmVsZW1lbnRJZCA9PT0gaWQpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gZGF0YVt0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eV07XG4gICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbHVlID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICBzZWxlY3RlZEl0ZW06IGRhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjb3BlbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jb3ZlcmxheSAmJiB0aGlzLnJlc3VsdHNUZW1wbGF0ZVJlZikge1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuI292ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIGVuYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogdHJ1ZSxcbiAgICAgICAgd3JhcHBlckNsYXNzOiB0aGlzLndyYXBwZXJDbGFzcyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy4jekluZGV4KSB7XG4gICAgICAgIHRoaXMuI3pJbmRleC5waXBlKHRha2VVbnRpbChvdmVybGF5LmNsb3NlZCkpLnN1YnNjcmliZSgoekluZGV4KSA9PiB7XG4gICAgICAgICAgb3ZlcmxheS5jb21wb25lbnRSZWYuaW5zdGFuY2UuekluZGV4ID0gekluZGV4LnRvU3RyaW5nKDEwKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG92ZXJsYXkuYXR0YWNoVGVtcGxhdGUodGhpcy5yZXN1bHRzVGVtcGxhdGVSZWYpO1xuXG4gICAgICB0aGlzLiNvdmVybGF5ID0gb3ZlcmxheTtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy4jdXBkYXRlQXJpYU93bnMoKTtcbiAgICAgIHRoaXMuI2luaXRPdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMoKTtcbiAgICB9XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNldFNlYXJjaCgpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy4jdXBkYXRlQXJpYU93bnMoKTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNzZXRBY3RpdmVEZXNjZW5kYW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPVxuICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzW3RoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleF07XG4gICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoYWN0aXZlRWxlbWVudCAmJiB0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnNldEFjdGl2ZURlc2NlbmRhbnQoYWN0aXZlRWxlbWVudC5pZCk7XG4gICAgfVxuICB9XG5cbiAgI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QWN0aXZlRGVzY2VuZGFudChudWxsKTtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlQXJpYU93bnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QXJpYU93bnModGhpcy4jb3ZlcmxheT8uaWQgfHwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgI3Jlc2V0U2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuaGlnaGxpZ2h0VGV4dCA9IFtdO1xuICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0c0NvdW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB0aGlzLiNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjYWRkSW5wdXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd24oZXZlbnQpO1xuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50UmVmLFxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzUmVmLFxuICAgICAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNkZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jb3ZlcmxheSkge1xuICAgICAgdGhpcy4jb3ZlcmxheVNlcnZpY2UuY2xvc2UodGhpcy4jb3ZlcmxheSk7XG4gICAgICB0aGlzLiNvdmVybGF5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNjcmVhdGVBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNhZmZpeGVyICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgY29uc3QgYWZmaXhlciA9IHRoaXMuI2FmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKHRoaXMucmVzdWx0c1JlZik7XG5cbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYsXG4gICAgICAgIHRoaXMucmVzdWx0c1JlZixcbiAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmNcbiAgICAgICk7XG5cbiAgICAgIGFmZml4ZXIuYWZmaXhUbyh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgIGVuYWJsZUF1dG9GaXQ6IHRydWUsXG4gICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICBwbGFjZW1lbnQ6ICdiZWxvdycsXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNhZmZpeGVyID0gYWZmaXhlcjtcbiAgICB9XG4gIH1cblxuICAjZGVzdHJveUFmZml4ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgIHRoaXMuI2FmZml4ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy4jYWZmaXhlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAjaW5pdE1lc3NhZ2VTdHJlYW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIpIHtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy4jbWVzc2FnZVN0cmVhbVN1YiA9IHRoaXMubWVzc2FnZVN0cmVhbS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgIGNhc2UgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUuQ2xvc2VEcm9wZG93bjpcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUuUmVwb3NpdGlvbkRyb3Bkb3duOlxuICAgICAgICAgIC8vIFNldHRpbWVvdXQgd2FpdHMgZm9yIGNoYW5nZXMgaW4gRE9NIChlLmcuLCB0b2tlbnMgYmVpbmcgcmVtb3ZlZClcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy4jYWZmaXhlcikge1xuICAgICAgICAgICAgICB0aGlzLiNhZmZpeGVyLnJlYWZmaXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gICNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk6IHZvaWQge1xuICAgIC8vIFdhaXQgZm9yIGRyb3Bkb3duIGVsZW1lbnRzIHRvIHJlbmRlci5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cyA9XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKHRoaXMuI292ZXJsYXkpO1xuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRUYWJJbmRleChlbCwgLTEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAjZ2V0QWN0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdO1xuICB9XG5cbiAgI3JlbW92ZUZvY3VzZWRDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnJlbW92ZUNTU0NsYXNzKFxuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XSxcbiAgICAgICAgJ3NreS1hdXRvY29tcGxldGUtZGVzY2VuZGFudC1mb2N1cydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgI2FkZEZvY3VzZWRDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmFkZENTU0NsYXNzKFxuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XSxcbiAgICAgICAgJ3NreS1hdXRvY29tcGxldGUtZGVzY2VuZGFudC1mb2N1cydcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZURlZmF1bHRTZWFyY2hPcHRpb25zKCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGRlZmF1bHQgc2VhcmNoIGlmIGl0IGlzIHdoYXQgaXMgYmVpbmcgdXNlZC5cbiAgICBpZiAodGhpcy5zZWFyY2ggIT09IHRoaXMuc2VhcmNoT3JEZWZhdWx0KSB7XG4gICAgICB0aGlzLnNlYXJjaE9yRGVmYXVsdCA9IHNreUF1dG9jb21wbGV0ZURlZmF1bHRTZWFyY2hGdW5jdGlvbih7XG4gICAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogdGhpcy5wcm9wZXJ0aWVzVG9TZWFyY2gsXG4gICAgICAgIHNlYXJjaEZpbHRlcnM6IHRoaXMuc2VhcmNoRmlsdGVycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIlxuICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZVwiXG4gIHJvbGU9XCJjb21ib2JveFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgW2F0dHIuYXJpYS1vd25zXT1cImlzT3BlbiA/IHJlc3VsdHNMaXN0SWQgOiBudWxsXCJcbiAgW2F0dHIuaWRdPVwicmVzdWx0c1dyYXBwZXJJZFwiXG4+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3Jlc3VsdHNUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRzLWNvbnRhaW5lclwiXG4gICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgJ3NreS1zaGFkb3cnOiAnZGVmYXVsdCcsXG4gICAgICAnc2t5LWVsZXZhdGlvbi00JzogJ21vZGVybidcbiAgICB9XCJcbiAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duKCRldmVudClcIlxuICAgICNyZXN1bHRzUmVmXG4gID5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImlzU2VhcmNoaW5nQXN5bmM7IGVsc2UgcmVzdWx0Q29udHJvbHNUZW1wbGF0ZVJlZlwiXG4gICAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtcmVzdWx0cy13YWl0aW5nXCJcbiAgICA+XG4gICAgICA8c2t5LXdhaXQgW2lzV2FpdGluZ109XCJ0cnVlXCI+PC9za3ktd2FpdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Jlc3VsdENvbnRyb2xzVGVtcGxhdGVSZWY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInNlYXJjaFRleHQgJiYgKCFzaG93QWN0aW9uc0FyZWEgfHwgc2VhcmNoUmVzdWx0cy5sZW5ndGggPiAwKVwiXG4gICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLXJlc3VsdHNcIlxuICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgIFthdHRyLmlkXT1cInJlc3VsdHNMaXN0SWRcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVzdWx0IG9mIHNlYXJjaFJlc3VsdHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAoIXNlYXJjaFJlc3VsdHNMaW1pdCB8fCBpIDwgc2VhcmNoUmVzdWx0c0xpbWl0KSAmJlxuICAgICAgICAgICEoZW5hYmxlU2hvd01vcmUgJiYgaSA+PSA1KVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtcmVzdWx0XCJcbiAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNFbGVtZW50Rm9jdXNlZChzZWFyY2hSZXN1bHRFbClcIlxuICAgICAgICBbYXR0ci5kYXRhLWRlc2NyaXB0b3ItdmFsdWVdPVwicmVzdWx0LmRhdGFbZGVzY3JpcHRvclByb3BlcnR5XVwiXG4gICAgICAgIFthdHRyLmlkXT1cInJlc3VsdC5lbGVtZW50SWRcIlxuICAgICAgICBbc2t5SGlnaGxpZ2h0XT1cImhpZ2hsaWdodFRleHRcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uUmVzdWx0TW91c2VEb3duKHJlc3VsdC5lbGVtZW50SWQsICRldmVudClcIlxuICAgICAgICAobW91c2Vtb3ZlKT1cIm9uUmVzdWx0TW91c2VNb3ZlKGkpXCJcbiAgICAgICAgI3NlYXJjaFJlc3VsdEVsXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc2VhcmNoUmVzdWx0VGVtcGxhdGUgfHwgZGVmYXVsdFNlYXJjaFJlc3VsdFRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyBpdGVtOiByZXN1bHQuZGF0YSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDBcIlxuICAgICAgY2xhc3M9XCJza3ktZGVlbXBoYXNpemVkIHNreS1wYWRkaW5nLXNxdWlzaC1kZWZhdWx0XCJcbiAgICA+XG4gICAgICB7e1xuICAgICAgICBub1Jlc3VsdHNGb3VuZFRleHQgfHxcbiAgICAgICAgICAoJ3NreXV4X2F1dG9jb21wbGV0ZV9ub19yZXN1bHRzJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0FjdGlvbnNBcmVhXCIgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLWFjdGlvbnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImVuYWJsZVNob3dNb3JlICYmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApXCJcbiAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24gc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24tbW9yZSBza3ktYnRuIHNreS1idG4tbGlua1wiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChtb3VzZWRvd24pPVwibW9yZUJ1dHRvbkNsaWNrZWQoKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBzZWFyY2hBc3luY1xuICAgICAgICAgICAgfCBza3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0Rpc2FibGVkOiBzZWFyY2hBc3luY0Rpc2FibGVkXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgIHNlYXJjaFJlc3VsdHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgIXNlYXJjaFRleHRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NreXV4X2F1dG9jb21wbGV0ZV9zaG93X2FsbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIChzZWFyY2hBc3luY1xuICAgICAgICAgICAgfCBza3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0Rpc2FibGVkOiBzZWFyY2hBc3luY0Rpc2FibGVkKSAmJlxuICAgICAgICAgICFzZWFyY2hUZXh0XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ3NreXV4X2F1dG9jb21wbGV0ZV9zaG93X2FsbF9jb3VudCdcbiAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiAoZGF0YS5sZW5ndGggfCBza3lOdW1lcmljOiB7IHRydW5jYXRlOiBmYWxzZSB9KVxuICAgICAgICB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoVGV4dFwiPlxuICAgICAgICB7e1xuICAgICAgICAgICdza3l1eF9hdXRvY29tcGxldGVfc2hvd19tYXRjaGVzX2NvdW50J1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgOiAoc2VhcmNoUmVzdWx0c0NvdW50ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8gZGF0YS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIDogKHNlYXJjaFJlc3VsdHNDb3VudCB8IHNreU51bWVyaWM6IHsgdHJ1bmNhdGU6IGZhbHNlIH0pKVxuICAgICAgICB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzZWFyY2hUZXh0ICYmIHNlYXJjaFJlc3VsdHMubGVuZ3RoID09PSAwXCJcbiAgICAgIGNsYXNzPVwic2t5LWZvbnQtZGVlbXBoYXNpemVkIHNreS1hdXRvY29tcGxldGUtYWN0aW9ucy1uby1yZXN1bHRzXCJcbiAgICA+XG4gICAgICB7e1xuICAgICAgICBub1Jlc3VsdHNGb3VuZFRleHQgfHxcbiAgICAgICAgICAoJ3NreXV4X2F1dG9jb21wbGV0ZV9ub19yZXN1bHRzJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIH19XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJzaG93QWRkQnV0dG9uXCJcbiAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24gc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24tYWRkIHNreS1idG4gc2t5LWJ0bi1saW5rXCJcbiAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzRWxlbWVudEZvY3VzZWQoYWRkQnV0dG9uRWwpXCJcbiAgICAgIChtb3VzZWRvd24pPVwiYWRkQnV0dG9uQ2xpY2tlZCgpXCJcbiAgICAgICNhZGRCdXR0b25FbFxuICAgID5cbiAgICAgIDxza3ktaWNvbiAqc2t5VGhlbWVJZj1cIidtb2Rlcm4nXCIgaWNvbj1cImFkZFwiIGljb25UeXBlPVwic2t5dXhcIj48L3NreS1pY29uPlxuICAgICAgPHNreS1pY29uICpza3lUaGVtZUlmPVwiJ2RlZmF1bHQnXCIgaWNvbj1cInBsdXMtY2lyY2xlXCI+PC9za3ktaWNvbj5cbiAgICAgIHt7ICdza3l1eF9hdXRvY29tcGxldGVfYWRkJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiAjZGVmYXVsdFNlYXJjaFJlc3VsdFRlbXBsYXRlPlxuICB7eyBpdGVtW2Rlc2NyaXB0b3JQcm9wZXJ0eV0gfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
775
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEdBTXZCLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFFTCxPQUFPLEVBRVAsSUFBSSxFQUNKLFNBQVMsSUFBSSxtQkFBbUIsRUFDaEMsRUFBRSxHQUNILE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFlBQVksRUFDWixLQUFLLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0s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QUs7Z0JBY0MsWUFBWTtzQkFEbEIsS0FBSztnQkFTSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBbUJLLE1BQU07c0JBRGhCLEtBQUs7Z0JBcUJDLG9CQUFvQjtzQkFEMUIsS0FBSztnQkFVSywyQkFBMkI7c0JBRHJDLEtBQUs7Z0JBa0JLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBb0JLLGtCQUFrQjtzQkFENUIsS0FBSztnQkFlQyxhQUFhO3NCQURuQixLQUFLO2dCQVFDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFVQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBUUMsUUFBUTtzQkFEZCxNQUFNO2dCQVFBLGFBQWE7c0JBRG5CLE1BQU07Z0JBT0EsZUFBZTtzQkFEckIsTUFBTTtnQkFRQSxXQUFXO3NCQURqQixNQUFNO2dCQTBDSSxjQUFjO3NCQUR4QixZQUFZO3VCQUFDLDZCQUE2QjtnQkFnRXBDLGtCQUFrQjtzQkFIeEIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRTt3QkFDL0IsSUFBSSxFQUFFLFdBQVc7cUJBQ2xCO2dCQU1VLFVBQVU7c0JBSHBCLFNBQVM7dUJBQUMsWUFBWSxFQUFFO3dCQUN2QixJQUFJLEVBQUUsVUFBVTtxQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfU1RBQ0tJTkdfQ09OVEVYVCxcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dCxcbiAgU2t5QWZmaXhTZXJ2aWNlLFxuICBTa3lBZmZpeGVyLFxuICBTa3lPdmVybGF5SW5zdGFuY2UsXG4gIFNreU92ZXJsYXlTZXJ2aWNlLFxuICBTa3lTdGFja2luZ0NvbnRleHQsXG59IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuXG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGZyb20sXG4gIGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50LFxuICBvZixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRlbGF5LFxuICBtYXAsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IG5vcm1hbGl6ZURpYWNyaXRpY3MgfSBmcm9tICcuLi9zaGFyZWQvc2t5LWxvb2t1cC1zdHJpbmctdXRpbHMnO1xuXG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBza3lBdXRvY29tcGxldGVEZWZhdWx0U2VhcmNoRnVuY3Rpb24gfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1kZWZhdWx0LXNlYXJjaC1mdW5jdGlvbic7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLWlucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtbWVzc2FnZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVNZXNzYWdlVHlwZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLW1lc3NhZ2UtdHlwZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0FyZ3MgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtYXN5bmMtYXJncyc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY1Jlc3VsdCB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNlYXJjaC1hc3luYy1yZXN1bHQnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtZnVuY3Rpb24nO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb25GaWx0ZXIgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtZnVuY3Rpb24tZmlsdGVyJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5nZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNlbGVjdGlvbi1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2hvd01vcmVBcmdzIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2hvdy1tb3JlLWFyZ3MnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0IHtcbiAgZWxlbWVudElkOiBzdHJpbmc7XG4gIGRhdGE6IGFueTtcbn1cblxubGV0IHVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWF1dG9jb21wbGV0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hdXRvY29tcGxldGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2VdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLy8jcmVnaW9uIHB1YmxpY19hcGlcblxuICAvKipcbiAgICogVGhlIEhUTUwgZWxlbWVudCBJRCBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVsc1xuICAgKiB0aGUgYXV0b2NvbXBsZXRlIHRleHQgaW5wdXQuIFRoaXMgc2V0cyB0aGUgaW5wdXQncyBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUgdG8gcHJvdmlkZSBhIHRleHQgZXF1aXZhbGVudCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSwgc2VlIHRoZSBbV0FJLUFSSUEgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWxhYmVsbGVkYnkpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0aWMgZGF0YSBzb3VyY2UgZm9yIHRoZSBhdXRvY29tcGxldGUgY29tcG9uZW50IHRvIHNlYXJjaFxuICAgKiB3aGVuIHVzZXJzIGVudGVyIHRleHQuIEZvciBhIGR5bmFtaWMgZGF0YSBzb3VyY2Ugc3VjaCBhcyBhbiBhcnJheSB0aGF0XG4gICAqIGNoYW5nZXMgZHVlIHRvIHNlcnZlciBjYWxscywgdXNlIGBzZWFyY2hgIG9yIGBzZWFyY2hBc3luY2AgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0YSh2YWx1ZTogYW55W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGF0YSA9IHZhbHVlID8/IFtdO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX2RhdGE7XG4gIH1cblxuICAvKipcbiAgICogSG93IG1hbnkgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHNlYXJjaGluZyB3aGlsZSB1c2Vyc1xuICAgKiBlbnRlciB0ZXh0IGluIHRoZSBhdXRvY29tcGxldGUgZmllbGQuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVib3VuY2VUaW1lKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGVib3VuY2VUaW1lID0gdmFsdWUgPz8gMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVib3VuY2VUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19kZWJvdW5jZVRpbWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9iamVjdCBwcm9wZXJ0eSB0byBkaXNwbGF5IGluIHRoZSB0ZXh0IGlucHV0IGFmdGVyIHVzZXJzXG4gICAqIHNlbGVjdCBhbiBpdGVtIGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBAZGVmYXVsdCBcIm5hbWVcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkZXNjcmlwdG9yUHJvcGVydHkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kZXNjcmlwdG9yUHJvcGVydHkgPSB2YWx1ZSB8fCAnbmFtZSc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0b3JQcm9wZXJ0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNfZGVzY3JpcHRvclByb3BlcnR5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYSBidXR0b24gaW4gdGhlIGRyb3Bkb3duIHRoYXQgb3BlbnMgYSBwaWNrZXIgd2hlcmUgdXNlcnMgY2FuIHZpZXcgYWxsIG9wdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZW5hYmxlU2hvd01vcmU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgb2YgYFNreUF1dG9jb21wbGV0ZU1lc3NhZ2VgIHRoYXQgY2FuIGNsb3NlIHRoZSBkcm9wZG93bi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1lc3NhZ2VTdHJlYW0odmFsdWU6IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWVzc2FnZVN0cmVhbSA9IHZhbHVlID8/IG5ldyBTdWJqZWN0PFNreUF1dG9jb21wbGV0ZU1lc3NhZ2U+KCk7XG4gICAgdGhpcy4jaW5pdE1lc3NhZ2VTdHJlYW0oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWVzc2FnZVN0cmVhbSgpOiBTdWJqZWN0PFNreUF1dG9jb21wbGV0ZU1lc3NhZ2U+IHtcbiAgICByZXR1cm4gdGhpcy4jX21lc3NhZ2VTdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgd3JhcHBlckNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgcHJvcGVydGllcyB0byBzZWFyY2guXG4gICAqIEBkZWZhdWx0IFtcIm5hbWVcIl1cbiAgICogQGRlcHJlY2F0ZWQgV2UgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgdGhpcyBwcm9wZXJ0eS4gVG8gc2VhcmNoIHNwZWNpZmljIHByb3BlcnRpZXMsIHVzZSB0aGUgYHNlYXJjaEFzeW5jYCBldmVudCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwcm9wZXJ0aWVzVG9TZWFyY2godmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3Byb3BlcnRpZXNUb1NlYXJjaCA9IHZhbHVlID8/IFsnbmFtZSddO1xuXG4gICAgdGhpcy4jdXBkYXRlRGVmYXVsdFNlYXJjaE9wdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJvcGVydGllc1RvU2VhcmNoKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy4jX3Byb3BlcnRpZXNUb1NlYXJjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBkeW5hbWljYWxseSBtYW5hZ2VzIHRoZSBkYXRhIHNvdXJjZSB3aGVuIHVzZXJzXG4gICAqIGNoYW5nZSB0aGUgdGV4dCBpbiB0aGUgYXV0b2NvbXBsZXRlIGZpZWxkLiBUaGUgc2VhcmNoIGZ1bmN0aW9uIG11c3QgcmV0dXJuXG4gICAqIGFuIGFycmF5IG9yIGEgcHJvbWlzZSBvZiBhbiBhcnJheS4gVGhlIGBzZWFyY2hgIHByb3BlcnR5IGlzIHBhcnRpY3VsYXJseVxuICAgKiB1c2VmdWwgd2hlbiB0aGUgZGF0YSBzb3VyY2UgZG9lcyBub3QgbGl2ZSBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAqIEBkZXByZWNhdGVkIFdlIHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIHRoaXMgcHJvcGVydHkuIFRvIGNhbGwgYSByZW1vdGUgZGF0YSBzb3VyY2UsIHVzZSB0aGUgYHNlYXJjaEFzeW5jYCBldmVudCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWFyY2godmFsdWU6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3NlYXJjaCA9IHZhbHVlO1xuICAgIHRoaXMuc2VhcmNoT3JEZWZhdWx0ID1cbiAgICAgIHZhbHVlIHx8XG4gICAgICBza3lBdXRvY29tcGxldGVEZWZhdWx0U2VhcmNoRnVuY3Rpb24oe1xuICAgICAgICBwcm9wZXJ0aWVzVG9TZWFyY2g6IHRoaXMucHJvcGVydGllc1RvU2VhcmNoLFxuICAgICAgICBzZWFyY2hGaWx0ZXJzOiB0aGlzLnNlYXJjaEZpbHRlcnMsXG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoKCk6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlYXJjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBmb3JtYXRzIGVhY2ggc2VhcmNoIHJlc3VsdCBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogVGhlIGF1dG9jb21wbGV0ZSBjb21wb25lbnQgaW5qZWN0cyBzZWFyY2ggcmVzdWx0IHZhbHVlcyBpbnRvIHRoZSB0ZW1wbGF0ZVxuICAgKiBhcyBgaXRlbWAgdmFyaWFibGVzIHRoYXQgcmVmZXJlbmNlIGFsbCBvZiB0aGUgb2JqZWN0IHByb3BlcnRpZXMgb2YgdGhlIHNlYXJjaCByZXN1bHRzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaFJlc3VsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB1c2VycyBtdXN0IGVudGVyIGJlZm9yZVxuICAgKiB0aGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCBzZWFyY2hlcyB0aGUgZGF0YSBzb3VyY2UgYW5kIGRpc3BsYXlzIHNlYXJjaFxuICAgKiByZXN1bHRzIGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3NlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycyA9IHZhbHVlICYmIHZhbHVlID4gMCA/IHZhbHVlIDogMTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFycmF5IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFnYWluc3QgZWFjaCBzZWFyY2ggcmVzdWx0IGluIG9yZGVyXG4gICAqIHRvIGZpbHRlciB0aGUgc2VhcmNoIHJlc3VsdHMgd2hlbiB1c2luZyB0aGUgZGVmYXVsdCBzZWFyY2ggZnVuY3Rpb24uIFdoZW5cbiAgICogdXNpbmcgdGhlIGBzZWFyY2hgIHByb3BlcnR5IHRvIHNwZWNpZnkgYSBjdXN0b20gc2VhcmNoIGZ1bmN0aW9uLCB5b3UgbXVzdFxuICAgKiBtYW51YWxseSBhcHBseSBmaWx0ZXJzIGluc2lkZSB0aGF0IGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYHRydWVgXG4gICAqIG9yIGBmYWxzZWAgZm9yIGVhY2ggcmVzdWx0IHRvIGluZGljYXRlIHdoZXRoZXIgdG8gZGlzcGxheSBpdCBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQGRlcHJlY2F0ZWQgV2UgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgdGhpcyBwcm9wZXJ0eS4gVG8gZmlsdGVyIHJlc3VsdHMsIHVzZSB0aGUgYHNlYXJjaEFzeW5jYCBldmVudCBpbnN0ZWFkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWFyY2hGaWx0ZXJzKFxuICAgIHZhbHVlOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlcltdIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHRoaXMuI19zZWFyY2hGaWx0ZXJzID0gdmFsdWU7XG5cbiAgICB0aGlzLiN1cGRhdGVEZWZhdWx0U2VhcmNoT3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hGaWx0ZXJzKCk6XG4gICAgfCBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlcltdXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoRmlsdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2VhcmNoIHJlc3VsdHMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBkaXNwbGF5cyBhbGwgbWF0Y2hpbmcgcmVzdWx0cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VhcmNoUmVzdWx0c0xpbWl0KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoUmVzdWx0c0xpbWl0ID0gdmFsdWUgfHwgMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoUmVzdWx0c0xpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWFyY2hSZXN1bHRzTGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhIGJ1dHRvbiB0aGF0IGxldHMgdXNlcnMgYWRkIG9wdGlvbnMgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dBZGRCdXR0b246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSB3aGVuIG5vIHNlYXJjaCByZXN1bHRzIGFyZSBmb3VuZC5cbiAgICogQGRlZmF1bHQgXCJObyBtYXRjaGVzIGZvdW5kXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub1Jlc3VsdHNGb3VuZFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEFsbG93cyBhc3luYyBzZWFyY2ggdG8gYmUgZGlzYWJsZWQgZXZlbiB3aGVuIGEgbGlzdGVuZXIgaXMgc3BlY2lmaWVkIGZvclxuICAgKiB0aGUgYHNlYXJjaEFzeW5jYCBvdXRwdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoQXN5bmNEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3QgdGhlIGJ1dHRvbiB0byBhZGQgb3B0aW9ucyB0byB0aGUgZGF0YSBzb3VyY2UuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGFkZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3QgdGhlIGJ1dHRvbiB0byB2aWV3IGFsbCBvcHRpb25zLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzaG93TW9yZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTaG93TW9yZUFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IGl0ZW1zIGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5nZT4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBlbnRlciBuZXcgc2VhcmNoIGluZm9ybWF0aW9uIGFuZCBhbGxvd3MgcmVzdWx0cyB0byBiZVxuICAgKiByZXR1cm5lZCB2aWEgYW4gb2JzZXJ2YWJsZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VhcmNoQXN5bmMgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jQXJncz4oKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gdGVtcGxhdGVfcHJvcGVydGllc1xuXG4gIHB1YmxpYyBnZXQgc2VhcmNoUmVzdWx0cygpOiBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWFyY2hSZXN1bHRzIHx8IFtdO1xuICB9XG5cbiAgcHVibGljIHNldCBzZWFyY2hSZXN1bHRzKHZhbHVlOiBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHRbXSkge1xuICAgIHRoaXMuI19zZWFyY2hSZXN1bHRzID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhpZ2hsaWdodFRleHQoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLiNfaGlnaGxpZ2h0VGV4dCB8fCBbXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaGlnaGxpZ2h0VGV4dCh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLiNfaGlnaGxpZ2h0VGV4dCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZXN1bHRzTGlzdElkOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlc3VsdHNXcmFwcGVySWQ6IHN0cmluZztcblxuICBwdWJsaWMgc2VhcmNoVGV4dCA9ICcnO1xuXG4gIHB1YmxpYyBnZXQgc2hvd0FjdGlvbnNBcmVhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc2hvd0FkZEJ1dHRvbiB8fCAhIXRoaXMuZW5hYmxlU2hvd01vcmU7XG4gIH1cblxuICBwdWJsaWMgaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzZWFyY2hSZXN1bHRzQ291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvLyNlbmRyZWdpb25cblxuICBAQ29udGVudENoaWxkKFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlKVxuICBwdWJsaWMgc2V0IGlucHV0RGlyZWN0aXZlKFxuICAgIGRpcmVjdGl2ZTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKCFkaXJlY3RpdmUpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgJ1RoZSBTa3lBdXRvY29tcGxldGVDb21wb25lbnQgcmVxdWlyZXMgYSBDb250ZW50Q2hpbGQgaW5wdXQgb3InLFxuICAgICAgICAgICd0ZXh0YXJlYSBib3VuZCB3aXRoIHRoZSBTa3lBdXRvY29tcGxldGUgZGlyZWN0aXZlLiBGb3IgZXhhbXBsZTonLFxuICAgICAgICAgICdgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2t5QXV0b2NvbXBsZXRlPmAuJyxcbiAgICAgICAgXS5qb2luKCcgJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI19pbnB1dERpcmVjdGl2ZSAhPT0gZGlyZWN0aXZlKSB7XG4gICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIG9sZCBzdWJzY3JpcHRpb25zIG9uIGFueSBwcmV2aW91cyBpbnB1dCBkaXJlY3RpdmVcbiAgICAgIHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUubmV4dCgpO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cbiAgICAgIHRoaXMuI19pbnB1dERpcmVjdGl2ZS5kaXNwbGF5V2l0aCA9IHRoaXMuZGVzY3JpcHRvclByb3BlcnR5O1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUudGV4dENoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSksXG4gICAgICAgICAgc3dpdGNoTWFwKChjaGFuZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gb2YoY2hhbmdlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuICAgICAgICAgIHRoaXMuI3NlYXJjaFRleHRDaGFuZ2VkKGNoYW5nZS52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBXZSBkZWxheSB0aGlzIGxpc3RlbmVyIGJ5IDI1bXMgdG8gZ2l2ZSB0aGluZ3Mgd2F0Y2hpbmcgdGhlIHZhbHVlIHRpbWUgdG8gcmVzcG9uZCAoc3VjaCBhcyB0aGUgc2VhcmNoIGJ1dHRvbikuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuYmx1clxuICAgICAgICAucGlwZShkZWxheSgyNSksIHRha2VVbnRpbCh0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICB0aGlzLiNjYW5jZWxDdXJyZW50U2VhcmNoKCk7XG4gICAgICAgICAgZGlyZWN0aXZlLm9uVG91Y2hlZCgpO1xuICAgICAgICAgIHRoaXMuI2hhc0ZvY3VzID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuZm9jdXNcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNoYXNGb2N1cyA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICAgICAgICB0aGlzLiNvcGVuRHJvcGRvd24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5wdXREaXJlY3RpdmUoKTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaW5wdXREaXJlY3RpdmU7XG4gIH1cblxuICBAVmlld0NoaWxkKCdyZXN1bHRzVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gIH0pXG4gIHB1YmxpYyByZXN1bHRzVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ3Jlc3VsdHNSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIHNldCByZXN1bHRzUmVmKHZhbHVlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNfcmVzdWx0c1JlZiA9IHZhbHVlO1xuICAgICAgdGhpcy4jZGVzdHJveUFmZml4ZXIoKTtcbiAgICAgIHRoaXMuI2NyZWF0ZUFmZml4ZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc3VsdHNSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19yZXN1bHRzUmVmO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaE9yRGVmYXVsdDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIEluZGV4IHRoYXQgaW5kaWNhdGVzIHdoaWNoIGRlc2NlbmRhbnQgb2YgdGhlIG92ZXJsYXkgY3VycmVudGx5IGhhcyBmb2N1cy5cbiAgICovXG4gICNhY3RpdmVFbGVtZW50SW5kZXggPSAtMTtcblxuICAjYWRhcHRlclNlcnZpY2U6IFNreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlO1xuXG4gICNhZmZpeGVyOiBTa3lBZmZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gICNhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gICNoYXNGb2N1cyA9IGZhbHNlO1xuXG4gICNpbnB1dEJveEhvc3RTdmM6IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNtZXNzYWdlU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNvdmVybGF5OiBTa3lPdmVybGF5SW5zdGFuY2UgfCB1bmRlZmluZWQ7XG5cbiAgI292ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZTtcblxuICAvKipcbiAgICogRWxlbWVudHMgd2l0aGluIHRoZSBhdXRvY29tcGxldGUgZHJvcGRvd24gdGhhdCBhcmUgZm9jdXNhYmxlLlxuICAgKiBUaGVzZSBhcmUgdHlwaWNhbGx5IHRoZSBzZWFyY2ggcmVzdWx0cyBhbmQgYWN0aW9uIGJ1dHRvbnMsIGJ1dCBjb3VsZCBhbHNvIGJlXG4gICAqIGVsZW1lbnRzIHByb3ZpZGVkIGluIHRoZSBjb25zdW1lcidzIG93biB0ZW1wbGF0ZS5cbiAgICovXG4gICNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAjY3VycmVudFNlYXJjaFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICN6SW5kZXg6IE9ic2VydmFibGU8bnVtYmVyPiB8IHVuZGVmaW5lZDtcblxuICAjX2RhdGE6IGFueVtdID0gW107XG5cbiAgI19kZWJvdW5jZVRpbWUgPSAwO1xuXG4gICNfZGVzY3JpcHRvclByb3BlcnR5ID0gJ25hbWUnO1xuXG4gICNfaGlnaGxpZ2h0VGV4dDogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgI19pbnB1dERpcmVjdGl2ZTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG5cbiAgI19tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4oKTtcblxuICAjX3Byb3BlcnRpZXNUb1NlYXJjaCA9IFsnbmFtZSddO1xuXG4gICNfcmVzdWx0c1JlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAjX3NlYXJjaDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hGaWx0ZXJzOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlcltdIHwgdW5kZWZpbmVkO1xuXG4gICNfc2VhcmNoUmVzdWx0czogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hSZXN1bHRzTGltaXQgPSAwO1xuXG4gICNfc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzID0gMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBhZGFwdGVyU2VydmljZTogU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2UsXG4gICAgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGlucHV0Qm94SG9zdFN2Yz86IFNreUlucHV0Qm94SG9zdFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNLWV9TVEFDS0lOR19DT05URVhUKVxuICAgIHN0YWNraW5nQ29udGV4dD86IFNreVN0YWNraW5nQ29udGV4dFxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2FmZml4U2VydmljZSA9IGFmZml4U2VydmljZTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZSA9IGFkYXB0ZXJTZXJ2aWNlO1xuICAgIHRoaXMuI292ZXJsYXlTZXJ2aWNlID0gb3ZlcmxheVNlcnZpY2U7XG4gICAgdGhpcy4jaW5wdXRCb3hIb3N0U3ZjID0gaW5wdXRCb3hIb3N0U3ZjO1xuICAgIHRoaXMuI3pJbmRleCA9IHN0YWNraW5nQ29udGV4dD8uekluZGV4O1xuXG4gICAgdGhpcy5zZWFyY2hPckRlZmF1bHQgPSBza3lBdXRvY29tcGxldGVEZWZhdWx0U2VhcmNoRnVuY3Rpb24oe1xuICAgICAgcHJvcGVydGllc1RvU2VhcmNoOiBbJ25hbWUnXSxcbiAgICAgIHNlYXJjaEZpbHRlcnM6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlkID0gKyt1bmlxdWVJZDtcbiAgICB0aGlzLnJlc3VsdHNMaXN0SWQgPSBgc2t5LWF1dG9jb21wbGV0ZS1saXN0LSR7aWR9YDtcbiAgICB0aGlzLnJlc3VsdHNXcmFwcGVySWQgPSBgc2t5LWF1dG9jb21wbGV0ZS13cmFwcGVyLSR7aWR9YDtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRkSW5wdXRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI2Rlc3Ryb3lBZmZpeGVyKCk7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRCdXR0b25DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2xpY2suZW1pdCgpO1xuICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50LmtleSkge1xuICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy4jZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudElkID0gYWN0aXZlRWxlbWVudD8uaWQ7XG4gICAgICBjb25zdCB0YXJnZXRJc1NlYXJjaFJlc3VsdCA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maW5kKFxuICAgICAgICAocikgPT4gci5lbGVtZW50SWQgPT09IGFjdGl2ZUVsZW1lbnRJZFxuICAgICAgKTtcblxuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgIGlmICh0YXJnZXRJc1NlYXJjaFJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy4jc2VsZWN0U2VhcmNoUmVzdWx0QnlJZChhY3RpdmVFbGVtZW50SWQpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICAgICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI3Jlc2V0U2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vkb3duJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndGFiJzpcbiAgICAgICAgICBpZiAodGFyZ2V0SXNTZWFyY2hSZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuI3NlbGVjdFNlYXJjaFJlc3VsdEJ5SWQoYWN0aXZlRWxlbWVudElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5yZXN0b3JlSW5wdXRUZXh0VmFsdWVUb1ByZXZpb3VzU3RhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID09PVxuICAgICAgICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIGlmICh0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPD0gMCkge1xuICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID1cbiAgICAgICAgICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuI2FkZEZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vcmVCdXR0b25DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01vcmVDbGljay5lbWl0KHsgaW5wdXRWYWx1ZTogdGhpcy5zZWFyY2hUZXh0IH0pO1xuICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnJlc3RvcmVJbnB1dFRleHRWYWx1ZVRvUHJldmlvdXNTdGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXN1bHRNb3VzZURvd24oaWQ6IHN0cmluZywgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLiNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGlkKTtcblxuICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzdWx0TW91c2VNb3ZlKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaWQgIT09IHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCkge1xuICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSBpZDtcbiAgICAgIHRoaXMuI2FkZEZvY3VzZWRDbGFzcygpO1xuICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRWxlbWVudEZvY3VzZWQocmVmOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWYgPT09IHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdO1xuICB9XG5cbiAgI3NlYXJjaFRleHRDaGFuZ2VkKHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNoYXNGb2N1cykge1xuICAgICAgY29uc3QgaXNFbXB0eSA9XG4gICAgICAgICFzZWFyY2hUZXh0IHx8ICFzZWFyY2hUZXh0LnRyaW0oKSB8fCBzZWFyY2hUZXh0Lm1hdGNoKC9eXFxzKyQvKTtcblxuICAgICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgICAgLy8gRW1pdCBzZWxlY3Rpb25DaGFuZ2UgaWYgdmFsdWUgaGFzIGJlZW4gY2xlYXJlZC5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUgJiYgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTG9uZ0Vub3VnaCA9XG4gICAgICAgIHNlYXJjaFRleHQubGVuZ3RoID49IHRoaXMuc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzO1xuICAgICAgY29uc3QgaXNEaWZmZXJlbnQgPSBzZWFyY2hUZXh0ICE9PSB0aGlzLnNlYXJjaFRleHQ7XG5cbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQudHJpbSgpO1xuXG4gICAgICBpZiAoaXNMb25nRW5vdWdoICYmIGlzRGlmZmVyZW50KSB7XG4gICAgICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcblxuICAgICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViID0gdGhpcy4jcGVyZm9ybVNlYXJjaCgpXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcmVzdWx0Py5pdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbSAmJiB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eSBpbiBpdGVtO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPVxuICAgICAgICAgICAgICBpdGVtcz8ubWFwKChyLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50SWQ6IGAke3RoaXMucmVzdWx0c0xpc3RJZH0taXRlbS0ke2l9YCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHIsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9KSB8fCBbXTtcblxuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzQ291bnQgPSByZXN1bHQ/LnRvdGFsQ291bnQgfHwgMDtcblxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRUZXh0ID0gdGhpcy4jZ2V0SGlnaGxpZ2h0VGV4dCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgIC8vIExldCB0aGUgcmVzdWx0cyBwb3B1bGF0ZSBpbiB0aGUgRE9NIGJlZm9yZSByZWNhbGN1bGF0aW5nIHBsYWNlbWVudC5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2FmZml4ZXIucmVhZmZpeCgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLiNvcGVuRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICNwZXJmb3JtU2VhcmNoKCk6IE9ic2VydmFibGU8U2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQXN5bmNEaXNhYmxlZCAmJiB0aGlzLnNlYXJjaEFzeW5jLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWFyY2hBc3luY0FyZ3M6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jQXJncyA9IHtcbiAgICAgICAgZGlzcGxheVR5cGU6ICdwb3BvdmVyJyxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNlYXJjaEFzeW5jLmVtaXQoc2VhcmNoQXN5bmNBcmdzKTtcblxuICAgICAgcmV0dXJuIHNlYXJjaEFzeW5jQXJncy5yZXN1bHQgfHwgb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaE9yRGVmYXVsdCh0aGlzLnNlYXJjaFRleHQsIHRoaXMuZGF0YSwge1xuICAgICAgY29udGV4dDogJ3BvcG92ZXInLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICBpdGVtczogcmVzdWx0LFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb20ocmVzdWx0KS5waXBlKFxuICAgICAgbWFwKChpdGVtcykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgIHRvdGFsQ291bnQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gICNjYW5jZWxDdXJyZW50U2VhcmNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXJyZW50U2VhcmNoU3ViKSB7XG4gICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHRvIGhpZ2hsaWdodCBiYXNlZCBvbiBleGFjdCBtYXRjaGVzLCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoZXMsIGFuZCBtYXRjaGVzIGZvciBjb3JyZXNwb25kaW5nIGRpYWNyaXRpY2FsIGNoYXJhY3RlcnMgKGEgd2lsbCBtYXRjaCDDoCkuXG4gICAqL1xuICAjZ2V0SGlnaGxpZ2h0VGV4dChzZWFyY2hUZXh0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaFRleHQgPSBub3JtYWxpemVEaWFjcml0aWNzKHNlYXJjaFRleHQpXG4gICAgICAudG9Mb2NhbGVVcHBlckNhc2UoKVxuICAgICAgLnRyaW0oKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hUZXh0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IG1hdGNoZXNUb0hpZ2hsaWdodDogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHRoaXMuc2VhcmNoUmVzdWx0cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWFyY2hSZXN1bHRzW2ldLmRhdGFbdGhpcy5kZXNjcmlwdG9yUHJvcGVydHldXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC50b0xvY2FsZVVwcGVyQ2FzZSgpIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRhVmFsdWUgPSBub3JtYWxpemVEaWFjcml0aWNzKHZhbHVlKTtcblxuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgKGluZGV4ID0gbm9ybWFsaXplZERhdGFWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRTZWFyY2hUZXh0LCBvZmZzZXQpKSA+IC0xXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZFN0cmluZyA9IHZhbHVlLnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ID0gaW5kZXggKyBzZWFyY2hUZXh0Lmxlbmd0aDtcbiAgICAgICAgbWF0Y2hlc1RvSGlnaGxpZ2h0ID0gbWF0Y2hlc1RvSGlnaGxpZ2h0LmNvbmNhdChtYXRjaGVkU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYW55IGR1cGxpY2F0ZXMgZnJvbSB0aGUgYXJyYXkuXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KG1hdGNoZXNUb0hpZ2hsaWdodCldO1xuICB9XG5cbiAgI3NlbGVjdFNlYXJjaFJlc3VsdEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maW5kKChyKSA9PiByLmVsZW1lbnRJZCA9PT0gaWQpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gZGF0YVt0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eV07XG4gICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbHVlID0gZGF0YTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICBzZWxlY3RlZEl0ZW06IGRhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjb3BlbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jb3ZlcmxheSAmJiB0aGlzLnJlc3VsdHNUZW1wbGF0ZVJlZikge1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuI292ZXJsYXlTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIGVuYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogdHJ1ZSxcbiAgICAgICAgd3JhcHBlckNsYXNzOiB0aGlzLndyYXBwZXJDbGFzcyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy4jekluZGV4KSB7XG4gICAgICAgIHRoaXMuI3pJbmRleC5waXBlKHRha2VVbnRpbChvdmVybGF5LmNsb3NlZCkpLnN1YnNjcmliZSgoekluZGV4KSA9PiB7XG4gICAgICAgICAgb3ZlcmxheS5jb21wb25lbnRSZWYuaW5zdGFuY2UuekluZGV4ID0gekluZGV4LnRvU3RyaW5nKDEwKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG92ZXJsYXkuYXR0YWNoVGVtcGxhdGUodGhpcy5yZXN1bHRzVGVtcGxhdGVSZWYpO1xuXG4gICAgICB0aGlzLiNvdmVybGF5ID0gb3ZlcmxheTtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy4jdXBkYXRlQXJpYU93bnMoKTtcbiAgICAgIHRoaXMuI2luaXRPdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMoKTtcbiAgICB9XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNldFNlYXJjaCgpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy4jdXBkYXRlQXJpYU93bnMoKTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNzZXRBY3RpdmVEZXNjZW5kYW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPVxuICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzW3RoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleF07XG4gICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoYWN0aXZlRWxlbWVudCAmJiB0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnNldEFjdGl2ZURlc2NlbmRhbnQoYWN0aXZlRWxlbWVudC5pZCk7XG4gICAgfVxuICB9XG5cbiAgI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QWN0aXZlRGVzY2VuZGFudChudWxsKTtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlQXJpYU93bnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QXJpYU93bnModGhpcy4jb3ZlcmxheT8uaWQgfHwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgI3Jlc2V0U2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuaGlnaGxpZ2h0VGV4dCA9IFtdO1xuICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0c0NvdW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3JlbW92ZUFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB0aGlzLiNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAjYWRkSW5wdXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd24oZXZlbnQpO1xuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50UmVmLFxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzUmVmLFxuICAgICAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNkZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jb3ZlcmxheSkge1xuICAgICAgdGhpcy4jb3ZlcmxheVNlcnZpY2UuY2xvc2UodGhpcy4jb3ZlcmxheSk7XG4gICAgICB0aGlzLiNvdmVybGF5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNjcmVhdGVBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNhZmZpeGVyICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgY29uc3QgYWZmaXhlciA9IHRoaXMuI2FmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKHRoaXMucmVzdWx0c1JlZik7XG5cbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYsXG4gICAgICAgIHRoaXMucmVzdWx0c1JlZixcbiAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmNcbiAgICAgICk7XG5cbiAgICAgIGFmZml4ZXIuYWZmaXhUbyh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgIGVuYWJsZUF1dG9GaXQ6IHRydWUsXG4gICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICBwbGFjZW1lbnQ6ICdiZWxvdycsXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNhZmZpeGVyID0gYWZmaXhlcjtcbiAgICB9XG4gIH1cblxuICAjZGVzdHJveUFmZml4ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgIHRoaXMuI2FmZml4ZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy4jYWZmaXhlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAjaW5pdE1lc3NhZ2VTdHJlYW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIpIHtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy4jbWVzc2FnZVN0cmVhbVN1YiA9IHRoaXMubWVzc2FnZVN0cmVhbS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgIGNhc2UgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUuQ2xvc2VEcm9wZG93bjpcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUuUmVwb3NpdGlvbkRyb3Bkb3duOlxuICAgICAgICAgIC8vIFNldHRpbWVvdXQgd2FpdHMgZm9yIGNoYW5nZXMgaW4gRE9NIChlLmcuLCB0b2tlbnMgYmVpbmcgcmVtb3ZlZClcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy4jYWZmaXhlcikge1xuICAgICAgICAgICAgICB0aGlzLiNhZmZpeGVyLnJlYWZmaXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gICNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk6IHZvaWQge1xuICAgIC8vIFdhaXQgZm9yIGRyb3Bkb3duIGVsZW1lbnRzIHRvIHJlbmRlci5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cyA9XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKHRoaXMuI292ZXJsYXkpO1xuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRUYWJJbmRleChlbCwgLTEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAjZ2V0QWN0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdO1xuICB9XG5cbiAgI3JlbW92ZUZvY3VzZWRDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnJlbW92ZUNTU0NsYXNzKFxuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XSxcbiAgICAgICAgJ3NreS1hdXRvY29tcGxldGUtZGVzY2VuZGFudC1mb2N1cydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgI2FkZEZvY3VzZWRDbGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmFkZENTU0NsYXNzKFxuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XSxcbiAgICAgICAgJ3NreS1hdXRvY29tcGxldGUtZGVzY2VuZGFudC1mb2N1cydcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZURlZmF1bHRTZWFyY2hPcHRpb25zKCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGRlZmF1bHQgc2VhcmNoIGlmIGl0IGlzIHdoYXQgaXMgYmVpbmcgdXNlZC5cbiAgICBpZiAodGhpcy5zZWFyY2ggIT09IHRoaXMuc2VhcmNoT3JEZWZhdWx0KSB7XG4gICAgICB0aGlzLnNlYXJjaE9yRGVmYXVsdCA9IHNreUF1dG9jb21wbGV0ZURlZmF1bHRTZWFyY2hGdW5jdGlvbih7XG4gICAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogdGhpcy5wcm9wZXJ0aWVzVG9TZWFyY2gsXG4gICAgICAgIHNlYXJjaEZpbHRlcnM6IHRoaXMuc2VhcmNoRmlsdGVycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIlxuICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZVwiXG4gIHJvbGU9XCJjb21ib2JveFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgW2F0dHIuYXJpYS1vd25zXT1cImlzT3BlbiA/IHJlc3VsdHNMaXN0SWQgOiBudWxsXCJcbiAgW2F0dHIuaWRdPVwicmVzdWx0c1dyYXBwZXJJZFwiXG4+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3Jlc3VsdHNUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRzLWNvbnRhaW5lclwiXG4gICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgJ3NreS1zaGFkb3cnOiAnZGVmYXVsdCcsXG4gICAgICAnc2t5LWVsZXZhdGlvbi00JzogJ21vZGVybidcbiAgICB9XCJcbiAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duKCRldmVudClcIlxuICAgICNyZXN1bHRzUmVmXG4gID5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImlzU2VhcmNoaW5nQXN5bmM7IGVsc2UgcmVzdWx0Q29udHJvbHNUZW1wbGF0ZVJlZlwiXG4gICAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtcmVzdWx0cy13YWl0aW5nXCJcbiAgICA+XG4gICAgICA8c2t5LXdhaXQgW2lzV2FpdGluZ109XCJ0cnVlXCI+PC9za3ktd2FpdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Jlc3VsdENvbnRyb2xzVGVtcGxhdGVSZWY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInNlYXJjaFRleHQgJiYgKCFzaG93QWN0aW9uc0FyZWEgfHwgc2VhcmNoUmVzdWx0cy5sZW5ndGggPiAwKVwiXG4gICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLXJlc3VsdHNcIlxuICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgIFthdHRyLmlkXT1cInJlc3VsdHNMaXN0SWRcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVzdWx0IG9mIHNlYXJjaFJlc3VsdHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAoIXNlYXJjaFJlc3VsdHNMaW1pdCB8fCBpIDwgc2VhcmNoUmVzdWx0c0xpbWl0KSAmJlxuICAgICAgICAgICEoZW5hYmxlU2hvd01vcmUgJiYgaSA+PSA1KVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtcmVzdWx0XCJcbiAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNFbGVtZW50Rm9jdXNlZChzZWFyY2hSZXN1bHRFbClcIlxuICAgICAgICBbYXR0ci5kYXRhLWRlc2NyaXB0b3ItdmFsdWVdPVwicmVzdWx0LmRhdGFbZGVzY3JpcHRvclByb3BlcnR5XVwiXG4gICAgICAgIFthdHRyLmlkXT1cInJlc3VsdC5lbGVtZW50SWRcIlxuICAgICAgICBbc2t5SGlnaGxpZ2h0XT1cImhpZ2hsaWdodFRleHRcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uUmVzdWx0TW91c2VEb3duKHJlc3VsdC5lbGVtZW50SWQsICRldmVudClcIlxuICAgICAgICAobW91c2Vtb3ZlKT1cIm9uUmVzdWx0TW91c2VNb3ZlKGkpXCJcbiAgICAgICAgI3NlYXJjaFJlc3VsdEVsXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc2VhcmNoUmVzdWx0VGVtcGxhdGUgfHwgZGVmYXVsdFNlYXJjaFJlc3VsdFRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyBpdGVtOiByZXN1bHQuZGF0YSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDBcIlxuICAgICAgY2xhc3M9XCJza3ktZGVlbXBoYXNpemVkIHNreS1wYWRkaW5nLXNxdWlzaC1kZWZhdWx0XCJcbiAgICA+XG4gICAgICB7e1xuICAgICAgICBub1Jlc3VsdHNGb3VuZFRleHQgfHxcbiAgICAgICAgICAoJ3NreXV4X2F1dG9jb21wbGV0ZV9ub19yZXN1bHRzJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0FjdGlvbnNBcmVhXCIgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLWFjdGlvbnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImVuYWJsZVNob3dNb3JlICYmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApXCJcbiAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24gc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24tbW9yZSBza3ktYnRuIHNreS1idG4tbGlua1wiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChtb3VzZWRvd24pPVwibW9yZUJ1dHRvbkNsaWNrZWQoKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBzZWFyY2hBc3luY1xuICAgICAgICAgICAgfCBza3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0Rpc2FibGVkOiBzZWFyY2hBc3luY0Rpc2FibGVkXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgIHNlYXJjaFJlc3VsdHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgIXNlYXJjaFRleHRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NreXV4X2F1dG9jb21wbGV0ZV9zaG93X2FsbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIChzZWFyY2hBc3luY1xuICAgICAgICAgICAgfCBza3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0Rpc2FibGVkOiBzZWFyY2hBc3luY0Rpc2FibGVkKSAmJlxuICAgICAgICAgICFzZWFyY2hUZXh0XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ3NreXV4X2F1dG9jb21wbGV0ZV9zaG93X2FsbF9jb3VudCdcbiAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzOiAoZGF0YS5sZW5ndGggfCBza3lOdW1lcmljOiB7IHRydW5jYXRlOiBmYWxzZSB9KVxuICAgICAgICB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoVGV4dFwiPlxuICAgICAgICB7e1xuICAgICAgICAgICdza3l1eF9hdXRvY29tcGxldGVfc2hvd19tYXRjaGVzX2NvdW50J1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgOiAoc2VhcmNoUmVzdWx0c0NvdW50ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8gZGF0YS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIDogKHNlYXJjaFJlc3VsdHNDb3VudCB8IHNreU51bWVyaWM6IHsgdHJ1bmNhdGU6IGZhbHNlIH0pKVxuICAgICAgICB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzZWFyY2hUZXh0ICYmIHNlYXJjaFJlc3VsdHMubGVuZ3RoID09PSAwXCJcbiAgICAgIGNsYXNzPVwic2t5LWZvbnQtZGVlbXBoYXNpemVkIHNreS1hdXRvY29tcGxldGUtYWN0aW9ucy1uby1yZXN1bHRzXCJcbiAgICA+XG4gICAgICB7e1xuICAgICAgICBub1Jlc3VsdHNGb3VuZFRleHQgfHxcbiAgICAgICAgICAoJ3NreXV4X2F1dG9jb21wbGV0ZV9ub19yZXN1bHRzJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIH19XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJzaG93QWRkQnV0dG9uXCJcbiAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24gc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24tYWRkIHNreS1idG4gc2t5LWJ0bi1saW5rXCJcbiAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzRWxlbWVudEZvY3VzZWQoYWRkQnV0dG9uRWwpXCJcbiAgICAgIChtb3VzZWRvd24pPVwiYWRkQnV0dG9uQ2xpY2tlZCgpXCJcbiAgICAgICNhZGRCdXR0b25FbFxuICAgID5cbiAgICAgIDxza3ktaWNvbiAqc2t5VGhlbWVJZj1cIidtb2Rlcm4nXCIgaWNvbj1cImFkZFwiIGljb25UeXBlPVwic2t5dXhcIj48L3NreS1pY29uPlxuICAgICAgPHNreS1pY29uICpza3lUaGVtZUlmPVwiJ2RlZmF1bHQnXCIgaWNvbj1cInBsdXMtY2lyY2xlXCI+PC9za3ktaWNvbj5cbiAgICAgIHt7ICdza3l1eF9hdXRvY29tcGxldGVfYWRkJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiAjZGVmYXVsdFNlYXJjaFJlc3VsdFRlbXBsYXRlPlxuICB7eyBpdGVtW2Rlc2NyaXB0b3JQcm9wZXJ0eV0gfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -90,6 +90,7 @@ _SkyCountryFieldFixture_debugEl = new WeakMap(), _SkyCountryFieldFixture_fixture
|
|
|
90
90
|
}, _SkyCountryFieldFixture_enterSearch = function _SkyCountryFieldFixture_enterSearch(newValue, fixture) {
|
|
91
91
|
const inputElement = __classPrivateFieldGet(this, _SkyCountryFieldFixture_instances, "m", _SkyCountryFieldFixture_getInputElement).call(this);
|
|
92
92
|
inputElement.value = newValue;
|
|
93
|
+
SkyAppTestUtility.fireDomEvent(inputElement, 'focus');
|
|
93
94
|
SkyAppTestUtility.fireDomEvent(inputElement, 'keyup');
|
|
94
95
|
SkyAppTestUtility.fireDomEvent(inputElement, 'input');
|
|
95
96
|
fixture.detectChanges();
|
|
@@ -110,4 +111,4 @@ _SkyCountryFieldFixture_debugEl = new WeakMap(), _SkyCountryFieldFixture_fixture
|
|
|
110
111
|
SkyAppTestUtility.fireDomEvent(searchResults[index], 'mousedown');
|
|
111
112
|
__classPrivateFieldGet(this, _SkyCountryFieldFixture_instances, "m", _SkyCountryFieldFixture_blurInput).call(this, fixture);
|
|
112
113
|
};
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1maWVsZC1maXh0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC90ZXN0aW5nL3NyYy9jb3VudHJ5LWZpZWxkL2NvdW50cnktZmllbGQtZml4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBb0NqQyxZQUFZLE9BQThCLEVBQUUsU0FBaUI7O1FBbkM3RCxrREFBdUI7UUFpQ3ZCLGtEQUFnQztRQUc5Qix1QkFBQSxJQUFJLG1DQUFZLE9BQU8sTUFBQSxDQUFDO1FBQ3hCLHVCQUFBLElBQUksbUNBQVksaUJBQWlCLENBQUMsdUJBQXVCLENBQ3ZELE9BQU8sRUFDUCxTQUFTLEVBQ1QsbUJBQW1CLENBQ3BCLE1BQUEsQ0FBQztJQUNKLENBQUM7SUF4Q0Q7O09BRUc7SUFDSCxJQUFXLHFCQUFxQjtRQUM5QixPQUFPLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLG9CQUFvQjtRQUM3QixNQUFNLElBQUksR0FBRyx1QkFBQSxJQUFJLGlGQUFnQixNQUFwQixJQUFJLENBQWtCLENBQUM7UUFDcEMsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sdUJBQUEsSUFBSSxrRkFBaUIsTUFBckIsSUFBSSxDQUFtQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBYUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBa0I7UUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBQSxJQUFJLHNGQUFxQixNQUF6QixJQUFJLEVBQzVCLFVBQVUsRUFDVix1QkFBQSxJQUFJLHVDQUFTLENBQ2QsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBbUIsRUFBRSxFQUFFO1lBQ3RELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNsRSxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFFLENBQUM7WUFDOUQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCx1QkFBQSxJQUFJLHVDQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsTUFBTSx1QkFBQSxJQUFJLHVDQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFakMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxVQUFrQjtRQUN4RCxNQUFNLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksRUFBa0IsVUFBVSxFQUFFLENBQUMsRUFBRSx1QkFBQSxJQUFJLHVDQUFTLENBQUMsQ0FBQztRQUUxRCx1QkFBQSxJQUFJLHVDQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsT0FBTyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLHVCQUFBLElBQUksOEVBQWEsTUFBakIsSUFBSSxFQUFjLEVBQUUsRUFBRSx1QkFBQSxJQUFJLHVDQUFTLENBQUMsQ0FBQztRQUVyQyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsT0FBTyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEMsQ0FBQztDQWtFRjs7SUE3REcsT0FBTyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7SUFHQyxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQWdCLENBQUM7QUFDNUUsQ0FBQztJQUdDLE1BQU0sT0FBTyxHQUFHLHVCQUFBLElBQUksdUNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sT0FBTyxDQUFDLGFBQW9DLENBQUM7QUFDdEQsQ0FBQyxpRkFFVSxPQUE4QjtJQUN2QyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsdUJBQUEsSUFBSSxrRkFBaUIsTUFBckIsSUFBSSxDQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QixPQUFPLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5QixDQUFDLHFGQUdDLFFBQWdCLEVBQ2hCLE9BQThCO0lBRTlCLE1BQU0sWUFBWSxHQUFHLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQztJQUM3QyxZQUFZLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztJQUM5QixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hCLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzlCLENBQUMsZ0RBRUQsS0FBSyxzREFDSCxRQUFnQixFQUNoQixPQUE4QjtJQUU5QixNQUFNLHVCQUFBLElBQUksOEVBQWEsTUFBakIsSUFBSSxFQUFjLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEIsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0IsT0FBTyx1QkFBQSxJQUFJLHlGQUF3QixNQUE1QixJQUFJLENBQTBCLENBQUMsZ0JBQWdCLENBQ3BELDBCQUEwQixDQUMzQixDQUFDO0FBQ0osQ0FBQyw0Q0FFRCxLQUFLLGtEQUNILFFBQWdCLEVBQ2hCLEtBQWEsRUFDYixPQUE4QjtJQUU5QixNQUFNLFlBQVksR0FBRyx1QkFBQSxJQUFJLGtGQUFpQixNQUFyQixJQUFJLENBQW1CLENBQUM7SUFDN0MsTUFBTSxhQUFhLEdBQUcsTUFBTSx1QkFBQSxJQUFJLHNGQUFxQixNQUF6QixJQUFJLEVBQXNCLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV6RSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRTtRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7S0FDbkQ7SUFFRCxtREFBbUQ7SUFDbkQsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RCxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xFLHVCQUFBLElBQUksNEVBQVcsTUFBZixJQUFJLEVBQVksT0FBTyxDQUFDLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlYnVnRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Rml4dHVyZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBCeSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgU2t5QXBwVGVzdFV0aWxpdHkgfSBmcm9tICdAc2t5dXgtc2RrL3Rlc3RpbmcnO1xuXG4vKipcbiAqIEFsbG93cyBpbnRlcmFjdGlvbiB3aXRoIGEgU0tZIFVYIGNvdW50cnkgZmllbGQgY29tcG9uZW50LlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lDb3VudHJ5RmllbGRGaXh0dXJlIHtcbiAgI2RlYnVnRWw6IERlYnVnRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBmaWVsZCdzIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZUF0dHJpYnV0ZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy4jZ2V0SW5wdXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZsYWcgaW5kaWNhdGluZyBpZiB0aGUgY291bnRyeSBmbGFnIGlzIGN1cnJlbnRseSB2aXNpYmxlLlxuICAgKiBUaGUgZmxhZyB3aWxsIGJlIHZpc2libGUgb25seSBpZiBhIHNlbGVjdGlvbiBoYXMgYmVlbiBtYWRlXG4gICAqIGFuZCBpZiB0aGUgaGlkZVNlbGVjdGVkQ291bnRyeUZsYWcgb3B0aW9uIGlzIGZhbHNlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb3VudHJ5RmxhZ0lzVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBmbGFnID0gdGhpcy4jZ2V0Q291bnRyeUZsYWcoKTtcbiAgICByZXR1cm4gZmxhZyAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaGFzIGJlZW4gZGlzYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNnZXRJbnB1dEVsZW1lbnQoKS5kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcHVibGljIGdldCBzZWFyY2hUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2dldElucHV0RWxlbWVudCgpLnZhbHVlO1xuICB9XG5cbiAgI2ZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55PjtcblxuICBjb25zdHJ1Y3RvcihmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT4sIHNreVRlc3RJZDogc3RyaW5nKSB7XG4gICAgdGhpcy4jZml4dHVyZSA9IGZpeHR1cmU7XG4gICAgdGhpcy4jZGVidWdFbCA9IFNreUFwcFRlc3RVdGlsaXR5LmdldERlYnVnRWxlbWVudEJ5VGVzdElkKFxuICAgICAgZml4dHVyZSxcbiAgICAgIHNreVRlc3RJZCxcbiAgICAgICdza3ktY291bnRyeS1maWVsZCdcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGVycyB0aGUgc2VhcmNoIHRleHQgaW50byB0aGUgaW5wdXQgZmllbGQgZGlzcGxheWluZyBzZWFyY2ggcmVzdWx0cywgYnV0IG1ha2luZyBubyBzZWxlY3Rpb24uXG4gICAqIEBwYXJhbSBzZWFyY2hUZXh0IFRoZSBuYW1lIG9mIHRoZSBjb3VudHJ5IHRvIHNlbGVjdC5cbiAgICogQHJldHVybnMgVGhlIGxpc3Qgb2YgY291bnRyeSBuYW1lcyBtYXRjaGluZyB0aGUgc2VhcmNoIHRleHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VhcmNoKHNlYXJjaFRleHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByZXN1bHROb2RlcyA9IGF3YWl0IHRoaXMuI3NlYXJjaEFuZEdldFJlc3VsdHMoXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgdGhpcy4jZml4dHVyZVxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0QXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyZXN1bHROb2Rlcyk7XG4gICAgY29uc3QgcmVzdWx0cyA9IHJlc3VsdEFycmF5Lm1hcCgocmVzdWx0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgY291bnRyeU5hbWVFbCA9IHJlc3VsdC5xdWVyeVNlbGVjdG9yKCcuc2t5LWhpZ2hsaWdodC1tYXJrJyk7XG4gICAgICBjb25zdCBjb3VudHJ5TmFtZSA9IFNreUFwcFRlc3RVdGlsaXR5LmdldFRleHQoY291bnRyeU5hbWVFbCkhO1xuICAgICAgcmV0dXJuIGNvdW50cnlOYW1lO1xuICAgIH0pO1xuXG4gICAgdGhpcy4jZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgYXdhaXQgdGhpcy4jZml4dHVyZS53aGVuU3RhYmxlKCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnRlcnMgdGhlIHNlYXJjaCB0ZXh0IGludG8gdGhlIGlucHV0IGZpZWxkIGFuZCBzZWxlY3RzIHRoZSBmaXJzdCByZXN1bHQgKGlmIGFueSkuXG4gICAqIEBwYXJhbSBzZWFyY2hUZXh0IFRoZSBuYW1lIG9mIHRoZSBjb3VudHJ5IHRvIHNlbGVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZWFyY2hBbmRTZWxlY3RGaXJzdFJlc3VsdChzZWFyY2hUZXh0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLiNzZWFyY2hBbmRTZWxlY3Qoc2VhcmNoVGV4dCwgMCwgdGhpcy4jZml4dHVyZSk7XG5cbiAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gdGhpcy4jZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjb3VudHJ5IHNlbGVjdGlvbiBhbmQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy4jZW50ZXJTZWFyY2goJycsIHRoaXMuI2ZpeHR1cmUpO1xuXG4gICAgdGhpcy4jZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIHRoaXMuI2ZpeHR1cmUud2hlblN0YWJsZSgpO1xuICB9XG5cbiAgLy8jcmVnaW9uIGhlbHBlcnNcblxuICAjZ2V0Q291bnRyeUZsYWcoKTogRGVidWdFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy4jZGVidWdFbC5xdWVyeShCeS5jc3MoJy5za3ktY291bnRyeS1maWVsZC1mbGFnJykpO1xuICB9XG5cbiAgI2dldEF1dG9jb21wbGV0ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRzJykgYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICAjZ2V0SW5wdXRFbGVtZW50KCk6IEhUTUxUZXh0QXJlYUVsZW1lbnQge1xuICAgIGNvbnN0IGRlYnVnRWwgPSB0aGlzLiNkZWJ1Z0VsLnF1ZXJ5KEJ5LmNzcygndGV4dGFyZWEnKSk7XG4gICAgcmV0dXJuIGRlYnVnRWwubmF0aXZlRWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICB9XG5cbiAgI2JsdXJJbnB1dChmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBTa3lBcHBUZXN0VXRpbGl0eS5maXJlRG9tRXZlbnQodGhpcy4jZ2V0SW5wdXRFbGVtZW50KCksICdibHVyJyk7XG4gICAgZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIGZpeHR1cmUud2hlblN0YWJsZSgpO1xuICB9XG5cbiAgI2VudGVyU2VhcmNoKFxuICAgIG5ld1ZhbHVlOiBzdHJpbmcsXG4gICAgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuI2dldElucHV0RWxlbWVudCgpO1xuICAgIGlucHV0RWxlbWVudC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIFNreUFwcFRlc3RVdGlsaXR5LmZpcmVEb21FdmVudChpbnB1dEVsZW1lbnQsICdrZXl1cCcpO1xuICAgIFNreUFwcFRlc3RVdGlsaXR5LmZpcmVEb21FdmVudChpbnB1dEVsZW1lbnQsICdpbnB1dCcpO1xuICAgIGZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiBmaXh0dXJlLndoZW5TdGFibGUoKTtcbiAgfVxuXG4gIGFzeW5jICNzZWFyY2hBbmRHZXRSZXN1bHRzKFxuICAgIG5ld1ZhbHVlOiBzdHJpbmcsXG4gICAgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+XG4gICk6IFByb21pc2U8Tm9kZUxpc3RPZjxIVE1MRWxlbWVudD4+IHtcbiAgICBhd2FpdCB0aGlzLiNlbnRlclNlYXJjaChuZXdWYWx1ZSwgZml4dHVyZSk7XG4gICAgZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgYXdhaXQgZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gICAgcmV0dXJuIHRoaXMuI2dldEF1dG9jb21wbGV0ZUVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJy5za3ktYXV0b2NvbXBsZXRlLXJlc3VsdCdcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgI3NlYXJjaEFuZFNlbGVjdChcbiAgICBuZXdWYWx1ZTogc3RyaW5nLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuI2dldElucHV0RWxlbWVudCgpO1xuICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBhd2FpdCB0aGlzLiNzZWFyY2hBbmRHZXRSZXN1bHRzKG5ld1ZhbHVlLCBmaXh0dXJlKTtcblxuICAgIGlmIChzZWFyY2hSZXN1bHRzLmxlbmd0aCA8IGluZGV4ICsgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UgZm9yIHJlc3VsdHMnKTtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiB0aGUgb3JkZXJpbmcgb2YgdGhlc2UgZXZlbnRzIGlzIGltcG9ydGFudCFcbiAgICBTa3lBcHBUZXN0VXRpbGl0eS5maXJlRG9tRXZlbnQoaW5wdXRFbGVtZW50LCAnY2hhbmdlJyk7XG4gICAgU2t5QXBwVGVzdFV0aWxpdHkuZmlyZURvbUV2ZW50KHNlYXJjaFJlc3VsdHNbaW5kZXhdLCAnbW91c2Vkb3duJyk7XG4gICAgdGhpcy4jYmx1cklucHV0KGZpeHR1cmUpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uIGhlbHBlcnNcbn1cbiJdfQ==
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1maWVsZC1maXh0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC90ZXN0aW5nL3NyYy9jb3VudHJ5LWZpZWxkL2NvdW50cnktZmllbGQtZml4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBb0NqQyxZQUFZLE9BQThCLEVBQUUsU0FBaUI7O1FBbkM3RCxrREFBdUI7UUFpQ3ZCLGtEQUFnQztRQUc5Qix1QkFBQSxJQUFJLG1DQUFZLE9BQU8sTUFBQSxDQUFDO1FBQ3hCLHVCQUFBLElBQUksbUNBQVksaUJBQWlCLENBQUMsdUJBQXVCLENBQ3ZELE9BQU8sRUFDUCxTQUFTLEVBQ1QsbUJBQW1CLENBQ3BCLE1BQUEsQ0FBQztJQUNKLENBQUM7SUF4Q0Q7O09BRUc7SUFDSCxJQUFXLHFCQUFxQjtRQUM5QixPQUFPLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLG9CQUFvQjtRQUM3QixNQUFNLElBQUksR0FBRyx1QkFBQSxJQUFJLGlGQUFnQixNQUFwQixJQUFJLENBQWtCLENBQUM7UUFDcEMsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sdUJBQUEsSUFBSSxrRkFBaUIsTUFBckIsSUFBSSxDQUFtQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBYUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBa0I7UUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBQSxJQUFJLHNGQUFxQixNQUF6QixJQUFJLEVBQzVCLFVBQVUsRUFDVix1QkFBQSxJQUFJLHVDQUFTLENBQ2QsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBbUIsRUFBRSxFQUFFO1lBQ3RELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNsRSxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFFLENBQUM7WUFDOUQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCx1QkFBQSxJQUFJLHVDQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsTUFBTSx1QkFBQSxJQUFJLHVDQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFakMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxVQUFrQjtRQUN4RCxNQUFNLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksRUFBa0IsVUFBVSxFQUFFLENBQUMsRUFBRSx1QkFBQSxJQUFJLHVDQUFTLENBQUMsQ0FBQztRQUUxRCx1QkFBQSxJQUFJLHVDQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsT0FBTyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLHVCQUFBLElBQUksOEVBQWEsTUFBakIsSUFBSSxFQUFjLEVBQUUsRUFBRSx1QkFBQSxJQUFJLHVDQUFTLENBQUMsQ0FBQztRQUVyQyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsT0FBTyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEMsQ0FBQztDQW1FRjs7SUE5REcsT0FBTyx1QkFBQSxJQUFJLHVDQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7SUFHQyxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQWdCLENBQUM7QUFDNUUsQ0FBQztJQUdDLE1BQU0sT0FBTyxHQUFHLHVCQUFBLElBQUksdUNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sT0FBTyxDQUFDLGFBQW9DLENBQUM7QUFDdEQsQ0FBQyxpRkFFVSxPQUE4QjtJQUN2QyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsdUJBQUEsSUFBSSxrRkFBaUIsTUFBckIsSUFBSSxDQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QixPQUFPLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5QixDQUFDLHFGQUdDLFFBQWdCLEVBQ2hCLE9BQThCO0lBRTlCLE1BQU0sWUFBWSxHQUFHLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQztJQUM3QyxZQUFZLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztJQUM5QixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEQsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEIsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDOUIsQ0FBQyxnREFFRCxLQUFLLHNEQUNILFFBQWdCLEVBQ2hCLE9BQThCO0lBRTlCLE1BQU0sdUJBQUEsSUFBSSw4RUFBYSxNQUFqQixJQUFJLEVBQWMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QixNQUFNLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixPQUFPLHVCQUFBLElBQUkseUZBQXdCLE1BQTVCLElBQUksQ0FBMEIsQ0FBQyxnQkFBZ0IsQ0FDcEQsMEJBQTBCLENBQzNCLENBQUM7QUFDSixDQUFDLDRDQUVELEtBQUssa0RBQ0gsUUFBZ0IsRUFDaEIsS0FBYSxFQUNiLE9BQThCO0lBRTlCLE1BQU0sWUFBWSxHQUFHLHVCQUFBLElBQUksa0ZBQWlCLE1BQXJCLElBQUksQ0FBbUIsQ0FBQztJQUM3QyxNQUFNLGFBQWEsR0FBRyxNQUFNLHVCQUFBLElBQUksc0ZBQXFCLE1BQXpCLElBQUksRUFBc0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXpFLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztLQUNuRDtJQUVELG1EQUFtRDtJQUNuRCxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEUsdUJBQUEsSUFBSSw0RUFBVyxNQUFmLElBQUksRUFBWSxPQUFPLENBQUMsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVidWdFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRGaXh0dXJlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IEJ5IH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTa3lBcHBUZXN0VXRpbGl0eSB9IGZyb20gJ0Bza3l1eC1zZGsvdGVzdGluZyc7XG5cbi8qKlxuICogQWxsb3dzIGludGVyYWN0aW9uIHdpdGggYSBTS1kgVVggY291bnRyeSBmaWVsZCBjb21wb25lbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreUNvdW50cnlGaWVsZEZpeHR1cmUge1xuICAjZGVidWdFbDogRGVidWdFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGlucHV0IGZpZWxkJ3MgYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlQXR0cmlidXRlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLiNnZXRJbnB1dEVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoJ2F1dG9jb21wbGV0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBjb3VudHJ5IGZsYWcgaXMgY3VycmVudGx5IHZpc2libGUuXG4gICAqIFRoZSBmbGFnIHdpbGwgYmUgdmlzaWJsZSBvbmx5IGlmIGEgc2VsZWN0aW9uIGhhcyBiZWVuIG1hZGVcbiAgICogYW5kIGlmIHRoZSBoaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZyBvcHRpb24gaXMgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvdW50cnlGbGFnSXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZsYWcgPSB0aGlzLiNnZXRDb3VudHJ5RmxhZygpO1xuICAgIHJldHVybiBmbGFnICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCBoYXMgYmVlbiBkaXNhYmxlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2dldElucHV0RWxlbWVudCgpLmRpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgZmllbGQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlYXJjaFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZ2V0SW5wdXRFbGVtZW50KCkudmFsdWU7XG4gIH1cblxuICAjZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55Piwgc2t5VGVzdElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLiNmaXh0dXJlID0gZml4dHVyZTtcbiAgICB0aGlzLiNkZWJ1Z0VsID0gU2t5QXBwVGVzdFV0aWxpdHkuZ2V0RGVidWdFbGVtZW50QnlUZXN0SWQoXG4gICAgICBmaXh0dXJlLFxuICAgICAgc2t5VGVzdElkLFxuICAgICAgJ3NreS1jb3VudHJ5LWZpZWxkJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRW50ZXJzIHRoZSBzZWFyY2ggdGV4dCBpbnRvIHRoZSBpbnB1dCBmaWVsZCBkaXNwbGF5aW5nIHNlYXJjaCByZXN1bHRzLCBidXQgbWFraW5nIG5vIHNlbGVjdGlvbi5cbiAgICogQHBhcmFtIHNlYXJjaFRleHQgVGhlIG5hbWUgb2YgdGhlIGNvdW50cnkgdG8gc2VsZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBjb3VudHJ5IG5hbWVzIG1hdGNoaW5nIHRoZSBzZWFyY2ggdGV4dC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZWFyY2goc2VhcmNoVGV4dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJlc3VsdE5vZGVzID0gYXdhaXQgdGhpcy4jc2VhcmNoQW5kR2V0UmVzdWx0cyhcbiAgICAgIHNlYXJjaFRleHQsXG4gICAgICB0aGlzLiNmaXh0dXJlXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHRBcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHJlc3VsdE5vZGVzKTtcbiAgICBjb25zdCByZXN1bHRzID0gcmVzdWx0QXJyYXkubWFwKChyZXN1bHQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBjb3VudHJ5TmFtZUVsID0gcmVzdWx0LnF1ZXJ5U2VsZWN0b3IoJy5za3ktaGlnaGxpZ2h0LW1hcmsnKTtcbiAgICAgIGNvbnN0IGNvdW50cnlOYW1lID0gU2t5QXBwVGVzdFV0aWxpdHkuZ2V0VGV4dChjb3VudHJ5TmFtZUVsKSE7XG4gICAgICByZXR1cm4gY291bnRyeU5hbWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICBhd2FpdCB0aGlzLiNmaXh0dXJlLndoZW5TdGFibGUoKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGVycyB0aGUgc2VhcmNoIHRleHQgaW50byB0aGUgaW5wdXQgZmllbGQgYW5kIHNlbGVjdHMgdGhlIGZpcnN0IHJlc3VsdCAoaWYgYW55KS5cbiAgICogQHBhcmFtIHNlYXJjaFRleHQgVGhlIG5hbWUgb2YgdGhlIGNvdW50cnkgdG8gc2VsZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlYXJjaEFuZFNlbGVjdEZpcnN0UmVzdWx0KHNlYXJjaFRleHQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuI3NlYXJjaEFuZFNlbGVjdChzZWFyY2hUZXh0LCAwLCB0aGlzLiNmaXh0dXJlKTtcblxuICAgIHRoaXMuI2ZpeHR1cmUuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0aGlzLiNmaXh0dXJlLndoZW5TdGFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGNvdW50cnkgc2VsZWN0aW9uIGFuZCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiNlbnRlclNlYXJjaCgnJywgdGhpcy4jZml4dHVyZSk7XG5cbiAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gdGhpcy4jZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gIH1cblxuICAvLyNyZWdpb24gaGVscGVyc1xuXG4gICNnZXRDb3VudHJ5RmxhZygpOiBEZWJ1Z0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLiNkZWJ1Z0VsLnF1ZXJ5KEJ5LmNzcygnLnNreS1jb3VudHJ5LWZpZWxkLWZsYWcnKSk7XG4gIH1cblxuICAjZ2V0QXV0b2NvbXBsZXRlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za3ktYXV0b2NvbXBsZXRlLXJlc3VsdHMnKSBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gICNnZXRJbnB1dEVsZW1lbnQoKTogSFRNTFRleHRBcmVhRWxlbWVudCB7XG4gICAgY29uc3QgZGVidWdFbCA9IHRoaXMuI2RlYnVnRWwucXVlcnkoQnkuY3NzKCd0ZXh0YXJlYScpKTtcbiAgICByZXR1cm4gZGVidWdFbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIH1cblxuICAjYmx1cklucHV0KGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55Pik6IFByb21pc2U8dm9pZD4ge1xuICAgIFNreUFwcFRlc3RVdGlsaXR5LmZpcmVEb21FdmVudCh0aGlzLiNnZXRJbnB1dEVsZW1lbnQoKSwgJ2JsdXInKTtcbiAgICBmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gIH1cblxuICAjZW50ZXJTZWFyY2goXG4gICAgbmV3VmFsdWU6IHN0cmluZyxcbiAgICBmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy4jZ2V0SW5wdXRFbGVtZW50KCk7XG4gICAgaW5wdXRFbGVtZW50LnZhbHVlID0gbmV3VmFsdWU7XG4gICAgU2t5QXBwVGVzdFV0aWxpdHkuZmlyZURvbUV2ZW50KGlucHV0RWxlbWVudCwgJ2ZvY3VzJyk7XG4gICAgU2t5QXBwVGVzdFV0aWxpdHkuZmlyZURvbUV2ZW50KGlucHV0RWxlbWVudCwgJ2tleXVwJyk7XG4gICAgU2t5QXBwVGVzdFV0aWxpdHkuZmlyZURvbUV2ZW50KGlucHV0RWxlbWVudCwgJ2lucHV0Jyk7XG4gICAgZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIGZpeHR1cmUud2hlblN0YWJsZSgpO1xuICB9XG5cbiAgYXN5bmMgI3NlYXJjaEFuZEdldFJlc3VsdHMoXG4gICAgbmV3VmFsdWU6IHN0cmluZyxcbiAgICBmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT5cbiAgKTogUHJvbWlzZTxOb2RlTGlzdE9mPEhUTUxFbGVtZW50Pj4ge1xuICAgIGF3YWl0IHRoaXMuI2VudGVyU2VhcmNoKG5ld1ZhbHVlLCBmaXh0dXJlKTtcbiAgICBmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICBhd2FpdCBmaXh0dXJlLndoZW5TdGFibGUoKTtcbiAgICByZXR1cm4gdGhpcy4jZ2V0QXV0b2NvbXBsZXRlRWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnLnNreS1hdXRvY29tcGxldGUtcmVzdWx0J1xuICAgICk7XG4gIH1cblxuICBhc3luYyAjc2VhcmNoQW5kU2VsZWN0KFxuICAgIG5ld1ZhbHVlOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy4jZ2V0SW5wdXRFbGVtZW50KCk7XG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGF3YWl0IHRoaXMuI3NlYXJjaEFuZEdldFJlc3VsdHMobmV3VmFsdWUsIGZpeHR1cmUpO1xuXG4gICAgaWYgKHNlYXJjaFJlc3VsdHMubGVuZ3RoIDwgaW5kZXggKyAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZSBmb3IgcmVzdWx0cycpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IHRoZSBvcmRlcmluZyBvZiB0aGVzZSBldmVudHMgaXMgaW1wb3J0YW50IVxuICAgIFNreUFwcFRlc3RVdGlsaXR5LmZpcmVEb21FdmVudChpbnB1dEVsZW1lbnQsICdjaGFuZ2UnKTtcbiAgICBTa3lBcHBUZXN0VXRpbGl0eS5maXJlRG9tRXZlbnQoc2VhcmNoUmVzdWx0c1tpbmRleF0sICdtb3VzZWRvd24nKTtcbiAgICB0aGlzLiNibHVySW5wdXQoZml4dHVyZSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb24gaGVscGVyc1xufVxuIl19
|
|
@@ -417,6 +417,7 @@ _SkyCountryFieldFixture_debugEl = new WeakMap(), _SkyCountryFieldFixture_fixture
|
|
|
417
417
|
}, _SkyCountryFieldFixture_enterSearch = function _SkyCountryFieldFixture_enterSearch(newValue, fixture) {
|
|
418
418
|
const inputElement = __classPrivateFieldGet(this, _SkyCountryFieldFixture_instances, "m", _SkyCountryFieldFixture_getInputElement).call(this);
|
|
419
419
|
inputElement.value = newValue;
|
|
420
|
+
SkyAppTestUtility.fireDomEvent(inputElement, 'focus');
|
|
420
421
|
SkyAppTestUtility.fireDomEvent(inputElement, 'keyup');
|
|
421
422
|
SkyAppTestUtility.fireDomEvent(inputElement, 'input');
|
|
422
423
|
fixture.detectChanges();
|