@dereekb/dbx-web 9.3.2 → 9.5.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.
Files changed (53) hide show
  1. package/esm2020/lib/extension/calendar/calendar.component.mjs +2 -2
  2. package/esm2020/lib/extension/calendar/calendar.store.mjs +2 -2
  3. package/esm2020/lib/index.mjs +2 -1
  4. package/esm2020/lib/layout/bar/bar.mjs +1 -1
  5. package/esm2020/lib/layout/column/two/two.column.right.component.mjs +5 -3
  6. package/esm2020/lib/layout/style/index.mjs +2 -1
  7. package/esm2020/lib/layout/style/style.mjs +16 -0
  8. package/esm2020/lib/util/cdk.mjs +22 -0
  9. package/esm2020/lib/util/index.mjs +2 -0
  10. package/esm2020/mapbox/lib/index.mjs +4 -1
  11. package/esm2020/mapbox/lib/mapbox.layout.component.mjs +132 -0
  12. package/esm2020/mapbox/lib/mapbox.layout.drawer.component.mjs +24 -0
  13. package/esm2020/mapbox/lib/mapbox.menu.component.mjs +98 -0
  14. package/esm2020/mapbox/lib/mapbox.mjs +1 -1
  15. package/esm2020/mapbox/lib/mapbox.module.mjs +53 -6
  16. package/esm2020/mapbox/lib/mapbox.store.map.directive.mjs +4 -8
  17. package/esm2020/mapbox/lib/mapbox.store.mjs +46 -6
  18. package/fesm2015/dereekb-dbx-web-mapbox.mjs +337 -20
  19. package/fesm2015/dereekb-dbx-web-mapbox.mjs.map +1 -1
  20. package/fesm2015/dereekb-dbx-web.mjs +60 -21
  21. package/fesm2015/dereekb-dbx-web.mjs.map +1 -1
  22. package/fesm2020/dereekb-dbx-web-mapbox.mjs +331 -20
  23. package/fesm2020/dereekb-dbx-web-mapbox.mjs.map +1 -1
  24. package/fesm2020/dereekb-dbx-web.mjs +60 -21
  25. package/fesm2020/dereekb-dbx-web.mjs.map +1 -1
  26. package/lib/index.d.ts +1 -0
  27. package/lib/layout/bar/bar.d.ts +2 -1
  28. package/lib/layout/column/two/two.column.right.component.d.ts +2 -1
  29. package/lib/layout/style/_style.scss +11 -0
  30. package/lib/layout/style/index.d.ts +1 -0
  31. package/lib/layout/style/style.d.ts +3 -0
  32. package/lib/util/cdk.d.ts +9 -0
  33. package/lib/util/index.d.ts +1 -0
  34. package/mapbox/esm2020/lib/index.mjs +4 -1
  35. package/mapbox/esm2020/lib/mapbox.layout.component.mjs +132 -0
  36. package/mapbox/esm2020/lib/mapbox.layout.drawer.component.mjs +24 -0
  37. package/mapbox/esm2020/lib/mapbox.menu.component.mjs +98 -0
  38. package/mapbox/esm2020/lib/mapbox.mjs +1 -1
  39. package/mapbox/esm2020/lib/mapbox.module.mjs +53 -6
  40. package/mapbox/esm2020/lib/mapbox.store.map.directive.mjs +4 -8
  41. package/mapbox/esm2020/lib/mapbox.store.mjs +46 -6
  42. package/mapbox/fesm2015/dereekb-dbx-web-mapbox.mjs +337 -20
  43. package/mapbox/fesm2015/dereekb-dbx-web-mapbox.mjs.map +1 -1
  44. package/mapbox/fesm2020/dereekb-dbx-web-mapbox.mjs +331 -20
  45. package/mapbox/fesm2020/dereekb-dbx-web-mapbox.mjs.map +1 -1
  46. package/mapbox/lib/index.d.ts +3 -0
  47. package/mapbox/lib/mapbox.layout.component.d.ts +44 -0
  48. package/mapbox/lib/mapbox.layout.drawer.component.d.ts +12 -0
  49. package/mapbox/lib/mapbox.menu.component.d.ts +30 -0
  50. package/mapbox/lib/mapbox.module.d.ts +10 -2
  51. package/mapbox/lib/mapbox.store.d.ts +29 -0
  52. package/mapbox/package.json +5 -5
  53. package/package.json +3 -3
@@ -0,0 +1,98 @@
1
+ import { SubscriptionObject } from '@dereekb/rxjs';
2
+ import { filter, switchMap, BehaviorSubject, of } from 'rxjs';
3
+ import { DbxMapboxMapStore } from './mapbox.store';
4
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Host, Input } from '@angular/core';
5
+ import { DestroyFunctionObject } from '@dereekb/util';
6
+ import { MatMenuTrigger } from '@angular/material/menu';
7
+ import { AbstractSubscriptionDirective, safeMarkForCheck } from '@dereekb/dbx-core';
8
+ import { disableRightClickInCdkBackdrop } from '@dereekb/dbx-web';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "./mapbox.store";
11
+ import * as i2 from "@angular/material/menu";
12
+ /**
13
+ * Directive that connects a host MatMenuTrigger to a DbxMapboxMapStore and listens for right-clicks on the map.
14
+ *
15
+ * The map dissapears if the mouse scrolls anywhere else on the map.
16
+ */
17
+ export class DbxMapboxMenuComponent extends AbstractSubscriptionDirective {
18
+ constructor(dbxMapboxMapStore, matMenuTrigger, cdRef) {
19
+ super();
20
+ this.dbxMapboxMapStore = dbxMapboxMapStore;
21
+ this.matMenuTrigger = matMenuTrigger;
22
+ this.cdRef = cdRef;
23
+ this._pos = { x: `0`, y: `0` };
24
+ this._active = new BehaviorSubject(true);
25
+ this._menuCloseSub = new SubscriptionObject();
26
+ this._preventRightClick = new DestroyFunctionObject();
27
+ }
28
+ get pos() {
29
+ return this._pos;
30
+ }
31
+ ngOnInit() {
32
+ this.sub = this._active
33
+ .pipe(switchMap((active) => {
34
+ if (active) {
35
+ return this.dbxMapboxMapStore.rightClickEvent$;
36
+ }
37
+ else {
38
+ return of();
39
+ }
40
+ }), filter(Boolean))
41
+ .subscribe((event) => {
42
+ const menu = this.matMenuTrigger.menu;
43
+ const buttonEvent = event.originalEvent;
44
+ if (menu && buttonEvent) {
45
+ buttonEvent.preventDefault();
46
+ // update position of this component for menu to open at
47
+ this._pos = {
48
+ x: `${buttonEvent.x}px`,
49
+ y: `${buttonEvent.y}px`
50
+ };
51
+ safeMarkForCheck(this.cdRef);
52
+ // open menu
53
+ this.matMenuTrigger.openMenu();
54
+ // prevent right clicks in the cdkOverlay while the menu is open
55
+ this._preventRightClick.destroy = disableRightClickInCdkBackdrop(undefined, () => {
56
+ this.matMenuTrigger.closeMenu();
57
+ });
58
+ }
59
+ });
60
+ this._menuCloseSub.subscription = this.matMenuTrigger.menuClosed.subscribe(() => {
61
+ // destroy prevention when the menu is closed.
62
+ this._preventRightClick.destroy();
63
+ });
64
+ }
65
+ ngOnDestroy() {
66
+ super.ngOnDestroy();
67
+ this._active.complete();
68
+ this._preventRightClick.destroy();
69
+ this._menuCloseSub.destroy();
70
+ if (this.matMenuTrigger) {
71
+ this.matMenuTrigger.closeMenu();
72
+ }
73
+ }
74
+ set active(active) {
75
+ this._active.next(active ?? true);
76
+ }
77
+ }
78
+ DbxMapboxMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMenuComponent, deps: [{ token: i1.DbxMapboxMapStore }, { token: i2.MatMenuTrigger, host: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
79
+ DbxMapboxMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: DbxMapboxMenuComponent, selector: "dbx-mapbox-menu", inputs: { active: ["dbxMapboxMenu", "active"] }, host: { properties: { "style.top": "pos.y", "style.left": "pos.x" }, styleAttribute: "visibility: hidden; position: fixed" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMenuComponent, decorators: [{
81
+ type: Component,
82
+ args: [{
83
+ selector: 'dbx-mapbox-menu',
84
+ template: '',
85
+ host: {
86
+ style: 'visibility: hidden; position: fixed',
87
+ '[style.top]': 'pos.y',
88
+ '[style.left]': 'pos.x'
89
+ },
90
+ changeDetection: ChangeDetectionStrategy.OnPush
91
+ }]
92
+ }], ctorParameters: function () { return [{ type: i1.DbxMapboxMapStore }, { type: i2.MatMenuTrigger, decorators: [{
93
+ type: Host
94
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { active: [{
95
+ type: Input,
96
+ args: ['dbxMapboxMenu']
97
+ }] } });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94Lm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3gubWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYSxJQUFJLEVBQWdCLEtBQUssRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFFekosT0FBTyxFQUErQyxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQVcsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFFbEU7Ozs7R0FJRztBQVdILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSw2QkFBNkI7SUFXdkUsWUFBcUIsaUJBQW9DLEVBQW1CLGNBQThCLEVBQVcsS0FBd0I7UUFDM0ksS0FBSyxFQUFFLENBQUM7UUFEVyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQW1CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFXLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBVnJJLFNBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzFCLFlBQU8sR0FBRyxJQUFJLGVBQWUs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MkQ1RCxNQUFNO3NCQURULEtBQUs7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbk9iamVjdCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAsIEJlaGF2aW9yU3ViamVjdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERieE1hcGJveFNlcnZpY2UgfSBmcm9tICcuL21hcGJveC5zZXJ2aWNlJztcbmltcG9ydCB7IERieE1hcGJveE1hcFN0b3JlIH0gZnJvbSAnLi9tYXBib3guc3RvcmUnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERpcmVjdGl2ZSwgSG9zdCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQsIE1hcFNlcnZpY2UgfSBmcm9tICduZ3gtbWFwYm94LWdsJztcbmltcG9ydCB7IFZlY3RvciwgbGF0TG5nUG9pbnQsIE1heWJlLCBEZXN0cm95RnVuY3Rpb24sIERlc3Ryb3lGdW5jdGlvbk9iamVjdCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgTWF0TWVudSwgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IEFic3RyYWN0U3Vic2NyaXB0aW9uRGlyZWN0aXZlLCBzYWZlTWFya0ZvckNoZWNrIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgZGlzYWJsZVJpZ2h0Q2xpY2tJbkNka0JhY2tkcm9wIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgY29ubmVjdHMgYSBob3N0IE1hdE1lbnVUcmlnZ2VyIHRvIGEgRGJ4TWFwYm94TWFwU3RvcmUgYW5kIGxpc3RlbnMgZm9yIHJpZ2h0LWNsaWNrcyBvbiB0aGUgbWFwLlxuICpcbiAqIFRoZSBtYXAgZGlzc2FwZWFycyBpZiB0aGUgbW91c2Ugc2Nyb2xscyBhbnl3aGVyZSBlbHNlIG9uIHRoZSBtYXAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC1tYXBib3gtbWVudScsXG4gIHRlbXBsYXRlOiAnJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiAndmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogZml4ZWQnLFxuICAgICdbc3R5bGUudG9wXSc6ICdwb3MueScsXG4gICAgJ1tzdHlsZS5sZWZ0XSc6ICdwb3MueCdcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TWVudUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0U3Vic2NyaXB0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9wb3MgPSB7IHg6IGAwYCwgeTogYDBgIH07XG4gIHByaXZhdGUgX2FjdGl2ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSBfbWVudUNsb3NlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9wcmV2ZW50UmlnaHRDbGljayA9IG5ldyBEZXN0cm95RnVuY3Rpb25PYmplY3QoKTtcblxuICBnZXQgcG9zKCkge1xuICAgIHJldHVybiB0aGlzLl9wb3M7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBkYnhNYXBib3hNYXBTdG9yZTogRGJ4TWFwYm94TWFwU3RvcmUsIEBIb3N0KCkgcmVhZG9ubHkgbWF0TWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyLCByZWFkb25seSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWIgPSB0aGlzLl9hY3RpdmVcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGFjdGl2ZSkgPT4ge1xuICAgICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRieE1hcGJveE1hcFN0b3JlLnJpZ2h0Q2xpY2tFdmVudCQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcihCb29sZWFuKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMubWF0TWVudVRyaWdnZXIubWVudTtcbiAgICAgICAgY29uc3QgYnV0dG9uRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuXG4gICAgICAgIGlmIChtZW51ICYmIGJ1dHRvbkV2ZW50KSB7XG4gICAgICAgICAgYnV0dG9uRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbiBvZiB0aGlzIGNvbXBvbmVudCBmb3IgbWVudSB0byBvcGVuIGF0XG4gICAgICAgICAgdGhpcy5fcG9zID0ge1xuICAgICAgICAgICAgeDogYCR7YnV0dG9uRXZlbnQueH1weGAsXG4gICAgICAgICAgICB5OiBgJHtidXR0b25FdmVudC55fXB4YFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzYWZlTWFya0ZvckNoZWNrKHRoaXMuY2RSZWYpO1xuXG4gICAgICAgICAgLy8gb3BlbiBtZW51XG4gICAgICAgICAgdGhpcy5tYXRNZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuXG4gICAgICAgICAgLy8gcHJldmVudCByaWdodCBjbGlja3MgaW4gdGhlIGNka092ZXJsYXkgd2hpbGUgdGhlIG1lbnUgaXMgb3BlblxuICAgICAgICAgIHRoaXMuX3ByZXZlbnRSaWdodENsaWNrLmRlc3Ryb3kgPSBkaXNhYmxlUmlnaHRDbGlja0luQ2RrQmFja2Ryb3AodW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hdE1lbnVUcmlnZ2VyLmNsb3NlTWVudSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuX21lbnVDbG9zZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLm1hdE1lbnVUcmlnZ2VyLm1lbnVDbG9zZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIC8vIGRlc3Ryb3kgcHJldmVudGlvbiB3aGVuIHRoZSBtZW51IGlzIGNsb3NlZC5cbiAgICAgIHRoaXMuX3ByZXZlbnRSaWdodENsaWNrLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fYWN0aXZlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcHJldmVudFJpZ2h0Q2xpY2suZGVzdHJveSgpO1xuICAgIHRoaXMuX21lbnVDbG9zZVN1Yi5kZXN0cm95KCk7XG5cbiAgICBpZiAodGhpcy5tYXRNZW51VHJpZ2dlcikge1xuICAgICAgdGhpcy5tYXRNZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoJ2RieE1hcGJveE1lbnUnKVxuICBzZXQgYWN0aXZlKGFjdGl2ZTogTWF5YmU8Ym9vbGVhbj4pIHtcbiAgICB0aGlzLl9hY3RpdmUubmV4dChhY3RpdmUgPz8gdHJ1ZSk7XG4gIH1cbn1cbiJdfQ==
@@ -9,4 +9,4 @@ export const KNOWN_MAPBOX_STYLES = [
9
9
  'mapbox://styles/mapbox/navigation-day-v1',
10
10
  'mapbox://styles/mapbox/navigation-night-v1'
11
11
  ];
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQXVCO0lBQ3JELEVBQUU7SUFDRixvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLGtDQUFrQztJQUNsQyxpQ0FBaUM7SUFDakMscUNBQXFDO0lBQ3JDLDhDQUE4QztJQUM5QywwQ0FBMEM7SUFDMUMsNENBQTRDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXRMbmdQb2ludCwgTGF0TG5nUG9pbnRJbnB1dCwgTGF0TG5nQm91bmQsIExhdExuZ0JvdW5kSW5wdXQgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5cbmV4cG9ydCB0eXBlIEtub3duTWFwYm94U3R5bGUgPSAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMScgfCAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9vdXRkb29ycy12MTEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjEwJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2RhcmstdjEwJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS12OScgfCAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtc3RyZWV0cy12MTEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1kYXktdjEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1uaWdodC12MSc7XG5cbmV4cG9ydCBjb25zdCBLTk9XTl9NQVBCT1hfU1RZTEVTOiBLbm93bk1hcGJveFN0eWxlW10gPSBbXG4gIC8vXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvb3V0ZG9vcnMtdjExJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjEwJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvZGFyay12MTAnLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtdjknLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtc3RyZWV0cy12MTEnLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLWRheS12MScsXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tbmlnaHQtdjEnXG5dO1xuXG5leHBvcnQgdHlwZSBNYXBib3hab29tTGV2ZWwgPSBudW1iZXI7XG5leHBvcnQgdHlwZSBNYXBib3hQaXRjaCA9IG51bWJlcjtcbmV4cG9ydCB0eXBlIE1hcGJveEJlYXJpbmcgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIERieE1hcGJveENsaWNrRXZlbnQgPSBNYXBib3hHbC5NYXBNb3VzZUV2ZW50ICYgTWFwYm94R2wuRXZlbnREYXRhO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveFN0eWxlQ29uZmlnIHtcbiAgc3R5bGU6IE1hcGJveEdsLlN0eWxlIHwgc3RyaW5nO1xuICBvcHRpb25zPzoge1xuICAgIGRpZmY/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hGaXRCb3VuZHMge1xuICBib3VuZHM6IExhdExuZ0JvdW5kSW5wdXQ7XG4gIG9wdGlvbnM/OiBtYXBib3hnbC5GaXRCb3VuZHNPcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94SnVtcFRvUG9zaXRpb25PcHRpb25zIGV4dGVuZHMgT21pdDxNYXBib3hHbC5DYW1lcmFPcHRpb25zLCAnY2VudGVyJz4ge1xuICBjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94SnVtcFRvIHtcbiAgY2VudGVyPzogTGF0TG5nUG9pbnRJbnB1dDtcbiAgdG8/OiBNYXBib3hKdW1wVG9Qb3NpdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hFYXNlVG9Qb3NpdGlvbk9wdGlvbnMgZXh0ZW5kcyBPbWl0PE1hcGJveEdsLkVhc2VUb09wdGlvbnMsICdjZW50ZXInPiwgTWFwYm94SnVtcFRvUG9zaXRpb25PcHRpb25zIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94RWFzZVRvIHtcbiAgY2VudGVyPzogTGF0TG5nUG9pbnRJbnB1dDtcbiAgdG8/OiBNYXBib3hFYXNlVG9Qb3NpdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hGbHlUb1Bvc2l0aW9uT3B0aW9ucyBleHRlbmRzIE9taXQ8TWFwYm94R2wuRmx5VG9PcHRpb25zLCAnY2VudGVyJz4sIE1hcGJveEp1bXBUb1Bvc2l0aW9uT3B0aW9ucyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveEZseVRvIHtcbiAgY2VudGVyPzogTGF0TG5nUG9pbnRJbnB1dDtcbiAgdG8/OiBNYXBib3hGbHlUb1Bvc2l0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveFJvdGF0ZVRvIHtcbiAgYmVhcmluZzogTWFwYm94QmVhcmluZztcbiAgb3B0aW9ucz86IG1hcGJveGdsLkFuaW1hdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hSZXNldE5vcnRoIHtcbiAgb3B0aW9ucz86IG1hcGJveGdsLkFuaW1hdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hSZXNldE5vcnRoUGl0Y2gge1xuICBvcHRpb25zPzogbWFwYm94Z2wuQW5pbWF0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveFNuYXBUb05vcnRoIHtcbiAgb3B0aW9ucz86IG1hcGJveGdsLkFuaW1hdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cbiJdfQ==
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQXVCO0lBQ3JELEVBQUU7SUFDRixvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLGtDQUFrQztJQUNsQyxpQ0FBaUM7SUFDakMscUNBQXFDO0lBQ3JDLDhDQUE4QztJQUM5QywwQ0FBMEM7SUFDMUMsNENBQTRDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXRMbmdQb2ludElucHV0LCBMYXRMbmdCb3VuZElucHV0IH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgKiBhcyBNYXBib3hHbCBmcm9tICdtYXBib3gtZ2wnO1xuXG5leHBvcnQgdHlwZSBLbm93bk1hcGJveFN0eWxlID0gJ21hcGJveDovL3N0eWxlcy9tYXBib3gvc3RyZWV0cy12MTEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvb3V0ZG9vcnMtdjExJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2xpZ2h0LXYxMCcgfCAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9kYXJrLXYxMCcgfCAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtdjknIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvc2F0ZWxsaXRlLXN0cmVldHMtdjExJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tZGF5LXYxJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tbmlnaHQtdjEnO1xuXG5leHBvcnQgY29uc3QgS05PV05fTUFQQk9YX1NUWUxFUzogS25vd25NYXBib3hTdHlsZVtdID0gW1xuICAvL1xuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMScsXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L291dGRvb3JzLXYxMScsXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2xpZ2h0LXYxMCcsXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2RhcmstdjEwJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvc2F0ZWxsaXRlLXY5JyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvc2F0ZWxsaXRlLXN0cmVldHMtdjExJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1kYXktdjEnLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLW5pZ2h0LXYxJ1xuXTtcblxuZXhwb3J0IHR5cGUgTWFwYm94Wm9vbUxldmVsID0gbnVtYmVyO1xuZXhwb3J0IHR5cGUgTWFwYm94UGl0Y2ggPSBudW1iZXI7XG5leHBvcnQgdHlwZSBNYXBib3hCZWFyaW5nID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBEYnhNYXBib3hDbGlja0V2ZW50ID0gTWFwYm94R2wuTWFwTW91c2VFdmVudCAmIE1hcGJveEdsLkV2ZW50RGF0YTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hTdHlsZUNvbmZpZyB7XG4gIHN0eWxlOiBNYXBib3hHbC5TdHlsZSB8IHN0cmluZztcbiAgb3B0aW9ucz86IHtcbiAgICBkaWZmPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94Rml0Qm91bmRzIHtcbiAgYm91bmRzOiBMYXRMbmdCb3VuZElucHV0O1xuICBvcHRpb25zPzogbWFwYm94Z2wuRml0Qm91bmRzT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveEp1bXBUb1Bvc2l0aW9uT3B0aW9ucyBleHRlbmRzIE9taXQ8TWFwYm94R2wuQ2FtZXJhT3B0aW9ucywgJ2NlbnRlcic+IHtcbiAgY2VudGVyOiBMYXRMbmdQb2ludElucHV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveEp1bXBUbyB7XG4gIGNlbnRlcj86IExhdExuZ1BvaW50SW5wdXQ7XG4gIHRvPzogTWFwYm94SnVtcFRvUG9zaXRpb25PcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94RWFzZVRvUG9zaXRpb25PcHRpb25zIGV4dGVuZHMgT21pdDxNYXBib3hHbC5FYXNlVG9PcHRpb25zLCAnY2VudGVyJz4sIE1hcGJveEp1bXBUb1Bvc2l0aW9uT3B0aW9ucyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveEVhc2VUbyB7XG4gIGNlbnRlcj86IExhdExuZ1BvaW50SW5wdXQ7XG4gIHRvPzogTWFwYm94RWFzZVRvUG9zaXRpb25PcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94Rmx5VG9Qb3NpdGlvbk9wdGlvbnMgZXh0ZW5kcyBPbWl0PE1hcGJveEdsLkZseVRvT3B0aW9ucywgJ2NlbnRlcic+LCBNYXBib3hKdW1wVG9Qb3NpdGlvbk9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hGbHlUbyB7XG4gIGNlbnRlcj86IExhdExuZ1BvaW50SW5wdXQ7XG4gIHRvPzogTWFwYm94Rmx5VG9Qb3NpdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hSb3RhdGVUbyB7XG4gIGJlYXJpbmc6IE1hcGJveEJlYXJpbmc7XG4gIG9wdGlvbnM/OiBtYXBib3hnbC5BbmltYXRpb25PcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94UmVzZXROb3J0aCB7XG4gIG9wdGlvbnM/OiBtYXBib3hnbC5BbmltYXRpb25PcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94UmVzZXROb3J0aFBpdGNoIHtcbiAgb3B0aW9ucz86IG1hcGJveGdsLkFuaW1hdGlvbk9wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hTbmFwVG9Ob3J0aCB7XG4gIG9wdGlvbnM/OiBtYXBib3hnbC5BbmltYXRpb25PcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG4iXX0=
@@ -2,7 +2,22 @@ import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { DbxMapboxMapDirective } from './mapbox.store.map.directive';
4
4
  import { DbxMapboxConfig } from './mapbox.service';
5
+ import { DbxMapboxLayoutComponent } from './mapbox.layout.component';
6
+ import { MatSidenavModule } from '@angular/material/sidenav';
7
+ import { DbxMapboxLayoutDrawerComponent } from './mapbox.layout.drawer.component';
8
+ import { DbxInjectionComponentModule } from '@dereekb/dbx-core';
9
+ import { MatButtonModule } from '@angular/material/button';
10
+ import { MatIconModule } from '@angular/material/icon';
11
+ import { AngularResizeEventModule } from 'angular-resize-event';
12
+ import { DbxMapboxMenuComponent } from './mapbox.menu.component';
5
13
  import * as i0 from "@angular/core";
14
+ const declarations = [
15
+ //
16
+ DbxMapboxMapDirective,
17
+ DbxMapboxLayoutComponent,
18
+ DbxMapboxLayoutDrawerComponent,
19
+ DbxMapboxMenuComponent
20
+ ];
6
21
  export class DbxMapboxModule {
7
22
  static forRoot(config) {
8
23
  return {
@@ -17,14 +32,46 @@ export class DbxMapboxModule {
17
32
  }
18
33
  }
19
34
  DbxMapboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
- DbxMapboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, declarations: [DbxMapboxMapDirective], imports: [CommonModule], exports: [DbxMapboxMapDirective] });
21
- DbxMapboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, imports: [CommonModule] });
35
+ DbxMapboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, declarations: [
36
+ //
37
+ DbxMapboxMapDirective,
38
+ DbxMapboxLayoutComponent,
39
+ DbxMapboxLayoutDrawerComponent,
40
+ DbxMapboxMenuComponent], imports: [
41
+ //
42
+ CommonModule,
43
+ MatSidenavModule,
44
+ DbxInjectionComponentModule,
45
+ MatButtonModule,
46
+ MatIconModule,
47
+ AngularResizeEventModule], exports: [
48
+ //
49
+ DbxMapboxMapDirective,
50
+ DbxMapboxLayoutComponent,
51
+ DbxMapboxLayoutDrawerComponent,
52
+ DbxMapboxMenuComponent] });
53
+ DbxMapboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, imports: [
54
+ //
55
+ CommonModule,
56
+ MatSidenavModule,
57
+ DbxInjectionComponentModule,
58
+ MatButtonModule,
59
+ MatIconModule,
60
+ AngularResizeEventModule] });
22
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxModule, decorators: [{
23
62
  type: NgModule,
24
63
  args: [{
25
- imports: [CommonModule],
26
- declarations: [DbxMapboxMapDirective],
27
- exports: [DbxMapboxMapDirective]
64
+ imports: [
65
+ //
66
+ CommonModule,
67
+ MatSidenavModule,
68
+ DbxInjectionComponentModule,
69
+ MatButtonModule,
70
+ MatIconModule,
71
+ AngularResizeEventModule
72
+ ],
73
+ declarations,
74
+ exports: declarations
28
75
  }]
29
76
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvbWFwYm94L3NyYy9saWIvbWFwYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQU9uRCxNQUFNLE9BQU8sZUFBZTtJQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXVCO1FBQ3BDLE9BQU87WUFDTCxRQUFRLEVBQUUsZUFBZTtZQUN6QixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFFBQVEsRUFBRSxNQUFNO2lCQUNqQjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7OzRHQVhVLGVBQWU7NkdBQWYsZUFBZSxpQkFIWCxxQkFBcUIsYUFEMUIsWUFBWSxhQUVaLHFCQUFxQjs2R0FFcEIsZUFBZSxZQUpoQixZQUFZOzJGQUlYLGVBQWU7a0JBTDNCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDckMsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYnhNYXBib3hNYXBEaXJlY3RpdmUgfSBmcm9tICcuL21hcGJveC5zdG9yZS5tYXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IERieE1hcGJveENvbmZpZyB9IGZyb20gJy4vbWFwYm94LnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbRGJ4TWFwYm94TWFwRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW0RieE1hcGJveE1hcERpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBEYnhNYXBib3hDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPERieE1hcGJveE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogRGJ4TWFwYm94TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBEYnhNYXBib3hDb25maWcsXG4gICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvbWFwYm94L3NyYy9saWIvbWFwYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRWpFLE1BQU0sWUFBWSxHQUFHO0lBQ25CLEVBQUU7SUFDRixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLDhCQUE4QjtJQUM5QixzQkFBc0I7Q0FDdkIsQ0FBQztBQWVGLE1BQU0sT0FBTyxlQUFlO0lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBdUI7UUFDcEMsT0FBTztZQUNMLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsZUFBZTtvQkFDeEIsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7NEdBWFUsZUFBZTs2R0FBZixlQUFlO1FBcEIxQixFQUFFO1FBQ0YscUJBQXFCO1FBQ3JCLHdCQUF3QjtRQUN4Qiw4QkFBOEI7UUFDOUIsc0JBQXNCO1FBS3BCLEVBQUU7UUFDRixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLDJCQUEyQjtRQUMzQixlQUFlO1FBQ2YsYUFBYTtRQUNiLHdCQUF3QjtRQWYxQixFQUFFO1FBQ0YscUJBQXFCO1FBQ3JCLHdCQUF3QjtRQUN4Qiw4QkFBOEI7UUFDOUIsc0JBQXNCOzZHQWdCWCxlQUFlO1FBWHhCLEVBQUU7UUFDRixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLDJCQUEyQjtRQUMzQixlQUFlO1FBQ2YsYUFBYTtRQUNiLHdCQUF3QjsyRkFLZixlQUFlO2tCQWIzQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxFQUFFO3dCQUNGLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQiwyQkFBMkI7d0JBQzNCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYix3QkFBd0I7cUJBQ3pCO29CQUNELFlBQVk7b0JBQ1osT0FBTyxFQUFFLFlBQVk7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYnhNYXBib3hNYXBEaXJlY3RpdmUgfSBmcm9tICcuL21hcGJveC5zdG9yZS5tYXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IERieE1hcGJveENvbmZpZyB9IGZyb20gJy4vbWFwYm94LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGJ4TWFwYm94TGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi9tYXBib3gubGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQgeyBEYnhNYXBib3hMYXlvdXREcmF3ZXJDb21wb25lbnQgfSBmcm9tICcuL21hcGJveC5sYXlvdXQuZHJhd2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnRNb2R1bGUgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgQW5ndWxhclJlc2l6ZUV2ZW50TW9kdWxlIH0gZnJvbSAnYW5ndWxhci1yZXNpemUtZXZlbnQnO1xuaW1wb3J0IHsgRGJ4TWFwYm94TWVudUNvbXBvbmVudCB9IGZyb20gJy4vbWFwYm94Lm1lbnUuY29tcG9uZW50JztcblxuY29uc3QgZGVjbGFyYXRpb25zID0gW1xuICAvL1xuICBEYnhNYXBib3hNYXBEaXJlY3RpdmUsXG4gIERieE1hcGJveExheW91dENvbXBvbmVudCxcbiAgRGJ4TWFwYm94TGF5b3V0RHJhd2VyQ29tcG9uZW50LFxuICBEYnhNYXBib3hNZW51Q29tcG9uZW50XG5dO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgLy9cbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0U2lkZW5hdk1vZHVsZSxcbiAgICBEYnhJbmplY3Rpb25Db21wb25lbnRNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgQW5ndWxhclJlc2l6ZUV2ZW50TW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9ucyxcbiAgZXhwb3J0czogZGVjbGFyYXRpb25zXG59KVxuZXhwb3J0IGNsYXNzIERieE1hcGJveE1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogRGJ4TWFwYm94Q29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxEYnhNYXBib3hNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IERieE1hcGJveE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogRGJ4TWFwYm94Q29uZmlnLFxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -2,7 +2,7 @@ import { DbxMapboxService } from './mapbox.service';
2
2
  import { DbxMapboxMapStore } from './mapbox.store';
3
3
  import { Directive, Host, Optional } from '@angular/core';
4
4
  import { MapComponent, MapService } from 'ngx-mapbox-gl';
5
- import { latLngTuple } from '@dereekb/util';
5
+ import { latLngPoint } from '@dereekb/util';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "ngx-mapbox-gl";
8
8
  import * as i2 from "./mapbox.service";
@@ -22,14 +22,10 @@ export class DbxMapboxMapDirective {
22
22
  ngOnInit() {
23
23
  // style must be provided first before the map will load.
24
24
  this.mapboxMap.style = this.dbxMapboxService.defaultStyle;
25
+ this.mapboxMap.zoom = [this.dbxMapboxService.defaultZoom];
26
+ this.mapboxMap.center = latLngPoint(this.dbxMapboxService.defaultCenter);
25
27
  if (this.dbxMapboxMapStore) {
26
28
  this.dbxMapboxMapStore.setMapService(this.mapService);
27
- this.dbxMapboxMapStore.setCenter(this.dbxMapboxService.defaultCenter);
28
- this.dbxMapboxMapStore.setZoom(this.dbxMapboxService.defaultZoom);
29
- }
30
- else {
31
- this.mapboxMap.zoom = [this.dbxMapboxService.defaultZoom];
32
- this.mapboxMap.center = latLngTuple(this.dbxMapboxService.defaultCenter);
33
29
  }
34
30
  }
35
31
  }
@@ -47,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
47
43
  }] }, { type: i2.DbxMapboxService }, { type: i3.DbxMapboxMapStore, decorators: [{
48
44
  type: Optional
49
45
  }] }]; } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLm1hcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL21hcGJveC9zcmMvbGliL21hcGJveC5zdG9yZS5tYXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQUU1Qzs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7SUFDRSxFQUFFO0lBQ2UsVUFBc0IsRUFDdEIsU0FBdUIsRUFDL0IsZ0JBQWtDLEVBQ3RCLGlCQUFvQztRQUh4QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQ3hELENBQUM7SUFFSixRQUFRO1FBQ04seURBQXlEO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7UUFFMUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbkU7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUU7SUFDSCxDQUFDOztrSEFyQlUscUJBQXFCO3NHQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQjs7MEJBSUksSUFBSTs7MEJBQ0osSUFBSTs7MEJBRUosUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERieE1hcGJveFNlcnZpY2UgfSBmcm9tICcuL21hcGJveC5zZXJ2aWNlJztcbmltcG9ydCB7IERieE1hcGJveE1hcFN0b3JlIH0gZnJvbSAnLi9tYXBib3guc3RvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQsIE1hcFNlcnZpY2UgfSBmcm9tICduZ3gtbWFwYm94LWdsJztcbmltcG9ydCB7IGxhdExuZ1R1cGxlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgY29uZmlndXJlcyBhIE1hcENvbXBvbmVudCB3aXRoIGNvbnRlbnQgZnJvbSBEYnhNYXBib3hTZXJ2aWNlLiBDb25uZWN0cyBhIGhvc3QgTWFwU2VydmljZSB0byBhIHBhcmVudCBEYnhNYXBib3hNYXBTdG9yZSBpZiBhdmFpbGFibGUuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkYnhNYXBib3hNYXBdJ1xufSlcbmV4cG9ydCBjbGFzcyBEYnhNYXBib3hNYXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvL1xuICAgIEBIb3N0KCkgcmVhZG9ubHkgbWFwU2VydmljZTogTWFwU2VydmljZSxcbiAgICBASG9zdCgpIHJlYWRvbmx5IG1hcGJveE1hcDogTWFwQ29tcG9uZW50LFxuICAgIHJlYWRvbmx5IGRieE1hcGJveFNlcnZpY2U6IERieE1hcGJveFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgZGJ4TWFwYm94TWFwU3RvcmU6IERieE1hcGJveE1hcFN0b3JlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBzdHlsZSBtdXN0IGJlIHByb3ZpZGVkIGZpcnN0IGJlZm9yZSB0aGUgbWFwIHdpbGwgbG9hZC5cbiAgICB0aGlzLm1hcGJveE1hcC5zdHlsZSA9IHRoaXMuZGJ4TWFwYm94U2VydmljZS5kZWZhdWx0U3R5bGU7XG5cbiAgICBpZiAodGhpcy5kYnhNYXBib3hNYXBTdG9yZSkge1xuICAgICAgdGhpcy5kYnhNYXBib3hNYXBTdG9yZS5zZXRNYXBTZXJ2aWNlKHRoaXMubWFwU2VydmljZSk7XG4gICAgICB0aGlzLmRieE1hcGJveE1hcFN0b3JlLnNldENlbnRlcih0aGlzLmRieE1hcGJveFNlcnZpY2UuZGVmYXVsdENlbnRlcik7XG4gICAgICB0aGlzLmRieE1hcGJveE1hcFN0b3JlLnNldFpvb20odGhpcy5kYnhNYXBib3hTZXJ2aWNlLmRlZmF1bHRab29tKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXBib3hNYXAuem9vbSA9IFt0aGlzLmRieE1hcGJveFNlcnZpY2UuZGVmYXVsdFpvb21dO1xuICAgICAgdGhpcy5tYXBib3hNYXAuY2VudGVyID0gbGF0TG5nVHVwbGUodGhpcy5kYnhNYXBib3hTZXJ2aWNlLmRlZmF1bHRDZW50ZXIpO1xuICAgIH1cbiAgfVxufVxuIl19
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLm1hcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL21hcGJveC9zcmMvbGliL21hcGJveC5zdG9yZS5tYXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQUU1Qzs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7SUFDRSxFQUFFO0lBQ2UsVUFBc0IsRUFDdEIsU0FBdUIsRUFDL0IsZ0JBQWtDLEVBQ3RCLGlCQUFvQztRQUh4QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQ3hELENBQUM7SUFFSixRQUFRO1FBQ04seURBQXlEO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7UUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6RSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7O2tIQWxCVSxxQkFBcUI7c0dBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQUhqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCOzswQkFJSSxJQUFJOzswQkFDSixJQUFJOzswQkFFSixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGJ4TWFwYm94U2VydmljZSB9IGZyb20gJy4vbWFwYm94LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGJ4TWFwYm94TWFwU3RvcmUgfSBmcm9tICcuL21hcGJveC5zdG9yZSc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hcENvbXBvbmVudCwgTWFwU2VydmljZSB9IGZyb20gJ25neC1tYXBib3gtZ2wnO1xuaW1wb3J0IHsgbGF0TG5nUG9pbnQgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdGhhdCBjb25maWd1cmVzIGEgTWFwQ29tcG9uZW50IHdpdGggY29udGVudCBmcm9tIERieE1hcGJveFNlcnZpY2UuIENvbm5lY3RzIGEgaG9zdCBNYXBTZXJ2aWNlIHRvIGEgcGFyZW50IERieE1hcGJveE1hcFN0b3JlIGlmIGF2YWlsYWJsZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RieE1hcGJveE1hcF0nXG59KVxuZXhwb3J0IGNsYXNzIERieE1hcGJveE1hcERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vXG4gICAgQEhvc3QoKSByZWFkb25seSBtYXBTZXJ2aWNlOiBNYXBTZXJ2aWNlLFxuICAgIEBIb3N0KCkgcmVhZG9ubHkgbWFwYm94TWFwOiBNYXBDb21wb25lbnQsXG4gICAgcmVhZG9ubHkgZGJ4TWFwYm94U2VydmljZTogRGJ4TWFwYm94U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSByZWFkb25seSBkYnhNYXBib3hNYXBTdG9yZTogRGJ4TWFwYm94TWFwU3RvcmVcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIHN0eWxlIG11c3QgYmUgcHJvdmlkZWQgZmlyc3QgYmVmb3JlIHRoZSBtYXAgd2lsbCBsb2FkLlxuICAgIHRoaXMubWFwYm94TWFwLnN0eWxlID0gdGhpcy5kYnhNYXBib3hTZXJ2aWNlLmRlZmF1bHRTdHlsZTtcbiAgICB0aGlzLm1hcGJveE1hcC56b29tID0gW3RoaXMuZGJ4TWFwYm94U2VydmljZS5kZWZhdWx0Wm9vbV07XG4gICAgdGhpcy5tYXBib3hNYXAuY2VudGVyID0gbGF0TG5nUG9pbnQodGhpcy5kYnhNYXBib3hTZXJ2aWNlLmRlZmF1bHRDZW50ZXIpO1xuXG4gICAgaWYgKHRoaXMuZGJ4TWFwYm94TWFwU3RvcmUpIHtcbiAgICAgIHRoaXMuZGJ4TWFwYm94TWFwU3RvcmUuc2V0TWFwU2VydmljZSh0aGlzLm1hcFNlcnZpY2UpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { cleanup, filterMaybe, onTrueToFalse } from '@dereekb/rxjs';
2
2
  import { Inject, Injectable } from '@angular/core';
3
- import { isSameLatLngBound, isSameLatLngPoint, isWithinLatLngBoundFunction, latLngBoundFunction, latLngPointFunction, overlapsLatLngBoundFunction } from '@dereekb/util';
3
+ import { isSameLatLngBound, isSameLatLngPoint, isWithinLatLngBoundFunction, latLngBoundFunction, latLngPointFunction, overlapsLatLngBoundFunction, diffLatLngBoundPoints, latLngBoundCenterPoint, addLatLngPoints } from '@dereekb/util';
4
4
  import { ComponentStore } from '@ngrx/component-store';
5
5
  import { defaultIfEmpty, distinctUntilChanged, filter, map, shareReplay, switchMap, tap, NEVER, of, startWith, interval, first, combineLatest } from 'rxjs';
6
6
  import * as MapboxGl from 'mapbox-gl';
@@ -16,7 +16,8 @@ export class DbxMapboxMapStore extends ComponentStore {
16
16
  lifecycleState: 'init',
17
17
  moveState: 'init',
18
18
  zoomState: 'init',
19
- rotateState: 'init'
19
+ rotateState: 'init',
20
+ retainContent: true
20
21
  });
21
22
  this.dbxMapboxService = dbxMapboxService;
22
23
  this.latLngPoint = latLngPointFunction();
@@ -53,6 +54,7 @@ export class DbxMapboxMapStore extends ComponentStore {
53
54
  addListener('rotateend', () => this._setRotateState('idle'));
54
55
  addListener('click', (x) => this._setClickEvent(x));
55
56
  addListener('dblclick', (x) => this._setDoubleClickEvent(x));
57
+ addListener('contextmenu', (x) => this._setRightClickEvent(x));
56
58
  const subs = [];
57
59
  return {
58
60
  service,
@@ -235,17 +237,23 @@ export class DbxMapboxMapStore extends ComponentStore {
235
237
  this.bearing$ = this.whenInitialized$.pipe(switchMap(() => {
236
238
  return this.isRotating$.pipe(onTrueToFalse(), startWith(undefined), switchMap((x) => this.bearingNow$.pipe(first())), distinctUntilChanged(), shareReplay(1));
237
239
  }));
238
- this.clickEvent$ = this.state$.pipe(map((x) => x.clickEvent));
239
- this.doubleClickEvent$ = this.state$.pipe(map((x) => x.doubleClickEvent));
240
+ this.content$ = this.state$.pipe(map((x) => x.content), distinctUntilChanged(), shareReplay(1));
241
+ this.hasContent$ = this.content$.pipe(map(Boolean));
242
+ this.clickEvent$ = this.state$.pipe(map((x) => x.clickEvent), distinctUntilChanged(), shareReplay(1));
243
+ this.doubleClickEvent$ = this.state$.pipe(map((x) => x.doubleClickEvent), distinctUntilChanged(), shareReplay(1));
244
+ this.rightClickEvent$ = this.state$.pipe(map((x) => x.rightClickEvent), distinctUntilChanged(), shareReplay(1));
240
245
  // MARK: State Changes
241
- this._setMapService = this.updater((state, mapService) => ({ mapService, moveState: 'init', lifecycleState: 'init', zoomState: 'init', rotateState: 'init' }));
246
+ this._setMapService = this.updater((state, mapService) => ({ mapService, moveState: 'init', lifecycleState: 'init', zoomState: 'init', rotateState: 'init', retainContent: state.retainContent, content: state.retainContent ? state.content : undefined }));
242
247
  this._setLifecycleState = this.updater((state, lifecycleState) => ({ ...state, lifecycleState }));
243
248
  this._setMoveState = this.updater((state, moveState) => ({ ...state, moveState }));
244
249
  this._setZoomState = this.updater((state, zoomState) => ({ ...state, zoomState }));
245
250
  this._setRotateState = this.updater((state, rotateState) => ({ ...state, rotateState }));
246
251
  this._setClickEvent = this.updater((state, clickEvent) => ({ ...state, clickEvent }));
247
252
  this._setDoubleClickEvent = this.updater((state, doubleClickEvent) => ({ ...state, doubleClickEvent }));
253
+ this._setRightClickEvent = this.updater((state, rightClickEvent) => ({ ...state, rightClickEvent }));
248
254
  this._setError = this.updater((state, error) => ({ ...state, error }));
255
+ this.clearContent = this.updater((state) => ({ ...state, content: undefined }));
256
+ this.setContent = this.updater((state, content) => ({ ...state, content }));
249
257
  }
250
258
  // MARK: Accessors
251
259
  get timerRefreshPeriod() {
@@ -271,6 +279,38 @@ export class DbxMapboxMapStore extends ComponentStore {
271
279
  }
272
280
  }), shareReplay());
273
281
  }
282
+ atNextIdle() {
283
+ return this.moveState$.pipe(map((x) => x === 'idle'), first());
284
+ }
285
+ calculateNextCenterWithOffset(inputOffset) {
286
+ const offset = this.latLngPoint(inputOffset);
287
+ return this.atNextIdle().pipe(switchMap(() => this.center$.pipe(first(), map((center) => {
288
+ const newCenter = {
289
+ lat: offset.lat + center.lat,
290
+ lng: offset.lng + center.lng
291
+ };
292
+ return newCenter;
293
+ }))));
294
+ }
295
+ calculateNextCenterOffsetWithScreenMarginChange(sizing) {
296
+ return this.atNextIdle().pipe(switchMap(() => this.bound$.pipe((first(),
297
+ map((bounds) => {
298
+ const diff = diffLatLngBoundPoints(bounds);
299
+ const center = latLngBoundCenterPoint(bounds);
300
+ const offsetWidth = sizing.leftMargin + sizing.rightMargin; // 300 + 0
301
+ const newWidth = sizing.fullWidth - offsetWidth; // 1000 - 300 - 0
302
+ const newWidthRatio = newWidth / sizing.fullWidth; // 700 / 1000
303
+ const newCenterLongitudeWidth = diff.lng * newWidthRatio; // 70% offset
304
+ const effectiveOffset = {
305
+ lat: 0,
306
+ lng: newCenterLongitudeWidth / 2
307
+ };
308
+ const newCenter = addLatLngPoints(bounds.sw, effectiveOffset);
309
+ newCenter.lat = center.lat; // retain center position
310
+ // console.log({ sizing, bounds, effectiveOffset, newWidth, offsetWidth, diff, center, newCenter });
311
+ return newCenter;
312
+ })))));
313
+ }
274
314
  }
275
315
  DbxMapboxMapStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMapStore, deps: [{ token: DbxMapboxService }], target: i0.ɵɵFactoryTarget.Injectable });
276
316
  DbxMapboxMapStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: DbxMapboxMapStore });
@@ -280,4 +320,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
280
320
  type: Inject,
281
321
  args: [DbxMapboxService]
282
322
  }] }]; } });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBK0IsMkJBQTJCLEVBQWUsbUJBQW1CLEVBQWlDLG1CQUFtQixFQUFzQywyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0UixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQWdCLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0TCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBd0NwRDs7R0FFRztBQUVILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxjQUFtQztJQUl4RSxZQUF1RCxnQkFBa0M7UUFDdkYsS0FBSyxDQUFDO1lBQ0osY0FBYyxFQUFFLE1BQU07WUFDdEIsU0FBUyxFQUFFLE1BQU07WUFDakIsU0FBUyxFQUFFLE1BQU07WUFDakIsV0FBVyxFQUFFLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBTmtELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFIakYsZ0JBQVcsR0FBRyxtQkFBbUIs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OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7OzBCQUtJLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xlYW51cCwgZmlsdGVyTWF5YmUsIG9uVHJ1ZVRvRmFsc2UgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1NhbWVMYXRMbmdCb3VuZCwgaXNTYW1lTGF0TG5nUG9pbnQsIElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbiwgaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLCBMYXRMbmdCb3VuZCwgbGF0TG5nQm91bmRGdW5jdGlvbiwgTGF0TG5nUG9pbnRJbnB1dCwgTGF0TG5nUG9pbnQsIGxhdExuZ1BvaW50RnVuY3Rpb24sIE1heWJlLCBPdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24sIG92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJ25neC1tYXBib3gtZ2wnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBORVZFUiwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgc3RhcnRXaXRoLCBpbnRlcnZhbCwgZmlyc3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5pbXBvcnQgeyBEYnhNYXBib3hDbGlja0V2ZW50LCBLbm93bk1hcGJveFN0eWxlLCBNYXBib3hCZWFyaW5nLCBNYXBib3hFYXNlVG8sIE1hcGJveEZpdEJvdW5kcywgTWFwYm94Rmx5VG8sIE1hcGJveEp1bXBUbywgTWFwYm94UmVzZXROb3J0aCwgTWFwYm94UmVzZXROb3J0aFBpdGNoLCBNYXBib3hSb3RhdGVUbywgTWFwYm94U25hcFRvTm9ydGgsIE1hcGJveFN0eWxlQ29uZmlnLCBNYXBib3hab29tTGV2ZWwgfSBmcm9tICcuL21hcGJveCc7XG5pbXBvcnQgeyBEYnhNYXBib3hTZXJ2aWNlIH0gZnJvbSAnLi9tYXBib3guc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hTdG9yZVN0YXRlIHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgTWFwU2VydmljZSBiZWluZyB1dGlsaXplZC5cbiAgICovXG4gIG1hcFNlcnZpY2U/OiBNYXliZTxNYXBTZXJ2aWNlPjtcbiAgbGlmZWN5Y2xlU3RhdGU6IE1hcGJveE1hcExpZmVjeWNsZVN0YXRlO1xuICBtb3ZlU3RhdGU6IE1hcGJveE1hcE1vdmVTdGF0ZTtcbiAgem9vbVN0YXRlOiBNYXBib3hNYXBab29tU3RhdGU7XG4gIHJvdGF0ZVN0YXRlOiBNYXBib3hNYXBSb3RhdGVTdGF0ZTtcbiAgLyoqXG4gICAqIExhdGVzdCBjbGljayBldmVudFxuICAgKi9cbiAgY2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGRvdWJsZS1jbGljayBldmVudFxuICAgKi9cbiAgZG91YmxlQ2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGVycm9yXG4gICAqL1xuICBlcnJvcj86IE1heWJlPEVycm9yPjtcbn1cblxuLyoqXG4gKiBTdG9yZSB1c2VkIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TWFwU3RvcmUgZXh0ZW5kcyBDb21wb25lbnRTdG9yZTxEYnhNYXBib3hTdG9yZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgbGF0TG5nUG9pbnQgPSBsYXRMbmdQb2ludEZ1bmN0aW9uKCk7XG4gIHByaXZhdGUgbGF0TG5nQm91bmQgPSBsYXRMbmdCb3VuZEZ1bmN0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChEYnhNYXBib3hTZXJ2aWNlKSBwcml2YXRlIHJlYWRvbmx5IGRieE1hcGJveFNlcnZpY2U6IERieE1hcGJveFNlcnZpY2UpIHtcbiAgICBzdXBlcih7XG4gICAgICBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLFxuICAgICAgbW92ZVN0YXRlOiAnaW5pdCcsXG4gICAgICB6b29tU3RhdGU6ICdpbml0JyxcbiAgICAgIHJvdGF0ZVN0YXRlOiAnaW5pdCdcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1BUks6IEVmZmVjdHNcbiAgcmVhZG9ubHkgc2V0TWFwU2VydmljZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBTZXJ2aWNlPj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgICAgdGhpcy5fc2V0TWFwU2VydmljZShzZXJ2aWNlKTtcblxuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKTtcblxuICAgICAgICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyUGFpcnM6IFN0cmluZ01hcGJveExpc3RlbmVyUGFpcltdID0gW107XG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50VHlwZT4odHlwZTogVCwgbGlzdGVuZXI6IChldjogTWFwYm94R2wuTWFwRXZlbnRUeXBlW1RdICYgTWFwYm94R2wuRXZlbnREYXRhKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICAgICAgbWFwLm9uKHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLnB1c2goeyB0eXBlLCBsaXN0ZW5lciB9IGFzIFN0cmluZ01hcGJveExpc3RlbmVyUGFpcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVuZGVyJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ3JlbmRlcicpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2Vycm9yJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcih4LmVycm9yKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVzdGFydCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnbW92aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZWVuZCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCd6b29taW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbWVuZCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgncm90YXRpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVlbmQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0Q2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdkYmxjbGljaycsICh4KSA9PiB0aGlzLl9zZXREb3VibGVDbGlja0V2ZW50KHgpKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLFxuICAgICAgICAgICAgICAgIHN1YnNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjbGVhbnVwKCh7IHNlcnZpY2UsIGxpc3RlbmVyUGFpcnMsIHN1YnMgfSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICBsaXN0ZW5lclBhaXJzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIG1hcC5vZmYoeC50eXBlLCB4Lmxpc3RlbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFN0eWxlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFN0eWxlQ29uZmlnIHwgS25vd25NYXBib3hTdHlsZSB8IHN0cmluZz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc3R5bGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUuc3R5bGUsIHN0eWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldENlbnRlciA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludElucHV0PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSB0aGlzLmxhdExuZ1BvaW50KGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0Q2VudGVyKGNlbnRlclBvaW50KSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5ab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluWm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0QmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJlYXJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRCZWFyaW5nKGJlYXJpbmcpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocm90YXRlSW5wdXQ6IE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbykgPT4ge1xuICAgICAgICBjb25zdCByb3RhdGU6IE1hcGJveFJvdGF0ZVRvID0gdHlwZW9mIHJvdGF0ZUlucHV0ID09PSAnbnVtYmVyJyA/IHsgYmVhcmluZzogcm90YXRlSW5wdXQgfSA6IHJvdGF0ZUlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJvdGF0ZVRvKHJvdGF0ZS5iZWFyaW5nLCByb3RhdGUub3B0aW9ucywgcm90YXRlPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoUGl0Y2gocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNuYXBUb05vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNuYXA6IE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zbmFwVG9Ob3J0aChzbmFwPy5vcHRpb25zLCBzbmFwPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdEJvdW5kcyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRCb3VuZHM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKHguYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBqdW1wVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94SnVtcFRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmp1bXBUbyh7IC4uLngudG8sIGNlbnRlciB9LCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWFzZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEVhc2VUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLmxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5lYXNlVG8oeyAuLi54LnRvLCBjZW50ZXIgfSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZseVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZseVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZseVRvKHsgLi4ueC50bywgY2VudGVyIH0sIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldFBpdGNoQW5kQmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRQaXRjaCgwKTtcbiAgICAgICAgICAgIG1hcC5zZXRCZWFyaW5nKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICBnZXQgdGltZXJSZWZyZXNoUGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLmRieE1hcGJveFNlcnZpY2UubWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2Q7XG4gIH1cblxuICBtb3ZpbmdUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ21vdmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gIH1cblxuICBsaWZlY3ljbGVSZW5kZXJUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAncmVuZGVyJykge1xuICAgICAgICAgIHJldHVybiBpbnRlcnZhbChwZXJpb2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZigwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBTZXJ2aWNlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcFNlcnZpY2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBTZXJ2aWNlJCA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudE1hcEluc3RhbmNlJDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hHbC5NYXA+PiA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjdXJyZW50TWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgIGlmIChjdXJyZW50TWFwU2VydmljZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE1hcFNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZCksXG4gICAgICAgICAgbWFwKCgpID0+IGN1cnJlbnRNYXBTZXJ2aWNlLm1hcEluc3RhbmNlKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcEluc3RhbmNlJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IG1vdmVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tb3ZlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBsaWZlY3ljbGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5saWZlY3ljbGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21TdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC56b29tU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByb3RhdGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5yb3RhdGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkID0gdGhpcy5jdXJyZW50TWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBpZiAoIXgpIHtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vdmVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpLCB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKG1hcCgoeCkgPT4geCA9PT0gJ2lkbGUnKSldKS5waXBlKFxuICAgICAgICAgIGZpbHRlcigoW20sIGxdKSA9PiBtICYmIGwpLFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKCgpID0+IHRydWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB3aGVuSW5pdGlhbGl6ZWQkID0gdGhpcy5pc0luaXRpYWxpemVkJC5waXBlKFxuICAgIGZpbHRlcigoeCkgPT4gdHJ1ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1JlbmRlcmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubGlmZWN5Y2xlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JlbmRlcicpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzTW92aW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ21vdmluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzWm9vbWluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuem9vbVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICd6b29taW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSb3RhdGluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMucm90YXRlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JvdGF0aW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW92aW5nVGltZXIgPSB0aGlzLm1vdmluZ1RpbWVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmluZ1RpbWVyID0gdGhpcy5saWZlY3ljbGVSZW5kZXJUaW1lcigpO1xuXG4gIHJlYWRvbmx5IGNlbnRlck5vdyQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHRoaXMubGF0TG5nUG9pbnQoeC5nZXRDZW50ZXIoKSkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGNlbnRlciQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW92aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jZW50ZXJOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdQb2ludCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmROb3ckOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMuX3JlbmRlcmluZ1RpbWVyLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBib3VuZCA9IHguZ2V0Qm91bmRzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmxhdExuZ0JvdW5kKFtib3VuZC5nZXRTb3V0aFdlc3QoKSwgYm91bmQuZ2V0Tm9ydGhFYXN0KCldKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBib3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzUmVuZGVyaW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuYm91bmROb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdCb3VuZCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNXaXRoaW5Cb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxJc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGlzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbih4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBvdmVybGFwc0JvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gb3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21Ob3ckOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRab29tKCkgYXMgTWFwYm94Wm9vbUxldmVsKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSB6b29tJDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzWm9vbWluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLnpvb21Ob3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoTm93JCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFBpdGNoKCkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMucGl0Y2hOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmdOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0QmVhcmluZygpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuYmVhcmluZ05vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKG1hcCgoeCkgPT4geC5jbGlja0V2ZW50KSk7XG4gIHJlYWRvbmx5IGRvdWJsZUNsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShtYXAoKHgpID0+IHguZG91YmxlQ2xpY2tFdmVudCkpO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TWFwU2VydmljZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiAoeyBtYXBTZXJ2aWNlLCBtb3ZlU3RhdGU6ICdpbml0JywgbGlmZWN5Y2xlU3RhdGU6ICdpbml0Jywgem9vbVN0YXRlOiAnaW5pdCcsIHJvdGF0ZVN0YXRlOiAnaW5pdCcgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRMaWZlY3ljbGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGxpZmVjeWNsZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TW92ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBtb3ZlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRab29tU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHpvb21TdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJvdGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgcm90YXRlU3RhdGUgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldENsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgY2xpY2tFdmVudCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldERvdWJsZUNsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkb3VibGVDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgZG91YmxlQ2xpY2tFdmVudCB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RXJyb3IgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBlcnJvcjogRXJyb3IpID0+ICh7IC4uLnN0YXRlLCBlcnJvciB9KSk7XG59XG4iXX0=
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBK0IsMkJBQTJCLEVBQWUsbUJBQW1CLEVBQWlDLG1CQUFtQixFQUFzQywyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdFYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFnQixTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEwsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQTZEcEQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBbUM7SUFJeEUsWUFBdUQsZ0JBQWtDO1FBQ3ZGLEtBQUssQ0FBQztZQUNKLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztR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RSxFQUFFO2dCQUNiLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFOUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVTtnQkFDdEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxpQkFBaUI7Z0JBQ2xFLE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYTtnQkFDaEUsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxDQUFDLGFBQWE7Z0JBRXZFLE1BQU0sZUFBZSxHQUFnQjtvQkFDbkMsR0FBRyxFQUFFLENBQUM7b0JBQ04sR0FBRyxFQUFFLHVCQUF1QixHQUFHLENBQUM7aUJBQ2pDLENBQUM7Z0JBRUYsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQzlELFNBQVMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QjtnQkFFckQsb0dBQW9HO2dCQUVwRyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUNKLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7OEdBaFZVLGlCQUFpQixrQkFJUixnQkFBZ0I7a0hBSnpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVOzswQkFLSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsZWFudXAsIGZpbHRlck1heWJlLCBvblRydWVUb0ZhbHNlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNTYW1lTGF0TG5nQm91bmQsIGlzU2FtZUxhdExuZ1BvaW50LCBJc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24sIGlzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbiwgTGF0TG5nQm91bmQsIGxhdExuZ0JvdW5kRnVuY3Rpb24sIExhdExuZ1BvaW50SW5wdXQsIExhdExuZ1BvaW50LCBsYXRMbmdQb2ludEZ1bmN0aW9uLCBNYXliZSwgT3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uLCBvdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24sIGRpZmZMYXRMbmdCb3VuZFBvaW50cywgbGF0TG5nQm91bmRDZW50ZXJQb2ludCwgYWRkTGF0TG5nUG9pbnRzIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyBNYXBTZXJ2aWNlIH0gZnJvbSAnbmd4LW1hcGJveC1nbCc7XG5pbXBvcnQgeyBkZWZhdWx0SWZFbXB0eSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YXAsIE5FVkVSLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCBzdGFydFdpdGgsIGludGVydmFsLCBmaXJzdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgTWFwYm94R2wgZnJvbSAnbWFwYm94LWdsJztcbmltcG9ydCB7IERieE1hcGJveENsaWNrRXZlbnQsIEtub3duTWFwYm94U3R5bGUsIE1hcGJveEJlYXJpbmcsIE1hcGJveEVhc2VUbywgTWFwYm94Rml0Qm91bmRzLCBNYXBib3hGbHlUbywgTWFwYm94SnVtcFRvLCBNYXBib3hSZXNldE5vcnRoLCBNYXBib3hSZXNldE5vcnRoUGl0Y2gsIE1hcGJveFJvdGF0ZVRvLCBNYXBib3hTbmFwVG9Ob3J0aCwgTWFwYm94U3R5bGVDb25maWcsIE1hcGJveFpvb21MZXZlbCB9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCB7IERieE1hcGJveFNlcnZpY2UgfSBmcm9tICcuL21hcGJveC5zZXJ2aWNlJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZyB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcblxuZXhwb3J0IHR5cGUgTWFwYm94TWFwTGlmZWN5Y2xlU3RhdGUgPSAnaW5pdCcgfCAnbG9hZCcgfCAncmVuZGVyJyB8ICdpZGxlJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcE1vdmVTdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICdtb3ZpbmcnO1xuZXhwb3J0IHR5cGUgTWFwYm94TWFwWm9vbVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3pvb21pbmcnO1xuZXhwb3J0IHR5cGUgTWFwYm94TWFwUm90YXRlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAncm90YXRpbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ01hcGJveExpc3RlbmVyUGFpciB7XG4gIHR5cGU6IHN0cmluZztcbiAgbGlzdGVuZXI6IChldjogTWFwYm94R2wuRXZlbnREYXRhKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVkTWFwYm94TGlzdGVuZXJQYWlyPFQgZXh0ZW5kcyBrZXlvZiBNYXBib3hHbC5NYXBFdmVudFR5cGU+IHtcbiAgdHlwZTogVDtcbiAgbGlzdGVuZXI6IChldjogTWFwYm94R2wuTWFwRXZlbnRUeXBlW1RdICYgTWFwYm94R2wuRXZlbnREYXRhKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nIHtcbiAgbGVmdE1hcmdpbjogbnVtYmVyO1xuICByaWdodE1hcmdpbjogbnVtYmVyO1xuICBmdWxsV2lkdGg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hTdG9yZVN0YXRlIHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgTWFwU2VydmljZSBiZWluZyB1dGlsaXplZC5cbiAgICovXG4gIG1hcFNlcnZpY2U/OiBNYXliZTxNYXBTZXJ2aWNlPjtcbiAgbGlmZWN5Y2xlU3RhdGU6IE1hcGJveE1hcExpZmVjeWNsZVN0YXRlO1xuICBtb3ZlU3RhdGU6IE1hcGJveE1hcE1vdmVTdGF0ZTtcbiAgem9vbVN0YXRlOiBNYXBib3hNYXBab29tU3RhdGU7XG4gIHJvdGF0ZVN0YXRlOiBNYXBib3hNYXBSb3RhdGVTdGF0ZTtcbiAgLyoqXG4gICAqIExhdGVzdCBjbGljayBldmVudFxuICAgKi9cbiAgY2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGRvdWJsZS1jbGljayBldmVudFxuICAgKi9cbiAgZG91YmxlQ2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGNvbnRleHRtZW51IGV2ZW50LlxuICAgKi9cbiAgcmlnaHRDbGlja0V2ZW50PzogTWF5YmU8RGJ4TWFwYm94Q2xpY2tFdmVudD47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byByZXRhaW4gY29udGVudCBiZXR3ZWVuIHJlc2V0cy5cbiAgICpcbiAgICogVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmV0YWluQ29udGVudDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBjb250ZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb250ZW50PzogTWF5YmU8RGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnPHVua25vd24+PjtcbiAgLyoqXG4gICAqIExhdGVzdCBlcnJvclxuICAgKi9cbiAgZXJyb3I/OiBNYXliZTxFcnJvcj47XG59XG5cbi8qKlxuICogU3RvcmUgdXNlZCBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieE1hcGJveE1hcFN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8RGJ4TWFwYm94U3RvcmVTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGxhdExuZ1BvaW50ID0gbGF0TG5nUG9pbnRGdW5jdGlvbigpO1xuICBwcml2YXRlIGxhdExuZ0JvdW5kID0gbGF0TG5nQm91bmRGdW5jdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRGJ4TWFwYm94U2VydmljZSkgcHJpdmF0ZSByZWFkb25seSBkYnhNYXBib3hTZXJ2aWNlOiBEYnhNYXBib3hTZXJ2aWNlKSB7XG4gICAgc3VwZXIoe1xuICAgICAgbGlmZWN5Y2xlU3RhdGU6ICdpbml0JyxcbiAgICAgIG1vdmVTdGF0ZTogJ2luaXQnLFxuICAgICAgem9vbVN0YXRlOiAnaW5pdCcsXG4gICAgICByb3RhdGVTdGF0ZTogJ2luaXQnLFxuICAgICAgcmV0YWluQ29udGVudDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTUFSSzogRWZmZWN0c1xuICByZWFkb25seSBzZXRNYXBTZXJ2aWNlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcFNlcnZpY2U+PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChzZXJ2aWNlOiBNYXliZTxNYXBTZXJ2aWNlPikgPT4ge1xuICAgICAgICB0aGlzLl9zZXRNYXBTZXJ2aWNlKHNlcnZpY2UpO1xuXG4gICAgICAgIGlmICghc2VydmljZSkge1xuICAgICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2VydmljZS5tYXBMb2FkZWQkLnBpcGUoXG4gICAgICAgICAgICBkZWZhdWx0SWZFbXB0eSh1bmRlZmluZWQpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0TW92ZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHNlcnZpY2UubWFwSW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJQYWlyczogU3RyaW5nTWFwYm94TGlzdGVuZXJQYWlyW10gPSBbXTtcblxuICAgICAgICAgICAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPih0eXBlOiBULCBsaXN0ZW5lcjogKGV2OiBNYXBib3hHbC5NYXBFdmVudFR5cGVbVF0gJiBNYXBib3hHbC5FdmVudERhdGEpID0+IHZvaWQpIHtcbiAgICAgICAgICAgICAgICBtYXAub24odHlwZSwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyUGFpcnMucHVzaCh7IHR5cGUsIGxpc3RlbmVyIH0gYXMgU3RyaW5nTWFwYm94TGlzdGVuZXJQYWlyKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdpZGxlJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ2lkbGUnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyZW5kZXInLCAoKSA9PiB0aGlzLl9zZXRMaWZlY3ljbGVTdGF0ZSgncmVuZGVyJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignZXJyb3InLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVycm9yKHguZXJyb3IpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0TW92ZVN0YXRlKCdtb3ZpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdtb3ZlZW5kJywgKCkgPT4gdGhpcy5fc2V0TW92ZVN0YXRlKCdpZGxlJykpO1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCd6b29tc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRab29tU3RhdGUoJ3pvb21pbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCd6b29tZW5kJywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCdpZGxlJykpO1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVzdGFydCcsICgpID0+IHRoaXMuX3NldFJvdGF0ZVN0YXRlKCdyb3RhdGluZycpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3JvdGF0ZWVuZCcsICgpID0+IHRoaXMuX3NldFJvdGF0ZVN0YXRlKCdpZGxlJykpO1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdjbGljaycsICh4KSA9PiB0aGlzLl9zZXRDbGlja0V2ZW50KHgpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2RibGNsaWNrJywgKHgpID0+IHRoaXMuX3NldERvdWJsZUNsaWNrRXZlbnQoeCkpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY29udGV4dG1lbnUnLCAoeCkgPT4gdGhpcy5fc2V0UmlnaHRDbGlja0V2ZW50KHgpKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLFxuICAgICAgICAgICAgICAgIHN1YnNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjbGVhbnVwKCh7IHNlcnZpY2UsIGxpc3RlbmVyUGFpcnMsIHN1YnMgfSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICBsaXN0ZW5lclBhaXJzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIG1hcC5vZmYoeC50eXBlLCB4Lmxpc3RlbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFN0eWxlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFN0eWxlQ29uZmlnIHwgS25vd25NYXBib3hTdHlsZSB8IHN0cmluZz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc3R5bGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUuc3R5bGUsIHN0eWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldENlbnRlciA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludElucHV0PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSB0aGlzLmxhdExuZ1BvaW50KGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0Q2VudGVyKGNlbnRlclBvaW50KSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5ab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluWm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0QmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJlYXJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRCZWFyaW5nKGJlYXJpbmcpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocm90YXRlSW5wdXQ6IE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbykgPT4ge1xuICAgICAgICBjb25zdCByb3RhdGU6IE1hcGJveFJvdGF0ZVRvID0gdHlwZW9mIHJvdGF0ZUlucHV0ID09PSAnbnVtYmVyJyA/IHsgYmVhcmluZzogcm90YXRlSW5wdXQgfSA6IHJvdGF0ZUlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJvdGF0ZVRvKHJvdGF0ZS5iZWFyaW5nLCByb3RhdGUub3B0aW9ucywgcm90YXRlPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoUGl0Y2gocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNuYXBUb05vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNuYXA6IE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zbmFwVG9Ob3J0aChzbmFwPy5vcHRpb25zLCBzbmFwPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdEJvdW5kcyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRCb3VuZHM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKHguYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBqdW1wVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94SnVtcFRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmp1bXBUbyh7IC4uLngudG8sIGNlbnRlciB9LCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWFzZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEVhc2VUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLmxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5lYXNlVG8oeyAuLi54LnRvLCBjZW50ZXIgfSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZseVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZseVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZseVRvKHsgLi4ueC50bywgY2VudGVyIH0sIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldFBpdGNoQW5kQmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRQaXRjaCgwKTtcbiAgICAgICAgICAgIG1hcC5zZXRCZWFyaW5nKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICBnZXQgdGltZXJSZWZyZXNoUGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLmRieE1hcGJveFNlcnZpY2UubWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2Q7XG4gIH1cblxuICBtb3ZpbmdUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ21vdmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gIH1cblxuICBsaWZlY3ljbGVSZW5kZXJUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAncmVuZGVyJykge1xuICAgICAgICAgIHJldHVybiBpbnRlcnZhbChwZXJpb2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZigwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIGF0TmV4dElkbGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgbWFwKCh4KSA9PiB4ID09PSAnaWRsZScpLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVOZXh0Q2VudGVyV2l0aE9mZnNldChpbnB1dE9mZnNldDogTGF0TG5nUG9pbnRJbnB1dCk6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+IHtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmxhdExuZ1BvaW50KGlucHV0T2Zmc2V0KTtcblxuICAgIHJldHVybiB0aGlzLmF0TmV4dElkbGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMuY2VudGVyJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKChjZW50ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IHtcbiAgICAgICAgICAgICAgbGF0OiBvZmZzZXQubGF0ICsgY2VudGVyLmxhdCxcbiAgICAgICAgICAgICAgbG5nOiBvZmZzZXQubG5nICsgY2VudGVyLmxuZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBuZXdDZW50ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZShzaXppbmc6IERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nKTogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLmF0TmV4dElkbGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMuYm91bmQkLnBpcGUoXG4gICAgICAgICAgKGZpcnN0KCksXG4gICAgICAgICAgbWFwKChib3VuZHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBkaWZmTGF0TG5nQm91bmRQb2ludHMoYm91bmRzKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGxhdExuZ0JvdW5kQ2VudGVyUG9pbnQoYm91bmRzKTtcblxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBzaXppbmcubGVmdE1hcmdpbiArIHNpemluZy5yaWdodE1hcmdpbjsgLy8gMzAwICsgMFxuICAgICAgICAgICAgY29uc3QgbmV3V2lkdGggPSBzaXppbmcuZnVsbFdpZHRoIC0gb2Zmc2V0V2lkdGg7IC8vIDEwMDAgLSAzMDAgLSAwXG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aFJhdGlvID0gbmV3V2lkdGggLyBzaXppbmcuZnVsbFdpZHRoOyAvLyA3MDAgLyAxMDAwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXJMb25naXR1ZGVXaWR0aCA9IGRpZmYubG5nICogbmV3V2lkdGhSYXRpbzsgLy8gNzAlIG9mZnNldFxuXG4gICAgICAgICAgICBjb25zdCBlZmZlY3RpdmVPZmZzZXQ6IExhdExuZ1BvaW50ID0ge1xuICAgICAgICAgICAgICBsYXQ6IDAsXG4gICAgICAgICAgICAgIGxuZzogbmV3Q2VudGVyTG9uZ2l0dWRlV2lkdGggLyAyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBhZGRMYXRMbmdQb2ludHMoYm91bmRzLnN3LCBlZmZlY3RpdmVPZmZzZXQpO1xuICAgICAgICAgICAgbmV3Q2VudGVyLmxhdCA9IGNlbnRlci5sYXQ7IC8vIHJldGFpbiBjZW50ZXIgcG9zaXRpb25cblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeyBzaXppbmcsIGJvdW5kcywgZWZmZWN0aXZlT2Zmc2V0LCBuZXdXaWR0aCwgb2Zmc2V0V2lkdGgsIGRpZmYsIGNlbnRlciwgbmV3Q2VudGVyIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2VudGVyO1xuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBTZXJ2aWNlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcFNlcnZpY2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBTZXJ2aWNlJCA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudE1hcEluc3RhbmNlJDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hHbC5NYXA+PiA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjdXJyZW50TWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgIGlmIChjdXJyZW50TWFwU2VydmljZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE1hcFNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZCksXG4gICAgICAgICAgbWFwKCgpID0+IGN1cnJlbnRNYXBTZXJ2aWNlLm1hcEluc3RhbmNlKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcEluc3RhbmNlJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IG1vdmVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tb3ZlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBsaWZlY3ljbGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5saWZlY3ljbGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21TdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC56b29tU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByb3RhdGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5yb3RhdGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkID0gdGhpcy5jdXJyZW50TWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBpZiAoIXgpIHtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vdmVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpLCB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKG1hcCgoeCkgPT4geCA9PT0gJ2lkbGUnKSldKS5waXBlKFxuICAgICAgICAgIGZpbHRlcigoW20sIGxdKSA9PiBtICYmIGwpLFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKCgpID0+IHRydWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB3aGVuSW5pdGlhbGl6ZWQkID0gdGhpcy5pc0luaXRpYWxpemVkJC5waXBlKFxuICAgIGZpbHRlcigoeCkgPT4gdHJ1ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1JlbmRlcmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubGlmZWN5Y2xlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JlbmRlcicpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzTW92aW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ21vdmluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzWm9vbWluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuem9vbVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICd6b29taW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSb3RhdGluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMucm90YXRlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JvdGF0aW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW92aW5nVGltZXIgPSB0aGlzLm1vdmluZ1RpbWVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmluZ1RpbWVyID0gdGhpcy5saWZlY3ljbGVSZW5kZXJUaW1lcigpO1xuXG4gIHJlYWRvbmx5IGNlbnRlck5vdyQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHRoaXMubGF0TG5nUG9pbnQoeC5nZXRDZW50ZXIoKSkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGNlbnRlciQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW92aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jZW50ZXJOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdQb2ludCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmROb3ckOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMuX3JlbmRlcmluZ1RpbWVyLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBib3VuZCA9IHguZ2V0Qm91bmRzKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmxhdExuZ0JvdW5kKFtib3VuZC5nZXRTb3V0aFdlc3QoKSwgYm91bmQuZ2V0Tm9ydGhFYXN0KCldKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBib3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzUmVuZGVyaW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuYm91bmROb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVMYXRMbmdCb3VuZCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNXaXRoaW5Cb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxJc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGlzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbih4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBvdmVybGFwc0JvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gb3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21Ob3ckOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRab29tKCkgYXMgTWFwYm94Wm9vbUxldmVsKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSB6b29tJDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzWm9vbWluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLnpvb21Ob3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoTm93JCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFBpdGNoKCkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMucGl0Y2hOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmdOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0QmVhcmluZygpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuYmVhcmluZ05vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY29udGVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jb250ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzQ29udGVudCQgPSB0aGlzLmNvbnRlbnQkLnBpcGUobWFwKEJvb2xlYW4pKTtcblxuICByZWFkb25seSBjbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkb3VibGVDbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmRvdWJsZUNsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByaWdodENsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucmlnaHRDbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLy8gTUFSSzogU3RhdGUgQ2hhbmdlc1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNYXBTZXJ2aWNlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+ICh7IG1hcFNlcnZpY2UsIG1vdmVTdGF0ZTogJ2luaXQnLCBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLCB6b29tU3RhdGU6ICdpbml0Jywgcm90YXRlU3RhdGU6ICdpbml0JywgcmV0YWluQ29udGVudDogc3RhdGUucmV0YWluQ29udGVudCwgY29udGVudDogc3RhdGUucmV0YWluQ29udGVudCA/IHN0YXRlLmNvbnRlbnQgOiB1bmRlZmluZWQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRMaWZlY3ljbGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGxpZmVjeWNsZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TW92ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBtb3ZlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRab29tU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHpvb21TdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJvdGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgcm90YXRlU3RhdGUgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldENsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgY2xpY2tFdmVudCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldERvdWJsZUNsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkb3VibGVDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgZG91YmxlQ2xpY2tFdmVudCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJpZ2h0Q2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJpZ2h0Q2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIHJpZ2h0Q2xpY2tFdmVudCB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RXJyb3IgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBlcnJvcjogRXJyb3IpID0+ICh7IC4uLnN0YXRlLCBlcnJvciB9KSk7XG5cbiAgcmVhZG9ubHkgY2xlYXJDb250ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGNvbnRlbnQ6IHVuZGVmaW5lZCB9KSk7XG4gIHJlYWRvbmx5IHNldENvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjb250ZW50OiBNYXliZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc8dW5rbm93bj4+KSA9PiAoeyAuLi5zdGF0ZSwgY29udGVudCB9KSk7XG59XG4iXX0=