@ethlete/core 4.10.0 → 4.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/esm2022/lib/components/structured-data/structured-data.component.mjs +3 -3
- package/esm2022/lib/directives/animatable/animatable.directive.mjs +3 -3
- package/esm2022/lib/directives/animated-if/animated-if.directive.mjs +3 -3
- package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +6 -5
- package/esm2022/lib/directives/animated-overlay/animated-overlay.directive.mjs +3 -3
- package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +3 -3
- package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +3 -3
- package/esm2022/lib/directives/debug/debug.directive.mjs +3 -3
- package/esm2022/lib/directives/delayable/delayable.directive.mjs +3 -3
- package/esm2022/lib/directives/is-active-element/is-active-element.directive.mjs +3 -3
- package/esm2022/lib/directives/is-element/is-element.directive.mjs +3 -3
- package/esm2022/lib/directives/let/let.directive.mjs +3 -3
- package/esm2022/lib/directives/observe-content/observe-content.directive.mjs +3 -3
- package/esm2022/lib/directives/observe-resize/observe-resize.directive.mjs +3 -3
- package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +3 -3
- package/esm2022/lib/directives/observe-visibility/observe-visibility.directive.mjs +3 -3
- package/esm2022/lib/directives/repeat/repeat.directive.mjs +3 -3
- package/esm2022/lib/directives/root-boundary/root-boundary.directive.mjs +3 -3
- package/esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +3 -3
- package/esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +3 -3
- package/esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +3 -3
- package/esm2022/lib/directives/seo/seo.directive.mjs +3 -3
- package/esm2022/lib/pipes/infer-mime-type/infer-mime-type.pipe.mjs +3 -3
- package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +3 -3
- package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +3 -3
- package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +3 -3
- package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +3 -3
- package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +3 -3
- package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +3 -3
- package/esm2022/lib/props/props.directive.mjs +3 -3
- package/esm2022/lib/services/click-observer.service.mjs +6 -6
- package/esm2022/lib/services/content-observer.service.mjs +6 -6
- package/esm2022/lib/services/focus-visible.service.mjs +3 -3
- package/esm2022/lib/services/intersection-observer.service.mjs +6 -6
- package/esm2022/lib/services/resize-observer.service.mjs +6 -6
- package/esm2022/lib/services/router-state.service.mjs +3 -3
- package/esm2022/lib/services/viewport.service.mjs +3 -3
- package/esm2022/lib/utils/intersection-observer.utils.mjs +50 -12
- package/esm2022/lib/utils/signal.utils.mjs +70 -1
- package/fesm2022/ethlete-core.mjs +1601 -1494
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/lib/directives/animated-lifecycle/animated-lifecycle.directive.d.ts +3 -3
- package/lib/utils/intersection-observer.utils.d.ts +36 -10
- package/lib/utils/signal.utils.d.ts +31 -1
- package/package.json +7 -7
|
@@ -2,6 +2,7 @@ import { coerceElement } from '@angular/cdk/coercion';
|
|
|
2
2
|
import { DestroyRef, ElementRef, Injector, NgZone, QueryList, afterNextRender, computed, effect, inject, isDevMode, isSignal, runInInjectionContext, signal, untracked, } from '@angular/core';
|
|
3
3
|
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { Observable, debounceTime, distinctUntilChanged, map, merge, of, pairwise, startWith, switchMap } from 'rxjs';
|
|
5
|
+
import { RouterStateService } from '../services';
|
|
5
6
|
import { equal } from './equal.util';
|
|
6
7
|
function isElementSignal(el) {
|
|
7
8
|
if (isSignal(el)) {
|
|
@@ -385,4 +386,72 @@ export const controlValueSignalWithPrevious = (control, options) => {
|
|
|
385
386
|
* @deprecated Use `controlValueSignal` instead with `debounceTime` set to `300` and `debounceFirst` set to `true`.
|
|
386
387
|
*/
|
|
387
388
|
export const debouncedControlValueSignal = (control, options) => controlValueSignal(control, options ?? { debounceTime: 300, debounceFirst: true });
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsVUFBVSxFQUVWLFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFHVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUF5QnJDLFNBQVMsZUFBZSxDQUFDLEVBQVc7SUFDbEMsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNqQixPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDeEcsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0scUJBQXFCLEdBQUcsR0FBa0IsRUFBRSxDQUNoRCxNQUFNLENBQUM7SUFDTCxjQUFjLEVBQUUsUUFBUSxDQUFD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R0FBRyxDQUM1QyxPQUFVLEVBQ1YsT0FBbUMsRUFDbkMsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2pFLFFBQVEsRUFBRSxFQUNWLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUN6QyxDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBWUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxPQUFVLEVBQ1YsT0FBNEMsRUFDNUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBFZmZlY3RSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIFF1ZXJ5TGlzdCxcbiAgU2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbiAgaXNTaWduYWwsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWVyZ2UsIG9mLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi9lcXVhbC51dGlsJztcblxudHlwZSBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgQXJyYXk8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkO1xuXG50eXBlIFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IE9ic2VydmFibGU8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBTaWduYWw8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBFbGVtZW50U2lnbmFsO1xuXG50eXBlIEVsZW1lbnRTaWduYWwgPSBTaWduYWw8e1xuICBjdXJyZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBwcmV2aW91c0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgY3VycmVudEVsZW1lbnRzOiBIVE1MRWxlbWVudFtdO1xuICBwcmV2aW91c0VsZW1lbnRzOiBIVE1MRWxlbWVudFtdO1xufT47XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNpZ25hbChlbDogdW5rbm93bik6IGVsIGlzIEVsZW1lbnRTaWduYWwge1xuICBpZiAoaXNTaWduYWwoZWwpKSB7XG4gICAgY29uc3QgdmFsID0gZWwoKTtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmICdjdXJyZW50RWxlbWVudCcgaW4gdmFsICYmICdwcmV2aW91c0VsZW1lbnQnIGluIHZhbDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuY29uc3QgZG9jdW1lbnRFbGVtZW50U2lnbmFsID0gKCk6IEVsZW1lbnRTaWduYWwgPT5cbiAgc2lnbmFsKHtcbiAgICBjdXJyZW50RWxlbWVudDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgIHByZXZpb3VzRWxlbWVudDogbnVsbCxcbiAgICBjdXJyZW50RWxlbWVudHM6IFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdLFxuICAgIHByZXZpb3VzRWxlbWVudHM6IFtdLFxuICB9KTtcblxuY29uc3QgYnVpbGRFbGVtZW50U2lnbmFsID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUgfCBudWxsIHwgdW5kZWZpbmVkKTogRWxlbWVudFNpZ25hbCA9PiB7XG4gIGlmIChlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHNpZ25hbCh7IGN1cnJlbnRFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnQ6IG51bGwsIGN1cnJlbnRFbGVtZW50czogW10sIHByZXZpb3VzRWxlbWVudHM6IFtdIH0pO1xuICB9XG5cbiAgaWYgKGlzRWxlbWVudFNpZ25hbChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cblxuICBsZXQgbUVsU2lnbmFsOiBTaWduYWw8SFRNTEVsZW1lbnRbXSB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc3dpdGNoRWxlbWVudCA9ICgpID0+XG4gICAgc3dpdGNoTWFwKChlbE9yUmVmOiBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlKSA9PiB7XG4gICAgICBpZiAoZWxPclJlZiBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgICAgICByZXR1cm4gZWxPclJlZi5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGVsT3JSZWYpLFxuICAgICAgICAgIG1hcCgoKSA9PiBlbE9yUmVmLnRvQXJyYXkoKS5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbE9yUmVmKSkge1xuICAgICAgICByZXR1cm4gb2YoZWxPclJlZi5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvZXJjZWRFbCA9IGNvZXJjZUVsZW1lbnQoZWxPclJlZik7XG4gICAgICAgIHJldHVybiBvZihjb2VyY2VkRWwgPyBbY29lcmNlZEVsXSA6IG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGlmIChlbCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChlbC5waXBlKHN3aXRjaEVsZW1lbnQoKSksIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICB9IGVsc2UgaWYgKGlzU2lnbmFsKGVsKSkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKHRvT2JzZXJ2YWJsZShlbCkucGlwZShzd2l0Y2hFbGVtZW50KCkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKFxuICAgICAgZWwuY2hhbmdlcy5waXBlKFxuICAgICAgICBzdGFydFdpdGgoZWwpLFxuICAgICAgICBtYXAoKCkgPT4gZWwudG9BcnJheSgpLm1hcCgocikgPT4gY29lcmNlRWxlbWVudChyKSkpLFxuICAgICAgKSxcbiAgICAgIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0sXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtRWxTaWduYWwgPSBzaWduYWwoW2NvZXJjZUVsZW1lbnQoZWwpXSk7XG4gIH1cblxuICByZXR1cm4gdG9TaWduYWwoXG4gICAgdG9PYnNlcnZhYmxlKG1FbFNpZ25hbCkucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKFtwcmV2aW91c0VsZW1lbnRzLCBjdXJyZW50RWxlbWVudHNdKSA9PiAoe1xuICAgICAgICBwcmV2aW91c0VsZW1lbnRzOiBwcmV2aW91c0VsZW1lbnRzID8/IFtdLFxuICAgICAgICBjdXJyZW50RWxlbWVudHM6IGN1cnJlbnRFbGVtZW50cyA/PyBbXSxcbiAgICAgICAgY3VycmVudEVsZW1lbnQ6IGN1cnJlbnRFbGVtZW50cz8uWzBdID8/IG51bGwsXG4gICAgICAgIHByZXZpb3VzRWxlbWVudDogcHJldmlvdXNFbGVtZW50cz8uWzBdID8/IG51bGwsXG4gICAgICB9KSksXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogeyBjdXJyZW50RWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnRzOiBbXSwgY3VycmVudEVsZW1lbnRzOiBbXSB9IH0sXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRTaWduYWxFZmZlY3RzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+Pihjb25maWc6IHtcbiAgbWFwOiBUO1xuICBlYWNoSXRlbUZuOiAocGFpcjogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZDtcbiAgY2xlYW51cEZuOiAocGFpcjogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZDtcbn0pID0+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCB7IG1hcCwgZWFjaEl0ZW1GbiwgY2xlYW51cEZuIH0gPSBjb25maWc7XG5cbiAgY29uc3QgZWZmZWN0UmVmTWFwOiBSZWNvcmQ8c3RyaW5nLCBFZmZlY3RSZWY+ID0ge307XG5cbiAgY29uc3QgaGFzID0gKHRva2VuOiBzdHJpbmcpID0+IHRva2VuIGluIGVmZmVjdFJlZk1hcDtcblxuICBjb25zdCBwdXNoID0gKHRva2VuU3RyaW5nOiBzdHJpbmcsIHNpZ25hbDogU2lnbmFsPHVua25vd24+KSA9PiB7XG4gICAgaWYgKGhhcyh0b2tlblN0cmluZykpIHJldHVybjtcblxuICAgIGNvbnN0IHRva2VuQXJyYXkgPSB0b2tlblN0cmluZy5zcGxpdCgnICcpLmZpbHRlcigodG9rZW4pID0+ICEhdG9rZW4pO1xuXG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbkFycmF5KSB7XG4gICAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNpZ25hbCgpO1xuICAgICAgICAgIGVhY2hJdGVtRm4oeyBrZXk6IHRva2VuLCB2YWx1ZSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0UmVmTWFwW3Rva2VuXSA9IHJlZjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwdXNoTWFueSA9IChtYXA6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4pID0+IHtcbiAgICBmb3IgKGNvbnN0IFt0b2tlblN0cmluZywgc2lnbmFsXSBvZiBPYmplY3QuZW50cmllcyhtYXApKSB7XG4gICAgICBwdXNoKHRva2VuU3RyaW5nLCBzaWduYWwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoLi4udG9rZW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW5TdHJpbmcgb2YgdG9rZW5zKSB7XG4gICAgICBlZmZlY3RSZWZNYXBbdG9rZW5TdHJpbmddPy5kZXN0cm95KCk7XG5cbiAgICAgIGNsZWFudXBGbih7IGtleTogdG9rZW5TdHJpbmcsIHZhbHVlOiBtYXBbdG9rZW5TdHJpbmddPy4oKSB9KTtcblxuICAgICAgZGVsZXRlIGVmZmVjdFJlZk1hcFt0b2tlblN0cmluZ107XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU1hbnkgPSAodG9rZW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICByZW1vdmUodG9rZW4pO1xuICAgIH1cbiAgfTtcblxuICBwdXNoTWFueShtYXApO1xuXG4gIHJldHVybiB7IHJlbW92ZSwgcmVtb3ZlTWFueSwgaGFzLCBwdXNoLCBwdXNoTWFueSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbElzUmVuZGVyZWQgPSAoKSA9PiB7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGFmdGVyTmV4dFJlbmRlcigoKSA9PiBpc1JlbmRlcmVkLnNldCh0cnVlKSk7XG5cbiAgcmV0dXJuIGlzUmVuZGVyZWQuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIGNsYXNzTWFwOiBUKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKHtcbiAgICBtYXA6IGNsYXNzTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoa2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFudXBGbjogKHsga2V5IH0pID0+IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNsYXNzTWFwOiBUKSA9PlxuICBzaWduYWxDbGFzc2VzKGluamVjdChFbGVtZW50UmVmKSwgY2xhc3NNYXApO1xuXG5jb25zdCBBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnLCAnY2hlY2tlZCcsICdzZWxlY3RlZCcsICdoaWRkZW4nLCAnaW5lcnQnXTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KFxuICBlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLFxuICBhdHRyaWJ1dGVNYXA6IFQsXG4pID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoe1xuICAgIG1hcDogYXR0cmlidXRlTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSBgJHt2YWx1ZX1gO1xuXG4gICAgICBpZiAoQUxXQVlTX1RSVUVfQVRUUklCVVRFX0tFWVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoa2V5LCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uc2V0QXR0cmlidXRlKGtleSwgdmFsdWVTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhbnVwRm46ICh7IGtleSB9KSA9PiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGF0dHJpYnV0ZU1hcDogVCkgPT5cbiAgc2lnbmFsQXR0cmlidXRlcyhpbmplY3QoRWxlbWVudFJlZiksIGF0dHJpYnV0ZU1hcCk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIHN0eWxlTWFwOiBUKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKHtcbiAgICBtYXA6IHN0eWxlTWFwLFxuICAgIGVhY2hJdGVtRm46ICh7IGtleSwgdmFsdWUgfSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gYCR7dmFsdWV9YDtcblxuICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFudXBGbjogKHsga2V5IH0pID0+IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSksXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KHN0eWxlTWFwOiBUKSA9PlxuICBzaWduYWxTdHlsZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBzdHlsZU1hcCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naWNhbFNpemUge1xuICBpbmxpbmVTaXplOiBudW1iZXI7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREaW1lbnNpb25zIHtcbiAgcmVjdDogRE9NUmVjdFJlYWRPbmx5IHwgbnVsbDtcbiAgYm9yZGVyQm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBjb250ZW50Qm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50RGltZW5zaW9ucyA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGluaXRpYWxWYWx1ZSA9ICgpID0+ICh7XG4gICAgcmVjdDogZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbCxcbiAgICBib3JkZXJCb3hTaXplOiBudWxsLFxuICAgIGNvbnRlbnRCb3hTaXplOiBudWxsLFxuICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IG51bGwsXG4gIH0pO1xuXG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zU2lnbmFsID0gc2lnbmFsPEVsZW1lbnREaW1lbnNpb25zPihpbml0aWFsVmFsdWUoKSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGUpID0+IHtcbiAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50cnkgPSBlWzBdO1xuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBjb25zdCBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplID0gZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBib3JkZXJCb3hTaXplID0gZW50cnkuYm9yZGVyQm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBjb250ZW50Qm94U2l6ZSA9IGVudHJ5LmNvbnRlbnRCb3hTaXplPy5bMF0gPz8gbnVsbDtcblxuICAgICAgem9uZS5ydW4oKCkgPT5cbiAgICAgICAgZWxlbWVudERpbWVuc2lvbnNTaWduYWwuc2V0KHtcbiAgICAgICAgICByZWN0OiBlbnRyeS5jb250ZW50UmVjdCxcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBib3JkZXJCb3hTaXplXG4gICAgICAgICAgICA/IHsgaW5saW5lU2l6ZTogYm9yZGVyQm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGJvcmRlckJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZTogY29udGVudEJveFNpemVcbiAgICAgICAgICAgID8geyBpbmxpbmVTaXplOiBjb250ZW50Qm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGNvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZVxuICAgICAgICAgICAgPyB7IGlubGluZVNpemU6IGRldmljZVBpeGVsQ29udGVudEJveFNpemUuaW5saW5lU2l6ZSwgYmxvY2tTaXplOiBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQoaW5pdGlhbFZhbHVlKCkpO1xuXG4gICAgICBpZiAoZWxzLnByZXZpb3VzRWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWREaXNwbGF5ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbHMuY3VycmVudEVsZW1lbnQpLmRpc3BsYXk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbElzQW5ndWxhckNvbXBvbmVudCA9IGVscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCctJyk7XG5cbiAgICAgICAgaWYgKGNvbXB1dGVkRGlzcGxheSA9PT0gJ2lubGluZScgJiYgaXNEZXZNb2RlKCkgJiYgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBFbGVtZW50IDwke2Vscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpfT4gaXMgYW4gQW5ndWxhciBjb21wb25lbnQgYW5kIGhhcyBhIGRpc3BsYXkgb2YgJ2lubGluZScuIElubGluZSBlbGVtZW50cyBjYW5ub3QgYmUgb2JzZXJ2ZWQgZm9yIGRpbWVuc2lvbnMuIFBsZWFzZSBjaGFuZ2UgaXQgdG8gJ2Jsb2NrJyBvciBzb21ldGhpbmcgZWxzZS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudERpbWVuc2lvbnNTaWduYWwuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50RGltZW5zaW9ucyA9ICgpID0+IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKGluamVjdChFbGVtZW50UmVmKSk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50TXV0YXRpb25zID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBNdXRhdGlvbk9ic2VydmVySW5pdCkgPT4ge1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcblxuICBjb25zdCBlbGVtZW50TXV0YXRpb25zU2lnbmFsID0gc2lnbmFsPE11dGF0aW9uUmVjb3JkIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHpvbmUucnVuKCgpID0+IGVsZW1lbnRNdXRhdGlvbnNTaWduYWwuc2V0KGVudHJ5KSk7XG4gICAgfVxuICB9KTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZWxzID0gZWxlbWVudHMoKTtcblxuICAgICAgZWxlbWVudE11dGF0aW9uc1NpZ25hbC5zZXQobnVsbCk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudE11dGF0aW9uc1NpZ25hbC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRNdXRhdGlvbnMgPSAob3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KSA9PlxuICBzaWduYWxFbGVtZW50TXV0YXRpb25zKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSkgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zID0gc2lnbmFsRWxlbWVudERpbWVuc2lvbnMoZWxlbWVudHMpO1xuICBjb25zdCBlbGVtZW50TXV0YXRpb25zID0gc2lnbmFsRWxlbWVudE11dGF0aW9ucyhlbGVtZW50cywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudDtcbiAgICBjb25zdCBkaW1lbnNpb25zID0gZWxlbWVudERpbWVuc2lvbnMoKTtcblxuICAgIGNvbnN0IG5vdFNjcm9sbGFibGUgPSAoKSA9PiAoe1xuICAgICAgY2FuU2Nyb2xsOiBmYWxzZSxcbiAgICAgIGNhblNjcm9sbEhvcml6b250YWxseTogZmFsc2UsXG4gICAgICBjYW5TY3JvbGxWZXJ0aWNhbGx5OiBmYWxzZSxcbiAgICAgIHNjcm9sbFdpZHRoOiBlbGVtZW50Py5zY3JvbGxXaWR0aCA/PyBudWxsLFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBlbGVtZW50Py5zY3JvbGxIZWlnaHQgPz8gbnVsbCxcbiAgICAgIGVsZW1lbnREaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIHdoYXQgdGhlIG11dGF0aW9uIGlzLCBqdXN0IHRoYXQgdGhlcmUgaXMgb25lLlxuICAgIC8vIENoYW5nZXMgdG8gdGhlIERPTSBjYW4gYWZmZWN0IHRoZSBzY3JvbGwgc3RhdGUgb2YgdGhlIGVsZW1lbnQuXG4gICAgZWxlbWVudE11dGF0aW9ucygpO1xuXG4gICAgaWYgKCFlbGVtZW50IHx8ICFkaW1lbnNpb25zLnJlY3QgfHwgIWlzUmVuZGVyZWQoKSkgcmV0dXJuIG5vdFNjcm9sbGFibGUoKTtcblxuICAgIGNvbnN0IHsgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCB9ID0gZWxlbWVudDtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGRpbWVuc2lvbnMucmVjdDtcblxuICAgIGNvbnN0IGNhblNjcm9sbEhvcml6b250YWxseSA9IHNjcm9sbFdpZHRoID4gd2lkdGg7XG4gICAgY29uc3QgY2FuU2Nyb2xsVmVydGljYWxseSA9IHNjcm9sbEhlaWdodCA+IGhlaWdodDtcblxuICAgIHJldHVybiB7XG4gICAgICBjYW5TY3JvbGw6IGNhblNjcm9sbEhvcml6b250YWxseSB8fCBjYW5TY3JvbGxWZXJ0aWNhbGx5LFxuICAgICAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5LFxuICAgICAgY2FuU2Nyb2xsVmVydGljYWxseSxcbiAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgZWxlbWVudERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgfTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRTY3JvbGxTdGF0ZSA9ICgpID0+IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZShpbmplY3QoRWxlbWVudFJlZikpO1xuXG5leHBvcnQgdHlwZSBTaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uT3B0aW9ucyA9IE9taXQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0LCAncm9vdCc+ICYge1xuICByb290PzogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlO1xuICBlbmFibGVkPzogU2lnbmFsPHVua25vd24+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgcm9vdCA9IG9wdGlvbnM/LnJvb3QgPyBidWlsZEVsZW1lbnRTaWduYWwob3B0aW9ucz8ucm9vdCkgOiBkb2N1bWVudEVsZW1lbnRTaWduYWwoKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuICBjb25zdCBpc0VuYWJsZWQgPSBvcHRpb25zPy5lbmFibGVkID8/IHNpZ25hbCh0cnVlKTtcblxuICBjb25zdCBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXT4oW10pO1xuXG4gIGNvbnN0IG9ic2VydmVyID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RFbCA9IHJvb3QoKS5jdXJyZW50RWxlbWVudDtcblxuICAgICAgdW50cmFja2VkKCgpID0+IG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKSk7XG5cbiAgICAgIGNvbnN0IG5ld09ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHVudHJhY2tlZCgoKSA9PiBbLi4uZWxlbWVudEludGVyc2VjdGlvblNpZ25hbCgpXSk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cnlJbmRleCA9IGN1cnJlbnRWYWx1ZXMuZmluZEluZGV4KCh2KSA9PiB2LnRhcmdldCA9PT0gZW50cnkudGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nRW50cnlJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IFtcbiAgICAgICAgICAgICAgICAuLi5jdXJyZW50VmFsdWVzLnNsaWNlKDAsIGV4aXN0aW5nRW50cnlJbmRleCksXG4gICAgICAgICAgICAgICAgZW50cnksXG4gICAgICAgICAgICAgICAgLi4uY3VycmVudFZhbHVlcy5zbGljZShleGlzdGluZ0VudHJ5SW5kZXggKyAxKSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXMgPSBbLi4uY3VycmVudFZhbHVlcywgZW50cnldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHpvbmUucnVuKCgpID0+IGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwuc2V0KGN1cnJlbnRWYWx1ZXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyAuLi5vcHRpb25zLCByb290OiByb290RWwgfSxcbiAgICAgICk7XG5cbiAgICAgIG9ic2VydmVyLnNldChuZXdPYnNlcnZlcik7XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBvYnMgPSBvYnNlcnZlcigpO1xuICAgICAgY29uc3QgZW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuXG4gICAgICBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLnNldChbXSk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgb2JzPy5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnRzLmxlbmd0aCAmJiAhIWVuYWJsZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbHMuY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgb2JzPy5vYnNlcnZlKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAob3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PlxuICBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50Q2hpbGRyZW4gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSkgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnMgPSBzaWduYWxFbGVtZW50TXV0YXRpb25zKGVsZW1lbnRzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSB9KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIHdoYXQgdGhlIG11dGF0aW9uIGlzLCBqdXN0IHRoYXQgdGhlcmUgaXMgb25lLlxuICAgIC8vIENoYW5nZXMgdG8gdGhlIERPTSBtYXkgYWZmZWN0IHRoZSBjaGlsZHJlbiBvZiB0aGUgZWxlbWVudC5cbiAgICBlbGVtZW50TXV0YXRpb25zKCk7XG5cbiAgICBpZiAoIWVscy5jdXJyZW50RWxlbWVudCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgY2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxzLmN1cnJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XTtcblxuICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldmlvdXNTaWduYWxWYWx1ZSA9IDxUPihzaWduYWw6IFNpZ25hbDxUPikgPT4ge1xuICBjb25zdCBvYnMgPSB0b09ic2VydmFibGUoc2lnbmFsKS5waXBlKFxuICAgIHBhaXJ3aXNlKCksXG4gICAgbWFwKChbcHJldl0pID0+IHByZXYpLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN5bmNTaWduYWwgPSA8VD4oZnJvbTogU2lnbmFsPFQ+LCB0bzogV3JpdGFibGVTaWduYWw8VD4pID0+IHtcbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmb3JtVmFsID0gZnJvbSgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHRvLnNldChmb3JtVmFsKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJvdW5jZUZpcnN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnRyb2xWYWx1ZVNpZ25hbCA9IDxUIGV4dGVuZHMgRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXAgfCBGb3JtQXJyYXk+KFxuICBjb250cm9sOiBULFxuICBvcHRpb25zPzogQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCB2Y3NPYnMgPSBvcHRpb25zPy5kZWJvdW5jZVRpbWVcbiAgICA/IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKG9wdGlvbnM/LmRlYm91bmNlVGltZSA/PyAzMDApKVxuICAgIDogY29udHJvbC52YWx1ZUNoYW5nZXM7XG5cbiAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFJldHVyblR5cGU8VFsnZ2V0UmF3VmFsdWUnXT4+ID0gb3B0aW9ucz8uZGVib3VuY2VGaXJzdFxuICAgID8gbWVyZ2Uob2YoY29udHJvbC52YWx1ZSksIHZjc09icylcbiAgICA6IHZjc09icy5waXBlKHN0YXJ0V2l0aChjb250cm9sLmdldFJhd1ZhbHVlKCkpKTtcblxuICByZXR1cm4gdG9TaWduYWwob2JzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSksIHtcbiAgICByZXF1aXJlU3luYzogdHJ1ZSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBwYWlyIGlzIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIHRoZSBjdXJyZW50IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgY29udHJvbFZhbHVlU2lnbmFsV2l0aFByZXZpb3VzID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB8IEZvcm1BcnJheT4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucykpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBzdGFydFdpdGgoW251bGwsIGNvbnRyb2wuZ2V0UmF3VmFsdWUoKV0pLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udHJvbFZhbHVlU2lnbmFsYCBpbnN0ZWFkIHdpdGggYGRlYm91bmNlVGltZWAgb3B0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb250cm9sVmFsdWVTaWduYWxgIGluc3RlYWQgd2l0aCBgZGVib3VuY2VUaW1lYCBzZXQgdG8gYDMwMGAgYW5kIGBkZWJvdW5jZUZpcnN0YCBzZXQgdG8gYHRydWVgLlxuICovXG5leHBvcnQgY29uc3QgZGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbD4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBEZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiBjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucyA/PyB7IGRlYm91bmNlVGltZTogMzAwLCBkZWJvdW5jZUZpcnN0OiB0cnVlIH0pO1xuIl19
|
|
389
|
+
export const injectOrRunInContext = (fn, config) => {
|
|
390
|
+
if (config?.injector) {
|
|
391
|
+
return runInInjectionContext(config.injector, fn);
|
|
392
|
+
}
|
|
393
|
+
return fn();
|
|
394
|
+
};
|
|
395
|
+
export const transformOrReturn = (src, config) => {
|
|
396
|
+
const transformer = config?.transform;
|
|
397
|
+
if (transformer) {
|
|
398
|
+
return computed(() => transformer(src()));
|
|
399
|
+
}
|
|
400
|
+
return src;
|
|
401
|
+
};
|
|
402
|
+
/** Inject a signal containing the current route fragment (the part after the # inside the url if present) */
|
|
403
|
+
export const injectFragment = (config) => {
|
|
404
|
+
return injectOrRunInContext(() => {
|
|
405
|
+
const routerStateService = inject(RouterStateService);
|
|
406
|
+
const src = toSignal(routerStateService.fragment$, { initialValue: routerStateService.fragment });
|
|
407
|
+
return transformOrReturn(src, config);
|
|
408
|
+
}, config);
|
|
409
|
+
};
|
|
410
|
+
/** Inject all currently available query parameters as a signal */
|
|
411
|
+
export const injectQueryParams = (config) => {
|
|
412
|
+
return injectOrRunInContext(() => {
|
|
413
|
+
const routerStateService = inject(RouterStateService);
|
|
414
|
+
return toSignal(routerStateService.queryParams$, { initialValue: routerStateService.queryParams });
|
|
415
|
+
}, config);
|
|
416
|
+
};
|
|
417
|
+
/** Inject all currently available route data as a signal */
|
|
418
|
+
export const injectRouteData = (config) => {
|
|
419
|
+
return injectOrRunInContext(() => {
|
|
420
|
+
const routerStateService = inject(RouterStateService);
|
|
421
|
+
return toSignal(routerStateService.data$, { initialValue: routerStateService.data });
|
|
422
|
+
}, config);
|
|
423
|
+
};
|
|
424
|
+
/** Inject the current route title as a signal */
|
|
425
|
+
export const injectRouteTitle = (config) => {
|
|
426
|
+
return injectOrRunInContext(() => {
|
|
427
|
+
const routerStateService = inject(RouterStateService);
|
|
428
|
+
const src = toSignal(routerStateService.title$, { initialValue: routerStateService.title });
|
|
429
|
+
return transformOrReturn(src, config);
|
|
430
|
+
}, config);
|
|
431
|
+
};
|
|
432
|
+
/** Inject all currently available path parameters as a signal */
|
|
433
|
+
export const injectPathParams = (config) => {
|
|
434
|
+
return injectOrRunInContext(() => {
|
|
435
|
+
const routerStateService = inject(RouterStateService);
|
|
436
|
+
return toSignal(routerStateService.pathParams$, { initialValue: routerStateService.pathParams });
|
|
437
|
+
}, config);
|
|
438
|
+
};
|
|
439
|
+
/** Inject a specific query parameter as a signal */
|
|
440
|
+
export const injectQueryParam = (key, config) => {
|
|
441
|
+
const queryParams = injectQueryParams(config);
|
|
442
|
+
const src = computed(() => queryParams()[key] ?? null);
|
|
443
|
+
return transformOrReturn(src, config);
|
|
444
|
+
};
|
|
445
|
+
/** Inject a specific route data item as a signal */
|
|
446
|
+
export const injectRouteDataItem = (key, config) => {
|
|
447
|
+
const data = injectRouteData(config);
|
|
448
|
+
const src = computed(() => data()[key] ?? null);
|
|
449
|
+
return transformOrReturn(src, config);
|
|
450
|
+
};
|
|
451
|
+
/** Inject a specific path parameter as a signal */
|
|
452
|
+
export const injectPathParam = (key, config) => {
|
|
453
|
+
const pathParams = injectPathParams(config);
|
|
454
|
+
const src = computed(() => pathParams()[key] ?? null);
|
|
455
|
+
return transformOrReturn(src, config);
|
|
456
|
+
};
|
|
457
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsVUFBVSxFQUVWLFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFHVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBeUJyQyxTQUFTLGVBQWUsQ0FBQyxFQUFXO0lBQ2xDLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakIsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDakIsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxnQkFBZ0IsSUFBSSxHQUFHLElBQUksaUJBQWlCLElBQUksR0FBRyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLHFCQUFxQixHQUFHLEdBQWtCLEVB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QXFCLENBQUM7SUFFM0UsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsb0RBQW9EO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLEdBQVcsRUFDWCxNQUFpRSxFQUNqRSxFQUFFO0lBQ0YsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQWMsQ0FBQztJQUU3RCxPQUFPLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixtREFBbUQ7QUFDbkQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQzdCLEdBQVcsRUFDWCxNQUF1RSxFQUN2RSxFQUFFO0lBQ0YsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBMEIsQ0FBQztJQUUvRSxPQUFPLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIEVmZmVjdFJlZixcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgUXVlcnlMaXN0LFxuICBTaWduYWwsXG4gIFdyaXRhYmxlU2lnbmFsLFxuICBhZnRlck5leHRSZW5kZXIsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaXNEZXZNb2RlLFxuICBpc1NpZ25hbCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtZXJnZSwgb2YsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXF1YWwgfSBmcm9tICcuL2VxdWFsLnV0aWwnO1xuXG50eXBlIFNpZ25hbEVsZW1lbnRCaW5kaW5nQ29tcGxleFR5cGUgPVxuICB8IEhUTUxFbGVtZW50XG4gIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBBcnJheTxFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50PlxuICB8IG51bGxcbiAgfCB1bmRlZmluZWQ7XG5cbnR5cGUgU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIHwgT2JzZXJ2YWJsZTxTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlPlxuICB8IFNpZ25hbDxTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlPlxuICB8IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50PlxuICB8IEVsZW1lbnRTaWduYWw7XG5cbnR5cGUgRWxlbWVudFNpZ25hbCA9IFNpZ25hbDx7XG4gIGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIHByZXZpb3VzRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBjdXJyZW50RWxlbWVudHM6IEhUTUxFbGVtZW50W107XG4gIHByZXZpb3VzRWxlbWVudHM6IEhUTUxFbGVtZW50W107XG59PjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2lnbmFsKGVsOiB1bmtub3duKTogZWwgaXMgRWxlbWVudFNpZ25hbCB7XG4gIGlmIChpc1NpZ25hbChlbCkpIHtcbiAgICBjb25zdCB2YWwgPSBlbCgpO1xuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgJ2N1cnJlbnRFbGVtZW50JyBpbiB2YWwgJiYgJ3ByZXZpb3VzRWxlbWVudCcgaW4gdmFsO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5jb25zdCBkb2N1bWVudEVsZW1lbnRTaWduYWwgPSAoKTogRWxlbWVudFNpZ25hbCA9PlxuICBzaWduYWwoe1xuICAgIGN1cnJlbnRFbGVtZW50OiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgcHJldmlvdXNFbGVtZW50OiBudWxsLFxuICAgIGN1cnJlbnRFbGVtZW50czogW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0sXG4gICAgcHJldmlvdXNFbGVtZW50czogW10sXG4gIH0pO1xuXG5jb25zdCBidWlsZEVsZW1lbnRTaWduYWwgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSB8IG51bGwgfCB1bmRlZmluZWQpOiBFbGVtZW50U2lnbmFsID0+IHtcbiAgaWYgKGVsID09PSBudWxsIHx8IGVsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc2lnbmFsKHsgY3VycmVudEVsZW1lbnQ6IG51bGwsIHByZXZpb3VzRWxlbWVudDogbnVsbCwgY3VycmVudEVsZW1lbnRzOiBbXSwgcHJldmlvdXNFbGVtZW50czogW10gfSk7XG4gIH1cblxuICBpZiAoaXNFbGVtZW50U2lnbmFsKGVsKSkge1xuICAgIHJldHVybiBlbDtcbiAgfVxuXG4gIGxldCBtRWxTaWduYWw6IFNpZ25hbDxIVE1MRWxlbWVudFtdIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBzd2l0Y2hFbGVtZW50ID0gKCkgPT5cbiAgICBzd2l0Y2hNYXAoKGVsT3JSZWY6IFNpZ25hbEVsZW1lbnRCaW5kaW5nQ29tcGxleFR5cGUpID0+IHtcbiAgICAgIGlmIChlbE9yUmVmIGluc3RhbmNlb2YgUXVlcnlMaXN0KSB7XG4gICAgICAgIHJldHVybiBlbE9yUmVmLmNoYW5nZXMucGlwZShcbiAgICAgICAgICBzdGFydFdpdGgoZWxPclJlZiksXG4gICAgICAgICAgbWFwKCgpID0+IGVsT3JSZWYudG9BcnJheSgpLm1hcCgocikgPT4gY29lcmNlRWxlbWVudChyKSkpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVsT3JSZWYpKSB7XG4gICAgICAgIHJldHVybiBvZihlbE9yUmVmLm1hcCgocikgPT4gY29lcmNlRWxlbWVudChyKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29lcmNlZEVsID0gY29lcmNlRWxlbWVudChlbE9yUmVmKTtcbiAgICAgICAgcmV0dXJuIG9mKGNvZXJjZWRFbCA/IFtjb2VyY2VkRWxdIDogbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgaWYgKGVsIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKGVsLnBpcGUoc3dpdGNoRWxlbWVudCgpKSwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIH0gZWxzZSBpZiAoaXNTaWduYWwoZWwpKSB7XG4gICAgbUVsU2lnbmFsID0gdG9TaWduYWwodG9PYnNlcnZhYmxlKGVsKS5waXBlKHN3aXRjaEVsZW1lbnQoKSksIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICB9IGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgUXVlcnlMaXN0KSB7XG4gICAgbUVsU2lnbmFsID0gdG9TaWduYWwoXG4gICAgICBlbC5jaGFuZ2VzLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChlbCksXG4gICAgICAgIG1hcCgoKSA9PiBlbC50b0FycmF5KCkubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSksXG4gICAgICApLFxuICAgICAgeyBpbml0aWFsVmFsdWU6IG51bGwgfSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG1FbFNpZ25hbCA9IHNpZ25hbChbY29lcmNlRWxlbWVudChlbCldKTtcbiAgfVxuXG4gIHJldHVybiB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUobUVsU2lnbmFsKS5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIG1hcCgoW3ByZXZpb3VzRWxlbWVudHMsIGN1cnJlbnRFbGVtZW50c10pID0+ICh7XG4gICAgICAgIHByZXZpb3VzRWxlbWVudHM6IHByZXZpb3VzRWxlbWVudHMgPz8gW10sXG4gICAgICAgIGN1cnJlbnRFbGVtZW50czogY3VycmVudEVsZW1lbnRzID8/IFtdLFxuICAgICAgICBjdXJyZW50RWxlbWVudDogY3VycmVudEVsZW1lbnRzPy5bMF0gPz8gbnVsbCxcbiAgICAgICAgcHJldmlvdXNFbGVtZW50OiBwcmV2aW91c0VsZW1lbnRzPy5bMF0gPz8gbnVsbCxcbiAgICAgIH0pKSxcbiAgICApLFxuICAgIHsgaW5pdGlhbFZhbHVlOiB7IGN1cnJlbnRFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnQ6IG51bGwsIHByZXZpb3VzRWxlbWVudHM6IFtdLCBjdXJyZW50RWxlbWVudHM6IFtdIH0gfSxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFNpZ25hbEVmZmVjdHMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNvbmZpZzoge1xuICBtYXA6IFQ7XG4gIGVhY2hJdGVtRm46IChwYWlyOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkO1xuICBjbGVhbnVwRm46IChwYWlyOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkO1xufSkgPT4ge1xuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIGNvbnN0IHsgbWFwLCBlYWNoSXRlbUZuLCBjbGVhbnVwRm4gfSA9IGNvbmZpZztcblxuICBjb25zdCBlZmZlY3RSZWZNYXA6IFJlY29yZDxzdHJpbmcsIEVmZmVjdFJlZj4gPSB7fTtcblxuICBjb25zdCBoYXMgPSAodG9rZW46IHN0cmluZykgPT4gdG9rZW4gaW4gZWZmZWN0UmVmTWFwO1xuXG4gIGNvbnN0IHB1c2ggPSAodG9rZW5TdHJpbmc6IHN0cmluZywgc2lnbmFsOiBTaWduYWw8dW5rbm93bj4pID0+IHtcbiAgICBpZiAoaGFzKHRva2VuU3RyaW5nKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2VuU3RyaW5nLnNwbGl0KCcgJykuZmlsdGVyKCh0b2tlbikgPT4gISF0b2tlbik7XG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2VuQXJyYXkpIHtcbiAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gc2lnbmFsKCk7XG4gICAgICAgICAgZWFjaEl0ZW1Gbih7IGtleTogdG9rZW4sIHZhbHVlIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBlZmZlY3RSZWZNYXBbdG9rZW5dID0gcmVmO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHB1c2hNYW55ID0gKG1hcDogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PikgPT4ge1xuICAgIGZvciAoY29uc3QgW3Rva2VuU3RyaW5nLCBzaWduYWxdIG9mIE9iamVjdC5lbnRyaWVzKG1hcCkpIHtcbiAgICAgIHB1c2godG9rZW5TdHJpbmcsIHNpZ25hbCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlbW92ZSA9ICguLi50b2tlbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgZm9yIChjb25zdCB0b2tlblN0cmluZyBvZiB0b2tlbnMpIHtcbiAgICAgIGVmZmVjdFJlZk1hcFt0b2tlblN0cmluZ10/LmRlc3Ryb3koKTtcblxuICAgICAgY2xlYW51cEZuKHsga2V5OiB0b2tlblN0cmluZywgdmFsdWU6IG1hcFt0b2tlblN0cmluZ10/LigpIH0pO1xuXG4gICAgICBkZWxldGUgZWZmZWN0UmVmTWFwW3Rva2VuU3RyaW5nXTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlTWFueSA9ICh0b2tlbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgIHJlbW92ZSh0b2tlbik7XG4gICAgfVxuICB9O1xuXG4gIHB1c2hNYW55KG1hcCk7XG5cbiAgcmV0dXJuIHsgcmVtb3ZlLCByZW1vdmVNYW55LCBoYXMsIHB1c2gsIHB1c2hNYW55IH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSXNSZW5kZXJlZCA9ICgpID0+IHtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IGlzUmVuZGVyZWQuc2V0KHRydWUpKTtcblxuICByZXR1cm4gaXNSZW5kZXJlZC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsQ2xhc3NlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgY2xhc3NNYXA6IFQpID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoe1xuICAgIG1hcDogY2xhc3NNYXAsXG4gICAgZWFjaEl0ZW1GbjogKHsga2V5LCB2YWx1ZSB9KSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uY2xhc3NMaXN0LmFkZChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZShrZXkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYW51cEZuOiAoeyBrZXkgfSkgPT4gZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZShrZXkpLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0Q2xhc3NlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oY2xhc3NNYXA6IFQpID0+XG4gIHNpZ25hbENsYXNzZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBjbGFzc01hcCk7XG5cbmNvbnN0IEFMV0FZU19UUlVFX0FUVFJJQlVURV9LRVlTID0gWydkaXNhYmxlZCcsICdyZWFkb25seScsICdyZXF1aXJlZCcsICdjaGVja2VkJywgJ3NlbGVjdGVkJywgJ2hpZGRlbicsICdpbmVydCddO1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsQXR0cmlidXRlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oXG4gIGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsXG4gIGF0dHJpYnV0ZU1hcDogVCxcbikgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG5cbiAgcmV0dXJuIGJ1aWxkU2lnbmFsRWZmZWN0cyh7XG4gICAgbWFwOiBhdHRyaWJ1dGVNYXAsXG4gICAgZWFjaEl0ZW1GbjogKHsga2V5LCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IGAke3ZhbHVlfWA7XG5cbiAgICAgIGlmIChBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZShrZXksICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZVN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFudXBGbjogKHsga2V5IH0pID0+IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZShrZXkpLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0QXR0cmlidXRlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oYXR0cmlidXRlTWFwOiBUKSA9PlxuICBzaWduYWxBdHRyaWJ1dGVzKGluamVjdChFbGVtZW50UmVmKSwgYXR0cmlidXRlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbFN0eWxlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgc3R5bGVNYXA6IFQpID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoe1xuICAgIG1hcDogc3R5bGVNYXAsXG4gICAgZWFjaEl0ZW1GbjogKHsga2V5LCB2YWx1ZSB9KSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSBgJHt2YWx1ZX1gO1xuXG4gICAgICAgIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ/LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWVTdHJpbmcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYW51cEZuOiAoeyBrZXkgfSkgPT4gZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdFN0eWxlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oc3R5bGVNYXA6IFQpID0+XG4gIHNpZ25hbFN0eWxlcyhpbmplY3QoRWxlbWVudFJlZiksIHN0eWxlTWFwKTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpY2FsU2l6ZSB7XG4gIGlubGluZVNpemU6IG51bWJlcjtcbiAgYmxvY2tTaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudERpbWVuc2lvbnMge1xuICByZWN0OiBET01SZWN0UmVhZE9ubHkgfCBudWxsO1xuICBib3JkZXJCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG4gIGNvbnRlbnRCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG4gIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IExvZ2ljYWxTaXplIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUpID0+IHtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgY29uc3QgaW5pdGlhbFZhbHVlID0gKCkgPT4gKHtcbiAgICByZWN0OiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA/PyBudWxsLFxuICAgIGJvcmRlckJveFNpemU6IG51bGwsXG4gICAgY29udGVudEJveFNpemU6IG51bGwsXG4gICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogbnVsbCxcbiAgfSk7XG5cbiAgY29uc3QgZWxlbWVudERpbWVuc2lvbnNTaWduYWwgPSBzaWduYWw8RWxlbWVudERpbWVuc2lvbnM+KGluaXRpYWxWYWx1ZSgpKTtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGNvbnN0IGRldmljZVBpeGVsQ29udGVudEJveFNpemUgPSBlbnRyeS5kZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplPy5bMF0gPz8gbnVsbDtcbiAgICAgIGNvbnN0IGJvcmRlckJveFNpemUgPSBlbnRyeS5ib3JkZXJCb3hTaXplPy5bMF0gPz8gbnVsbDtcbiAgICAgIGNvbnN0IGNvbnRlbnRCb3hTaXplID0gZW50cnkuY29udGVudEJveFNpemU/LlswXSA/PyBudWxsO1xuXG4gICAgICB6b25lLnJ1bigoKSA9PlxuICAgICAgICBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQoe1xuICAgICAgICAgIHJlY3Q6IGVudHJ5LmNvbnRlbnRSZWN0LFxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGJvcmRlckJveFNpemVcbiAgICAgICAgICAgID8geyBpbmxpbmVTaXplOiBib3JkZXJCb3hTaXplLmlubGluZVNpemUsIGJsb2NrU2l6ZTogYm9yZGVyQm94U2l6ZS5ibG9ja1NpemUgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGNvbnRlbnRCb3hTaXplOiBjb250ZW50Qm94U2l6ZVxuICAgICAgICAgICAgPyB7IGlubGluZVNpemU6IGNvbnRlbnRCb3hTaXplLmlubGluZVNpemUsIGJsb2NrU2l6ZTogY29udGVudEJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplXG4gICAgICAgICAgICA/IHsgaW5saW5lU2l6ZTogZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGRldmljZVBpeGVsQ29udGVudEJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG5cbiAgICAgIGVsZW1lbnREaW1lbnNpb25zU2lnbmFsLnNldChpbml0aWFsVmFsdWUoKSk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb21wdXRlZERpc3BsYXkgPSBnZXRDb21wdXRlZFN0eWxlKGVscy5jdXJyZW50RWxlbWVudCkuZGlzcGxheTtcbiAgICAgICAgY29uc3QgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50ID0gZWxzLmN1cnJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJy0nKTtcblxuICAgICAgICBpZiAoY29tcHV0ZWREaXNwbGF5ID09PSAnaW5saW5lJyAmJiBpc0Rldk1vZGUoKSAmJiBjdXJyZW50RWxJc0FuZ3VsYXJDb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEVsZW1lbnQgPCR7ZWxzLmN1cnJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PiBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCBhbmQgaGFzIGEgZGlzcGxheSBvZiAnaW5saW5lJy4gSW5saW5lIGVsZW1lbnRzIGNhbm5vdCBiZSBvYnNlcnZlZCBmb3IgZGltZW5zaW9ucy4gUGxlYXNlIGNoYW5nZSBpdCB0byAnYmxvY2snIG9yIHNvbWV0aGluZyBlbHNlLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxzLmN1cnJlbnRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnREaW1lbnNpb25zID0gKCkgPT4gc2lnbmFsRWxlbWVudERpbWVuc2lvbnMoaW5qZWN0KEVsZW1lbnRSZWYpKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnNTaWduYWwgPSBzaWduYWw8TXV0YXRpb25SZWNvcmQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChlKSA9PiB7XG4gICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGVudHJ5ID0gZVswXTtcblxuICAgIGlmIChlbnRyeSkge1xuICAgICAgem9uZS5ydW4oKCkgPT4gZWxlbWVudE11dGF0aW9uc1NpZ25hbC5zZXQoZW50cnkpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICBlbGVtZW50TXV0YXRpb25zU2lnbmFsLnNldChudWxsKTtcblxuICAgICAgaWYgKGVscy5wcmV2aW91c0VsZW1lbnQpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxzLmN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxzLmN1cnJlbnRFbGVtZW50LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50TXV0YXRpb25zU2lnbmFsLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudE11dGF0aW9ucyA9IChvcHRpb25zPzogTXV0YXRpb25PYnNlcnZlckluaXQpID0+XG4gIHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoaW5qZWN0KEVsZW1lbnRSZWYpLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgZWxlbWVudERpbWVuc2lvbnMgPSBzaWduYWxFbGVtZW50RGltZW5zaW9ucyhlbGVtZW50cyk7XG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnMgPSBzaWduYWxFbGVtZW50TXV0YXRpb25zKGVsZW1lbnRzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50O1xuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBlbGVtZW50RGltZW5zaW9ucygpO1xuXG4gICAgY29uc3Qgbm90U2Nyb2xsYWJsZSA9ICgpID0+ICh7XG4gICAgICBjYW5TY3JvbGw6IGZhbHNlLFxuICAgICAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5OiBmYWxzZSxcbiAgICAgIGNhblNjcm9sbFZlcnRpY2FsbHk6IGZhbHNlLFxuICAgICAgc2Nyb2xsV2lkdGg6IGVsZW1lbnQ/LnNjcm9sbFdpZHRoID8/IG51bGwsXG4gICAgICBzY3JvbGxIZWlnaHQ6IGVsZW1lbnQ/LnNjcm9sbEhlaWdodCA/PyBudWxsLFxuICAgICAgZWxlbWVudERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgd2hhdCB0aGUgbXV0YXRpb24gaXMsIGp1c3QgdGhhdCB0aGVyZSBpcyBvbmUuXG4gICAgLy8gQ2hhbmdlcyB0byB0aGUgRE9NIGNhbiBhZmZlY3QgdGhlIHNjcm9sbCBzdGF0ZSBvZiB0aGUgZWxlbWVudC5cbiAgICBlbGVtZW50TXV0YXRpb25zKCk7XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIWRpbWVuc2lvbnMucmVjdCB8fCAhaXNSZW5kZXJlZCgpKSByZXR1cm4gbm90U2Nyb2xsYWJsZSgpO1xuXG4gICAgY29uc3QgeyBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0IH0gPSBlbGVtZW50O1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZGltZW5zaW9ucy5yZWN0O1xuXG4gICAgY29uc3QgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID0gc2Nyb2xsV2lkdGggPiB3aWR0aDtcbiAgICBjb25zdCBjYW5TY3JvbGxWZXJ0aWNhbGx5ID0gc2Nyb2xsSGVpZ2h0ID4gaGVpZ2h0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhblNjcm9sbDogY2FuU2Nyb2xsSG9yaXpvbnRhbGx5IHx8IGNhblNjcm9sbFZlcnRpY2FsbHksXG4gICAgICBjYW5TY3JvbGxIb3Jpem9udGFsbHksXG4gICAgICBjYW5TY3JvbGxWZXJ0aWNhbGx5LFxuICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICBlbGVtZW50RGltZW5zaW9uczogZGltZW5zaW9ucyxcbiAgICB9O1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudFNjcm9sbFN0YXRlID0gKCkgPT4gc2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlKGluamVjdChFbGVtZW50UmVmKSk7XG5cbmV4cG9ydCB0eXBlIFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zID0gT21pdDxJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQsICdyb290Jz4gJiB7XG4gIHJvb3Q/OiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGU7XG4gIGVuYWJsZWQ/OiBTaWduYWw8dW5rbm93bj47XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbiA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBvcHRpb25zPzogU2lnbmFsRWxlbWVudEludGVyc2VjdGlvbk9wdGlvbnMpID0+IHtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCByb290ID0gb3B0aW9ucz8ucm9vdCA/IGJ1aWxkRWxlbWVudFNpZ25hbChvcHRpb25zPy5yb290KSA6IGRvY3VtZW50RWxlbWVudFNpZ25hbCgpO1xuICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG4gIGNvbnN0IGlzRW5hYmxlZCA9IG9wdGlvbnM/LmVuYWJsZWQgPz8gc2lnbmFsKHRydWUpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwgPSBzaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdPihbXSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBzaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsPihudWxsKTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsID0gcm9vdCgpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4gb2JzZXJ2ZXIoKT8uZGlzY29ubmVjdCgpKTtcblxuICAgICAgY29uc3QgbmV3T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybjtcblxuICAgICAgICAgIGxldCBjdXJyZW50VmFsdWVzID0gdW50cmFja2VkKCgpID0+IFsuLi5lbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsKCldKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdFbnRyeUluZGV4ID0gY3VycmVudFZhbHVlcy5maW5kSW5kZXgoKHYpID0+IHYudGFyZ2V0ID09PSBlbnRyeS50YXJnZXQpO1xuXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdFbnRyeUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBjdXJyZW50VmFsdWVzID0gW1xuICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRWYWx1ZXMuc2xpY2UoMCwgZXhpc3RpbmdFbnRyeUluZGV4KSxcbiAgICAgICAgICAgICAgICBlbnRyeSxcbiAgICAgICAgICAgICAgICAuLi5jdXJyZW50VmFsdWVzLnNsaWNlKGV4aXN0aW5nRW50cnlJbmRleCArIDEpLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IFsuLi5jdXJyZW50VmFsdWVzLCBlbnRyeV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4gZWxlbWVudEludGVyc2VjdGlvblNpZ25hbC5zZXQoY3VycmVudFZhbHVlcykpO1xuICAgICAgICB9LFxuICAgICAgICB7IC4uLm9wdGlvbnMsIHJvb3Q6IHJvb3RFbCB9LFxuICAgICAgKTtcblxuICAgICAgb2JzZXJ2ZXIuc2V0KG5ld09ic2VydmVyKTtcbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZWxzID0gZWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IG9icyA9IG9ic2VydmVyKCk7XG4gICAgICBjb25zdCBlbmFibGVkID0gaXNFbmFibGVkKCk7XG5cbiAgICAgIGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwuc2V0KFtdKTtcblxuICAgICAgaWYgKGVscy5wcmV2aW91c0VsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBvYnM/LmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudHMubGVuZ3RoICYmICEhZW5hYmxlZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIGVscy5jdXJyZW50RWxlbWVudHMpIHtcbiAgICAgICAgICBvYnM/Lm9ic2VydmUoZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIoKT8uZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudEludGVyc2VjdGlvblNpZ25hbDtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudEludGVyc2VjdGlvbiA9IChvcHRpb25zPzogU2lnbmFsRWxlbWVudEludGVyc2VjdGlvbk9wdGlvbnMpID0+XG4gIHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24oaW5qZWN0KEVsZW1lbnRSZWYpLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRDaGlsZHJlbiA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcbiAgY29uc3QgZWxlbWVudE11dGF0aW9ucyA9IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoZWxlbWVudHMsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG5cbiAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgd2hhdCB0aGUgbXV0YXRpb24gaXMsIGp1c3QgdGhhdCB0aGVyZSBpcyBvbmUuXG4gICAgLy8gQ2hhbmdlcyB0byB0aGUgRE9NIG1heSBhZmZlY3QgdGhlIGNoaWxkcmVuIG9mIHRoZSBlbGVtZW50LlxuICAgIGVsZW1lbnRNdXRhdGlvbnMoKTtcblxuICAgIGlmICghZWxzLmN1cnJlbnRFbGVtZW50KSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjaGlsZHJlbjogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVscy5jdXJyZW50RWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2aW91c1NpZ25hbFZhbHVlID0gPFQ+KHNpZ25hbDogU2lnbmFsPFQ+KSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShzaWduYWwpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBtYXAoKFtwcmV2XSkgPT4gcHJldiksXG4gICk7XG5cbiAgcmV0dXJuIHRvU2lnbmFsKG9icyk7XG59O1xuXG5leHBvcnQgY29uc3Qgc3luY1NpZ25hbCA9IDxUPihmcm9tOiBTaWduYWw8VD4sIHRvOiBXcml0YWJsZVNpZ25hbDxUPikgPT4ge1xuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1WYWwgPSBmcm9tKCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgdG8uc2V0KGZvcm1WYWwpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCAzMDBcbiAgICovXG4gIGRlYm91bmNlVGltZT86IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlYm91bmNlRmlyc3Q/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgY29udHJvbFZhbHVlU2lnbmFsID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB8IEZvcm1BcnJheT4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IHZjc09icyA9IG9wdGlvbnM/LmRlYm91bmNlVGltZVxuICAgID8gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUob3B0aW9ucz8uZGVib3VuY2VUaW1lID8/IDMwMCkpXG4gICAgOiBjb250cm9sLnZhbHVlQ2hhbmdlcztcblxuICBjb25zdCBvYnM6IE9ic2VydmFibGU8UmV0dXJuVHlwZTxUWydnZXRSYXdWYWx1ZSddPj4gPSBvcHRpb25zPy5kZWJvdW5jZUZpcnN0XG4gICAgPyBtZXJnZShvZihjb250cm9sLnZhbHVlKSwgdmNzT2JzKVxuICAgIDogdmNzT2JzLnBpcGUoc3RhcnRXaXRoKGNvbnRyb2wuZ2V0UmF3VmFsdWUoKSkpO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpKSwge1xuICAgIHJlcXVpcmVTeW5jOiB0cnVlLFxuICB9KTtcbn07XG5cbi8qKlxuICogVGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHBhaXIgaXMgdGhlIHByZXZpb3VzIHZhbHVlIGFuZCB0aGUgc2Vjb25kIGl0ZW0gaXMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBjb250cm9sVmFsdWVTaWduYWxXaXRoUHJldmlvdXMgPSA8VCBleHRlbmRzIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwIHwgRm9ybUFycmF5PihcbiAgY29udHJvbDogVCxcbiAgb3B0aW9ucz86IENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMsXG4pID0+IHtcbiAgY29uc3Qgb2JzID0gdG9PYnNlcnZhYmxlKGNvbnRyb2xWYWx1ZVNpZ25hbChjb250cm9sLCBvcHRpb25zKSkucGlwZShcbiAgICBwYWlyd2lzZSgpLFxuICAgIHN0YXJ0V2l0aChbbnVsbCwgY29udHJvbC5nZXRSYXdWYWx1ZSgpXSksXG4gICk7XG5cbiAgcmV0dXJuIHRvU2lnbmFsKG9icywgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb250cm9sVmFsdWVTaWduYWxgIGluc3RlYWQgd2l0aCBgZGVib3VuY2VUaW1lYCBvcHRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCAzMDBcbiAgICovXG4gIGRlYm91bmNlVGltZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGNvbnRyb2xWYWx1ZVNpZ25hbGAgaW5zdGVhZCB3aXRoIGBkZWJvdW5jZVRpbWVgIHNldCB0byBgMzAwYCBhbmQgYGRlYm91bmNlRmlyc3RgIHNldCB0byBgdHJ1ZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBkZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWwgPSA8VCBleHRlbmRzIEZvcm1Db250cm9sPihcbiAgY29udHJvbDogVCxcbiAgb3B0aW9ucz86IERlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMsXG4pID0+IGNvbnRyb2xWYWx1ZVNpZ25hbChjb250cm9sLCBvcHRpb25zID8/IHsgZGVib3VuY2VUaW1lOiAzMDAsIGRlYm91bmNlRmlyc3Q6IHRydWUgfSk7XG5cbmV4cG9ydCB0eXBlIEluamVjdFV0aWxDb25maWcgPSB7XG4gIC8qKiBUaGUgaW5qZWN0b3IgdG8gdXNlIGZvciB0aGUgaW5qZWN0aW9uLiBNdXN0IGJlIHByb3ZpZGVkIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZyb20gd2l0aGluIGEgaW5qZWN0aW9uIGNvbnRleHQuICovXG4gIGluamVjdG9yPzogSW5qZWN0b3I7XG59O1xuXG5leHBvcnQgdHlwZSBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPEluLCBPdXQ+ID0ge1xuICAvKipcbiAgICogQSB0cmFuc2Zvcm0gZnVuY3Rpb24gc2ltaWxhciB0byB0aGUgYHRyYW5zZm9ybWAgZnVuY3Rpb24gaW4gQW5ndWxhciBpbnB1dCBiaW5kaW5ncy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gdHJhbnNmb3JtIHRoZSB2YWx1ZSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuXG4gICAqIEUuZy4gdHJhbnNmb3JtaW5nIGBcInRydWVcImAgdG8gYHRydWVgIGZvciBhIGJvb2xlYW4gYXR0cmlidXRlLlxuICAgKi9cbiAgdHJhbnNmb3JtPzogKHZhbHVlOiBJbikgPT4gT3V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGluamVjdE9yUnVuSW5Db250ZXh0ID0gPFQ+KGZuOiAoKSA9PiBULCBjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnKSA9PiB7XG4gIGlmIChjb25maWc/LmluamVjdG9yKSB7XG4gICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChjb25maWcuaW5qZWN0b3IsIGZuKTtcbiAgfVxuXG4gIHJldHVybiBmbigpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU9yUmV0dXJuID0gPEluLCBPdXQ+KHNyYzogU2lnbmFsPEluPiwgY29uZmlnPzogSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxJbiwgT3V0PikgPT4ge1xuICBjb25zdCB0cmFuc2Zvcm1lciA9IGNvbmZpZz8udHJhbnNmb3JtO1xuXG4gIGlmICh0cmFuc2Zvcm1lcikge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB0cmFuc2Zvcm1lcihzcmMoKSkpO1xuICB9XG5cbiAgcmV0dXJuIHNyYyBhcyB1bmtub3duIGFzIFNpZ25hbDxPdXQ+O1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIHRoZSBjdXJyZW50IHJvdXRlIGZyYWdtZW50ICh0aGUgcGFydCBhZnRlciB0aGUgIyBpbnNpZGUgdGhlIHVybCBpZiBwcmVzZW50KSAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEZyYWdtZW50ID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcbiAgICBjb25zdCBzcmMgPSB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UuZnJhZ21lbnQkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLmZyYWdtZW50IH0pO1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgcXVlcnkgcGFyYW1ldGVycyBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFF1ZXJ5UGFyYW1zID0gKGNvbmZpZz86IEluamVjdFV0aWxDb25maWcpID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcblxuICAgIHJldHVybiB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UucXVlcnlQYXJhbXMkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLnF1ZXJ5UGFyYW1zIH0pO1xuICB9LCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhbGwgY3VycmVudGx5IGF2YWlsYWJsZSByb3V0ZSBkYXRhIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0Um91dGVEYXRhID0gKGNvbmZpZz86IEluamVjdFV0aWxDb25maWcpID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcblxuICAgIHJldHVybiB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UuZGF0YSQsIHsgaW5pdGlhbFZhbHVlOiByb3V0ZXJTdGF0ZVNlcnZpY2UuZGF0YSB9KTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgdGhlIGN1cnJlbnQgcm91dGUgdGl0bGUgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RSb3V0ZVRpdGxlID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcbiAgICBjb25zdCBzcmMgPSB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UudGl0bGUkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLnRpdGxlIH0pO1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgcGF0aCBwYXJhbWV0ZXJzIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0UGF0aFBhcmFtcyA9IChjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG5cbiAgICByZXR1cm4gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLnBhdGhQYXJhbXMkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLnBhdGhQYXJhbXMgfSk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc3BlY2lmaWMgcXVlcnkgcGFyYW1ldGVyIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0UXVlcnlQYXJhbSA9IDxUIGV4dGVuZHMgc3RyaW5nPihcbiAga2V5OiBzdHJpbmcsXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gaW5qZWN0UXVlcnlQYXJhbXMoY29uZmlnKTtcbiAgY29uc3Qgc3JjID0gY29tcHV0ZWQoKCkgPT4gcXVlcnlQYXJhbXMoKVtrZXldID8/IG51bGwpIGFzIFNpZ25hbDxUIHwgbnVsbD47XG5cbiAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYSBzcGVjaWZpYyByb3V0ZSBkYXRhIGl0ZW0gYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RSb3V0ZURhdGFJdGVtID0gPFQgPSB1bmtub3duPihcbiAga2V5OiBzdHJpbmcsXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHVua25vd24sIFQ+LFxuKSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBpbmplY3RSb3V0ZURhdGEoY29uZmlnKTtcbiAgY29uc3Qgc3JjID0gY29tcHV0ZWQoKCkgPT4gZGF0YSgpW2tleV0gPz8gbnVsbCkgYXMgU2lnbmFsPFQ+O1xuXG4gIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc3BlY2lmaWMgcGF0aCBwYXJhbWV0ZXIgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RQYXRoUGFyYW0gPSA8VCA9IHN0cmluZyB8IG51bGw+KFxuICBrZXk6IHN0cmluZyxcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgY29uc3QgcGF0aFBhcmFtcyA9IGluamVjdFBhdGhQYXJhbXMoY29uZmlnKTtcbiAgY29uc3Qgc3JjID0gY29tcHV0ZWQoKCkgPT4gcGF0aFBhcmFtcygpW2tleV0gPz8gbnVsbCkgYXMgU2lnbmFsPHN0cmluZyB8IG51bGw+O1xuXG4gIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG59O1xuIl19
|