valtech-components 2.0.407 → 2.0.410

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 (110) hide show
  1. package/esm2022/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.mjs +82 -0
  2. package/esm2022/lib/components/atoms/horizontal-scroll/types.mjs +2 -0
  3. package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +82 -0
  4. package/esm2022/lib/components/atoms/rights-footer/types.mjs +2 -0
  5. package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +55 -11
  6. package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +13 -4
  7. package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +27 -23
  8. package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +277 -0
  9. package/esm2022/lib/components/molecules/footer-links/types.mjs +2 -0
  10. package/esm2022/lib/components/molecules/links-accordion/links-accordion.component.mjs +157 -0
  11. package/esm2022/lib/components/molecules/links-accordion/types.mjs +2 -0
  12. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +12 -2
  13. package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +21 -9
  14. package/esm2022/lib/components/molecules/prompter/types.mjs +1 -1
  15. package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +13 -4
  16. package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +78 -0
  17. package/esm2022/lib/components/molecules/recap-card/types.mjs +2 -0
  18. package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +31 -14
  19. package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +206 -0
  20. package/esm2022/lib/components/molecules/swipe-carousel/types.mjs +2 -0
  21. package/esm2022/lib/components/molecules/testimonial-card/testimonial-card.component.mjs +138 -0
  22. package/esm2022/lib/components/molecules/testimonial-card/types.mjs +2 -0
  23. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +14 -4
  24. package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +61 -0
  25. package/esm2022/lib/components/organisms/cards-carousel/types.mjs +2 -0
  26. package/esm2022/lib/components/organisms/company-footer/company-footer.component.mjs +72 -0
  27. package/esm2022/lib/components/organisms/company-footer/types.mjs +2 -0
  28. package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +175 -3
  29. package/esm2022/lib/components/organisms/data-table/types.mjs +1 -1
  30. package/esm2022/lib/components/organisms/form/form.component.mjs +2 -2
  31. package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +225 -0
  32. package/esm2022/lib/components/organisms/fun-header/types.mjs +2 -0
  33. package/esm2022/lib/components/organisms/menu/menu.component.mjs +197 -0
  34. package/esm2022/lib/components/organisms/menu/types.mjs +2 -0
  35. package/esm2022/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.mjs +72 -0
  36. package/esm2022/lib/components/organisms/testimonial-carousel/types.mjs +2 -0
  37. package/esm2022/lib/components/templates/page-content/page-content.component.mjs +156 -0
  38. package/esm2022/lib/components/templates/page-content/types.mjs +2 -0
  39. package/esm2022/lib/components/templates/page-template/page-template.component.mjs +181 -0
  40. package/esm2022/lib/components/templates/page-template/types.mjs +2 -0
  41. package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +195 -0
  42. package/esm2022/lib/components/templates/page-wrapper/types.mjs +2 -0
  43. package/esm2022/lib/components/types.mjs +1 -1
  44. package/esm2022/lib/services/firebase/config.mjs +103 -0
  45. package/esm2022/lib/services/firebase/firebase.service.mjs +285 -0
  46. package/esm2022/lib/services/firebase/firestore-collection.mjs +266 -0
  47. package/esm2022/lib/services/firebase/firestore.service.mjs +508 -0
  48. package/esm2022/lib/services/firebase/index.mjs +46 -0
  49. package/esm2022/lib/services/firebase/messaging.service.mjs +503 -0
  50. package/esm2022/lib/services/firebase/storage.service.mjs +421 -0
  51. package/esm2022/lib/services/firebase/types.mjs +8 -0
  52. package/esm2022/lib/services/firebase/utils/path-builder.mjs +195 -0
  53. package/esm2022/lib/services/firebase/utils/query-builder.mjs +302 -0
  54. package/esm2022/lib/services/icons.service.mjs +3 -2
  55. package/esm2022/public-api.mjs +33 -1
  56. package/fesm2022/valtech-components.mjs +5823 -869
  57. package/fesm2022/valtech-components.mjs.map +1 -1
  58. package/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.d.ts +41 -0
  59. package/lib/components/atoms/horizontal-scroll/types.d.ts +13 -0
  60. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +39 -0
  61. package/lib/components/atoms/rights-footer/types.d.ts +13 -0
  62. package/lib/components/molecules/check-input/check-input.component.d.ts +17 -2
  63. package/lib/components/molecules/email-input/email-input.component.d.ts +1 -2
  64. package/lib/components/molecules/footer-links/footer-links.component.d.ts +47 -0
  65. package/lib/components/molecules/footer-links/types.d.ts +37 -0
  66. package/lib/components/molecules/links-accordion/links-accordion.component.d.ts +48 -0
  67. package/lib/components/molecules/links-accordion/types.d.ts +33 -0
  68. package/lib/components/molecules/password-input/password-input.component.d.ts +1 -1
  69. package/lib/components/molecules/prompter/prompter.component.d.ts +8 -1
  70. package/lib/components/molecules/prompter/types.d.ts +7 -1
  71. package/lib/components/molecules/radio-input/radio-input.component.d.ts +1 -2
  72. package/lib/components/molecules/recap-card/recap-card.component.d.ts +36 -0
  73. package/lib/components/molecules/recap-card/types.d.ts +30 -0
  74. package/lib/components/molecules/select-input/select-input.component.d.ts +6 -1
  75. package/lib/components/molecules/swipe-carousel/swipe-carousel.component.d.ts +66 -0
  76. package/lib/components/molecules/swipe-carousel/types.d.ts +35 -0
  77. package/lib/components/molecules/testimonial-card/testimonial-card.component.d.ts +41 -0
  78. package/lib/components/molecules/testimonial-card/types.d.ts +25 -0
  79. package/lib/components/molecules/text-input/text-input.component.d.ts +13 -4
  80. package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +30 -0
  81. package/lib/components/organisms/cards-carousel/types.d.ts +11 -0
  82. package/lib/components/organisms/company-footer/company-footer.component.d.ts +32 -0
  83. package/lib/components/organisms/company-footer/types.d.ts +15 -0
  84. package/lib/components/organisms/data-table/data-table.component.d.ts +1 -1
  85. package/lib/components/organisms/data-table/types.d.ts +6 -0
  86. package/lib/components/organisms/fun-header/fun-header.component.d.ts +72 -0
  87. package/lib/components/organisms/fun-header/types.d.ts +28 -0
  88. package/lib/components/organisms/menu/menu.component.d.ts +39 -0
  89. package/lib/components/organisms/menu/types.d.ts +23 -0
  90. package/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.d.ts +33 -0
  91. package/lib/components/organisms/testimonial-carousel/types.d.ts +8 -0
  92. package/lib/components/templates/page-content/page-content.component.d.ts +55 -0
  93. package/lib/components/templates/page-content/types.d.ts +14 -0
  94. package/lib/components/templates/page-template/page-template.component.d.ts +49 -0
  95. package/lib/components/templates/page-template/types.d.ts +17 -0
  96. package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +61 -0
  97. package/lib/components/templates/page-wrapper/types.d.ts +19 -0
  98. package/lib/components/types.d.ts +14 -0
  99. package/lib/services/firebase/config.d.ts +49 -0
  100. package/lib/services/firebase/firebase.service.d.ts +140 -0
  101. package/lib/services/firebase/firestore-collection.d.ts +195 -0
  102. package/lib/services/firebase/firestore.service.d.ts +303 -0
  103. package/lib/services/firebase/index.d.ts +38 -0
  104. package/lib/services/firebase/messaging.service.d.ts +254 -0
  105. package/lib/services/firebase/storage.service.d.ts +204 -0
  106. package/lib/services/firebase/types.d.ts +279 -0
  107. package/lib/services/firebase/utils/path-builder.d.ts +132 -0
  108. package/lib/services/firebase/utils/query-builder.d.ts +210 -0
  109. package/package.json +3 -1
  110. package/public-api.d.ts +31 -0
@@ -0,0 +1,195 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
3
+ import { NavigationEnd, Router, RouterOutlet } from '@angular/router';
4
+ import { IonContent } from '@ionic/angular/standalone';
5
+ import { filter } from 'rxjs';
6
+ import { HeaderComponent } from '../../organisms/header/header.component';
7
+ import { CompanyFooterComponent } from '../../organisms/company-footer/company-footer.component';
8
+ import { ThemeService } from '../../../services/theme.service';
9
+ import { NavigationService } from '../../../services/navigation.service';
10
+ import { resolveColor } from '../../../shared/utils/styles';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common";
13
+ /**
14
+ * val-page-wrapper
15
+ *
16
+ * A complete page wrapper template with header, router outlet, footer,
17
+ * and automatic scroll-to-top on navigation.
18
+ *
19
+ * @example
20
+ * <val-page-wrapper
21
+ * [props]="{
22
+ * homeRoute: '/',
23
+ * scrollToTopOnNavigate: true,
24
+ * footer: {
25
+ * links: { ... },
26
+ * rights: { companyName: 'Acme' }
27
+ * }
28
+ * }"
29
+ * ></val-page-wrapper>
30
+ *
31
+ * @input props - Page wrapper configuration
32
+ * @output onHeaderClick - Emits when a header action is clicked
33
+ */
34
+ export class PageWrapperComponent {
35
+ constructor() {
36
+ this.theme = inject(ThemeService);
37
+ this.nav = inject(NavigationService);
38
+ this.router = inject(Router);
39
+ /**
40
+ * Page wrapper configuration.
41
+ */
42
+ this.props = {
43
+ scrollToTopOnNavigate: true,
44
+ };
45
+ /**
46
+ * Emits when a header action is clicked.
47
+ */
48
+ this.onHeaderClick = new EventEmitter();
49
+ }
50
+ /**
51
+ * Default header configuration.
52
+ */
53
+ get headerProps() {
54
+ return (this.props.header || {
55
+ bordered: true,
56
+ translucent: true,
57
+ toolbar: {
58
+ withBack: false,
59
+ withActions: true,
60
+ textColor: 'dark',
61
+ withMenu: true,
62
+ title: '',
63
+ actions: [
64
+ {
65
+ token: 'header-logo',
66
+ description: '',
67
+ position: 'left',
68
+ type: 'IMAGE',
69
+ image: {
70
+ width: 10,
71
+ src: '--main-logo',
72
+ alt: 'header logo',
73
+ mode: 'box',
74
+ shaded: false,
75
+ bordered: false,
76
+ size: 'small',
77
+ limited: false,
78
+ flex: true,
79
+ },
80
+ },
81
+ ],
82
+ },
83
+ });
84
+ }
85
+ ngOnInit() {
86
+ if (this.props.scrollToTopOnNavigate !== false) {
87
+ this.routerSubscription = this.router.events
88
+ .pipe(filter((event) => event instanceof NavigationEnd))
89
+ .subscribe(() => {
90
+ this.scrollToTop();
91
+ });
92
+ }
93
+ }
94
+ ngOnDestroy() {
95
+ if (this.routerSubscription) {
96
+ this.routerSubscription.unsubscribe();
97
+ }
98
+ }
99
+ ionViewWillLeave() {
100
+ // Optional: can add logic on view leave
101
+ }
102
+ ionViewWillEnter() {
103
+ this.scrollToTop();
104
+ }
105
+ /**
106
+ * Gets the background color based on theme.
107
+ */
108
+ getBackground() {
109
+ if (this.theme.IsDark) {
110
+ return 'var(--ion-background-color)';
111
+ }
112
+ const bg = this.props.background;
113
+ if (!bg) {
114
+ return 'var(--ion-background-color)';
115
+ }
116
+ return resolveColor(bg);
117
+ }
118
+ /**
119
+ * Scrolls the content to the top.
120
+ */
121
+ scrollToTop() {
122
+ const contentId = this.props.contentId || 'page-wrapper';
123
+ const ionContent = document.querySelector(`#${contentId}`);
124
+ if (ionContent && ionContent.scrollToTop) {
125
+ ionContent.scrollToTop(300);
126
+ }
127
+ else {
128
+ window.scrollTo({ top: 0, behavior: 'smooth' });
129
+ }
130
+ }
131
+ /**
132
+ * Handles header action clicks.
133
+ */
134
+ onHeaderClickHandler(token) {
135
+ this.onHeaderClick.emit(token);
136
+ if (token === 'header-logo' && this.props.homeRoute) {
137
+ this.nav.navigateByUrl(this.props.homeRoute);
138
+ }
139
+ }
140
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
141
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PageWrapperComponent, isStandalone: true, selector: "val-page-wrapper", inputs: { props: "props" }, outputs: { onHeaderClick: "onHeaderClick" }, ngImport: i0, template: `
142
+ <div class="ion-page">
143
+ <val-header
144
+ [props]="headerProps"
145
+ (onClick)="onHeaderClickHandler($event)"
146
+ />
147
+ <ion-content
148
+ [id]="props.contentId || 'page-wrapper'"
149
+ class="ion-padding"
150
+ [fullscreen]="true"
151
+ [ngStyle]="{
152
+ '--background': getBackground()
153
+ }"
154
+ >
155
+ <main>
156
+ <router-outlet></router-outlet>
157
+ </main>
158
+ @if (props.footer) {
159
+ <val-company-footer [props]="props.footer" />
160
+ }
161
+ </ion-content>
162
+ </div>
163
+ `, isInline: true, styles: ["main{min-height:60vh}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: HeaderComponent, selector: "val-header", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: CompanyFooterComponent, selector: "val-company-footer", inputs: ["props"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }] }); }
164
+ }
165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageWrapperComponent, decorators: [{
166
+ type: Component,
167
+ args: [{ selector: 'val-page-wrapper', standalone: true, imports: [CommonModule, HeaderComponent, CompanyFooterComponent, RouterOutlet, IonContent], template: `
168
+ <div class="ion-page">
169
+ <val-header
170
+ [props]="headerProps"
171
+ (onClick)="onHeaderClickHandler($event)"
172
+ />
173
+ <ion-content
174
+ [id]="props.contentId || 'page-wrapper'"
175
+ class="ion-padding"
176
+ [fullscreen]="true"
177
+ [ngStyle]="{
178
+ '--background': getBackground()
179
+ }"
180
+ >
181
+ <main>
182
+ <router-outlet></router-outlet>
183
+ </main>
184
+ @if (props.footer) {
185
+ <val-company-footer [props]="props.footer" />
186
+ }
187
+ </ion-content>
188
+ </div>
189
+ `, styles: ["main{min-height:60vh}\n"] }]
190
+ }], propDecorators: { props: [{
191
+ type: Input
192
+ }], onHeaderClick: [{
193
+ type: Output
194
+ }] } });
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90ZW1wbGF0ZXMvcGFnZS13cmFwcGVyL3BhZ2Utd3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFnQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxNQUFNLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7QUFFNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBa0NILE1BQU0sT0FBTyxvQkFBb0I7SUFqQ2pDO1FBa0NVLFVBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0IsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFHaEM7O1dBRUc7UUFDTSxVQUFLLEdBQXdCO1lBQ3BDLHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FBQztRQUVGOztXQUVHO1FBQ08sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBdUd0RDtJQXJHQzs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sQ0FDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSTtZQUNuQixRQUFRLEVBQUUsSUFBSTtZQUNkLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUCxRQUFRLEVBQUUsS0FBSztnQkFDZixXQUFXLEVBQUUsSUFBSTtnQkFDakIsU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLFFBQVEsRUFBRSxJQUFJO2dCQUNkLEtBQUssRUFBRSxFQUFFO2dCQUNULE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxLQUFLLEVBQUUsYUFBYTt3QkFDcEIsV0FBVyxFQUFFLEVBQUU7d0JBQ2YsUUFBUSxFQUFFLE1BQU07d0JBQ2hCLElBQUksRUFBRSxPQUFPO3dCQUNiLEtBQUssRUFBRTs0QkFDTCxLQUFLLEVBQUUsRUFBRTs0QkFDVCxHQUFHLEVBQUUsYUFBYTs0QkFDbEIsR0FBRyxFQUFFLGFBQWE7NEJBQ2xCLElBQUksRUFBRSxLQUFLOzRCQUNYLE1BQU0sRUFBRSxLQUFLOzRCQUNiLFFBQVEsRUFBRSxLQUFLOzRCQUNmLElBQUksRUFBRSxPQUFPOzRCQUNiLE9BQU8sRUFBRSxLQUFLOzRCQUNkLElBQUksRUFBRSxJQUFJO3lCQUNYO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2lCQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLENBQUM7aUJBQ3ZELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCx3Q0FBd0M7SUFDMUMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVc7UUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksY0FBYyxDQUFDO1FBQ3pELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBUSxDQUFDO1FBQ2xFLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsSUFBSSxLQUFLLEtBQUssYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQzsrR0F0SFUsb0JBQW9CO21HQUFwQixvQkFBb0IscUpBN0JyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVCxnR0F2QlMsWUFBWSxvSEFBRSxlQUFlLGdHQUFFLHNCQUFzQixrRkFBRSxZQUFZLDJKQUFFLFVBQVU7OzRGQThCOUUsb0JBQW9CO2tCQWpDaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQ2hGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JUOzhCQWdCUSxLQUFLO3NCQUFiLEtBQUs7Z0JBT0ksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW9uQ29udGVudCwgVmlld1dpbGxFbnRlciwgVmlld1dpbGxMZWF2ZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wYW55Rm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2NvbXBhbnktZm9vdGVyL2NvbXBhbnktZm9vdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VXcmFwcGVyTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHJlc29sdmVDb2xvciB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9zdHlsZXMnO1xuXG4vKipcbiAqIHZhbC1wYWdlLXdyYXBwZXJcbiAqXG4gKiBBIGNvbXBsZXRlIHBhZ2Ugd3JhcHBlciB0ZW1wbGF0ZSB3aXRoIGhlYWRlciwgcm91dGVyIG91dGxldCwgZm9vdGVyLFxuICogYW5kIGF1dG9tYXRpYyBzY3JvbGwtdG8tdG9wIG9uIG5hdmlnYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtcGFnZS13cmFwcGVyXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgaG9tZVJvdXRlOiAnLycsXG4gKiAgICAgc2Nyb2xsVG9Ub3BPbk5hdmlnYXRlOiB0cnVlLFxuICogICAgIGZvb3Rlcjoge1xuICogICAgICAgbGlua3M6IHsgLi4uIH0sXG4gKiAgICAgICByaWdodHM6IHsgY29tcGFueU5hbWU6ICdBY21lJyB9XG4gKiAgICAgfVxuICogICB9XCJcbiAqID48L3ZhbC1wYWdlLXdyYXBwZXI+XG4gKlxuICogQGlucHV0IHByb3BzIC0gUGFnZSB3cmFwcGVyIGNvbmZpZ3VyYXRpb25cbiAqIEBvdXRwdXQgb25IZWFkZXJDbGljayAtIEVtaXRzIHdoZW4gYSBoZWFkZXIgYWN0aW9uIGlzIGNsaWNrZWRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXBhZ2Utd3JhcHBlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEhlYWRlckNvbXBvbmVudCwgQ29tcGFueUZvb3RlckNvbXBvbmVudCwgUm91dGVyT3V0bGV0LCBJb25Db250ZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiaW9uLXBhZ2VcIj5cbiAgICAgIDx2YWwtaGVhZGVyXG4gICAgICAgIFtwcm9wc109XCJoZWFkZXJQcm9wc1wiXG4gICAgICAgIChvbkNsaWNrKT1cIm9uSGVhZGVyQ2xpY2tIYW5kbGVyKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxpb24tY29udGVudFxuICAgICAgICBbaWRdPVwicHJvcHMuY29udGVudElkIHx8ICdwYWdlLXdyYXBwZXInXCJcbiAgICAgICAgY2xhc3M9XCJpb24tcGFkZGluZ1wiXG4gICAgICAgIFtmdWxsc2NyZWVuXT1cInRydWVcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJy0tYmFja2dyb3VuZCc6IGdldEJhY2tncm91bmQoKVxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPG1haW4+XG4gICAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgICAgICA8L21haW4+XG4gICAgICAgIEBpZiAocHJvcHMuZm9vdGVyKSB7XG4gICAgICAgICAgPHZhbC1jb21wYW55LWZvb3RlciBbcHJvcHNdPVwicHJvcHMuZm9vdGVyXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9pb24tY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBgXG4gICAgbWFpbiB7XG4gICAgICBtaW4taGVpZ2h0OiA2MHZoO1xuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZVdyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBWaWV3V2lsbEVudGVyLCBWaWV3V2lsbExlYXZlLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgdGhlbWUgPSBpbmplY3QoVGhlbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBuYXYgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJvdXRlclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogUGFnZSB3cmFwcGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBASW5wdXQoKSBwcm9wczogUGFnZVdyYXBwZXJNZXRhZGF0YSA9IHtcbiAgICBzY3JvbGxUb1RvcE9uTmF2aWdhdGU6IHRydWUsXG4gIH07XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gYSBoZWFkZXIgYWN0aW9uIGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25IZWFkZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGhlYWRlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZ2V0IGhlYWRlclByb3BzKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BzLmhlYWRlciB8fCB7XG4gICAgICAgIGJvcmRlcmVkOiB0cnVlLFxuICAgICAgICB0cmFuc2x1Y2VudDogdHJ1ZSxcbiAgICAgICAgdG9vbGJhcjoge1xuICAgICAgICAgIHdpdGhCYWNrOiBmYWxzZSxcbiAgICAgICAgICB3aXRoQWN0aW9uczogdHJ1ZSxcbiAgICAgICAgICB0ZXh0Q29sb3I6ICdkYXJrJyxcbiAgICAgICAgICB3aXRoTWVudTogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b2tlbjogJ2hlYWRlci1sb2dvJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgICB0eXBlOiAnSU1BR0UnLFxuICAgICAgICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMCxcbiAgICAgICAgICAgICAgICBzcmM6ICctLW1haW4tbG9nbycsXG4gICAgICAgICAgICAgICAgYWx0OiAnaGVhZGVyIGxvZ28nLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdib3gnLFxuICAgICAgICAgICAgICAgIHNoYWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgbGltaXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZmxleDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2Nyb2xsVG9Ub3BPbk5hdmlnYXRlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgaW9uVmlld1dpbGxMZWF2ZSgpOiB2b2lkIHtcbiAgICAvLyBPcHRpb25hbDogY2FuIGFkZCBsb2dpYyBvbiB2aWV3IGxlYXZlXG4gIH1cblxuICBpb25WaWV3V2lsbEVudGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGJhc2VkIG9uIHRoZW1lLlxuICAgKi9cbiAgZ2V0QmFja2dyb3VuZCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnRoZW1lLklzRGFyaykge1xuICAgICAgcmV0dXJuICd2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciknO1xuICAgIH1cblxuICAgIGNvbnN0IGJnID0gdGhpcy5wcm9wcy5iYWNrZ3JvdW5kO1xuICAgIGlmICghYmcpIHtcbiAgICAgIHJldHVybiAndmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IpJztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZUNvbG9yKGJnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHRoZSBjb250ZW50IHRvIHRoZSB0b3AuXG4gICAqL1xuICBwcml2YXRlIHNjcm9sbFRvVG9wKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRlbnRJZCA9IHRoaXMucHJvcHMuY29udGVudElkIHx8ICdwYWdlLXdyYXBwZXInO1xuICAgIGNvbnN0IGlvbkNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtjb250ZW50SWR9YCkgYXMgYW55O1xuICAgIGlmIChpb25Db250ZW50ICYmIGlvbkNvbnRlbnQuc2Nyb2xsVG9Ub3ApIHtcbiAgICAgIGlvbkNvbnRlbnQuc2Nyb2xsVG9Ub3AoMzAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaGVhZGVyIGFjdGlvbiBjbGlja3MuXG4gICAqL1xuICBvbkhlYWRlckNsaWNrSGFuZGxlcih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5vbkhlYWRlckNsaWNrLmVtaXQodG9rZW4pO1xuXG4gICAgaWYgKHRva2VuID09PSAnaGVhZGVyLWxvZ28nICYmIHRoaXMucHJvcHMuaG9tZVJvdXRlKSB7XG4gICAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKHRoaXMucHJvcHMuaG9tZVJvdXRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdGVtcGxhdGVzL3BhZ2Utd3JhcHBlci90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGVhZGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvaGVhZGVyL3R5cGVzJztcbmltcG9ydCB7IENvbXBhbnlGb290ZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9jb21wYW55LWZvb3Rlci90eXBlcyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHBhZ2Ugd3JhcHBlciBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVdyYXBwZXJNZXRhZGF0YSB7XG4gIC8qKiBIZWFkZXIgY29uZmlndXJhdGlvbiAqL1xuICBoZWFkZXI/OiBIZWFkZXJNZXRhZGF0YTtcbiAgLyoqIEZvb3RlciBjb25maWd1cmF0aW9uICovXG4gIGZvb3Rlcj86IENvbXBhbnlGb290ZXJNZXRhZGF0YTtcbiAgLyoqIEJhY2tncm91bmQgY29sb3Igb3IgQ1NTIHZhcmlhYmxlICovXG4gIGJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIC8qKiBSb3V0ZSB0byBuYXZpZ2F0ZSB0byB3aGVuIGhlYWRlciBsb2dvIGlzIGNsaWNrZWQgKi9cbiAgaG9tZVJvdXRlPzogc3RyaW5nO1xuICAvKiogQ29udGVudCBJRCBmb3Igc2Nyb2xsIGhhbmRsaW5nICovXG4gIGNvbnRlbnRJZD86IHN0cmluZztcbiAgLyoqIEVuYWJsZSBzY3JvbGwtdG8tdG9wIG9uIHJvdXRlIGNoYW5nZSAqL1xuICBzY3JvbGxUb1RvcE9uTmF2aWdhdGU/OiBib29sZWFuO1xufVxuIl19
@@ -55,4 +55,4 @@ export var ToolbarActionType;
55
55
  ToolbarActionType["IMAGE"] = "IMAGE";
56
56
  ToolbarActionType["BUTTON"] = "BUTTON";
57
57
  })(ToolbarActionType || (ToolbarActionType = {}));
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxPQUFPLEdBQW1CLFNBQVMsQ0FBQztBQUMxQyxNQUFNLFFBQVEsR0FBbUIsVUFBVSxDQUFDO0FBQzVDLE1BQU0sT0FBTyxHQUFtQixTQUFTLENBQUM7QUFDMUMsTUFBTSxLQUFLLEdBQW1CLE9BQU8sQ0FBQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBRXJFOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUFNWDtBQU5ELFdBQVksVUFBVTtJQUNwQixpRUFBZSxDQUFBO0lBQ2YsbUVBQWdCLENBQUE7SUFDaEIsaUVBQWUsQ0FBQTtJQUNmLCtEQUFjLENBQUE7SUFDZCx1RUFBa0IsQ0FBQTtBQUNwQixDQUFDLEVBTlcsVUFBVSxLQUFWLFVBQVUsUUFNckI7QUFjRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLFNBdUJYO0FBdkJELFdBQVksU0FBUztJQUNuQix5Q0FBSSxDQUFBO0lBQ0osaURBQVEsQ0FBQTtJQUNSLDJDQUFLLENBQUE7SUFDTCxpREFBUSxDQUFBO0lBQ1IsK0NBQU8sQ0FBQTtJQUNQLDZDQUFNLENBQUE7SUFDTiw2REFBYyxDQUFBO0lBQ2QsaURBQVEsQ0FBQTtJQUNSLHlDQUFJLENBQUE7SUFDSixxREFBVSxDQUFBO0lBQ1YsMENBQUksQ0FBQTtJQUNKLDRDQUFLLENBQUE7SUFDTCw0Q0FBSyxDQUFBO0lBQ0wsOENBQU0sQ0FBQTtJQUNOLDREQUFhLENBQUE7SUFDYiwwREFBWSxDQUFBO0lBQ1osd0VBQW1CLENBQUE7SUFDbkIsMENBQUksQ0FBQTtJQUNKLDhDQUFNLENBQUE7SUFDTiw0Q0FBSyxDQUFBO0lBQ0wsNENBQUssQ0FBQTtJQUNMLGtEQUFRLENBQUE7QUFDVixDQUFDLEVBdkJXLFNBQVMsS0FBVCxTQUFTLFFBdUJwQjtBQXlHRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0Isc0NBQWlCLENBQUE7SUFDakIsa0NBQWEsQ0FBQTtJQUNiLG9DQUFlLENBQUE7SUFDZixzQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTFcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUs1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4vYXRvbXMvaW1hZ2UvdHlwZXMnO1xuXG4vKipcbiAqIFBvc3NpYmxlIHN0YXRlcyBmb3IgYW4gaW50ZXJhY3RpdmUgY29tcG9uZW50LlxuICovXG5leHBvcnQgdHlwZSBDb21wb25lbnRTdGF0ZSA9ICdFTkFCTEVEJyB8ICdESVNBQkxFRCcgfCAnV09SS0lORycgfCAnRVJST1InO1xuY29uc3QgRU5BQkxFRDogQ29tcG9uZW50U3RhdGUgPSAnRU5BQkxFRCc7XG5jb25zdCBESVNBQkxFRDogQ29tcG9uZW50U3RhdGUgPSAnRElTQUJMRUQnO1xuY29uc3QgV09SS0lORzogQ29tcG9uZW50U3RhdGUgPSAnV09SS0lORyc7XG5jb25zdCBFUlJPUjogQ29tcG9uZW50U3RhdGUgPSAnRVJST1InO1xuXG4vKipcbiAqIE9iamVjdCBjb250YWluaW5nIGFsbCBwb3NzaWJsZSBjb21wb25lbnQgc3RhdGVzLlxuICovXG5leHBvcnQgY29uc3QgQ29tcG9uZW50U3RhdGVzID0geyBFTkFCTEVELCBESVNBQkxFRCwgV09SS0lORywgRVJST1IgfTtcblxuLyoqXG4gKiBUeXBlcyBvZiBhY3Rpb25zIHRoYXQgYSBidXR0b24gb3IgbGluayBjYW4gcGVyZm9ybS5cbiAqL1xuZXhwb3J0IGVudW0gQWN0aW9uVHlwZSB7XG4gIEJST1dTRVJfTkVXX1RBQiwgLy8gT3BlbiBpbiBhIG5ldyBicm93c2VyIHRhYlxuICBCUk9XU0VSX0RPV05MT0FELCAvLyBEb3dubG9hZCB2aWEgYnJvd3NlclxuICBOQVRJVkVfRE9XTkxPQUQsIC8vIERvd25sb2FkIHVzaW5nIG5hdGl2ZSBjYXBhYmlsaXRpZXNcbiAgQVBQX05BVklHQVRJT04sIC8vIEludGVybmFsIGFwcCBuYXZpZ2F0aW9uXG4gIEJST1dTRVJfTkFWSUdBVElPTiwgLy8gTmF2aWdhdGlvbiBpbiB0aGUgYnJvd3NlclxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gZXhlY3V0YWJsZSBhY3Rpb24gZm9yIGEgYnV0dG9uIG9yIGxpbmsuXG4gKi9cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IHtcbiAgLyoqIEFjdGlvbiBkZXNjcmlwdGlvbiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQWN0aW9uIHR5cGUgKi9cbiAgdHlwZTogQWN0aW9uVHlwZTtcbiAgLyoqIEFjdGlvbiBzb3VyY2Ugb3IgZGVzdGluYXRpb24gKi9cbiAgc291cmNlOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFN1cHBvcnRlZCBpbnB1dCB0eXBlcyBmb3IgZm9ybXMuXG4gKi9cbmV4cG9ydCBlbnVtIElucHV0VHlwZSB7XG4gIFRFWFQsXG4gIFRFWFRBUkVBLFxuICBFTUFJTCxcbiAgUEFTU1dPUkQsXG4gIENPTU1FTlQsXG4gIE5VTUJFUixcbiAgTlVNQkVSX0ZST01fVE8sXG4gIFBJTl9DT0RFLFxuICBEQVRFLFxuICBEQVRFX1JBTkdFLFxuICBIT1VSLFxuICBDSEVDSyxcbiAgUkFESU8sXG4gIFNFTEVDVCxcbiAgU0VBUkNIX1NFTEVDVCxcbiAgTVVMVElfU0VMRUNULFxuICBNVUxUSV9TRUxFQ1RfU0lNUExFLFxuICBGSUxFLFxuICBUT0dHTEUsXG4gIFJBTkdFLFxuICBQSE9ORSxcbiAgQ1VSUkVOQ1ksXG59XG5cbi8qKlxuICogT3B0aW9uIGZvciBzZWxlY3QsIHJhZGlvLCBldGMuIGlucHV0cy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXRPcHRpb24gPSB7XG4gIC8qKiBVbmlxdWUgb3B0aW9uIGlkZW50aWZpZXIgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgZGVmYXVsdCAqL1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG4gIC8qKiBEaXNwbGF5IG9yZGVyICovXG4gIG9yZGVyOiBudW1iZXI7XG59O1xuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhIGZvcm0gZmllbGQuXG4gKi9cbmV4cG9ydCB0eXBlIElucHV0TWV0YWRhdGEgPSB7XG4gIC8qKiBBc3NvY2lhdGVkIGZvcm0gY29udHJvbCAqL1xuICBjb250cm9sOiBGb3JtQ29udHJvbDtcbiAgLyoqIEZyb20gY29udHJvbCAob25seSBmb3IgTlVNQkVSX0ZST01fVE8gdHlwZSkgKi9cbiAgZnJvbUNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbiAgLyoqIFRvIGNvbnRyb2wgKG9ubHkgZm9yIE5VTUJFUl9GUk9NX1RPIHR5cGUpICovXG4gIHRvQ29udHJvbD86IEZvcm1Db250cm9sO1xuICAvKiogVW5pcXVlIHRva2VuIGZvciB0aGUgaW5wdXQgKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbGFiZWwgKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIEZpZWxkIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0ICovXG4gIGhpbnQ6IHN0cmluZztcbiAgLyoqIElucHV0IHBsYWNlaG9sZGVyICovXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIC8qKiBJbnB1dCB0eXBlICovXG4gIHR5cGU6IElucHV0VHlwZTtcbiAgLyoqIERpc3BsYXkgb3JkZXIgKi9cbiAgb3JkZXI6IG51bWJlcjtcbiAgLyoqIEFzc29jaWF0ZWQgdmFsaWRhdG9ycyAqL1xuICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuICAvKiogT3B0aW9ucyAoZm9yIHNlbGVjdCwgcmFkaW8sIGV0Yy4pICovXG4gIG9wdGlvbnM/OiBJbnB1dE9wdGlvbltdO1xuICAvKiogQWxsb3dlZCByYW5nZSAoZm9yIG51bWJlciwgZGF0ZSwgZXRjLikgKi9cbiAgcmFuZ2U/OiB7XG4gICAgbWluOiBudW1iZXI7XG4gICAgbWF4OiBudW1iZXI7XG4gIH07XG4gIC8qKiBDdXN0b20gZXJyb3IgbWVzc2FnZXMgKi9cbiAgZXJyb3JzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuICAvKiogSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkICovXG4gIHZhbHVlPzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCB2YWx1ZSBjb25maWd1cmF0aW9uIC0gc3RyaW5nIGZvciBjdXN0b20gZGVmYXVsdHMsIHRydWUgZm9yIGF1dG8gZGVmYXVsdHMgKi9cbiAgd2l0aERlZmF1bHQ/OiBzdHJpbmcgfCBib29sZWFuO1xuICAvKiogRmllbGQgc3RhdGUgKi9cbiAgc3RhdGU6IENvbXBvbmVudFN0YXRlO1xuICAvKiogTGFiZWwgZm9yIFwiZnJvbVwiIGZpZWxkIChvbmx5IGZvciBOVU1CRVJfRlJPTV9UTyB0eXBlKSAqL1xuICBmcm9tTGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBmb3IgXCJ0b1wiIGZpZWxkIChvbmx5IGZvciBOVU1CRVJfRlJPTV9UTyB0eXBlKSAqL1xuICB0b0xhYmVsPzogc3RyaW5nO1xuICAvKiogUGxhY2Vob2xkZXIgZm9yIFwiZnJvbVwiIGZpZWxkIChvbmx5IGZvciBOVU1CRVJfRlJPTV9UTyB0eXBlKSAqL1xuICBmcm9tUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgXCJ0b1wiIGZpZWxkIChvbmx5IGZvciBOVU1CRVJfRlJPTV9UTyB0eXBlKSAqL1xuICB0b1BsYWNlaG9sZGVyPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBBIHNlY3Rpb24gaW4gYSBmb3JtLCBncm91cGluZyBtdWx0aXBsZSBmaWVsZHMuXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1TZWN0aW9uID0ge1xuICAvKiogU2VjdGlvbiBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgb3JkZXIgKi9cbiAgb3JkZXI6IG51bWJlcjtcbiAgLyoqIEZpZWxkcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiAqL1xuICBmaWVsZHM6IElucHV0TWV0YWRhdGFbXTtcbn07XG5cbi8qKlxuICogRGF0YSBzZW50IHdoZW4gc3VibWl0dGluZyBhIGZvcm0uXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1TdWJtaXQgPSB7XG4gIC8qKiBMaXN0IG9mIGZpZWxkcyBhbmQgdGhlaXIgdmFsdWVzICovXG4gIGZpZWxkczogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W107XG4gIC8qKiBPcHRpb25hbCB0b2tlbiBmb3IgdGhlIG9wZXJhdGlvbiAqL1xuICB0b2tlbj86IHN0cmluZztcbn07XG5cbi8qKlxuICogTWV0YWRhdGEgZm9yIGEgY29tcGxldGUgZm9ybS5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybU1ldGFkYXRhID0ge1xuICAvKiogRm9ybSBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIEZvcm0gc2VjdGlvbnMgKi9cbiAgc2VjdGlvbnM6IEZvcm1TZWN0aW9uW107XG4gIC8qKiBBY3Rpb24gYnV0dG9ucyBjb25maWd1cmF0aW9uICovXG4gIGFjdGlvbnM6IEJ1dHRvbk1ldGFkYXRhO1xuICAvKiogR2xvYmFsIGZvcm0gc3RhdGUgKi9cbiAgc3RhdGU6IENvbXBvbmVudFN0YXRlO1xufTtcblxuLyoqXG4gKiBQb3NzaWJsZSBhY3Rpb24gdHlwZXMgZm9yIGEgdG9vbGJhci5cbiAqL1xuZXhwb3J0IGVudW0gVG9vbGJhckFjdGlvblR5cGUge1xuICBBVkFUQVIgPSAnQVZBVEFSJyxcbiAgSUNPTiA9ICdJQ09OJyxcbiAgSU1BR0UgPSAnSU1BR0UnLFxuICBCVVRUT04gPSAnQlVUVE9OJyxcbn1cblxuLyoqXG4gKiBUb29sYmFyIGFjdGlvbiBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgdHlwZSBUb29sYmFyQWN0aW9uID0ge1xuICAvKiogQWN0aW9uIHR5cGUgKi9cbiAgdHlwZTogJ0FWQVRBUicgfCAnSUNPTicgfCAnSU1BR0UnIHwgJ0JVVFRPTic7XG4gIC8qKiBPcHRpb25hbCB0b2tlbiBpZGVudGlmaWVyICovXG4gIHRva2VuPzogc3RyaW5nO1xuICAvKiogVG9vbGJhciBwb3NpdGlvbiAqL1xuICBwb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xuICAvKiogT3B0aW9uYWwgZGVzY3JpcHRpb24gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBBc3NvY2lhdGVkIGltYWdlIChpZiBhbnkpICovXG4gIGltYWdlPzogSW1hZ2VNZXRhZGF0YTtcbn07XG5cbi8qKlxuICogTWV0YWRhdGEgZm9yIGFuIGljb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWNvbk1ldGFkYSB7XG4gIC8qKiBJY29uIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogSWNvbiBzbG90IHBvc2l0aW9uICovXG4gIHNsb3Q6ICdzdGFydCcgfCAnZW5kJztcbn1cblxuLyoqXG4gKiBCdXR0b24gY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKiBTdXBwb3J0cyBib3RoIHN0YXRpYyBhbmQgcmVhY3RpdmUgY29udGVudC5cbiAqIEB0eXBlIHtCdXR0b25NZXRhZGF0YX1cbiAqIEBwcm9wZXJ0eSB0ZXh0IC0gU3RhdGljIGJ1dHRvbiBsYWJlbCAodGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRleHRDb25maWcpLlxuICogQHByb3BlcnR5IHRleHRDb25maWcgLSBSZWFjdGl2ZSBjb250ZW50IGNvbmZpZ3VyYXRpb24gZm9yIGJ1dHRvbiB0ZXh0LlxuICogQHByb3BlcnR5IGNvbG9yIC0gVGhlIGJ1dHRvbiBjb2xvciAoSW9uaWMgY29sb3Igc3RyaW5nKS5cbiAqIEBwcm9wZXJ0eSBpY29uIC0gSWNvbiB0byBkaXNwbGF5IChvcHRpb25hbCkuXG4gKiBAcHJvcGVydHkgc3RhdGUgLSBCdXR0b24gc3RhdGUgKGVuYWJsZWQsIGRpc2FibGVkLCB3b3JraW5nLCBldGMuKS5cbiAqIEBwcm9wZXJ0eSBleHBhbmQsIGZpbGwsIHNpemUsIHNoYXBlLCBocmVmLCB0YXJnZXQsIGRvd25sb2FkLCBoYW5kbGVyLCBldGMuIC0gU2VlIEJ1dHRvbk1ldGFkYXRhIGZvciBhbGwgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdXR0b25NZXRhZGF0YSB7XG4gIC8qKiBBc3NvY2lhdGVkIGFjdGlvbiB0eXBlICovXG4gIGFjdGlvblR5cGU/OiBBY3Rpb25UeXBlO1xuICAvKiogQnV0dG9uIGV4cGFuc2lvbiAqL1xuICBleHBhbmQ/OiAnZnVsbCcgfCAnYmxvY2snO1xuICAvKiogQXNzb2NpYXRlZCBsaW5rICovXG4gIGxpbms/OiBzdHJpbmc7XG4gIC8qKiBBc3NvY2lhdGVkIGhyZWYgbGluayAqL1xuICBocmVmPzogc3RyaW5nO1xuICAvKiogTGluayB0YXJnZXQgKi9cbiAgdGFyZ2V0PzogJ19ibGFuaycgfCAnX3NlbGYnIHwgJ19wYXJlbnQnIHwgJ190b3AnO1xuICAvKiogRG93bmxvYWQgZmlsZSBuYW1lICovXG4gIGRvd25sb2FkPzogc3RyaW5nO1xuICAvKiogQnV0dG9uIGNvbG9yICovXG4gIGNvbG9yOiBDb2xvcjtcbiAgLyoqIEJ1dHRvbiBzdGF0ZSAqL1xuICBzdGF0ZTogQ29tcG9uZW50U3RhdGU7XG4gIC8qKiBTdGF0aWMgZGlzcGxheSB0ZXh0ICh0YWtlcyBwcmVjZWRlbmNlIG92ZXIgcmVhY3RpdmUgY29udGVudCkgKi9cbiAgdGV4dD86IHN0cmluZztcbiAgLyoqIFJlYWN0aXZlIGNvbnRlbnQgY29uZmlndXJhdGlvbiBmb3IgYnV0dG9uIHRleHQgKi9cbiAgY29udGVudEtleT86IHN0cmluZztcbiAgLyoqIENvbXBvbmVudCBjbGFzcyBuYW1lIGZvciBjb250ZW50IGxvb2t1cCAocmVxdWlyZWQgd2l0aCBjb250ZW50S2V5KSAqL1xuICBjb250ZW50Q2xhc3M/OiBzdHJpbmc7XG4gIC8qKiBGYWxsYmFjayB0ZXh0IGlmIGNvbnRlbnRLZXkgaXMgbm90IGZvdW5kICovXG4gIGNvbnRlbnRGYWxsYmFjaz86IHN0cmluZztcbiAgLyoqIFZhbHVlcyB0byBpbnRlcnBvbGF0ZSBpbnRvIHRoZSBjb250ZW50IHN0cmluZyAqL1xuICBjb250ZW50SW50ZXJwb2xhdGlvbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj47XG4gIC8qKiBBc3NvY2lhdGVkIGljb24gKi9cbiAgaWNvbj86IEljb25NZXRhZGE7XG4gIC8qKiBCdXR0b24gc2hhcGUgKi9cbiAgc2hhcGU/OiAncm91bmQnO1xuICAvKiogQnV0dG9uIHNpemUgKi9cbiAgc2l6ZT86ICdzbWFsbCcgfCAnZGVmYXVsdCcgfCAnbGFyZ2UnO1xuICAvKiogQnV0dG9uIGZpbGwgKi9cbiAgZmlsbD86ICdjbGVhcicgfCAnb3V0bGluZScgfCAnc29saWQnIHwgJ2RlZmF1bHQnO1xuICAvKiogQnV0dG9uIHR5cGUgKi9cbiAgdHlwZTogJ2J1dHRvbicgfCAnc3VibWl0JyB8ICdyZXNldCc7XG4gIC8qKiBPcHRpb25hbCB0b2tlbiBpZGVudGlmaWVyICovXG4gIHRva2VuPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgcmVmZXJlbmNlICovXG4gIHJlZj86IGFueTtcbiAgLyoqIEFjdGlvbiBoYW5kbGVyICovXG4gIGhhbmRsZXI/OiAodmFsdWU6IGFueSkgPT4gYW55IHwgUHJvbWlzZTxhbnk+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHJlYWN0aXZlIGNvbnRlbnQgaW4gdmFsLWJ1dHRvbiBjb21wb25lbnQuXG4gKiBVc2UgdGhpcyBpbnRlcmZhY2Ugd2hlbiB5b3Ugb25seSBuZWVkIHRvIHNwZWNpZnkgY29udGVudC1yZWxhdGVkIHByb3BlcnRpZXMuXG4gKiBUaGlzIGZvbGxvd3MgdGhlIHNhbWUgcGF0dGVybiBhcyBUZXh0Q29udGVudENvbmZpZyBmb3IgY29uc2lzdGVuY3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9uQ29udGVudENvbmZpZyB7XG4gIGNvbnRlbnRLZXk6IHN0cmluZztcbiAgY29udGVudENsYXNzOiBzdHJpbmc7XG4gIGNvbnRlbnRGYWxsYmFjaz86IHN0cmluZztcbiAgY29udGVudEludGVycG9sYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xufVxuIl19
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxPQUFPLEdBQW1CLFNBQVMsQ0FBQztBQUMxQyxNQUFNLFFBQVEsR0FBbUIsVUFBVSxDQUFDO0FBQzVDLE1BQU0sT0FBTyxHQUFtQixTQUFTLENBQUM7QUFDMUMsTUFBTSxLQUFLLEdBQW1CLE9BQU8sQ0FBQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBRXJFOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUFNWDtBQU5ELFdBQVksVUFBVTtJQUNwQixpRUFBZSxDQUFBO0lBQ2YsbUVBQWdCLENBQUE7SUFDaEIsaUVBQWUsQ0FBQTtJQUNmLCtEQUFjLENBQUE7SUFDZCx1RUFBa0IsQ0FBQTtBQUNwQixDQUFDLEVBTlcsVUFBVSxLQUFWLFVBQVUsUUFNckI7QUFjRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLFNBdUJYO0FBdkJELFdBQVksU0FBUztJQUNuQix5Q0FBSSxDQUFBO0lBQ0osaURBQVEsQ0FBQTtJQUNSLDJDQUFLLENBQUE7SUFDTCxpREFBUSxDQUFBO0lBQ1IsK0NBQU8sQ0FBQTtJQUNQLDZDQUFNLENBQUE7SUFDTiw2REFBYyxDQUFBO0lBQ2QsaURBQVEsQ0FBQTtJQUNSLHlDQUFJLENBQUE7SUFDSixxREFBVSxDQUFBO0lBQ1YsMENBQUksQ0FBQTtJQUNKLDRDQUFLLENBQUE7SUFDTCw0Q0FBSyxDQUFBO0lBQ0wsOENBQU0sQ0FBQTtJQUNOLDREQUFhLENBQUE7SUFDYiwwREFBWSxDQUFBO0lBQ1osd0VBQW1CLENBQUE7SUFDbkIsMENBQUksQ0FBQTtJQUNKLDhDQUFNLENBQUE7SUFDTiw0Q0FBSyxDQUFBO0lBQ0wsNENBQUssQ0FBQTtJQUNMLGtEQUFRLENBQUE7QUFDVixDQUFDLEVBdkJXLFNBQVMsS0FBVCxTQUFTLFFBdUJwQjtBQTZIRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0Isc0NBQWlCLENBQUE7SUFDakIsa0NBQWEsQ0FBQTtJQUNiLG9DQUFlLENBQUE7SUFDZixzQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTFcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUs1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4vYXRvbXMvaW1hZ2UvdHlwZXMnO1xuXG4vKipcbiAqIFBvc3NpYmxlIHN0YXRlcyBmb3IgYW4gaW50ZXJhY3RpdmUgY29tcG9uZW50LlxuICovXG5leHBvcnQgdHlwZSBDb21wb25lbnRTdGF0ZSA9ICdFTkFCTEVEJyB8ICdESVNBQkxFRCcgfCAnV09SS0lORycgfCAnRVJST1InO1xuY29uc3QgRU5BQkxFRDogQ29tcG9uZW50U3RhdGUgPSAnRU5BQkxFRCc7XG5jb25zdCBESVNBQkxFRDogQ29tcG9uZW50U3RhdGUgPSAnRElTQUJMRUQnO1xuY29uc3QgV09SS0lORzogQ29tcG9uZW50U3RhdGUgPSAnV09SS0lORyc7XG5jb25zdCBFUlJPUjogQ29tcG9uZW50U3RhdGUgPSAnRVJST1InO1xuXG4vKipcbiAqIE9iamVjdCBjb250YWluaW5nIGFsbCBwb3NzaWJsZSBjb21wb25lbnQgc3RhdGVzLlxuICovXG5leHBvcnQgY29uc3QgQ29tcG9uZW50U3RhdGVzID0geyBFTkFCTEVELCBESVNBQkxFRCwgV09SS0lORywgRVJST1IgfTtcblxuLyoqXG4gKiBUeXBlcyBvZiBhY3Rpb25zIHRoYXQgYSBidXR0b24gb3IgbGluayBjYW4gcGVyZm9ybS5cbiAqL1xuZXhwb3J0IGVudW0gQWN0aW9uVHlwZSB7XG4gIEJST1dTRVJfTkVXX1RBQiwgLy8gT3BlbiBpbiBhIG5ldyBicm93c2VyIHRhYlxuICBCUk9XU0VSX0RPV05MT0FELCAvLyBEb3dubG9hZCB2aWEgYnJvd3NlclxuICBOQVRJVkVfRE9XTkxPQUQsIC8vIERvd25sb2FkIHVzaW5nIG5hdGl2ZSBjYXBhYmlsaXRpZXNcbiAgQVBQX05BVklHQVRJT04sIC8vIEludGVybmFsIGFwcCBuYXZpZ2F0aW9uXG4gIEJST1dTRVJfTkFWSUdBVElPTiwgLy8gTmF2aWdhdGlvbiBpbiB0aGUgYnJvd3NlclxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gZXhlY3V0YWJsZSBhY3Rpb24gZm9yIGEgYnV0dG9uIG9yIGxpbmsuXG4gKi9cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IHtcbiAgLyoqIEFjdGlvbiBkZXNjcmlwdGlvbiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQWN0aW9uIHR5cGUgKi9cbiAgdHlwZTogQWN0aW9uVHlwZTtcbiAgLyoqIEFjdGlvbiBzb3VyY2Ugb3IgZGVzdGluYXRpb24gKi9cbiAgc291cmNlOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFN1cHBvcnRlZCBpbnB1dCB0eXBlcyBmb3IgZm9ybXMuXG4gKi9cbmV4cG9ydCBlbnVtIElucHV0VHlwZSB7XG4gIFRFWFQsXG4gIFRFWFRBUkVBLFxuICBFTUFJTCxcbiAgUEFTU1dPUkQsXG4gIENPTU1FTlQsXG4gIE5VTUJFUixcbiAgTlVNQkVSX0ZST01fVE8sXG4gIFBJTl9DT0RFLFxuICBEQVRFLFxuICBEQVRFX1JBTkdFLFxuICBIT1VSLFxuICBDSEVDSyxcbiAgUkFESU8sXG4gIFNFTEVDVCxcbiAgU0VBUkNIX1NFTEVDVCxcbiAgTVVMVElfU0VMRUNULFxuICBNVUxUSV9TRUxFQ1RfU0lNUExFLFxuICBGSUxFLFxuICBUT0dHTEUsXG4gIFJBTkdFLFxuICBQSE9ORSxcbiAgQ1VSUkVOQ1ksXG59XG5cbi8qKlxuICogT3B0aW9uIGZvciBzZWxlY3QsIHJhZGlvLCBldGMuIGlucHV0cy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXRPcHRpb24gPSB7XG4gIC8qKiBVbmlxdWUgb3B0aW9uIGlkZW50aWZpZXIgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgZGVmYXVsdCAqL1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG4gIC8qKiBEaXNwbGF5IG9yZGVyICovXG4gIG9yZGVyOiBudW1iZXI7XG59O1xuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhIGZvcm0gZmllbGQuXG4gKi9cbmV4cG9ydCB0eXBlIElucHV0TWV0YWRhdGEgPSB7XG4gIC8qKiBBc3NvY2lhdGVkIGZvcm0gY29udHJvbCAqL1xuICBjb250cm9sOiBGb3JtQ29udHJvbDtcbiAgLyoqIEZyb20gY29udHJvbCAob25seSBmb3IgTlVNQkVSX0ZST01fVE8gdHlwZSkgKi9cbiAgZnJvbUNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbiAgLyoqIFRvIGNvbnRyb2wgKG9ubHkgZm9yIE5VTUJFUl9GUk9NX1RPIHR5cGUpICovXG4gIHRvQ29udHJvbD86IEZvcm1Db250cm9sO1xuICAvKiogVW5pcXVlIHRva2VuIGZvciB0aGUgaW5wdXQgKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbGFiZWwgKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIEZpZWxkIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0ICovXG4gIGhpbnQ6IHN0cmluZztcbiAgLyoqIElucHV0IHBsYWNlaG9sZGVyICovXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIC8qKiBJbnB1dCB0eXBlICovXG4gIHR5cGU6IElucHV0VHlwZTtcbiAgLyoqIERpc3BsYXkgb3JkZXIgKi9cbiAgb3JkZXI6IG51bWJlcjtcbiAgLyoqIEFzc29jaWF0ZWQgdmFsaWRhdG9ycyAqL1xuICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuICAvKiogT3B0aW9ucyAoZm9yIHNlbGVjdCwgcmFkaW8sIGV0Yy4pICovXG4gIG9wdGlvbnM/OiBJbnB1dE9wdGlvbltdO1xuICAvKiogQWxsb3dlZCByYW5nZSAoZm9yIG51bWJlciwgZGF0ZSwgZXRjLikgKi9cbiAgcmFuZ2U/OiB7XG4gICAgbWluOiBudW1iZXI7XG4gICAgbWF4OiBudW1iZXI7XG4gIH07XG4gIC8qKiBDdXN0b20gZXJyb3IgbWVzc2FnZXMgKi9cbiAgZXJyb3JzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuICAvKiogSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkICovXG4gIHZhbHVlPzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCB2YWx1ZSBjb25maWd1cmF0aW9uIC0gc3RyaW5nIGZvciBjdXN0b20gZGVmYXVsdHMsIHRydWUgZm9yIGF1dG8gZGVmYXVsdHMgKi9cbiAgd2l0aERlZmF1bHQ/OiBzdHJpbmcgfCBib29sZWFuO1xuICAvKiogRmllbGQgc3RhdGUgKi9cbiAgc3RhdGU6IENvbXBvbmVudFN0YXRlO1xuICAvKiogTGFiZWwgZm9yIFwiZnJvbVwiIGZpZWxkIChvbmx5IGZvciBOVU1CRVJfRlJPTV9UTyB0eXBlKSAqL1xuICBmcm9tTGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBmb3IgXCJ0b1wiIGZpZWxkIChvbmx5IGZvciBOVU1CRVJfRlJPTV9UTyB0eXBlKSAqL1xuICB0b0xhYmVsPzogc3RyaW5nO1xuICAvKiogUGxhY2Vob2xkZXIgZm9yIFwiZnJvbVwiIGZpZWxkIChvbmx5IGZvciBOVU1CRVJfRlJPTV9UTyB0eXBlKSAqL1xuICBmcm9tUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgXCJ0b1wiIGZpZWxkIChvbmx5IGZvciBOVU1CRVJfRlJPTV9UTyB0eXBlKSAqL1xuICB0b1BsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gIC8vIGkxOG4gc3VwcG9ydCBwcm9wZXJ0aWVzXG4gIC8qKiBLZXkgZm9yIHJlYWN0aXZlIGNvbnRlbnQgZnJvbSBMYW5nU2VydmljZSAqL1xuICBjb250ZW50S2V5Pzogc3RyaW5nO1xuICAvKiogQ29tcG9uZW50IGNsYXNzIG5hbWUgZm9yIGNvbnRlbnQgbG9va3VwICovXG4gIGNvbnRlbnRDbGFzcz86IHN0cmluZztcbiAgLyoqIEZhbGxiYWNrIHRleHQgaWYgY29udGVudCBrZXkgaXMgbm90IGZvdW5kICovXG4gIGNvbnRlbnRGYWxsYmFjaz86IHN0cmluZztcblxuICAvLyBzZWxlY3QtaW5wdXQgc3BlY2lmaWMgaTE4biBwcm9wZXJ0aWVzXG4gIC8qKiBDdXN0b20gaGVhZGVyIHRleHQgZm9yIHNlbGVjdCBtb2RhbCAqL1xuICBtb2RhbEhlYWRlcj86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBjYW5jZWwgYnV0dG9uIHRleHQgZm9yIHNlbGVjdCBtb2RhbCAqL1xuICBjYW5jZWxUZXh0Pzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIE9LIGJ1dHRvbiB0ZXh0IGZvciBzZWxlY3QgbW9kYWwgKi9cbiAgb2tUZXh0Pzogc3RyaW5nO1xuXG4gIC8vIGNoZWNrLWlucHV0IHNwZWNpZmljIHByb3BlcnRpZXNcbiAgLyoqIFBvc2l0aW9uIG9mIGxhYmVsIGZvciBjaGVja2JveCAoJ3N0YXJ0JyB8ICdlbmQnKSAqL1xuICBsYWJlbFBsYWNlbWVudD86ICdzdGFydCcgfCAnZW5kJztcbn07XG5cbi8qKlxuICogQSBzZWN0aW9uIGluIGEgZm9ybSwgZ3JvdXBpbmcgbXVsdGlwbGUgZmllbGRzLlxuICovXG5leHBvcnQgdHlwZSBGb3JtU2VjdGlvbiA9IHtcbiAgLyoqIFNlY3Rpb24gbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG9yZGVyICovXG4gIG9yZGVyOiBudW1iZXI7XG4gIC8qKiBGaWVsZHMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gKi9cbiAgZmllbGRzOiBJbnB1dE1ldGFkYXRhW107XG59O1xuXG4vKipcbiAqIERhdGEgc2VudCB3aGVuIHN1Ym1pdHRpbmcgYSBmb3JtLlxuICovXG5leHBvcnQgdHlwZSBGb3JtU3VibWl0ID0ge1xuICAvKiogTGlzdCBvZiBmaWVsZHMgYW5kIHRoZWlyIHZhbHVlcyAqL1xuICBmaWVsZHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdO1xuICAvKiogT3B0aW9uYWwgdG9rZW4gZm9yIHRoZSBvcGVyYXRpb24gKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhIGNvbXBsZXRlIGZvcm0uXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1NZXRhZGF0YSA9IHtcbiAgLyoqIEZvcm0gbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBGb3JtIHNlY3Rpb25zICovXG4gIHNlY3Rpb25zOiBGb3JtU2VjdGlvbltdO1xuICAvKiogQWN0aW9uIGJ1dHRvbnMgY29uZmlndXJhdGlvbiAqL1xuICBhY3Rpb25zOiBCdXR0b25NZXRhZGF0YTtcbiAgLyoqIEdsb2JhbCBmb3JtIHN0YXRlICovXG4gIHN0YXRlOiBDb21wb25lbnRTdGF0ZTtcbn07XG5cbi8qKlxuICogUG9zc2libGUgYWN0aW9uIHR5cGVzIGZvciBhIHRvb2xiYXIuXG4gKi9cbmV4cG9ydCBlbnVtIFRvb2xiYXJBY3Rpb25UeXBlIHtcbiAgQVZBVEFSID0gJ0FWQVRBUicsXG4gIElDT04gPSAnSUNPTicsXG4gIElNQUdFID0gJ0lNQUdFJyxcbiAgQlVUVE9OID0gJ0JVVFRPTicsXG59XG5cbi8qKlxuICogVG9vbGJhciBhY3Rpb24gZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgVG9vbGJhckFjdGlvbiA9IHtcbiAgLyoqIEFjdGlvbiB0eXBlICovXG4gIHR5cGU6ICdBVkFUQVInIHwgJ0lDT04nIHwgJ0lNQUdFJyB8ICdCVVRUT04nO1xuICAvKiogT3B0aW9uYWwgdG9rZW4gaWRlbnRpZmllciAqL1xuICB0b2tlbj86IHN0cmluZztcbiAgLyoqIFRvb2xiYXIgcG9zaXRpb24gKi9cbiAgcG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCcgfCAnY2VudGVyJztcbiAgLyoqIE9wdGlvbmFsIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogQXNzb2NpYXRlZCBpbWFnZSAoaWYgYW55KSAqL1xuICBpbWFnZT86IEltYWdlTWV0YWRhdGE7XG59O1xuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhbiBpY29uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEljb25NZXRhZGEge1xuICAvKiogSWNvbiBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIEljb24gc2xvdCBwb3NpdGlvbiAqL1xuICBzbG90OiAnc3RhcnQnIHwgJ2VuZCc7XG59XG5cbi8qKlxuICogQnV0dG9uIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICogU3VwcG9ydHMgYm90aCBzdGF0aWMgYW5kIHJlYWN0aXZlIGNvbnRlbnQuXG4gKiBAdHlwZSB7QnV0dG9uTWV0YWRhdGF9XG4gKiBAcHJvcGVydHkgdGV4dCAtIFN0YXRpYyBidXR0b24gbGFiZWwgKHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0ZXh0Q29uZmlnKS5cbiAqIEBwcm9wZXJ0eSB0ZXh0Q29uZmlnIC0gUmVhY3RpdmUgY29udGVudCBjb25maWd1cmF0aW9uIGZvciBidXR0b24gdGV4dC5cbiAqIEBwcm9wZXJ0eSBjb2xvciAtIFRoZSBidXR0b24gY29sb3IgKElvbmljIGNvbG9yIHN0cmluZykuXG4gKiBAcHJvcGVydHkgaWNvbiAtIEljb24gdG8gZGlzcGxheSAob3B0aW9uYWwpLlxuICogQHByb3BlcnR5IHN0YXRlIC0gQnV0dG9uIHN0YXRlIChlbmFibGVkLCBkaXNhYmxlZCwgd29ya2luZywgZXRjLikuXG4gKiBAcHJvcGVydHkgZXhwYW5kLCBmaWxsLCBzaXplLCBzaGFwZSwgaHJlZiwgdGFyZ2V0LCBkb3dubG9hZCwgaGFuZGxlciwgZXRjLiAtIFNlZSBCdXR0b25NZXRhZGF0YSBmb3IgYWxsIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9uTWV0YWRhdGEge1xuICAvKiogQXNzb2NpYXRlZCBhY3Rpb24gdHlwZSAqL1xuICBhY3Rpb25UeXBlPzogQWN0aW9uVHlwZTtcbiAgLyoqIEJ1dHRvbiBleHBhbnNpb24gKi9cbiAgZXhwYW5kPzogJ2Z1bGwnIHwgJ2Jsb2NrJztcbiAgLyoqIEFzc29jaWF0ZWQgbGluayAqL1xuICBsaW5rPzogc3RyaW5nO1xuICAvKiogQXNzb2NpYXRlZCBocmVmIGxpbmsgKi9cbiAgaHJlZj86IHN0cmluZztcbiAgLyoqIExpbmsgdGFyZ2V0ICovXG4gIHRhcmdldD86ICdfYmxhbmsnIHwgJ19zZWxmJyB8ICdfcGFyZW50JyB8ICdfdG9wJztcbiAgLyoqIERvd25sb2FkIGZpbGUgbmFtZSAqL1xuICBkb3dubG9hZD86IHN0cmluZztcbiAgLyoqIEJ1dHRvbiBjb2xvciAqL1xuICBjb2xvcjogQ29sb3I7XG4gIC8qKiBCdXR0b24gc3RhdGUgKi9cbiAgc3RhdGU6IENvbXBvbmVudFN0YXRlO1xuICAvKiogU3RhdGljIGRpc3BsYXkgdGV4dCAodGFrZXMgcHJlY2VkZW5jZSBvdmVyIHJlYWN0aXZlIGNvbnRlbnQpICovXG4gIHRleHQ/OiBzdHJpbmc7XG4gIC8qKiBSZWFjdGl2ZSBjb250ZW50IGNvbmZpZ3VyYXRpb24gZm9yIGJ1dHRvbiB0ZXh0ICovXG4gIGNvbnRlbnRLZXk/OiBzdHJpbmc7XG4gIC8qKiBDb21wb25lbnQgY2xhc3MgbmFtZSBmb3IgY29udGVudCBsb29rdXAgKHJlcXVpcmVkIHdpdGggY29udGVudEtleSkgKi9cbiAgY29udGVudENsYXNzPzogc3RyaW5nO1xuICAvKiogRmFsbGJhY2sgdGV4dCBpZiBjb250ZW50S2V5IGlzIG5vdCBmb3VuZCAqL1xuICBjb250ZW50RmFsbGJhY2s/OiBzdHJpbmc7XG4gIC8qKiBWYWx1ZXMgdG8gaW50ZXJwb2xhdGUgaW50byB0aGUgY29udGVudCBzdHJpbmcgKi9cbiAgY29udGVudEludGVycG9sYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xuICAvKiogQXNzb2NpYXRlZCBpY29uICovXG4gIGljb24/OiBJY29uTWV0YWRhO1xuICAvKiogQnV0dG9uIHNoYXBlICovXG4gIHNoYXBlPzogJ3JvdW5kJztcbiAgLyoqIEJ1dHRvbiBzaXplICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJztcbiAgLyoqIEJ1dHRvbiBmaWxsICovXG4gIGZpbGw/OiAnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JztcbiAgLyoqIEJ1dHRvbiB0eXBlICovXG4gIHR5cGU6ICdidXR0b24nIHwgJ3N1Ym1pdCcgfCAncmVzZXQnO1xuICAvKiogT3B0aW9uYWwgdG9rZW4gaWRlbnRpZmllciAqL1xuICB0b2tlbj86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHJlZmVyZW5jZSAqL1xuICByZWY/OiBhbnk7XG4gIC8qKiBBY3Rpb24gaGFuZGxlciAqL1xuICBoYW5kbGVyPzogKHZhbHVlOiBhbnkpID0+IGFueSB8IFByb21pc2U8YW55Pjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciByZWFjdGl2ZSBjb250ZW50IGluIHZhbC1idXR0b24gY29tcG9uZW50LlxuICogVXNlIHRoaXMgaW50ZXJmYWNlIHdoZW4geW91IG9ubHkgbmVlZCB0byBzcGVjaWZ5IGNvbnRlbnQtcmVsYXRlZCBwcm9wZXJ0aWVzLlxuICogVGhpcyBmb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgVGV4dENvbnRlbnRDb25maWcgZm9yIGNvbnNpc3RlbmN5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1dHRvbkNvbnRlbnRDb25maWcge1xuICBjb250ZW50S2V5OiBzdHJpbmc7XG4gIGNvbnRlbnRDbGFzczogc3RyaW5nO1xuICBjb250ZW50RmFsbGJhY2s/OiBzdHJpbmc7XG4gIGNvbnRlbnRJbnRlcnBvbGF0aW9uPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPjtcbn1cbiJdfQ==
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Firebase Configuration
3
+ *
4
+ * Configuración e inicialización de Firebase para aplicaciones Angular.
5
+ * Usa provideValtechFirebase() en el bootstrap de tu aplicación.
6
+ */
7
+ import { InjectionToken, makeEnvironmentProviders } from '@angular/core';
8
+ import { initializeApp, provideFirebaseApp } from '@angular/fire/app';
9
+ import { connectAuthEmulator, getAuth, provideAuth } from '@angular/fire/auth';
10
+ import { connectFirestoreEmulator, enableIndexedDbPersistence, getFirestore, provideFirestore, } from '@angular/fire/firestore';
11
+ import { getMessaging, provideMessaging } from '@angular/fire/messaging';
12
+ import { connectStorageEmulator, getStorage, provideStorage } from '@angular/fire/storage';
13
+ /**
14
+ * Token de inyección para la configuración de Firebase.
15
+ * Usado internamente por los servicios de Firebase.
16
+ */
17
+ export const VALTECH_FIREBASE_CONFIG = new InjectionToken('ValtechFirebaseConfig');
18
+ /**
19
+ * Provee Firebase a la aplicación Angular.
20
+ *
21
+ * @param config - Configuración de Firebase
22
+ * @returns EnvironmentProviders para usar en bootstrapApplication
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // main.ts
27
+ * import { bootstrapApplication } from '@angular/platform-browser';
28
+ * import { provideValtechFirebase } from 'valtech-components';
29
+ * import { environment } from './environments/environment';
30
+ *
31
+ * bootstrapApplication(AppComponent, {
32
+ * providers: [
33
+ * provideValtechFirebase({
34
+ * firebase: environment.firebase,
35
+ * persistence: true,
36
+ * emulator: environment.useEmulators ? {
37
+ * firestore: { host: 'localhost', port: 8080 },
38
+ * auth: { host: 'localhost', port: 9099 },
39
+ * storage: { host: 'localhost', port: 9199 },
40
+ * } : undefined,
41
+ * }),
42
+ * ],
43
+ * });
44
+ * ```
45
+ */
46
+ export function provideValtechFirebase(config) {
47
+ return makeEnvironmentProviders([
48
+ // Guardar configuración para uso en servicios
49
+ { provide: VALTECH_FIREBASE_CONFIG, useValue: config },
50
+ // Inicializar Firebase App
51
+ provideFirebaseApp(() => initializeApp(config.firebase)),
52
+ // Firestore con soporte para emuladores y persistencia
53
+ provideFirestore(() => {
54
+ const firestore = getFirestore();
55
+ // Conectar a emulador si está configurado
56
+ if (config.emulator?.firestore) {
57
+ connectFirestoreEmulator(firestore, config.emulator.firestore.host, config.emulator.firestore.port);
58
+ }
59
+ // Habilitar persistencia offline si está configurada
60
+ if (config.persistence) {
61
+ enableIndexedDbPersistence(firestore).catch((err) => {
62
+ if (err.code === 'failed-precondition') {
63
+ console.warn('[ValtechFirebase] Persistencia no disponible: múltiples pestañas abiertas');
64
+ }
65
+ else if (err.code === 'unimplemented') {
66
+ console.warn('[ValtechFirebase] Persistencia no soportada en este navegador');
67
+ }
68
+ });
69
+ }
70
+ return firestore;
71
+ }),
72
+ // Auth con soporte para emulador
73
+ provideAuth(() => {
74
+ const auth = getAuth();
75
+ // Conectar a emulador si está configurado
76
+ if (config.emulator?.auth) {
77
+ connectAuthEmulator(auth, `http://${config.emulator.auth.host}:${config.emulator.auth.port}`, { disableWarnings: true });
78
+ }
79
+ return auth;
80
+ }),
81
+ // Storage con soporte para emulador
82
+ provideStorage(() => {
83
+ const storage = getStorage();
84
+ // Conectar a emulador si está configurado
85
+ if (config.emulator?.storage) {
86
+ connectStorageEmulator(storage, config.emulator.storage.host, config.emulator.storage.port);
87
+ }
88
+ return storage;
89
+ }),
90
+ // Messaging (FCM) - solo si está soportado
91
+ provideMessaging(() => getMessaging()),
92
+ ]);
93
+ }
94
+ /**
95
+ * Verifica si los emuladores están configurados.
96
+ *
97
+ * @param config - Configuración de Firebase
98
+ * @returns true si hay al menos un emulador configurado
99
+ */
100
+ export function hasEmulators(config) {
101
+ return !!(config.emulator?.firestore || config.emulator?.auth || config.emulator?.storage);
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQXdCLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLDBCQUEwQixFQUMxQixZQUFZLEVBQ1osZ0JBQWdCLEdBQ2pCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJM0Y7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQ3ZELHVCQUF1QixDQUN4QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxNQUE2QjtJQUNsRSxPQUFPLHdCQUF3QixDQUFDO1FBQzlCLDhDQUE4QztRQUM5QyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1FBRXRELDJCQUEyQjtRQUMzQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhELHVEQUF1RDtRQUN2RCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsTUFBTSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7WUFFakMsMENBQTBDO1lBQzFDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDL0Isd0JBQXdCLENBQ3RCLFNBQVMsRUFDVCxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQzlCLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDL0IsQ0FBQztZQUNKLENBQUM7WUFFRCxxREFBcUQ7WUFDckQsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNsRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQzt3QkFDdkMsT0FBTyxDQUFDLElBQUksQ0FDViwyRUFBMkUsQ0FDNUUsQ0FBQztvQkFDSixDQUFDO3lCQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQzt3QkFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQywrREFBK0QsQ0FBQyxDQUFDO29CQUNoRixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQztRQUVGLGlDQUFpQztRQUNqQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2YsTUFBTSxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFFdkIsMENBQTBDO1lBQzFDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDMUIsbUJBQW1CLENBQ2pCLElBQUksRUFDSixVQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFDbEUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQzFCLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFRixvQ0FBb0M7UUFDcEMsY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUNsQixNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUU3QiwwQ0FBMEM7WUFDMUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixzQkFBc0IsQ0FDcEIsT0FBTyxFQUNQLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFDNUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUM3QixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUVGLDJDQUEyQztRQUMzQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUN2QyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQTZCO0lBQ3hELE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlYmFzZSBDb25maWd1cmF0aW9uXG4gKlxuICogQ29uZmlndXJhY2nDs24gZSBpbmljaWFsaXphY2nDs24gZGUgRmlyZWJhc2UgcGFyYSBhcGxpY2FjaW9uZXMgQW5ndWxhci5cbiAqIFVzYSBwcm92aWRlVmFsdGVjaEZpcmViYXNlKCkgZW4gZWwgYm9vdHN0cmFwIGRlIHR1IGFwbGljYWNpw7NuLlxuICovXG5cbmltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBJbmplY3Rpb25Ub2tlbiwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbml0aWFsaXplQXBwLCBwcm92aWRlRmlyZWJhc2VBcHAgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcCc7XG5pbXBvcnQgeyBjb25uZWN0QXV0aEVtdWxhdG9yLCBnZXRBdXRoLCBwcm92aWRlQXV0aCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXV0aCc7XG5pbXBvcnQge1xuICBjb25uZWN0RmlyZXN0b3JlRW11bGF0b3IsXG4gIGVuYWJsZUluZGV4ZWREYlBlcnNpc3RlbmNlLFxuICBnZXRGaXJlc3RvcmUsXG4gIHByb3ZpZGVGaXJlc3RvcmUsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IGdldE1lc3NhZ2luZywgcHJvdmlkZU1lc3NhZ2luZyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvbWVzc2FnaW5nJztcbmltcG9ydCB7IGNvbm5lY3RTdG9yYWdlRW11bGF0b3IsIGdldFN0b3JhZ2UsIHByb3ZpZGVTdG9yYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9zdG9yYWdlJztcblxuaW1wb3J0IHsgVmFsdGVjaEZpcmViYXNlQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVG9rZW4gZGUgaW55ZWNjacOzbiBwYXJhIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIEZpcmViYXNlLlxuICogVXNhZG8gaW50ZXJuYW1lbnRlIHBvciBsb3Mgc2VydmljaW9zIGRlIEZpcmViYXNlLlxuICovXG5leHBvcnQgY29uc3QgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VmFsdGVjaEZpcmViYXNlQ29uZmlnPihcbiAgJ1ZhbHRlY2hGaXJlYmFzZUNvbmZpZydcbik7XG5cbi8qKlxuICogUHJvdmVlIEZpcmViYXNlIGEgbGEgYXBsaWNhY2nDs24gQW5ndWxhci5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhY2nDs24gZGUgRmlyZWJhc2VcbiAqIEByZXR1cm5zIEVudmlyb25tZW50UHJvdmlkZXJzIHBhcmEgdXNhciBlbiBib290c3RyYXBBcHBsaWNhdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBtYWluLnRzXG4gKiBpbXBvcnQgeyBib290c3RyYXBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuICogaW1wb3J0IHsgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKiBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbiAqXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSh7XG4gKiAgICAgICBmaXJlYmFzZTogZW52aXJvbm1lbnQuZmlyZWJhc2UsXG4gKiAgICAgICBwZXJzaXN0ZW5jZTogdHJ1ZSxcbiAqICAgICAgIGVtdWxhdG9yOiBlbnZpcm9ubWVudC51c2VFbXVsYXRvcnMgPyB7XG4gKiAgICAgICAgIGZpcmVzdG9yZTogeyBob3N0OiAnbG9jYWxob3N0JywgcG9ydDogODA4MCB9LFxuICogICAgICAgICBhdXRoOiB7IGhvc3Q6ICdsb2NhbGhvc3QnLCBwb3J0OiA5MDk5IH0sXG4gKiAgICAgICAgIHN0b3JhZ2U6IHsgaG9zdDogJ2xvY2FsaG9zdCcsIHBvcnQ6IDkxOTkgfSxcbiAqICAgICAgIH0gOiB1bmRlZmluZWQsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVZhbHRlY2hGaXJlYmFzZShjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgLy8gR3VhcmRhciBjb25maWd1cmFjacOzbiBwYXJhIHVzbyBlbiBzZXJ2aWNpb3NcbiAgICB7IHByb3ZpZGU6IFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG5cbiAgICAvLyBJbmljaWFsaXphciBGaXJlYmFzZSBBcHBcbiAgICBwcm92aWRlRmlyZWJhc2VBcHAoKCkgPT4gaW5pdGlhbGl6ZUFwcChjb25maWcuZmlyZWJhc2UpKSxcblxuICAgIC8vIEZpcmVzdG9yZSBjb24gc29wb3J0ZSBwYXJhIGVtdWxhZG9yZXMgeSBwZXJzaXN0ZW5jaWFcbiAgICBwcm92aWRlRmlyZXN0b3JlKCgpID0+IHtcbiAgICAgIGNvbnN0IGZpcmVzdG9yZSA9IGdldEZpcmVzdG9yZSgpO1xuXG4gICAgICAvLyBDb25lY3RhciBhIGVtdWxhZG9yIHNpIGVzdMOhIGNvbmZpZ3VyYWRvXG4gICAgICBpZiAoY29uZmlnLmVtdWxhdG9yPy5maXJlc3RvcmUpIHtcbiAgICAgICAgY29ubmVjdEZpcmVzdG9yZUVtdWxhdG9yKFxuICAgICAgICAgIGZpcmVzdG9yZSxcbiAgICAgICAgICBjb25maWcuZW11bGF0b3IuZmlyZXN0b3JlLmhvc3QsXG4gICAgICAgICAgY29uZmlnLmVtdWxhdG9yLmZpcmVzdG9yZS5wb3J0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhYmlsaXRhciBwZXJzaXN0ZW5jaWEgb2ZmbGluZSBzaSBlc3TDoSBjb25maWd1cmFkYVxuICAgICAgaWYgKGNvbmZpZy5wZXJzaXN0ZW5jZSkge1xuICAgICAgICBlbmFibGVJbmRleGVkRGJQZXJzaXN0ZW5jZShmaXJlc3RvcmUpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdmYWlsZWQtcHJlY29uZGl0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAnW1ZhbHRlY2hGaXJlYmFzZV0gUGVyc2lzdGVuY2lhIG5vIGRpc3BvbmlibGU6IG3Dumx0aXBsZXMgcGVzdGHDsWFzIGFiaWVydGFzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAndW5pbXBsZW1lbnRlZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hGaXJlYmFzZV0gUGVyc2lzdGVuY2lhIG5vIHNvcG9ydGFkYSBlbiBlc3RlIG5hdmVnYWRvcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaXJlc3RvcmU7XG4gICAgfSksXG5cbiAgICAvLyBBdXRoIGNvbiBzb3BvcnRlIHBhcmEgZW11bGFkb3JcbiAgICBwcm92aWRlQXV0aCgoKSA9PiB7XG4gICAgICBjb25zdCBhdXRoID0gZ2V0QXV0aCgpO1xuXG4gICAgICAvLyBDb25lY3RhciBhIGVtdWxhZG9yIHNpIGVzdMOhIGNvbmZpZ3VyYWRvXG4gICAgICBpZiAoY29uZmlnLmVtdWxhdG9yPy5hdXRoKSB7XG4gICAgICAgIGNvbm5lY3RBdXRoRW11bGF0b3IoXG4gICAgICAgICAgYXV0aCxcbiAgICAgICAgICBgaHR0cDovLyR7Y29uZmlnLmVtdWxhdG9yLmF1dGguaG9zdH06JHtjb25maWcuZW11bGF0b3IuYXV0aC5wb3J0fWAsXG4gICAgICAgICAgeyBkaXNhYmxlV2FybmluZ3M6IHRydWUgfVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXV0aDtcbiAgICB9KSxcblxuICAgIC8vIFN0b3JhZ2UgY29uIHNvcG9ydGUgcGFyYSBlbXVsYWRvclxuICAgIHByb3ZpZGVTdG9yYWdlKCgpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBnZXRTdG9yYWdlKCk7XG5cbiAgICAgIC8vIENvbmVjdGFyIGEgZW11bGFkb3Igc2kgZXN0w6EgY29uZmlndXJhZG9cbiAgICAgIGlmIChjb25maWcuZW11bGF0b3I/LnN0b3JhZ2UpIHtcbiAgICAgICAgY29ubmVjdFN0b3JhZ2VFbXVsYXRvcihcbiAgICAgICAgICBzdG9yYWdlLFxuICAgICAgICAgIGNvbmZpZy5lbXVsYXRvci5zdG9yYWdlLmhvc3QsXG4gICAgICAgICAgY29uZmlnLmVtdWxhdG9yLnN0b3JhZ2UucG9ydFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RvcmFnZTtcbiAgICB9KSxcblxuICAgIC8vIE1lc3NhZ2luZyAoRkNNKSAtIHNvbG8gc2kgZXN0w6Egc29wb3J0YWRvXG4gICAgcHJvdmlkZU1lc3NhZ2luZygoKSA9PiBnZXRNZXNzYWdpbmcoKSksXG4gIF0pO1xufVxuXG4vKipcbiAqIFZlcmlmaWNhIHNpIGxvcyBlbXVsYWRvcmVzIGVzdMOhbiBjb25maWd1cmFkb3MuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYWNpw7NuIGRlIEZpcmViYXNlXG4gKiBAcmV0dXJucyB0cnVlIHNpIGhheSBhbCBtZW5vcyB1biBlbXVsYWRvciBjb25maWd1cmFkb1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRW11bGF0b3JzKGNvbmZpZzogVmFsdGVjaEZpcmViYXNlQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIShjb25maWcuZW11bGF0b3I/LmZpcmVzdG9yZSB8fCBjb25maWcuZW11bGF0b3I/LmF1dGggfHwgY29uZmlnLmVtdWxhdG9yPy5zdG9yYWdlKTtcbn1cbiJdfQ==